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 "src/code-stubs.h" | 5 #include "src/code-stubs.h" |
6 | 6 |
7 #include <sstream> | 7 #include <sstream> |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 UNREACHABLE(); | 366 UNREACHABLE(); |
367 return ::v8::internal::UNINITIALIZED; | 367 return ::v8::internal::UNINITIALIZED; |
368 } | 368 } |
369 | 369 |
370 | 370 |
371 Condition CompareICStub::GetCondition() const { | 371 Condition CompareICStub::GetCondition() const { |
372 return CompareIC::ComputeCondition(op()); | 372 return CompareIC::ComputeCondition(op()); |
373 } | 373 } |
374 | 374 |
375 | 375 |
376 void CompareICStub::AddToSpecialCache(Handle<Code> new_object) { | |
377 DCHECK(*known_map_ != NULL); | |
378 Isolate* isolate = new_object->GetIsolate(); | |
379 Factory* factory = isolate->factory(); | |
380 return Map::UpdateCodeCache(known_map_, | |
381 strict() ? | |
382 factory->strict_compare_ic_string() : | |
383 factory->compare_ic_string(), | |
384 new_object); | |
385 } | |
386 | |
387 | |
388 bool CompareICStub::FindCodeInSpecialCache(Code** code_out) { | |
389 Code::Flags flags = Code::ComputeFlags( | |
390 GetCodeKind(), | |
391 UNINITIALIZED); | |
392 Name* name = strict() ? isolate()->heap()->strict_compare_ic_string() | |
393 : isolate()->heap()->compare_ic_string(); | |
394 Code* code = known_map_->LookupInCodeCache(name, flags); | |
395 if (code != nullptr) { | |
396 *code_out = code; | |
397 #ifdef DEBUG | |
398 CompareICStub decode((*code_out)->stub_key(), isolate()); | |
399 DCHECK(op() == decode.op()); | |
400 DCHECK(left() == decode.left()); | |
401 DCHECK(right() == decode.right()); | |
402 DCHECK(state() == decode.state()); | |
403 #endif | |
404 return true; | |
405 } | |
406 return false; | |
407 } | |
408 | |
409 | |
410 void CompareICStub::Generate(MacroAssembler* masm) { | 376 void CompareICStub::Generate(MacroAssembler* masm) { |
411 switch (state()) { | 377 switch (state()) { |
412 case CompareICState::UNINITIALIZED: | 378 case CompareICState::UNINITIALIZED: |
413 GenerateMiss(masm); | 379 GenerateMiss(masm); |
414 break; | 380 break; |
415 case CompareICState::BOOLEAN: | 381 case CompareICState::BOOLEAN: |
416 GenerateBooleans(masm); | 382 GenerateBooleans(masm); |
417 break; | 383 break; |
418 case CompareICState::SMI: | 384 case CompareICState::SMI: |
419 GenerateSmis(masm); | 385 GenerateSmis(masm); |
(...skipping 4358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4778 if (type->Is(Type::UntaggedPointer())) { | 4744 if (type->Is(Type::UntaggedPointer())) { |
4779 return Representation::External(); | 4745 return Representation::External(); |
4780 } | 4746 } |
4781 | 4747 |
4782 DCHECK(!type->Is(Type::Untagged())); | 4748 DCHECK(!type->Is(Type::Untagged())); |
4783 return Representation::Tagged(); | 4749 return Representation::Tagged(); |
4784 } | 4750 } |
4785 | 4751 |
4786 } // namespace internal | 4752 } // namespace internal |
4787 } // namespace v8 | 4753 } // namespace v8 |
OLD | NEW |