Chromium Code Reviews| Index: runtime/vm/simulator_arm.cc |
| =================================================================== |
| --- runtime/vm/simulator_arm.cc (revision 21855) |
| +++ runtime/vm/simulator_arm.cc (working copy) |
| @@ -505,8 +505,7 @@ |
| char line_buf[256]; |
| int offset = 0; |
| bool keep_going = true; |
| - fprintf(stdout, "%s", prompt); |
| - fflush(stdout); |
| + OS::Print("%s", prompt); |
| while (keep_going) { |
| if (fgets(line_buf, sizeof(line_buf), stdin) == NULL) { |
| // fgets got an error. Just give up. |
| @@ -1556,6 +1555,27 @@ |
| } |
| break; |
| } |
| + case 6: { |
|
zra
2013/04/23 15:57:02
Fix indentation.
regis
2013/04/23 16:05:16
Done.
|
| + // Registers rd_lo, rd_hi, rn, rm are encoded as rd, rn, rm, rs. |
| + // Format(instr, "smull'cond's 'rd, 'rn, 'rm, 'rs"); |
| + int64_t left_op = static_cast<int32_t>(rm_val); |
| + int64_t right_op = static_cast<int32_t>(rs_val); |
| + int64_t result = left_op * right_op; |
| + int32_t hi_res = Utils::High32Bits(result); |
| + int32_t lo_res = Utils::Low32Bits(result); |
| + set_register(rd, lo_res); |
| + set_register(rn, hi_res); |
| + if (instr->HasS()) { |
| + if (lo_res != 0) { |
| + // Collapse bits 0..31 into bit 32 so that 32-bit Z check works. |
| + hi_res |= 1; |
| + } |
| + ASSERT((result == 0) == (hi_res == 0)); // Z bit |
| + ASSERT(((result & (1LL << 63)) != 0) == (hi_res < 0)); // N bit |
| + SetNZFlags(hi_res); |
| + } |
| + break; |
| + } |
| default: { |
| UnimplementedInstruction(instr); |
| break; |