diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-06-09 23:31:26 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-06-21 19:43:28 +0000 |
commit | 6969aa5932f0eb7171dea2b4da39c21d1c09cc60 (patch) | |
tree | a842b629c57bbc3e3486de0d9783f9ed61ea307b /src/qml/compiler/qv4codegen.cpp | |
parent | 0562ece42df80cd3ffe3c3fe6b2097202fe65500 (diff) | |
download | qtdeclarative-6969aa5932f0eb7171dea2b4da39c21d1c09cc60.tar.gz |
Get rid of LoadElement and LoadProperty instruction overloads
Always use the overload where the value is in the accumulator.
Change-Id: I6a3d81fea7aae957e0cf6efd123d7739f8880c95
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'src/qml/compiler/qv4codegen.cpp')
-rw-r--r-- | src/qml/compiler/qv4codegen.cpp | 49 |
1 files changed, 24 insertions, 25 deletions
diff --git a/src/qml/compiler/qv4codegen.cpp b/src/qml/compiler/qv4codegen.cpp index 72e6b2bdf5..6682f604de 100644 --- a/src/qml/compiler/qv4codegen.cpp +++ b/src/qml/compiler/qv4codegen.cpp @@ -3495,6 +3495,22 @@ Codegen::RValue Codegen::RValue::storeOnStack() const } } +void Codegen::RValue::loadInAccumulator() const +{ + switch (type) { + case Accumulator: + // nothing to do + return; + case StackSlot: + return Reference::fromStackSlot(codegen, theStackSlot).loadInAccumulator(); + case Const: + return Reference::fromConst(codegen, constant).loadInAccumulator(); + default: + Q_UNREACHABLE(); + } + +} + Codegen::Reference::Reference(const Codegen::Reference &other) { *this = other; @@ -3867,34 +3883,17 @@ QT_WARNING_POP codegen->bytecodeGenerator->addInstruction(load); } } else { - if (propertyBase.isAccumulator()) { - Instruction::LoadPropertyA load; - load.name = propertyNameIndex; - codegen->bytecodeGenerator->addInstruction(load); - } else { - Instruction::LoadProperty load; - load.base = propertyBase.storeOnStack().stackSlot(); - load.name = propertyNameIndex; - codegen->bytecodeGenerator->addInstruction(load); - } + propertyBase.loadInAccumulator(); + Instruction::LoadProperty load; + load.name = propertyNameIndex; + codegen->bytecodeGenerator->addInstruction(load); } return; case Subscript: { - if (elementSubscript.isAccumulator()) { - Instruction::LoadElementA load; - load.base = elementBase; - codegen->bytecodeGenerator->addInstruction(load); - } else if (elementSubscript.isConst()) { - Reference::fromConst(codegen, elementSubscript.constantValue()).loadInAccumulator(); - Instruction::LoadElementA load; - load.base = elementBase; - codegen->bytecodeGenerator->addInstruction(load); - } else { - Instruction::LoadElement load; - load.base = elementBase; - load.index = elementSubscript.storeOnStack().stackSlot(); - codegen->bytecodeGenerator->addInstruction(load); - } + elementSubscript.loadInAccumulator(); + Instruction::LoadElement load; + load.base = elementBase; + codegen->bytecodeGenerator->addInstruction(load); } return; case QmlScopeObject: { Instruction::LoadScopeObjectProperty load; |