Changeset 194388 in webkit
- Timestamp:
- Dec 23, 2015, 3:52:39 AM (11 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 10 edited
-
ChangeLog (modified) (1 diff)
-
assembler/ARM64Assembler.h (modified) (4 diffs)
-
assembler/MacroAssemblerARM64.h (modified) (20 diffs)
-
assembler/MacroAssemblerX86.h (modified) (1 diff)
-
assembler/MacroAssemblerX86Common.h (modified) (2 diffs)
-
b3/B3LowerToAir.cpp (modified) (6 diffs)
-
b3/air/AirInstInlines.h (modified) (1 diff)
-
b3/air/AirOpcode.opcodes (modified) (11 diffs)
-
jit/AssemblyHelpers.h (modified) (1 diff)
-
jit/FPRInfo.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r194387 r194388 1 2015-12-23 Benjamin Poulain <bpoulain@apple.com> 2 3 [JSC] Get the JavaScriptCore framework to build on ARM64 with B3 enabled 4 https://bugs.webkit.org/show_bug.cgi?id=152503 5 6 Reviewed by Filip Pizlo. 7 8 It is not working but it builds. 9 10 * assembler/ARM64Assembler.h: 11 (JSC::ARM64Assembler::vand): 12 (JSC::ARM64Assembler::vectorDataProcessing2Source): 13 * assembler/MacroAssemblerARM64.h: 14 (JSC::MacroAssemblerARM64::add32): 15 (JSC::MacroAssemblerARM64::add64): 16 (JSC::MacroAssemblerARM64::countLeadingZeros64): 17 (JSC::MacroAssemblerARM64::not32): 18 (JSC::MacroAssemblerARM64::not64): 19 (JSC::MacroAssemblerARM64::zeroExtend16To32): 20 (JSC::MacroAssemblerARM64::signExtend16To32): 21 (JSC::MacroAssemblerARM64::zeroExtend8To32): 22 (JSC::MacroAssemblerARM64::signExtend8To32): 23 (JSC::MacroAssemblerARM64::addFloat): 24 (JSC::MacroAssemblerARM64::ceilFloat): 25 (JSC::MacroAssemblerARM64::branchDouble): 26 (JSC::MacroAssemblerARM64::branchFloat): 27 (JSC::MacroAssemblerARM64::divFloat): 28 (JSC::MacroAssemblerARM64::moveZeroToDouble): 29 (JSC::MacroAssemblerARM64::moveFloatTo32): 30 (JSC::MacroAssemblerARM64::move32ToFloat): 31 (JSC::MacroAssemblerARM64::moveConditionallyDouble): 32 (JSC::MacroAssemblerARM64::moveConditionallyFloat): 33 (JSC::MacroAssemblerARM64::moveConditionallyAfterFloatingPointCompare): 34 (JSC::MacroAssemblerARM64::mulFloat): 35 (JSC::MacroAssemblerARM64::andDouble): 36 (JSC::MacroAssemblerARM64::andFloat): 37 (JSC::MacroAssemblerARM64::sqrtFloat): 38 (JSC::MacroAssemblerARM64::subFloat): 39 (JSC::MacroAssemblerARM64::signExtend32ToPtr): 40 (JSC::MacroAssemblerARM64::moveConditionally32): 41 (JSC::MacroAssemblerARM64::moveConditionally64): 42 (JSC::MacroAssemblerARM64::moveConditionallyTest32): 43 (JSC::MacroAssemblerARM64::moveConditionallyTest64): 44 (JSC::MacroAssemblerARM64::test32): 45 (JSC::MacroAssemblerARM64::setCarry): 46 (JSC::MacroAssemblerARM64::jumpAfterFloatingPointCompare): 47 * assembler/MacroAssemblerX86.h: 48 (JSC::MacroAssemblerX86::moveDoubleToInts): 49 (JSC::MacroAssemblerX86::moveIntsToDouble): 50 * assembler/MacroAssemblerX86Common.h: 51 (JSC::MacroAssemblerX86Common::move32ToFloat): 52 (JSC::MacroAssemblerX86Common::moveFloatTo32): 53 (JSC::MacroAssemblerX86Common::moveInt32ToPacked): Deleted. 54 (JSC::MacroAssemblerX86Common::movePackedToInt32): Deleted. 55 * b3/B3LowerToAir.cpp: 56 (JSC::B3::Air::LowerToAir::appendShift): 57 (JSC::B3::Air::LowerToAir::lower): 58 * b3/air/AirInstInlines.h: 59 (JSC::B3::Air::isX86DivHelperValid): 60 * b3/air/AirOpcode.opcodes: 61 * jit/AssemblyHelpers.h: 62 (JSC::AssemblyHelpers::emitFunctionEpilogueWithEmptyFrame): 63 (JSC::AssemblyHelpers::emitFunctionEpilogue): 64 * jit/FPRInfo.h: 65 (JSC::FPRInfo::toArgumentRegister): 66 1 67 2015-12-23 Andy VanWagoner <andy@instructure.com> 2 68 -
trunk/Source/JavaScriptCore/assembler/ARM64Assembler.h
r191130 r194388 39 39 #define MEMOPSIZE_OF(datasize) ((datasize == 8 || datasize == 128) ? MemOpSize_8_or_128 : (datasize == 16) ? MemOpSize_16 : (datasize == 32) ? MemOpSize_32 : MemOpSize_64) 40 40 #define CHECK_DATASIZE() CHECK_DATASIZE_OF(datasize) 41 #define CHECK_VECTOR_DATASIZE() ASSERT(datasize == 64 || datasize == 128) 41 42 #define DATASIZE DATASIZE_OF(datasize) 42 43 #define MEMOPSIZE MEMOPSIZE_OF(datasize) … … 862 863 }; 863 864 865 enum SIMD3Same { 866 SIMD_LogicalOp_AND = 0x03 867 }; 868 864 869 enum FPIntConvOp { 865 870 FPIntConvOp_FCVTNS = 0x00, … … 2416 2421 CHECK_DATASIZE(); 2417 2422 insn(floatingPointDataProcessing2Source(DATASIZE, vm, FPDataOp_FNMUL, vn, vd)); 2423 } 2424 2425 template<int datasize> 2426 ALWAYS_INLINE void vand(FPRegisterID vd, FPRegisterID vn, FPRegisterID vm) 2427 { 2428 CHECK_VECTOR_DATASIZE(); 2429 insn(vectorDataProcessing2Source(SIMD_LogicalOp_AND, vm, vn, vd)); 2418 2430 } 2419 2431 … … 3474 3486 } 3475 3487 3488 ALWAYS_INLINE static int vectorDataProcessing2Source(SIMD3Same opcode, unsigned size, FPRegisterID vm, FPRegisterID vn, FPRegisterID vd) 3489 { 3490 const int Q = 0; 3491 return (0xe201c00 | Q << 30 | size << 22 | vm << 16 | opcode << 11 | vn << 5 | vd); 3492 } 3493 3494 ALWAYS_INLINE static int vectorDataProcessing2Source(SIMD3Same opcode, FPRegisterID vm, FPRegisterID vn, FPRegisterID vd) 3495 { 3496 return vectorDataProcessing2Source(opcode, 0, vm, vn, vd); 3497 } 3498 3499 3476 3500 // 'o1' means negate 3477 3501 ALWAYS_INLINE static int floatingPointDataProcessing3Source(Datasize type, bool o1, FPRegisterID rm, AddOp o2, FPRegisterID ra, FPRegisterID rn, FPRegisterID rd) -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerARM64.h
r194208 r194388 135 135 // Integer operations: 136 136 137 void add32(RegisterID a, RegisterID b, RegisterID dest) 138 { 139 ASSERT(a != ARM64Registers::sp && b != ARM64Registers::sp); 140 m_assembler.add<32>(dest, a, b); 141 } 142 137 143 void add32(RegisterID src, RegisterID dest) 138 144 { … … 214 220 } 215 221 222 void add64(RegisterID a, RegisterID b, RegisterID dest) 223 { 224 ASSERT(a != ARM64Registers::sp || b != ARM64Registers::sp); 225 if (b == ARM64Registers::sp) 226 std::swap(a, b); 227 m_assembler.add<64>(dest, a, b); 228 } 229 216 230 void add64(RegisterID src, RegisterID dest) 217 231 { … … 409 423 } 410 424 425 void countLeadingZeros64(RegisterID src, RegisterID dest) 426 { 427 m_assembler.clz<64>(dest, src); 428 } 429 411 430 void lshift32(RegisterID src, RegisterID shiftAmount, RegisterID dest) 412 431 { … … 814 833 } 815 834 835 void not32(RegisterID src, RegisterID dest) 836 { 837 m_assembler.mvn<32>(dest, src); 838 } 839 840 void not64(RegisterID src, RegisterID dest) 841 { 842 m_assembler.mvn<64>(dest, src); 843 } 816 844 817 845 // Memory access operations: … … 964 992 } 965 993 994 void zeroExtend16To32(RegisterID src, RegisterID dest) 995 { 996 m_assembler.uxth<64>(dest, src); 997 } 998 999 void signExtend16To32(RegisterID src, RegisterID dest) 1000 { 1001 m_assembler.sxth<64>(dest, src); 1002 } 1003 966 1004 void load8(ImplicitAddress address, RegisterID dest) 967 1005 { … … 1003 1041 m_assembler.add<64>(memoryTempRegister, memoryTempRegister, address.index, ARM64Assembler::UXTX, address.scale); 1004 1042 m_assembler.ldrsb<32>(dest, address.base, memoryTempRegister); 1043 } 1044 1045 void zeroExtend8To32(RegisterID src, RegisterID dest) 1046 { 1047 m_assembler.uxtb<64>(dest, src); 1048 } 1049 1050 void signExtend8To32(RegisterID src, RegisterID dest) 1051 { 1052 m_assembler.sxtb<64>(dest, src); 1005 1053 } 1006 1054 … … 1231 1279 } 1232 1280 1281 void addFloat(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest) 1282 { 1283 m_assembler.fadd<32>(dest, op1, op2); 1284 } 1285 1233 1286 void ceilDouble(FPRegisterID src, FPRegisterID dest) 1234 1287 { 1235 1288 m_assembler.frintp<64>(dest, src); 1289 } 1290 1291 void ceilFloat(FPRegisterID src, FPRegisterID dest) 1292 { 1293 m_assembler.frintp<32>(dest, src); 1236 1294 } 1237 1295 … … 1266 1324 { 1267 1325 m_assembler.fcmp<64>(left, right); 1268 1269 if (cond == DoubleNotEqual) { 1270 // ConditionNE jumps if NotEqual *or* unordered - force the unordered cases not to jump. 1271 Jump unordered = makeBranch(ARM64Assembler::ConditionVS); 1272 Jump result = makeBranch(ARM64Assembler::ConditionNE); 1273 unordered.link(this); 1274 return result; 1275 } 1276 if (cond == DoubleEqualOrUnordered) { 1277 Jump unordered = makeBranch(ARM64Assembler::ConditionVS); 1278 Jump notEqual = makeBranch(ARM64Assembler::ConditionNE); 1279 unordered.link(this); 1280 // We get here if either unordered or equal. 1281 Jump result = jump(); 1282 notEqual.link(this); 1283 return result; 1284 } 1285 return makeBranch(cond); 1326 return jumpAfterFloatingPointCompare(cond); 1327 } 1328 1329 Jump branchFloat(DoubleCondition cond, FPRegisterID left, FPRegisterID right) 1330 { 1331 m_assembler.fcmp<32>(left, right); 1332 return jumpAfterFloatingPointCompare(cond); 1286 1333 } 1287 1334 … … 1365 1412 } 1366 1413 1414 void divFloat(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest) 1415 { 1416 m_assembler.fdiv<32>(dest, op1, op2); 1417 } 1418 1367 1419 void loadDouble(ImplicitAddress address, FPRegisterID dest) 1368 1420 { … … 1409 1461 } 1410 1462 1463 void moveZeroToDouble(FPRegisterID reg) 1464 { 1465 m_assembler.fmov<64>(reg, ARM64Registers::zr); 1466 } 1467 1411 1468 void moveDoubleTo64(FPRegisterID src, RegisterID dest) 1412 1469 { … … 1414 1471 } 1415 1472 1473 void moveFloatTo32(FPRegisterID src, RegisterID dest) 1474 { 1475 m_assembler.fmov<32>(dest, src); 1476 } 1477 1416 1478 void move64ToDouble(RegisterID src, FPRegisterID dest) 1417 1479 { 1418 1480 m_assembler.fmov<64>(dest, src); 1481 } 1482 1483 void move32ToFloat(RegisterID src, FPRegisterID dest) 1484 { 1485 m_assembler.fmov<32>(dest, src); 1486 } 1487 1488 void moveConditionallyDouble(DoubleCondition cond, FPRegisterID left, FPRegisterID right, RegisterID src, RegisterID dest) 1489 { 1490 m_assembler.fcmp<64>(left, right); 1491 moveConditionallyAfterFloatingPointCompare<64>(cond, src, dest); 1492 } 1493 1494 void moveConditionallyFloat(DoubleCondition cond, FPRegisterID left, FPRegisterID right, RegisterID src, RegisterID dest) 1495 { 1496 m_assembler.fcmp<32>(left, right); 1497 moveConditionallyAfterFloatingPointCompare<64>(cond, src, dest); 1498 } 1499 1500 template<int datasize> 1501 void moveConditionallyAfterFloatingPointCompare(DoubleCondition cond, RegisterID src, RegisterID dest) 1502 { 1503 if (cond == DoubleNotEqual) { 1504 Jump unordered = makeBranch(ARM64Assembler::ConditionVS); 1505 m_assembler.csel<datasize>(dest, src, dest, ARM64Assembler::ConditionNE); 1506 unordered.link(this); 1507 return; 1508 } 1509 if (cond == DoubleEqualOrUnordered) { 1510 // If the compare is unordered, src is copied to dest and the 1511 // next csel has all arguments equal to src. 1512 // If the compare is ordered, dest is unchanged and EQ decides 1513 // what value to set. 1514 m_assembler.csel<datasize>(dest, src, dest, ARM64Assembler::ConditionVS); 1515 m_assembler.csel<datasize>(dest, src, dest, ARM64Assembler::ConditionEQ); 1516 return; 1517 } 1518 m_assembler.csel<datasize>(dest, src, dest, ARM64Condition(cond)); 1419 1519 } 1420 1520 … … 1435 1535 } 1436 1536 1537 void mulFloat(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest) 1538 { 1539 m_assembler.fmul<32>(dest, op1, op2); 1540 } 1541 1542 void andDouble(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest) 1543 { 1544 m_assembler.vand<64>(dest, op1, op2); 1545 } 1546 1547 void andFloat(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest) 1548 { 1549 andDouble(op1, op2, dest); 1550 } 1551 1437 1552 void negateDouble(FPRegisterID src, FPRegisterID dest) 1438 1553 { … … 1443 1558 { 1444 1559 m_assembler.fsqrt<64>(dest, src); 1560 } 1561 1562 void sqrtFloat(FPRegisterID src, FPRegisterID dest) 1563 { 1564 m_assembler.fsqrt<32>(dest, src); 1445 1565 } 1446 1566 … … 1498 1618 loadDouble(src, fpTempRegister); 1499 1619 subDouble(fpTempRegister, dest); 1620 } 1621 1622 void subFloat(FPRegisterID op1, FPRegisterID op2, FPRegisterID dest) 1623 { 1624 m_assembler.fsub<32>(dest, op1, op2); 1500 1625 } 1501 1626 … … 1629 1754 move(dataTempRegister, reg2); 1630 1755 } 1756 1757 void signExtend32ToPtr(TrustedImm32 imm, RegisterID dest) 1758 { 1759 move(TrustedImmPtr(reinterpret_cast<void*>(static_cast<intptr_t>(imm.m_value))), dest); 1760 } 1631 1761 1632 1762 void signExtend32ToPtr(RegisterID src, RegisterID dest) … … 1640 1770 } 1641 1771 1772 void moveConditionally32(RelationalCondition cond, RegisterID left, RegisterID right, RegisterID src, RegisterID dest) 1773 { 1774 m_assembler.cmp<32>(left, right); 1775 m_assembler.csel<32>(dest, src, dest, ARM64Condition(cond)); 1776 } 1777 1778 void moveConditionally64(RelationalCondition cond, RegisterID left, RegisterID right, RegisterID src, RegisterID dest) 1779 { 1780 m_assembler.cmp<64>(left, right); 1781 m_assembler.csel<64>(dest, src, dest, ARM64Condition(cond)); 1782 } 1783 1784 void moveConditionallyTest32(ResultCondition cond, RegisterID testReg, RegisterID mask, RegisterID src, RegisterID dest) 1785 { 1786 m_assembler.tst<32>(testReg, mask); 1787 m_assembler.csel<32>(dest, src, dest, ARM64Condition(cond)); 1788 } 1789 1790 void moveConditionallyTest64(ResultCondition cond, RegisterID testReg, RegisterID mask, RegisterID src, RegisterID dest) 1791 { 1792 m_assembler.tst<64>(testReg, mask); 1793 m_assembler.csel<64>(dest, src, dest, ARM64Condition(cond)); 1794 } 1642 1795 1643 1796 // Forwards / external control flow operations: … … 2315 2468 compare32(cond, memoryTempRegister, dataTempRegister, dest); 2316 2469 } 2317 2470 2471 void test32(ResultCondition cond, RegisterID src, RegisterID mask, RegisterID dest) 2472 { 2473 m_assembler.tst<32>(src, mask); 2474 m_assembler.cset<32>(dest, ARM64Condition(cond)); 2475 } 2476 2318 2477 void test32(ResultCondition cond, RegisterID src, TrustedImm32 mask, RegisterID dest) 2319 2478 { … … 2356 2515 } 2357 2516 2517 void setCarry(RegisterID dest) 2518 { 2519 m_assembler.cset<32>(dest, ARM64Assembler::ConditionCS); 2520 } 2358 2521 2359 2522 // Patchable operations … … 2743 2906 } 2744 2907 2745 void signExtend32ToPtr(TrustedImm32 imm, RegisterID dest)2746 {2747 move(TrustedImmPtr(reinterpret_cast<void*>(static_cast<intptr_t>(imm.m_value))), dest);2748 }2749 2750 2908 template<int datasize> 2751 2909 ALWAYS_INLINE void load(const void* address, RegisterID dest) … … 2934 3092 } 2935 3093 3094 Jump jumpAfterFloatingPointCompare(DoubleCondition cond) 3095 { 3096 if (cond == DoubleNotEqual) { 3097 // ConditionNE jumps if NotEqual *or* unordered - force the unordered cases not to jump. 3098 Jump unordered = makeBranch(ARM64Assembler::ConditionVS); 3099 Jump result = makeBranch(ARM64Assembler::ConditionNE); 3100 unordered.link(this); 3101 return result; 3102 } 3103 if (cond == DoubleEqualOrUnordered) { 3104 Jump unordered = makeBranch(ARM64Assembler::ConditionVS); 3105 Jump notEqual = makeBranch(ARM64Assembler::ConditionNE); 3106 unordered.link(this); 3107 // We get here if either unordered or equal. 3108 Jump result = jump(); 3109 notEqual.link(this); 3110 return result; 3111 } 3112 return makeBranch(cond); 3113 } 3114 2936 3115 friend class LinkBuffer; 2937 3116 -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86.h
r192409 r194388 180 180 lshift32(TrustedImm32(16), dest1); 181 181 or32(dest1, dest2); 182 move PackedToInt32(src, dest1);182 moveFloatTo32(src, dest1); 183 183 } 184 184 185 185 void moveIntsToDouble(RegisterID src1, RegisterID src2, FPRegisterID dest, FPRegisterID scratch) 186 186 { 187 move Int32ToPacked(src1, dest);188 move Int32ToPacked(src2, scratch);187 move32ToFloat(src1, dest); 188 move32ToFloat(src2, scratch); 189 189 lshiftPacked(TrustedImm32(32), scratch); 190 190 orPacked(scratch, dest); -
trunk/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h
r194354 r194388 1209 1209 } 1210 1210 1211 void move Int32ToPacked(RegisterID src, XMMRegisterID dst)1211 void move32ToFloat(RegisterID src, XMMRegisterID dst) 1212 1212 { 1213 1213 ASSERT(isSSE2Present()); … … 1215 1215 } 1216 1216 1217 void move PackedToInt32(XMMRegisterID src, RegisterID dst)1217 void moveFloatTo32(XMMRegisterID src, RegisterID dst) 1218 1218 { 1219 1219 ASSERT(isSSE2Present()); -
trunk/Source/JavaScriptCore/b3/B3LowerToAir.cpp
r194372 r194388 645 645 646 646 if (imm(amount)) { 647 append(Move, tmp(value), tmp(m_value)); 648 append(opcode, imm(amount), tmp(m_value)); 649 return; 650 } 651 647 if (isValidForm(opcode, Arg::Tmp, Arg::Imm, Arg::Tmp)) { 648 append(opcode, tmp(value), imm(amount), tmp(m_value)); 649 return; 650 } 651 if (isValidForm(opcode, Arg::Imm, Arg::Tmp)) { 652 append(Move, tmp(value), tmp(m_value)); 653 append(opcode, imm(amount), tmp(m_value)); 654 return; 655 } 656 } 657 658 if (isValidForm(opcode, Arg::Tmp, Arg::Tmp, Arg::Tmp)) { 659 append(opcode, tmp(value), tmp(amount), tmp(m_value)); 660 return; 661 } 662 663 #if CPU(X86) 652 664 append(Move, tmp(value), tmp(m_value)); 653 665 append(Move, tmp(amount), Tmp(X86Registers::ecx)); 654 666 append(opcode, Tmp(X86Registers::ecx), tmp(m_value)); 667 #endif 655 668 } 656 669 … … 1586 1599 case Div: { 1587 1600 if (isInt(m_value->type())) { 1601 #if CPU(X86) 1588 1602 lowerX86Div(); 1589 1603 append(Move, Tmp(X86Registers::eax), tmp(m_value)); 1604 #endif 1590 1605 return; 1591 1606 } … … 1597 1612 1598 1613 case Mod: { 1614 #if CPU(X86) 1599 1615 lowerX86Div(); 1600 1616 append(Move, Tmp(X86Registers::edx), tmp(m_value)); 1617 #endif 1601 1618 return; 1602 1619 } … … 1678 1695 1679 1696 case BitwiseCast: { 1680 appendUnOp<Move Int32ToPacked, Move64ToDouble, MoveDoubleTo64, MovePackedToInt32>(m_value->child(0));1697 appendUnOp<Move32ToFloat, Move64ToDouble, MoveDoubleTo64, MoveFloatTo32>(m_value->child(0)); 1681 1698 return; 1682 1699 } … … 2152 2169 } 2153 2170 2171 #if CPU(X86) 2154 2172 void lowerX86Div() 2155 2173 { … … 2177 2195 append(div, eax, edx, tmp(m_value->child(1))); 2178 2196 } 2179 2197 #endif 2198 2180 2199 IndexSet<Value> m_locked; // These are values that will have no Tmp in Air. 2181 2200 IndexMap<Value, Tmp> m_valueToTmp; // These are values that must have a Tmp in Air. We say that a Value* with a non-null Tmp is "pinned". -
trunk/Source/JavaScriptCore/b3/air/AirInstInlines.h
r194331 r194388 168 168 && inst.args[1] == Tmp(X86Registers::edx); 169 169 #else 170 UNUSED_PARAM(inst); 170 171 return false; 171 172 #endif -
trunk/Source/JavaScriptCore/b3/air/AirOpcode.opcodes
r194354 r194388 129 129 Tmp, Tmp, Tmp 130 130 131 AddDouble U:F:64, UD:F:64 132 Tmp, Tmp 133 x86: Addr, Tmp 134 135 AddFloat U:F:32, UD:F:32 136 Tmp, Tmp 137 x86: Addr, Tmp 131 arm64: AddDouble U:F:64, U:F:64, D:F:64 132 Tmp, Tmp, Tmp 133 134 x86: AddDouble U:F:64, UD:F:64 135 Tmp, Tmp 136 Addr, Tmp 137 138 arm64: AddFloat U:F:32, U:F:32, D:F:32 139 Tmp, Tmp, Tmp 140 141 x86: AddFloat U:F:32, UD:F:32 142 Tmp, Tmp 143 Addr, Tmp 138 144 139 145 Sub32 U:G:32, UZD:G:32 … … 151 157 x86: Tmp, Addr 152 158 153 SubDouble U:F:64, UD:F:64 154 Tmp, Tmp 155 x86: Addr, Tmp 156 157 SubFloat U:F:32, UD:F:32 158 Tmp, Tmp 159 x86: Addr, Tmp 159 arm64: SubDouble U:F:64, U:F:64, D:F:64 160 Tmp, Tmp, Tmp 161 162 x86: SubDouble U:F:64, UD:F:64 163 Tmp, Tmp 164 Addr, Tmp 165 166 arm64: SubFloat U:F:32, U:F:32, D:F:32 167 Tmp, Tmp, Tmp 168 169 x86: SubFloat U:F:32, UD:F:32 170 Tmp, Tmp 171 Addr, Tmp 160 172 161 173 Neg32 UZD:G:32 162 174 Tmp 163 Addr175 x86: Addr 164 176 165 177 64: Neg64 UD:G:64 … … 176 188 Tmp, Tmp 177 189 178 MulDouble U:F:64, UD:F:64 179 Tmp, Tmp 180 x86: Addr, Tmp 181 182 MulFloat U:F:32, UD:F:32 183 Tmp, Tmp 184 x86: Addr, Tmp 185 186 DivDouble U:F:32, UD:F:32 187 Tmp, Tmp 188 x86: Addr, Tmp 189 190 DivFloat U:F:32, UD:F:32 191 Tmp, Tmp 192 x86: Addr, Tmp 190 arm64: MulDouble U:F:64, U:F:64, D:F:64 191 Tmp, Tmp, Tmp 192 193 x86: MulDouble U:F:64, UD:F:64 194 Tmp, Tmp 195 Addr, Tmp 196 197 arm64: MulFloat U:F:32, U:F:32, D:F:32 198 Tmp, Tmp, Tmp 199 200 x86: MulFloat U:F:32, UD:F:32 201 Tmp, Tmp 202 Addr, Tmp 203 204 arm64: DivDouble U:F:32, U:F:32, D:F:32 205 Tmp, Tmp, Tmp 206 207 x86: DivDouble U:F:32, UD:F:32 208 Tmp, Tmp 209 Addr, Tmp 210 211 arm64: DivFloat U:F:32, U:F:32, D:F:32 212 Tmp, Tmp, Tmp 213 214 x86: DivFloat U:F:32, UD:F:32 215 Tmp, Tmp 216 Addr, Tmp 193 217 194 218 x86: X86ConvertToDoubleWord32 U:G:32, ZD:G:32 … … 204 228 Tmp*, Tmp*, Tmp 205 229 206 Lea UA:G:Ptr, D:G:Ptr230 x86: Lea UA:G:Ptr, D:G:Ptr 207 231 Addr, Tmp 208 232 … … 218 242 Imm, Tmp 219 243 220 AndDouble U:F:64, UD:F:64 221 Tmp, Tmp 222 223 AndFloat U:F:32, UD:F:32 224 Tmp, Tmp 225 226 Lshift32 U:G:32, UZD:G:32 244 arm64: AndDouble U:F:64, U:F:64, D:F:64 245 Tmp, Tmp, Tmp 246 247 x86: AndDouble U:F:64, UD:F:64 248 Tmp, Tmp 249 250 arm64: AndFloat U:F:32, U:F:32, D:F:32 251 Tmp, Tmp, Tmp 252 253 x86: AndFloat U:F:32, UD:F:32 254 Tmp, Tmp 255 256 arm64: Lshift32 U:G:32, U:G:32, ZD:G:32 257 Tmp, Tmp, Tmp 258 Tmp, Imm, Tmp 259 260 x86:Lshift32 U:G:32, UZD:G:32 227 261 Tmp*, Tmp 228 262 Imm, Tmp 229 263 230 64: Lshift64 U:G:64, UD:G:64 264 arm64: Lshift64 U:G:64, U:G:64, ZD:G:64 265 Tmp, Tmp, Tmp 266 Tmp, Imm, Tmp 267 268 x86_64: Lshift64 U:G:64, UD:G:64 231 269 Tmp*, Tmp 232 270 Imm, Tmp 233 271 234 Rshift32 U:G:32, UZD:G:32 272 arm64: Rshift32 U:G:32, U:G:32, ZD:G:32 273 Tmp, Tmp, Tmp 274 Tmp, Imm, Tmp 275 276 x86: Rshift32 U:G:32, UZD:G:32 235 277 Tmp*, Tmp 236 278 Imm, Tmp 237 279 238 64: Rshift64 U:G:64, UD:G:64 280 arm64: Rshift64 U:G:64, U:G:64, ZD:G:64 281 Tmp, Tmp, Tmp 282 Tmp, Imm, Tmp 283 284 x86_64: Rshift64 U:G:64, UD:G:64 239 285 Tmp*, Tmp 240 286 Imm, Tmp 241 287 242 Urshift32 U:G:32, UZD:G:32 288 arm64: urshift32 U:G:32, U:G:32, ZD:G:32 289 Tmp, Tmp, Tmp 290 Tmp, Imm, Tmp 291 292 x86: Urshift32 U:G:32, UZD:G:32 243 293 Tmp*, Tmp 244 294 Imm, Tmp 245 295 246 64: Urshift64 U:G:64, UD:G:64 296 arm64: Urshift64 U:G:64, U:G:64, ZD:G:64 297 Tmp, Tmp, Tmp 298 Tmp, Imm, Tmp 299 300 x86_64: Urshift64 U:G:64, UD:G:64 247 301 Tmp*, Tmp 248 302 Imm, Tmp … … 271 325 Imm, Tmp 272 326 273 Not32 UZD:G:32 327 arm64: Not32 U:G:32, ZD:G:32 328 Tmp, Tmp 329 330 x86: Not32 UZD:G:32 274 331 Tmp 275 x86: Addr 276 277 64: Not64 UD:G:64 332 Addr 333 334 arm64: Not64 U:G:64, D:G:64 335 Tmp, Tmp 336 337 x86: Not64 UD:G:64 278 338 Tmp 279 x86:Addr339 Addr 280 340 281 341 CeilDouble U:F:64, UD:F:64 282 342 Tmp, Tmp 283 Addr, Tmp343 x86: Addr, Tmp 284 344 285 345 CeilFloat U:F:32, UD:F:32 286 346 Tmp, Tmp 287 Addr, Tmp347 x86: Addr, Tmp 288 348 289 349 SqrtDouble U:F:64, UD:F:64 … … 326 386 Imm, Tmp as signExtend32ToPtr 327 387 Imm64, Tmp 328 Addr, Tmp as loadPtr # This means that "Move Addr, Tmp" is code-generated as "load" not "move".388 x86: Addr, Tmp as loadPtr # This means that "Move Addr, Tmp" is code-generated as "load" not "move". 329 389 Index, Tmp as loadPtr 330 Tmp, Addr as storePtr390 x86: Tmp, Addr as storePtr 331 391 Tmp, Index as storePtr 332 Imm, Addr as storePtr392 x86: Imm, Addr as storePtr 333 393 334 394 Move32 U:G:32, ZD:G:32 335 395 Tmp, Tmp as zeroExtend32ToPtr 336 Addr, Tmp as load32396 x86: Addr, Tmp as load32 337 397 Index, Tmp as load32 338 Tmp, Addr as store32398 x86: Tmp, Addr as store32 339 399 Tmp, Index as store32 340 Imm, Addr as store32341 Imm, Index as store32400 x86: Imm, Addr as store32 401 x86: Imm, Index as store32 342 402 343 403 SignExtend32ToPtr U:G:32, D:G:Ptr … … 346 406 ZeroExtend8To32 U:G:8, ZD:G:32 347 407 Tmp, Tmp 348 Addr, Tmp as load8408 x86: Addr, Tmp as load8 349 409 Index, Tmp as load8 350 410 … … 356 416 ZeroExtend16To32 U:G:16, ZD:G:32 357 417 Tmp, Tmp 358 Addr, Tmp as load16418 x86: Addr, Tmp as load16 359 419 Index, Tmp as load16 360 420 361 421 SignExtend16To32 U:G:16, ZD:G:32 362 422 Tmp, Tmp 363 Addr, Tmp as load16SignedExtendTo32423 x86: Addr, Tmp as load16SignedExtendTo32 364 424 Index, Tmp as load16SignedExtendTo32 365 425 366 426 MoveFloat U:F:32, D:F:32 367 427 Tmp, Tmp as moveDouble 368 Addr, Tmp as loadFloat428 x86: Addr, Tmp as loadFloat 369 429 Index, Tmp as loadFloat 370 Tmp, Addr as storeFloat430 x86: Tmp, Addr as storeFloat 371 431 Tmp, Index as storeFloat 372 432 373 433 MoveDouble U:F:64, D:F:64 374 434 Tmp, Tmp 375 Addr, Tmp as loadDouble435 x86: Addr, Tmp as loadDouble 376 436 Index, Tmp as loadDouble 377 Tmp, Addr as storeDouble437 x86: Tmp, Addr as storeDouble 378 438 Tmp, Index as storeDouble 379 439 … … 383 443 64: Move64ToDouble U:G:64, D:F:64 384 444 Tmp, Tmp 385 Addr, Tmp as loadDouble445 x86: Addr, Tmp as loadDouble 386 446 Index, Tmp as loadDouble 387 447 388 Move Int32ToPackedU:G:32, D:F:32389 Tmp, Tmp 390 Addr, Tmp as loadFloat448 Move32ToFloat U:G:32, D:F:32 449 Tmp, Tmp 450 x86: Addr, Tmp as loadFloat 391 451 Index, Tmp as loadFloat 392 452 393 453 64: MoveDoubleTo64 U:F:64, D:G:64 394 454 Tmp, Tmp 395 Addr, Tmp as load64455 x86: Addr, Tmp as load64 396 456 Index, Tmp as load64 397 457 398 Move PackedToInt32 U:F:32, D:G:32399 Tmp, Tmp 400 Addr, Tmp as load32458 MoveFloatTo32 U:F:32, D:G:32 459 Tmp, Tmp 460 x86: Addr, Tmp as load32 401 461 Index, Tmp as load32 402 462 403 463 Load8 U:G:8, ZD:G:32 404 Addr, Tmp464 x86: Addr, Tmp 405 465 Index, Tmp 406 466 407 467 Store8 U:G:8, D:G:8 408 468 Tmp, Index 409 Tmp, Addr410 Imm, Index411 Imm, Addr469 x86: Tmp, Addr 470 x86: Imm, Index 471 x86: Imm, Addr 412 472 413 473 Load8SignedExtendTo32 U:G:8, ZD:G:32 414 Addr, Tmp474 x86: Addr, Tmp 415 475 Index, Tmp 416 476 417 477 Load16 U:G:16, ZD:G:32 418 Addr, Tmp478 x86: Addr, Tmp 419 479 Index, Tmp 420 480 421 481 Load16SignedExtendTo32 U:G:16, ZD:G:32 422 Addr, Tmp482 x86: Addr, Tmp 423 483 Index, Tmp 424 484 … … 541 601 MoveConditionallyTest32 U:G:32, U:G:32, U:G:32, U:G:Ptr, UD:G:Ptr 542 602 ResCond, Tmp, Tmp, Tmp, Tmp 543 ResCond, Tmp, Imm, Tmp, Tmp603 x86: ResCond, Tmp, Imm, Tmp, Tmp 544 604 545 605 64: MoveConditionallyTest64 U:G:32, U:G:64, U:G:64, U:G:Ptr, UD:G:Ptr 546 606 ResCond, Tmp, Tmp, Tmp, Tmp 547 ResCond, Tmp, Imm, Tmp, Tmp607 x86: ResCond, Tmp, Imm, Tmp, Tmp 548 608 549 609 MoveConditionallyDouble U:G:32, U:F:64, U:F:64, U:G:Ptr, UD:G:Ptr -
trunk/Source/JavaScriptCore/jit/AssemblyHelpers.h
r194087 r194388 437 437 } 438 438 439 void emitFunctionEpilogueWithEmptyFrame() 440 { 441 popPair(framePointerRegister, linkRegister); 442 } 443 439 444 void emitFunctionEpilogue() 440 445 { 441 446 move(framePointerRegister, stackPointerRegister); 442 popPair(framePointerRegister, linkRegister);447 emitFunctionEpilogueWithEmptyFrame(); 443 448 } 444 449 -
trunk/Source/JavaScriptCore/jit/FPRInfo.h
r192187 r194388 188 188 typedef FPRReg RegisterType; 189 189 static const unsigned numberOfRegisters = 23; 190 static const unsigned numberOfArgumentRegisters = 8; 190 191 191 192 // Temporary registers. … … 259 260 } 260 261 262 static FPRReg toArgumentRegister(unsigned index) 263 { 264 ASSERT(index < 8); 265 return static_cast<FPRReg>(index); 266 } 267 261 268 static const char* debugName(FPRReg reg) 262 269 {
Note:
See TracChangeset
for help on using the changeset viewer.