oh, thanks stackoverflow
turns out you can run 64-bit x86 code with 64-bit syscalls in a 32-bit process by running ljmp $0x33, $your_64bit_label
because amd reused segmentation for determining the processor's mode.
now i just need to figure out how the hell to set the code segment back to 0x23, since long jumps are not valid in 64-bit mode