< prev index next >

src/hotspot/cpu/x86/assembler_x86.hpp

Print this page
rev 50140 : Vector cast support


1077   void crc32(Register crc, Address adr, int8_t sizeInBytes);
1078 
1079   // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value
1080   void cvtsd2ss(XMMRegister dst, XMMRegister src);
1081   void cvtsd2ss(XMMRegister dst, Address src);
1082 
1083   // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value
1084   void cvtsi2sdl(XMMRegister dst, Register src);
1085   void cvtsi2sdl(XMMRegister dst, Address src);
1086   void cvtsi2sdq(XMMRegister dst, Register src);
1087   void cvtsi2sdq(XMMRegister dst, Address src);
1088 
1089   // Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value
1090   void cvtsi2ssl(XMMRegister dst, Register src);
1091   void cvtsi2ssl(XMMRegister dst, Address src);
1092   void cvtsi2ssq(XMMRegister dst, Register src);
1093   void cvtsi2ssq(XMMRegister dst, Address src);
1094 
1095   // Convert Packed Signed Doubleword Integers to Packed Double-Precision Floating-Point Value
1096   void cvtdq2pd(XMMRegister dst, XMMRegister src);

1097 
1098   // Convert Packed Signed Doubleword Integers to Packed Single-Precision Floating-Point Value
1099   void cvtdq2ps(XMMRegister dst, XMMRegister src);

1100 
1101   // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value
1102   void cvtss2sd(XMMRegister dst, XMMRegister src);
1103   void cvtss2sd(XMMRegister dst, Address src);
1104 
1105   // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer
1106   void cvttsd2sil(Register dst, Address src);
1107   void cvttsd2sil(Register dst, XMMRegister src);
1108   void cvttsd2siq(Register dst, XMMRegister src);
1109 
1110   // Convert with Truncation Scalar Single-Precision Floating-Point Value to Doubleword Integer
1111   void cvttss2sil(Register dst, XMMRegister src);
1112   void cvttss2siq(Register dst, XMMRegister src);
1113 

1114   void cvttpd2dq(XMMRegister dst, XMMRegister src);
1115 
1116   // Convert vector float and double
1117   void vcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);
1118   void evcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);














1119 
1120   //Abs of packed Integer values
1121   void pabsb(XMMRegister dst, XMMRegister src);
1122   void pabsw(XMMRegister dst, XMMRegister src);
1123   void pabsd(XMMRegister dst, XMMRegister src);
1124   void vpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1125   void vpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1126   void vpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1127   void evpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1128   void evpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1129   void evpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1130   void evpabsq(XMMRegister dst, XMMRegister src, int vector_len);
1131 
1132   // Divide Scalar Double-Precision Floating-Point Values
1133   void divsd(XMMRegister dst, Address src);
1134   void divsd(XMMRegister dst, XMMRegister src);
1135 
1136   // Divide Scalar Single-Precision Floating-Point Values
1137   void divss(XMMRegister dst, Address src);
1138   void divss(XMMRegister dst, XMMRegister src);


1604   void orl(Address dst, Register src);
1605 
1606   void orq(Address dst, int32_t imm32);
1607   void orq(Register dst, int32_t imm32);
1608   void orq(Register dst, Address src);
1609   void orq(Register dst, Register src);
1610 
1611   // Pack with unsigned saturation
1612   void packuswb(XMMRegister dst, XMMRegister src);
1613   void packuswb(XMMRegister dst, Address src);
1614   void vpackuswb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1615   void vpackusdw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1616 
1617   // Permutations
1618   void vpermq(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1619   void vpermq(XMMRegister dst, XMMRegister src, int imm8);
1620   void vpermd(XMMRegister dst,  XMMRegister nds, XMMRegister src);
1621   void vpermd(XMMRegister dst,  XMMRegister nds, Address src);
1622   void vperm2i128(XMMRegister dst,  XMMRegister nds, XMMRegister src, int imm8);
1623   void vperm2f128(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8);


1624 
1625   void pause();
1626 
1627   // Undefined Instruction
1628   void ud2();
1629 
1630   // SSE4.2 string instructions
1631   void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8);
1632   void pcmpestri(XMMRegister xmm1, Address src, int imm8);
1633 
1634   void pcmpeqb(XMMRegister dst, XMMRegister src);
1635   void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1636   void evpcmpeqb(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len);
1637   void evpcmpeqb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1638   void evpcmpeqb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1639 
1640   void vpcmpgtb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1641   void evpcmpgtb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1642   void evpcmpgtb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1643 


