X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fa29k-dis.c;h=46245e704b6f8e4dd4e947263e2a5b650b12b630;hb=4f235110292d822a18dfaecbfebe002dce5e2e88;hp=4a4152f315c773bf3ee155c39d274932f684319b;hpb=d75a406d3c483b98512470ae916d8a64e72812cb;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/a29k-dis.c b/opcodes/a29k-dis.c index 4a4152f315..46245e704b 100644 --- a/opcodes/a29k-dis.c +++ b/opcodes/a29k-dis.c @@ -16,7 +16,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "dis-asm.h" #include "opcode/a29k.h" @@ -43,13 +43,15 @@ print_general (num, info) assembler uses. */ static void print_special (num, info) - int num; + unsigned int num; struct disassemble_info *info; { /* Register names of registers 0-SPEC0_NUM-1. */ static char *spec0_names[] = { "vab", "ops", "cps", "cfg", "cha", "chd", "chc", "rbp", "tmc", "tmr", - "pc0", "pc1", "pc2", "mmu", "lru" + "pc0", "pc1", "pc2", "mmu", "lru", "rsn", "rma0", "rmc0", "rma1", "rmc1", + "spc0", "spc1", "spc2", "iba0", "ibc0", "iba1", "ibc1", "dba", "dbc", + "cir", "cdr" }; #define SPEC0_NUM ((sizeof spec0_names) / (sizeof spec0_names[0])) @@ -121,8 +123,9 @@ typedef (*find_byte_func_type) PARAMS ((char *, unsigned char *, unsigned char *, unsigned char *, unsigned char *)); -/* Print one instruction from MEMADDR on STREAM. +/* Print one instruction from MEMADDR on INFO->STREAM. Return the size of the instruction (always 4 on a29k). */ + static int print_insn (memaddr, info) bfd_vma memaddr; @@ -150,6 +153,8 @@ print_insn (memaddr, info) (*find_byte_func) (insn, &insn0, &insn8, &insn16, &insn24); + printf ("%02x%02x%02x%02x ", insn24, insn16, insn8, insn0); + /* Handle the nop (aseq 0x40,gr1,gr1) specially */ if ((insn24==0x70) && (insn16==0x40) && (insn8==0x01) && (insn0==0x01)) { (*info->fprintf_func) (info->stream,"nop"); @@ -161,7 +166,7 @@ print_insn (memaddr, info) opcode < &a29k_opcodes[num_opcodes]; ++opcode) { - if ((insn24<<24) == opcode->opcode) + if (((unsigned long) insn24 << 24) == opcode->opcode) { char *s; @@ -187,7 +192,7 @@ print_insn (memaddr, info) break; case 'x': - (*info->fprintf_func) (info->stream, "%d", (insn16 << 8) + insn0); + (*info->fprintf_func) (info->stream, "0x%x", (insn16 << 8) + insn0); break; case 'h': @@ -241,6 +246,11 @@ print_insn (memaddr, info) (*info->fprintf_func) (info->stream, "%d", (insn0 >> 4) & 7); break; + case 'I': + if ((insn16 & 3) != 0) + (*info->fprintf_func) (info->stream, "%d", insn16 & 3); + break; + case 'd': (*info->fprintf_func) (info->stream, "%d", (insn0 >> 2) & 3); break;