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

Unified Diff: src/arm/simulator-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 side-by-side diff with in-line comments
Download patch
Index: src/arm/simulator-arm.cc
===================================================================
--- src/arm/simulator-arm.cc (revision 4358)
+++ src/arm/simulator-arm.cc (working copy)
@@ -1465,6 +1465,50 @@
}
return;
}
+ } else if ((type == 0) && instr->IsMiscType0()) {
+ if (instr->Bits(22, 21) == 1) {
+ int rm = instr->RmField();
+ switch (instr->Bits(7, 4)) {
+ case BX:
+ set_pc(get_register(rm));
+ break;
+ case BLX: {
+ uint32_t old_pc = get_pc();
+ set_pc(get_register(rm));
+ set_register(lr, old_pc + Instr::kInstrSize);
+ break;
+ }
+ case BKPT:
+ v8::internal::OS::DebugBreak();
+ break;
+ default:
+ UNIMPLEMENTED();
+ }
+ } else if (instr->Bits(22, 21) == 3) {
+ int rm = instr->RmField();
+ int rd = instr->RdField();
+ switch (instr->Bits(7, 4)) {
+ case CLZ: {
+ uint32_t bits = get_register(rm);
+ int leading_zeros = 0;
+ if (bits == 0) {
+ leading_zeros = 32;
+ } else {
+ while ((bits & 0x80000000u) == 0) {
+ bits <<= 1;
+ leading_zeros++;
+ }
+ }
+ set_register(rd, leading_zeros);
+ break;
+ }
+ default:
+ UNIMPLEMENTED();
+ }
+ } else {
+ PrintF("%08x\n", instr->InstructionBits());
+ UNIMPLEMENTED();
+ }
} else {
int rd = instr->RdField();
int rn = instr->RnField();
@@ -1582,21 +1626,7 @@
SetNZFlags(alu_out);
SetCFlag(shifter_carry_out);
} else {
- ASSERT(type == 0);
- int rm = instr->RmField();
- switch (instr->Bits(7, 4)) {
- case BX:
- set_pc(get_register(rm));
- break;
- case BLX: {
- uint32_t old_pc = get_pc();
- set_pc(get_register(rm));
- set_register(lr, old_pc + Instr::kInstrSize);
- break;
- }
- default:
- UNIMPLEMENTED();
- }
+ UNIMPLEMENTED();
Erik Corry 2010/04/08 12:56:30 UNREACHABLE
Søren Thygesen Gjesse 2010/04/08 13:29:06 Done.
}
break;
}
@@ -1624,27 +1654,7 @@
SetCFlag(!CarryFrom(rn_val, shifter_operand));
SetVFlag(OverflowFrom(alu_out, rn_val, shifter_operand, true));
} else {
- ASSERT(type == 0);
- int rm = instr->RmField();
- int rd = instr->RdField();
- switch (instr->Bits(7, 4)) {
- case CLZ: {
- uint32_t bits = get_register(rm);
- int leading_zeros = 0;
- if (bits == 0) {
- leading_zeros = 32;
- } else {
- while ((bits & 0x80000000u) == 0) {
- bits <<= 1;
- leading_zeros++;
- }
- }
- set_register(rd, leading_zeros);
- break;
- }
- default:
- UNIMPLEMENTED();
- }
+ UNIMPLEMENTED();
Erik Corry 2010/04/08 12:56:30 &here
Søren Thygesen Gjesse 2010/04/08 13:29:06 Done.
}
break;
}

Powered by Google App Engine
This is Rietveld 408576698