diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-17 16:32:47 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-31 13:40:14 +0000 |
commit | 5a65944ce1398e9950a05355344f7054404b6a51 (patch) | |
tree | 94d0d55601a4390da89ca8080d4e7605b30dc9ab /src/qml/jit/qv4assembler_p.h | |
parent | 7d2811bec813f2323c5af9fc44d15f43d9f21d2a (diff) |
Replace ifdefs with templates when loading double constants
Change-Id: I33155d8071d03250edefaf93f769c9629a5f827f
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 | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index 814ab67698..73e5243a20 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -160,6 +160,11 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo as->storeDouble(TargetPlatform::FPGpr0, destination); } + static void loadDoubleConstant(JITAssembler *as, IR::Const *c, FPRegisterID target) + { + as->MacroAssembler::loadDouble(as->loadConstant(c, TargetPlatform::ScratchRegister), target); + } + static void storeReturnValue(JITAssembler *as, FPRegisterID dest) { as->moveIntsToDouble(TargetPlatform::LowReturnValueRegister, TargetPlatform::HighReturnValueRegister, dest, TargetPlatform::FPGpr0); @@ -250,6 +255,15 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo as->storeReturnValue(destination); } + static void loadDoubleConstant(JITAssembler *as, IR::Const *c, FPRegisterID target) + { + Q_STATIC_ASSERT(sizeof(int64_t) == sizeof(double)); + int64_t i; + memcpy(&i, &c->value, sizeof(double)); + as->move(TrustedImm64(i), TargetPlatform::ReturnValueRegister); + as->move64ToDouble(TargetPlatform::ReturnValueRegister, target); + } + static void generateCJumpOnCompare(JITAssembler *as, RelationalCondition cond, RegisterID left, @@ -294,7 +308,6 @@ public: using MacroAssembler::move; using MacroAssembler::jump; #ifdef QV4_USE_64_BIT_VALUE_ENCODING - using MacroAssembler::move64ToDouble; using MacroAssembler::load64; #endif using MacroAssembler::add32; @@ -1172,15 +1185,7 @@ public: FPRegisterID toDoubleRegister(IR::Expr *e, FPRegisterID target = FPGpr0) { if (IR::Const *c = e->asConst()) { -#ifdef QV4_USE_64_BIT_VALUE_ENCODING - Q_STATIC_ASSERT(sizeof(int64_t) == sizeof(double)); - int64_t i; - memcpy(&i, &c->value, sizeof(double)); - move(TrustedImm64(i), ReturnValueRegister); - move64ToDouble(ReturnValueRegister, target); -#else - MacroAssembler::loadDouble(loadConstant(c, ScratchRegister), target); -#endif + RegisterSizeDependentOps::loadDoubleConstant(this, c, target); return target; } |