1689   void pinsrw(XMMRegister dst, Register src, int imm8);
1690   void pinsrw(XMMRegister dst, Address src, int imm8);
1691 
1692   // Zero extend moves
1693   void pmovzxbw(XMMRegister dst, XMMRegister src);
1694   void pmovzxbw(XMMRegister dst, Address src);
1695   void vpmovzxbw( XMMRegister dst, Address src, int vector_len);
1696   void pmovzxdq(XMMRegister dst, XMMRegister src);
1697   void vpmovzxdq(XMMRegister dst, XMMRegister src, int vector_len);
1698   void vpmovzxbd(XMMRegister dst, XMMRegister src, int vector_len);
1699   void vpmovzxbq(XMMRegister dst, XMMRegister src, int vector_len);
1700   void evpmovzxbw(XMMRegister dst, KRegister mask, Address src, int vector_len);
1701 
1702   // Sign extend moves
1703   void pmovsxbw(XMMRegister dst, XMMRegister src);
1704   void pmovsxbd(XMMRegister dst, XMMRegister src);
1705   void pmovsxbq(XMMRegister dst, XMMRegister src);
1706   void vpmovsxbd(XMMRegister dst, XMMRegister src, int vector_len);
1707   void vpmovsxbq(XMMRegister dst, XMMRegister src, int vector_len);
1708   void vpmovsxbw(XMMRegister dst, XMMRegister src, int vector_len);



1709 
1710   void evpmovwb(Address dst, XMMRegister src, int vector_len);
1711   void evpmovwb(Address dst, KRegister mask, XMMRegister src, int vector_len);
1712 
1713 #ifndef _LP64 // no 32bit push/pop on amd64
1714   void popl(Address dst);
1715 #endif
1716 
1717 #ifdef _LP64
1718   void popq(Address dst);
1719 #endif
1720 
1721   void popcntl(Register dst, Address src);
1722   void popcntl(Register dst, Register src);
1723 
1724   void vpopcntd(XMMRegister dst, XMMRegister src, int vector_len);
1725 
1726 #ifdef _LP64
1727   void popcntq(Register dst, Address src);
1728   void popcntq(Register dst, Register src);




