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

Side by Side Diff: src/assembler.cc

Issue 10449047: ARM: Fix literal pool handling for breakpoints in debugger.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 8 years, 6 months 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
« no previous file with comments | « src/assembler.h ('k') | src/debug.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are 5 // modification, are permitted provided that the following conditions are
6 // met: 6 // met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 // below, the first byte listed it at the highest address, and successive 134 // below, the first byte listed it at the highest address, and successive
135 // bytes in the record are at progressively lower addresses. 135 // bytes in the record are at progressively lower addresses.
136 // 136 //
137 // Encoding 137 // Encoding
138 // 138 //
139 // The most common modes are given single-byte encodings. Also, it is 139 // The most common modes are given single-byte encodings. Also, it is
140 // easy to identify the type of reloc info and skip unwanted modes in 140 // easy to identify the type of reloc info and skip unwanted modes in
141 // an iteration. 141 // an iteration.
142 // 142 //
143 // The encoding relies on the fact that there are fewer than 14 143 // The encoding relies on the fact that there are fewer than 14
144 // different non-compactly encoded relocation modes. 144 // different relocation modes using standard non-compact encoding.
145 // 145 //
146 // The first byte of a relocation record has a tag in its low 2 bits: 146 // The first byte of a relocation record has a tag in its low 2 bits:
147 // Here are the record schemes, depending on the low tag and optional higher 147 // Here are the record schemes, depending on the low tag and optional higher
148 // tags. 148 // tags.
149 // 149 //
150 // Low tag: 150 // Low tag:
151 // 00: embedded_object: [6-bit pc delta] 00 151 // 00: embedded_object: [6-bit pc delta] 00
152 // 152 //
153 // 01: code_target: [6-bit pc delta] 01 153 // 01: code_target: [6-bit pc delta] 01
154 // 154 //
(...skipping 11 matching lines...) Expand all
166 // 166 //
167 // Long record format: 167 // Long record format:
168 // 4-bit middle_tag: 168 // 4-bit middle_tag:
169 // 0000 - 1100 : Short record for RelocInfo::Mode middle_tag + 2 169 // 0000 - 1100 : Short record for RelocInfo::Mode middle_tag + 2
170 // (The middle_tag encodes rmode - RelocInfo::LAST_COMPACT_ENUM, 170 // (The middle_tag encodes rmode - RelocInfo::LAST_COMPACT_ENUM,
171 // and is between 0000 and 1100) 171 // and is between 0000 and 1100)
172 // The format is: 172 // The format is:
173 // 00 [4 bit middle_tag] 11 followed by 173 // 00 [4 bit middle_tag] 11 followed by
174 // 00 [6 bit pc delta] 174 // 00 [6 bit pc delta]
175 // 175 //
176 // 1101: not used (would allow one more relocation mode to be added) 176 // 1101: constant pool. Used on ARM only for now.
177 // The format is: 11 1101 11
178 // signed int (size of the constant pool).
177 // 1110: long_data_record 179 // 1110: long_data_record
178 // The format is: [2-bit data_type_tag] 1110 11 180 // The format is: [2-bit data_type_tag] 1110 11
179 // signed intptr_t, lowest byte written first 181 // signed intptr_t, lowest byte written first
180 // (except data_type code_target_with_id, which 182 // (except data_type code_target_with_id, which
181 // is followed by a signed int, not intptr_t.) 183 // is followed by a signed int, not intptr_t.)
182 // 184 //
183 // 1111: long_pc_jump 185 // 1111: long_pc_jump
184 // The format is: 186 // The format is:
185 // pc-jump: 00 1111 11, 187 // pc-jump: 00 1111 11,
186 // 00 [6 bits pc delta] 188 // 00 [6 bits pc delta]
187 // or 189 // or
188 // pc-jump (variable length): 190 // pc-jump (variable length):
189 // 01 1111 11, 191 // 01 1111 11,
190 // [7 bits data] 0 192 // [7 bits data] 0
191 // ... 193 // ...
192 // [7 bits data] 1 194 // [7 bits data] 1
193 // (Bits 6..31 of pc delta, with leading zeroes 195 // (Bits 6..31 of pc delta, with leading zeroes
194 // dropped, and last non-zero chunk tagged with 1.) 196 // dropped, and last non-zero chunk tagged with 1.)
195 197
196 198
197 const int kMaxRelocModes = 14; 199 const int kMaxStandardNonCompactModes = 14;
198 200
199 const int kTagBits = 2; 201 const int kTagBits = 2;
200 const int kTagMask = (1 << kTagBits) - 1; 202 const int kTagMask = (1 << kTagBits) - 1;
201 const int kExtraTagBits = 4; 203 const int kExtraTagBits = 4;
202 const int kLocatableTypeTagBits = 2; 204 const int kLocatableTypeTagBits = 2;
203 const int kSmallDataBits = kBitsPerByte - kLocatableTypeTagBits; 205 const int kSmallDataBits = kBitsPerByte - kLocatableTypeTagBits;
204 206
205 const int kEmbeddedObjectTag = 0; 207 const int kEmbeddedObjectTag = 0;
206 const int kCodeTargetTag = 1; 208 const int kCodeTargetTag = 1;
207 const int kLocatableTag = 2; 209 const int kLocatableTag = 2;
(...skipping 13 matching lines...) Expand all
221 const int kLastChunkTag = 1; 223 const int kLastChunkTag = 1;
222 224
223 225
224 const int kDataJumpExtraTag = kPCJumpExtraTag - 1; 226 const int kDataJumpExtraTag = kPCJumpExtraTag - 1;
225 227
226 const int kCodeWithIdTag = 0; 228 const int kCodeWithIdTag = 0;
227 const int kNonstatementPositionTag = 1; 229 const int kNonstatementPositionTag = 1;
228 const int kStatementPositionTag = 2; 230 const int kStatementPositionTag = 2;
229 const int kCommentTag = 3; 231 const int kCommentTag = 3;
230 232
233 const int kConstPoolExtraTag = kPCJumpExtraTag - 2;
234 const int kConstPoolTag = 3;
235
231 236
232 uint32_t RelocInfoWriter::WriteVariableLengthPCJump(uint32_t pc_delta) { 237 uint32_t RelocInfoWriter::WriteVariableLengthPCJump(uint32_t pc_delta) {
233 // Return if the pc_delta can fit in kSmallPCDeltaBits bits. 238 // Return if the pc_delta can fit in kSmallPCDeltaBits bits.
234 // Otherwise write a variable length PC jump for the bits that do 239 // Otherwise write a variable length PC jump for the bits that do
235 // not fit in the kSmallPCDeltaBits bits. 240 // not fit in the kSmallPCDeltaBits bits.
236 if (is_uintn(pc_delta, kSmallPCDeltaBits)) return pc_delta; 241 if (is_uintn(pc_delta, kSmallPCDeltaBits)) return pc_delta;
237 WriteExtraTag(kPCJumpExtraTag, kVariableLengthPCJumpTopTag); 242 WriteExtraTag(kPCJumpExtraTag, kVariableLengthPCJumpTopTag);
238 uint32_t pc_jump = pc_delta >> kSmallPCDeltaBits; 243 uint32_t pc_jump = pc_delta >> kSmallPCDeltaBits;
239 ASSERT(pc_jump > 0); 244 ASSERT(pc_jump > 0);
240 // Write kChunkBits size chunks of the pc_jump. 245 // Write kChunkBits size chunks of the pc_jump.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
278 283
279 void RelocInfoWriter::WriteExtraTaggedIntData(int data_delta, int top_tag) { 284 void RelocInfoWriter::WriteExtraTaggedIntData(int data_delta, int top_tag) {
280 WriteExtraTag(kDataJumpExtraTag, top_tag); 285 WriteExtraTag(kDataJumpExtraTag, top_tag);
281 for (int i = 0; i < kIntSize; i++) { 286 for (int i = 0; i < kIntSize; i++) {
282 *--pos_ = static_cast<byte>(data_delta); 287 *--pos_ = static_cast<byte>(data_delta);
283 // Signed right shift is arithmetic shift. Tested in test-utils.cc. 288 // Signed right shift is arithmetic shift. Tested in test-utils.cc.
284 data_delta = data_delta >> kBitsPerByte; 289 data_delta = data_delta >> kBitsPerByte;
285 } 290 }
286 } 291 }
287 292
293 void RelocInfoWriter::WriteExtraTaggedConstPoolData(int data) {
294 WriteExtraTag(kConstPoolExtraTag, kConstPoolTag);
295 for (int i = 0; i < kIntSize; i++) {
296 *--pos_ = static_cast<byte>(data);
297 // Signed right shift is arithmetic shift. Tested in test-utils.cc.
298 data = data >> kBitsPerByte;
299 }
300 }
301
288 void RelocInfoWriter::WriteExtraTaggedData(intptr_t data_delta, int top_tag) { 302 void RelocInfoWriter::WriteExtraTaggedData(intptr_t data_delta, int top_tag) {
289 WriteExtraTag(kDataJumpExtraTag, top_tag); 303 WriteExtraTag(kDataJumpExtraTag, top_tag);
290 for (int i = 0; i < kIntptrSize; i++) { 304 for (int i = 0; i < kIntptrSize; i++) {
291 *--pos_ = static_cast<byte>(data_delta); 305 *--pos_ = static_cast<byte>(data_delta);
292 // Signed right shift is arithmetic shift. Tested in test-utils.cc. 306 // Signed right shift is arithmetic shift. Tested in test-utils.cc.
293 data_delta = data_delta >> kBitsPerByte; 307 data_delta = data_delta >> kBitsPerByte;
294 } 308 }
295 } 309 }
296 310
297 311
298 void RelocInfoWriter::Write(const RelocInfo* rinfo) { 312 void RelocInfoWriter::Write(const RelocInfo* rinfo) {
299 #ifdef DEBUG 313 #ifdef DEBUG
300 byte* begin_pos = pos_; 314 byte* begin_pos = pos_;
301 #endif 315 #endif
302 ASSERT(rinfo->pc() - last_pc_ >= 0); 316 ASSERT(rinfo->pc() - last_pc_ >= 0);
303 ASSERT(RelocInfo::NUMBER_OF_MODES - RelocInfo::LAST_COMPACT_ENUM <= 317 ASSERT(RelocInfo::LAST_STANDARD_NONCOMPACT_ENUM - RelocInfo::LAST_COMPACT_ENUM
304 kMaxRelocModes); 318 <= kMaxStandardNonCompactModes);
305 // Use unsigned delta-encoding for pc. 319 // Use unsigned delta-encoding for pc.
306 uint32_t pc_delta = static_cast<uint32_t>(rinfo->pc() - last_pc_); 320 uint32_t pc_delta = static_cast<uint32_t>(rinfo->pc() - last_pc_);
307 RelocInfo::Mode rmode = rinfo->rmode(); 321 RelocInfo::Mode rmode = rinfo->rmode();
308 322
309 // The two most common modes are given small tags, and usually fit in a byte. 323 // The two most common modes are given small tags, and usually fit in a byte.
310 if (rmode == RelocInfo::EMBEDDED_OBJECT) { 324 if (rmode == RelocInfo::EMBEDDED_OBJECT) {
311 WriteTaggedPC(pc_delta, kEmbeddedObjectTag); 325 WriteTaggedPC(pc_delta, kEmbeddedObjectTag);
312 } else if (rmode == RelocInfo::CODE_TARGET) { 326 } else if (rmode == RelocInfo::CODE_TARGET) {
313 WriteTaggedPC(pc_delta, kCodeTargetTag); 327 WriteTaggedPC(pc_delta, kCodeTargetTag);
314 ASSERT(begin_pos - pos_ <= RelocInfo::kMaxCallSize); 328 ASSERT(begin_pos - pos_ <= RelocInfo::kMaxCallSize);
(...skipping 25 matching lines...) Expand all
340 // Otherwise, use costly encoding. 354 // Otherwise, use costly encoding.
341 WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag); 355 WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag);
342 WriteExtraTaggedIntData(pos_delta, pos_type_tag); 356 WriteExtraTaggedIntData(pos_delta, pos_type_tag);
343 } 357 }
344 last_position_ = static_cast<int>(rinfo->data()); 358 last_position_ = static_cast<int>(rinfo->data());
345 } else if (RelocInfo::IsComment(rmode)) { 359 } else if (RelocInfo::IsComment(rmode)) {
346 // Comments are normally not generated, so we use the costly encoding. 360 // Comments are normally not generated, so we use the costly encoding.
347 WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag); 361 WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag);
348 WriteExtraTaggedData(rinfo->data(), kCommentTag); 362 WriteExtraTaggedData(rinfo->data(), kCommentTag);
349 ASSERT(begin_pos - pos_ >= RelocInfo::kMinRelocCommentSize); 363 ASSERT(begin_pos - pos_ >= RelocInfo::kMinRelocCommentSize);
364 } else if (RelocInfo::IsConstPool(rmode)) {
365 WriteExtraTaggedPC(pc_delta, kPCJumpExtraTag);
366 WriteExtraTaggedConstPoolData(rinfo->data());
350 } else { 367 } else {
351 ASSERT(rmode > RelocInfo::LAST_COMPACT_ENUM); 368 ASSERT(rmode > RelocInfo::LAST_COMPACT_ENUM);
352 int saved_mode = rmode - RelocInfo::LAST_COMPACT_ENUM; 369 int saved_mode = rmode - RelocInfo::LAST_COMPACT_ENUM;
353 // For all other modes we simply use the mode as the extra tag. 370 // For all other modes we simply use the mode as the extra tag.
354 // None of these modes need a data component. 371 // None of these modes need a data component.
355 ASSERT(saved_mode < kPCJumpExtraTag && saved_mode < kDataJumpExtraTag); 372 ASSERT(saved_mode < kPCJumpExtraTag && saved_mode < kDataJumpExtraTag);
356 WriteExtraTaggedPC(pc_delta, saved_mode); 373 WriteExtraTaggedPC(pc_delta, saved_mode);
357 } 374 }
358 last_pc_ = rinfo->pc(); 375 last_pc_ = rinfo->pc();
359 #ifdef DEBUG 376 #ifdef DEBUG
(...skipping 30 matching lines...) Expand all
390 void RelocIterator::AdvanceReadId() { 407 void RelocIterator::AdvanceReadId() {
391 int x = 0; 408 int x = 0;
392 for (int i = 0; i < kIntSize; i++) { 409 for (int i = 0; i < kIntSize; i++) {
393 x |= static_cast<int>(*--pos_) << i * kBitsPerByte; 410 x |= static_cast<int>(*--pos_) << i * kBitsPerByte;
394 } 411 }
395 last_id_ += x; 412 last_id_ += x;
396 rinfo_.data_ = last_id_; 413 rinfo_.data_ = last_id_;
397 } 414 }
398 415
399 416
417 void RelocIterator::AdvanceReadConstPoolData() {
418 int x = 0;
419 for (int i = 0; i < kIntSize; i++) {
420 x |= static_cast<int>(*--pos_) << i * kBitsPerByte;
421 }
422 rinfo_.data_ = x;
423 }
424
425
400 void RelocIterator::AdvanceReadPosition() { 426 void RelocIterator::AdvanceReadPosition() {
401 int x = 0; 427 int x = 0;
402 for (int i = 0; i < kIntSize; i++) { 428 for (int i = 0; i < kIntSize; i++) {
403 x |= static_cast<int>(*--pos_) << i * kBitsPerByte; 429 x |= static_cast<int>(*--pos_) << i * kBitsPerByte;
404 } 430 }
405 last_position_ += x; 431 last_position_ += x;
406 rinfo_.data_ = last_position_; 432 rinfo_.data_ = last_position_;
407 } 433 }
408 434
409 435
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 locatable_tag == kStatementPositionTag); 519 locatable_tag == kStatementPositionTag);
494 if (mode_mask_ & RelocInfo::kPositionMask) { 520 if (mode_mask_ & RelocInfo::kPositionMask) {
495 ReadTaggedPosition(); 521 ReadTaggedPosition();
496 if (SetMode(GetPositionModeFromTag(locatable_tag))) return; 522 if (SetMode(GetPositionModeFromTag(locatable_tag))) return;
497 } 523 }
498 } 524 }
499 } else { 525 } else {
500 ASSERT(tag == kDefaultTag); 526 ASSERT(tag == kDefaultTag);
501 int extra_tag = GetExtraTag(); 527 int extra_tag = GetExtraTag();
502 if (extra_tag == kPCJumpExtraTag) { 528 if (extra_tag == kPCJumpExtraTag) {
503 int top_tag = GetTopTag(); 529 if (GetTopTag() == kVariableLengthPCJumpTopTag) {
504 if (top_tag == kVariableLengthPCJumpTopTag) {
505 AdvanceReadVariableLengthPCJump(); 530 AdvanceReadVariableLengthPCJump();
506 } else { 531 } else {
507 AdvanceReadPC(); 532 AdvanceReadPC();
508 } 533 }
509 } else if (extra_tag == kDataJumpExtraTag) { 534 } else if (extra_tag == kDataJumpExtraTag) {
510 int locatable_tag = GetTopTag(); 535 int locatable_tag = GetTopTag();
511 if (locatable_tag == kCodeWithIdTag) { 536 if (locatable_tag == kCodeWithIdTag) {
512 if (SetMode(RelocInfo::CODE_TARGET_WITH_ID)) { 537 if (SetMode(RelocInfo::CODE_TARGET_WITH_ID)) {
513 AdvanceReadId(); 538 AdvanceReadId();
514 return; 539 return;
515 } 540 }
516 Advance(kIntSize); 541 Advance(kIntSize);
517 } else if (locatable_tag != kCommentTag) { 542 } else if (locatable_tag != kCommentTag) {
518 ASSERT(locatable_tag == kNonstatementPositionTag || 543 ASSERT(locatable_tag == kNonstatementPositionTag ||
519 locatable_tag == kStatementPositionTag); 544 locatable_tag == kStatementPositionTag);
520 if (mode_mask_ & RelocInfo::kPositionMask) { 545 if (mode_mask_ & RelocInfo::kPositionMask) {
521 AdvanceReadPosition(); 546 AdvanceReadPosition();
522 if (SetMode(GetPositionModeFromTag(locatable_tag))) return; 547 if (SetMode(GetPositionModeFromTag(locatable_tag))) return;
523 } else { 548 } else {
524 Advance(kIntSize); 549 Advance(kIntSize);
525 } 550 }
526 } else { 551 } else {
527 ASSERT(locatable_tag == kCommentTag); 552 ASSERT(locatable_tag == kCommentTag);
528 if (SetMode(RelocInfo::COMMENT)) { 553 if (SetMode(RelocInfo::COMMENT)) {
529 AdvanceReadData(); 554 AdvanceReadData();
530 return; 555 return;
531 } 556 }
532 Advance(kIntptrSize); 557 Advance(kIntptrSize);
533 } 558 }
559 } else if ((extra_tag == kConstPoolExtraTag) &&
560 (GetTopTag() == kConstPoolTag)) {
561 if (SetMode(RelocInfo::CONST_POOL)) {
562 AdvanceReadConstPoolData();
563 return;
564 }
565 Advance(kIntSize);
534 } else { 566 } else {
535 AdvanceReadPC(); 567 AdvanceReadPC();
536 int rmode = extra_tag + RelocInfo::LAST_COMPACT_ENUM; 568 int rmode = extra_tag + RelocInfo::LAST_COMPACT_ENUM;
537 if (SetMode(static_cast<RelocInfo::Mode>(rmode))) return; 569 if (SetMode(static_cast<RelocInfo::Mode>(rmode))) return;
538 } 570 }
539 } 571 }
540 } 572 }
541 done_ = true; 573 done_ = true;
542 } 574 }
543 575
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 case RelocInfo::COMMENT: 638 case RelocInfo::COMMENT:
607 return "comment"; 639 return "comment";
608 case RelocInfo::POSITION: 640 case RelocInfo::POSITION:
609 return "position"; 641 return "position";
610 case RelocInfo::STATEMENT_POSITION: 642 case RelocInfo::STATEMENT_POSITION:
611 return "statement position"; 643 return "statement position";
612 case RelocInfo::EXTERNAL_REFERENCE: 644 case RelocInfo::EXTERNAL_REFERENCE:
613 return "external reference"; 645 return "external reference";
614 case RelocInfo::INTERNAL_REFERENCE: 646 case RelocInfo::INTERNAL_REFERENCE:
615 return "internal reference"; 647 return "internal reference";
648 case RelocInfo::CONST_POOL:
649 return "constant pool";
616 case RelocInfo::DEBUG_BREAK_SLOT: 650 case RelocInfo::DEBUG_BREAK_SLOT:
617 #ifndef ENABLE_DEBUGGER_SUPPORT 651 #ifndef ENABLE_DEBUGGER_SUPPORT
618 UNREACHABLE(); 652 UNREACHABLE();
619 #endif 653 #endif
620 return "debug break slot"; 654 return "debug break slot";
621 case RelocInfo::NUMBER_OF_MODES: 655 case RelocInfo::NUMBER_OF_MODES:
622 UNREACHABLE(); 656 UNREACHABLE();
623 return "number_of_modes"; 657 return "number_of_modes";
624 } 658 }
625 return "unknown relocation type"; 659 return "unknown relocation type";
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 ASSERT(code->address() == HeapObject::cast(found)->address()); 725 ASSERT(code->address() == HeapObject::cast(found)->address());
692 break; 726 break;
693 } 727 }
694 case RUNTIME_ENTRY: 728 case RUNTIME_ENTRY:
695 case JS_RETURN: 729 case JS_RETURN:
696 case COMMENT: 730 case COMMENT:
697 case POSITION: 731 case POSITION:
698 case STATEMENT_POSITION: 732 case STATEMENT_POSITION:
699 case EXTERNAL_REFERENCE: 733 case EXTERNAL_REFERENCE:
700 case INTERNAL_REFERENCE: 734 case INTERNAL_REFERENCE:
735 case CONST_POOL:
701 case DEBUG_BREAK_SLOT: 736 case DEBUG_BREAK_SLOT:
702 case NONE: 737 case NONE:
703 break; 738 break;
704 case NUMBER_OF_MODES: 739 case NUMBER_OF_MODES:
705 UNREACHABLE(); 740 UNREACHABLE();
706 break; 741 break;
707 } 742 }
708 } 743 }
709 #endif // DEBUG 744 #endif // DEBUG
710 745
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
1331 assembler_->RecordRelocInfo(RelocInfo::POSITION, state_.current_position); 1366 assembler_->RecordRelocInfo(RelocInfo::POSITION, state_.current_position);
1332 state_.written_position = state_.current_position; 1367 state_.written_position = state_.current_position;
1333 written = true; 1368 written = true;
1334 } 1369 }
1335 1370
1336 // Return whether something was written. 1371 // Return whether something was written.
1337 return written; 1372 return written;
1338 } 1373 }
1339 1374
1340 } } // namespace v8::internal 1375 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/assembler.h ('k') | src/debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698