The assembly trampoline in efi_rt_arch_call had a stack alignment bug for 5-argument EFI calls (GetVariable, SetVariable):
it computed max(N,4)*8 = 40 bytes of stack space, leaving RSP 8-byte aligned instead of the 16 required by the MS x64 ABI.
Firmware compiled with SSE (for example coreboot/EDK2) uses MOVAPS for callee-saved XMM register spills, causing #GP on every GetVariable/SetVariable call.
Replaced the assembly ABI conversion with efi_rt_dispatch(). The assembly trampoline is kept only for fault recovery, delegating the actual call to the C function.