Changeset 155675 in webkit
- Timestamp:
- Sep 13, 2013 12:34:14 AM (11 years ago)
- Location:
- trunk
- Files:
-
- 8 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r155674 r155675 1 2013-09-13 Youngho Yoo <youngho33.yoo@lge.com> 2 3 Fixed crash in V8 benchmark suite in ARM,softp,EABI environment. 4 https://bugs.webkit.org/show_bug.cgi?id=117281 5 6 Reviewed by Michael Saboff. 7 8 Fix the missing EABI_32BIT_DUMMY_ARG in FPRReg using callOperation function. 9 10 * fast/js/array-with-double-assign-expected.txt: Added. 11 * fast/js/array-with-double-assign.html: Added. 12 * fast/js/array-with-double-push-expected.txt: Added. 13 * fast/js/array-with-double-push.html: Added. 14 * fast/js/script-tests/array-with-double-assign.js: Added. 15 (foo): 16 * fast/js/script-tests/array-with-double-push.js: Added. 17 (foo): 18 1 19 2013-09-12 Santosh Mahto <santosh.ma@samsung.com> 2 20 -
trunk/Source/JavaScriptCore/ChangeLog
r155662 r155675 1 2013-09-13 Youngho Yoo <youngho33.yoo@lge.com> 2 3 Fixed crash in V8 benchmark suite in ARM,softp,EABI environment. 4 https://bugs.webkit.org/show_bug.cgi?id=117281 5 6 Reviewed by Michael Saboff. 7 8 Fix the missing EABI_32BIT_DUMMY_ARG in FPRReg using callOperation function. 9 10 Test 1 : fast/js/array-with-double-assign.html 11 Test 2 : fast/js/array-with-double-push.html 12 13 * dfg/DFGCCallHelpers.h: 14 (JSC::DFG::CCallHelpers::setupArgumentsWithExecState): 15 * dfg/DFGSpeculativeJIT.h: 16 (JSC::DFG::SpeculativeJIT::callOperation): 17 1 18 2013-09-12 Filip Pizlo <fpizlo@apple.com> 2 19 -
trunk/Source/JavaScriptCore/dfg/DFGCCallHelpers.h
r154403 r155675 499 499 } 500 500 501 #if CPU(MIPS) 502 #define POKE_ARGUMENT_OFFSET 4 503 #else 504 #define POKE_ARGUMENT_OFFSET 0 505 #endif 506 501 507 #if CPU(X86_64) 502 508 ALWAYS_INLINE void setupArguments(FPRReg arg1) … … 559 565 move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 560 566 } 567 568 ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32, FPRReg arg2, GPRReg arg3) 569 { 570 moveDouble(arg2, FPRInfo::argumentFPR0); 571 move(arg3, GPRInfo::argumentGPR1); 572 move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 573 } 574 575 ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32, GPRReg arg2, GPRReg arg3, FPRReg arg4) 576 { 577 moveDouble(arg4, FPRInfo::argumentFPR0); 578 setupStubArguments(arg2, arg3); 579 move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 580 } 561 581 #else 562 582 ALWAYS_INLINE void setupArguments(FPRReg arg1) … … 584 604 assembler().vmov(GPRInfo::argumentGPR3, GPRInfo::nonArgGPR0, arg3); 585 605 poke(GPRInfo::nonArgGPR0); 606 } 607 608 ALWAYS_INLINE void setupArgumentsWithExecState(TrustedImm32 arg1, FPRReg arg2, GPRReg arg3) 609 { 610 poke(arg3, POKE_ARGUMENT_OFFSET); 611 move(arg1, GPRInfo::argumentGPR1); 612 assembler().vmov(GPRInfo::argumentGPR2, GPRInfo::argumentGPR3, arg2); 613 move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 614 } 615 616 ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, TrustedImm32 arg3, FPRReg arg4) 617 { 618 setupStubArguments(arg1, arg2); 619 move(GPRInfo::callFrameRegister, GPRInfo::argumentGPR0); 620 move(arg3, GPRInfo::argumentGPR3); 621 assembler().vmov(GPRInfo::nonArgGPR0, GPRInfo::nonArgGPR1, arg4); 622 poke(GPRInfo::nonArgGPR0, POKE_ARGUMENT_OFFSET); 623 poke(GPRInfo::nonArgGPR1, POKE_ARGUMENT_OFFSET + 1); 586 624 } 587 625 #endif // CPU(ARM_HARDFP) … … 884 922 // exactly 4 argument registers, e.g. ARMv7. 885 923 #if NUMBER_OF_ARGUMENT_REGISTERS == 4 886 887 #if CPU(MIPS)888 #define POKE_ARGUMENT_OFFSET 4889 #else890 #define POKE_ARGUMENT_OFFSET 0891 #endif892 924 893 925 ALWAYS_INLINE void setupArgumentsWithExecState(GPRReg arg1, GPRReg arg2, GPRReg arg3, GPRReg arg4) -
trunk/Source/JavaScriptCore/dfg/DFGSpeculativeJIT.h
r155662 r155675 1072 1072 } 1073 1073 1074 JITCompiler::Call callOperation(V_DFGOperation_EOZD operation, GPRReg arg1, GPRReg arg2, FPRReg arg3)1075 {1076 m_jit.setupArgumentsWithExecState(arg1, arg2, arg3);1077 return appendCallWithExceptionCheck(operation);1078 }1079 1080 1074 JITCompiler::Call callOperation(V_DFGOperation_W operation, WatchpointSet* watchpointSet) 1081 1075 { … … 1307 1301 m_jit.setupArgumentsWithExecState(arg1, arg2.gpr()); 1308 1302 return appendCallWithExceptionCheckSetResult(operation, result); 1303 } 1304 1305 JITCompiler::Call callOperation(V_DFGOperation_EOZD operation, GPRReg arg1, GPRReg arg2, FPRReg arg3) 1306 { 1307 m_jit.setupArgumentsWithExecState(arg1, arg2, arg3); 1308 return appendCallWithExceptionCheck(operation); 1309 1309 } 1310 1310 … … 1456 1456 JITCompiler::Call callOperation(J_DFGOperation_EDA operation, GPRReg resultTag, GPRReg resultPayload, FPRReg arg1, GPRReg arg2) 1457 1457 { 1458 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1, arg2); 1459 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1460 } 1461 JITCompiler::Call callOperation(J_DFGOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2) 1462 { 1463 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2); 1464 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1465 } 1466 JITCompiler::Call callOperation(J_DFGOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, TrustedImm32 arg1Tag, GPRReg arg1Payload, GPRReg arg2) 1467 { 1468 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2); 1469 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1470 } 1471 JITCompiler::Call callOperation(J_DFGOperation_EJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload) 1472 { 1473 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag); 1474 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1475 } 1476 JITCompiler::Call callOperation(J_DFGOperation_EZ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1) 1477 { 1478 m_jit.setupArgumentsWithExecState(arg1); 1479 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1480 } 1481 JITCompiler::Call callOperation(J_DFGOperation_EZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1) 1482 { 1483 m_jit.setupArgumentsWithExecState(TrustedImm32(arg1)); 1484 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1485 } 1486 JITCompiler::Call callOperation(J_DFGOperation_EZIcfZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1, InlineCallFrame* inlineCallFrame, GPRReg arg2) 1487 { 1488 m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), TrustedImmPtr(inlineCallFrame), arg2); 1489 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1490 } 1491 JITCompiler::Call callOperation(J_DFGOperation_EZZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1, GPRReg arg2) 1492 { 1493 m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), arg2); 1494 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1495 } 1496 1497 JITCompiler::Call callOperation(P_DFGOperation_EJS operation, GPRReg result, JSValueRegs value, size_t index) 1498 { 1499 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG value.payloadGPR(), value.tagGPR(), TrustedImmPtr(index)); 1500 return appendCallSetResult(operation, result); 1501 } 1502 1503 JITCompiler::Call callOperation(P_DFGOperation_EStJ operation, GPRReg result, Structure* structure, GPRReg arg2Tag, GPRReg arg2Payload) 1504 { 1505 m_jit.setupArgumentsWithExecState(TrustedImmPtr(structure), arg2Payload, arg2Tag); 1506 return appendCallWithExceptionCheckSetResult(operation, result); 1507 } 1508 1509 JITCompiler::Call callOperation(C_DFGOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload) 1510 { 1511 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag); 1512 return appendCallWithExceptionCheckSetResult(operation, result); 1513 } 1514 JITCompiler::Call callOperation(S_DFGOperation_J operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload) 1515 { 1516 m_jit.setupArguments(arg1Payload, arg1Tag); 1517 return appendCallSetResult(operation, result); 1518 } 1519 JITCompiler::Call callOperation(S_DFGOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload) 1520 { 1521 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag); 1522 return appendCallWithExceptionCheckSetResult(operation, result); 1523 } 1524 1525 JITCompiler::Call callOperation(S_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload) 1526 { 1527 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag); 1528 return appendCallWithExceptionCheckSetResult(operation, result); 1529 } 1530 JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload) 1531 { 1532 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag); 1533 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1534 } 1535 JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, MacroAssembler::TrustedImm32 imm) 1536 { 1537 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag)); 1538 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1539 } 1540 JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, MacroAssembler::TrustedImm32 imm, GPRReg arg2Tag, GPRReg arg2Payload) 1541 { 1542 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag), SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag); 1543 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1544 } 1545 1546 JITCompiler::Call callOperation(J_DFGOperation_ECJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload) 1547 { 1548 m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag); 1549 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1550 } 1551 JITCompiler::Call callOperation(J_DFGOperation_ECJ operation, JSValueRegs result, GPRReg arg1, JSValueRegs arg2) 1552 { 1553 m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR()); 1554 return appendCallWithExceptionCheckSetResult(operation, result.payloadGPR(), result.tagGPR()); 1555 } 1556 JITCompiler::Call callOperation(J_DFGOperation_ECC operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2) 1557 { 1458 1558 m_jit.setupArgumentsWithExecState(arg1, arg2); 1459 1559 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1460 1560 } 1461 JITCompiler::Call callOperation(J_DFGOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2) 1462 { 1463 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2); 1464 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1465 } 1466 JITCompiler::Call callOperation(J_DFGOperation_EJA operation, GPRReg resultTag, GPRReg resultPayload, TrustedImm32 arg1Tag, GPRReg arg1Payload, GPRReg arg2) 1467 { 1468 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, arg2); 1469 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1470 } 1471 JITCompiler::Call callOperation(J_DFGOperation_EJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload) 1472 { 1473 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag); 1474 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1475 } 1476 JITCompiler::Call callOperation(J_DFGOperation_EZ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1) 1477 { 1478 m_jit.setupArgumentsWithExecState(arg1); 1479 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1480 } 1481 JITCompiler::Call callOperation(J_DFGOperation_EZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1) 1482 { 1483 m_jit.setupArgumentsWithExecState(TrustedImm32(arg1)); 1484 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1485 } 1486 JITCompiler::Call callOperation(J_DFGOperation_EZIcfZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1, InlineCallFrame* inlineCallFrame, GPRReg arg2) 1487 { 1488 m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), TrustedImmPtr(inlineCallFrame), arg2); 1489 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1490 } 1491 JITCompiler::Call callOperation(J_DFGOperation_EZZ operation, GPRReg resultTag, GPRReg resultPayload, int32_t arg1, GPRReg arg2) 1492 { 1493 m_jit.setupArgumentsWithExecState(TrustedImm32(arg1), arg2); 1494 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1495 } 1496 1497 JITCompiler::Call callOperation(P_DFGOperation_EJS operation, GPRReg result, JSValueRegs value, size_t index) 1498 { 1499 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG value.payloadGPR(), value.tagGPR(), TrustedImmPtr(index)); 1500 return appendCallSetResult(operation, result); 1501 } 1502 1503 JITCompiler::Call callOperation(P_DFGOperation_EStJ operation, GPRReg result, Structure* structure, GPRReg arg2Tag, GPRReg arg2Payload) 1504 { 1505 m_jit.setupArgumentsWithExecState(TrustedImmPtr(structure), arg2Payload, arg2Tag); 1506 return appendCallWithExceptionCheckSetResult(operation, result); 1507 } 1508 1509 JITCompiler::Call callOperation(C_DFGOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload) 1510 { 1511 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag); 1512 return appendCallWithExceptionCheckSetResult(operation, result); 1513 } 1514 JITCompiler::Call callOperation(S_DFGOperation_J operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload) 1515 { 1516 m_jit.setupArguments(arg1Payload, arg1Tag); 1517 return appendCallSetResult(operation, result); 1518 } 1519 JITCompiler::Call callOperation(S_DFGOperation_EJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload) 1520 { 1521 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag); 1522 return appendCallWithExceptionCheckSetResult(operation, result); 1523 } 1524 1525 JITCompiler::Call callOperation(S_DFGOperation_EJJ operation, GPRReg result, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload) 1526 { 1527 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag); 1528 return appendCallWithExceptionCheckSetResult(operation, result); 1529 } 1530 JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, GPRReg arg2Tag, GPRReg arg2Payload) 1531 { 1532 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag); 1533 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1534 } 1535 JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1Tag, GPRReg arg1Payload, MacroAssembler::TrustedImm32 imm) 1536 { 1537 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG arg1Payload, arg1Tag, SH4_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag)); 1538 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1539 } 1540 JITCompiler::Call callOperation(J_DFGOperation_EJJ operation, GPRReg resultTag, GPRReg resultPayload, MacroAssembler::TrustedImm32 imm, GPRReg arg2Tag, GPRReg arg2Payload) 1541 { 1542 m_jit.setupArgumentsWithExecState(EABI_32BIT_DUMMY_ARG imm, TrustedImm32(JSValue::Int32Tag), SH4_32BIT_DUMMY_ARG arg2Payload, arg2Tag); 1543 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1544 } 1545 1546 JITCompiler::Call callOperation(J_DFGOperation_ECJ operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2Tag, GPRReg arg2Payload) 1547 { 1548 m_jit.setupArgumentsWithExecState(arg1, arg2Payload, arg2Tag); 1549 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1550 } 1551 JITCompiler::Call callOperation(J_DFGOperation_ECJ operation, JSValueRegs result, GPRReg arg1, JSValueRegs arg2) 1552 { 1553 m_jit.setupArgumentsWithExecState(arg1, arg2.payloadGPR(), arg2.tagGPR()); 1554 return appendCallWithExceptionCheckSetResult(operation, result.payloadGPR(), result.tagGPR()); 1555 } 1556 JITCompiler::Call callOperation(J_DFGOperation_ECC operation, GPRReg resultTag, GPRReg resultPayload, GPRReg arg1, GPRReg arg2) 1557 { 1558 m_jit.setupArgumentsWithExecState(arg1, arg2); 1559 return appendCallWithExceptionCheckSetResult(operation, resultPayload, resultTag); 1561 1562 JITCompiler::Call callOperation(V_DFGOperation_EOZD operation, GPRReg arg1, GPRReg arg2, FPRReg arg3) 1563 { 1564 m_jit.setupArgumentsWithExecState(arg1, arg2, EABI_32BIT_DUMMY_ARG arg3); 1565 return appendCallWithExceptionCheck(operation); 1560 1566 } 1561 1567
Note: See TracChangeset
for help on using the changeset viewer.