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/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/codegen.h" | 8 #include "src/codegen.h" |
9 #include "src/cpu-profiler.h" | 9 #include "src/cpu-profiler.h" |
10 #include "src/deoptimizer.h" | 10 #include "src/deoptimizer.h" |
(...skipping 2591 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2602 | 2602 |
2603 int TranslatedValue::GetChildrenCount() const { | 2603 int TranslatedValue::GetChildrenCount() const { |
2604 if (kind() == kCapturedObject || kind() == kArgumentsObject) { | 2604 if (kind() == kCapturedObject || kind() == kArgumentsObject) { |
2605 return object_length(); | 2605 return object_length(); |
2606 } else { | 2606 } else { |
2607 return 0; | 2607 return 0; |
2608 } | 2608 } |
2609 } | 2609 } |
2610 | 2610 |
2611 | 2611 |
2612 int TranslatedState::SlotOffsetFp(int slot_index) { | |
2613 if (slot_index >= 0) { | |
2614 const int offset = StandardFrameConstants::kExpressionsOffset; | |
2615 return offset - (slot_index * kPointerSize); | |
2616 } else { | |
2617 const int offset = StandardFrameConstants::kCallerSPOffset; | |
2618 return offset - ((slot_index + 1) * kPointerSize); | |
2619 } | |
2620 } | |
2621 | |
2622 | |
2623 Address TranslatedState::SlotAddress(Address fp, int slot_index) { | |
2624 return fp + SlotOffsetFp(slot_index); | |
2625 } | |
2626 | |
2627 | |
2628 uint32_t TranslatedState::GetUInt32Slot(Address fp, int slot_offset) { | 2612 uint32_t TranslatedState::GetUInt32Slot(Address fp, int slot_offset) { |
2629 Address address = fp + slot_offset; | 2613 Address address = fp + slot_offset; |
2630 #if V8_TARGET_BIG_ENDIAN && V8_HOST_ARCH_64_BIT | 2614 #if V8_TARGET_BIG_ENDIAN && V8_HOST_ARCH_64_BIT |
2631 return Memory::uint32_at(address + kIntSize); | 2615 return Memory::uint32_at(address + kIntSize); |
2632 #else | 2616 #else |
2633 return Memory::uint32_at(address); | 2617 return Memory::uint32_at(address); |
2634 #endif | 2618 #endif |
2635 } | 2619 } |
2636 | 2620 |
2637 | 2621 |
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2940 if (registers == nullptr) return TranslatedValue::NewInvalid(this); | 2924 if (registers == nullptr) return TranslatedValue::NewInvalid(this); |
2941 double value = registers->GetDoubleRegister(input_reg); | 2925 double value = registers->GetDoubleRegister(input_reg); |
2942 if (trace_file != nullptr) { | 2926 if (trace_file != nullptr) { |
2943 PrintF(trace_file, "%e ; %s (bool)", value, | 2927 PrintF(trace_file, "%e ; %s (bool)", value, |
2944 DoubleRegister::AllocationIndexToString(input_reg)); | 2928 DoubleRegister::AllocationIndexToString(input_reg)); |
2945 } | 2929 } |
2946 return TranslatedValue::NewDouble(this, value); | 2930 return TranslatedValue::NewDouble(this, value); |
2947 } | 2931 } |
2948 | 2932 |
2949 case Translation::STACK_SLOT: { | 2933 case Translation::STACK_SLOT: { |
2950 int slot_offset = SlotOffsetFp(iterator->Next()); | 2934 int slot_offset = |
| 2935 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
2951 intptr_t value = *(reinterpret_cast<intptr_t*>(fp + slot_offset)); | 2936 intptr_t value = *(reinterpret_cast<intptr_t*>(fp + slot_offset)); |
2952 if (trace_file != nullptr) { | 2937 if (trace_file != nullptr) { |
2953 PrintF(trace_file, "0x%08" V8PRIxPTR " ; [fp %c %d] ", value, | 2938 PrintF(trace_file, "0x%08" V8PRIxPTR " ; [fp %c %d] ", value, |
2954 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); | 2939 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); |
2955 reinterpret_cast<Object*>(value)->ShortPrint(trace_file); | 2940 reinterpret_cast<Object*>(value)->ShortPrint(trace_file); |
2956 } | 2941 } |
2957 return TranslatedValue::NewTagged(this, reinterpret_cast<Object*>(value)); | 2942 return TranslatedValue::NewTagged(this, reinterpret_cast<Object*>(value)); |
2958 } | 2943 } |
2959 | 2944 |
2960 case Translation::INT32_STACK_SLOT: { | 2945 case Translation::INT32_STACK_SLOT: { |
2961 int slot_offset = SlotOffsetFp(iterator->Next()); | 2946 int slot_offset = |
| 2947 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
2962 uint32_t value = GetUInt32Slot(fp, slot_offset); | 2948 uint32_t value = GetUInt32Slot(fp, slot_offset); |
2963 if (trace_file != nullptr) { | 2949 if (trace_file != nullptr) { |
2964 PrintF(trace_file, "%d ; (int) [fp %c %d] ", | 2950 PrintF(trace_file, "%d ; (int) [fp %c %d] ", |
2965 static_cast<int32_t>(value), slot_offset < 0 ? '-' : '+', | 2951 static_cast<int32_t>(value), slot_offset < 0 ? '-' : '+', |
2966 std::abs(slot_offset)); | 2952 std::abs(slot_offset)); |
2967 } | 2953 } |
2968 return TranslatedValue::NewInt32(this, value); | 2954 return TranslatedValue::NewInt32(this, value); |
2969 } | 2955 } |
2970 | 2956 |
2971 case Translation::UINT32_STACK_SLOT: { | 2957 case Translation::UINT32_STACK_SLOT: { |
2972 int slot_offset = SlotOffsetFp(iterator->Next()); | 2958 int slot_offset = |
| 2959 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
2973 uint32_t value = GetUInt32Slot(fp, slot_offset); | 2960 uint32_t value = GetUInt32Slot(fp, slot_offset); |
2974 if (trace_file != nullptr) { | 2961 if (trace_file != nullptr) { |
2975 PrintF(trace_file, "%u ; (uint) [fp %c %d] ", value, | 2962 PrintF(trace_file, "%u ; (uint) [fp %c %d] ", value, |
2976 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); | 2963 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); |
2977 } | 2964 } |
2978 return TranslatedValue::NewUInt32(this, value); | 2965 return TranslatedValue::NewUInt32(this, value); |
2979 } | 2966 } |
2980 | 2967 |
2981 case Translation::BOOL_STACK_SLOT: { | 2968 case Translation::BOOL_STACK_SLOT: { |
2982 int slot_offset = SlotOffsetFp(iterator->Next()); | 2969 int slot_offset = |
| 2970 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
2983 uint32_t value = GetUInt32Slot(fp, slot_offset); | 2971 uint32_t value = GetUInt32Slot(fp, slot_offset); |
2984 if (trace_file != nullptr) { | 2972 if (trace_file != nullptr) { |
2985 PrintF(trace_file, "%u ; (bool) [fp %c %d] ", value, | 2973 PrintF(trace_file, "%u ; (bool) [fp %c %d] ", value, |
2986 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); | 2974 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); |
2987 } | 2975 } |
2988 return TranslatedValue::NewBool(this, value); | 2976 return TranslatedValue::NewBool(this, value); |
2989 } | 2977 } |
2990 | 2978 |
2991 case Translation::DOUBLE_STACK_SLOT: { | 2979 case Translation::DOUBLE_STACK_SLOT: { |
2992 int slot_offset = SlotOffsetFp(iterator->Next()); | 2980 int slot_offset = |
| 2981 OptimizedFrame::StackSlotOffsetRelativeToFp(iterator->Next()); |
2993 double value = ReadDoubleValue(fp + slot_offset); | 2982 double value = ReadDoubleValue(fp + slot_offset); |
2994 if (trace_file != nullptr) { | 2983 if (trace_file != nullptr) { |
2995 PrintF(trace_file, "%e ; (double) [fp %c %d] ", value, | 2984 PrintF(trace_file, "%e ; (double) [fp %c %d] ", value, |
2996 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); | 2985 slot_offset < 0 ? '-' : '+', std::abs(slot_offset)); |
2997 } | 2986 } |
2998 return TranslatedValue::NewDouble(this, value); | 2987 return TranslatedValue::NewDouble(this, value); |
2999 } | 2988 } |
3000 | 2989 |
3001 case Translation::LITERAL: { | 2990 case Translation::LITERAL: { |
3002 int literal_index = iterator->Next(); | 2991 int literal_index = iterator->Next(); |
(...skipping 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3423 DCHECK(value_info->IsMaterializedObject()); | 3412 DCHECK(value_info->IsMaterializedObject()); |
3424 | 3413 |
3425 value_info->value_ = | 3414 value_info->value_ = |
3426 Handle<Object>(previously_materialized_objects->get(i), isolate_); | 3415 Handle<Object>(previously_materialized_objects->get(i), isolate_); |
3427 } | 3416 } |
3428 } | 3417 } |
3429 } | 3418 } |
3430 | 3419 |
3431 } // namespace internal | 3420 } // namespace internal |
3432 } // namespace v8 | 3421 } // namespace v8 |
OLD | NEW |