587 |
587 |
588 void vex_prefix(Address adr, int nds_enc, int xreg_enc, |
588 void vex_prefix(Address adr, int nds_enc, int xreg_enc, |
589 VexSimdPrefix pre, VexOpcode opc, |
589 VexSimdPrefix pre, VexOpcode opc, |
590 bool vex_w, bool vector256); |
590 bool vex_w, bool vector256); |
591 |
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 |
592 int vex_prefix_and_encode(int dst_enc, int nds_enc, int src_enc, |
598 int vex_prefix_and_encode(int dst_enc, int nds_enc, int src_enc, |
593 VexSimdPrefix pre, VexOpcode opc, |
599 VexSimdPrefix pre, VexOpcode opc, |
594 bool vex_w, bool vector256); |
600 bool vex_w, bool vector256); |
595 |
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 } |
596 |
607 |
597 void simd_prefix(XMMRegister xreg, XMMRegister nds, Address adr, |
608 void simd_prefix(XMMRegister xreg, XMMRegister nds, Address adr, |
598 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F, |
609 VexSimdPrefix pre, VexOpcode opc = VEX_OPCODE_0F, |
599 bool rex_w = false, bool vector256 = false); |
610 bool rex_w = false, bool vector256 = false); |
600 |
611 |
1571 |
1582 |
1572 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values |
1583 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values |
1573 void xorps(XMMRegister dst, XMMRegister src); |
1584 void xorps(XMMRegister dst, XMMRegister src); |
1574 |
1585 |
1575 void set_byte_if_not_zero(Register dst); // sets reg to 1 if not zero, otherwise 0 |
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 |
1576 |
1610 |
1577 protected: |
1611 protected: |
1578 // Next instructions require address alignment 16 bytes SSE mode. |
1612 // Next instructions require address alignment 16 bytes SSE mode. |
1579 // They should be called only from corresponding MacroAssembler instructions. |
1613 // They should be called only from corresponding MacroAssembler instructions. |
1580 void andpd(XMMRegister dst, Address src); |
1614 void andpd(XMMRegister dst, Address src); |
2420 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values |
2454 // Bitwise Logical XOR of Packed Single-Precision Floating-Point Values |
2421 void xorps(XMMRegister dst, XMMRegister src) { Assembler::xorps(dst, src); } |
2455 void xorps(XMMRegister dst, XMMRegister src) { Assembler::xorps(dst, src); } |
2422 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } |
2456 void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } |
2423 void xorps(XMMRegister dst, AddressLiteral src); |
2457 void xorps(XMMRegister dst, AddressLiteral src); |
2424 |
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 |
|
2505 |
2425 // Data |
2506 // Data |
2426 |
2507 |
2427 void cmov32( Condition cc, Register dst, Address src); |
2508 void cmov32( Condition cc, Register dst, Address src); |
2428 void cmov32( Condition cc, Register dst, Register src); |
2509 void cmov32( Condition cc, Register dst, Register src); |
2429 |
2510 |