changed register allocation, and way x86 backend handles special opcodes