[binutils-gdb] opcodes: Fix BMASKI disassembly for immediate 32 on M*Core

Jan Beulich jbeulich@sourceware.org
Wed Jan 21 13:48:50 GMT 2026


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1a299d4bc86957c0c0a51d3167168ec36454eed3

commit 1a299d4bc86957c0c0a51d3167168ec36454eed3
Author: Michal Sobon <msobon@hex-rays.com>
Date:   Wed Jan 21 14:45:05 2026 +0100

    opcodes: Fix BMASKI disassembly for immediate 32 on M*Core
    
    The BMASKI instruction has three encoding variants (OMa, OMb, OMc).
    The OMa encoding (0x2C00, mask 0xFFF0) specifically represents
    BMASKI with immediate 32, encoded as IMM5=0.
    
    Per Motorola M*Core specification: "An IMM5 value of 0 is interpreted
    as a value of 32."
    
    Previously, all three variants extracted the immediate the same way,
    causing OMa to incorrectly display 0 instead of 32.
    
    Before: 0x2c04 -> bmaski r4, 0
    After:  0x2c04 -> bmaski r4, 32
    
    opcodes/
            * mcore-dis.c (print_insn_mcore): Handle OMa encoding to display
            immediate 32 instead of 0 for BMASKI.
    
    gas/testsuite/
            * gas/mcore/allinsn.s: Add test for bmaski with immediate 32.
            Replace two clrc padding instructions with one for 4-byte alignment.
            Fix missing newline at end of file.
            * gas/mcore/allinsn.d: Update expected output.
    
    Signed-off-by: Michal Sobon <msobon@hex-rays.com>

Diff:
---
 gas/testsuite/gas/mcore/allinsn.d | 4 +++-
 gas/testsuite/gas/mcore/allinsn.s | 5 ++---
 opcodes/mcore-dis.c               | 5 ++++-
 3 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/gas/testsuite/gas/mcore/allinsn.d b/gas/testsuite/gas/mcore/allinsn.d
index cf3b0ff6339..01a873f7865 100644
--- a/gas/testsuite/gas/mcore/allinsn.d
+++ b/gas/testsuite/gas/mcore/allinsn.d
@@ -394,5 +394,7 @@ Disassembly of section \.text:
 
 0+0106 <zexth>:
  106:	0164      	zexth	r4
- 108:	0f00      	cmpne	r0, r0
+
+0+0108 <Bmaski>:
+ 108:	2c04      	bmaski	r4, 32
  10a:	0f00      	cmpne	r0, r0
diff --git a/gas/testsuite/gas/mcore/allinsn.s b/gas/testsuite/gas/mcore/allinsn.s
index 7f21e514f58..b32782d3bee 100644
--- a/gas/testsuite/gas/mcore/allinsn.s
+++ b/gas/testsuite/gas/mcore/allinsn.s
@@ -141,6 +141,5 @@ foolit:
 	test xtrb3  "r1, r13"
 	test zextb  r8
 	test zexth  r4
-	clrc			// These two instructions pad the object file
-	clrc			// out to a 16 byte boundary.
-	
\ No newline at end of file
+	test Bmaski "r4, 32"
+	clrc			// Pad to 4-byte boundary
diff --git a/opcodes/mcore-dis.c b/opcodes/mcore-dis.c
index 2cf84270014..a3e7d0b9e95 100644
--- a/opcodes/mcore-dis.c
+++ b/opcodes/mcore-dis.c
@@ -179,12 +179,15 @@ print_insn_mcore (bfd_vma memaddr,
 	case OBRc:
 	case SI:
 	case SIa:
-	case OMa:
 	case OMb:
 	case OMc:
 	  (*print_func) (stream, "\t%s, %d", name, (inst >> 4) & 0x1F);
 	  break;
 
+	case OMa:
+	  (*print_func) (stream, "\t%s, %d", name, 32);
+	  break;
+
 	case I7:
 	  (*print_func) (stream, "\t%s, %d", name, (inst >> 4) & 0x7F);
 	  break;


More information about the Binutils-cvs mailing list