Index: src/compiler/arm64/code-generator-arm64.cc |
diff --git a/src/compiler/arm64/code-generator-arm64.cc b/src/compiler/arm64/code-generator-arm64.cc |
index cc46fd677e13bf7d76fd87f2f96a9178b20df04d..e0252360590296072bf353a576b629dfb743a119 100644 |
--- a/src/compiler/arm64/code-generator-arm64.cc |
+++ b/src/compiler/arm64/code-generator-arm64.cc |
@@ -176,9 +176,9 @@ class Arm64OperandConverter FINAL : public InstructionOperandConverter { |
namespace { |
-class OutOfLineLoadFloat32 FINAL : public OutOfLineCode { |
+class OutOfLineLoadNaN32 FINAL : public OutOfLineCode { |
public: |
- OutOfLineLoadFloat32(CodeGenerator* gen, DoubleRegister result) |
+ OutOfLineLoadNaN32(CodeGenerator* gen, DoubleRegister result) |
: OutOfLineCode(gen), result_(result) {} |
void Generate() FINAL { |
@@ -190,9 +190,9 @@ class OutOfLineLoadFloat32 FINAL : public OutOfLineCode { |
}; |
-class OutOfLineLoadFloat64 FINAL : public OutOfLineCode { |
+class OutOfLineLoadNaN64 FINAL : public OutOfLineCode { |
public: |
- OutOfLineLoadFloat64(CodeGenerator* gen, DoubleRegister result) |
+ OutOfLineLoadNaN64(CodeGenerator* gen, DoubleRegister result) |
: OutOfLineCode(gen), result_(result) {} |
void Generate() FINAL { |
@@ -204,9 +204,9 @@ class OutOfLineLoadFloat64 FINAL : public OutOfLineCode { |
}; |
-class OutOfLineLoadInteger FINAL : public OutOfLineCode { |
+class OutOfLineLoadZero FINAL : public OutOfLineCode { |
public: |
- OutOfLineLoadInteger(CodeGenerator* gen, Register result) |
+ OutOfLineLoadZero(CodeGenerator* gen, Register result) |
: OutOfLineCode(gen), result_(result) {} |
void Generate() FINAL { __ Mov(result_, 0); } |
@@ -218,53 +218,59 @@ class OutOfLineLoadInteger FINAL : public OutOfLineCode { |
} // namespace |
-#define ASSEMBLE_CHECKED_LOAD_FLOAT(width) \ |
- do { \ |
- auto result = i.OutputFloat##width##Register(); \ |
- auto offset = i.InputRegister32(0); \ |
- auto length = i.InputOperand32(1); \ |
- __ Cmp(offset, length); \ |
- auto ool = new (zone()) OutOfLineLoadFloat##width(this, result); \ |
- __ B(hs, ool->entry()); \ |
- __ Ldr(result, i.MemoryOperand(2)); \ |
- __ Bind(ool->exit()); \ |
+#define ASSEMBLE_CHECKED_LOAD_FLOAT(width) \ |
+ do { \ |
+ auto result = i.OutputFloat##width##Register(); \ |
+ auto buffer = i.InputRegister(0); \ |
+ auto offset = i.InputRegister32(1); \ |
+ auto length = i.InputOperand32(2); \ |
+ __ Cmp(offset, length); \ |
+ auto ool = new (zone()) OutOfLineLoadNaN##width(this, result); \ |
+ __ B(hs, ool->entry()); \ |
+ __ Ldr(result, MemOperand(buffer, offset, UXTW)); \ |
+ __ Bind(ool->exit()); \ |
} while (0) |
-#define ASSEMBLE_CHECKED_LOAD_INTEGER(asm_instr) \ |
- do { \ |
- auto result = i.OutputRegister32(); \ |
- auto offset = i.InputRegister32(0); \ |
- auto length = i.InputOperand32(1); \ |
- __ Cmp(offset, length); \ |
- auto ool = new (zone()) OutOfLineLoadInteger(this, result); \ |
- __ B(hs, ool->entry()); \ |
- __ asm_instr(result, i.MemoryOperand(2)); \ |
- __ Bind(ool->exit()); \ |
+#define ASSEMBLE_CHECKED_LOAD_INTEGER(asm_instr) \ |
+ do { \ |
+ auto result = i.OutputRegister32(); \ |
+ auto buffer = i.InputRegister(0); \ |
+ auto offset = i.InputRegister32(1); \ |
+ auto length = i.InputOperand32(2); \ |
+ __ Cmp(offset, length); \ |
+ auto ool = new (zone()) OutOfLineLoadZero(this, result); \ |
+ __ B(hs, ool->entry()); \ |
+ __ asm_instr(result, MemOperand(buffer, offset, UXTW)); \ |
+ __ Bind(ool->exit()); \ |
} while (0) |
-#define ASSEMBLE_CHECKED_STORE_FLOAT(width) \ |
- do { \ |
- auto offset = i.InputRegister32(0); \ |
- auto length = i.InputOperand32(1); \ |
- __ Cmp(offset, length); \ |
- Label done; \ |
- __ B(hs, &done); \ |
- __ Str(i.InputFloat##width##Register(2), i.MemoryOperand(3)); \ |
- __ Bind(&done); \ |
+#define ASSEMBLE_CHECKED_STORE_FLOAT(width) \ |
+ do { \ |
+ auto buffer = i.InputRegister(0); \ |
+ auto offset = i.InputRegister32(1); \ |
+ auto length = i.InputOperand32(2); \ |
+ auto value = i.InputFloat##width##Register(3); \ |
+ __ Cmp(offset, length); \ |
+ Label done; \ |
+ __ B(hs, &done); \ |
+ __ Str(value, MemOperand(buffer, offset, UXTW)); \ |
+ __ Bind(&done); \ |
} while (0) |
-#define ASSEMBLE_CHECKED_STORE_INTEGER(asm_instr) \ |
- do { \ |
- auto offset = i.InputRegister32(0); \ |
- auto length = i.InputOperand32(1); \ |
- __ Cmp(offset, length); \ |
- Label done; \ |
- __ B(hs, &done); \ |
- __ asm_instr(i.InputRegister32(2), i.MemoryOperand(3)); \ |
- __ Bind(&done); \ |
+#define ASSEMBLE_CHECKED_STORE_INTEGER(asm_instr) \ |
+ do { \ |
+ auto buffer = i.InputRegister(0); \ |
+ auto offset = i.InputRegister32(1); \ |
+ auto length = i.InputOperand32(2); \ |
+ auto value = i.InputRegister32(3); \ |
+ __ Cmp(offset, length); \ |
+ Label done; \ |
+ __ B(hs, &done); \ |
+ __ asm_instr(value, MemOperand(buffer, offset, UXTW)); \ |
+ __ Bind(&done); \ |
} while (0) |