Index: src/compiler/s390/code-generator-s390.cc |
diff --git a/src/compiler/s390/code-generator-s390.cc b/src/compiler/s390/code-generator-s390.cc |
index de6341cd6f824885c2bc17244e08a13c24bb9457..8b7668d68b6f1da53b25aa9d352d9ed841f2adee 100644 |
--- a/src/compiler/s390/code-generator-s390.cc |
+++ b/src/compiler/s390/code-generator-s390.cc |
@@ -452,6 +452,13 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { |
__ asm_instr(value, operand); \ |
} while (0) |
+#if V8_TARGET_ARCH_S390X |
JoranSiu
2016/04/26 20:37:48
Should we make this in macro asm?
|
+// TODO(mbrandy): fix paths that produce garbage in offset's upper 32-bits. |
+#define CleanUInt32(x) __ llgfr(x, x) |
+#else |
+#define CleanUInt32(x) |
+#endif |
+ |
#define ASSEMBLE_CHECKED_LOAD_FLOAT(asm_instr, width) \ |
do { \ |
DoubleRegister result = i.OutputDoubleRegister(); \ |
@@ -466,6 +473,7 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { |
} \ |
auto ool = new (zone()) OutOfLineLoadNAN##width(this, result); \ |
__ bge(ool->entry()); \ |
+ CleanUInt32(offset); \ |
__ asm_instr(result, operand); \ |
__ bind(ool->exit()); \ |
} while (0) |
@@ -484,6 +492,7 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { |
} \ |
auto ool = new (zone()) OutOfLineLoadZero(this, result); \ |
__ bge(ool->entry()); \ |
+ CleanUInt32(offset); \ |
__ asm_instr(result, operand); \ |
__ bind(ool->exit()); \ |
} while (0) |
@@ -502,6 +511,7 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { |
} \ |
__ bge(&done); \ |
DoubleRegister value = i.InputDoubleRegister(3); \ |
+ CleanUInt32(offset); \ |
__ StoreFloat32(value, operand); \ |
__ bind(&done); \ |
} while (0) |
@@ -521,6 +531,7 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { |
} \ |
__ bge(&done); \ |
DoubleRegister value = i.InputDoubleRegister(3); \ |
+ CleanUInt32(offset); \ |
__ StoreDouble(value, operand); \ |
__ bind(&done); \ |
} while (0) |
@@ -539,6 +550,7 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) { |
} \ |
__ bge(&done); \ |
Register value = i.InputRegister(3); \ |
+ CleanUInt32(offset); \ |
__ asm_instr(value, operand); \ |
__ bind(&done); \ |
} while (0) |