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/code-factory.h" | 9 #include "src/code-factory.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 2550 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2561 // Deoptimize if the object needs to be access checked. | 2561 // Deoptimize if the object needs to be access checked. |
2562 __ LoadlB(object_instance_type, | 2562 __ LoadlB(object_instance_type, |
2563 FieldMemOperand(object_map, Map::kBitFieldOffset)); | 2563 FieldMemOperand(object_map, Map::kBitFieldOffset)); |
2564 __ TestBit(object_instance_type, Map::kIsAccessCheckNeeded, r0); | 2564 __ TestBit(object_instance_type, Map::kIsAccessCheckNeeded, r0); |
2565 DeoptimizeIf(ne, instr, Deoptimizer::kAccessCheck, cr0); | 2565 DeoptimizeIf(ne, instr, Deoptimizer::kAccessCheck, cr0); |
2566 // Deoptimize for proxies. | 2566 // Deoptimize for proxies. |
2567 __ CompareInstanceType(object_map, object_instance_type, JS_PROXY_TYPE); | 2567 __ CompareInstanceType(object_map, object_instance_type, JS_PROXY_TYPE); |
2568 DeoptimizeIf(eq, instr, Deoptimizer::kProxy); | 2568 DeoptimizeIf(eq, instr, Deoptimizer::kProxy); |
2569 __ LoadP(object_prototype, | 2569 __ LoadP(object_prototype, |
2570 FieldMemOperand(object_map, Map::kPrototypeOffset)); | 2570 FieldMemOperand(object_map, Map::kPrototypeOffset)); |
| 2571 __ CompareRoot(object_prototype, Heap::kNullValueRootIndex); |
| 2572 EmitFalseBranch(instr, eq); |
2571 __ CmpP(object_prototype, prototype); | 2573 __ CmpP(object_prototype, prototype); |
2572 EmitTrueBranch(instr, eq); | 2574 EmitTrueBranch(instr, eq); |
2573 __ CompareRoot(object_prototype, Heap::kNullValueRootIndex); | |
2574 EmitFalseBranch(instr, eq); | |
2575 __ LoadP(object_map, | 2575 __ LoadP(object_map, |
2576 FieldMemOperand(object_prototype, HeapObject::kMapOffset)); | 2576 FieldMemOperand(object_prototype, HeapObject::kMapOffset)); |
2577 __ b(&loop); | 2577 __ b(&loop); |
2578 } | 2578 } |
2579 | 2579 |
2580 void LCodeGen::DoCmpT(LCmpT* instr) { | 2580 void LCodeGen::DoCmpT(LCmpT* instr) { |
2581 DCHECK(ToRegister(instr->context()).is(cp)); | 2581 DCHECK(ToRegister(instr->context()).is(cp)); |
2582 Token::Value op = instr->op(); | 2582 Token::Value op = instr->op(); |
2583 | 2583 |
2584 Handle<Code> ic = CodeFactory::CompareIC(isolate(), op).code(); | 2584 Handle<Code> ic = CodeFactory::CompareIC(isolate(), op).code(); |
(...skipping 3118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5703 __ LoadP(result, | 5703 __ LoadP(result, |
5704 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize)); | 5704 FieldMemOperand(scratch, FixedArray::kHeaderSize - kPointerSize)); |
5705 __ bind(deferred->exit()); | 5705 __ bind(deferred->exit()); |
5706 __ bind(&done); | 5706 __ bind(&done); |
5707 } | 5707 } |
5708 | 5708 |
5709 #undef __ | 5709 #undef __ |
5710 | 5710 |
5711 } // namespace internal | 5711 } // namespace internal |
5712 } // namespace v8 | 5712 } // namespace v8 |
OLD | NEW |