| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // | 2 // |
| 3 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
| 4 // found in the LICENSE file. | 4 // found in the LICENSE file. |
| 5 | 5 |
| 6 #include "src/crankshaft/s390/lithium-codegen-s390.h" | 6 #include "src/crankshaft/s390/lithium-codegen-s390.h" |
| 7 | 7 |
| 8 #include "src/base/bits.h" | 8 #include "src/base/bits.h" |
| 9 #include "src/builtins/builtins-constructor.h" | 9 #include "src/builtins/builtins-constructor.h" |
| 10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
| (...skipping 2175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2186 __ b(instr->FalseLabel(chunk_)); | 2186 __ b(instr->FalseLabel(chunk_)); |
| 2187 __ bind(¬_string); | 2187 __ bind(¬_string); |
| 2188 } | 2188 } |
| 2189 | 2189 |
| 2190 if (expected & ToBooleanHint::kSymbol) { | 2190 if (expected & ToBooleanHint::kSymbol) { |
| 2191 // Symbol value -> true. | 2191 // Symbol value -> true. |
| 2192 __ CompareInstanceType(map, ip, SYMBOL_TYPE); | 2192 __ CompareInstanceType(map, ip, SYMBOL_TYPE); |
| 2193 __ beq(instr->TrueLabel(chunk_)); | 2193 __ beq(instr->TrueLabel(chunk_)); |
| 2194 } | 2194 } |
| 2195 | 2195 |
| 2196 if (expected & ToBooleanHint::kSimdValue) { |
| 2197 // SIMD value -> true. |
| 2198 Label not_simd; |
| 2199 __ CompareInstanceType(map, ip, SIMD128_VALUE_TYPE); |
| 2200 __ beq(instr->TrueLabel(chunk_)); |
| 2201 } |
| 2202 |
| 2196 if (expected & ToBooleanHint::kHeapNumber) { | 2203 if (expected & ToBooleanHint::kHeapNumber) { |
| 2197 // heap number -> false iff +0, -0, or NaN. | 2204 // heap number -> false iff +0, -0, or NaN. |
| 2198 Label not_heap_number; | 2205 Label not_heap_number; |
| 2199 __ CompareRoot(map, Heap::kHeapNumberMapRootIndex); | 2206 __ CompareRoot(map, Heap::kHeapNumberMapRootIndex); |
| 2200 __ bne(¬_heap_number, Label::kNear); | 2207 __ bne(¬_heap_number, Label::kNear); |
| 2201 __ LoadDouble(dbl_scratch, | 2208 __ LoadDouble(dbl_scratch, |
| 2202 FieldMemOperand(reg, HeapNumber::kValueOffset)); | 2209 FieldMemOperand(reg, HeapNumber::kValueOffset)); |
| 2203 __ lzdr(kDoubleRegZero); | 2210 __ lzdr(kDoubleRegZero); |
| 2204 __ cdbr(dbl_scratch, kDoubleRegZero); | 2211 __ cdbr(dbl_scratch, kDoubleRegZero); |
| 2205 __ bunordered(instr->FalseLabel(chunk_)); // NaN -> false. | 2212 __ bunordered(instr->FalseLabel(chunk_)); // NaN -> false. |
| (...skipping 3139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5345 STATIC_ASSERT(LAST_JS_RECEIVER_TYPE == LAST_TYPE); | 5352 STATIC_ASSERT(LAST_JS_RECEIVER_TYPE == LAST_TYPE); |
| 5346 __ CompareObjectType(input, scratch, ip, FIRST_JS_RECEIVER_TYPE); | 5353 __ CompareObjectType(input, scratch, ip, FIRST_JS_RECEIVER_TYPE); |
| 5347 __ blt(false_label); | 5354 __ blt(false_label); |
| 5348 // Check for callable or undetectable objects => false. | 5355 // Check for callable or undetectable objects => false. |
| 5349 __ LoadlB(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset)); | 5356 __ LoadlB(scratch, FieldMemOperand(scratch, Map::kBitFieldOffset)); |
| 5350 __ AndP(r0, scratch, | 5357 __ AndP(r0, scratch, |
| 5351 Operand((1 << Map::kIsCallable) | (1 << Map::kIsUndetectable))); | 5358 Operand((1 << Map::kIsCallable) | (1 << Map::kIsUndetectable))); |
| 5352 __ CmpP(r0, Operand::Zero()); | 5359 __ CmpP(r0, Operand::Zero()); |
| 5353 final_branch_condition = eq; | 5360 final_branch_condition = eq; |
| 5354 | 5361 |
| 5362 // clang-format off |
| 5363 #define SIMD128_TYPE(TYPE, Type, type, lane_count, lane_type) \ |
| 5364 } else if (String::Equals(type_name, factory->type##_string())) { \ |
| 5365 __ JumpIfSmi(input, false_label); \ |
| 5366 __ LoadP(scratch, FieldMemOperand(input, HeapObject::kMapOffset)); \ |
| 5367 __ CompareRoot(scratch, Heap::k##Type##MapRootIndex); \ |
| 5368 final_branch_condition = eq; |
| 5369 SIMD128_TYPES(SIMD128_TYPE) |
| 5370 #undef SIMD128_TYPE |
| 5371 // clang-format on |
| 5372 |
| 5355 } else { | 5373 } else { |
| 5356 __ b(false_label); | 5374 __ b(false_label); |
| 5357 } | 5375 } |
| 5358 | 5376 |
| 5359 return final_branch_condition; | 5377 return final_branch_condition; |
| 5360 } | 5378 } |
| 5361 | 5379 |
| 5362 void LCodeGen::EnsureSpaceForLazyDeopt(int space_needed) { | 5380 void LCodeGen::EnsureSpaceForLazyDeopt(int space_needed) { |
| 5363 if (info()->ShouldEnsureSpaceForLazyDeopt()) { | 5381 if (info()->ShouldEnsureSpaceForLazyDeopt()) { |
| 5364 // Ensure that we have enough space after the previous lazy-bailout | 5382 // Ensure that we have enough space after the previous lazy-bailout |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5581 __ LoadP(result, | 5599 __ LoadP(result, |
| 5582 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize)); | 5600 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize)); |
| 5583 __ bind(deferred->exit()); | 5601 __ bind(deferred->exit()); |
| 5584 __ bind(&done); | 5602 __ bind(&done); |
| 5585 } | 5603 } |
| 5586 | 5604 |
| 5587 #undef __ | 5605 #undef __ |
| 5588 | 5606 |
| 5589 } // namespace internal | 5607 } // namespace internal |
| 5590 } // namespace v8 | 5608 } // namespace v8 |
| OLD | NEW |