diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-30 14:25:26 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-31 20:45:39 +0000 |
commit | da5618556d921aecb86bd89cf0bcffb878b0e564 (patch) | |
tree | 275c00adc4b1843003d8874fc042340b68963390 /src/qml/jit | |
parent | a3f7f40045421c1e1aaba7aa13232b3a788d9149 (diff) |
Remove platform ifdefs for generateCJumpStrictUndefined
Use templates to perform the platform encoding dependent way of
comparing a given value against undefined.
Change-Id: I7e7726455023200bd74e62d2dbc4e2c2908d9e64
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/jit')
-rw-r--r-- | src/qml/jit/qv4assembler.cpp | 11 | ||||
-rw-r--r-- | src/qml/jit/qv4assembler_p.h | 53 | ||||
-rw-r--r-- | src/qml/jit/qv4isel_masm.cpp | 16 |
3 files changed, 38 insertions, 42 deletions
diff --git a/src/qml/jit/qv4assembler.cpp b/src/qml/jit/qv4assembler.cpp index 141bc7132a..3ac8779508 100644 --- a/src/qml/jit/qv4assembler.cpp +++ b/src/qml/jit/qv4assembler.cpp @@ -212,17 +212,6 @@ void Assembler<TargetConfiguration>::generateCJumpOnNonZero(RegisterID reg, IR:: template <typename TargetConfiguration> void Assembler<TargetConfiguration>::generateCJumpOnCompare(RelationalCondition cond, RegisterID left, - TrustedImm64 right, - IR::BasicBlock *currentBlock, - IR::BasicBlock *trueBlock, - IR::BasicBlock *falseBlock) -{ - RegisterSizeDependentOps::generateCJumpOnCompare(this, cond, left, right, _nextBlock, currentBlock, trueBlock, falseBlock); -} - -template <typename TargetConfiguration> -void Assembler<TargetConfiguration>::generateCJumpOnCompare(RelationalCondition cond, - RegisterID left, TrustedImm32 right, IR::BasicBlock *currentBlock, IR::BasicBlock *trueBlock, diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index 6c2084b027..bca3985bb6 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -287,18 +287,23 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo as->poke(TrustedImm32(0), slot); } - static void generateCJumpOnCompare(JITAssembler *as, - RelationalCondition cond, - RegisterID, - TrustedImm64, - IR::BasicBlock *, - IR::BasicBlock *, - IR::BasicBlock *, - IR::BasicBlock *) + static void generateCJumpOnUndefined(JITAssembler *as, + RelationalCondition cond, IR::Expr *right, + RegisterID scratchRegister, RegisterID tagRegister, + IR::BasicBlock *nextBlock, IR::BasicBlock *currentBlock, + IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock) { - Q_UNUSED(as); - Q_UNUSED(cond); - Q_ASSERT(!"unimplemented generateCJumpOnCompare with TrustedImm64 for 32-bit"); + Pointer tagAddr = as->loadAddress(scratchRegister, right); + as->load32(tagAddr, tagRegister); + Jump j = as->branch32(JITAssembler::invert(cond), tagRegister, TrustedImm32(0)); + as->addPatch(falseBlock, j); + + tagAddr.offset += 4; + as->load32(tagAddr, tagRegister); + const TrustedImm32 tag(QV4::Value::Managed_Type_Internal); + Q_ASSERT(nextBlock == as->nextBlock()); + Q_UNUSED(nextBlock); + as->generateCJumpOnCompare(cond, tagRegister, tag, currentBlock, trueBlock, falseBlock); } static void convertVarToSInt32(JITAssembler *as, IR::Expr *source, IR::Expr *target) @@ -546,6 +551,18 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo } } + static void generateCJumpOnUndefined(JITAssembler *as, + RelationalCondition cond, IR::Expr *right, + RegisterID scratchRegister, RegisterID tagRegister, + IR::BasicBlock *nextBlock, IR::BasicBlock *currentBlock, + IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock) + { + Pointer addr = as->loadAddress(scratchRegister, right); + as->load64(addr, tagRegister); + const TrustedImm64 tag(0); + generateCJumpOnCompare(as, cond, tagRegister, tag, nextBlock, currentBlock, trueBlock, falseBlock); + } + static void convertVarToSInt32(JITAssembler *as, IR::Expr *source, IR::Expr *target) { Q_ASSERT(source->type == IR::VarType); @@ -880,17 +897,21 @@ public: void addPatch(DataLabelPtr patch, IR::BasicBlock *target); void generateCJumpOnNonZero(RegisterID reg, IR::BasicBlock *currentBlock, IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); - - void generateCJumpOnCompare(RelationalCondition cond, RegisterID left, TrustedImm64 right, - IR::BasicBlock *currentBlock, IR::BasicBlock *trueBlock, - IR::BasicBlock *falseBlock); - void generateCJumpOnCompare(RelationalCondition cond, RegisterID left, TrustedImm32 right, IR::BasicBlock *currentBlock, IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); void generateCJumpOnCompare(RelationalCondition cond, RegisterID left, RegisterID right, IR::BasicBlock *currentBlock, IR::BasicBlock *trueBlock, IR::BasicBlock *falseBlock); + void generateCJumpOnUndefined(RelationalCondition cond, IR::Expr *right, + RegisterID scratchRegister, RegisterID tagRegister, + IR::BasicBlock *currentBlock, IR::BasicBlock *trueBlock, + IR::BasicBlock *falseBlock) + { + RegisterSizeDependentOps::generateCJumpOnUndefined(this, cond, right, scratchRegister, tagRegister, + _nextBlock, currentBlock, trueBlock, falseBlock); + } + Jump genTryDoubleConversion(IR::Expr *src, FPRegisterID dest); Jump branchDouble(bool invertCondition, IR::AluOp op, IR::Expr *left, IR::Expr *right); Jump branchInt32(bool invertCondition, IR::AluOp op, IR::Expr *left, IR::Expr *right); diff --git a/src/qml/jit/qv4isel_masm.cpp b/src/qml/jit/qv4isel_masm.cpp index 03881e6776..b3b9ddb120 100644 --- a/src/qml/jit/qv4isel_masm.cpp +++ b/src/qml/jit/qv4isel_masm.cpp @@ -1537,21 +1537,7 @@ bool InstructionSelection<JITAssembler>::visitCJumpStrictUndefined(IR::Binop *bi RelationalCondition cond = binop->op == IR::OpStrictEqual ? RelationalCondition::Equal : RelationalCondition::NotEqual; const RegisterID tagReg = JITTargetPlatform::ReturnValueRegister; -#ifdef QV4_USE_64_BIT_VALUE_ENCODING - Pointer addr = _as->loadAddress(JITTargetPlatform::ScratchRegister, varSrc); - _as->load64(addr, tagReg); - const TrustedImm64 tag(0); -#else // !QV4_USE_64_BIT_VALUE_ENCODING - Pointer tagAddr = _as->loadAddress(JITTargetPlatform::ScratchRegister, varSrc); - _as->load32(tagAddr, tagReg); - Jump j = _as->branch32(JITAssembler::invert(cond), tagReg, TrustedImm32(0)); - _as->addPatch(falseBlock, j); - - tagAddr.offset += 4; - _as->load32(tagAddr, tagReg); - const TrustedImm32 tag(QV4::Value::Managed_Type_Internal); -#endif - _as->generateCJumpOnCompare(cond, tagReg, tag, _block, trueBlock, falseBlock); + _as->generateCJumpOnUndefined(cond, varSrc, JITTargetPlatform::ScratchRegister, tagReg, _block, trueBlock, falseBlock); return true; } |