diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-17 16:19:38 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-31 13:40:10 +0000 |
commit | 7d2811bec813f2323c5af9fc44d15f43d9f21d2a (patch) | |
tree | 1d898bb275f128bd3cb6399e8e81111b8334ae16 /src/qml/jit/qv4assembler_p.h | |
parent | ce1551a05c494c54127ab5371f5e8de1823f477e (diff) |
Replace platform ifdefs in copyValue with template specializations
Change-Id: Iecc92f86a7314e4674f140251467c0654451abef
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 | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index e43639449a..814ab67698 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -153,6 +153,13 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo as->store32(TrustedImm32(value.tag()), destination); } + template <typename Source, typename Destination> + static void copyValueViaRegisters(JITAssembler *as, Source source, Destination destination) + { + as->loadDouble(source, TargetPlatform::FPGpr0); + as->storeDouble(TargetPlatform::FPGpr0, destination); + } + static void storeReturnValue(JITAssembler *as, FPRegisterID dest) { as->moveIntsToDouble(TargetPlatform::LowReturnValueRegister, TargetPlatform::HighReturnValueRegister, dest, TargetPlatform::FPGpr0); @@ -234,6 +241,15 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo as->store64(TrustedImm64(value.rawValue()), destination); } + template <typename Source, typename Destination> + static void copyValueViaRegisters(JITAssembler *as, Source source, Destination destination) + { + // Use ReturnValueRegister as "scratch" register because loadArgument + // and storeArgument are functions that may need a scratch register themselves. + as->loadArgumentInRegister(source, TargetPlatform::ReturnValueRegister, 0); + as->storeReturnValue(destination); + } + static void generateCJumpOnCompare(JITAssembler *as, RelationalCondition cond, RegisterID left, @@ -1275,15 +1291,7 @@ template <typename TargetConfiguration> template <typename Result, typename Source> void Assembler<TargetConfiguration>::copyValue(Result result, Source source) { -#ifdef VALUE_FITS_IN_REGISTER - // Use ReturnValueRegister as "scratch" register because loadArgument - // and storeArgument are functions that may need a scratch register themselves. - loadArgumentInRegister(source, ReturnValueRegister, 0); - storeReturnValue(result); -#else - loadDouble(source, FPGpr0); - storeDouble(FPGpr0, result); -#endif + RegisterSizeDependentOps::copyValueViaRegisters(this, source, result); } template <typename TargetConfiguration> @@ -1302,15 +1310,7 @@ void Assembler<TargetConfiguration>::copyValue(Result result, IR::Expr* source) } else if (source->type == IR::DoubleType) { storeDouble(toDoubleRegister(source), result); } else if (source->asTemp() || source->asArgLocal()) { -#ifdef VALUE_FITS_IN_REGISTER - // Use ReturnValueRegister as "scratch" register because loadArgument - // and storeArgument are functions that may need a scratch register themselves. - loadArgumentInRegister(source, ReturnValueRegister, 0); - storeReturnValue(result); -#else - loadDouble(source, FPGpr0); - storeDouble(FPGpr0, result); -#endif + RegisterSizeDependentOps::copyValueViaRegisters(this, source, result); } else if (IR::Const *c = source->asConst()) { QV4::Primitive v = convertToValue(c); storeValue(v, result); |