OLD | NEW |
1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 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 420 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 ASSERT(STRING_STARTS_WITH(format, "target")); | 431 ASSERT(STRING_STARTS_WITH(format, "target")); |
432 int off = (instr->SImmed24Field() << 2) + 8; | 432 int off = (instr->SImmed24Field() << 2) + 8; |
433 out_buffer_pos_ += v8i::OS::SNPrintF( | 433 out_buffer_pos_ += v8i::OS::SNPrintF( |
434 out_buffer_ + out_buffer_pos_, | 434 out_buffer_ + out_buffer_pos_, |
435 "%+d -> %s", | 435 "%+d -> %s", |
436 off, | 436 off, |
437 converter_.NameOfAddress(reinterpret_cast<byte*>(instr) + off)); | 437 converter_.NameOfAddress(reinterpret_cast<byte*>(instr) + off)); |
438 return 6; | 438 return 6; |
439 } | 439 } |
440 case 'u': { // 'u: signed or unsigned multiplies | 440 case 'u': { // 'u: signed or unsigned multiplies |
441 if (instr->Bit(22) == 0) { | 441 if (instr->Bit(22) == 1) { |
442 Print("u"); | 442 Print("u"); |
443 } else { | 443 } else { |
444 Print("s"); | 444 Print("s"); |
445 } | 445 } |
446 return 1; | 446 return 1; |
447 } | 447 } |
448 case 'w': { // 'w: W field of load and store instructions | 448 case 'w': { // 'w: W field of load and store instructions |
449 if (instr->HasW()) { | 449 if (instr->HasW()) { |
450 Print("!"); | 450 Print("!"); |
451 } | 451 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
492 if (instr->Bits(7, 4) == 9) { | 492 if (instr->Bits(7, 4) == 9) { |
493 if (instr->Bit(24) == 0) { | 493 if (instr->Bit(24) == 0) { |
494 // multiply instructions | 494 // multiply instructions |
495 if (instr->Bit(23) == 0) { | 495 if (instr->Bit(23) == 0) { |
496 if (instr->Bit(21) == 0) { | 496 if (instr->Bit(21) == 0) { |
497 Format(instr, "mul'cond's 'rd, 'rm, 'rs"); | 497 Format(instr, "mul'cond's 'rd, 'rm, 'rs"); |
498 } else { | 498 } else { |
499 Format(instr, "mla'cond's 'rd, 'rm, 'rs, 'rn"); | 499 Format(instr, "mla'cond's 'rd, 'rm, 'rs, 'rn"); |
500 } | 500 } |
501 } else { | 501 } else { |
502 Format(instr, "'um'al'cond's 'rn, 'rd, 'rs, 'rm"); | 502 Format(instr, "'um'al'cond's 'rn, 'rd, 'rm, 'rs"); |
503 } | 503 } |
504 } else { | 504 } else { |
505 Unknown(instr); // not used by V8 | 505 Unknown(instr); // not used by V8 |
506 } | 506 } |
507 } else { | 507 } else { |
508 // extra load/store instructions | 508 // extra load/store instructions |
509 switch (instr->PUField()) { | 509 switch (instr->PUField()) { |
510 case 0: { | 510 case 0: { |
511 if (instr->Bit(22) == 0) { | 511 if (instr->Bit(22) == 0) { |
512 Format(instr, "'memop'cond'sign'h 'rd, ['rn], -'rm"); | 512 Format(instr, "'memop'cond'sign'h 'rd, ['rn], -'rm"); |
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
880 buffer[0] = '\0'; | 880 buffer[0] = '\0'; |
881 byte* prev_pc = pc; | 881 byte* prev_pc = pc; |
882 pc += d.InstructionDecode(buffer, pc); | 882 pc += d.InstructionDecode(buffer, pc); |
883 fprintf(f, "%p %08x %s\n", | 883 fprintf(f, "%p %08x %s\n", |
884 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); | 884 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); |
885 } | 885 } |
886 } | 886 } |
887 | 887 |
888 | 888 |
889 } // namespace disasm | 889 } // namespace disasm |
OLD | NEW |