Yeah, on an original model 3DS, mGBA will get you nowhere. You probably want something gpSP-based, since that uses a dynarec to translate code to 3DS assembly in real time, allowing much faster performance (and a fairly significant penalty to accuracy). RetroArch includes a gpSP core, but that core has been bugged and crashy/unusable for multiple years now. Somebody can hopefully suggest an older version that will work OK, I have no idea exactly when it became broken.
Another gpSP-based emulator is shinyquagsire's CitrAGB, which is no longer in active development but hopefully still works on modern setups.
If you're OK with moving away from emulation, there's a couple more options you can try. For one thing, there's GBA Virtual Console (and Virtual Console injections), which just runs GBA games natively on the 3DS in the system's backward-compatibility mode. This should have close to 100% speed and accuracy, besides the occasional game which included special hardware (like WarioWare: Twisted).
Lastly, you may want to look into Gericom's GBARunner2, which is neither an emulator nor using GBA mode, but instead a hypervisor which runs GBA games under TWL (DS/i) firmware on the 3DS. This takes advantage of the similarities between the DS and GBA hardware to run games sort of quasi-natively, thanks to a lot of pretty spectacular reverse engineering work.