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
1700
1701 void subq(Address dst, int32_t imm32);
1702 void subq(Address dst, Register src);
1703 void subq(Register dst, int32_t imm32);
1704 void subq(Register dst, Address src);
1705 void subq(Register dst, Register src);
1706
1707 // Force generation of a 4 byte immediate value even if it fits into 8bit
1708 void subl_imm32(Register dst, int32_t imm32);
1709 void subq_imm32(Register dst, int32_t imm32);
1710
1711 // Subtract Scalar Double-Precision Floating-Point Values
1712 void subsd(XMMRegister dst, Address src);
1713 void subsd(XMMRegister dst, XMMRegister src);
1714
1715 // Subtract Scalar Single-Precision Floating-Point Values
1716 void subss(XMMRegister dst, Address src);
1717 void subss(XMMRegister dst, XMMRegister src);
1718
1719 void testb(Register dst, int imm8);
1720
1721 void testl(Register dst, int32_t imm32);
1722 void testl(Register dst, Register src);
1723 void testl(Register dst, Address src);
1724
1725 void testq(Register dst, int32_t imm32);
1726 void testq(Register dst, Register src);
1727
1728 // BMI - count trailing zeros
1729 void tzcntl(Register dst, Register src);
1730 void tzcntq(Register dst, Register src);
1731
1732 // Unordered Compare Scalar Double-Precision Floating-Point Values and set EFLAGS
1733 void ucomisd(XMMRegister dst, Address src);
1734 void ucomisd(XMMRegister dst, XMMRegister src);
1735
1736 // Unordered Compare Scalar Single-Precision Floating-Point Values and set EFLAGS
1737 void ucomiss(XMMRegister dst, Address src);
1738 void ucomiss(XMMRegister dst, XMMRegister src);
1739
1772 void vaddss(XMMRegister dst, XMMRegister nds, Address src);
1773 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1774 void vdivsd(XMMRegister dst, XMMRegister nds, Address src);
1775 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1776 void vdivss(XMMRegister dst, XMMRegister nds, Address src);
1777 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1778 void vmulsd(XMMRegister dst, XMMRegister nds, Address src);
1779 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1780 void vmulss(XMMRegister dst, XMMRegister nds, Address src);
1781 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1782 void vsubsd(XMMRegister dst, XMMRegister nds, Address src);
1783 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1784 void vsubss(XMMRegister dst, XMMRegister nds, Address src);
1785 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1786
1787
1788 //====================VECTOR ARITHMETIC=====================================
1789
1790 // Add Packed Floating-Point Values
1791 void addpd(XMMRegister dst, XMMRegister src);
1792 void addps(XMMRegister dst, XMMRegister src);
1793 void vaddpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1794 void vaddps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1795 void vaddpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1796 void vaddps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1797
1798 // Subtract Packed Floating-Point Values
1799 void subpd(XMMRegister dst, XMMRegister src);
1800 void subps(XMMRegister dst, XMMRegister src);
1801 void vsubpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1802 void vsubps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1803 void vsubpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1804 void vsubps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1805
1806 // Multiply Packed Floating-Point Values
1807 void mulpd(XMMRegister dst, XMMRegister src);
1808 void mulpd(XMMRegister dst, Address src);
1809 void mulps(XMMRegister dst, XMMRegister src);
1810 void vmulpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1811 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
1701
1702 void subq(Address dst, int32_t imm32);
1703 void subq(Address dst, Register src);
1704 void subq(Register dst, int32_t imm32);
1705 void subq(Register dst, Address src);
1706 void subq(Register dst, Register src);
1707
1708 // Force generation of a 4 byte immediate value even if it fits into 8bit
1709 void subl_imm32(Register dst, int32_t imm32);
1710 void subq_imm32(Register dst, int32_t imm32);
1711
1712 // Subtract Scalar Double-Precision Floating-Point Values
1713 void subsd(XMMRegister dst, Address src);
1714 void subsd(XMMRegister dst, XMMRegister src);
1715
1716 // Subtract Scalar Single-Precision Floating-Point Values
1717 void subss(XMMRegister dst, Address src);
1718 void subss(XMMRegister dst, XMMRegister src);
1719
1720 void testb(Register dst, int imm8);
1721 void testb(Address dst, int imm8);
1722
1723 void testl(Register dst, int32_t imm32);
1724 void testl(Register dst, Register src);
1725 void testl(Register dst, Address src);
1726
1727 void testq(Register dst, int32_t imm32);
1728 void testq(Register dst, Register src);
1729
1730 // BMI - count trailing zeros
1731 void tzcntl(Register dst, Register src);
1732 void tzcntq(Register dst, Register src);
1733
1734 // Unordered Compare Scalar Double-Precision Floating-Point Values and set EFLAGS
1735 void ucomisd(XMMRegister dst, Address src);
1736 void ucomisd(XMMRegister dst, XMMRegister src);
1737
1738 // Unordered Compare Scalar Single-Precision Floating-Point Values and set EFLAGS
1739 void ucomiss(XMMRegister dst, Address src);
1740 void ucomiss(XMMRegister dst, XMMRegister src);
1741
1774 void vaddss(XMMRegister dst, XMMRegister nds, Address src);
1775 void vaddss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1776 void vdivsd(XMMRegister dst, XMMRegister nds, Address src);
1777 void vdivsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1778 void vdivss(XMMRegister dst, XMMRegister nds, Address src);
1779 void vdivss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1780 void vmulsd(XMMRegister dst, XMMRegister nds, Address src);
1781 void vmulsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1782 void vmulss(XMMRegister dst, XMMRegister nds, Address src);
1783 void vmulss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1784 void vsubsd(XMMRegister dst, XMMRegister nds, Address src);
1785 void vsubsd(XMMRegister dst, XMMRegister nds, XMMRegister src);
1786 void vsubss(XMMRegister dst, XMMRegister nds, Address src);
1787 void vsubss(XMMRegister dst, XMMRegister nds, XMMRegister src);
1788
1789
1790 //====================VECTOR ARITHMETIC=====================================
1791
1792 // Add Packed Floating-Point Values
1793 void addpd(XMMRegister dst, XMMRegister src);
1794 void addpd(XMMRegister dst, Address src);
1795 void addps(XMMRegister dst, XMMRegister src);
1796 void vaddpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1797 void vaddps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1798 void vaddpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1799 void vaddps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1800
1801 // Subtract Packed Floating-Point Values
1802 void subpd(XMMRegister dst, XMMRegister src);
1803 void subps(XMMRegister dst, XMMRegister src);
1804 void vsubpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1805 void vsubps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1806 void vsubpd(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1807 void vsubps(XMMRegister dst, XMMRegister nds, Address src, int vector_len);
1808
1809 // Multiply Packed Floating-Point Values
1810 void mulpd(XMMRegister dst, XMMRegister src);
1811 void mulpd(XMMRegister dst, Address src);
1812 void mulps(XMMRegister dst, XMMRegister src);
1813 void vmulpd(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1814 void vmulps(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
|