From: baptiste.afsa Date: Fri, 27 Mar 2015 21:57:41 +0000 (-0700) Subject: [turbofan][arm64] Use immediates instead of MiscField for stack operations. X-Git-Tag: upstream/4.7.83~3535 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6ad9bc2f55f0cb13927808be41855cb7b3c4fbcf;p=platform%2Fupstream%2Fv8.git [turbofan][arm64] Use immediates instead of MiscField for stack operations. This avoid to depend on MiscField to be big enough to hold the offset/size. This patch also remove the Arm64PokePair which is no longer used. R=bmeurer@chromium.org Review URL: https://codereview.chromium.org/1039753002 Cr-Commit-Position: refs/heads/master@{#27505} --- diff --git a/src/compiler/arm64/code-generator-arm64.cc b/src/compiler/arm64/code-generator-arm64.cc index 34ec3821f..1008ddcec 100644 --- a/src/compiler/arm64/code-generator-arm64.cc +++ b/src/compiler/arm64/code-generator-arm64.cc @@ -610,24 +610,16 @@ void CodeGenerator::AssembleArchInstruction(Instruction* instr) { // Pseudo instruction turned into cbz/cbnz in AssembleArchBranch. break; case kArm64Claim: { - int words = MiscField::decode(instr->opcode()); - __ Claim(words); + __ Claim(i.InputInt32(0)); break; } case kArm64Poke: { - int slot = MiscField::decode(instr->opcode()); - Operand operand(slot * kPointerSize); + Operand operand(i.InputInt32(1) * kPointerSize); __ Poke(i.InputRegister(0), operand); break; } - case kArm64PokePairZero: { - // TODO(dcarney): test slot offset and register order. - int slot = MiscField::decode(instr->opcode()) - 1; - __ PokePair(i.InputRegister(0), xzr, slot * kPointerSize); - break; - } case kArm64PokePair: { - int slot = MiscField::decode(instr->opcode()) - 1; + int slot = i.InputInt32(2) - 1; __ PokePair(i.InputRegister(1), i.InputRegister(0), slot * kPointerSize); break; } diff --git a/src/compiler/arm64/instruction-codes-arm64.h b/src/compiler/arm64/instruction-codes-arm64.h index ab19216e6..31187f015 100644 --- a/src/compiler/arm64/instruction-codes-arm64.h +++ b/src/compiler/arm64/instruction-codes-arm64.h @@ -77,7 +77,6 @@ namespace compiler { V(Arm64CompareAndBranch32) \ V(Arm64Claim) \ V(Arm64Poke) \ - V(Arm64PokePairZero) \ V(Arm64PokePair) \ V(Arm64Float64Cmp) \ V(Arm64Float64Add) \ diff --git a/src/compiler/arm64/instruction-selector-arm64.cc b/src/compiler/arm64/instruction-selector-arm64.cc index e81c5801b..427486b25 100644 --- a/src/compiler/arm64/instruction-selector-arm64.cc +++ b/src/compiler/arm64/instruction-selector-arm64.cc @@ -1168,7 +1168,7 @@ void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) { if (aligned_push_count > 0) { // TODO(dcarney): it would be better to bump the csp here only // and emit paired stores with increment for non c frames. - Emit(kArm64Claim | MiscField::encode(aligned_push_count), g.NoOutput()); + Emit(kArm64Claim, g.NoOutput(), g.TempImmediate(aligned_push_count)); } // Move arguments to the stack. { @@ -1176,15 +1176,16 @@ void InstructionSelector::VisitCall(Node* node, BasicBlock* handler) { // Emit the uneven pushes. if (pushed_count_uneven) { Node* input = buffer.pushed_nodes[slot]; - Emit(kArm64Poke | MiscField::encode(slot), g.NoOutput(), - g.UseRegister(input)); + Emit(kArm64Poke, g.NoOutput(), g.UseRegister(input), + g.TempImmediate(slot)); slot--; } // Now all pushes can be done in pairs. for (; slot >= 0; slot -= 2) { - Emit(kArm64PokePair | MiscField::encode(slot), g.NoOutput(), + Emit(kArm64PokePair, g.NoOutput(), g.UseRegister(buffer.pushed_nodes[slot]), - g.UseRegister(buffer.pushed_nodes[slot - 1])); + g.UseRegister(buffer.pushed_nodes[slot - 1]), + g.TempImmediate(slot)); } }