src/cpu/x86/vm/assembler_x86.hpp

changeset 3390
65149e74c706
parent 3388
127b3692c168
child 3574
fd8114661503
equal deleted inserted replaced
3389:669f6a7d5b70 3390:65149e74c706
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

mercurial