Mercurial > hg > graal-jvmci-8
comparison src/cpu/x86/vm/assembler_x86.hpp @ 4771:22cee0ee8927
Merge
author | kvn |
---|---|
date | Fri, 06 Jan 2012 20:09:20 -0800 |
parents | 65149e74c706 |
children | fd8114661503 |
comparison
equal
deleted
inserted
replaced
4755:2b3acb34791f | 4771:22cee0ee8927 |
---|---|
501 REX_WX = 0x4A, | 501 REX_WX = 0x4A, |
502 REX_WXB = 0x4B, | 502 REX_WXB = 0x4B, |
503 REX_WR = 0x4C, | 503 REX_WR = 0x4C, |
504 REX_WRB = 0x4D, | 504 REX_WRB = 0x4D, |
505 REX_WRX = 0x4E, | 505 REX_WRX = 0x4E, |
506 REX_WRXB = 0x4F | 506 REX_WRXB = 0x4F, |
507 | |
508 VEX_3bytes = 0xC4, | |
509 VEX_2bytes = 0xC5 | |
510 }; | |
511 | |
512 enum VexPrefix { | |
513 VEX_B = 0x20, | |
514 VEX_X = 0x40, | |
515 VEX_R = 0x80, | |
516 VEX_W = 0x80 | |
517 }; | |
518 | |
519 enum VexSimdPrefix { | |
520 VEX_SIMD_NONE = 0x0, | |
521 VEX_SIMD_66 = 0x1, | |
522 VEX_SIMD_F3 = 0x2, | |
523 VEX_SIMD_F2 = 0x3 | |
524 }; | |
525 | |
526 enum VexOpcode { | |
527 VEX_OPCODE_NONE = 0x0, | |
528 VEX_OPCODE_0F = 0x1, | |
529 VEX_OPCODE_0F_38 = 0x2, | |
530 VEX_OPCODE_0F_3A = 0x3 | |
507 }; | 531 }; |
508 | 532 |
509 enum WhichOperand { | 533 enum WhichOperand { |
510 // input to locate_operand, and format code for relocations | 534 // input to locate_operand, and format code for relocations |
511 imm_operand = 0, // embedded 32-bit|64-bit immediate operand | 535 imm_operand = 0, // embedded 32-bit|64-bit immediate operand |
544 void prefix(Register reg); | 568 void prefix(Register reg); |
545 void prefix(Address adr); | 569 void prefix(Address adr); |
546 void prefixq(Address adr); | 570 void prefixq(Address adr); |
547 | 571 |
548 void prefix(Address adr, Register reg, bool byteinst = false); | 572 void prefix(Address adr, Register reg, bool byteinst = false); |
573 void prefix(Address adr, XMMRegister reg); | |
549 void prefixq(Address adr, Register reg); | 574 void prefixq(Address adr, Register reg); |
550 | 575 void prefixq(Address adr, XMMRegister reg); |
551 void prefix(Address adr, XMMRegister reg); | |
552 | 576 |
553 void prefetch_prefix(Address src); | 577 void prefetch_prefix(Address src); |
578 | |
579 void rex_prefix(Address adr, XMMRegister xreg, | |
580 VexSimdPrefix pre, VexOpcode opc, bool rex_w); | |
581 int rex_prefix_and_encode(int dst_enc, int src_enc, | |
582 VexSimdPrefix pre, VexOpcode opc, bool rex_w); | |
583 | |
584 void vex_prefix(bool vex_r, bool vex_b, bool vex_x, bool vex_w, | |
585 int nds_enc, VexSimdPrefix pre, VexOpcode opc, | |
586 bool vector256); | |
587 | |
588 void vex_prefix(Address adr, int nds_enc, int xreg_enc, | |
589 VexSimdPrefix pre, VexOpcode opc, | |
590 bool vex_w, bool vector256); | |
591 | |
592 void vex_prefix(XMMRegister dst, XMMRegister nds, Address src, | |
593 VexSimdPrefix pre, bool vector256 = false) { | |
594 vex_prefix(src, nds->encoding(), dst->encoding(), | |
595 pre, VEX_OPCODE_0F, false, vector256); | |
596 } | |
597 | |
598 int vex_prefix_and_encode(int dst_enc, int nds_enc, int src_enc, | |
599 VexSimdPrefix pre, VexOpcode opc, | |
600 bool vex_w, bool vector256); | |
601 | |
602 int vex_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src, | |
603 VexSimdPrefix pre, bool vector256 = false) { | |
604 return vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), | |
605 pre, VEX_OPCODE_0F, false, vector256); | |
606 } | |
607 | |
608 void simd_prefix(XMMRegister xreg, XMMRegister nds, Address adr, | |
609 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F, | |
610 bool rex_w = false, bool vector256 = false); | |
611 | |
612 void simd_prefix(XMMRegister dst, Address src, | |
613 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F) { | |
614 simd_prefix(dst, xnoreg, src, pre, opc); | |
615 } | |
616 void simd_prefix(Address dst, XMMRegister src, VexSimdPrefix pre) { | |
617 simd_prefix(src, dst, pre); | |
618 } | |
619 void simd_prefix_q(XMMRegister dst, XMMRegister nds, Address src, | |
620 VexSimdPrefix pre) { | |
621 bool rex_w = true; | |
622 simd_prefix(dst, nds, src, pre, VEX_OPCODE_0F, rex_w); | |
623 } | |
624 | |
625 | |
626 int simd_prefix_and_encode(XMMRegister dst, XMMRegister nds, XMMRegister src, | |
627 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F, | |
628 bool rex_w = false, bool vector256 = false); | |
629 | |
630 int simd_prefix_and_encode(XMMRegister dst, XMMRegister src, | |
631 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F) { | |
632 return simd_prefix_and_encode(dst, xnoreg, src, pre, opc); | |
633 } | |
634 | |
635 // Move/convert 32-bit integer value. | |
636 int simd_prefix_and_encode(XMMRegister dst, XMMRegister nds, Register src, | |
637 VexSimdPrefix pre) { | |
638 // It is OK to cast from Register to XMMRegister to pass argument here | |
639 // since only encoding is used in simd_prefix_and_encode() and number of | |
640 // Gen and Xmm registers are the same. | |
641 return simd_prefix_and_encode(dst, nds, as_XMMRegister(src->encoding()), pre); | |
642 } | |
643 int simd_prefix_and_encode(XMMRegister dst, Register src, VexSimdPrefix pre) { | |
644 return simd_prefix_and_encode(dst, xnoreg, src, pre); | |
645 } | |
646 int simd_prefix_and_encode(Register dst, XMMRegister src, | |
647 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F) { | |
648 return simd_prefix_and_encode(as_XMMRegister(dst->encoding()), xnoreg, src, pre, opc); | |
649 } | |
650 | |
651 // Move/convert 64-bit integer value. | |
652 int simd_prefix_and_encode_q(XMMRegister dst, XMMRegister nds, Register src, | |
653 VexSimdPrefix pre) { | |
654 bool rex_w = true; | |
655 return simd_prefix_and_encode(dst, nds, as_XMMRegister(src->encoding()), pre, VEX_OPCODE_0F, rex_w); | |
656 } | |
657 int simd_prefix_and_encode_q(XMMRegister dst, Register src, VexSimdPrefix pre) { | |
658 return simd_prefix_and_encode_q(dst, xnoreg, src, pre); | |
659 } | |
660 int simd_prefix_and_encode_q(Register dst, XMMRegister src, | |
661 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F) { | |
662 bool rex_w = true; | |
663 return simd_prefix_and_encode(as_XMMRegister(dst->encoding()), xnoreg, src, pre, opc, rex_w); | |
664 } | |
554 | 665 |
555 // Helper functions for groups of instructions | 666 // Helper functions for groups of instructions |
556 void emit_arith_b(int op1, int op2, Register dst, int imm8); | 667 void emit_arith_b(int op1, int op2, Register dst, int imm8); |
557 | 668 |
558 void emit_arith(int op1, int op2, Register dst, int32_t imm32); | 669 void emit_arith(int op1, int op2, Register dst, int32_t imm32); |
762 | 873 |
763 // Add Scalar Single-Precision Floating-Point Values | 874 // Add Scalar Single-Precision Floating-Point Values |
764 void addss(XMMRegister dst, Address src); | 875 void addss(XMMRegister dst, Address src); |
765 void addss(XMMRegister dst, XMMRegister src); | 876 void addss(XMMRegister dst, XMMRegister src); |
766 | 877 |
878 void andl(Address dst, int32_t imm32); | |
767 void andl(Register dst, int32_t imm32); | 879 void andl(Register dst, int32_t imm32); |
768 void andl(Register dst, Address src); | 880 void andl(Register dst, Address src); |
769 void andl(Register dst, Register src); | 881 void andl(Register dst, Register src); |
770 | 882 |
771 void andq(Address dst, int32_t imm32); | 883 void andq(Address dst, int32_t imm32); |
772 void andq(Register dst, int32_t imm32); | 884 void andq(Register dst, int32_t imm32); |
773 void andq(Register dst, Address src); | 885 void andq(Register dst, Address src); |
774 void andq(Register dst, Register src); | 886 void andq(Register dst, Register src); |
775 | 887 |
776 // Bitwise Logical AND of Packed Double-Precision Floating-Point Values | 888 // Bitwise Logical AND of Packed Double-Precision Floating-Point Values |
777 void andpd(XMMRegister dst, Address src); | |
778 void andpd(XMMRegister dst, XMMRegister src); | 889 void andpd(XMMRegister dst, XMMRegister src); |
890 | |
891 // Bitwise Logical AND of Packed Single-Precision Floating-Point Values | |
892 void andps(XMMRegister dst, XMMRegister src); | |
779 | 893 |
780 void bsfl(Register dst, Register src); | 894 void bsfl(Register dst, Register src); |
781 void bsrl(Register dst, Register src); | 895 void bsrl(Register dst, Register src); |
782 | 896 |
783 #ifdef _LP64 | 897 #ifdef _LP64 |
835 | 949 |
836 void cmpxchgq(Register reg, Address adr); | 950 void cmpxchgq(Register reg, Address adr); |
837 | 951 |
838 // Ordered Compare Scalar Double-Precision Floating-Point Values and set EFLAGS | 952 // Ordered Compare Scalar Double-Precision Floating-Point Values and set EFLAGS |
839 void comisd(XMMRegister dst, Address src); | 953 void comisd(XMMRegister dst, Address src); |
954 void comisd(XMMRegister dst, XMMRegister src); | |
840 | 955 |
841 // Ordered Compare Scalar Single-Precision Floating-Point Values and set EFLAGS | 956 // Ordered Compare Scalar Single-Precision Floating-Point Values and set EFLAGS |
842 void comiss(XMMRegister dst, Address src); | 957 void comiss(XMMRegister dst, Address src); |
958 void comiss(XMMRegister dst, XMMRegister src); | |
843 | 959 |
844 // Identify processor type and features | 960 // Identify processor type and features |
845 void cpuid() { | 961 void cpuid() { |
846 emit_byte(0x0F); | 962 emit_byte(0x0F); |
847 emit_byte(0xA2); | 963 emit_byte(0xA2); |
848 } | 964 } |
849 | 965 |
850 // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value | 966 // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value |
851 void cvtsd2ss(XMMRegister dst, XMMRegister src); | 967 void cvtsd2ss(XMMRegister dst, XMMRegister src); |
968 void cvtsd2ss(XMMRegister dst, Address src); | |
852 | 969 |
853 // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value | 970 // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value |
854 void cvtsi2sdl(XMMRegister dst, Register src); | 971 void cvtsi2sdl(XMMRegister dst, Register src); |
972 void cvtsi2sdl(XMMRegister dst, Address src); | |
855 void cvtsi2sdq(XMMRegister dst, Register src); | 973 void cvtsi2sdq(XMMRegister dst, Register src); |
974 void cvtsi2sdq(XMMRegister dst, Address src); | |
856 | 975 |
857 // Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value | 976 // Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value |
858 void cvtsi2ssl(XMMRegister dst, Register src); | 977 void cvtsi2ssl(XMMRegister dst, Register src); |
978 void cvtsi2ssl(XMMRegister dst, Address src); | |
859 void cvtsi2ssq(XMMRegister dst, Register src); | 979 void cvtsi2ssq(XMMRegister dst, Register src); |
980 void cvtsi2ssq(XMMRegister dst, Address src); | |
860 | 981 |
861 // Convert Packed Signed Doubleword Integers to Packed Double-Precision Floating-Point Value | 982 // Convert Packed Signed Doubleword Integers to Packed Double-Precision Floating-Point Value |
862 void cvtdq2pd(XMMRegister dst, XMMRegister src); | 983 void cvtdq2pd(XMMRegister dst, XMMRegister src); |
863 | 984 |
864 // Convert Packed Signed Doubleword Integers to Packed Single-Precision Floating-Point Value | 985 // Convert Packed Signed Doubleword Integers to Packed Single-Precision Floating-Point Value |
865 void cvtdq2ps(XMMRegister dst, XMMRegister src); | 986 void cvtdq2ps(XMMRegister dst, XMMRegister src); |
866 | 987 |
867 // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value | 988 // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value |
868 void cvtss2sd(XMMRegister dst, XMMRegister src); | 989 void cvtss2sd(XMMRegister dst, XMMRegister src); |
990 void cvtss2sd(XMMRegister dst, Address src); | |
869 | 991 |
870 // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer | 992 // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer |
871 void cvttsd2sil(Register dst, Address src); | 993 void cvttsd2sil(Register dst, Address src); |
872 void cvttsd2sil(Register dst, XMMRegister src); | 994 void cvttsd2sil(Register dst, XMMRegister src); |
873 void cvttsd2siq(Register dst, XMMRegister src); | 995 void cvttsd2siq(Register dst, XMMRegister src); |
1138 // Move Double Quadword | 1260 // Move Double Quadword |
1139 void movdq(XMMRegister dst, Register src); | 1261 void movdq(XMMRegister dst, Register src); |
1140 void movdq(Register dst, XMMRegister src); | 1262 void movdq(Register dst, XMMRegister src); |
1141 | 1263 |
1142 // Move Aligned Double Quadword | 1264 // Move Aligned Double Quadword |
1143 void movdqa(Address dst, XMMRegister src); | |
1144 void movdqa(XMMRegister dst, Address src); | |
1145 void movdqa(XMMRegister dst, XMMRegister src); | 1265 void movdqa(XMMRegister dst, XMMRegister src); |
1146 | 1266 |
1147 // Move Unaligned Double Quadword | 1267 // Move Unaligned Double Quadword |
1148 void movdqu(Address dst, XMMRegister src); | 1268 void movdqu(Address dst, XMMRegister src); |
1149 void movdqu(XMMRegister dst, Address src); | 1269 void movdqu(XMMRegister dst, Address src); |
1259 void orq(Address dst, int32_t imm32); | 1379 void orq(Address dst, int32_t imm32); |
1260 void orq(Register dst, int32_t imm32); | 1380 void orq(Register dst, int32_t imm32); |
1261 void orq(Register dst, Address src); | 1381 void orq(Register dst, Address src); |
1262 void orq(Register dst, Register src); | 1382 void orq(Register dst, Register src); |
1263 | 1383 |
1384 // Pack with unsigned saturation | |
1385 void packuswb(XMMRegister dst, XMMRegister src); | |
1386 void packuswb(XMMRegister dst, Address src); | |
1387 | |
1264 // SSE4.2 string instructions | 1388 // SSE4.2 string instructions |
1265 void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8); | 1389 void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8); |
1266 void pcmpestri(XMMRegister xmm1, Address src, int imm8); | 1390 void pcmpestri(XMMRegister xmm1, Address src, int imm8); |
1391 | |
1392 // SSE4.1 packed move | |
1393 void pmovzxbw(XMMRegister dst, XMMRegister src); | |
1394 void pmovzxbw(XMMRegister dst, Address src); | |
1267 | 1395 |
1268 #ifndef _LP64 // no 32bit push/pop on amd64 | 1396 #ifndef _LP64 // no 32bit push/pop on amd64 |
1269 void popl(Address dst); | 1397 void popl(Address dst); |
1270 #endif | 1398 #endif |
1271 | 1399 |
1290 void prefetcht2(Address src); | 1418 void prefetcht2(Address src); |
1291 void prefetchw(Address src); | 1419 void prefetchw(Address src); |
1292 | 1420 |
1293 // POR - Bitwise logical OR | 1421 // POR - Bitwise logical OR |
1294 void por(XMMRegister dst, XMMRegister src); | 1422 void por(XMMRegister dst, XMMRegister src); |
1423 void por(XMMRegister dst, Address src); | |
1295 | 1424 |
1296 // Shuffle Packed Doublewords | 1425 // Shuffle Packed Doublewords |
1297 void pshufd(XMMRegister dst, XMMRegister src, int mode); | 1426 void pshufd(XMMRegister dst, XMMRegister src, int mode); |
1298 void pshufd(XMMRegister dst, Address src, int mode); | 1427 void pshufd(XMMRegister dst, Address src, int mode); |
1299 | 1428 |
1311 void ptest(XMMRegister dst, XMMRegister src); | 1440 void ptest(XMMRegister dst, XMMRegister src); |
1312 void ptest(XMMRegister dst, Address src); | 1441 void ptest(XMMRegister dst, Address src); |
1313 | 1442 |
1314 // Interleave Low Bytes | 1443 // Interleave Low Bytes |
1315 void punpcklbw(XMMRegister dst, XMMRegister src); | 1444 void punpcklbw(XMMRegister dst, XMMRegister src); |
1445 void punpcklbw(XMMRegister dst, Address src); | |
1446 | |
1447 // Interleave Low Doublewords | |
1448 void punpckldq(XMMRegister dst, XMMRegister src); | |
1449 void punpckldq(XMMRegister dst, Address src); | |
1316 | 1450 |
1317 #ifndef _LP64 // no 32bit push/pop on amd64 | 1451 #ifndef _LP64 // no 32bit push/pop on amd64 |
1318 void pushl(Address src); | 1452 void pushl(Address src); |
1319 #endif | 1453 #endif |
1320 | 1454 |
1427 void xchgl(Register dst, Register src); | 1561 void xchgl(Register dst, Register src); |
1428 | 1562 |
1429 void xchgq(Register reg, Address adr); | 1563 void xchgq(Register reg, Address adr); |
1430 void xchgq(Register dst, Register src); | 1564 void xchgq(Register dst, Register src); |
1431 | 1565 |
1566 // Get Value of Extended Control Register | |
1567 void xgetbv() { | |
1568 emit_byte(0x0F); | |
1569 emit_byte(0x01); | |
1570 emit_byte(0xD0); | |
1571 } | |
1572 | |
1432 void xorl(Register dst, int32_t imm32); | 1573 void xorl(Register dst, int32_t imm32); |
1433 void xorl(Register dst, Address src); | 1574 void xorl(Register dst, Address src); |
1434 void xorl(Register dst, Register src); | 1575 void xorl(Register dst, Register src); |
1435 | 1576 |
1436 void xorq(Register dst, Address src); | 1577 void xorq(Register dst, Address src); |
1437 void xorq(Register dst, Register src); | 1578 void xorq(Register dst, Register src); |
1438 | 1579 |
1439 // Bitwise Logical XOR of Packed Double-Precision Floating-Point Values | 1580 // Bitwise Logical XOR of Packed Double-Precision Floating-Point Values |
1581 void xorpd(XMMRegister dst, XMMRegister src); | |
1582 | |
1583 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values | |
1584 void xorps(XMMRegister dst, XMMRegister src); | |
1585 | |
1586 void set_byte_if_not_zero(Register dst); // sets reg to 1 if not zero, otherwise 0 | |
1587 | |
1588 // AVX 3-operands instructions (encoded with VEX prefix) | |
1589 void vaddsd(XMMRegister dst, XMMRegister nds, Address src); | |
1590 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1591 void vaddss(XMMRegister dst, XMMRegister nds, Address src); | |
1592 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1593 void vandpd(XMMRegister dst, XMMRegister nds, Address src); | |
1594 void vandps(XMMRegister dst, XMMRegister nds, Address src); | |
1595 void vdivsd(XMMRegister dst, XMMRegister nds, Address src); | |
1596 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1597 void vdivss(XMMRegister dst, XMMRegister nds, Address src); | |
1598 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1599 void vmulsd(XMMRegister dst, XMMRegister nds, Address src); | |
1600 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1601 void vmulss(XMMRegister dst, XMMRegister nds, Address src); | |
1602 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1603 void vsubsd(XMMRegister dst, XMMRegister nds, Address src); | |
1604 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1605 void vsubss(XMMRegister dst, XMMRegister nds, Address src); | |
1606 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src); | |
1607 void vxorpd(XMMRegister dst, XMMRegister nds, Address src); | |
1608 void vxorps(XMMRegister dst, XMMRegister nds, Address src); | |
1609 | |
1610 | |
1611 protected: | |
1612 // Next instructions require address alignment 16 bytes SSE mode. | |
1613 // They should be called only from corresponding MacroAssembler instructions. | |
1614 void andpd(XMMRegister dst, Address src); | |
1615 void andps(XMMRegister dst, Address src); | |
1440 void xorpd(XMMRegister dst, Address src); | 1616 void xorpd(XMMRegister dst, Address src); |
1441 void xorpd(XMMRegister dst, XMMRegister src); | |
1442 | |
1443 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values | |
1444 void xorps(XMMRegister dst, Address src); | 1617 void xorps(XMMRegister dst, Address src); |
1445 void xorps(XMMRegister dst, XMMRegister src); | 1618 |
1446 | |
1447 void set_byte_if_not_zero(Register dst); // sets reg to 1 if not zero, otherwise 0 | |
1448 }; | 1619 }; |
1449 | 1620 |
1450 | 1621 |
1451 // MacroAssembler extends Assembler by frequently used macros. | 1622 // MacroAssembler extends Assembler by frequently used macros. |
1452 // | 1623 // |
2173 // Floating | 2344 // Floating |
2174 | 2345 |
2175 void andpd(XMMRegister dst, Address src) { Assembler::andpd(dst, src); } | 2346 void andpd(XMMRegister dst, Address src) { Assembler::andpd(dst, src); } |
2176 void andpd(XMMRegister dst, AddressLiteral src); | 2347 void andpd(XMMRegister dst, AddressLiteral src); |
2177 | 2348 |
2349 void andps(XMMRegister dst, XMMRegister src) { Assembler::andps(dst, src); } | |
2350 void andps(XMMRegister dst, Address src) { Assembler::andps(dst, src); } | |
2351 void andps(XMMRegister dst, AddressLiteral src); | |
2352 | |
2353 void comiss(XMMRegister dst, XMMRegister src) { Assembler::comiss(dst, src); } | |
2178 void comiss(XMMRegister dst, Address src) { Assembler::comiss(dst, src); } | 2354 void comiss(XMMRegister dst, Address src) { Assembler::comiss(dst, src); } |
2179 void comiss(XMMRegister dst, AddressLiteral src); | 2355 void comiss(XMMRegister dst, AddressLiteral src); |
2180 | 2356 |
2357 void comisd(XMMRegister dst, XMMRegister src) { Assembler::comisd(dst, src); } | |
2181 void comisd(XMMRegister dst, Address src) { Assembler::comisd(dst, src); } | 2358 void comisd(XMMRegister dst, Address src) { Assembler::comisd(dst, src); } |
2182 void comisd(XMMRegister dst, AddressLiteral src); | 2359 void comisd(XMMRegister dst, AddressLiteral src); |
2183 | 2360 |
2184 void fadd_s(Address src) { Assembler::fadd_s(src); } | 2361 void fadd_s(Address src) { Assembler::fadd_s(src); } |
2185 void fadd_s(AddressLiteral src) { Assembler::fadd_s(as_Address(src)); } | 2362 void fadd_s(AddressLiteral src) { Assembler::fadd_s(as_Address(src)); } |
2209 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } | 2386 void movss(Address dst, XMMRegister src) { Assembler::movss(dst, src); } |
2210 void movss(XMMRegister dst, XMMRegister src) { Assembler::movss(dst, src); } | 2387 void movss(XMMRegister dst, XMMRegister src) { Assembler::movss(dst, src); } |
2211 void movss(XMMRegister dst, Address src) { Assembler::movss(dst, src); } | 2388 void movss(XMMRegister dst, Address src) { Assembler::movss(dst, src); } |
2212 void movss(XMMRegister dst, AddressLiteral src); | 2389 void movss(XMMRegister dst, AddressLiteral src); |
2213 | 2390 |
2214 void movlpd(XMMRegister dst, Address src) {Assembler::movlpd(dst, src); } | 2391 void movlpd(XMMRegister dst, Address src) {Assembler::movlpd(dst, src); } |
2215 void movlpd(XMMRegister dst, AddressLiteral src); | 2392 void movlpd(XMMRegister dst, AddressLiteral src); |
2216 | 2393 |
2217 public: | 2394 public: |
2218 | 2395 |
2219 void addsd(XMMRegister dst, XMMRegister src) { Assembler::addsd(dst, src); } | 2396 void addsd(XMMRegister dst, XMMRegister src) { Assembler::addsd(dst, src); } |
2220 void addsd(XMMRegister dst, Address src) { Assembler::addsd(dst, src); } | 2397 void addsd(XMMRegister dst, Address src) { Assembler::addsd(dst, src); } |
2221 void addsd(XMMRegister dst, AddressLiteral src) { Assembler::addsd(dst, as_Address(src)); } | 2398 void addsd(XMMRegister dst, AddressLiteral src); |
2222 | 2399 |
2223 void addss(XMMRegister dst, XMMRegister src) { Assembler::addss(dst, src); } | 2400 void addss(XMMRegister dst, XMMRegister src) { Assembler::addss(dst, src); } |
2224 void addss(XMMRegister dst, Address src) { Assembler::addss(dst, src); } | 2401 void addss(XMMRegister dst, Address src) { Assembler::addss(dst, src); } |
2225 void addss(XMMRegister dst, AddressLiteral src) { Assembler::addss(dst, as_Address(src)); } | 2402 void addss(XMMRegister dst, AddressLiteral src); |
2226 | 2403 |
2227 void divsd(XMMRegister dst, XMMRegister src) { Assembler::divsd(dst, src); } | 2404 void divsd(XMMRegister dst, XMMRegister src) { Assembler::divsd(dst, src); } |
2228 void divsd(XMMRegister dst, Address src) { Assembler::divsd(dst, src); } | 2405 void divsd(XMMRegister dst, Address src) { Assembler::divsd(dst, src); } |
2229 void divsd(XMMRegister dst, AddressLiteral src) { Assembler::divsd(dst, as_Address(src)); } | 2406 void divsd(XMMRegister dst, AddressLiteral src); |
2230 | 2407 |
2231 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } | 2408 void divss(XMMRegister dst, XMMRegister src) { Assembler::divss(dst, src); } |
2232 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } | 2409 void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } |
2233 void divss(XMMRegister dst, AddressLiteral src) { Assembler::divss(dst, as_Address(src)); } | 2410 void divss(XMMRegister dst, AddressLiteral src); |
2234 | 2411 |
2235 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } | 2412 void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } |
2236 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } | 2413 void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } |
2237 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } | 2414 void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } |
2238 void movsd(XMMRegister dst, AddressLiteral src) { Assembler::movsd(dst, as_Address(src)); } | 2415 void movsd(XMMRegister dst, AddressLiteral src); |
2239 | 2416 |
2240 void mulsd(XMMRegister dst, XMMRegister src) { Assembler::mulsd(dst, src); } | 2417 void mulsd(XMMRegister dst, XMMRegister src) { Assembler::mulsd(dst, src); } |
2241 void mulsd(XMMRegister dst, Address src) { Assembler::mulsd(dst, src); } | 2418 void mulsd(XMMRegister dst, Address src) { Assembler::mulsd(dst, src); } |
2242 void mulsd(XMMRegister dst, AddressLiteral src) { Assembler::mulsd(dst, as_Address(src)); } | 2419 void mulsd(XMMRegister dst, AddressLiteral src); |
2243 | 2420 |
2244 void mulss(XMMRegister dst, XMMRegister src) { Assembler::mulss(dst, src); } | 2421 void mulss(XMMRegister dst, XMMRegister src) { Assembler::mulss(dst, src); } |
2245 void mulss(XMMRegister dst, Address src) { Assembler::mulss(dst, src); } | 2422 void mulss(XMMRegister dst, Address src) { Assembler::mulss(dst, src); } |
2246 void mulss(XMMRegister dst, AddressLiteral src) { Assembler::mulss(dst, as_Address(src)); } | 2423 void mulss(XMMRegister dst, AddressLiteral src); |
2247 | 2424 |
2248 void sqrtsd(XMMRegister dst, XMMRegister src) { Assembler::sqrtsd(dst, src); } | 2425 void sqrtsd(XMMRegister dst, XMMRegister src) { Assembler::sqrtsd(dst, src); } |
2249 void sqrtsd(XMMRegister dst, Address src) { Assembler::sqrtsd(dst, src); } | 2426 void sqrtsd(XMMRegister dst, Address src) { Assembler::sqrtsd(dst, src); } |
2250 void sqrtsd(XMMRegister dst, AddressLiteral src) { Assembler::sqrtsd(dst, as_Address(src)); } | 2427 void sqrtsd(XMMRegister dst, AddressLiteral src); |
2251 | 2428 |
2252 void sqrtss(XMMRegister dst, XMMRegister src) { Assembler::sqrtss(dst, src); } | 2429 void sqrtss(XMMRegister dst, XMMRegister src) { Assembler::sqrtss(dst, src); } |
2253 void sqrtss(XMMRegister dst, Address src) { Assembler::sqrtss(dst, src); } | 2430 void sqrtss(XMMRegister dst, Address src) { Assembler::sqrtss(dst, src); } |
2254 void sqrtss(XMMRegister dst, AddressLiteral src) { Assembler::sqrtss(dst, as_Address(src)); } | 2431 void sqrtss(XMMRegister dst, AddressLiteral src); |
2255 | 2432 |
2256 void subsd(XMMRegister dst, XMMRegister src) { Assembler::subsd(dst, src); } | 2433 void subsd(XMMRegister dst, XMMRegister src) { Assembler::subsd(dst, src); } |
2257 void subsd(XMMRegister dst, Address src) { Assembler::subsd(dst, src); } | 2434 void subsd(XMMRegister dst, Address src) { Assembler::subsd(dst, src); } |
2258 void subsd(XMMRegister dst, AddressLiteral src) { Assembler::subsd(dst, as_Address(src)); } | 2435 void subsd(XMMRegister dst, AddressLiteral src); |
2259 | 2436 |
2260 void subss(XMMRegister dst, XMMRegister src) { Assembler::subss(dst, src); } | 2437 void subss(XMMRegister dst, XMMRegister src) { Assembler::subss(dst, src); } |
2261 void subss(XMMRegister dst, Address src) { Assembler::subss(dst, src); } | 2438 void subss(XMMRegister dst, Address src) { Assembler::subss(dst, src); } |
2262 void subss(XMMRegister dst, AddressLiteral src) { Assembler::subss(dst, as_Address(src)); } | 2439 void subss(XMMRegister dst, AddressLiteral src); |
2263 | 2440 |
2264 void ucomiss(XMMRegister dst, XMMRegister src) { Assembler::ucomiss(dst, src); } | 2441 void ucomiss(XMMRegister dst, XMMRegister src) { Assembler::ucomiss(dst, src); } |
2265 void ucomiss(XMMRegister dst, Address src) { Assembler::ucomiss(dst, src); } | 2442 void ucomiss(XMMRegister dst, Address src) { Assembler::ucomiss(dst, src); } |
2266 void ucomiss(XMMRegister dst, AddressLiteral src); | 2443 void ucomiss(XMMRegister dst, AddressLiteral src); |
2267 | 2444 |
2268 void ucomisd(XMMRegister dst, XMMRegister src) { Assembler::ucomisd(dst, src); } | 2445 void ucomisd(XMMRegister dst, XMMRegister src) { Assembler::ucomisd(dst, src); } |
2269 void ucomisd(XMMRegister dst, Address src) { Assembler::ucomisd(dst, src); } | 2446 void ucomisd(XMMRegister dst, Address src) { Assembler::ucomisd(dst, src); } |
2270 void ucomisd(XMMRegister dst, AddressLiteral src); | 2447 void ucomisd(XMMRegister dst, AddressLiteral src); |
2271 | 2448 |
2272 // Bitwise Logical XOR of Packed Double-Precision Floating-Point Values | 2449 // Bitwise Logical XOR of Packed Double-Precision Floating-Point Values |
2273 void xorpd(XMMRegister dst, XMMRegister src) { Assembler::xorpd(dst, src); } | 2450 void xorpd(XMMRegister dst, XMMRegister src) { Assembler::xorpd(dst, src); } |
2274 void xorpd(XMMRegister dst, Address src) { Assembler::xorpd(dst, src); } | 2451 void xorpd(XMMRegister dst, Address src) { Assembler::xorpd(dst, src); } |
2276 | 2453 |
2277 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values | 2454 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values |
2278 void xorps(XMMRegister dst, XMMRegister src) { Assembler::xorps(dst, src); } | 2455 void xorps(XMMRegister dst, XMMRegister src) { Assembler::xorps(dst, src); } |
2279 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } | 2456 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } |
2280 void xorps(XMMRegister dst, AddressLiteral src); | 2457 void xorps(XMMRegister dst, AddressLiteral src); |
2458 | |
2459 // AVX 3-operands instructions | |
2460 | |
2461 void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddsd(dst, nds, src); } | |
2462 void vaddsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddsd(dst, nds, src); } | |
2463 void vaddsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2464 | |
2465 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddss(dst, nds, src); } | |
2466 void vaddss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vaddss(dst, nds, src); } | |
2467 void vaddss(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2468 | |
2469 void vandpd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vandpd(dst, nds, src); } | |
2470 void vandpd(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2471 | |
2472 void vandps(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vandps(dst, nds, src); } | |
2473 void vandps(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2474 | |
2475 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivsd(dst, nds, src); } | |
2476 void vdivsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivsd(dst, nds, src); } | |
2477 void vdivsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2478 | |
2479 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vdivss(dst, nds, src); } | |
2480 void vdivss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vdivss(dst, nds, src); } | |
2481 void vdivss(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2482 | |
2483 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulsd(dst, nds, src); } | |
2484 void vmulsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulsd(dst, nds, src); } | |
2485 void vmulsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2486 | |
2487 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vmulss(dst, nds, src); } | |
2488 void vmulss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vmulss(dst, nds, src); } | |
2489 void vmulss(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2490 | |
2491 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubsd(dst, nds, src); } | |
2492 void vsubsd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubsd(dst, nds, src); } | |
2493 void vsubsd(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2494 | |
2495 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vsubss(dst, nds, src); } | |
2496 void vsubss(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vsubss(dst, nds, src); } | |
2497 void vsubss(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2498 | |
2499 void vxorpd(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorpd(dst, nds, src); } | |
2500 void vxorpd(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2501 | |
2502 void vxorps(XMMRegister dst, XMMRegister nds, Address src) { Assembler::vxorps(dst, nds, src); } | |
2503 void vxorps(XMMRegister dst, XMMRegister nds, AddressLiteral src); | |
2504 | |
2281 | 2505 |
2282 // Data | 2506 // Data |
2283 | 2507 |
2284 void cmov32( Condition cc, Register dst, Address src); | 2508 void cmov32( Condition cc, Register dst, Address src); |
2285 void cmov32( Condition cc, Register dst, Register src); | 2509 void cmov32( Condition cc, Register dst, Register src); |