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 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 "xmm3", | 212 "xmm3", |
213 "xmm4", | 213 "xmm4", |
214 "xmm5", | 214 "xmm5", |
215 "xmm6", | 215 "xmm6", |
216 "xmm7" | 216 "xmm7" |
217 }; | 217 }; |
218 return names[index]; | 218 return names[index]; |
219 } | 219 } |
220 }; | 220 }; |
221 | 221 |
| 222 typedef XMMRegister Float32x4Register; |
| 223 typedef XMMRegister Int32x4Register; |
222 | 224 |
223 #define xmm0 (static_cast<const XMMRegister&>(double_register_0)) | 225 #define xmm0 (static_cast<const XMMRegister&>(double_register_0)) |
224 #define xmm1 (static_cast<const XMMRegister&>(double_register_1)) | 226 #define xmm1 (static_cast<const XMMRegister&>(double_register_1)) |
225 #define xmm2 (static_cast<const XMMRegister&>(double_register_2)) | 227 #define xmm2 (static_cast<const XMMRegister&>(double_register_2)) |
226 #define xmm3 (static_cast<const XMMRegister&>(double_register_3)) | 228 #define xmm3 (static_cast<const XMMRegister&>(double_register_3)) |
227 #define xmm4 (static_cast<const XMMRegister&>(double_register_4)) | 229 #define xmm4 (static_cast<const XMMRegister&>(double_register_4)) |
228 #define xmm5 (static_cast<const XMMRegister&>(double_register_5)) | 230 #define xmm5 (static_cast<const XMMRegister&>(double_register_5)) |
229 #define xmm6 (static_cast<const XMMRegister&>(double_register_6)) | 231 #define xmm6 (static_cast<const XMMRegister&>(double_register_6)) |
230 #define xmm7 (static_cast<const XMMRegister&>(double_register_7)) | 232 #define xmm7 (static_cast<const XMMRegister&>(double_register_7)) |
231 #define no_xmm_reg (static_cast<const XMMRegister&>(no_double_reg)) | 233 #define no_xmm_reg (static_cast<const XMMRegister&>(no_double_reg)) |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 times_twice_pointer_size = times_8 | 385 times_twice_pointer_size = times_8 |
384 }; | 386 }; |
385 | 387 |
386 | 388 |
387 class Operand BASE_EMBEDDED { | 389 class Operand BASE_EMBEDDED { |
388 public: | 390 public: |
389 // XMM reg | 391 // XMM reg |
390 INLINE(explicit Operand(XMMRegister xmm_reg)); | 392 INLINE(explicit Operand(XMMRegister xmm_reg)); |
391 | 393 |
392 // [disp/r] | 394 // [disp/r] |
393 INLINE(explicit Operand(int32_t disp, RelocInfo::Mode rmode)); | 395 INLINE(explicit Operand(int32_t disp, |
| 396 RelocInfo::Mode rmode = RelocInfo::NONE32)); |
394 // disp only must always be relocated | 397 // disp only must always be relocated |
395 | 398 |
396 // [base + disp/r] | 399 // [base + disp/r] |
397 explicit Operand(Register base, int32_t disp, | 400 explicit Operand(Register base, int32_t disp, |
398 RelocInfo::Mode rmode = RelocInfo::NONE32); | 401 RelocInfo::Mode rmode = RelocInfo::NONE32); |
399 | 402 |
400 // [base + index*scale + disp/r] | 403 // [base + index*scale + disp/r] |
401 explicit Operand(Register base, | 404 explicit Operand(Register base, |
402 Register index, | 405 Register index, |
403 ScaleFactor scale, | 406 ScaleFactor scale, |
404 int32_t disp, | 407 int32_t disp, |
405 RelocInfo::Mode rmode = RelocInfo::NONE32); | 408 RelocInfo::Mode rmode = RelocInfo::NONE32); |
406 | 409 |
407 // [index*scale + disp/r] | 410 // [index*scale + disp/r] |
408 explicit Operand(Register index, | 411 explicit Operand(Register index, |
409 ScaleFactor scale, | 412 ScaleFactor scale, |
410 int32_t disp, | 413 int32_t disp, |
411 RelocInfo::Mode rmode = RelocInfo::NONE32); | 414 RelocInfo::Mode rmode = RelocInfo::NONE32); |
412 | 415 |
| 416 // Offset from existing memory operand. |
| 417 // Offset is added to existing displacement as 32-bit signed values and |
| 418 // this must not overflow. |
| 419 Operand(const Operand& base, int32_t offset); |
| 420 |
413 static Operand StaticVariable(const ExternalReference& ext) { | 421 static Operand StaticVariable(const ExternalReference& ext) { |
414 return Operand(reinterpret_cast<int32_t>(ext.address()), | 422 return Operand(reinterpret_cast<int32_t>(ext.address()), |
415 RelocInfo::EXTERNAL_REFERENCE); | 423 RelocInfo::EXTERNAL_REFERENCE); |
416 } | 424 } |
417 | 425 |
418 static Operand StaticArray(Register index, | 426 static Operand StaticArray(Register index, |
419 ScaleFactor scale, | 427 ScaleFactor scale, |
420 const ExternalReference& arr) { | 428 const ExternalReference& arr) { |
421 return Operand(index, scale, reinterpret_cast<int32_t>(arr.address()), | 429 return Operand(index, scale, reinterpret_cast<int32_t>(arr.address()), |
422 RelocInfo::EXTERNAL_REFERENCE); | 430 RelocInfo::EXTERNAL_REFERENCE); |
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 void frndint(); | 1015 void frndint(); |
1008 | 1016 |
1009 void sahf(); | 1017 void sahf(); |
1010 void setcc(Condition cc, Register reg); | 1018 void setcc(Condition cc, Register reg); |
1011 | 1019 |
1012 void cpuid(); | 1020 void cpuid(); |
1013 | 1021 |
1014 // SSE instructions | 1022 // SSE instructions |
1015 void movaps(XMMRegister dst, XMMRegister src); | 1023 void movaps(XMMRegister dst, XMMRegister src); |
1016 void shufps(XMMRegister dst, XMMRegister src, byte imm8); | 1024 void shufps(XMMRegister dst, XMMRegister src, byte imm8); |
| 1025 void movups(XMMRegister dst, const Operand& src); |
| 1026 void movups(const Operand& dst, XMMRegister src); |
1017 | 1027 |
1018 void andps(XMMRegister dst, const Operand& src); | 1028 void andps(XMMRegister dst, const Operand& src); |
1019 void andps(XMMRegister dst, XMMRegister src) { andps(dst, Operand(src)); } | 1029 void andps(XMMRegister dst, XMMRegister src) { andps(dst, Operand(src)); } |
1020 void xorps(XMMRegister dst, const Operand& src); | 1030 void xorps(XMMRegister dst, const Operand& src); |
1021 void xorps(XMMRegister dst, XMMRegister src) { xorps(dst, Operand(src)); } | 1031 void xorps(XMMRegister dst, XMMRegister src) { xorps(dst, Operand(src)); } |
1022 void orps(XMMRegister dst, const Operand& src); | 1032 void orps(XMMRegister dst, const Operand& src); |
1023 void orps(XMMRegister dst, XMMRegister src) { orps(dst, Operand(src)); } | 1033 void orps(XMMRegister dst, XMMRegister src) { orps(dst, Operand(src)); } |
1024 | 1034 |
1025 void addps(XMMRegister dst, const Operand& src); | 1035 void addps(XMMRegister dst, const Operand& src); |
1026 void addps(XMMRegister dst, XMMRegister src) { addps(dst, Operand(src)); } | 1036 void addps(XMMRegister dst, XMMRegister src) { addps(dst, Operand(src)); } |
1027 void subps(XMMRegister dst, const Operand& src); | 1037 void subps(XMMRegister dst, const Operand& src); |
1028 void subps(XMMRegister dst, XMMRegister src) { subps(dst, Operand(src)); } | 1038 void subps(XMMRegister dst, XMMRegister src) { subps(dst, Operand(src)); } |
1029 void mulps(XMMRegister dst, const Operand& src); | 1039 void mulps(XMMRegister dst, const Operand& src); |
1030 void mulps(XMMRegister dst, XMMRegister src) { mulps(dst, Operand(src)); } | 1040 void mulps(XMMRegister dst, XMMRegister src) { mulps(dst, Operand(src)); } |
1031 void divps(XMMRegister dst, const Operand& src); | 1041 void divps(XMMRegister dst, const Operand& src); |
1032 void divps(XMMRegister dst, XMMRegister src) { divps(dst, Operand(src)); } | 1042 void divps(XMMRegister dst, XMMRegister src) { divps(dst, Operand(src)); } |
| 1043 void minps(XMMRegister dst, XMMRegister src) { minps(dst, Operand(src)); } |
| 1044 void minps(XMMRegister dst, const Operand& src); |
| 1045 void maxps(XMMRegister dst, XMMRegister src) { maxps(dst, Operand(src)); } |
| 1046 void maxps(XMMRegister dst, const Operand& src); |
| 1047 void rcpps(XMMRegister dst, XMMRegister src) { rcpps(dst, Operand(src)); } |
| 1048 void rcpps(XMMRegister dst, const Operand& src); |
| 1049 void rsqrtps(XMMRegister dst, XMMRegister src) { rsqrtps(dst, Operand(src)); } |
| 1050 void rsqrtps(XMMRegister dst, const Operand& src); |
| 1051 void sqrtps(XMMRegister dst, XMMRegister src) { sqrtps(dst, Operand(src)); } |
| 1052 void sqrtps(XMMRegister dst, const Operand& src); |
| 1053 |
| 1054 void cvtdq2ps(XMMRegister dst, const Operand& src); |
| 1055 void cmpps(XMMRegister dst, XMMRegister src, int8_t cmp); |
| 1056 void cmpeqps(XMMRegister dst, XMMRegister src); |
| 1057 void cmpltps(XMMRegister dst, XMMRegister src); |
| 1058 void cmpleps(XMMRegister dst, XMMRegister src); |
| 1059 void cmpneqps(XMMRegister dst, XMMRegister src); |
| 1060 void cmpnltps(XMMRegister dst, XMMRegister src); |
| 1061 void cmpnleps(XMMRegister dst, XMMRegister src); |
| 1062 |
| 1063 // SSE 2, introduced by SIMD |
| 1064 void paddd(XMMRegister dst, XMMRegister src) { paddd(dst, Operand(src)); } |
| 1065 void paddd(XMMRegister dst, const Operand& src); |
| 1066 void psubd(XMMRegister dst, XMMRegister src) { psubd(dst, Operand(src)); } |
| 1067 void psubd(XMMRegister dst, const Operand& src); |
| 1068 void pmuludq(XMMRegister dst, XMMRegister src) { pmuludq(dst, Operand(src)); } |
| 1069 void pmuludq(XMMRegister dst, const Operand& src); |
| 1070 void punpackldq(XMMRegister dst, XMMRegister src) { |
| 1071 punpackldq(dst, Operand(src)); |
| 1072 } |
| 1073 void punpackldq(XMMRegister dst, const Operand& src); |
| 1074 void cvtps2dq(XMMRegister dst, XMMRegister src) { |
| 1075 cvtps2dq(dst, Operand(src)); |
| 1076 } |
| 1077 void cvtps2dq(XMMRegister dst, const Operand& src); |
| 1078 void cvtdq2ps(XMMRegister dst, XMMRegister src) { |
| 1079 cvtdq2ps(dst, Operand(src)); |
| 1080 } |
| 1081 // SSE 4.1, introduced by SIMD |
| 1082 void insertps(XMMRegister dst, XMMRegister src, byte imm8); |
| 1083 void pmulld(XMMRegister dst, XMMRegister src) { pmulld(dst, Operand(src)); } |
| 1084 void pmulld(XMMRegister dst, const Operand& src); |
1033 | 1085 |
1034 // SSE2 instructions | 1086 // SSE2 instructions |
1035 void cvttss2si(Register dst, const Operand& src); | 1087 void cvttss2si(Register dst, const Operand& src); |
1036 void cvttss2si(Register dst, XMMRegister src) { | 1088 void cvttss2si(Register dst, XMMRegister src) { |
1037 cvttss2si(dst, Operand(src)); | 1089 cvttss2si(dst, Operand(src)); |
1038 } | 1090 } |
1039 void cvttsd2si(Register dst, const Operand& src); | 1091 void cvttsd2si(Register dst, const Operand& src); |
1040 void cvtsd2si(Register dst, XMMRegister src); | 1092 void cvtsd2si(Register dst, XMMRegister src); |
1041 | 1093 |
1042 void cvtsi2sd(XMMRegister dst, Register src) { cvtsi2sd(dst, Operand(src)); } | 1094 void cvtsi2sd(XMMRegister dst, Register src) { cvtsi2sd(dst, Operand(src)); } |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1267 private: | 1319 private: |
1268 Assembler* assembler_; | 1320 Assembler* assembler_; |
1269 #ifdef DEBUG | 1321 #ifdef DEBUG |
1270 int space_before_; | 1322 int space_before_; |
1271 #endif | 1323 #endif |
1272 }; | 1324 }; |
1273 | 1325 |
1274 } } // namespace v8::internal | 1326 } } // namespace v8::internal |
1275 | 1327 |
1276 #endif // V8_IA32_ASSEMBLER_IA32_H_ | 1328 #endif // V8_IA32_ASSEMBLER_IA32_H_ |
OLD | NEW |