Chromium Code Reviews| 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) |