Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: src/x64/assembler-x64.h

Issue 757503002: [x64] Introduce FMA3 instructions on scalar data elements. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: remove avx_os_support Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/globals.h ('k') | src/x64/assembler-x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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...) Expand 10 before | Expand all | Expand 10 after
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...) Expand 10 before | Expand all | Expand 10 after
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...) Expand 10 before | Expand all | Expand 10 after
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...) Expand 10 before | Expand all | Expand 10 after
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_
OLDNEW
« no previous file with comments | « src/globals.h ('k') | src/x64/assembler-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698