OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 | 215 |
216 // aliases | 216 // aliases |
217 carry = below, | 217 carry = below, |
218 not_carry = above_equal, | 218 not_carry = above_equal, |
219 zero = equal, | 219 zero = equal, |
220 not_zero = not_equal, | 220 not_zero = not_equal, |
221 sign = negative, | 221 sign = negative, |
222 not_sign = positive | 222 not_sign = positive |
223 }; | 223 }; |
224 | 224 |
| 225 |
225 // Returns the equivalent of !cc. | 226 // Returns the equivalent of !cc. |
226 // Negation of the default no_condition (-1) results in a non-default | 227 // Negation of the default no_condition (-1) results in a non-default |
227 // no_condition value (-2). As long as tests for no_condition check | 228 // no_condition value (-2). As long as tests for no_condition check |
228 // for condition < 0, this will work as expected. | 229 // for condition < 0, this will work as expected. |
229 inline Condition NegateCondition(Condition cc) { | 230 inline Condition NegateCondition(Condition cc) { |
230 return static_cast<Condition>(cc ^ 1); | 231 return static_cast<Condition>(cc ^ 1); |
231 } | 232 } |
232 | 233 |
233 | 234 |
234 // Commute a condition such that {a cond b == b cond' a}. | 235 // Commute a condition such that {a cond b == b cond' a}. |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
350 explicit Operand(Register index, | 351 explicit Operand(Register index, |
351 ScaleFactor scale, | 352 ScaleFactor scale, |
352 int32_t disp, | 353 int32_t disp, |
353 RelocInfo::Mode rmode = RelocInfo::NONE32); | 354 RelocInfo::Mode rmode = RelocInfo::NONE32); |
354 | 355 |
355 static Operand JumpTable(Register index, ScaleFactor scale, Label* table) { | 356 static Operand JumpTable(Register index, ScaleFactor scale, Label* table) { |
356 return Operand(index, scale, reinterpret_cast<int32_t>(table), | 357 return Operand(index, scale, reinterpret_cast<int32_t>(table), |
357 RelocInfo::INTERNAL_REFERENCE); | 358 RelocInfo::INTERNAL_REFERENCE); |
358 } | 359 } |
359 | 360 |
360 // Offset from existing memory operand. | |
361 // The offset is added to existing displacement as 32-bit signed value. | |
362 // The caller must ensure overflow does not occur. | |
363 Operand(const Operand& base, int32_t offset); | |
364 | |
365 static Operand StaticVariable(const ExternalReference& ext) { | 361 static Operand StaticVariable(const ExternalReference& ext) { |
366 return Operand(reinterpret_cast<int32_t>(ext.address()), | 362 return Operand(reinterpret_cast<int32_t>(ext.address()), |
367 RelocInfo::EXTERNAL_REFERENCE); | 363 RelocInfo::EXTERNAL_REFERENCE); |
368 } | 364 } |
369 | 365 |
370 static Operand StaticArray(Register index, | 366 static Operand StaticArray(Register index, |
371 ScaleFactor scale, | 367 ScaleFactor scale, |
372 const ExternalReference& arr) { | 368 const ExternalReference& arr) { |
373 return Operand(index, scale, reinterpret_cast<int32_t>(arr.address()), | 369 return Operand(index, scale, reinterpret_cast<int32_t>(arr.address()), |
374 RelocInfo::EXTERNAL_REFERENCE); | 370 RelocInfo::EXTERNAL_REFERENCE); |
(...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 void mulss(XMMRegister dst, const Operand& src); | 956 void mulss(XMMRegister dst, const Operand& src); |
961 void divss(XMMRegister dst, XMMRegister src) { divss(dst, Operand(src)); } | 957 void divss(XMMRegister dst, XMMRegister src) { divss(dst, Operand(src)); } |
962 void divss(XMMRegister dst, const Operand& src); | 958 void divss(XMMRegister dst, const Operand& src); |
963 void sqrtss(XMMRegister dst, XMMRegister src) { sqrtss(dst, Operand(src)); } | 959 void sqrtss(XMMRegister dst, XMMRegister src) { sqrtss(dst, Operand(src)); } |
964 void sqrtss(XMMRegister dst, const Operand& src); | 960 void sqrtss(XMMRegister dst, const Operand& src); |
965 | 961 |
966 void ucomiss(XMMRegister dst, XMMRegister src) { ucomiss(dst, Operand(src)); } | 962 void ucomiss(XMMRegister dst, XMMRegister src) { ucomiss(dst, Operand(src)); } |
967 void ucomiss(XMMRegister dst, const Operand& src); | 963 void ucomiss(XMMRegister dst, const Operand& src); |
968 void movaps(XMMRegister dst, XMMRegister src); | 964 void movaps(XMMRegister dst, XMMRegister src); |
969 void shufps(XMMRegister dst, XMMRegister src, byte imm8); | 965 void shufps(XMMRegister dst, XMMRegister src, byte imm8); |
970 void movups(XMMRegister dst, const Operand& src); | |
971 void movups(const Operand& dst, XMMRegister src); | |
972 | 966 |
973 void maxss(XMMRegister dst, XMMRegister src) { maxss(dst, Operand(src)); } | 967 void maxss(XMMRegister dst, XMMRegister src) { maxss(dst, Operand(src)); } |
974 void maxss(XMMRegister dst, const Operand& src); | 968 void maxss(XMMRegister dst, const Operand& src); |
975 void minss(XMMRegister dst, XMMRegister src) { minss(dst, Operand(src)); } | 969 void minss(XMMRegister dst, XMMRegister src) { minss(dst, Operand(src)); } |
976 void minss(XMMRegister dst, const Operand& src); | 970 void minss(XMMRegister dst, const Operand& src); |
977 | 971 |
978 void andps(XMMRegister dst, const Operand& src); | 972 void andps(XMMRegister dst, const Operand& src); |
979 void andps(XMMRegister dst, XMMRegister src) { andps(dst, Operand(src)); } | 973 void andps(XMMRegister dst, XMMRegister src) { andps(dst, Operand(src)); } |
980 void xorps(XMMRegister dst, const Operand& src); | 974 void xorps(XMMRegister dst, const Operand& src); |
981 void xorps(XMMRegister dst, XMMRegister src) { xorps(dst, Operand(src)); } | 975 void xorps(XMMRegister dst, XMMRegister src) { xorps(dst, Operand(src)); } |
982 void orps(XMMRegister dst, const Operand& src); | 976 void orps(XMMRegister dst, const Operand& src); |
983 void orps(XMMRegister dst, XMMRegister src) { orps(dst, Operand(src)); } | 977 void orps(XMMRegister dst, XMMRegister src) { orps(dst, Operand(src)); } |
984 | 978 |
985 void addps(XMMRegister dst, const Operand& src); | 979 void addps(XMMRegister dst, const Operand& src); |
986 void addps(XMMRegister dst, XMMRegister src) { addps(dst, Operand(src)); } | 980 void addps(XMMRegister dst, XMMRegister src) { addps(dst, Operand(src)); } |
987 void subps(XMMRegister dst, const Operand& src); | 981 void subps(XMMRegister dst, const Operand& src); |
988 void subps(XMMRegister dst, XMMRegister src) { subps(dst, Operand(src)); } | 982 void subps(XMMRegister dst, XMMRegister src) { subps(dst, Operand(src)); } |
989 void mulps(XMMRegister dst, const Operand& src); | 983 void mulps(XMMRegister dst, const Operand& src); |
990 void mulps(XMMRegister dst, XMMRegister src) { mulps(dst, Operand(src)); } | 984 void mulps(XMMRegister dst, XMMRegister src) { mulps(dst, Operand(src)); } |
991 void divps(XMMRegister dst, const Operand& src); | 985 void divps(XMMRegister dst, const Operand& src); |
992 void divps(XMMRegister dst, XMMRegister src) { divps(dst, Operand(src)); } | 986 void divps(XMMRegister dst, XMMRegister src) { divps(dst, Operand(src)); } |
993 void minps(XMMRegister dst, XMMRegister src) { minps(dst, Operand(src)); } | |
994 void minps(XMMRegister dst, const Operand& src); | |
995 void maxps(XMMRegister dst, XMMRegister src) { maxps(dst, Operand(src)); } | |
996 void maxps(XMMRegister dst, const Operand& src); | |
997 void rcpps(XMMRegister dst, XMMRegister src) { rcpps(dst, Operand(src)); } | |
998 void rcpps(XMMRegister dst, const Operand& src); | |
999 void rsqrtps(XMMRegister dst, XMMRegister src) { rsqrtps(dst, Operand(src)); } | |
1000 void rsqrtps(XMMRegister dst, const Operand& src); | |
1001 void sqrtps(XMMRegister dst, XMMRegister src) { sqrtps(dst, Operand(src)); } | |
1002 void sqrtps(XMMRegister dst, const Operand& src); | |
1003 | |
1004 void cmpps(XMMRegister dst, XMMRegister src, int8_t cmp); | |
1005 void cmpeqps(XMMRegister dst, XMMRegister src); | |
1006 void cmpltps(XMMRegister dst, XMMRegister src); | |
1007 void cmpleps(XMMRegister dst, XMMRegister src); | |
1008 void cmpneqps(XMMRegister dst, XMMRegister src); | |
1009 void cmpnltps(XMMRegister dst, XMMRegister src); | |
1010 void cmpnleps(XMMRegister dst, XMMRegister src); | |
1011 | 987 |
1012 // SSE2 instructions | 988 // SSE2 instructions |
1013 void cvttss2si(Register dst, const Operand& src); | 989 void cvttss2si(Register dst, const Operand& src); |
1014 void cvttss2si(Register dst, XMMRegister src) { | 990 void cvttss2si(Register dst, XMMRegister src) { |
1015 cvttss2si(dst, Operand(src)); | 991 cvttss2si(dst, Operand(src)); |
1016 } | 992 } |
1017 void cvttsd2si(Register dst, const Operand& src); | 993 void cvttsd2si(Register dst, const Operand& src); |
1018 void cvttsd2si(Register dst, XMMRegister src) { | 994 void cvttsd2si(Register dst, XMMRegister src) { |
1019 cvttsd2si(dst, Operand(src)); | 995 cvttsd2si(dst, Operand(src)); |
1020 } | 996 } |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1107 void pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle); | 1083 void pshufd(XMMRegister dst, XMMRegister src, uint8_t shuffle); |
1108 void pextrd(Register dst, XMMRegister src, int8_t offset) { | 1084 void pextrd(Register dst, XMMRegister src, int8_t offset) { |
1109 pextrd(Operand(dst), src, offset); | 1085 pextrd(Operand(dst), src, offset); |
1110 } | 1086 } |
1111 void pextrd(const Operand& dst, XMMRegister src, int8_t offset); | 1087 void pextrd(const Operand& dst, XMMRegister src, int8_t offset); |
1112 void pinsrd(XMMRegister dst, Register src, int8_t offset) { | 1088 void pinsrd(XMMRegister dst, Register src, int8_t offset) { |
1113 pinsrd(dst, Operand(src), offset); | 1089 pinsrd(dst, Operand(src), offset); |
1114 } | 1090 } |
1115 void pinsrd(XMMRegister dst, const Operand& src, int8_t offset); | 1091 void pinsrd(XMMRegister dst, const Operand& src, int8_t offset); |
1116 | 1092 |
1117 void paddd(XMMRegister dst, XMMRegister src) { paddd(dst, Operand(src)); } | |
1118 void paddd(XMMRegister dst, const Operand& src); | |
1119 void psubd(XMMRegister dst, XMMRegister src) { psubd(dst, Operand(src)); } | |
1120 void psubd(XMMRegister dst, const Operand& src); | |
1121 void pmuludq(XMMRegister dst, XMMRegister src) { pmuludq(dst, Operand(src)); } | |
1122 void pmuludq(XMMRegister dst, const Operand& src); | |
1123 void punpackldq(XMMRegister dst, XMMRegister src) { | |
1124 punpackldq(dst, Operand(src)); | |
1125 } | |
1126 void punpackldq(XMMRegister dst, const Operand& src); | |
1127 void cvtps2dq(XMMRegister dst, XMMRegister src) { | |
1128 cvtps2dq(dst, Operand(src)); | |
1129 } | |
1130 void cvtps2dq(XMMRegister dst, const Operand& src); | |
1131 void cvtdq2ps(XMMRegister dst, XMMRegister src) { | |
1132 cvtdq2ps(dst, Operand(src)); | |
1133 } | |
1134 void cvtdq2ps(XMMRegister dst, const Operand& src); | |
1135 | |
1136 // SSE4.1 instructions | |
1137 void insertps(XMMRegister dst, XMMRegister src, byte imm8); | |
1138 void pmulld(XMMRegister dst, XMMRegister src) { pmulld(dst, Operand(src)); } | |
1139 void pmulld(XMMRegister dst, const Operand& src); | |
1140 | |
1141 // AVX instructions | 1093 // AVX instructions |
1142 void vfmadd132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { | 1094 void vfmadd132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
1143 vfmadd132sd(dst, src1, Operand(src2)); | 1095 vfmadd132sd(dst, src1, Operand(src2)); |
1144 } | 1096 } |
1145 void vfmadd213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { | 1097 void vfmadd213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
1146 vfmadd213sd(dst, src1, Operand(src2)); | 1098 vfmadd213sd(dst, src1, Operand(src2)); |
1147 } | 1099 } |
1148 void vfmadd231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { | 1100 void vfmadd231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
1149 vfmadd231sd(dst, src1, Operand(src2)); | 1101 vfmadd231sd(dst, src1, Operand(src2)); |
1150 } | 1102 } |
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1655 Assembler* assembler_; | 1607 Assembler* assembler_; |
1656 #ifdef DEBUG | 1608 #ifdef DEBUG |
1657 int space_before_; | 1609 int space_before_; |
1658 #endif | 1610 #endif |
1659 }; | 1611 }; |
1660 | 1612 |
1661 } // namespace internal | 1613 } // namespace internal |
1662 } // namespace v8 | 1614 } // namespace v8 |
1663 | 1615 |
1664 #endif // V8_IA32_ASSEMBLER_IA32_H_ | 1616 #endif // V8_IA32_ASSEMBLER_IA32_H_ |
OLD | NEW |