diff options
author | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-17 16:40:17 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@qt.io> | 2017-01-31 13:40:18 +0000 |
commit | 956002f83555da7f9a51a1f83b188c1a8fd37f8b (patch) | |
tree | 5906a251c510f4824835c0271227a58a90a0a130 /src/qml/jit/qv4assembler_p.h | |
parent | 5a65944ce1398e9950a05355344f7054404b6a51 (diff) |
Move loading of register arguments into 8-byte register ops
Change-Id: I779fff3a925015c34162542648b8074692c0b974
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 | 134 |
1 files changed, 88 insertions, 46 deletions
diff --git a/src/qml/jit/qv4assembler_p.h b/src/qml/jit/qv4assembler_p.h index 73e5243a20..aa9a6a9310 100644 --- a/src/qml/jit/qv4assembler_p.h +++ b/src/qml/jit/qv4assembler_p.h @@ -178,6 +178,38 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo as->store32(TargetPlatform::HighReturnValueRegister, destination); } + static void loadArgumentInRegister(JITAssembler *as, IR::Temp* temp, RegisterID dest, int argumentNumber) + { + Q_UNUSED(as); + Q_UNUSED(temp); + Q_UNUSED(dest); + Q_UNUSED(argumentNumber); + } + + static void loadArgumentInRegister(JITAssembler *as, IR::ArgLocal* al, RegisterID dest, int argumentNumber) + { + Q_UNUSED(as); + Q_UNUSED(al); + Q_UNUSED(dest); + Q_UNUSED(argumentNumber); + } + + static void loadArgumentInRegister(JITAssembler *as, IR::Const* c, RegisterID dest, int argumentNumber) + { + Q_UNUSED(as); + Q_UNUSED(c); + Q_UNUSED(dest); + Q_UNUSED(argumentNumber); + } + + static void loadArgumentInRegister(JITAssembler *as, IR::Expr* expr, RegisterID dest, int argumentNumber) + { + Q_UNUSED(as); + Q_UNUSED(expr); + Q_UNUSED(dest); + Q_UNUSED(argumentNumber); + } + static void generateCJumpOnCompare(JITAssembler *as, RelationalCondition cond, RegisterID, @@ -264,6 +296,58 @@ struct RegisterSizeDependentAssembler<JITAssembler, MacroAssembler, TargetPlatfo as->move64ToDouble(TargetPlatform::ReturnValueRegister, target); } + static void loadArgumentInRegister(JITAssembler *as, IR::Temp* temp, RegisterID dest, int argumentNumber) + { + Q_UNUSED(argumentNumber); + + if (temp) { + Pointer addr = as->loadTempAddress(temp); + as->load64(addr, dest); + } else { + QV4::Value undefined = QV4::Primitive::undefinedValue(); + as->move(TrustedImm64(undefined.rawValue()), dest); + } + } + + static void loadArgumentInRegister(JITAssembler *as, IR::ArgLocal* al, RegisterID dest, int argumentNumber) + { + Q_UNUSED(argumentNumber); + + if (al) { + Pointer addr = as->loadArgLocalAddress(dest, al); + as->load64(addr, dest); + } else { + QV4::Value undefined = QV4::Primitive::undefinedValue(); + as->move(TrustedImm64(undefined.rawValue()), dest); + } + } + + static void loadArgumentInRegister(JITAssembler *as, IR::Const* c, RegisterID dest, int argumentNumber) + { + Q_UNUSED(argumentNumber); + + QV4::Value v = convertToValue(c); + as->move(TrustedImm64(v.rawValue()), dest); + } + + static void loadArgumentInRegister(JITAssembler *as, IR::Expr* expr, RegisterID dest, int argumentNumber) + { + Q_UNUSED(argumentNumber); + + if (!expr) { + QV4::Value undefined = QV4::Primitive::undefinedValue(); + as->move(TrustedImm64(undefined.rawValue()), dest); + } else if (IR::Temp *t = expr->asTemp()){ + loadArgumentInRegister(as, t, dest, argumentNumber); + } else if (IR::ArgLocal *al = expr->asArgLocal()) { + loadArgumentInRegister(as, al, dest, argumentNumber); + } else if (IR::Const *c = expr->asConst()) { + loadArgumentInRegister(as, c, dest, argumentNumber); + } else { + Q_ASSERT(!"unimplemented expression type in loadArgument"); + } + } + static void generateCJumpOnCompare(JITAssembler *as, RelationalCondition cond, RegisterID left, @@ -307,9 +391,6 @@ public: using MacroAssembler::label; using MacroAssembler::move; using MacroAssembler::jump; -#ifdef QV4_USE_64_BIT_VALUE_ENCODING - using MacroAssembler::load64; -#endif using MacroAssembler::add32; using MacroAssembler::and32; using MacroAssembler::store32; @@ -667,64 +748,25 @@ public: loadArgumentInRegister(addr, dest, argumentNumber); } -#ifdef VALUE_FITS_IN_REGISTER void loadArgumentInRegister(IR::Temp* temp, RegisterID dest, int argumentNumber) { - Q_UNUSED(argumentNumber); - - if (temp) { - Pointer addr = loadTempAddress(temp); - load64(addr, dest); - } else { - QV4::Value undefined = QV4::Primitive::undefinedValue(); - move(TrustedImm64(undefined.rawValue()), dest); - } + RegisterSizeDependentOps::loadArgumentInRegister(this, temp, dest, argumentNumber); } void loadArgumentInRegister(IR::ArgLocal* al, RegisterID dest, int argumentNumber) { - Q_UNUSED(argumentNumber); - - if (al) { - Pointer addr = loadArgLocalAddress(dest, al); - load64(addr, dest); - } else { - QV4::Value undefined = QV4::Primitive::undefinedValue(); - move(TrustedImm64(undefined.rawValue()), dest); - } + RegisterSizeDependentOps::loadArgumentInRegister(this, al, dest, argumentNumber); } void loadArgumentInRegister(IR::Const* c, RegisterID dest, int argumentNumber) { - Q_UNUSED(argumentNumber); - - QV4::Value v = convertToValue(c); - move(TrustedImm64(v.rawValue()), dest); + RegisterSizeDependentOps::loadArgumentInRegister(this, c, dest, argumentNumber); } void loadArgumentInRegister(IR::Expr* expr, RegisterID dest, int argumentNumber) { - Q_UNUSED(argumentNumber); - - if (!expr) { - QV4::Value undefined = QV4::Primitive::undefinedValue(); - move(TrustedImm64(undefined.rawValue()), dest); - } else if (IR::Temp *t = expr->asTemp()){ - loadArgumentInRegister(t, dest, argumentNumber); - } else if (IR::ArgLocal *al = expr->asArgLocal()) { - loadArgumentInRegister(al, dest, argumentNumber); - } else if (IR::Const *c = expr->asConst()) { - loadArgumentInRegister(c, dest, argumentNumber); - } else { - Q_ASSERT(!"unimplemented expression type in loadArgument"); - } + RegisterSizeDependentOps::loadArgumentInRegister(this, expr, dest, argumentNumber); } -#else - void loadArgumentInRegister(IR::Expr*, RegisterID) - { - Q_ASSERT(!"unimplemented: expression in loadArgument"); - } -#endif void loadArgumentInRegister(TrustedImm32 imm32, RegisterID dest, int argumentNumber) { |