1077   void crc32(Register crc, Address adr, int8_t sizeInBytes);
1078 
1079   // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value
1080   void cvtsd2ss(XMMRegister dst, XMMRegister src);
1081   void cvtsd2ss(XMMRegister dst, Address src);
1082 
1083   // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value
1084   void cvtsi2sdl(XMMRegister dst, Register src);
1085   void cvtsi2sdl(XMMRegister dst, Address src);
1086   void cvtsi2sdq(XMMRegister dst, Register src);
1087   void cvtsi2sdq(XMMRegister dst, Address src);
1088 
1089   // Convert Doubleword Integer to Scalar Single-Precision Floating-Point Value
1090   void cvtsi2ssl(XMMRegister dst, Register src);
1091   void cvtsi2ssl(XMMRegister dst, Address src);
1092   void cvtsi2ssq(XMMRegister dst, Register src);
1093   void cvtsi2ssq(XMMRegister dst, Address src);
1094 
1095   // Convert Packed Signed Doubleword Integers to Packed Double-Precision Floating-Point Value
1096   void cvtdq2pd(XMMRegister dst, XMMRegister src);
1097   void vcvtdq2pd(XMMRegister dst, XMMRegister src, int vector_len);
1098 
1099   // Convert Packed Signed Doubleword Integers to Packed Single-Precision Floating-Point Value
1100   void cvtdq2ps(XMMRegister dst, XMMRegister src);
1101   void vcvtdq2ps(XMMRegister dst, XMMRegister src, int vector_len);
1102 
1103   // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value
1104   void cvtss2sd(XMMRegister dst, XMMRegister src);
1105   void cvtss2sd(XMMRegister dst, Address src);
1106 
1107   // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer
1108   void cvttsd2sil(Register dst, Address src);
1109   void cvttsd2sil(Register dst, XMMRegister src);
1110   void cvttsd2siq(Register dst, XMMRegister src);
1111 
1112   // Convert with Truncation Scalar Single-Precision Floating-Point Value to Doubleword Integer
1113   void cvttss2sil(Register dst, XMMRegister src);
1114   void cvttss2siq(Register dst, XMMRegister src);
1115 
1116   // Convert vector double to int
1117   void cvttpd2dq(XMMRegister dst, XMMRegister src);
1118 
1119   // Convert vector float and double
1120   void vcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);
1121   void evcvtps2pd(XMMRegister dst, XMMRegister src, int vector_len);
1122   void vcvtpd2ps(XMMRegister dst, XMMRegister src, int vector_len);
1123   void evcvtpd2ps(XMMRegister dst, XMMRegister src, int vector_len);
1124 
1125   // Convert vector long to vector FP
1126   void evcvtqq2ps(XMMRegister dst, XMMRegister src, int vector_len);
1127   void evcvtqq2pd(XMMRegister dst, XMMRegister src, int vector_len);
1128 
1129   // Evex casts with truncation
1130   void evpmovwb(XMMRegister dst, XMMRegister src, int vector_len);
1131   void evpmovdw(XMMRegister dst, XMMRegister src, int vector_len);
1132   void evpmovdb(XMMRegister dst, XMMRegister src, int vector_len);
1133   void evpmovqd(XMMRegister dst, XMMRegister src, int vector_len);
1134   void evpmovqb(XMMRegister dst, XMMRegister src, int vector_len);
1135   void evpmovqw(XMMRegister dst, XMMRegister src, int vector_len);
1136 
1137   //Abs of packed Integer values
1138   void pabsb(XMMRegister dst, XMMRegister src);
1139   void pabsw(XMMRegister dst, XMMRegister src);
1140   void pabsd(XMMRegister dst, XMMRegister src);
1141   void vpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1142   void vpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1143   void vpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1144   void evpabsb(XMMRegister dst, XMMRegister src, int vector_len);
1145   void evpabsw(XMMRegister dst, XMMRegister src, int vector_len);
1146   void evpabsd(XMMRegister dst, XMMRegister src, int vector_len);
1147   void evpabsq(XMMRegister dst, XMMRegister src, int vector_len);
1148 
1149   // Divide Scalar Double-Precision Floating-Point Values
1150   void divsd(XMMRegister dst, Address src);
1151   void divsd(XMMRegister dst, XMMRegister src);
1152 
1153   // Divide Scalar Single-Precision Floating-Point Values
1154   void divss(XMMRegister dst, Address src);
1155   void divss(XMMRegister dst, XMMRegister src);


