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 996 matching lines...) Loading... |
1007 void fyl2x(); | 1007 void fyl2x(); |
1008 void f2xm1(); | 1008 void f2xm1(); |
1009 void fscale(); | 1009 void fscale(); |
1010 void fninit(); | 1010 void fninit(); |
1011 | 1011 |
1012 void frndint(); | 1012 void frndint(); |
1013 | 1013 |
1014 void sahf(); | 1014 void sahf(); |
1015 | 1015 |
1016 // SSE instructions | 1016 // SSE instructions |
| 1017 void addss(XMMRegister dst, XMMRegister src); |
| 1018 void addss(XMMRegister dst, const Operand& src); |
| 1019 void subss(XMMRegister dst, XMMRegister src); |
| 1020 void subss(XMMRegister dst, const Operand& src); |
| 1021 void mulss(XMMRegister dst, XMMRegister src); |
| 1022 void mulss(XMMRegister dst, const Operand& src); |
| 1023 void divss(XMMRegister dst, XMMRegister src); |
| 1024 void divss(XMMRegister dst, const Operand& src); |
| 1025 |
| 1026 void ucomiss(XMMRegister dst, XMMRegister src); |
| 1027 void ucomiss(XMMRegister dst, const Operand& src); |
1017 void movaps(XMMRegister dst, XMMRegister src); | 1028 void movaps(XMMRegister dst, XMMRegister src); |
1018 void movss(XMMRegister dst, const Operand& src); | 1029 void movss(XMMRegister dst, const Operand& src); |
1019 void movss(const Operand& dst, XMMRegister src); | 1030 void movss(const Operand& dst, XMMRegister src); |
1020 void shufps(XMMRegister dst, XMMRegister src, byte imm8); | 1031 void shufps(XMMRegister dst, XMMRegister src, byte imm8); |
1021 | 1032 |
1022 void cvttss2si(Register dst, const Operand& src); | 1033 void cvttss2si(Register dst, const Operand& src); |
1023 void cvttss2si(Register dst, XMMRegister src); | 1034 void cvttss2si(Register dst, XMMRegister src); |
1024 void cvtlsi2ss(XMMRegister dst, Register src); | 1035 void cvtlsi2ss(XMMRegister dst, Register src); |
1025 | 1036 |
1026 void andps(XMMRegister dst, XMMRegister src); | 1037 void andps(XMMRegister dst, XMMRegister src); |
(...skipping 89 matching lines...) Loading... |
1116 | 1127 |
1117 enum RoundingMode { | 1128 enum RoundingMode { |
1118 kRoundToNearest = 0x0, | 1129 kRoundToNearest = 0x0, |
1119 kRoundDown = 0x1, | 1130 kRoundDown = 0x1, |
1120 kRoundUp = 0x2, | 1131 kRoundUp = 0x2, |
1121 kRoundToZero = 0x3 | 1132 kRoundToZero = 0x3 |
1122 }; | 1133 }; |
1123 | 1134 |
1124 void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode); | 1135 void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode); |
1125 | 1136 |
| 1137 // AVX instruction |
| 1138 void vfmadd132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1139 vfmasd(0x99, dst, src1, src2); |
| 1140 } |
| 1141 void vfmadd213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1142 vfmasd(0xa9, dst, src1, src2); |
| 1143 } |
| 1144 void vfmadd231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1145 vfmasd(0xb9, dst, src1, src2); |
| 1146 } |
| 1147 void vfmadd132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1148 vfmasd(0x99, dst, src1, src2); |
| 1149 } |
| 1150 void vfmadd213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1151 vfmasd(0xa9, dst, src1, src2); |
| 1152 } |
| 1153 void vfmadd231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1154 vfmasd(0xb9, dst, src1, src2); |
| 1155 } |
| 1156 void vfmsub132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1157 vfmasd(0x9b, dst, src1, src2); |
| 1158 } |
| 1159 void vfmsub213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1160 vfmasd(0xab, dst, src1, src2); |
| 1161 } |
| 1162 void vfmsub231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1163 vfmasd(0xbb, dst, src1, src2); |
| 1164 } |
| 1165 void vfmsub132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1166 vfmasd(0x9b, dst, src1, src2); |
| 1167 } |
| 1168 void vfmsub213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1169 vfmasd(0xab, dst, src1, src2); |
| 1170 } |
| 1171 void vfmsub231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1172 vfmasd(0xbb, dst, src1, src2); |
| 1173 } |
| 1174 void vfnmadd132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1175 vfmasd(0x9d, dst, src1, src2); |
| 1176 } |
| 1177 void vfnmadd213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1178 vfmasd(0xad, dst, src1, src2); |
| 1179 } |
| 1180 void vfnmadd231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1181 vfmasd(0xbd, dst, src1, src2); |
| 1182 } |
| 1183 void vfnmadd132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1184 vfmasd(0x9d, dst, src1, src2); |
| 1185 } |
| 1186 void vfnmadd213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1187 vfmasd(0xad, dst, src1, src2); |
| 1188 } |
| 1189 void vfnmadd231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1190 vfmasd(0xbd, dst, src1, src2); |
| 1191 } |
| 1192 void vfnmsub132sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1193 vfmasd(0x9f, dst, src1, src2); |
| 1194 } |
| 1195 void vfnmsub213sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1196 vfmasd(0xaf, dst, src1, src2); |
| 1197 } |
| 1198 void vfnmsub231sd(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1199 vfmasd(0xbf, dst, src1, src2); |
| 1200 } |
| 1201 void vfnmsub132sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1202 vfmasd(0x9f, dst, src1, src2); |
| 1203 } |
| 1204 void vfnmsub213sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1205 vfmasd(0xaf, dst, src1, src2); |
| 1206 } |
| 1207 void vfnmsub231sd(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1208 vfmasd(0xbf, dst, src1, src2); |
| 1209 } |
| 1210 void vfmasd(byte op, XMMRegister dst, XMMRegister src1, XMMRegister src2); |
| 1211 void vfmasd(byte op, XMMRegister dst, XMMRegister src1, const Operand& src2); |
| 1212 |
| 1213 void vfmadd132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1214 vfmass(0x99, dst, src1, src2); |
| 1215 } |
| 1216 void vfmadd213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1217 vfmass(0xa9, dst, src1, src2); |
| 1218 } |
| 1219 void vfmadd231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1220 vfmass(0xb9, dst, src1, src2); |
| 1221 } |
| 1222 void vfmadd132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1223 vfmass(0x99, dst, src1, src2); |
| 1224 } |
| 1225 void vfmadd213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1226 vfmass(0xa9, dst, src1, src2); |
| 1227 } |
| 1228 void vfmadd231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1229 vfmass(0xb9, dst, src1, src2); |
| 1230 } |
| 1231 void vfmsub132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1232 vfmass(0x9b, dst, src1, src2); |
| 1233 } |
| 1234 void vfmsub213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1235 vfmass(0xab, dst, src1, src2); |
| 1236 } |
| 1237 void vfmsub231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1238 vfmass(0xbb, dst, src1, src2); |
| 1239 } |
| 1240 void vfmsub132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1241 vfmass(0x9b, dst, src1, src2); |
| 1242 } |
| 1243 void vfmsub213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1244 vfmass(0xab, dst, src1, src2); |
| 1245 } |
| 1246 void vfmsub231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1247 vfmass(0xbb, dst, src1, src2); |
| 1248 } |
| 1249 void vfnmadd132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1250 vfmass(0x9d, dst, src1, src2); |
| 1251 } |
| 1252 void vfnmadd213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1253 vfmass(0xad, dst, src1, src2); |
| 1254 } |
| 1255 void vfnmadd231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1256 vfmass(0xbd, dst, src1, src2); |
| 1257 } |
| 1258 void vfnmadd132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1259 vfmass(0x9d, dst, src1, src2); |
| 1260 } |
| 1261 void vfnmadd213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1262 vfmass(0xad, dst, src1, src2); |
| 1263 } |
| 1264 void vfnmadd231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1265 vfmass(0xbd, dst, src1, src2); |
| 1266 } |
| 1267 void vfnmsub132ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1268 vfmass(0x9f, dst, src1, src2); |
| 1269 } |
| 1270 void vfnmsub213ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1271 vfmass(0xaf, dst, src1, src2); |
| 1272 } |
| 1273 void vfnmsub231ss(XMMRegister dst, XMMRegister src1, XMMRegister src2) { |
| 1274 vfmass(0xbf, dst, src1, src2); |
| 1275 } |
| 1276 void vfnmsub132ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1277 vfmass(0x9f, dst, src1, src2); |
| 1278 } |
| 1279 void vfnmsub213ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1280 vfmass(0xaf, dst, src1, src2); |
| 1281 } |
| 1282 void vfnmsub231ss(XMMRegister dst, XMMRegister src1, const Operand& src2) { |
| 1283 vfmass(0xbf, dst, src1, src2); |
| 1284 } |
| 1285 void vfmass(byte op, XMMRegister dst, XMMRegister src1, XMMRegister src2); |
| 1286 void vfmass(byte op, XMMRegister dst, XMMRegister src1, const Operand& src2); |
| 1287 |
1126 // Debugging | 1288 // Debugging |
1127 void Print(); | 1289 void Print(); |
1128 | 1290 |
1129 // Check the code size generated from label to here. | 1291 // Check the code size generated from label to here. |
1130 int SizeOfCodeGeneratedSince(Label* label) { | 1292 int SizeOfCodeGeneratedSince(Label* label) { |
1131 return pc_offset() - label->pos(); | 1293 return pc_offset() - label->pos(); |
1132 } | 1294 } |
1133 | 1295 |
1134 // Mark address of the ExitJSFrame code. | 1296 // Mark address of the ExitJSFrame code. |
1135 void RecordJSReturn(); | 1297 void RecordJSReturn(); |
(...skipping 173 matching lines...) Loading... |
1309 template<class P1, class P2> | 1471 template<class P1, class P2> |
1310 void emit_rex(P1 p1, P2 p2, int size) { | 1472 void emit_rex(P1 p1, P2 p2, int size) { |
1311 if (size == kInt64Size) { | 1473 if (size == kInt64Size) { |
1312 emit_rex_64(p1, p2); | 1474 emit_rex_64(p1, p2); |
1313 } else { | 1475 } else { |
1314 DCHECK(size == kInt32Size); | 1476 DCHECK(size == kInt32Size); |
1315 emit_optional_rex_32(p1, p2); | 1477 emit_optional_rex_32(p1, p2); |
1316 } | 1478 } |
1317 } | 1479 } |
1318 | 1480 |
| 1481 // Emit vex prefix |
| 1482 void emit_vex2_byte0() { emit(0xc5); } |
| 1483 void emit_vex2_byte1(XMMRegister reg, XMMRegister v, byte lpp); |
| 1484 void emit_vex3_byte0() { emit(0xc4); } |
| 1485 void emit_vex3_byte1(XMMRegister reg, XMMRegister rm, byte m); |
| 1486 void emit_vex3_byte1(XMMRegister reg, const Operand& rm, byte m); |
| 1487 void emit_vex3_byte2(byte w, XMMRegister v, byte lpp); |
| 1488 |
1319 // Emit the ModR/M byte, and optionally the SIB byte and | 1489 // Emit the ModR/M byte, and optionally the SIB byte and |
1320 // 1- or 4-byte offset for a memory operand. Also encodes | 1490 // 1- or 4-byte offset for a memory operand. Also encodes |
1321 // the second operand of the operation, a register or operation | 1491 // the second operand of the operation, a register or operation |
1322 // subcode, into the reg field of the ModR/M byte. | 1492 // subcode, into the reg field of the ModR/M byte. |
1323 void emit_operand(Register reg, const Operand& adr) { | 1493 void emit_operand(Register reg, const Operand& adr) { |
1324 emit_operand(reg.low_bits(), adr); | 1494 emit_operand(reg.low_bits(), adr); |
1325 } | 1495 } |
1326 | 1496 |
1327 // Emit the ModR/M byte, and optionally the SIB byte and | 1497 // Emit the ModR/M byte, and optionally the SIB byte and |
1328 // 1- or 4-byte offset for a memory operand. Also used to encode | 1498 // 1- or 4-byte offset for a memory operand. Also used to encode |
(...skipping 297 matching lines...) Loading... |
1626 private: | 1796 private: |
1627 Assembler* assembler_; | 1797 Assembler* assembler_; |
1628 #ifdef DEBUG | 1798 #ifdef DEBUG |
1629 int space_before_; | 1799 int space_before_; |
1630 #endif | 1800 #endif |
1631 }; | 1801 }; |
1632 | 1802 |
1633 } } // namespace v8::internal | 1803 } } // namespace v8::internal |
1634 | 1804 |
1635 #endif // V8_X64_ASSEMBLER_X64_H_ | 1805 #endif // V8_X64_ASSEMBLER_X64_H_ |
OLD | NEW |