Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(191)

Side by Side Diff: src/deoptimizer.cc

Issue 88043002: Out-of-line constant pool on Arm: Stage 3 - Set Constant Pool Pointer on Function Entry (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Fix rebase error. Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 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 941 matching lines...) Expand 10 before | Expand all | Expand 10 after
952 if (is_topmost) output_frame->SetRegister(fp_reg.code(), fp_value); 952 if (is_topmost) output_frame->SetRegister(fp_reg.code(), fp_value);
953 if (trace_scope_ != NULL) { 953 if (trace_scope_ != NULL) {
954 PrintF(trace_scope_->file(), 954 PrintF(trace_scope_->file(),
955 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 955 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
956 V8PRIxPTR " ; caller's fp\n", 956 V8PRIxPTR " ; caller's fp\n",
957 fp_value, output_offset, value); 957 fp_value, output_offset, value);
958 } 958 }
959 ASSERT(!is_bottommost || !has_alignment_padding_ || 959 ASSERT(!is_bottommost || !has_alignment_padding_ ||
960 (fp_value & kPointerSize) != 0); 960 (fp_value & kPointerSize) != 0);
961 961
962 if (FLAG_enable_ool_constant_pool) {
963 // For the bottommost output frame the constant pool pointer can be gotten
964 // from the input frame. For subsequent output frames, it can be gotten from
965 // the function.
966 Register constant_pool_reg =
967 JavaScriptFrame::constant_pool_pointer_register();
968 output_offset -= kPointerSize;
969 input_offset -= kPointerSize;
970 if (is_bottommost) {
971 value = input_->GetFrameSlot(input_offset);
972 } else {
973 value = reinterpret_cast<intptr_t>(function->constant_pool());
974 }
975 output_frame->SetFrameSlot(output_offset, value);
976 output_frame->SetConstantPool(value);
977 if (is_topmost) output_frame->SetRegister(constant_pool_reg.code(), value);
978 if (trace_scope_) {
979 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
980 V8PRIxPTR "; constant_pool\n",
981 top_address + output_offset, output_offset, value);
982 }
983 }
984
962 // For the bottommost output frame the context can be gotten from the input 985 // For the bottommost output frame the context can be gotten from the input
963 // frame. For all subsequent output frames it can be gotten from the function 986 // frame. For all subsequent output frames it can be gotten from the function
964 // so long as we don't inline functions that need local contexts. 987 // so long as we don't inline functions that need local contexts.
965 Register context_reg = JavaScriptFrame::context_register(); 988 Register context_reg = JavaScriptFrame::context_register();
966 output_offset -= kPointerSize; 989 output_offset -= kPointerSize;
967 input_offset -= kPointerSize; 990 input_offset -= kPointerSize;
968 if (is_bottommost) { 991 if (is_bottommost) {
969 value = input_->GetFrameSlot(input_offset); 992 value = input_->GetFrameSlot(input_offset);
970 } else { 993 } else {
971 value = reinterpret_cast<intptr_t>(function->context()); 994 value = reinterpret_cast<intptr_t>(function->context());
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 output_frame->SetCallerFp(output_offset, value); 1110 output_frame->SetCallerFp(output_offset, value);
1088 intptr_t fp_value = top_address + output_offset; 1111 intptr_t fp_value = top_address + output_offset;
1089 output_frame->SetFp(fp_value); 1112 output_frame->SetFp(fp_value);
1090 if (trace_scope_ != NULL) { 1113 if (trace_scope_ != NULL) {
1091 PrintF(trace_scope_->file(), 1114 PrintF(trace_scope_->file(),
1092 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1115 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1093 V8PRIxPTR " ; caller's fp\n", 1116 V8PRIxPTR " ; caller's fp\n",
1094 fp_value, output_offset, value); 1117 fp_value, output_offset, value);
1095 } 1118 }
1096 1119
1120 if (FLAG_enable_ool_constant_pool) {
1121 // A marker value is used in place of the constant pool.
1122 output_offset -= kPointerSize;
1123 intptr_t constant_pool = reinterpret_cast<intptr_t>(
1124 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
1125 output_frame->SetFrameSlot(output_offset, constant_pool);
1126 if (trace_scope_) {
1127 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1128 V8PRIxPTR " ; constant_pool (adaptor sentinel)\n",
1129 top_address + output_offset, output_offset, constant_pool);
1130 }
1131 }
1132
1097 // A marker value is used in place of the context. 1133 // A marker value is used in place of the context.
1098 output_offset -= kPointerSize; 1134 output_offset -= kPointerSize;
1099 intptr_t context = reinterpret_cast<intptr_t>( 1135 intptr_t context = reinterpret_cast<intptr_t>(
1100 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); 1136 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR));
1101 output_frame->SetFrameSlot(output_offset, context); 1137 output_frame->SetFrameSlot(output_offset, context);
1102 if (trace_scope_ != NULL) { 1138 if (trace_scope_ != NULL) {
1103 PrintF(trace_scope_->file(), 1139 PrintF(trace_scope_->file(),
1104 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1140 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1105 V8PRIxPTR " ; context (adaptor sentinel)\n", 1141 V8PRIxPTR " ; context (adaptor sentinel)\n",
1106 top_address + output_offset, output_offset, context); 1142 top_address + output_offset, output_offset, context);
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1204 output_frame->SetCallerFp(output_offset, value); 1240 output_frame->SetCallerFp(output_offset, value);
1205 intptr_t fp_value = top_address + output_offset; 1241 intptr_t fp_value = top_address + output_offset;
1206 output_frame->SetFp(fp_value); 1242 output_frame->SetFp(fp_value);
1207 if (trace_scope_ != NULL) { 1243 if (trace_scope_ != NULL) {
1208 PrintF(trace_scope_->file(), 1244 PrintF(trace_scope_->file(),
1209 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1245 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1210 V8PRIxPTR " ; caller's fp\n", 1246 V8PRIxPTR " ; caller's fp\n",
1211 fp_value, output_offset, value); 1247 fp_value, output_offset, value);
1212 } 1248 }
1213 1249
1250 if (FLAG_enable_ool_constant_pool) {
1251 // The constant pool pointer can be gotten from the previous frame.
1252 output_offset -= kPointerSize;
1253 value = output_[frame_index - 1]->GetConstantPool();
1254 output_frame->SetFrameSlot(output_offset, value);
1255 if (trace_scope_) {
1256 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1257 V8PRIxPTR " ; constant pool\n",
1258 top_address + output_offset, output_offset, value);
1259 }
1260 }
1261
1214 // The context can be gotten from the previous frame. 1262 // The context can be gotten from the previous frame.
1215 output_offset -= kPointerSize; 1263 output_offset -= kPointerSize;
1216 value = output_[frame_index - 1]->GetContext(); 1264 value = output_[frame_index - 1]->GetContext();
1217 output_frame->SetFrameSlot(output_offset, value); 1265 output_frame->SetFrameSlot(output_offset, value);
1218 if (trace_scope_ != NULL) { 1266 if (trace_scope_ != NULL) {
1219 PrintF(trace_scope_->file(), 1267 PrintF(trace_scope_->file(),
1220 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1268 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1221 V8PRIxPTR " ; context\n", 1269 V8PRIxPTR " ; context\n",
1222 top_address + output_offset, output_offset, value); 1270 top_address + output_offset, output_offset, value);
1223 } 1271 }
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
1299 // frame. This means that we have to use a height of 0. 1347 // frame. This means that we have to use a height of 0.
1300 unsigned height = 0; 1348 unsigned height = 0;
1301 unsigned height_in_bytes = height * kPointerSize; 1349 unsigned height_in_bytes = height * kPointerSize;
1302 const char* kind = is_setter_stub_frame ? "setter" : "getter"; 1350 const char* kind = is_setter_stub_frame ? "setter" : "getter";
1303 if (trace_scope_ != NULL) { 1351 if (trace_scope_ != NULL) {
1304 PrintF(trace_scope_->file(), 1352 PrintF(trace_scope_->file(),
1305 " translating %s stub => height=%u\n", kind, height_in_bytes); 1353 " translating %s stub => height=%u\n", kind, height_in_bytes);
1306 } 1354 }
1307 1355
1308 // We need 1 stack entry for the return address and enough entries for the 1356 // We need 1 stack entry for the return address and enough entries for the
1309 // StackFrame::INTERNAL (FP, context, frame type and code object - see 1357 // StackFrame::INTERNAL (FP, context, frame type, code object and constant
1310 // MacroAssembler::EnterFrame). For a setter stub frame we need one additional 1358 // pool (if FLAG_enable_ool_constant_pool)- see MacroAssembler::EnterFrame).
1311 // entry for the implicit return value, see 1359 // For a setter stub frame we need one additional entry for the implicit
1312 // StoreStubCompiler::CompileStoreViaSetter. 1360 // return value, see StoreStubCompiler::CompileStoreViaSetter.
1313 unsigned fixed_frame_entries = 1361 unsigned fixed_frame_entries =
1314 (StandardFrameConstants::kFixedFrameSize / kPointerSize) + 1 + 1362 (StandardFrameConstants::kFixedFrameSize / kPointerSize) + 1 +
1315 (is_setter_stub_frame ? 1 : 0); 1363 (is_setter_stub_frame ? 1 : 0);
1316 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize; 1364 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize;
1317 unsigned output_frame_size = height_in_bytes + fixed_frame_size; 1365 unsigned output_frame_size = height_in_bytes + fixed_frame_size;
1318 1366
1319 // Allocate and store the output frame description. 1367 // Allocate and store the output frame description.
1320 FrameDescription* output_frame = 1368 FrameDescription* output_frame =
1321 new(output_frame_size) FrameDescription(output_frame_size, accessor); 1369 new(output_frame_size) FrameDescription(output_frame_size, accessor);
1322 output_frame->SetFrameType(StackFrame::INTERNAL); 1370 output_frame->SetFrameType(StackFrame::INTERNAL);
(...skipping 27 matching lines...) Expand all
1350 output_frame->SetCallerFp(output_offset, value); 1398 output_frame->SetCallerFp(output_offset, value);
1351 intptr_t fp_value = top_address + output_offset; 1399 intptr_t fp_value = top_address + output_offset;
1352 output_frame->SetFp(fp_value); 1400 output_frame->SetFp(fp_value);
1353 if (trace_scope_ != NULL) { 1401 if (trace_scope_ != NULL) {
1354 PrintF(trace_scope_->file(), 1402 PrintF(trace_scope_->file(),
1355 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 1403 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
1356 " ; caller's fp\n", 1404 " ; caller's fp\n",
1357 fp_value, output_offset, value); 1405 fp_value, output_offset, value);
1358 } 1406 }
1359 1407
1408 if (FLAG_enable_ool_constant_pool) {
1409 // The constant pool pointer can be gotten from the previous frame.
1410 output_offset -= kPointerSize;
1411 value = output_[frame_index - 1]->GetConstantPool();
1412 output_frame->SetFrameSlot(output_offset, value);
1413 if (trace_scope_) {
1414 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1415 V8PRIxPTR " ; constant pool\n",
1416 top_address + output_offset, output_offset, value);
1417 }
1418 }
1419
1360 // The context can be gotten from the previous frame. 1420 // The context can be gotten from the previous frame.
1361 output_offset -= kPointerSize; 1421 output_offset -= kPointerSize;
1362 value = output_[frame_index - 1]->GetContext(); 1422 value = output_[frame_index - 1]->GetContext();
1363 output_frame->SetFrameSlot(output_offset, value); 1423 output_frame->SetFrameSlot(output_offset, value);
1364 if (trace_scope_ != NULL) { 1424 if (trace_scope_ != NULL) {
1365 PrintF(trace_scope_->file(), 1425 PrintF(trace_scope_->file(),
1366 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR 1426 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR
1367 " ; context\n", 1427 " ; context\n",
1368 top_address + output_offset, output_offset, value); 1428 top_address + output_offset, output_offset, value);
1369 } 1429 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1420 void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator, 1480 void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator,
1421 int frame_index) { 1481 int frame_index) {
1422 // 1482 //
1423 // FROM TO 1483 // FROM TO
1424 // | .... | | .... | 1484 // | .... | | .... |
1425 // +-------------------------+ +-------------------------+ 1485 // +-------------------------+ +-------------------------+
1426 // | JSFunction continuation | | JSFunction continuation | 1486 // | JSFunction continuation | | JSFunction continuation |
1427 // +-------------------------+ +-------------------------+ 1487 // +-------------------------+ +-------------------------+
1428 // | | saved frame (FP) | | saved frame (FP) | 1488 // | | saved frame (FP) | | saved frame (FP) |
1429 // | +=========================+<-fpreg +=========================+<-fpreg 1489 // | +=========================+<-fpreg +=========================+<-fpreg
1490 // | | JSFunction constant pool| | JSFunction constant pool|
1491 // | +-------------------------+ +-------------------------|
1430 // | | JSFunction context | | JSFunction context | 1492 // | | JSFunction context | | JSFunction context |
1431 // v +-------------------------+ +-------------------------| 1493 // v +-------------------------+ +-------------------------|
1432 // | COMPILED_STUB marker | | STUB_FAILURE marker | 1494 // | COMPILED_STUB marker | | STUB_FAILURE marker |
1433 // +-------------------------+ +-------------------------+ 1495 // +-------------------------+ +-------------------------+
1434 // | | | caller args.arguments_ | 1496 // | | | caller args.arguments_ |
1435 // | ... | +-------------------------+ 1497 // | ... | +-------------------------+
1436 // | | | caller args.length_ | 1498 // | | | caller args.length_ |
1437 // |-------------------------|<-spreg +-------------------------+ 1499 // |-------------------------|<-spreg +-------------------------+
1438 // | caller args pointer | 1500 // | caller args pointer |
1439 // +-------------------------+ 1501 // +-------------------------+
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1508 intptr_t frame_ptr = input_->GetRegister(fp_reg.code()); 1570 intptr_t frame_ptr = input_->GetRegister(fp_reg.code());
1509 output_frame->SetRegister(fp_reg.code(), frame_ptr); 1571 output_frame->SetRegister(fp_reg.code(), frame_ptr);
1510 output_frame->SetFp(frame_ptr); 1572 output_frame->SetFp(frame_ptr);
1511 if (trace_scope_ != NULL) { 1573 if (trace_scope_ != NULL) {
1512 PrintF(trace_scope_->file(), 1574 PrintF(trace_scope_->file(),
1513 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1575 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1514 V8PRIxPTR " ; caller's fp\n", 1576 V8PRIxPTR " ; caller's fp\n",
1515 top_address + output_frame_offset, output_frame_offset, value); 1577 top_address + output_frame_offset, output_frame_offset, value);
1516 } 1578 }
1517 1579
1580 if (FLAG_enable_ool_constant_pool) {
1581 // The constant pool pointer can be gotten from the input frame.
1582 Register constant_pool_pointer_register =
1583 StubFailureTrampolineFrame::constant_pool_pointer_register();
1584 input_frame_offset -= kPointerSize;
1585 value = input_->GetFrameSlot(input_frame_offset);
1586 output_frame->SetRegister(constant_pool_pointer_register.code(), value);
1587 output_frame_offset -= kPointerSize;
1588 output_frame->SetFrameSlot(output_frame_offset, value);
1589 if (trace_scope_) {
1590 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
1591 V8PRIxPTR " ; constant_pool_pointer\n",
1592 top_address + output_frame_offset, output_frame_offset, value);
1593 }
1594 }
1595
1518 // The context can be gotten from the input frame. 1596 // The context can be gotten from the input frame.
1519 Register context_reg = StubFailureTrampolineFrame::context_register(); 1597 Register context_reg = StubFailureTrampolineFrame::context_register();
1520 input_frame_offset -= kPointerSize; 1598 input_frame_offset -= kPointerSize;
1521 value = input_->GetFrameSlot(input_frame_offset); 1599 value = input_->GetFrameSlot(input_frame_offset);
1522 output_frame->SetRegister(context_reg.code(), value); 1600 output_frame->SetRegister(context_reg.code(), value);
1523 output_frame_offset -= kPointerSize; 1601 output_frame_offset -= kPointerSize;
1524 output_frame->SetFrameSlot(output_frame_offset, value); 1602 output_frame->SetFrameSlot(output_frame_offset, value);
1525 if (trace_scope_ != NULL) { 1603 if (trace_scope_ != NULL) {
1526 PrintF(trace_scope_->file(), 1604 PrintF(trace_scope_->file(),
1527 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" 1605 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08"
(...skipping 919 matching lines...) Expand 10 before | Expand all | Expand 10 after
2447 DoTranslateObject(iterator, object_index, i); 2525 DoTranslateObject(iterator, object_index, i);
2448 } 2526 }
2449 return; 2527 return;
2450 } 2528 }
2451 } 2529 }
2452 } 2530 }
2453 2531
2454 2532
2455 unsigned Deoptimizer::ComputeInputFrameSize() const { 2533 unsigned Deoptimizer::ComputeInputFrameSize() const {
2456 unsigned fixed_size = ComputeFixedSize(function_); 2534 unsigned fixed_size = ComputeFixedSize(function_);
2457 // The fp-to-sp delta already takes the context and the function 2535 // The fp-to-sp delta already takes the context, constant pool pointer and the
2458 // into account so we have to avoid double counting them. 2536 // function into account so we have to avoid double counting them.
2459 unsigned result = fixed_size + fp_to_sp_delta_ - 2537 unsigned result = fixed_size + fp_to_sp_delta_ -
2460 StandardFrameConstants::kFixedFrameSizeFromFp; 2538 StandardFrameConstants::kFixedFrameSizeFromFp;
2461 #ifdef DEBUG 2539 #ifdef DEBUG
2462 if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { 2540 if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) {
2463 unsigned stack_slots = compiled_code_->stack_slots(); 2541 unsigned stack_slots = compiled_code_->stack_slots();
2464 unsigned outgoing_size = ComputeOutgoingArgumentSize(); 2542 unsigned outgoing_size = ComputeOutgoingArgumentSize();
2465 ASSERT(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size); 2543 ASSERT(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size);
2466 } 2544 }
2467 #endif 2545 #endif
2468 return result; 2546 return result;
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
2573 } 2651 }
2574 2652
2575 2653
2576 FrameDescription::FrameDescription(uint32_t frame_size, 2654 FrameDescription::FrameDescription(uint32_t frame_size,
2577 JSFunction* function) 2655 JSFunction* function)
2578 : frame_size_(frame_size), 2656 : frame_size_(frame_size),
2579 function_(function), 2657 function_(function),
2580 top_(kZapUint32), 2658 top_(kZapUint32),
2581 pc_(kZapUint32), 2659 pc_(kZapUint32),
2582 fp_(kZapUint32), 2660 fp_(kZapUint32),
2583 context_(kZapUint32) { 2661 context_(kZapUint32),
2662 constant_pool_(kZapUint32) {
2584 // Zap all the registers. 2663 // Zap all the registers.
2585 for (int r = 0; r < Register::kNumRegisters; r++) { 2664 for (int r = 0; r < Register::kNumRegisters; r++) {
2586 SetRegister(r, kZapUint32); 2665 SetRegister(r, kZapUint32);
2587 } 2666 }
2588 2667
2589 // Zap all the slots. 2668 // Zap all the slots.
2590 for (unsigned o = 0; o < frame_size; o += kPointerSize) { 2669 for (unsigned o = 0; o < frame_size; o += kPointerSize) {
2591 SetFrameSlot(o, kZapUint32); 2670 SetFrameSlot(o, kZapUint32);
2592 } 2671 }
2593 } 2672 }
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
3054 3133
3055 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { 3134 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) {
3056 v->VisitPointer(BitCast<Object**>(&function_)); 3135 v->VisitPointer(BitCast<Object**>(&function_));
3057 v->VisitPointers(parameters_, parameters_ + parameters_count_); 3136 v->VisitPointers(parameters_, parameters_ + parameters_count_);
3058 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); 3137 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_);
3059 } 3138 }
3060 3139
3061 #endif // ENABLE_DEBUGGER_SUPPORT 3140 #endif // ENABLE_DEBUGGER_SUPPORT
3062 3141
3063 } } // namespace v8::internal 3142 } } // namespace v8::internal
OLDNEW
« src/arm/full-codegen-arm.cc ('K') | « src/deoptimizer.h ('k') | src/frames.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698