rip-label-imm.cpp
1 #define XBYAK_NO_OP_NAMES 2 #include <xbyak/xbyak.h> 3 /* 4 dump of vc 5 6 00000000003A0000 F3 0F C2 05 F1 00 00 00 00 cmpeqss xmm0,dword ptr [3A00FAh] 7 00000000003A0009 F7 05 E7 00 00 00 21 00 00 00 test dword ptr [3A00FAh],21h 8 00000000003A0013 0F BA 25 DF 00 00 00 03 bt dword ptr [3A00FAh],3 9 00000000003A001B C4 E3 79 0D 05 D5 00 00 00 03 vblendpd xmm0,xmm0,xmmword ptr [3A00FAh],3 10 00000000003A0025 C4 E3 79 0F 05 CB 00 00 00 04 vpalignr xmm0,xmm0,xmmword ptr [3A00FAh],4 11 00000000003A002F C4 E3 7D 19 1D C1 00 00 00 0C vextractf128 xmmword ptr [3A00FAh],ymm3,0Ch 12 00000000003A0039 C4 E3 75 46 05 B7 00 00 00 0D vperm2i128 ymm0,ymm1,ymmword ptr [3A00FAh],0Dh 13 00000000003A0043 C4 E3 79 1D 15 AD 00 00 00 2C vcvtps2ph mmword ptr [3A00FAh],xmm2,2Ch 14 00000000003A004D C7 05 A3 00 00 00 34 12 00 00 mov dword ptr [3A00FAh],1234h 15 00000000003A0057 C1 25 9C 00 00 00 03 shl dword ptr [3A00FAh],3 16 00000000003A005E D1 2D 96 00 00 00 shr dword ptr [3A00FAh],1 17 00000000003A0064 48 0F A4 05 8D 00 00 00 03 shld qword ptr [3A00FAh],rax,3 18 00000000003A006D 48 6B 05 85 00 00 00 15 imul rax,qword ptr [3A00FAh],15h 19 00000000003A0075 C4 E3 FB F0 05 7B 00 00 00 15 rorx rax,qword ptr [3A00FAh],15h 20 00000000003A007F F7 05 71 00 00 00 05 00 00 00 test dword ptr [3A00FAh],5 21 00000000003A0089 66 48 0F 3A 16 05 66 00 00 00 03 pextrq qword ptr [3A00FAh],xmm0,3 22 00000000003A0094 66 48 0F 3A 22 15 5B 00 00 00 05 pinsrq xmm2,qword ptr [3A00FAh],5 23 00000000003A009F 66 0F 3A 15 0D 51 00 00 00 04 pextrw word ptr [3A00FAh],xmm1,4 24 00000000003A00A9 81 15 47 00 00 00 45 23 01 00 adc dword ptr [3A00FAh],12345h 25 00000000003A00B3 0F BA 25 3F 00 00 00 34 bt dword ptr [3A00FAh],34h 26 00000000003A00BB 66 0F BA 3D 36 00 00 00 34 btc word ptr [3A00FAh],34h 27 00000000003A00C4 0F BA 35 2E 00 00 00 34 btr dword ptr [3A00FAh],34h 28 00000000003A00CC C1 15 27 00 00 00 04 rcl dword ptr [3A00FAh],4 29 00000000003A00D3 48 0F A4 05 1E 00 00 00 04 shld qword ptr [3A00FAh],rax,4 30 00000000003A00DC 0F 3A 0F 05 15 00 00 00 04 palignr mm0,mmword ptr [3A00FAh],4 31 00000000003A00E5 66 0F 3A DF 1D 0B 00 00 00 04 aeskeygenassist xmm3,xmmword ptr [3A00FAh],4 32 00000000003A00EF C4 E3 79 60 15 01 00 00 00 07 vpcmpestrm xmm2,xmmword ptr [3A00FAh],7 33 00000000003A00F9 C3 ret 34 00000000003A00FA F0 DE BC 9A 78 56 34 12 35 */ 36 struct Code : Xbyak::CodeGenerator { 37 Code() 38 { 39 Xbyak::Label label; 40 cmpss(xmm0, ptr[rip + label], 0); 41 test(dword[rip + label], 33); 42 bt(dword[rip + label ], 3); 43 vblendpd(xmm0, xmm0, dword[rip + label], 3); 44 vpalignr(xmm0, xmm0, qword[rip + label], 4); 45 vextractf128(dword[rip + label], ymm3, 12); 46 vperm2i128(ymm0, ymm1, qword[rip + label], 13); 47 vcvtps2ph(ptr[rip + label], xmm2, 44); 48 mov(dword[rip + label], 0x1234); 49 shl(dword[rip + label], 3); 50 shr(dword[rip + label], 1); 51 shld(qword[rip + label], rax, 3); 52 imul(rax, qword[rip + label], 21); 53 rorx(rax, qword[rip + label], 21); 54 test(dword[rip + label], 5); 55 pextrq(ptr[rip + label], xmm0, 3); 56 pinsrq(xmm2, ptr[rip + label], 5); 57 pextrw(ptr[rip + label], xmm1, 4); 58 adc(dword[rip + label], 0x12345); 59 bt(byte[rip + label], 0x34); 60 btc(word[rip + label], 0x34); 61 btr(dword[rip + label], 0x34); 62 rcl(dword[rip + label], 4); 63 shld(qword[rip + label], rax, 4); 64 palignr(mm0, ptr[rip + label], 4); 65 aeskeygenassist(xmm3, ptr[rip + label], 4); 66 vpcmpestrm(xmm2, ptr[rip + label], 7); 67 ret(); 68 L(label); 69 dq(0x123456789abcdef0ull); 70 }; 71 }; 72 73 void dump(const unsigned char *p, size_t n) 74 { 75 for (int i = 0; i < n; i++) { 76 printf("%02x ", p[i]); 77 if ((i % 16) == 15) putchar('\n'); 78 } 79 putchar('\n'); 80 } 81 82 int main() 83 { 84 Code code; 85 void (*f)() = code.getCode<void (*)()>(); 86 dump(code.getCode(), code.getSize()); 87 f(); 88 }