Changeset 194915 in webkit
- Timestamp:
- Jan 12, 2016, 12:05:52 PM (10 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r194894 r194915 1 2016-01-12 Benjamin Poulain <bpoulain@apple.com> 2 3 [JSC] Remove some invalid immediate instruction forms from ARM64 Air 4 https://bugs.webkit.org/show_bug.cgi?id=153024 5 6 Reviewed by Michael Saboff. 7 8 * b3/B3BasicBlock.h: 9 Export the symbols for testb3. 10 11 * b3/air/AirOpcode.opcodes: 12 We had 2 invalid opcodes: 13 -Compare with immediate just does not exist. 14 -Test64 with immediate exists but Air does not recognize 15 the valid form of bit-immediates. 16 17 * b3/testb3.cpp: 18 (JSC::B3::genericTestCompare): 19 (JSC::B3::testCompareImpl): 20 Extend the tests to cover what was invalid. 21 1 22 2016-01-12 Benjamin Poulain <bpoulain@apple.com> 2 23 -
trunk/Source/JavaScriptCore/b3/B3BasicBlock.h
r194372 r194915 77 77 ValueType* appendNew(Procedure&, Arguments...); 78 78 79 Value* appendIntConstant(Procedure&, Origin, Type, int64_t value);79 JS_EXPORT_PRIVATE Value* appendIntConstant(Procedure&, Origin, Type, int64_t value); 80 80 Value* appendIntConstant(Procedure&, Value* likeValue, int64_t value); 81 81 -
trunk/Source/JavaScriptCore/b3/air/AirOpcode.opcodes
r194873 r194915 518 518 519 519 64: Compare64 U:G:32, U:G:64, U:G:64, ZD:G:32 520 RelCond, Tmp, Imm, Tmp521 520 RelCond, Tmp, Tmp, Tmp 521 x86: RelCond, Tmp, Imm, Tmp 522 522 523 523 Test32 U:G:32, U:G:32, U:G:32, ZD:G:32 … … 526 526 527 527 64: Test64 U:G:32, U:G:64, U:G:64, ZD:G:32 528 ResCond, Tmp, Imm, Tmp528 x86: ResCond, Tmp, Imm, Tmp 529 529 ResCond, Tmp, Tmp, Tmp 530 530 -
trunk/Source/JavaScriptCore/b3/testb3.cpp
r194855 r194915 7437 7437 } 7438 7438 7439 template<typename LeftFunctor, typename RightFunctor >7439 template<typename LeftFunctor, typename RightFunctor, typename InputType> 7440 7440 void genericTestCompare( 7441 7441 B3::Opcode opcode, const LeftFunctor& leftFunctor, const RightFunctor& rightFunctor, 7442 int left, intright, int result)7442 InputType left, InputType right, int result) 7443 7443 { 7444 7444 // Using a compare. … … 7449 7449 Value* leftValue = leftFunctor(root, proc); 7450 7450 Value* rightValue = rightFunctor(root, proc); 7451 Value* comparisonResult = root->appendNew<Value>(proc, opcode, Origin(), leftValue, rightValue); 7451 7452 7452 7453 root->appendNew<ControlValue>( … … 7454 7455 root->appendNew<Value>( 7455 7456 proc, NotEqual, Origin(), 7456 root->appendNew<Value>(proc, opcode, Origin(), leftValue, rightValue),7457 root->append New<Const32Value>(proc, Origin(), 0)));7457 comparisonResult, 7458 root->appendIntConstant(proc, Origin(), comparisonResult->type(), 0))); 7458 7459 7459 7460 CHECK(compileAndRun<int>(proc, left, right) == result); … … 7609 7610 } 7610 7611 7611 void testCompareImpl(B3::Opcode opcode, int left, int right)7612 void testCompareImpl(B3::Opcode opcode, int64_t left, int64_t right) 7612 7613 { 7613 7614 int result = modelCompare(opcode, left, right); 7614 7615 7615 7616 // Test tmp-to-tmp. 7617 genericTestCompare( 7618 opcode, 7619 [&] (BasicBlock* block, Procedure& proc) { 7620 return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0); 7621 }, 7622 [&] (BasicBlock* block, Procedure& proc) { 7623 return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR1); 7624 }, 7625 left, right, result); 7616 7626 genericTestCompare( 7617 7627 opcode, … … 7632 7642 opcode, 7633 7643 [&] (BasicBlock* block, Procedure& proc) { 7644 return block->appendNew<Const64Value>(proc, Origin(), left); 7645 }, 7646 [&] (BasicBlock* block, Procedure& proc) { 7647 return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR1); 7648 }, 7649 left, right, result); 7650 genericTestCompare( 7651 opcode, 7652 [&] (BasicBlock* block, Procedure& proc) { 7634 7653 return block->appendNew<Const32Value>(proc, Origin(), left); 7635 7654 }, … … 7642 7661 7643 7662 // Test tmp-to-imm. 7663 genericTestCompare( 7664 opcode, 7665 [&] (BasicBlock* block, Procedure& proc) { 7666 return block->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0); 7667 }, 7668 [&] (BasicBlock* block, Procedure& proc) { 7669 return block->appendNew<Const64Value>(proc, Origin(), right); 7670 }, 7671 left, right, result); 7644 7672 genericTestCompare( 7645 7673 opcode, … … 7655 7683 7656 7684 // Test imm-to-imm. 7685 genericTestCompare( 7686 opcode, 7687 [&] (BasicBlock* block, Procedure& proc) { 7688 return block->appendNew<Const64Value>(proc, Origin(), left); 7689 }, 7690 [&] (BasicBlock* block, Procedure& proc) { 7691 return block->appendNew<Const64Value>(proc, Origin(), right); 7692 }, 7693 left, right, result); 7657 7694 genericTestCompare( 7658 7695 opcode,
Note:
See TracChangeset
for help on using the changeset viewer.