| Index: src/crankshaft/s390/lithium-codegen-s390.cc
|
| diff --git a/src/crankshaft/s390/lithium-codegen-s390.cc b/src/crankshaft/s390/lithium-codegen-s390.cc
|
| index b8fa2bc8089c889d31580fd43236d7f455eff5b1..864f2495d6a89295d0dc9bf8e44d2e01827b3986 100644
|
| --- a/src/crankshaft/s390/lithium-codegen-s390.cc
|
| +++ b/src/crankshaft/s390/lithium-codegen-s390.cc
|
| @@ -4875,14 +4875,42 @@ void LCodeGen::DoDoubleToSmi(LDoubleToSmi* instr) {
|
|
|
| void LCodeGen::DoCheckSmi(LCheckSmi* instr) {
|
| LOperand* input = instr->value();
|
| - __ TestIfSmi(ToRegister(input));
|
| + if (input->IsRegister()) {
|
| + __ TestIfSmi(ToRegister(input));
|
| + } else if (input->IsStackSlot()) {
|
| + MemOperand value = ToMemOperand(input);
|
| +#if !V8_TARGET_LITTLE_ENDIAN
|
| +#if V8_TARGET_ARCH_S390X
|
| + __ TestIfSmi(MemOperand(value.rb(), value.offset() + 7));
|
| +#else
|
| + __ TestIfSmi(MemOperand(value.rb(), value.offset() + 3));
|
| +#endif
|
| +#else
|
| + __ TestIfSmi(value);
|
| +#endif
|
| + }
|
| DeoptimizeIf(ne, instr, DeoptimizeReason::kNotASmi, cr0);
|
| }
|
|
|
| void LCodeGen::DoCheckNonSmi(LCheckNonSmi* instr) {
|
| if (!instr->hydrogen()->value()->type().IsHeapObject()) {
|
| LOperand* input = instr->value();
|
| - __ TestIfSmi(ToRegister(input));
|
| + if (input->IsRegister()) {
|
| + __ TestIfSmi(ToRegister(input));
|
| + } else if (input->IsStackSlot()) {
|
| + MemOperand value = ToMemOperand(input);
|
| +#if !V8_TARGET_LITTLE_ENDIAN
|
| +#if V8_TARGET_ARCH_S390X
|
| + __ TestIfSmi(MemOperand(value.rb(), value.offset() + 7));
|
| +#else
|
| + __ TestIfSmi(MemOperand(value.rb(), value.offset() + 3));
|
| +#endif
|
| +#else
|
| + __ TestIfSmi(value);
|
| +#endif
|
| + } else {
|
| + UNIMPLEMENTED();
|
| + }
|
| DeoptimizeIf(eq, instr, DeoptimizeReason::kSmi, cr0);
|
| }
|
| }
|
|
|