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);