< prev index next >

src/cpu/x86/vm/assembler_x86.hpp

Print this page




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


< prev index next >