A64: Fix register usage in LCodeGen::ArgumentsLength
authorjochen@chromium.org <jochen@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 18 Feb 2014 11:56:55 +0000 (11:56 +0000)
committerjochen@chromium.org <jochen@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 18 Feb 2014 11:56:55 +0000 (11:56 +0000)
The result should be just stored in a W register

BUG=none
R=m.m.capewell@googlemail.com, ulan@chromium.org
LOG=n

Review URL: https://codereview.chromium.org/170363002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19439 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/a64/lithium-codegen-a64.cc

index 33d339b..2ed2369 100644 (file)
@@ -1648,7 +1648,7 @@ void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) {
 
 void LCodeGen::DoArgumentsLength(LArgumentsLength* instr) {
   Register elements = ToRegister(instr->elements());
-  Register result = ToRegister(instr->result());
+  Register result = ToRegister32(instr->result());
   Label done;
 
   // If no arguments adaptor frame the number of arguments is fixed.
@@ -1657,10 +1657,10 @@ void LCodeGen::DoArgumentsLength(LArgumentsLength* instr) {
   __ B(eq, &done);
 
   // Arguments adaptor frame present. Get argument length from there.
-  __ Ldr(result, MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
-  __ Ldrsw(result,
-           UntagSmiMemOperand(result,
-                              ArgumentsAdaptorFrameConstants::kLengthOffset));
+  __ Ldr(result.X(), MemOperand(fp, StandardFrameConstants::kCallerFPOffset));
+  __ Ldr(result,
+         UntagSmiMemOperand(result.X(),
+                            ArgumentsAdaptorFrameConstants::kLengthOffset));
 
   // Argument length is in result register.
   __ Bind(&done);