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 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1012 | 1012 |
1013 // Conditional jumps | 1013 // Conditional jumps |
1014 void j(Condition cc, Label* L); | 1014 void j(Condition cc, Label* L); |
1015 void j(Condition cc, Handle<Code> target, RelocInfo::Mode rmode); | 1015 void j(Condition cc, Handle<Code> target, RelocInfo::Mode rmode); |
1016 | 1016 |
1017 // Floating-point operations | 1017 // Floating-point operations |
1018 void fld(int i); | 1018 void fld(int i); |
1019 | 1019 |
1020 void fld1(); | 1020 void fld1(); |
1021 void fldz(); | 1021 void fldz(); |
| 1022 void fldpi(); |
1022 | 1023 |
1023 void fld_s(const Operand& adr); | 1024 void fld_s(const Operand& adr); |
1024 void fld_d(const Operand& adr); | 1025 void fld_d(const Operand& adr); |
1025 | 1026 |
1026 void fstp_s(const Operand& adr); | 1027 void fstp_s(const Operand& adr); |
1027 void fstp_d(const Operand& adr); | 1028 void fstp_d(const Operand& adr); |
1028 void fstp(int index); | 1029 void fstp(int index); |
1029 | 1030 |
1030 void fild_s(const Operand& adr); | 1031 void fild_s(const Operand& adr); |
1031 void fild_d(const Operand& adr); | 1032 void fild_d(const Operand& adr); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1073 | 1074 |
1074 void fsin(); | 1075 void fsin(); |
1075 void fcos(); | 1076 void fcos(); |
1076 | 1077 |
1077 void frndint(); | 1078 void frndint(); |
1078 | 1079 |
1079 void sahf(); | 1080 void sahf(); |
1080 | 1081 |
1081 // SSE2 instructions | 1082 // SSE2 instructions |
1082 void movd(XMMRegister dst, Register src); | 1083 void movd(XMMRegister dst, Register src); |
| 1084 void movd(Register dst, XMMRegister src); |
| 1085 void movq(XMMRegister dst, Register src); |
| 1086 void movq(Register dst, XMMRegister src); |
| 1087 void extractps(Register dst, XMMRegister src, byte imm8); |
1083 | 1088 |
1084 void movsd(const Operand& dst, XMMRegister src); | 1089 void movsd(const Operand& dst, XMMRegister src); |
1085 void movsd(XMMRegister dst, XMMRegister src); | 1090 void movsd(XMMRegister dst, XMMRegister src); |
1086 void movsd(XMMRegister dst, const Operand& src); | 1091 void movsd(XMMRegister dst, const Operand& src); |
1087 | 1092 |
1088 void cvttss2si(Register dst, const Operand& src); | 1093 void cvttss2si(Register dst, const Operand& src); |
1089 void cvttsd2si(Register dst, const Operand& src); | 1094 void cvttsd2si(Register dst, const Operand& src); |
1090 | 1095 |
1091 void cvtlsi2sd(XMMRegister dst, const Operand& src); | 1096 void cvtlsi2sd(XMMRegister dst, const Operand& src); |
1092 void cvtlsi2sd(XMMRegister dst, Register src); | 1097 void cvtlsi2sd(XMMRegister dst, Register src); |
(...skipping 10 matching lines...) Expand all Loading... |
1103 void xorpd(XMMRegister dst, XMMRegister src); | 1108 void xorpd(XMMRegister dst, XMMRegister src); |
1104 void sqrtsd(XMMRegister dst, XMMRegister src); | 1109 void sqrtsd(XMMRegister dst, XMMRegister src); |
1105 | 1110 |
1106 void comisd(XMMRegister dst, XMMRegister src); | 1111 void comisd(XMMRegister dst, XMMRegister src); |
1107 void ucomisd(XMMRegister dst, XMMRegister src); | 1112 void ucomisd(XMMRegister dst, XMMRegister src); |
1108 | 1113 |
1109 // The first argument is the reg field, the second argument is the r/m field. | 1114 // The first argument is the reg field, the second argument is the r/m field. |
1110 void emit_sse_operand(XMMRegister dst, XMMRegister src); | 1115 void emit_sse_operand(XMMRegister dst, XMMRegister src); |
1111 void emit_sse_operand(XMMRegister reg, const Operand& adr); | 1116 void emit_sse_operand(XMMRegister reg, const Operand& adr); |
1112 void emit_sse_operand(XMMRegister dst, Register src); | 1117 void emit_sse_operand(XMMRegister dst, Register src); |
| 1118 void emit_sse_operand(Register dst, XMMRegister src); |
1113 | 1119 |
1114 // Use either movsd or movlpd. | 1120 // Use either movsd or movlpd. |
1115 // void movdbl(XMMRegister dst, const Operand& src); | 1121 // void movdbl(XMMRegister dst, const Operand& src); |
1116 // void movdbl(const Operand& dst, XMMRegister src); | 1122 // void movdbl(const Operand& dst, XMMRegister src); |
1117 | 1123 |
1118 // Debugging | 1124 // Debugging |
1119 void Print(); | 1125 void Print(); |
1120 | 1126 |
1121 // Check the code size generated from label to here. | 1127 // Check the code size generated from label to here. |
1122 int SizeOfCodeGeneratedSince(Label* l) { return pc_offset() - l->pos(); } | 1128 int SizeOfCodeGeneratedSince(Label* l) { return pc_offset() - l->pos(); } |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1169 inline void emitl(uint32_t x); | 1175 inline void emitl(uint32_t x); |
1170 inline void emitq(uint64_t x, RelocInfo::Mode rmode); | 1176 inline void emitq(uint64_t x, RelocInfo::Mode rmode); |
1171 inline void emitw(uint16_t x); | 1177 inline void emitw(uint16_t x); |
1172 inline void emit_code_target(Handle<Code> target, RelocInfo::Mode rmode); | 1178 inline void emit_code_target(Handle<Code> target, RelocInfo::Mode rmode); |
1173 void emit(Immediate x) { emitl(x.value_); } | 1179 void emit(Immediate x) { emitl(x.value_); } |
1174 | 1180 |
1175 // Emits a REX prefix that encodes a 64-bit operand size and | 1181 // Emits a REX prefix that encodes a 64-bit operand size and |
1176 // the top bit of both register codes. | 1182 // the top bit of both register codes. |
1177 // High bit of reg goes to REX.R, high bit of rm_reg goes to REX.B. | 1183 // High bit of reg goes to REX.R, high bit of rm_reg goes to REX.B. |
1178 // REX.W is set. | 1184 // REX.W is set. |
| 1185 inline void emit_rex_64(XMMRegister reg, Register rm_reg); |
| 1186 inline void emit_rex_64(Register reg, XMMRegister rm_reg); |
1179 inline void emit_rex_64(Register reg, Register rm_reg); | 1187 inline void emit_rex_64(Register reg, Register rm_reg); |
1180 inline void emit_rex_64(XMMRegister reg, Register rm_reg); | |
1181 | 1188 |
1182 // Emits a REX prefix that encodes a 64-bit operand size and | 1189 // Emits a REX prefix that encodes a 64-bit operand size and |
1183 // the top bit of the destination, index, and base register codes. | 1190 // the top bit of the destination, index, and base register codes. |
1184 // The high bit of reg is used for REX.R, the high bit of op's base | 1191 // The high bit of reg is used for REX.R, the high bit of op's base |
1185 // register is used for REX.B, and the high bit of op's index register | 1192 // register is used for REX.B, and the high bit of op's index register |
1186 // is used for REX.X. REX.W is set. | 1193 // is used for REX.X. REX.W is set. |
1187 inline void emit_rex_64(Register reg, const Operand& op); | 1194 inline void emit_rex_64(Register reg, const Operand& op); |
1188 inline void emit_rex_64(XMMRegister reg, const Operand& op); | 1195 inline void emit_rex_64(XMMRegister reg, const Operand& op); |
1189 | 1196 |
1190 // Emits a REX prefix that encodes a 64-bit operand size and | 1197 // Emits a REX prefix that encodes a 64-bit operand size and |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1228 // register is used for REX.B, and the high bit of op's index register | 1235 // register is used for REX.B, and the high bit of op's index register |
1229 // is used for REX.X. REX.W is cleared. If no REX bits are set, nothing | 1236 // is used for REX.X. REX.W is cleared. If no REX bits are set, nothing |
1230 // is emitted. | 1237 // is emitted. |
1231 inline void emit_optional_rex_32(Register reg, const Operand& op); | 1238 inline void emit_optional_rex_32(Register reg, const Operand& op); |
1232 | 1239 |
1233 // As for emit_optional_rex_32(Register, Register), except that | 1240 // As for emit_optional_rex_32(Register, Register), except that |
1234 // the registers are XMM registers. | 1241 // the registers are XMM registers. |
1235 inline void emit_optional_rex_32(XMMRegister reg, XMMRegister base); | 1242 inline void emit_optional_rex_32(XMMRegister reg, XMMRegister base); |
1236 | 1243 |
1237 // As for emit_optional_rex_32(Register, Register), except that | 1244 // As for emit_optional_rex_32(Register, Register), except that |
1238 // the registers are XMM registers. | 1245 // one of the registers is an XMM registers. |
1239 inline void emit_optional_rex_32(XMMRegister reg, Register base); | 1246 inline void emit_optional_rex_32(XMMRegister reg, Register base); |
1240 | 1247 |
| 1248 // As for emit_optional_rex_32(Register, Register), except that |
| 1249 // one of the registers is an XMM registers. |
| 1250 inline void emit_optional_rex_32(Register reg, XMMRegister base); |
| 1251 |
1241 // As for emit_optional_rex_32(Register, const Operand&), except that | 1252 // As for emit_optional_rex_32(Register, const Operand&), except that |
1242 // the register is an XMM register. | 1253 // the register is an XMM register. |
1243 inline void emit_optional_rex_32(XMMRegister reg, const Operand& op); | 1254 inline void emit_optional_rex_32(XMMRegister reg, const Operand& op); |
1244 | 1255 |
1245 // Optionally do as emit_rex_32(Register) if the register number has | 1256 // Optionally do as emit_rex_32(Register) if the register number has |
1246 // the high bit set. | 1257 // the high bit set. |
1247 inline void emit_optional_rex_32(Register rm_reg); | 1258 inline void emit_optional_rex_32(Register rm_reg); |
1248 | 1259 |
1249 // Optionally do as emit_rex_32(const Operand&) if the operand register | 1260 // Optionally do as emit_rex_32(const Operand&) if the operand register |
1250 // numbers have a high bit set. | 1261 // numbers have a high bit set. |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1382 private: | 1393 private: |
1383 Assembler* assembler_; | 1394 Assembler* assembler_; |
1384 #ifdef DEBUG | 1395 #ifdef DEBUG |
1385 int space_before_; | 1396 int space_before_; |
1386 #endif | 1397 #endif |
1387 }; | 1398 }; |
1388 | 1399 |
1389 } } // namespace v8::internal | 1400 } } // namespace v8::internal |
1390 | 1401 |
1391 #endif // V8_X64_ASSEMBLER_X64_H_ | 1402 #endif // V8_X64_ASSEMBLER_X64_H_ |
OLD | NEW |