MCPcopy Create free account
hub / github.com/GJDuck/e9patch / sendMovBetweenRegAndStack

Function sendMovBetweenRegAndStack

src/e9tool/e9codegen.cpp:793–958  ·  view source on GitHub ↗

* Move a register to stack. */

Source from the content-addressed store, hash-verified

791 * Move a register to stack.
792 */
793static bool sendMovBetweenRegAndStack(FILE *out, Register reg, bool to_stack)
794{
795 uint8_t opcode = (to_stack? 0x7f: 0x6f);
796 uint8_t modrm = 0;
797 switch (reg)
798 {
799 case REGISTER_XMM0: case REGISTER_XMM8:
800 case REGISTER_XMM16: case REGISTER_XMM24:
801 case REGISTER_YMM0: case REGISTER_YMM8:
802 case REGISTER_YMM16: case REGISTER_YMM24:
803 case REGISTER_ZMM0: case REGISTER_ZMM8:
804 case REGISTER_ZMM16: case REGISTER_ZMM24:
805 modrm = 0x04; break;
806 case REGISTER_XMM1: case REGISTER_XMM9:
807 case REGISTER_XMM17: case REGISTER_XMM25:
808 case REGISTER_YMM1: case REGISTER_YMM9:
809 case REGISTER_YMM17: case REGISTER_YMM25:
810 case REGISTER_ZMM1: case REGISTER_ZMM9:
811 case REGISTER_ZMM17: case REGISTER_ZMM25:
812 modrm = 0x0c; break;
813 case REGISTER_XMM2: case REGISTER_XMM10:
814 case REGISTER_XMM18: case REGISTER_XMM26:
815 case REGISTER_YMM2: case REGISTER_YMM10:
816 case REGISTER_YMM18: case REGISTER_YMM26:
817 case REGISTER_ZMM2: case REGISTER_ZMM10:
818 case REGISTER_ZMM18: case REGISTER_ZMM26:
819 modrm = 0x14; break;
820 case REGISTER_XMM3: case REGISTER_XMM11:
821 case REGISTER_XMM19: case REGISTER_XMM27:
822 case REGISTER_YMM3: case REGISTER_YMM11:
823 case REGISTER_YMM19: case REGISTER_YMM27:
824 case REGISTER_ZMM3: case REGISTER_ZMM11:
825 case REGISTER_ZMM19: case REGISTER_ZMM27:
826 modrm = 0x1c; break;
827 case REGISTER_XMM4: case REGISTER_XMM12:
828 case REGISTER_XMM20: case REGISTER_XMM28:
829 case REGISTER_YMM4: case REGISTER_YMM12:
830 case REGISTER_YMM20: case REGISTER_YMM28:
831 case REGISTER_ZMM4: case REGISTER_ZMM12:
832 case REGISTER_ZMM20: case REGISTER_ZMM28:
833 modrm = 0x24; break;
834 case REGISTER_XMM5: case REGISTER_XMM13:
835 case REGISTER_XMM21: case REGISTER_XMM29:
836 case REGISTER_YMM5: case REGISTER_YMM13:
837 case REGISTER_YMM21: case REGISTER_YMM29:
838 case REGISTER_ZMM5: case REGISTER_ZMM13:
839 case REGISTER_ZMM21: case REGISTER_ZMM29:
840 modrm = 0x2c; break;
841 case REGISTER_XMM6: case REGISTER_XMM14:
842 case REGISTER_XMM22: case REGISTER_XMM30:
843 case REGISTER_YMM6: case REGISTER_YMM14:
844 case REGISTER_YMM22: case REGISTER_YMM30:
845 case REGISTER_ZMM6: case REGISTER_ZMM14:
846 case REGISTER_ZMM22: case REGISTER_ZMM30:
847 modrm = 0x34; break;
848 case REGISTER_XMM7: case REGISTER_XMM15:
849 case REGISTER_XMM23: case REGISTER_XMM31:
850 case REGISTER_YMM7: case REGISTER_YMM15:

Callers 2

sendPushFunction · 0.85
sendPopFunction · 0.85

Calls 1

fprintfFunction · 0.50

Tested by

no test coverage detected