Lines Matching defs:src
45 #include "src/base/export-template.h"
46 #include "src/codegen/assembler.h"
47 #include "src/codegen/cpu-features.h"
48 #include "src/codegen/label.h"
49 #include "src/codegen/x64/constants-x64.h"
50 #include "src/codegen/x64/fma-instr.h"
51 #include "src/codegen/x64/register-x64.h"
52 #include "src/codegen/x64/sse-instr.h"
53 #include "src/objects/smi.h"
55 #include "src/diagnostics/unwinding-info-win64.h"
541 void pushq(Register src);
542 void pushq(Operand src);
552 void movb(Register dst, Operand src);
554 void movb(Operand dst, Register src);
559 void movw(Register dst, Operand src);
560 void movw(Operand dst, Register src);
565 void movl(Operand dst, Label* src);
588 void movsxbl(Register dst, Register src);
589 void movsxbl(Register dst, Operand src);
590 void movsxbq(Register dst, Register src);
591 void movsxbq(Register dst, Operand src);
592 void movsxwl(Register dst, Register src);
593 void movsxwl(Register dst, Operand src);
594 void movsxwq(Register dst, Register src);
595 void movsxwq(Register dst, Operand src);
596 void movsxlq(Register dst, Register src);
597 void movsxlq(Register dst, Operand src);
615 void cmovq(Condition cc, Register dst, Register src);
616 void cmovq(Condition cc, Register dst, Operand src);
617 void cmovl(Condition cc, Register dst, Register src);
618 void cmovl(Condition cc, Register dst, Operand src);
620 void cmpb(Register dst, Immediate src) {
621 immediate_arithmetic_op_8(0x7, dst, src);
624 void cmpb_al(Immediate src);
626 void cmpb(Register dst, Register src) { arithmetic_op_8(0x3A, dst, src); }
628 void cmpb(Register dst, Operand src) { arithmetic_op_8(0x3A, dst, src); }
630 void cmpb(Operand dst, Register src) { arithmetic_op_8(0x38, src, dst); }
632 void cmpb(Operand dst, Immediate src) {
633 immediate_arithmetic_op_8(0x7, dst, src);
636 void cmpw(Operand dst, Immediate src) {
637 immediate_arithmetic_op_16(0x7, dst, src);
640 void cmpw(Register dst, Immediate src) {
641 immediate_arithmetic_op_16(0x7, dst, src);
644 void cmpw(Register dst, Operand src) { arithmetic_op_16(0x3B, dst, src); }
646 void cmpw(Register dst, Register src) { arithmetic_op_16(0x3B, dst, src); }
648 void cmpw(Operand dst, Register src) { arithmetic_op_16(0x39, src, dst); }
654 void andb(Register dst, Immediate src) {
655 immediate_arithmetic_op_8(0x4, dst, src);
667 void xaddb(Operand dst, Register src);
668 void xaddw(Operand dst, Register src);
669 void xaddl(Operand dst, Register src);
670 void xaddq(Operand dst, Register src);
681 void cmpxchgb(Operand dst, Register src);
682 void cmpxchgw(Operand dst, Register src);
689 // Multiply eax by src, put the result in edx:eax.
690 void mull(Register src);
691 void mull(Operand src);
692 // Multiply rax by src, put the result in rdx:rax.
693 void mulq(Register src);
722 // Shifts dst:src left by cl bits, affecting only dst.
723 void shld(Register dst, Register src);
725 // Shifts src:dst right by cl bits, affecting only dst.
726 void shrd(Register dst, Register src);
731 void subb(Register dst, Immediate src) {
732 immediate_arithmetic_op_8(0x5, dst, src);
737 void testb(Register dst, Register src);
742 void testw(Register dst, Register src);
750 void btq(Operand dst, Register src);
751 void btsq(Operand dst, Register src);
754 void bsrq(Register dst, Register src);
755 void bsrq(Register dst, Operand src);
756 void bsrl(Register dst, Register src);
757 void bsrl(Register dst, Operand src);
758 void bsfq(Register dst, Register src);
759 void bsfq(Register dst, Operand src);
760 void bsfl(Register dst, Register src);
761 void bsfl(Register dst, Operand src);
774 void pblendw(XMMRegister dst, Operand src, uint8_t mask);
775 void pblendw(XMMRegister dst, XMMRegister src, uint8_t mask);
776 void palignr(XMMRegister dst, Operand src, uint8_t mask);
777 void palignr(XMMRegister dst, XMMRegister src, uint8_t mask);
823 void jmp(Operand src);
905 void ucomiss(XMMRegister dst, XMMRegister src);
906 void ucomiss(XMMRegister dst, Operand src);
907 void movaps(XMMRegister dst, XMMRegister src);
908 void movaps(XMMRegister dst, Operand src);
914 void movss(XMMRegister dst, XMMRegister src);
916 void movss(XMMRegister dst, Operand src);
917 void movss(Operand dst, XMMRegister src);
919 void movlps(XMMRegister dst, Operand src);
920 void movlps(Operand dst, XMMRegister src);
922 void movhps(XMMRegister dst, Operand src);
923 void movhps(Operand dst, XMMRegister src);
925 void shufps(XMMRegister dst, XMMRegister src, byte imm8);
927 void cvttss2si(Register dst, Operand src);
928 void cvttss2si(Register dst, XMMRegister src);
929 void cvtlsi2ss(XMMRegister dst, Operand src);
930 void cvtlsi2ss(XMMRegister dst, Register src);
932 void movmskps(Register dst, XMMRegister src);
944 void sse_instr(XMMRegister dst, XMMRegister src, byte escape, byte opcode);
945 void sse_instr(XMMRegister dst, Operand src, byte escape, byte opcode);
947 void instruction(XMMRegister dst, XMMRegister src) { \
948 sse_instr(dst, src, 0x##escape, 0x##opcode); \
950 void instruction(XMMRegister dst, Operand src) { \
951 sse_instr(dst, src, 0x##escape, 0x##opcode); \
959 void sse2_instr(XMMRegister dst, XMMRegister src, byte prefix, byte escape,
961 void sse2_instr(XMMRegister dst, Operand src, byte prefix, byte escape,
964 void instruction(XMMRegister dst, XMMRegister src) { \
965 sse2_instr(dst, src, 0x##prefix, 0x##escape, 0x##opcode); \
967 void instruction(XMMRegister dst, Operand src) { \
968 sse2_instr(dst, src, 0x##prefix, 0x##escape, 0x##opcode); \
1039 void v##instruction(XMMRegister dst, XMMRegister src) { \
1040 vpd(0x##opcode, dst, xmm0, src); \
1042 void v##instruction(XMMRegister dst, Operand src) { \
1043 vpd(0x##opcode, dst, xmm0, src); \
1050 void lddqu(XMMRegister dst, Operand src);
1051 void movddup(XMMRegister dst, Operand src);
1052 void movddup(XMMRegister dst, XMMRegister src);
1053 void movshdup(XMMRegister dst, XMMRegister src);
1056 void ssse3_instr(XMMRegister dst, XMMRegister src, byte prefix, byte escape1,
1058 void ssse3_instr(XMMRegister dst, Operand src, byte prefix, byte escape1,
1063 void instruction(XMMRegister dst, XMMRegister src) { \
1064 ssse3_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode); \
1066 void instruction(XMMRegister dst, Operand src) { \
1067 ssse3_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode); \
1075 void sse4_instr(Register dst, XMMRegister src, byte prefix, byte escape1,
1077 void sse4_instr(Operand dst, XMMRegister src, byte prefix, byte escape1,
1079 void sse4_instr(XMMRegister dst, Register src, byte prefix, byte escape1,
1081 void sse4_instr(XMMRegister dst, XMMRegister src, byte prefix, byte escape1,
1083 void sse4_instr(XMMRegister dst, Operand src, byte prefix, byte escape1,
1087 void instruction(XMMRegister dst, XMMRegister src) { \
1088 sse4_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode); \
1090 void instruction(XMMRegister dst, Operand src) { \
1091 sse4_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode); \
1103 void instruction(Register dst, XMMRegister src, uint8_t imm8) { \
1104 sse4_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode, \
1107 void instruction(Operand dst, XMMRegister src, uint8_t imm8) { \
1108 sse4_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode, \
1116 void sse4_2_instr(XMMRegister dst, XMMRegister src, byte prefix, byte escape1,
1118 void sse4_2_instr(XMMRegister dst, Operand src, byte prefix, byte escape1,
1122 void instruction(XMMRegister dst, XMMRegister src) { \
1123 sse4_2_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode); \
1125 void instruction(XMMRegister dst, Operand src) { \
1126 sse4_2_instr(dst, src, 0x##prefix, 0x##escape1, 0x##escape2, 0x##opcode); \
1156 void v##instruction(XMMRegister dst, XMMRegister src) { \
1157 vinstr(0x##opcode, dst, xmm0, src, k##prefix, k##escape1##escape2, kW0); \
1159 void v##instruction(XMMRegister dst, Operand src) { \
1160 vinstr(0x##opcode, dst, xmm0, src, k##prefix, k##escape1##escape2, kW0); \
1162 void v##instruction(YMMRegister dst, YMMRegister src) { \
1163 vinstr(0x##opcode, dst, ymm0, src, k##prefix, k##escape1##escape2, kW0); \
1165 void v##instruction(YMMRegister dst, Operand src) { \
1166 vinstr(0x##opcode, dst, ymm0, src, k##prefix, k##escape1##escape2, kW0); \
1213 void v##instruction(XMMRegister dst, XMMRegister src) { \
1214 vinstr(0x##opcode, dst, xmm0, src, k##prefix, k##escape1##escape2, kW0); \
1216 void v##instruction(XMMRegister dst, Operand src) { \
1217 vinstr(0x##opcode, dst, xmm0, src, k##prefix, k##escape1##escape2, kW0); \
1223 void v##instruction(Register dst, XMMRegister src, uint8_t imm8) { \
1225 vinstr(0x##opcode, src, xmm0, idst, k##prefix, k##escape1##escape2, kW0); \
1228 void v##instruction(Operand dst, XMMRegister src, uint8_t imm8) { \
1229 vinstr(0x##opcode, src, xmm0, dst, k##prefix, k##escape1##escape2, kW0); \
1236 void movd(XMMRegister dst, Register src);
1237 void movd(XMMRegister dst, Operand src);
1238 void movd(Register dst, XMMRegister src);
1239 void movq(XMMRegister dst, Register src);
1240 void movq(XMMRegister dst, Operand src);
1241 void movq(Register dst, XMMRegister src);
1242 void movq(XMMRegister dst, XMMRegister src);
1248 void movsd(XMMRegister dst, XMMRegister src);
1250 void movsd(Operand dst, XMMRegister src);
1251 void movsd(XMMRegister dst, Operand src);
1253 void movdqa(Operand dst, XMMRegister src);
1254 void movdqa(XMMRegister dst, Operand src);
1255 void movdqa(XMMRegister dst, XMMRegister src);
1257 void movdqu(Operand dst, XMMRegister src);
1258 void movdqu(XMMRegister dst, Operand src);
1259 void movdqu(XMMRegister dst, XMMRegister src);
1261 void movapd(XMMRegister dst, XMMRegister src);
1262 void movupd(XMMRegister dst, Operand src);
1263 void movupd(Operand dst, XMMRegister src);
1265 void cvtdq2pd(XMMRegister dst, XMMRegister src);
1267 void cvttsd2si(Register dst, Operand src);
1268 void cvttsd2si(Register dst, XMMRegister src);
1269 void cvttss2siq(Register dst, XMMRegister src);
1270 void cvttss2siq(Register dst, Operand src);
1271 void cvttsd2siq(Register dst, XMMRegister src);
1272 void cvttsd2siq(Register dst, Operand src);
1273 void cvttps2dq(XMMRegister dst, Operand src);
1274 void cvttps2dq(XMMRegister dst, XMMRegister src);
1276 void cvtlsi2sd(XMMRegister dst, Operand src);
1277 void cvtlsi2sd(XMMRegister dst, Register src);
1279 void cvtqsi2ss(XMMRegister dst, Operand src);
1280 void cvtqsi2ss(XMMRegister dst, Register src);
1282 void cvtqsi2sd(XMMRegister dst, Operand src);
1283 void cvtqsi2sd(XMMRegister dst, Register src);
1285 void cvtsd2si(Register dst, XMMRegister src);
1286 void cvtsd2siq(Register dst, XMMRegister src);
1288 void haddps(XMMRegister dst, XMMRegister src);
1289 void haddps(XMMRegister dst, Operand src);
1291 void cmpeqsd(XMMRegister dst, XMMRegister src);
1292 void cmpeqss(XMMRegister dst, XMMRegister src);
1293 void cmpltsd(XMMRegister dst, XMMRegister src);
1295 void movmskpd(Register dst, XMMRegister src);
1297 void pmovmskb(Register dst, XMMRegister src);
1299 void pinsrw(XMMRegister dst, Register src, uint8_t imm8);
1300 void pinsrw(XMMRegister dst, Operand src, uint8_t imm8);
1303 void insertps(XMMRegister dst, XMMRegister src, byte imm8);
1304 void insertps(XMMRegister dst, Operand src, byte imm8);
1305 void pextrq(Register dst, XMMRegister src, int8_t imm8);
1306 void pinsrb(XMMRegister dst, Register src, uint8_t imm8);
1307 void pinsrb(XMMRegister dst, Operand src, uint8_t imm8);
1308 void pinsrd(XMMRegister dst, Register src, uint8_t imm8);
1309 void pinsrd(XMMRegister dst, Operand src, uint8_t imm8);
1310 void pinsrq(XMMRegister dst, Register src, uint8_t imm8);
1311 void pinsrq(XMMRegister dst, Operand src, uint8_t imm8);
1313 void roundss(XMMRegister dst, XMMRegister src, RoundingMode mode);
1314 void roundss(XMMRegister dst, Operand src, RoundingMode mode);
1315 void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode);
1316 void roundsd(XMMRegister dst, Operand src, RoundingMode mode);
1317 void roundps(XMMRegister dst, XMMRegister src, RoundingMode mode);
1318 void roundpd(XMMRegister dst, XMMRegister src, RoundingMode mode);
1320 void cmpps(XMMRegister dst, XMMRegister src, int8_t cmp);
1321 void cmpps(XMMRegister dst, Operand src, int8_t cmp);
1322 void cmppd(XMMRegister dst, XMMRegister src, int8_t cmp);
1323 void cmppd(XMMRegister dst, Operand src, int8_t cmp);
1326 void instr##ps(XMMRegister dst, XMMRegister src) { cmpps(dst, src, imm8); } \
1327 void instr##ps(XMMRegister dst, Operand src) { cmpps(dst, src, imm8); } \
1328 void instr##pd(XMMRegister dst, XMMRegister src) { cmppd(dst, src, imm8); } \
1329 void instr##pd(XMMRegister dst, Operand src) { cmppd(dst, src, imm8); }
1341 void movups(XMMRegister dst, XMMRegister src);
1342 void movups(XMMRegister dst, Operand src);
1343 void movups(Operand dst, XMMRegister src);
1345 void pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle);
1346 void pshufd(XMMRegister dst, Operand src, uint8_t shuffle);
1347 void pshufhw(XMMRegister dst, XMMRegister src, uint8_t shuffle);
1348 void pshufhw(XMMRegister dst, Operand src, uint8_t shuffle);
1349 void pshuflw(XMMRegister dst, XMMRegister src, uint8_t shuffle);
1350 void pshuflw(XMMRegister dst, Operand src, uint8_t shuffle);
1352 void movhlps(XMMRegister dst, XMMRegister src) {
1353 sse_instr(dst, src, 0x0F, 0x12);
1355 void movlhps(XMMRegister dst, XMMRegister src) {
1356 sse_instr(dst, src, 0x0F, 0x16);
1360 void vmovddup(XMMRegister dst, XMMRegister src);
1361 void vmovddup(XMMRegister dst, Operand src);
1362 void vmovddup(YMMRegister dst, YMMRegister src);
1363 void vmovddup(YMMRegister dst, Operand src);
1364 void vmovshdup(XMMRegister dst, XMMRegister src);
1365 void vmovshdup(YMMRegister dst, YMMRegister src);
1366 void vbroadcastss(XMMRegister dst, Operand src);
1367 void vbroadcastss(XMMRegister dst, XMMRegister src);
1368 void vbroadcastss(YMMRegister dst, Operand src);
1369 void vbroadcastss(YMMRegister dst, XMMRegister src);
1388 void vmovd(XMMRegister dst, Register src);
1389 void vmovd(XMMRegister dst, Operand src);
1390 void vmovd(Register dst, XMMRegister src);
1391 void vmovq(XMMRegister dst, Register src);
1392 void vmovq(XMMRegister dst, Operand src);
1393 void vmovq(Register dst, XMMRegister src);
1398 void vmovsd(XMMRegister dst, Operand src) { vsd(0x10, dst, xmm0, src); }
1399 void vmovsd(Operand dst, XMMRegister src) { vsd(0x11, src, xmm0, dst); }
1400 void vmovdqa(XMMRegister dst, Operand src);
1401 void vmovdqa(XMMRegister dst, XMMRegister src);
1402 void vmovdqa(YMMRegister dst, Operand src);
1403 void vmovdqa(YMMRegister dst, YMMRegister src);
1404 void vmovdqu(XMMRegister dst, Operand src);
1405 void vmovdqu(Operand dst, XMMRegister src);
1406 void vmovdqu(XMMRegister dst, XMMRegister src);
1407 void vmovdqu(YMMRegister dst, Operand src);
1408 void vmovdqu(Operand dst, YMMRegister src);
1409 void vmovdqu(YMMRegister dst, YMMRegister src);
1412 void vmovlps(Operand dst, XMMRegister src);
1415 void vmovhps(Operand dst, XMMRegister src);
1474 void v##instr(XMMRegister dst, XMMRegister src, byte imm8) { \
1476 vinstr(0x##opcode, ext_reg, dst, src, k##prefix, k##escape, kWIG); \
1488 void vcvtdq2pd(XMMRegister dst, XMMRegister src) {
1489 vinstr(0xe6, dst, xmm0, src, kF3, k0F, kWIG);
1491 void vcvttps2dq(XMMRegister dst, XMMRegister src) {
1492 vinstr(0x5b, dst, xmm0, src, kF3, k0F, kWIG);
1522 void vcvttss2si(Register dst, XMMRegister src) {
1524 vinstr(0x2c, idst, xmm0, src, kF3, k0F, kW0);
1526 void vcvttss2si(Register dst, Operand src) {
1528 vinstr(0x2c, idst, xmm0, src, kF3, k0F, kW0);
1530 void vcvttsd2si(Register dst, XMMRegister src) {
1532 vinstr(0x2c, idst, xmm0, src, kF2, k0F, kW0);
1534 void vcvttsd2si(Register dst, Operand src) {
1536 vinstr(0x2c, idst, xmm0, src, kF2, k0F, kW0);
1538 void vcvttss2siq(Register dst, XMMRegister src) {
1540 vinstr(0x2c, idst, xmm0, src, kF3, k0F, kW1);
1542 void vcvttss2siq(Register dst, Operand src) {
1544 vinstr(0x2c, idst, xmm0, src, kF3, k0F, kW1);
1546 void vcvttsd2siq(Register dst, XMMRegister src) {
1548 vinstr(0x2c, idst, xmm0, src, kF2, k0F, kW1);
1550 void vcvttsd2siq(Register dst, Operand src) {
1552 vinstr(0x2c, idst, xmm0, src, kF2, k0F, kW1);
1554 void vcvtsd2si(Register dst, XMMRegister src) {
1556 vinstr(0x2d, idst, xmm0, src, kF2, k0F, kW0);
1578 void vroundps(XMMRegister dst, XMMRegister src, RoundingMode mode) {
1579 vinstr(0x08, dst, xmm0, src, k66, k0F3A, kWIG);
1582 void vroundps(YMMRegister dst, YMMRegister src, RoundingMode mode) {
1583 vinstr(0x08, dst, ymm0, src, k66, k0F3A, kWIG, AVX);
1586 void vroundpd(XMMRegister dst, XMMRegister src, RoundingMode mode) {
1587 vinstr(0x09, dst, xmm0, src, k66, k0F3A, kWIG);
1590 void vroundpd(YMMRegister dst, YMMRegister src, RoundingMode mode) {
1591 vinstr(0x09, dst, ymm0, src, k66, k0F3A, kWIG, AVX);
1603 void vmovss(XMMRegister dst, Operand src) { vss(0x10, dst, xmm0, src); }
1604 void vmovss(Operand dst, XMMRegister src) { vss(0x11, src, xmm0, dst); }
1605 void vucomiss(XMMRegister dst, XMMRegister src);
1606 void vucomiss(XMMRegister dst, Operand src);
1617 void vmovaps(XMMRegister dst, XMMRegister src) { vps(0x28, dst, xmm0, src); }
1618 void vmovaps(YMMRegister dst, YMMRegister src) { vps(0x28, dst, ymm0, src); }
1619 void vmovaps(XMMRegister dst, Operand src) { vps(0x28, dst, xmm0, src); }
1620 void vmovaps(YMMRegister dst, Operand src) { vps(0x28, dst, ymm0, src); }
1621 void vmovups(XMMRegister dst, XMMRegister src) { vps(0x10, dst, xmm0, src); }
1622 void vmovups(YMMRegister dst, YMMRegister src) { vps(0x10, dst, ymm0, src); }
1623 void vmovups(XMMRegister dst, Operand src) { vps(0x10, dst, xmm0, src); }
1624 void vmovups(YMMRegister dst, Operand src) { vps(0x10, dst, ymm0, src); }
1625 void vmovups(Operand dst, XMMRegister src) { vps(0x11, src, xmm0, dst); }
1626 void vmovups(Operand dst, YMMRegister src) { vps(0x11, src, ymm0, dst); }
1627 void vmovapd(XMMRegister dst, XMMRegister src) { vpd(0x28, dst, xmm0, src); }
1628 void vmovapd(YMMRegister dst, YMMRegister src) { vpd(0x28, dst, ymm0, src); }
1629 void vmovupd(XMMRegister dst, Operand src) { vpd(0x10, dst, xmm0, src); }
1630 void vmovupd(YMMRegister dst, Operand src) { vpd(0x10, dst, ymm0, src); }
1631 void vmovupd(Operand dst, XMMRegister src) { vpd(0x11, src, xmm0, dst); }
1632 void vmovupd(Operand dst, YMMRegister src) { vpd(0x11, src, ymm0, dst); }
1633 void vmovmskps(Register dst, XMMRegister src) {
1635 vps(0x50, idst, xmm0, src);
1637 void vmovmskpd(Register dst, XMMRegister src) {
1639 vpd(0x50, idst, xmm0, src);
1641 void vpmovmskb(Register dst, XMMRegister src);
1642 void vcmpeqss(XMMRegister dst, XMMRegister src) {
1643 vss(0xC2, dst, dst, src);
1646 void vcmpeqsd(XMMRegister dst, XMMRegister src) {
1647 vsd(0xC2, dst, dst, src);
1715 void vlddqu(XMMRegister dst, Operand src) {
1716 vinstr(0xF0, dst, xmm0, src, kF2, k0F, kWIG);
1727 void vpextrq(Register dst, XMMRegister src, int8_t imm8) {
1729 vinstr(0x16, src, xmm0, idst, k66, k0F3A, kW1);
1769 void vpshufd(XMMRegister dst, XMMRegister src, uint8_t imm8) {
1770 vinstr(0x70, dst, xmm0, src, k66, k0F, kWIG);
1773 void vpshufd(YMMRegister dst, YMMRegister src, uint8_t imm8) {
1774 vinstr(0x70, dst, ymm0, src, k66, k0F, kWIG);
1777 void vpshufd(XMMRegister dst, Operand src, uint8_t imm8) {
1778 vinstr(0x70, dst, xmm0, src, k66, k0F, kWIG);
1781 void vpshufd(YMMRegister dst, Operand src, uint8_t imm8) {
1782 vinstr(0x70, dst, ymm0, src, k66, k0F, kWIG);
1785 void vpshuflw(XMMRegister dst, XMMRegister src, uint8_t imm8) {
1786 vinstr(0x70, dst, xmm0, src, kF2, k0F, kWIG);
1789 void vpshuflw(YMMRegister dst, YMMRegister src, uint8_t imm8) {
1790 vinstr(0x70, dst, ymm0, src, kF2, k0F, kWIG);
1793 void vpshuflw(XMMRegister dst, Operand src, uint8_t imm8) {
1794 vinstr(0x70, dst, xmm0, src, kF2, k0F, kWIG);
1797 void vpshuflw(YMMRegister dst, Operand src, uint8_t imm8) {
1798 vinstr(0x70, dst, ymm0, src, kF2, k0F, kWIG);
1801 void vpshufhw(XMMRegister dst, XMMRegister src, uint8_t imm8) {
1802 vinstr(0x70, dst, xmm0, src, kF3, k0F, kWIG);
1805 void vpshufhw(YMMRegister dst, YMMRegister src, uint8_t imm8) {
1806 vinstr(0x70, dst, ymm0, src, kF3, k0F, kWIG);
1809 void vpshufhw(XMMRegister dst, Operand src, uint8_t imm8) {
1810 vinstr(0x70, dst, xmm0, src, kF3, k0F, kWIG);
1813 void vpshufhw(YMMRegister dst, Operand src, uint8_t imm8) {
1814 vinstr(0x70, dst, ymm0, src, kF3, k0F, kWIG);
1872 void instr(Reg dst, Op src) { \
1873 vinstr(0x##opcode, dst, xmm0, src, k##prefix, k##escape1##escape2, kW0, \
1904 void blsiq(Register dst, Register src) { bmi1q(0xf3, rbx, dst, src); }
1905 void blsiq(Register dst, Operand src) { bmi1q(0xf3, rbx, dst, src); }
1906 void blsil(Register dst, Register src) { bmi1l(0xf3, rbx, dst, src); }
1907 void blsil(Register dst, Operand src) { bmi1l(0xf3, rbx, dst, src); }
1908 void blsmskq(Register dst, Register src) { bmi1q(0xf3, rdx, dst, src); }
1909 void blsmskq(Register dst, Operand src) { bmi1q(0xf3, rdx, dst, src); }
1910 void blsmskl(Register dst, Register src) { bmi1l(0xf3, rdx, dst, src); }
1911 void blsmskl(Register dst, Operand src) { bmi1l(0xf3, rdx, dst, src); }
1912 void blsrq(Register dst, Register src) { bmi1q(0xf3, rcx, dst, src); }
1913 void blsrq(Register dst, Operand src) { bmi1q(0xf3, rcx, dst, src); }
1914 void blsrl(Register dst, Register src) { bmi1l(0xf3, rcx, dst, src); }
1915 void blsrl(Register dst, Operand src) { bmi1l(0xf3, rcx, dst, src); }
1916 void tzcntq(Register dst, Register src);
1917 void tzcntq(Register dst, Operand src);
1918 void tzcntl(Register dst, Register src);
1919 void tzcntl(Register dst, Operand src);
1921 void lzcntq(Register dst, Register src);
1922 void lzcntq(Register dst, Operand src);
1923 void lzcntl(Register dst, Register src);
1924 void lzcntl(Register dst, Operand src);
1926 void popcntq(Register dst, Register src);
1927 void popcntq(Register dst, Operand src);
1928 void popcntl(Register dst, Register src);
1929 void popcntl(Register dst, Operand src);
1943 void mulxq(Register dst1, Register dst2, Register src) {
1944 bmi2q(kF2, 0xf6, dst1, dst2, src);
1946 void mulxq(Register dst1, Register dst2, Operand src) {
1947 bmi2q(kF2, 0xf6, dst1, dst2, src);
1949 void mulxl(Register dst1, Register dst2, Register src) {
1950 bmi2l(kF2, 0xf6, dst1, dst2, src);
1952 void mulxl(Register dst1, Register dst2, Operand src) {
1953 bmi2l(kF2, 0xf6, dst1, dst2, src);
2015 void rorxq(Register dst, Register src, byte imm8);
2016 void rorxq(Register dst, Operand src, byte imm8);
2017 void rorxl(Register dst, Register src, byte imm8);
2018 void rorxl(Register dst, Operand src, byte imm8);
2271 void emit_sse_operand(XMMRegister dst, XMMRegister src);
2274 void emit_sse_operand(XMMRegister dst, Register src);
2275 void emit_sse_operand(Register dst, XMMRegister src);
2290 void immediate_arithmetic_op_8(byte subcode, Register dst, Immediate src);
2291 void immediate_arithmetic_op_8(byte subcode, Operand dst, Immediate src);
2293 void immediate_arithmetic_op_16(byte subcode, Register dst, Immediate src);
2294 void immediate_arithmetic_op_16(byte subcode, Operand dst, Immediate src);
2296 void immediate_arithmetic_op(byte subcode, Register dst, Immediate src,
2298 void immediate_arithmetic_op(byte subcode, Operand dst, Immediate src,
2318 void emit_add(Register dst, Register src, int size) {
2319 arithmetic_op(0x03, dst, src, size);
2322 void emit_add(Register dst, Immediate src, int size) {
2323 immediate_arithmetic_op(0x0, dst, src, size);
2326 void emit_add(Register dst, Operand src, int size) {
2327 arithmetic_op(0x03, dst, src, size);
2330 void emit_add(Operand dst, Register src, int size) {
2331 arithmetic_op(0x1, src, dst, size);
2334 void emit_add(Operand dst, Immediate src, int size) {
2335 immediate_arithmetic_op(0x0, dst, src, size);
2338 void emit_and(Register dst, Register src, int size) {
2339 arithmetic_op(0x23, dst, src, size);
2342 void emit_and(Register dst, Operand src, int size) {
2343 arithmetic_op(0x23, dst, src, size);
2346 void emit_and(Operand dst, Register src, int size) {
2347 arithmetic_op(0x21, src, dst, size);
2350 void emit_and(Register dst, Immediate src, int size) {
2351 immediate_arithmetic_op(0x4, dst, src, size);
2354 void emit_and(Operand dst, Immediate src, int size) {
2355 immediate_arithmetic_op(0x4, dst, src, size);
2358 void emit_cmp(Register dst, Register src, int size) {
2359 arithmetic_op(0x3B, dst, src, size);
2362 void emit_cmp(Register dst, Operand src, int size) {
2363 arithmetic_op(0x3B, dst, src, size);
2366 void emit_cmp(Operand dst, Register src, int size) {
2367 arithmetic_op(0x39, src, dst, size);
2370 void emit_cmp(Register dst, Immediate src, int size) {
2371 immediate_arithmetic_op(0x7, dst, src, size);
2374 void emit_cmp(Operand dst, Immediate src, int size) {
2375 immediate_arithmetic_op(0x7, dst, src, size);
2378 // Compare {al,ax,eax,rax} with src. If equal, set ZF and write dst into
2379 // src. Otherwise clear ZF and write src into {al,ax,eax,rax}. This
2381 void emit_cmpxchg(Operand dst, Register src, int size);
2386 // Divide rdx:rax by src. Quotient in rax, remainder in rdx when size is 64.
2387 // Divide edx:eax by lower 32 bits of src. Quotient in eax, remainder in edx
2389 void emit_idiv(Register src, int size);
2390 void emit_div(Register src, int size);
2393 // rdx:rax = rax * src when size is 64 or edx:eax = eax * src when size is 32.
2394 void emit_imul(Register src, int size);
2395 void emit_imul(Operand src, int size);
2396 void emit_imul(Register dst, Register src, int size);
2397 void emit_imul(Register dst, Operand src, int size);
2398 void emit_imul(Register dst, Register src, Immediate imm, int size);
2399 void emit_imul(Register dst, Operand src, Immediate imm, int size);
2404 void emit_lea(Register dst, Operand src, int size);
2406 void emit_mov(Register dst, Operand src, int size);
2407 void emit_mov(Register dst, Register src, int size);
2408 void emit_mov(Operand dst, Register src, int size);
2413 void emit_movzxb(Register dst, Operand src, int size);
2414 void emit_movzxb(Register dst, Register src, int size);
2415 void emit_movzxw(Register dst, Operand src, int size);
2416 void emit_movzxw(Register dst, Register src, int size);
2424 void emit_or(Register dst, Register src, int size) {
2425 arithmetic_op(0x0B, dst, src, size);
2428 void emit_or(Register dst, Operand src, int size) {
2429 arithmetic_op(0x0B, dst, src, size);
2432 void emit_or(Operand dst, Register src, int size) {
2433 arithmetic_op(0x9, src, dst, size);
2436 void emit_or(Register dst, Immediate src, int size) {
2437 immediate_arithmetic_op(0x1, dst, src, size);
2440 void emit_or(Operand dst, Immediate src, int size) {
2441 immediate_arithmetic_op(0x1, dst, src, size);
2446 void emit_sbb(Register dst, Register src, int size) {
2447 arithmetic_op(0x1b, dst, src, size);
2450 void emit_sub(Register dst, Register src, int size) {
2451 arithmetic_op(0x2B, dst, src, size);
2454 void emit_sub(Register dst, Immediate src, int size) {
2455 immediate_arithmetic_op(0x5, dst, src, size);
2458 void emit_sub(Register dst, Operand src, int size) {
2459 arithmetic_op(0x2B, dst, src, size);
2462 void emit_sub(Operand dst, Register src, int size) {
2463 arithmetic_op(0x29, src, dst, size);
2466 void emit_sub(Operand dst, Immediate src, int size) {
2467 immediate_arithmetic_op(0x5, dst, src, size);
2470 void emit_test(Register dst, Register src, int size);
2478 void emit_xchg(Register dst, Register src, int size);
2479 void emit_xchg(Register dst, Operand src, int size);
2481 void emit_xor(Register dst, Register src, int size) {
2482 if (size == kInt64Size && dst.code() == src.code()) {
2485 arithmetic_op(0x33, dst, src, kInt32Size);
2487 arithmetic_op(0x33, dst, src, size);
2491 void emit_xor(Register dst, Operand src, int size) {
2492 arithmetic_op(0x33, dst, src, size);
2495 void emit_xor(Register dst, Immediate src, int size) {
2496 immediate_arithmetic_op(0x6, dst, src, size);
2499 void emit_xor(Operand dst, Immediate src, int size) {
2500 immediate_arithmetic_op(0x6, dst, src, size);
2503 void emit_xor(Operand dst, Register src, int size) {
2504 arithmetic_op(0x31, src, dst, size);