| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 5569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5580 __ movzx_b(temp, FieldOperand(temp, Map::kInstanceTypeOffset)); | 5580 __ movzx_b(temp, FieldOperand(temp, Map::kInstanceTypeOffset)); |
| 5581 __ and_(temp, mask); | 5581 __ and_(temp, mask); |
| 5582 __ cmp(temp, tag); | 5582 __ cmp(temp, tag); |
| 5583 DeoptimizeIf(not_equal, instr->environment()); | 5583 DeoptimizeIf(not_equal, instr->environment()); |
| 5584 } | 5584 } |
| 5585 } | 5585 } |
| 5586 } | 5586 } |
| 5587 | 5587 |
| 5588 | 5588 |
| 5589 void LCodeGen::DoCheckValue(LCheckValue* instr) { | 5589 void LCodeGen::DoCheckValue(LCheckValue* instr) { |
| 5590 Handle<HeapObject> object = instr->hydrogen()->object(); | 5590 Handle<HeapObject> object = instr->hydrogen()->object().handle(); |
| 5591 if (instr->hydrogen()->object_in_new_space()) { | 5591 if (instr->hydrogen()->object_in_new_space()) { |
| 5592 Register reg = ToRegister(instr->value()); | 5592 Register reg = ToRegister(instr->value()); |
| 5593 Handle<Cell> cell = isolate()->factory()->NewCell(object); | 5593 Handle<Cell> cell = isolate()->factory()->NewCell(object); |
| 5594 __ cmp(reg, Operand::ForCell(cell)); | 5594 __ cmp(reg, Operand::ForCell(cell)); |
| 5595 } else { | 5595 } else { |
| 5596 Operand operand = ToOperand(instr->value()); | 5596 Operand operand = ToOperand(instr->value()); |
| 5597 __ cmp(operand, object); | 5597 __ cmp(operand, object); |
| 5598 } | 5598 } |
| 5599 DeoptimizeIf(not_equal, instr->environment()); | 5599 DeoptimizeIf(not_equal, instr->environment()); |
| 5600 } | 5600 } |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5635 Label check_maps_; | 5635 Label check_maps_; |
| 5636 Register object_; | 5636 Register object_; |
| 5637 }; | 5637 }; |
| 5638 | 5638 |
| 5639 if (instr->hydrogen()->CanOmitMapChecks()) return; | 5639 if (instr->hydrogen()->CanOmitMapChecks()) return; |
| 5640 | 5640 |
| 5641 LOperand* input = instr->value(); | 5641 LOperand* input = instr->value(); |
| 5642 ASSERT(input->IsRegister()); | 5642 ASSERT(input->IsRegister()); |
| 5643 Register reg = ToRegister(input); | 5643 Register reg = ToRegister(input); |
| 5644 | 5644 |
| 5645 SmallMapList* map_set = instr->hydrogen()->map_set(); | |
| 5646 | |
| 5647 DeferredCheckMaps* deferred = NULL; | 5645 DeferredCheckMaps* deferred = NULL; |
| 5648 if (instr->hydrogen()->has_migration_target()) { | 5646 if (instr->hydrogen()->has_migration_target()) { |
| 5649 deferred = new(zone()) DeferredCheckMaps(this, instr, reg, x87_stack_); | 5647 deferred = new(zone()) DeferredCheckMaps(this, instr, reg, x87_stack_); |
| 5650 __ bind(deferred->check_maps()); | 5648 __ bind(deferred->check_maps()); |
| 5651 } | 5649 } |
| 5652 | 5650 |
| 5651 UniqueSet<Map> map_set = instr->hydrogen()->map_set(); |
| 5653 Label success; | 5652 Label success; |
| 5654 for (int i = 0; i < map_set->length() - 1; i++) { | 5653 for (int i = 0; i < map_set.size() - 1; i++) { |
| 5655 Handle<Map> map = map_set->at(i); | 5654 Handle<Map> map = map_set.at(i).handle(); |
| 5656 __ CompareMap(reg, map, &success); | 5655 __ CompareMap(reg, map, &success); |
| 5657 __ j(equal, &success); | 5656 __ j(equal, &success); |
| 5658 } | 5657 } |
| 5659 | 5658 |
| 5660 Handle<Map> map = map_set->last(); | 5659 Handle<Map> map = map_set.at(map_set.size() - 1).handle(); |
| 5661 __ CompareMap(reg, map, &success); | 5660 __ CompareMap(reg, map, &success); |
| 5662 if (instr->hydrogen()->has_migration_target()) { | 5661 if (instr->hydrogen()->has_migration_target()) { |
| 5663 __ j(not_equal, deferred->entry()); | 5662 __ j(not_equal, deferred->entry()); |
| 5664 } else { | 5663 } else { |
| 5665 DeoptimizeIf(not_equal, instr->environment()); | 5664 DeoptimizeIf(not_equal, instr->environment()); |
| 5666 } | 5665 } |
| 5667 | 5666 |
| 5668 __ bind(&success); | 5667 __ bind(&success); |
| 5669 } | 5668 } |
| 5670 | 5669 |
| (...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6350 FixedArray::kHeaderSize - kPointerSize)); | 6349 FixedArray::kHeaderSize - kPointerSize)); |
| 6351 __ bind(&done); | 6350 __ bind(&done); |
| 6352 } | 6351 } |
| 6353 | 6352 |
| 6354 | 6353 |
| 6355 #undef __ | 6354 #undef __ |
| 6356 | 6355 |
| 6357 } } // namespace v8::internal | 6356 } } // namespace v8::internal |
| 6358 | 6357 |
| 6359 #endif // V8_TARGET_ARCH_IA32 | 6358 #endif // V8_TARGET_ARCH_IA32 |
| OLD | NEW |