1194 void fxrstor(Address src);
1195 void xrstor(Address src);
1196
1197 void fxsave(Address dst);
1198 void xsave(Address dst);
1199
1200 void fyl2x();
1201 void frndint();
1202 void f2xm1();
1203 void fldl2e();
1204
1205 void hlt();
1206
1207 void idivl(Register src);
1208 void divl(Register src); // Unsigned division
1209
1210 #ifdef _LP64
1211 void idivq(Register src);
1212 #endif
1213
1214 void imull(Register dst, Register src);
1215 void imull(Register dst, Register src, int value);
1216 void imull(Register dst, Address src);
1217
1218 #ifdef _LP64
1219 void imulq(Register dst, Register src);
1220 void imulq(Register dst, Register src, int value);
1221 void imulq(Register dst, Address src);
1222 #endif
1223
1224 // jcc is the generic conditional branch generator to run-
1225 // time routines, jcc is used for branches to labels. jcc
1226 // takes a branch opcode (cc) and a label (L) and generates
1227 // either a backward branch or a forward branch and links it
1228 // to the label fixup chain. Usage:
1229 //
1230 // Label L; // unbound label
1231 // jcc(cc, L); // forward branch to unbound label
1232 // bind(L); // bind label to the current pc
1233 // jcc(cc, L); // backward branch to bound label
1675
1676 void subq(Address dst, int32_t imm32);
1677 void subq(Address dst, Register src);
1678 void subq(Register dst, int32_t imm32);
1679 void subq(Register dst, Address src);
1680 void subq(Register dst, Register src);
1681
1682 // Force generation of a 4 byte immediate value even if it fits into 8bit
1683 void subl_imm32(Register dst, int32_t imm32);
1684 void subq_imm32(Register dst, int32_t imm32);
1685
1686 // Subtract Scalar Double-Precision Floating-Point Values
1687 void subsd(XMMRegister dst, Address src);
1688 void subsd(XMMRegister dst, XMMRegister src);
1689
1690 // Subtract Scalar Single-Precision Floating-Point Values
1691 void subss(XMMRegister dst, Address src);
1692 void subss(XMMRegister dst, XMMRegister src);
1693
1694 void testb(Register dst, int imm8);
1695
1696 void testl(Register dst, int32_t imm32);
1697 void testl(Register dst, Register src);
1698 void testl(Register dst, Address src);
1699
1700 void testq(Register dst, int32_t imm32);
1701 void testq(Register dst, Register src);
1702
1703 // BMI - count trailing zeros
1704 void tzcntl(Register dst, Register src);
1705 void tzcntq(Register dst, Register src);
1706
1707 // Unordered Compare Scalar Double-Precision Floating-Point Values and set EFLAGS
1708 void ucomisd(XMMRegister dst, Address src);
1709 void ucomisd(XMMRegister dst, XMMRegister src);
1710
1711 // Unordered Compare Scalar Single-Precision Floating-Point Values and set EFLAGS
1712 void ucomiss(XMMRegister dst, Address src);
1713 void ucomiss(XMMRegister dst, XMMRegister src);
1714
1747 void vaddss(XMMRegister dst, XMMRegister nds, Address src);
1748 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1749 void vdivsd(XMMRegister dst, XMMRegister nds, Address src);
1750 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1751 void vdivss(XMMRegister dst, XMMRegister nds, Address src);
1752 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1753 void vmulsd(XMMRegister dst, XMMRegister nds, Address src);
1754 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1755 void vmulss(XMMRegister dst, XMMRegister nds, Address src);
1756 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1757 void vsubsd(XMMRegister dst, XMMRegister nds, Address src);
1758 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1759 void vsubss(XMMRegister dst, XMMRegister nds, Address src);
1760 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1761
1762
1763 //====================VECTOR ARITHMETIC=====================================
1764
1765 // Add Packed Floating-Point Values
1766 void addpd(XMMRegister dst, XMMRegister src);
1767 void addps(XMMRegister dst, XMMRegister src);
1768 void vaddpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1769 void vaddps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1770 void vaddpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1771 void vaddps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1772
1773 // Subtract Packed Floating-Point Values
1774 void subpd(XMMRegister dst, XMMRegister src);
1775 void subps(XMMRegister dst, XMMRegister src);
1776 void vsubpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1777 void vsubps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1778 void vsubpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1779 void vsubps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1780
1781 // Multiply Packed Floating-Point Values
1782 void mulpd(XMMRegister dst, XMMRegister src);
1783 void mulpd(XMMRegister dst, Address src);
1784 void mulps(XMMRegister dst, XMMRegister src);
1785 void vmulpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1786 void vmulps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
|
1194 void fxrstor(Address src);
1195 void xrstor(Address src);
1196
1197 void fxsave(Address dst);
1198 void xsave(Address dst);
1199
1200 void fyl2x();
1201 void frndint();
1202 void f2xm1();
1203 void fldl2e();
1204
1205 void hlt();
1206
1207 void idivl(Register src);
1208 void divl(Register src); // Unsigned division
1209
1210 #ifdef _LP64
1211 void idivq(Register src);
1212 #endif
1213
1214 void imull(Register src);
1215 void imull(Register dst, Register src);
1216 void imull(Register dst, Register src, int value);
1217 void imull(Register dst, Address src);
1218
1219 #ifdef _LP64
1220 void imulq(Register dst, Register src);
1221 void imulq(Register dst, Register src, int value);
1222 void imulq(Register dst, Address src);
1223 #endif
1224
1225 // jcc is the generic conditional branch generator to run-
1226 // time routines, jcc is used for branches to labels. jcc
1227 // takes a branch opcode (cc) and a label (L) and generates
1228 // either a backward branch or a forward branch and links it
1229 // to the label fixup chain. Usage:
1230 //
1231 // Label L; // unbound label
1232 // jcc(cc, L); // forward branch to unbound label
1233 // bind(L); // bind label to the current pc
1234 // jcc(cc, L); // backward branch to bound label
1676
1677 void subq(Address dst, int32_t imm32);
1678 void subq(Address dst, Register src);
1679 void subq(Register dst, int32_t imm32);
1680 void subq(Register dst, Address src);
1681 void subq(Register dst, Register src);
1682
1683 // Force generation of a 4 byte immediate value even if it fits into 8bit
1684 void subl_imm32(Register dst, int32_t imm32);
1685 void subq_imm32(Register dst, int32_t imm32);
1686
1687 // Subtract Scalar Double-Precision Floating-Point Values
1688 void subsd(XMMRegister dst, Address src);
1689 void subsd(XMMRegister dst, XMMRegister src);
1690
1691 // Subtract Scalar Single-Precision Floating-Point Values
1692 void subss(XMMRegister dst, Address src);
1693 void subss(XMMRegister dst, XMMRegister src);
1694
1695 void testb(Register dst, int imm8);
1696 void testb(Address dst, int imm8);
1697
1698 void testl(Register dst, int32_t imm32);
1699 void testl(Register dst, Register src);
1700 void testl(Register dst, Address src);
1701
1702 void testq(Register dst, int32_t imm32);
1703 void testq(Register dst, Register src);
1704
1705 // BMI - count trailing zeros
1706 void tzcntl(Register dst, Register src);
1707 void tzcntq(Register dst, Register src);
1708
1709 // Unordered Compare Scalar Double-Precision Floating-Point Values and set EFLAGS
1710 void ucomisd(XMMRegister dst, Address src);
1711 void ucomisd(XMMRegister dst, XMMRegister src);
1712
1713 // Unordered Compare Scalar Single-Precision Floating-Point Values and set EFLAGS
1714 void ucomiss(XMMRegister dst, Address src);
1715 void ucomiss(XMMRegister dst, XMMRegister src);
1716
1749 void vaddss(XMMRegister dst, XMMRegister nds, Address src);
1750 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1751 void vdivsd(XMMRegister dst, XMMRegister nds, Address src);
1752 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1753 void vdivss(XMMRegister dst, XMMRegister nds, Address src);
1754 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1755 void vmulsd(XMMRegister dst, XMMRegister nds, Address src);
1756 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1757 void vmulss(XMMRegister dst, XMMRegister nds, Address src);
1758 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1759 void vsubsd(XMMRegister dst, XMMRegister nds, Address src);
1760 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1761 void vsubss(XMMRegister dst, XMMRegister nds, Address src);
1762 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1763
1764
1765 //====================VECTOR ARITHMETIC=====================================
1766
1767 // Add Packed Floating-Point Values
1768 void addpd(XMMRegister dst, XMMRegister src);
1769 void addpd(XMMRegister dst, Address src);
1770 void addps(XMMRegister dst, XMMRegister src);
1771 void vaddpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1772 void vaddps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1773 void vaddpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1774 void vaddps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1775
1776 // Subtract Packed Floating-Point Values
1777 void subpd(XMMRegister dst, XMMRegister src);
1778 void subps(XMMRegister dst, XMMRegister src);
1779 void vsubpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1780 void vsubps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1781 void vsubpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1782 void vsubps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1783
1784 // Multiply Packed Floating-Point Values
1785 void mulpd(XMMRegister dst, XMMRegister src);
1786 void mulpd(XMMRegister dst, Address src);
1787 void mulps(XMMRegister dst, XMMRegister src);
1788 void vmulpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1789 void vmulps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
|