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

Side by Side Diff: src/arm/disasm-arm.cc

Issue 1576026: Add support for bkpt instruction... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 8 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
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 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 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 } else if ((format[3] == '1') && (format[4] == '6')) { 442 } else if ((format[3] == '1') && (format[4] == '6')) {
443 ASSERT(STRING_STARTS_WITH(format, "off16to20")); 443 ASSERT(STRING_STARTS_WITH(format, "off16to20"));
444 out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_, 444 out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
445 "%d", instr->Bits(20, 16) +1); 445 "%d", instr->Bits(20, 16) +1);
446 return 9; 446 return 9;
447 } else if (format[3] == '7') { 447 } else if (format[3] == '7') {
448 ASSERT(STRING_STARTS_WITH(format, "off7to11")); 448 ASSERT(STRING_STARTS_WITH(format, "off7to11"));
449 out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_, 449 out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
450 "%d", instr->ShiftAmountField()); 450 "%d", instr->ShiftAmountField());
451 return 8; 451 return 8;
452 } else if (format[3] == '0') {
453 // 'off0to3and8to19 16-bit immediate encoded in bits 19-8 and 3-0.
454 ASSERT(STRING_STARTS_WITH(format, "off0to3and8to19"));
455 out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
456 "%d",
457 (instr->Bits(19, 8) << 4) +
458 instr->Bits(3, 0));
459 return 15;
452 } 460 }
453 // 'off8: 8-bit offset for extra load and store instructions 461 // 'off8: 8-bit offset for extra load and store instructions
454 ASSERT(STRING_STARTS_WITH(format, "off8")); 462 ASSERT(STRING_STARTS_WITH(format, "off8"));
455 int offs8 = (instr->ImmedHField() << 4) | instr->ImmedLField(); 463 int offs8 = (instr->ImmedHField() << 4) | instr->ImmedLField();
456 out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_, 464 out_buffer_pos_ += v8i::OS::SNPrintF(out_buffer_ + out_buffer_pos_,
457 "%d", offs8); 465 "%d", offs8);
458 return 4; 466 return 4;
459 } 467 }
460 case 'p': { // 'pu: P and U bits for load and store instructions 468 case 'p': { // 'pu: P and U bits for load and store instructions
461 ASSERT(STRING_STARTS_WITH(format, "pu")); 469 ASSERT(STRING_STARTS_WITH(format, "pu"));
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 break; 651 break;
644 } 652 }
645 default: { 653 default: {
646 // The PU field is a 2-bit field. 654 // The PU field is a 2-bit field.
647 UNREACHABLE(); 655 UNREACHABLE();
648 break; 656 break;
649 } 657 }
650 } 658 }
651 return; 659 return;
652 } 660 }
661 } else if ((type == 0) && instr->IsMiscType0()) {
Erik Corry 2010/04/08 12:56:30 This is a little strange to me, but if it matches
Søren Thygesen Gjesse 2010/04/08 13:29:06 Section A5.2 in ARM® Architecture Reference Manual
662 if (instr->Bits(22, 21) == 1) {
663 switch (instr->Bits(7, 4)) {
664 case BX:
665 Format(instr, "bx'cond 'rm");
666 break;
667 case BLX:
668 Format(instr, "blx'cond 'rm");
669 break;
670 case BKPT:
671 Format(instr, "bkpt 'off0to3and8to19");
672 break;
673 default:
674 Unknown(instr); // not used by V8
675 break;
676 }
677 } else if (instr->Bits(22, 21) == 3) {
678 switch (instr->Bits(7, 4)) {
679 case CLZ:
680 Format(instr, "clz'cond 'rd, 'rm");
681 break;
682 default:
683 Unknown(instr); // not used by V8
684 break;
685 }
686 } else {
687 Unknown(instr); // not used by V8
688 }
653 } else { 689 } else {
654 switch (instr->OpcodeField()) { 690 switch (instr->OpcodeField()) {
655 case AND: { 691 case AND: {
656 Format(instr, "and'cond's 'rd, 'rn, 'shift_op"); 692 Format(instr, "and'cond's 'rd, 'rn, 'shift_op");
657 break; 693 break;
658 } 694 }
659 case EOR: { 695 case EOR: {
660 Format(instr, "eor'cond's 'rd, 'rn, 'shift_op"); 696 Format(instr, "eor'cond's 'rd, 'rn, 'shift_op");
661 break; 697 break;
662 } 698 }
(...skipping 26 matching lines...) Expand all
689 Format(instr, "tst'cond 'rn, 'shift_op"); 725 Format(instr, "tst'cond 'rn, 'shift_op");
690 } else { 726 } else {
691 Unknown(instr); // not used by V8 727 Unknown(instr); // not used by V8
692 } 728 }
693 break; 729 break;
694 } 730 }
695 case TEQ: { 731 case TEQ: {
696 if (instr->HasS()) { 732 if (instr->HasS()) {
697 Format(instr, "teq'cond 'rn, 'shift_op"); 733 Format(instr, "teq'cond 'rn, 'shift_op");
698 } else { 734 } else {
699 switch (instr->Bits(7, 4)) { 735 Unknown(instr); // not used by V8
Erik Corry 2010/04/08 12:56:30 UNREACHABLE(); // Handled by IsMiscType0 code abo
Søren Thygesen Gjesse 2010/04/08 13:29:06 Done.
700 case BX:
701 Format(instr, "bx'cond 'rm");
702 break;
703 case BLX:
704 Format(instr, "blx'cond 'rm");
705 break;
706 default:
707 Unknown(instr); // not used by V8
708 break;
709 }
710 } 736 }
711 break; 737 break;
712 } 738 }
713 case CMP: { 739 case CMP: {
714 if (instr->HasS()) { 740 if (instr->HasS()) {
715 Format(instr, "cmp'cond 'rn, 'shift_op"); 741 Format(instr, "cmp'cond 'rn, 'shift_op");
716 } else { 742 } else {
717 Unknown(instr); // not used by V8 743 Unknown(instr); // not used by V8
718 } 744 }
719 break; 745 break;
720 } 746 }
721 case CMN: { 747 case CMN: {
722 if (instr->HasS()) { 748 if (instr->HasS()) {
723 Format(instr, "cmn'cond 'rn, 'shift_op"); 749 Format(instr, "cmn'cond 'rn, 'shift_op");
724 } else { 750 } else {
725 switch (instr->Bits(7, 4)) { 751 Unknown(instr); // not used by V8
Erik Corry 2010/04/08 12:56:30 And here.
Søren Thygesen Gjesse 2010/04/08 13:29:06 Done.
726 case CLZ:
727 Format(instr, "clz'cond 'rd, 'rm");
728 break;
729 default:
730 Unknown(instr); // not used by V8
731 break;
732 }
733 } 752 }
734 break; 753 break;
735 } 754 }
736 case ORR: { 755 case ORR: {
737 Format(instr, "orr'cond's 'rd, 'rn, 'shift_op"); 756 Format(instr, "orr'cond's 'rd, 'rn, 'shift_op");
738 break; 757 break;
739 } 758 }
740 case MOV: { 759 case MOV: {
741 Format(instr, "mov'cond's 'rd, 'shift_op"); 760 Format(instr, "mov'cond's 'rd, 'shift_op");
742 break; 761 break;
(...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after
1280 buffer[0] = '\0'; 1299 buffer[0] = '\0';
1281 byte* prev_pc = pc; 1300 byte* prev_pc = pc;
1282 pc += d.InstructionDecode(buffer, pc); 1301 pc += d.InstructionDecode(buffer, pc);
1283 fprintf(f, "%p %08x %s\n", 1302 fprintf(f, "%p %08x %s\n",
1284 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); 1303 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start());
1285 } 1304 }
1286 } 1305 }
1287 1306
1288 1307
1289 } // namespace disasm 1308 } // namespace disasm
OLDNEW
« no previous file with comments | « src/arm/constants-arm.h ('k') | src/arm/simulator-arm.cc » ('j') | src/arm/simulator-arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698