S390X: [turbofan] Fix checked loads/stores.

This refines 6382a61059 -- as we still
require clean up of the uint index register.

TEST=mjsunit/asm/float32array-negative-offset
R=joransiu@ca.ibm.com, mbrandy@us.ibm.com, michael_dawson@ca.ibm.com, bjaideep@ca.ibm.com
BUG=

Conflicts:
	src/compiler/s390/code-generator-s390.cc

Review-Url: https://codereview.chromium.org/1921073003
Cr-Commit-Position: refs/heads/master@{#35879}
This commit is contained in:
jyan 2016-04-28 12:43:28 -07:00 committed by Commit bot
parent 38e7d1fb1a
commit 3e9924f6dd
2 changed files with 11 additions and 0 deletions

View File

@ -466,6 +466,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 +485,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 +504,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 +524,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 +543,7 @@ Condition FlagsConditionToCondition(FlagsCondition condition, ArchOpcode op) {
} \
__ bge(&done); \
Register value = i.InputRegister(3); \
__ CleanUInt32(offset); \
__ asm_instr(value, operand); \
__ bind(&done); \
} while (0)

View File

@ -412,6 +412,12 @@ class MacroAssembler : public Assembler {
void mov(Register dst, const Operand& src);
void CleanUInt32(Register x) {
#ifdef V8_TARGET_ARCH_S390X
llgfr(x, x);
#endif
}
// ---------------------------------------------------------------------------
// GC Support