blob: 5abff0c3a6e0e666d5d861bd1d7555a36165cde3 [file] [log] [blame]
#define XBYAK_NO_OP_NAMES
#include <xbyak/xbyak.h>
/*
dump of vc
0000000000350000 F3 0F C2 05 77 00 00 00 00 cmpeqss xmm0,dword ptr [350080h]
0000000000350009 F7 05 6D 00 00 00 21 00 00 00 test dword ptr [350080h],21h
0000000000350013 0F BA 25 65 00 00 00 03 bt dword ptr [350080h],3
000000000035001B C4 E3 79 0D 05 5B 00 00 00 03 vblendpd xmm0,xmm0,xmmword ptr [350080h],3
0000000000350025 C4 E3 79 0F 05 51 00 00 00 04 vpalignr xmm0,xmm0,xmmword ptr [350080h],4
000000000035002F C4 E3 7D 19 1D 47 00 00 00 0C vextractf128 xmmword ptr [350080h],ymm3,0Ch
0000000000350039 C4 E3 75 46 05 3D 00 00 00 0D vperm2i128 ymm0,ymm1,ymmword ptr [350080h],0Dh
0000000000350043 C4 E3 79 1D 15 33 00 00 00 2C vcvtps2ph mmword ptr [350080h],xmm2,2Ch
000000000035004D C7 05 2D 00 00 00 34 12 00 00 mov dword ptr [350084h],1234h
0000000000350057 C1 25 22 00 00 00 03 shl dword ptr [350080h],3
000000000035005E D1 2D 1C 00 00 00 shr dword ptr [350080h],1
0000000000350064 48 0F A4 05 13 00 00 00 03 shld qword ptr [350080h],rax,3
000000000035006D 48 6B 05 0B 00 00 00 15 imul rax,qword ptr [350080h],15h
0000000000350075 C4 E3 FB F0 05 01 00 00 00 15 rorx rax,qword ptr [350080h],15h
000000000035007F C3 ret
0000000000350080 F0 DE BC 9A 78 56 34 12
*/
struct Code : Xbyak::CodeGenerator {
Code()
{
Xbyak::Label label;
cmpss(xmm0, ptr[rip + label], 0);
test(dword[rip + label], 33);
bt(dword[rip + label ], 3);
vblendpd(xmm0, dword[rip + label], 3);
vpalignr(xmm0, qword[rip + label], 4);
vextractf128(dword[rip + label], ymm3, 12);
vperm2i128(ymm0, ymm1, qword[rip + label], 13);
vcvtps2ph(ptr[rip + label], xmm2, 44);
mov(dword[rip + label], 0x1234);
shl(dword[rip + label], 3);
shr(dword[rip + label], 1);
shld(qword[rip + label], rax, 3);
imul(rax, qword[rip + label], 21);
rorx(rax, qword[rip + label], 21);
ret();
L(label);
dq(0x123456789abcdef0ull);
};
};
void dump(const unsigned char *p, size_t n)
{
for (int i = 0; i < n; i++) {
printf("%02x ", p[i]);
if ((i % 16) == 15) putchar('\n');
}
putchar('\n');
}
int main()
{
Code code;
void (*f)() = code.getCode<void (*)()>();
dump(code.getCode(), code.getSize());
f();
}