diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-30 15:11:12 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-31 20:45:43 +0000 |
commit | a159d6d43da100c5a4acb183589fa4554b33a474 (patch) | |
tree | 36d8e001a6b195c589b83193f74241fb9faf09bd /src/qml/jit/qv4assembler_p.h | |
parent | da5618556d921aecb86bd89cf0bcffb878b0e564 (diff) |
Remove platform ifdefs for ISE::convertTypeToDouble
Change-Id: I75db85fbd601d4790a3cb9af483474a976d00e86
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/qml/jit/qv4assembler_p.h')
-rw-r--r-- | src/qml/jit/qv4assembler_p.h | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index bca3985bb6..6d8d773ff0 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -345,6 +345,13 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo destAddr.offset += 4; as->store32(TrustedImm32(QV4::Value::Managed_Type_Internal_32), destAddr); } + + static Jump generateIsDoubleCheck(JITAssembler *as, RegisterID tagOrValueRegister) + { + as->and32(TrustedImm32(Value::NotDouble_Mask), tagOrValueRegister); + return as->branch32(RelationalCondition::NotEqual, tagOrValueRegister, + TrustedImm32(Value::NotDouble_Mask)); + } }; template <typename JITAssembler, typename MacroAssembler, typename TargetPlatform> @@ -611,6 +618,13 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo { as->store64(registerWithPtr, destAddr); } + + static Jump generateIsDoubleCheck(JITAssembler *as, RegisterID tagOrValueRegister) + { + as->rshift32(TrustedImm32(Value::IsDoubleTag_Shift), tagOrValueRegister); + return as->branch32(RelationalCondition::NotEqual, tagOrValueRegister, + TrustedImm32(0)); + } }; template <typename TargetConfiguration> @@ -912,6 +926,11 @@ public: _nextBlock, currentBlock, trueBlock, falseBlock); } + Jump generateIsDoubleCheck(RegisterID tagOrValueRegister) + { + return RegisterSizeDependentOps::generateIsDoubleCheck(this, tagOrValueRegister); + } + 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); @@ -1176,6 +1195,13 @@ public: TargetConfiguration::MacroAssembler::storeDouble(FPGpr0, target); } + // The scratch register is used to calculate the temp address for the source. + void memcopyValue(IR::Expr *target, Pointer source, FPRegisterID fpScratchRegister, RegisterID scratchRegister) + { + TargetConfiguration::MacroAssembler::loadDouble(source, fpScratchRegister); + TargetConfiguration::MacroAssembler::storeDouble(fpScratchRegister, loadAddress(scratchRegister, target)); + } + void storeValue(QV4::Primitive value, RegisterID destination) { Q_UNUSED(value); |