1621   void orl(Address dst, Register src);
1622 
1623   void orq(Address dst, int32_t imm32);
1624   void orq(Register dst, int32_t imm32);
1625   void orq(Register dst, Address src);
1626   void orq(Register dst, Register src);
1627 
1628   // Pack with unsigned saturation
1629   void packuswb(XMMRegister dst, XMMRegister src);
1630   void packuswb(XMMRegister dst, Address src);
1631   void vpackuswb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1632   void vpackusdw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1633 
1634   // Permutations
1635   void vpermq(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1636   void vpermq(XMMRegister dst, XMMRegister src, int imm8);
1637   void vpermd(XMMRegister dst,  XMMRegister nds, XMMRegister src);
1638   void vpermd(XMMRegister dst,  XMMRegister nds, Address src);
1639   void vperm2i128(XMMRegister dst,  XMMRegister nds, XMMRegister src, int imm8);
1640   void vperm2f128(XMMRegister dst, XMMRegister nds, XMMRegister src, int imm8);
1641   void vpermilps(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1642   void vpermpd(XMMRegister dst, XMMRegister src, int imm8, int vector_len);
1643 
1644   void pause();
1645 
1646   // Undefined Instruction
1647   void ud2();
1648 
1649   // SSE4.2 string instructions
1650   void pcmpestri(XMMRegister xmm1, XMMRegister xmm2, int imm8);
1651   void pcmpestri(XMMRegister xmm1, Address src, int imm8);
1652 
1653   void pcmpeqb(XMMRegister dst, XMMRegister src);
1654   void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1655   void evpcmpeqb(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len);
1656   void evpcmpeqb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1657   void evpcmpeqb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1658 
1659   void vpcmpgtb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len);
1660   void evpcmpgtb(KRegister kdst, XMMRegister nds, Address src, int vector_len);
1661   void evpcmpgtb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len);
1662 


1708   void pinsrw(XMMRegister dst, Register src, int imm8);
1709   void pinsrw(XMMRegister dst, Address src, int imm8);
1710 
1711   // Zero extend moves
1712   void pmovzxbw(XMMRegister dst, XMMRegister src);
1713   void pmovzxbw(XMMRegister dst, Address src);
1714   void vpmovzxbw( XMMRegister dst, Address src, int vector_len);
1715   void pmovzxdq(XMMRegister dst, XMMRegister src);
1716   void vpmovzxdq(XMMRegister dst, XMMRegister src, int vector_len);
1717   void vpmovzxbd(XMMRegister dst, XMMRegister src, int vector_len);
1718   void vpmovzxbq(XMMRegister dst, XMMRegister src, int vector_len);
1719   void evpmovzxbw(XMMRegister dst, KRegister mask, Address src, int vector_len);
1720 
1721   // Sign extend moves
1722   void pmovsxbw(XMMRegister dst, XMMRegister src);
1723   void pmovsxbd(XMMRegister dst, XMMRegister src);
1724   void pmovsxbq(XMMRegister dst, XMMRegister src);
1725   void vpmovsxbd(XMMRegister dst, XMMRegister src, int vector_len);
1726   void vpmovsxbq(XMMRegister dst, XMMRegister src, int vector_len);
1727   void vpmovsxbw(XMMRegister dst, XMMRegister src, int vector_len);
1728   void vpmovsxwd(XMMRegister dst, XMMRegister src, int vector_len);
1729   void vpmovsxwq(XMMRegister dst, XMMRegister src, int vector_len);
1730   void vpmovsxdq(XMMRegister dst, XMMRegister src, int vector_len);
1731 
1732   void evpmovwb(Address dst, XMMRegister src, int vector_len);
1733   void evpmovwb(Address dst, KRegister mask, XMMRegister src, int vector_len);
1734 
1735 #ifndef _LP64 // no 32bit push/pop on amd64
1736   void popl(Address dst);
1737 #endif
1738 
1739 #ifdef _LP64
1740   void popq(Address dst);
1741 #endif
1742 
1743   void popcntl(Register dst, Address src);
1744   void popcntl(Register dst, Register src);
1745 
1746   void vpopcntd(XMMRegister dst, XMMRegister src, int vector_len);
1747 
1748 #ifdef _LP64
1749   void popcntq(Register dst, Address src);
1750   void popcntq(Register dst, Register src);


< prev index next >