| 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 1328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1339 void fptan(); | 1339 void fptan(); |
| 1340 void fyl2x(); | 1340 void fyl2x(); |
| 1341 void f2xm1(); | 1341 void f2xm1(); |
| 1342 void fscale(); | 1342 void fscale(); |
| 1343 void fninit(); | 1343 void fninit(); |
| 1344 | 1344 |
| 1345 void frndint(); | 1345 void frndint(); |
| 1346 | 1346 |
| 1347 void sahf(); | 1347 void sahf(); |
| 1348 | 1348 |
| 1349 // SSE instructions |
| 1350 void movaps(XMMRegister dst, XMMRegister src); |
| 1351 void movss(XMMRegister dst, const Operand& src); |
| 1352 void movss(const Operand& dst, XMMRegister src); |
| 1353 |
| 1354 void cvttss2si(Register dst, const Operand& src); |
| 1355 void cvttss2si(Register dst, XMMRegister src); |
| 1356 void cvtlsi2ss(XMMRegister dst, Register src); |
| 1357 |
| 1358 void xorps(XMMRegister dst, XMMRegister src); |
| 1359 void andps(XMMRegister dst, XMMRegister src); |
| 1360 |
| 1361 void movmskps(Register dst, XMMRegister src); |
| 1362 |
| 1349 // SSE2 instructions | 1363 // SSE2 instructions |
| 1350 void movd(XMMRegister dst, Register src); | 1364 void movd(XMMRegister dst, Register src); |
| 1351 void movd(Register dst, XMMRegister src); | 1365 void movd(Register dst, XMMRegister src); |
| 1352 void movq(XMMRegister dst, Register src); | 1366 void movq(XMMRegister dst, Register src); |
| 1353 void movq(Register dst, XMMRegister src); | 1367 void movq(Register dst, XMMRegister src); |
| 1354 void movq(XMMRegister dst, XMMRegister src); | 1368 void movq(XMMRegister dst, XMMRegister src); |
| 1355 void extractps(Register dst, XMMRegister src, byte imm8); | |
| 1356 | 1369 |
| 1357 // Don't use this unless it's important to keep the | 1370 // Don't use this unless it's important to keep the |
| 1358 // top half of the destination register unchanged. | 1371 // top half of the destination register unchanged. |
| 1359 // Used movaps when moving double values and movq for integer | 1372 // Used movaps when moving double values and movq for integer |
| 1360 // values in xmm registers. | 1373 // values in xmm registers. |
| 1361 void movsd(XMMRegister dst, XMMRegister src); | 1374 void movsd(XMMRegister dst, XMMRegister src); |
| 1362 | 1375 |
| 1363 void movsd(const Operand& dst, XMMRegister src); | 1376 void movsd(const Operand& dst, XMMRegister src); |
| 1364 void movsd(XMMRegister dst, const Operand& src); | 1377 void movsd(XMMRegister dst, const Operand& src); |
| 1365 | 1378 |
| 1366 void movdqa(const Operand& dst, XMMRegister src); | 1379 void movdqa(const Operand& dst, XMMRegister src); |
| 1367 void movdqa(XMMRegister dst, const Operand& src); | 1380 void movdqa(XMMRegister dst, const Operand& src); |
| 1368 | 1381 |
| 1369 void movdqu(const Operand& dst, XMMRegister src); | 1382 void movdqu(const Operand& dst, XMMRegister src); |
| 1370 void movdqu(XMMRegister dst, const Operand& src); | 1383 void movdqu(XMMRegister dst, const Operand& src); |
| 1371 | 1384 |
| 1372 void movapd(XMMRegister dst, XMMRegister src); | 1385 void movapd(XMMRegister dst, XMMRegister src); |
| 1373 void movaps(XMMRegister dst, XMMRegister src); | |
| 1374 | 1386 |
| 1375 void movss(XMMRegister dst, const Operand& src); | |
| 1376 void movss(const Operand& dst, XMMRegister src); | |
| 1377 | |
| 1378 void cvttss2si(Register dst, const Operand& src); | |
| 1379 void cvttss2si(Register dst, XMMRegister src); | |
| 1380 void cvttsd2si(Register dst, const Operand& src); | 1387 void cvttsd2si(Register dst, const Operand& src); |
| 1381 void cvttsd2si(Register dst, XMMRegister src); | 1388 void cvttsd2si(Register dst, XMMRegister src); |
| 1382 void cvttsd2siq(Register dst, XMMRegister src); | 1389 void cvttsd2siq(Register dst, XMMRegister src); |
| 1383 | 1390 |
| 1384 void cvtlsi2sd(XMMRegister dst, const Operand& src); | 1391 void cvtlsi2sd(XMMRegister dst, const Operand& src); |
| 1385 void cvtlsi2sd(XMMRegister dst, Register src); | 1392 void cvtlsi2sd(XMMRegister dst, Register src); |
| 1386 void cvtqsi2sd(XMMRegister dst, const Operand& src); | 1393 void cvtqsi2sd(XMMRegister dst, const Operand& src); |
| 1387 void cvtqsi2sd(XMMRegister dst, Register src); | 1394 void cvtqsi2sd(XMMRegister dst, Register src); |
| 1388 | 1395 |
| 1389 void cvtlsi2ss(XMMRegister dst, Register src); | |
| 1390 | 1396 |
| 1391 void cvtss2sd(XMMRegister dst, XMMRegister src); | 1397 void cvtss2sd(XMMRegister dst, XMMRegister src); |
| 1392 void cvtss2sd(XMMRegister dst, const Operand& src); | 1398 void cvtss2sd(XMMRegister dst, const Operand& src); |
| 1393 void cvtsd2ss(XMMRegister dst, XMMRegister src); | 1399 void cvtsd2ss(XMMRegister dst, XMMRegister src); |
| 1394 | 1400 |
| 1395 void cvtsd2si(Register dst, XMMRegister src); | 1401 void cvtsd2si(Register dst, XMMRegister src); |
| 1396 void cvtsd2siq(Register dst, XMMRegister src); | 1402 void cvtsd2siq(Register dst, XMMRegister src); |
| 1397 | 1403 |
| 1398 void addsd(XMMRegister dst, XMMRegister src); | 1404 void addsd(XMMRegister dst, XMMRegister src); |
| 1399 void addsd(XMMRegister dst, const Operand& src); | 1405 void addsd(XMMRegister dst, const Operand& src); |
| 1400 void subsd(XMMRegister dst, XMMRegister src); | 1406 void subsd(XMMRegister dst, XMMRegister src); |
| 1401 void mulsd(XMMRegister dst, XMMRegister src); | 1407 void mulsd(XMMRegister dst, XMMRegister src); |
| 1402 void mulsd(XMMRegister dst, const Operand& src); | 1408 void mulsd(XMMRegister dst, const Operand& src); |
| 1403 void divsd(XMMRegister dst, XMMRegister src); | 1409 void divsd(XMMRegister dst, XMMRegister src); |
| 1404 | 1410 |
| 1405 void andpd(XMMRegister dst, XMMRegister src); | 1411 void andpd(XMMRegister dst, XMMRegister src); |
| 1406 void orpd(XMMRegister dst, XMMRegister src); | 1412 void orpd(XMMRegister dst, XMMRegister src); |
| 1407 void xorpd(XMMRegister dst, XMMRegister src); | 1413 void xorpd(XMMRegister dst, XMMRegister src); |
| 1408 void xorps(XMMRegister dst, XMMRegister src); | |
| 1409 void sqrtsd(XMMRegister dst, XMMRegister src); | 1414 void sqrtsd(XMMRegister dst, XMMRegister src); |
| 1410 | 1415 |
| 1411 void ucomisd(XMMRegister dst, XMMRegister src); | 1416 void ucomisd(XMMRegister dst, XMMRegister src); |
| 1412 void ucomisd(XMMRegister dst, const Operand& src); | 1417 void ucomisd(XMMRegister dst, const Operand& src); |
| 1418 void cmpltsd(XMMRegister dst, XMMRegister src); |
| 1419 |
| 1420 void movmskpd(Register dst, XMMRegister src); |
| 1421 |
| 1422 // SSE 4.1 instruction |
| 1423 void extractps(Register dst, XMMRegister src, byte imm8); |
| 1413 | 1424 |
| 1414 enum RoundingMode { | 1425 enum RoundingMode { |
| 1415 kRoundToNearest = 0x0, | 1426 kRoundToNearest = 0x0, |
| 1416 kRoundDown = 0x1, | 1427 kRoundDown = 0x1, |
| 1417 kRoundUp = 0x2, | 1428 kRoundUp = 0x2, |
| 1418 kRoundToZero = 0x3 | 1429 kRoundToZero = 0x3 |
| 1419 }; | 1430 }; |
| 1420 | 1431 |
| 1421 void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode); | 1432 void roundsd(XMMRegister dst, XMMRegister src, RoundingMode mode); |
| 1422 | 1433 |
| 1423 void movmskpd(Register dst, XMMRegister src); | |
| 1424 void movmskps(Register dst, XMMRegister src); | |
| 1425 | |
| 1426 void cmpltsd(XMMRegister dst, XMMRegister src); | |
| 1427 | |
| 1428 // The first argument is the reg field, the second argument is the r/m field. | |
| 1429 void emit_sse_operand(XMMRegister dst, XMMRegister src); | |
| 1430 void emit_sse_operand(XMMRegister reg, const Operand& adr); | |
| 1431 void emit_sse_operand(XMMRegister dst, Register src); | |
| 1432 void emit_sse_operand(Register dst, XMMRegister src); | |
| 1433 | |
| 1434 // Debugging | 1434 // Debugging |
| 1435 void Print(); | 1435 void Print(); |
| 1436 | 1436 |
| 1437 // Check the code size generated from label to here. | 1437 // Check the code size generated from label to here. |
| 1438 int SizeOfCodeGeneratedSince(Label* label) { | 1438 int SizeOfCodeGeneratedSince(Label* label) { |
| 1439 return pc_offset() - label->pos(); | 1439 return pc_offset() - label->pos(); |
| 1440 } | 1440 } |
| 1441 | 1441 |
| 1442 // Mark address of the ExitJSFrame code. | 1442 // Mark address of the ExitJSFrame code. |
| 1443 void RecordJSReturn(); | 1443 void RecordJSReturn(); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1604 // Emit a ModR/M byte with an operation subcode in the reg field and | 1604 // Emit a ModR/M byte with an operation subcode in the reg field and |
| 1605 // a register in the rm_reg field. | 1605 // a register in the rm_reg field. |
| 1606 void emit_modrm(int code, Register rm_reg) { | 1606 void emit_modrm(int code, Register rm_reg) { |
| 1607 ASSERT(is_uint3(code)); | 1607 ASSERT(is_uint3(code)); |
| 1608 emit(0xC0 | code << 3 | rm_reg.low_bits()); | 1608 emit(0xC0 | code << 3 | rm_reg.low_bits()); |
| 1609 } | 1609 } |
| 1610 | 1610 |
| 1611 // Emit the code-object-relative offset of the label's position | 1611 // Emit the code-object-relative offset of the label's position |
| 1612 inline void emit_code_relative_offset(Label* label); | 1612 inline void emit_code_relative_offset(Label* label); |
| 1613 | 1613 |
| 1614 // The first argument is the reg field, the second argument is the r/m field. |
| 1615 void emit_sse_operand(XMMRegister dst, XMMRegister src); |
| 1616 void emit_sse_operand(XMMRegister reg, const Operand& adr); |
| 1617 void emit_sse_operand(XMMRegister dst, Register src); |
| 1618 void emit_sse_operand(Register dst, XMMRegister src); |
| 1619 |
| 1614 // Emit machine code for one of the operations ADD, ADC, SUB, SBC, | 1620 // Emit machine code for one of the operations ADD, ADC, SUB, SBC, |
| 1615 // AND, OR, XOR, or CMP. The encodings of these operations are all | 1621 // AND, OR, XOR, or CMP. The encodings of these operations are all |
| 1616 // similar, differing just in the opcode or in the reg field of the | 1622 // similar, differing just in the opcode or in the reg field of the |
| 1617 // ModR/M byte. | 1623 // ModR/M byte. |
| 1618 void arithmetic_op_16(byte opcode, Register reg, Register rm_reg); | 1624 void arithmetic_op_16(byte opcode, Register reg, Register rm_reg); |
| 1619 void arithmetic_op_16(byte opcode, Register reg, const Operand& rm_reg); | 1625 void arithmetic_op_16(byte opcode, Register reg, const Operand& rm_reg); |
| 1620 void arithmetic_op_32(byte opcode, Register reg, Register rm_reg); | 1626 void arithmetic_op_32(byte opcode, Register reg, Register rm_reg); |
| 1621 void arithmetic_op_32(byte opcode, Register reg, const Operand& rm_reg); | 1627 void arithmetic_op_32(byte opcode, Register reg, const Operand& rm_reg); |
| 1622 void arithmetic_op(byte opcode, Register reg, Register rm_reg); | 1628 void arithmetic_op(byte opcode, Register reg, Register rm_reg); |
| 1623 void arithmetic_op(byte opcode, Register reg, const Operand& rm_reg); | 1629 void arithmetic_op(byte opcode, Register reg, const Operand& rm_reg); |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1698 private: | 1704 private: |
| 1699 Assembler* assembler_; | 1705 Assembler* assembler_; |
| 1700 #ifdef DEBUG | 1706 #ifdef DEBUG |
| 1701 int space_before_; | 1707 int space_before_; |
| 1702 #endif | 1708 #endif |
| 1703 }; | 1709 }; |
| 1704 | 1710 |
| 1705 } } // namespace v8::internal | 1711 } } // namespace v8::internal |
| 1706 | 1712 |
| 1707 #endif // V8_X64_ASSEMBLER_X64_H_ | 1713 #endif // V8_X64_ASSEMBLER_X64_H_ |
| OLD | NEW |