OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 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/deoptimizer.h" | 5 #include "src/deoptimizer.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/ast/prettyprinter.h" | 8 #include "src/ast/prettyprinter.h" |
9 #include "src/codegen.h" | 9 #include "src/codegen.h" |
10 #include "src/disasm.h" | 10 #include "src/disasm.h" |
(...skipping 2342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2353 int args_index, | 2353 int args_index, |
2354 int args_length) { | 2354 int args_length) { |
2355 buffer_->Add(ARGUMENTS_OBJECT, zone()); | 2355 buffer_->Add(ARGUMENTS_OBJECT, zone()); |
2356 buffer_->Add(args_known, zone()); | 2356 buffer_->Add(args_known, zone()); |
2357 buffer_->Add(args_index, zone()); | 2357 buffer_->Add(args_index, zone()); |
2358 buffer_->Add(args_length, zone()); | 2358 buffer_->Add(args_length, zone()); |
2359 } | 2359 } |
2360 | 2360 |
2361 | 2361 |
2362 void Translation::StoreJSFrameFunction() { | 2362 void Translation::StoreJSFrameFunction() { |
2363 buffer_->Add(JS_FRAME_FUNCTION, zone()); | 2363 StoreStackSlot((StandardFrameConstants::kCallerPCOffset - |
| 2364 StandardFrameConstants::kMarkerOffset) / |
| 2365 kPointerSize); |
2364 } | 2366 } |
2365 | 2367 |
2366 | |
2367 int Translation::NumberOfOperandsFor(Opcode opcode) { | 2368 int Translation::NumberOfOperandsFor(Opcode opcode) { |
2368 switch (opcode) { | 2369 switch (opcode) { |
2369 case JS_FRAME_FUNCTION: | |
2370 return 0; | |
2371 case GETTER_STUB_FRAME: | 2370 case GETTER_STUB_FRAME: |
2372 case SETTER_STUB_FRAME: | 2371 case SETTER_STUB_FRAME: |
2373 case DUPLICATED_OBJECT: | 2372 case DUPLICATED_OBJECT: |
2374 case ARGUMENTS_OBJECT: | 2373 case ARGUMENTS_OBJECT: |
2375 case CAPTURED_OBJECT: | 2374 case CAPTURED_OBJECT: |
2376 case REGISTER: | 2375 case REGISTER: |
2377 case INT32_REGISTER: | 2376 case INT32_REGISTER: |
2378 case UINT32_REGISTER: | 2377 case UINT32_REGISTER: |
2379 case BOOL_REGISTER: | 2378 case BOOL_REGISTER: |
2380 case DOUBLE_REGISTER: | 2379 case DOUBLE_REGISTER: |
(...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3053 case Translation::INT32_REGISTER: | 3052 case Translation::INT32_REGISTER: |
3054 case Translation::UINT32_REGISTER: | 3053 case Translation::UINT32_REGISTER: |
3055 case Translation::BOOL_REGISTER: | 3054 case Translation::BOOL_REGISTER: |
3056 case Translation::DOUBLE_REGISTER: | 3055 case Translation::DOUBLE_REGISTER: |
3057 case Translation::STACK_SLOT: | 3056 case Translation::STACK_SLOT: |
3058 case Translation::INT32_STACK_SLOT: | 3057 case Translation::INT32_STACK_SLOT: |
3059 case Translation::UINT32_STACK_SLOT: | 3058 case Translation::UINT32_STACK_SLOT: |
3060 case Translation::BOOL_STACK_SLOT: | 3059 case Translation::BOOL_STACK_SLOT: |
3061 case Translation::DOUBLE_STACK_SLOT: | 3060 case Translation::DOUBLE_STACK_SLOT: |
3062 case Translation::LITERAL: | 3061 case Translation::LITERAL: |
3063 case Translation::JS_FRAME_FUNCTION: | |
3064 break; | 3062 break; |
3065 } | 3063 } |
3066 FATAL("We should never get here - unexpected deopt info."); | 3064 FATAL("We should never get here - unexpected deopt info."); |
3067 return TranslatedFrame::InvalidFrame(); | 3065 return TranslatedFrame::InvalidFrame(); |
3068 } | 3066 } |
3069 | 3067 |
3070 | 3068 |
3071 // static | 3069 // static |
3072 void TranslatedFrame::AdvanceIterator( | 3070 void TranslatedFrame::AdvanceIterator( |
3073 std::deque<TranslatedValue>::iterator* iter) { | 3071 std::deque<TranslatedValue>::iterator* iter) { |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3256 int literal_index = iterator->Next(); | 3254 int literal_index = iterator->Next(); |
3257 Object* value = literal_array->get(literal_index); | 3255 Object* value = literal_array->get(literal_index); |
3258 if (trace_file != nullptr) { | 3256 if (trace_file != nullptr) { |
3259 PrintF(trace_file, "0x%08" V8PRIxPTR " ; (literal %d) ", | 3257 PrintF(trace_file, "0x%08" V8PRIxPTR " ; (literal %d) ", |
3260 reinterpret_cast<intptr_t>(value), literal_index); | 3258 reinterpret_cast<intptr_t>(value), literal_index); |
3261 reinterpret_cast<Object*>(value)->ShortPrint(trace_file); | 3259 reinterpret_cast<Object*>(value)->ShortPrint(trace_file); |
3262 } | 3260 } |
3263 | 3261 |
3264 return TranslatedValue::NewTagged(this, value); | 3262 return TranslatedValue::NewTagged(this, value); |
3265 } | 3263 } |
3266 | |
3267 case Translation::JS_FRAME_FUNCTION: { | |
3268 int slot_offset = JavaScriptFrameConstants::kFunctionOffset; | |
3269 intptr_t value = *(reinterpret_cast<intptr_t*>(fp + slot_offset)); | |
3270 if (trace_file != nullptr) { | |
3271 PrintF(trace_file, "0x%08" V8PRIxPTR " ; (frame function) ", value); | |
3272 reinterpret_cast<Object*>(value)->ShortPrint(trace_file); | |
3273 } | |
3274 return TranslatedValue::NewTagged(this, reinterpret_cast<Object*>(value)); | |
3275 } | |
3276 } | 3264 } |
3277 | 3265 |
3278 FATAL("We should never get here - unexpected deopt info."); | 3266 FATAL("We should never get here - unexpected deopt info."); |
3279 return TranslatedValue(nullptr, TranslatedValue::kInvalid); | 3267 return TranslatedValue(nullptr, TranslatedValue::kInvalid); |
3280 } | 3268 } |
3281 | 3269 |
3282 | 3270 |
3283 TranslatedState::TranslatedState(JavaScriptFrame* frame) | 3271 TranslatedState::TranslatedState(JavaScriptFrame* frame) |
3284 : isolate_(nullptr), | 3272 : isolate_(nullptr), |
3285 stack_frame_pointer_(nullptr), | 3273 stack_frame_pointer_(nullptr), |
(...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3711 DCHECK(value_info->IsMaterializedObject()); | 3699 DCHECK(value_info->IsMaterializedObject()); |
3712 | 3700 |
3713 value_info->value_ = | 3701 value_info->value_ = |
3714 Handle<Object>(previously_materialized_objects->get(i), isolate_); | 3702 Handle<Object>(previously_materialized_objects->get(i), isolate_); |
3715 } | 3703 } |
3716 } | 3704 } |
3717 } | 3705 } |
3718 | 3706 |
3719 } // namespace internal | 3707 } // namespace internal |
3720 } // namespace v8 | 3708 } // namespace v8 |
OLD | NEW |