Changeset 47614 in webkit for trunk/JavaScriptCore/jit
- Timestamp:
- Aug 20, 2009, 7:57:10 PM (16 years ago)
- Location:
- trunk/JavaScriptCore/jit
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/jit/JIT.h
r47530 r47614 794 794 void emitPutJITStubArg(RegisterID src, unsigned argumentNumber); 795 795 #if USE(JSVALUE32_64) 796 void emitPutJITStubArg(RegisterID tag, RegisterID payload, unsigned argumentNumber); 796 797 void emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch1, RegisterID scratch2); 797 798 #else -
trunk/JavaScriptCore/jit/JITCall.cpp
r47597 r47614 65 65 int registerOffset = instruction[4].u.operand; 66 66 67 emitPutJITStubArg(regT0, 1); 68 emitPutJITStubArg(regT1, 2); 69 emitPutJITStubArgConstant(registerOffset, 3); 70 emitPutJITStubArgConstant(argCount, 5); 67 emitPutJITStubArg(regT1, regT0, 0); 68 emitPutJITStubArgConstant(registerOffset, 1); 69 emitPutJITStubArgConstant(argCount, 2); 71 70 } 72 71 … … 78 77 int thisRegister = instruction[6].u.operand; 79 78 80 emitPutJITStubArg(regT0, 1); 81 emitPutJITStubArg(regT1, 2); 82 emitPutJITStubArgConstant(registerOffset, 3); 83 emitPutJITStubArgConstant(argCount, 5); 84 emitPutJITStubArgFromVirtualRegister(proto, 7, regT2, regT3); 85 emitPutJITStubArgConstant(thisRegister, 9); 79 emitPutJITStubArg(regT1, regT0, 0); 80 emitPutJITStubArgConstant(registerOffset, 1); 81 emitPutJITStubArgConstant(argCount, 2); 82 emitPutJITStubArgFromVirtualRegister(proto, 3, regT2, regT3); 83 emitPutJITStubArgConstant(thisRegister, 4); 86 84 } 87 85 88 86 void JIT::compileOpCallVarargsSetupArgs(Instruction*) 89 87 { 90 emitPutJITStubArg(regT0, 1); 91 emitPutJITStubArg(regT1, 2); 92 emitPutJITStubArg(regT3, 3); // registerOffset 93 emitPutJITStubArg(regT2, 5); // argCount 88 emitPutJITStubArg(regT1, regT0, 0); 89 emitPutJITStubArg(regT3, 1); // registerOffset 90 emitPutJITStubArg(regT2, 2); // argCount 94 91 } 95 92 … … 453 450 454 451 // ecx holds func 455 emitPutJITStubArg(regT0, 1);456 emitPutJITStubArgConstant(argCount, 3);457 emitPutJITStubArgConstant(registerOffset, 2);452 emitPutJITStubArg(regT0, 0); 453 emitPutJITStubArgConstant(argCount, 2); 454 emitPutJITStubArgConstant(registerOffset, 1); 458 455 } 459 456 … … 463 460 464 461 // ecx holds func 465 emitPutJITStubArg(regT0, 1);466 emitPutJITStubArg(regT1, 3);462 emitPutJITStubArg(regT0, 0); 463 emitPutJITStubArg(regT1, 2); 467 464 addPtr(Imm32(registerOffset), regT1, regT2); 468 emitPutJITStubArg(regT2, 2);465 emitPutJITStubArg(regT2, 1); 469 466 } 470 467 … … 477 474 478 475 // ecx holds func 479 emitPutJITStubArg(regT0, 1);480 emitPutJITStubArgConstant(registerOffset, 2);481 emitPutJITStubArgConstant(argCount, 3);482 emitPutJITStubArgFromVirtualRegister(proto, 4, regT2);483 emitPutJITStubArgConstant(thisRegister, 5);476 emitPutJITStubArg(regT0, 0); 477 emitPutJITStubArgConstant(registerOffset, 1); 478 emitPutJITStubArgConstant(argCount, 2); 479 emitPutJITStubArgFromVirtualRegister(proto, 3, regT2); 480 emitPutJITStubArgConstant(thisRegister, 4); 484 481 } 485 482 … … 636 633 int thisRegister = instruction[6].u.operand; 637 634 638 emitPutJITStubArg(regT0, 1);639 emitPutJITStubArgFromVirtualRegister(proto, 4, regT2);635 emitPutJITStubArg(regT0, 0); 636 emitPutJITStubArgFromVirtualRegister(proto, 3, regT2); 640 637 JITStubCall stubCall(this, cti_op_construct_JSConstruct); 641 638 stubCall.call(thisRegister); -
trunk/JavaScriptCore/jit/JITInlineMethods.h
r47530 r47614 38 38 ALWAYS_INLINE void JIT::emitPutJITStubArg(RegisterID src, unsigned argumentNumber) 39 39 { 40 poke(src, argumentNumber); 40 unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + 1; 41 poke(src, argumentStackOffset); 41 42 } 42 43 … … 45 46 ALWAYS_INLINE void JIT::emitPutJITStubArgConstant(unsigned value, unsigned argumentNumber) 46 47 { 47 poke(Imm32(value), argumentNumber); 48 unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + 1; 49 poke(Imm32(value), argumentStackOffset); 48 50 } 49 51 … … 52 54 ALWAYS_INLINE void JIT::emitPutJITStubArgConstant(void* value, unsigned argumentNumber) 53 55 { 54 poke(ImmPtr(value), argumentNumber); 56 unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + 1; 57 poke(ImmPtr(value), argumentStackOffset); 55 58 } 56 59 … … 59 62 ALWAYS_INLINE void JIT::emitGetJITStubArg(unsigned argumentNumber, RegisterID dst) 60 63 { 61 peek(dst, argumentNumber); 64 unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + 1; 65 peek(dst, argumentStackOffset); 62 66 } 63 67 … … 583 587 /* Deprecated: Please use JITStubCall instead. */ 584 588 589 ALWAYS_INLINE void JIT::emitPutJITStubArg(RegisterID tag, RegisterID payload, unsigned argumentNumber) 590 { 591 unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + 1; 592 poke(payload, argumentStackOffset); 593 poke(tag, argumentStackOffset + 1); 594 } 595 596 /* Deprecated: Please use JITStubCall instead. */ 597 585 598 ALWAYS_INLINE void JIT::emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch1, RegisterID scratch2) 586 599 { 600 unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + 1; 587 601 if (m_codeBlock->isConstantRegisterIndex(src)) { 588 602 JSValue constant = m_codeBlock->getConstant(src); 589 poke(Imm32(constant.payload()), argument Number);590 poke(Imm32(constant.tag()), argument Number+ 1);603 poke(Imm32(constant.payload()), argumentStackOffset); 604 poke(Imm32(constant.tag()), argumentStackOffset + 1); 591 605 } else { 592 606 emitLoad(src, scratch1, scratch2); 593 poke(scratch2, argument Number);594 poke(scratch1, argument Number+ 1);607 poke(scratch2, argumentStackOffset); 608 poke(scratch1, argumentStackOffset + 1); 595 609 } 596 610 } … … 813 827 ALWAYS_INLINE void JIT::emitPutJITStubArgFromVirtualRegister(unsigned src, unsigned argumentNumber, RegisterID scratch) 814 828 { 829 unsigned argumentStackOffset = (argumentNumber * (sizeof(JSValue) / sizeof(void*))) + 1; 815 830 if (m_codeBlock->isConstantRegisterIndex(src)) { 816 831 JSValue value = m_codeBlock->getConstant(src); 817 emitPutJITStubArgConstant(JSValue::encode(value), argumentNumber);832 poke(ImmPtr(JSValue::encode(value)), argumentStackOffset); 818 833 } else { 819 834 loadPtr(Address(callFrameRegister, src * sizeof(Register)), scratch); 820 emitPutJITStubArg(scratch, argumentNumber);835 poke(scratch, argumentStackOffset); 821 836 } 822 837 -
trunk/JavaScriptCore/jit/JITOpcodes.cpp
r47597 r47614 77 77 Call callJSFunction2 = call(); 78 78 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 79 emitGetJITStubArg( 5, regT1); // argCount79 emitGetJITStubArg(2, regT1); // argCount 80 80 restoreReturnAddressBeforeReturn(regT3); 81 81 hasCodeBlock2.link(this); … … 84 84 Jump arityCheckOkay2 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParameters)), regT1); 85 85 preserveReturnAddressAfterCall(regT3); 86 emitPutJITStubArg(regT3, 3); // return address86 emitPutJITStubArg(regT3, 1); // return address 87 87 restoreArgumentReference(); 88 88 Call callArityCheck2 = call(); 89 89 move(regT1, callFrameRegister); 90 emitGetJITStubArg( 5, regT1); // argCount90 emitGetJITStubArg(2, regT1); // argCount 91 91 restoreReturnAddressBeforeReturn(regT3); 92 92 arityCheckOkay2.link(this); … … 97 97 98 98 preserveReturnAddressAfterCall(regT3); 99 emitPutJITStubArg(regT3, 3); // return address99 emitPutJITStubArg(regT3, 1); // return address 100 100 restoreArgumentReference(); 101 101 Call callLazyLinkCall = call(); … … 115 115 restoreArgumentReference(); 116 116 Call callJSFunction1 = call(); 117 emitGetJITStubArg( 5, regT1); // argCount117 emitGetJITStubArg(2, regT1); // argCount 118 118 restoreReturnAddressBeforeReturn(regT3); 119 119 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 123 123 Jump arityCheckOkay3 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParameters)), regT1); 124 124 preserveReturnAddressAfterCall(regT3); 125 emitPutJITStubArg(regT3, 3); // return address125 emitPutJITStubArg(regT3, 1); // return address 126 126 restoreArgumentReference(); 127 127 Call callArityCheck1 = call(); 128 128 move(regT1, callFrameRegister); 129 emitGetJITStubArg( 5, regT1); // argCount129 emitGetJITStubArg(2, regT1); // argCount 130 130 restoreReturnAddressBeforeReturn(regT3); 131 131 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 1484 1484 Call callJSFunction2 = call(); 1485 1485 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); 1486 emitGetJITStubArg( 3, regT1); // argCount1486 emitGetJITStubArg(2, regT1); // argCount 1487 1487 restoreReturnAddressBeforeReturn(regT3); 1488 1488 hasCodeBlock2.link(this); … … 1491 1491 Jump arityCheckOkay2 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParameters)), regT1); 1492 1492 preserveReturnAddressAfterCall(regT3); 1493 emitPutJITStubArg(regT3, 2); // return address1493 emitPutJITStubArg(regT3, 1); // return address 1494 1494 restoreArgumentReference(); 1495 1495 Call callArityCheck2 = call(); 1496 1496 move(regT1, callFrameRegister); 1497 emitGetJITStubArg( 3, regT1); // argCount1497 emitGetJITStubArg(2, regT1); // argCount 1498 1498 restoreReturnAddressBeforeReturn(regT3); 1499 1499 arityCheckOkay2.link(this); … … 1503 1503 compileOpCallInitializeCallFrame(); 1504 1504 preserveReturnAddressAfterCall(regT3); 1505 emitPutJITStubArg(regT3, 2); // return address1505 emitPutJITStubArg(regT3, 1); // return address 1506 1506 restoreArgumentReference(); 1507 1507 Call callLazyLinkCall = call(); … … 1520 1520 restoreArgumentReference(); 1521 1521 Call callJSFunction1 = call(); 1522 emitGetJITStubArg( 3, regT1); // argCount1522 emitGetJITStubArg(2, regT1); // argCount 1523 1523 restoreReturnAddressBeforeReturn(regT3); 1524 1524 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); … … 1528 1528 Jump arityCheckOkay3 = branch32(Equal, Address(regT2, OBJECT_OFFSETOF(FunctionExecutable, m_numParameters)), regT1); 1529 1529 preserveReturnAddressAfterCall(regT3); 1530 emitPutJITStubArg(regT3, 2); // return address1530 emitPutJITStubArg(regT3, 1); // return address 1531 1531 restoreArgumentReference(); 1532 1532 Call callArityCheck1 = call(); 1533 1533 move(regT1, callFrameRegister); 1534 emitGetJITStubArg( 3, regT1); // argCount1534 emitGetJITStubArg(2, regT1); // argCount 1535 1535 restoreReturnAddressBeforeReturn(regT3); 1536 1536 loadPtr(Address(regT0, OBJECT_OFFSETOF(JSFunction, m_executable)), regT2); -
trunk/JavaScriptCore/jit/JITPropertyAccess.cpp
r47186 r47614 1404 1404 stubCall.addArgument(Imm32(newStructure->propertyStorageCapacity())); 1405 1405 stubCall.call(regT0); 1406 emitGetJITStubArg( 3, regT1);1406 emitGetJITStubArg(2, regT1); 1407 1407 1408 1408 restoreReturnAddressBeforeReturn(regT3);
Note:
See TracChangeset
for help on using the changeset viewer.