* Move a register to stack. */
| 791 | * Move a register to stack. |
| 792 | */ |
| 793 | static 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: |