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 8763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8774 RelocInfo* info = it.rinfo(); | 8774 RelocInfo* info = it.rinfo(); |
8775 Code* target(Code::GetCodeFromTargetAddress(info->target_address())); | 8775 Code* target(Code::GetCodeFromTargetAddress(info->target_address())); |
8776 if (target->is_inline_cache_stub()) { | 8776 if (target->is_inline_cache_stub()) { |
8777 IC::Clear(info->pc()); | 8777 IC::Clear(info->pc()); |
8778 } | 8778 } |
8779 } | 8779 } |
8780 } | 8780 } |
8781 | 8781 |
8782 | 8782 |
8783 void Code::ClearTypeFeedbackCells(Heap* heap) { | 8783 void Code::ClearTypeFeedbackCells(Heap* heap) { |
| 8784 if (kind() != FUNCTION) return; |
8784 Object* raw_info = type_feedback_info(); | 8785 Object* raw_info = type_feedback_info(); |
8785 if (raw_info->IsTypeFeedbackInfo()) { | 8786 if (raw_info->IsTypeFeedbackInfo()) { |
8786 TypeFeedbackCells* type_feedback_cells = | 8787 TypeFeedbackCells* type_feedback_cells = |
8787 TypeFeedbackInfo::cast(raw_info)->type_feedback_cells(); | 8788 TypeFeedbackInfo::cast(raw_info)->type_feedback_cells(); |
8788 for (int i = 0; i < type_feedback_cells->CellCount(); i++) { | 8789 for (int i = 0; i < type_feedback_cells->CellCount(); i++) { |
8789 JSGlobalPropertyCell* cell = type_feedback_cells->Cell(i); | 8790 JSGlobalPropertyCell* cell = type_feedback_cells->Cell(i); |
8790 cell->set_value(TypeFeedbackCells::RawUninitializedSentinel(heap)); | 8791 cell->set_value(TypeFeedbackCells::RawUninitializedSentinel(heap)); |
8791 } | 8792 } |
8792 } | 8793 } |
8793 } | 8794 } |
8794 | 8795 |
8795 | 8796 |
8796 bool Code::allowed_in_shared_map_code_cache() { | 8797 bool Code::allowed_in_shared_map_code_cache() { |
8797 return is_keyed_load_stub() || is_keyed_store_stub() || | 8798 return is_keyed_load_stub() || is_keyed_store_stub() || |
8798 (is_compare_ic_stub() && compare_state() == CompareIC::KNOWN_OBJECTS); | 8799 (is_compare_ic_stub() && |
| 8800 ICCompareStub::CompareState(stub_info()) == CompareIC::KNOWN_OBJECTS); |
8799 } | 8801 } |
8800 | 8802 |
8801 | 8803 |
8802 void Code::MakeCodeAgeSequenceYoung(byte* sequence) { | 8804 void Code::MakeCodeAgeSequenceYoung(byte* sequence) { |
8803 PatchPlatformCodeAge(sequence, kNoAge, NO_MARKING_PARITY); | 8805 PatchPlatformCodeAge(sequence, kNoAge, NO_MARKING_PARITY); |
8804 } | 8806 } |
8805 | 8807 |
8806 | 8808 |
8807 void Code::MakeYoung() { | 8809 void Code::MakeYoung() { |
8808 byte* sequence = FindCodeAgeSequence(); | 8810 byte* sequence = FindCodeAgeSequence(); |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9143 if (is_inline_cache_stub()) { | 9145 if (is_inline_cache_stub()) { |
9144 PrintF(out, "ic_state = %s\n", ICState2String(ic_state())); | 9146 PrintF(out, "ic_state = %s\n", ICState2String(ic_state())); |
9145 PrintExtraICState(out, kind(), extra_ic_state()); | 9147 PrintExtraICState(out, kind(), extra_ic_state()); |
9146 if (ic_state() == MONOMORPHIC) { | 9148 if (ic_state() == MONOMORPHIC) { |
9147 PrintF(out, "type = %s\n", StubType2String(type())); | 9149 PrintF(out, "type = %s\n", StubType2String(type())); |
9148 } | 9150 } |
9149 if (is_call_stub() || is_keyed_call_stub()) { | 9151 if (is_call_stub() || is_keyed_call_stub()) { |
9150 PrintF(out, "argc = %d\n", arguments_count()); | 9152 PrintF(out, "argc = %d\n", arguments_count()); |
9151 } | 9153 } |
9152 if (is_compare_ic_stub()) { | 9154 if (is_compare_ic_stub()) { |
9153 CompareIC::State state = CompareIC::ComputeState(this); | 9155 ASSERT(major_key() == CodeStub::CompareIC); |
9154 PrintF(out, "compare_state = %s\n", CompareIC::GetStateName(state)); | 9156 CompareIC::State left_state, right_state, handler_state; |
9155 } | 9157 Token::Value op; |
9156 if (is_compare_ic_stub() && major_key() == CodeStub::CompareIC) { | 9158 ICCompareStub::DecodeMinorKey(stub_info(), &left_state, &right_state, |
9157 Token::Value op = CompareIC::ComputeOperation(this); | 9159 &handler_state, &op); |
| 9160 PrintF(out, "compare_state = %s*%s -> %s\n", |
| 9161 CompareIC::GetStateName(left_state), |
| 9162 CompareIC::GetStateName(right_state), |
| 9163 CompareIC::GetStateName(handler_state)); |
9158 PrintF(out, "compare_operation = %s\n", Token::Name(op)); | 9164 PrintF(out, "compare_operation = %s\n", Token::Name(op)); |
9159 } | 9165 } |
9160 } | 9166 } |
9161 if ((name != NULL) && (name[0] != '\0')) { | 9167 if ((name != NULL) && (name[0] != '\0')) { |
9162 PrintF(out, "name = %s\n", name); | 9168 PrintF(out, "name = %s\n", name); |
9163 } | 9169 } |
9164 if (kind() == OPTIMIZED_FUNCTION) { | 9170 if (kind() == OPTIMIZED_FUNCTION) { |
9165 PrintF(out, "stack_slots = %d\n", stack_slots()); | 9171 PrintF(out, "stack_slots = %d\n", stack_slots()); |
9166 } | 9172 } |
9167 | 9173 |
(...skipping 25 matching lines...) Expand all Loading... |
9193 PrintF(out, " %6d", entry.deoptimization_index()); | 9199 PrintF(out, " %6d", entry.deoptimization_index()); |
9194 } else { | 9200 } else { |
9195 PrintF(out, " <none>"); | 9201 PrintF(out, " <none>"); |
9196 } | 9202 } |
9197 if (entry.argument_count() > 0) { | 9203 if (entry.argument_count() > 0) { |
9198 PrintF(out, " argc: %d", entry.argument_count()); | 9204 PrintF(out, " argc: %d", entry.argument_count()); |
9199 } | 9205 } |
9200 PrintF(out, "\n"); | 9206 PrintF(out, "\n"); |
9201 } | 9207 } |
9202 PrintF(out, "\n"); | 9208 PrintF(out, "\n"); |
9203 // Just print if type feedback info is ever used for optimized code. | |
9204 ASSERT(type_feedback_info()->IsUndefined()); | |
9205 } else if (kind() == FUNCTION) { | 9209 } else if (kind() == FUNCTION) { |
9206 unsigned offset = stack_check_table_offset(); | 9210 unsigned offset = stack_check_table_offset(); |
9207 // If there is no stack check table, the "table start" will at or after | 9211 // If there is no stack check table, the "table start" will at or after |
9208 // (due to alignment) the end of the instruction stream. | 9212 // (due to alignment) the end of the instruction stream. |
9209 if (static_cast<int>(offset) < instruction_size()) { | 9213 if (static_cast<int>(offset) < instruction_size()) { |
9210 unsigned* address = | 9214 unsigned* address = |
9211 reinterpret_cast<unsigned*>(instruction_start() + offset); | 9215 reinterpret_cast<unsigned*>(instruction_start() + offset); |
9212 unsigned length = address[0]; | 9216 unsigned length = address[0]; |
9213 PrintF(out, "Stack checks (size = %u)\n", length); | 9217 PrintF(out, "Stack checks (size = %u)\n", length); |
9214 PrintF(out, "ast_id pc_offset\n"); | 9218 PrintF(out, "ast_id pc_offset\n"); |
(...skipping 4648 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
13863 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); | 13867 set_year(Smi::FromInt(year), SKIP_WRITE_BARRIER); |
13864 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); | 13868 set_month(Smi::FromInt(month), SKIP_WRITE_BARRIER); |
13865 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); | 13869 set_day(Smi::FromInt(day), SKIP_WRITE_BARRIER); |
13866 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); | 13870 set_weekday(Smi::FromInt(weekday), SKIP_WRITE_BARRIER); |
13867 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); | 13871 set_hour(Smi::FromInt(hour), SKIP_WRITE_BARRIER); |
13868 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); | 13872 set_min(Smi::FromInt(min), SKIP_WRITE_BARRIER); |
13869 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); | 13873 set_sec(Smi::FromInt(sec), SKIP_WRITE_BARRIER); |
13870 } | 13874 } |
13871 | 13875 |
13872 } } // namespace v8::internal | 13876 } } // namespace v8::internal |
OLD | NEW |