OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "v8.h" | 5 #include "v8.h" |
6 | 6 |
7 #include "arm/lithium-codegen-arm.h" | 7 #include "arm/lithium-codegen-arm.h" |
8 #include "arm/lithium-gap-resolver-arm.h" | 8 #include "arm/lithium-gap-resolver-arm.h" |
9 #include "code-stubs.h" | 9 #include "code-stubs.h" |
10 #include "stub-cache.h" | 10 #include "stub-cache.h" |
(...skipping 5122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5133 codegen()->DoDeferredInstanceMigration(instr_, object_); | 5133 codegen()->DoDeferredInstanceMigration(instr_, object_); |
5134 } | 5134 } |
5135 Label* check_maps() { return &check_maps_; } | 5135 Label* check_maps() { return &check_maps_; } |
5136 virtual LInstruction* instr() V8_OVERRIDE { return instr_; } | 5136 virtual LInstruction* instr() V8_OVERRIDE { return instr_; } |
5137 private: | 5137 private: |
5138 LCheckMaps* instr_; | 5138 LCheckMaps* instr_; |
5139 Label check_maps_; | 5139 Label check_maps_; |
5140 Register object_; | 5140 Register object_; |
5141 }; | 5141 }; |
5142 | 5142 |
5143 if (instr->hydrogen()->CanOmitMapChecks()) return; | 5143 if (instr->hydrogen()->IsStabilityCheck()) { |
| 5144 const UniqueSet<Map>* maps = instr->hydrogen()->maps(); |
| 5145 for (int i = 0; i < maps->size(); ++i) { |
| 5146 AddStabilityDependency(maps->at(i).handle()); |
| 5147 } |
| 5148 return; |
| 5149 } |
| 5150 |
5144 Register map_reg = scratch0(); | 5151 Register map_reg = scratch0(); |
5145 | 5152 |
5146 LOperand* input = instr->value(); | 5153 LOperand* input = instr->value(); |
5147 ASSERT(input->IsRegister()); | 5154 ASSERT(input->IsRegister()); |
5148 Register reg = ToRegister(input); | 5155 Register reg = ToRegister(input); |
5149 | 5156 |
5150 __ ldr(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); | 5157 __ ldr(map_reg, FieldMemOperand(reg, HeapObject::kMapOffset)); |
5151 | 5158 |
5152 DeferredCheckMaps* deferred = NULL; | 5159 DeferredCheckMaps* deferred = NULL; |
5153 if (instr->hydrogen()->has_migration_target()) { | 5160 if (instr->hydrogen()->HasMigrationTarget()) { |
5154 deferred = new(zone()) DeferredCheckMaps(this, instr, reg); | 5161 deferred = new(zone()) DeferredCheckMaps(this, instr, reg); |
5155 __ bind(deferred->check_maps()); | 5162 __ bind(deferred->check_maps()); |
5156 } | 5163 } |
5157 | 5164 |
5158 const UniqueSet<Map>* maps = instr->hydrogen()->maps(); | 5165 const UniqueSet<Map>* maps = instr->hydrogen()->maps(); |
5159 Label success; | 5166 Label success; |
5160 for (int i = 0; i < maps->size() - 1; i++) { | 5167 for (int i = 0; i < maps->size() - 1; i++) { |
5161 Handle<Map> map = maps->at(i).handle(); | 5168 Handle<Map> map = maps->at(i).handle(); |
5162 __ CompareMap(map_reg, map, &success); | 5169 __ CompareMap(map_reg, map, &success); |
5163 __ b(eq, &success); | 5170 __ b(eq, &success); |
5164 } | 5171 } |
5165 | 5172 |
5166 Handle<Map> map = maps->at(maps->size() - 1).handle(); | 5173 Handle<Map> map = maps->at(maps->size() - 1).handle(); |
5167 __ CompareMap(map_reg, map, &success); | 5174 __ CompareMap(map_reg, map, &success); |
5168 if (instr->hydrogen()->has_migration_target()) { | 5175 if (instr->hydrogen()->HasMigrationTarget()) { |
5169 __ b(ne, deferred->entry()); | 5176 __ b(ne, deferred->entry()); |
5170 } else { | 5177 } else { |
5171 DeoptimizeIf(ne, instr->environment()); | 5178 DeoptimizeIf(ne, instr->environment()); |
5172 } | 5179 } |
5173 | 5180 |
5174 __ bind(&success); | 5181 __ bind(&success); |
5175 } | 5182 } |
5176 | 5183 |
5177 | 5184 |
5178 void LCodeGen::DoClampDToUint8(LClampDToUint8* instr) { | 5185 void LCodeGen::DoClampDToUint8(LClampDToUint8* instr) { |
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5830 __ ldr(result, FieldMemOperand(scratch, | 5837 __ ldr(result, FieldMemOperand(scratch, |
5831 FixedArray::kHeaderSize - kPointerSize)); | 5838 FixedArray::kHeaderSize - kPointerSize)); |
5832 __ bind(deferred->exit()); | 5839 __ bind(deferred->exit()); |
5833 __ bind(&done); | 5840 __ bind(&done); |
5834 } | 5841 } |
5835 | 5842 |
5836 | 5843 |
5837 #undef __ | 5844 #undef __ |
5838 | 5845 |
5839 } } // namespace v8::internal | 5846 } } // namespace v8::internal |
OLD | NEW |