From: swami Date: Thu, 27 Nov 2008 11:30:33 +0000 (+0000) Subject: * cr16-dis.c (match_opcode): Truncate mcode to 32 bit and X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=04ea59cd8aace99df6e752f2b80489930a472296;p=pf3gnuchains%2Fpf3gnuchains3x.git * cr16-dis.c (match_opcode): Truncate mcode to 32 bit and adjusted the mask for 32-bit branch instruction. --- diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 479eed9e79..cb072c73d5 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2008-11-27 M R Swami Reddy + + * cr16-dis.c (match_opcode): Truncate mcode to 32 bit and + adjusted the mask for 32-bit branch instruction. + 2008-11-27 Alan Modra * ppc-opc.c (extract_sprg): Correct operand range check. diff --git a/opcodes/cr16-dis.c b/opcodes/cr16-dis.c index de3eb753bf..2627141d0f 100644 --- a/opcodes/cr16-dis.c +++ b/opcodes/cr16-dis.c @@ -322,7 +322,7 @@ match_opcode (void) { unsigned long mask; /* The instruction 'constant' opcode doewsn't exceed 32 bits. */ - unsigned long doubleWord = words[1] + (words[0] << 16); + unsigned long doubleWord = (words[1] + (words[0] << 16)) & 0xffffffff; /* Start searching from end of instruction table. */ instruction = &cr16_instruction[NUMOPCODES - 2]; @@ -331,6 +331,10 @@ match_opcode (void) while (instruction >= cr16_instruction) { mask = build_mask (); + /* Adjust mask for bcond with 32-bit size instruction */ + if ((IS_INSN_MNEMONIC("b") && instruction->size == 2)) + mask = 0xff0f0000; + if ((doubleWord & mask) == BIN (instruction->match, instruction->match_bits)) return 1;