From 5e2db52aac1e3c511e1af815ef24775295668d73 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Tue, 17 Jan 2017 16:06:57 +0100 Subject: Replace more storeDouble 64/32-bit #ifdef variation with templates Change-Id: I56159645dd896eff0874129db6c0d53241ad901e Reviewed-by: Lars Knoll --- src/qml/jit/qv4assembler_p.h | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src/qml/jit/qv4assembler_p.h') diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index ad30955df4..6dc176b82e 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -139,6 +139,12 @@ struct RegisterSizeDependentAssemblerMacroAssembler::storeDouble(source, addr); } + static void storeDouble(JITAssembler *as, FPRegisterID source, IR::Expr* target) + { + Pointer ptr = as->loadAddress(TargetPlatform::ScratchRegister, target); + as->storeDouble(source, ptr); + } + static void storeReturnValue(JITAssembler *as, FPRegisterID dest) { as->moveIntsToDouble(TargetPlatform::LowReturnValueRegister, TargetPlatform::HighReturnValueRegister, dest, TargetPlatform::FPGpr0); @@ -194,6 +200,15 @@ struct RegisterSizeDependentAssemblerstore64(TargetPlatform::ReturnValueRegister, addr); } + static void storeDouble(JITAssembler *as, FPRegisterID source, IR::Expr* target) + { + as->moveDoubleTo64(source, TargetPlatform::ReturnValueRegister); + as->move(TrustedImm64(QV4::Value::NaNEncodeMask), TargetPlatform::ScratchRegister); + as->xor64(TargetPlatform::ScratchRegister, TargetPlatform::ReturnValueRegister); + Pointer ptr = as->loadAddress(TargetPlatform::ScratchRegister, target); + as->store64(TargetPlatform::ReturnValueRegister, ptr); + } + static void storeReturnValue(JITAssembler *as, FPRegisterID dest) { as->move(TrustedImm64(QV4::Value::NaNEncodeMask), TargetPlatform::ScratchRegister); @@ -250,9 +265,7 @@ public: using MacroAssembler::move; using MacroAssembler::jump; #ifdef QV4_USE_64_BIT_VALUE_ENCODING - using MacroAssembler::moveDoubleTo64; using MacroAssembler::move64ToDouble; - using MacroAssembler::xor64; using MacroAssembler::store64; using MacroAssembler::load64; #endif @@ -804,16 +817,7 @@ public: moveDouble(source, (FPRegisterID) targetTemp->index); return; } -#ifdef QV4_USE_64_BIT_VALUE_ENCODING - moveDoubleTo64(source, ReturnValueRegister); - move(TrustedImm64(QV4::Value::NaNEncodeMask), ScratchRegister); - xor64(ScratchRegister, ReturnValueRegister); - Pointer ptr = loadAddress(ScratchRegister, target); - store64(ReturnValueRegister, ptr); -#else - Pointer ptr = loadAddress(ScratchRegister, target); - storeDouble(source, ptr); -#endif + RegisterSizeDependentOps::storeDouble(this, source, target); } void loadDouble(Address addr, FPRegisterID dest) -- cgit v1.2.3