[PATCH] Add PRU support for LMBD (left-most bit detect) instruction

Spencer E. Olson olsonse@umich.edu
Tue Oct 27 17:04:48 GMT 2020


include/ChangeLog:
2020-10-26  Spencer E. Olson  <olsonse@umich.edu>

	* opcode/pru.h: Add LMBD (left-most bit detect) opcode index

opcodes/ChangeLog:
2020-10-26  Spencer E. Olson  <olsonse@umich.edu>

	* pru-opc.c: Add opcode description for LMBD (left-most bit detect)

gas
	* gas/testsuite/gas/pru/misc.s: Add tests for lmbd (left-most bit detect)
	* gas/testsuite/gas/pru/misc.d: Add tests for lmbd (left-most bit detect)
---

This patch adds support for an instruction that was misidentified initially as
being obsolete.  This instruction (LMBD:  Left-most bit detect) searches a
register to identify the first bit (from the left) that matches the first bit of
the given immediate/register operand.  This patch adds the minimal description
required and associated tests to support the LMBD instruction.

 gas/testsuite/gas/pru/misc.d | 3 +++
 gas/testsuite/gas/pru/misc.s | 3 +++
 include/ChangeLog            | 4 ++++
 include/opcode/pru.h         | 4 ++--
 opcodes/ChangeLog            | 4 ++++
 opcodes/pru-opc.c            | 2 ++
 6 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/gas/testsuite/gas/pru/misc.d b/gas/testsuite/gas/pru/misc.d
index 7c791e63f4..ac778db545 100644
--- a/gas/testsuite/gas/pru/misc.d
+++ b/gas/testsuite/gas/pru/misc.d
@@ -9,3 +9,6 @@ Disassembly of section .text:
 0+0000 <[^>]*> 2a000000 	halt
 0+0004 <[^>]*> 3e800000 	slp	1
 0+0008 <[^>]*> 3e000000 	slp	0
+0+000c <[^>]*> 2701e1e0 	lmbd	r0, r1, 1
+0+0010 <[^>]*> 2700e100 	lmbd	r0.b0, r1, 0
+0+0014 <[^>]*> 2642e1e0 	lmbd	r0, r1, sp.b2
diff --git a/gas/testsuite/gas/pru/misc.s b/gas/testsuite/gas/pru/misc.s
index cfe4d88fce..42e08a7579 100644
--- a/gas/testsuite/gas/pru/misc.s
+++ b/gas/testsuite/gas/pru/misc.s
@@ -4,3 +4,6 @@ foo:
 	halt
 	slp	1
 	slp	0
+	lmbd r0, r1, 0x1
+	lmbd r0.b0, r1, 0x0
+	lmbd r0, r1, r2.b2
diff --git a/include/ChangeLog b/include/ChangeLog
index 2267cda7bd..914d6a1f84 100644
--- a/include/ChangeLog
+++ b/include/ChangeLog
@@ -1,3 +1,7 @@
+2020-10-26  Spencer E. Olson  <olsonse@umich.edu>
+
+	* opcode/pru.h: Add LMBD (left-most bit detect) opcode index.
+
 2020-10-26  Cooper Qu <cooper.qu@linux.alibaba.com>
 
 	* opcode/csky.h (CSKY_VERSION_V1): New, currently used.
diff --git a/include/opcode/pru.h b/include/opcode/pru.h
index 74cc27a544..a5472e5e15 100644
--- a/include/opcode/pru.h
+++ b/include/opcode/pru.h
@@ -58,8 +58,8 @@ enum opcode_format_type {
 enum pru_instr_type {
     prui_add, prui_adc, prui_sub, prui_suc, prui_lsl, prui_lsr, prui_rsb,
     prui_rsc, prui_and, prui_or,  prui_xor, prui_min, prui_max, prui_clr,
-    prui_set, prui_not, prui_jmp, prui_jal, prui_ldi, prui_halt, prui_slp,
-    prui_xin, prui_xout, prui_xchg, prui_sxin, prui_sxout, prui_sxchg,
+    prui_set, prui_not, prui_jmp, prui_jal, prui_ldi, prui_lmbd, prui_halt,
+    prui_slp, prui_xin, prui_xout, prui_xchg, prui_sxin, prui_sxout, prui_sxchg,
     prui_loop, prui_iloop, prui_qbgt, prui_qbge, prui_qblt, prui_qble,
     prui_qbeq, prui_qbne, prui_qba, prui_qbbs, prui_qbbc, prui_lbbo,
     prui_sbbo, prui_lbco, prui_sbco
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 94659f4c38..a6140c819b 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,7 @@
+2020-10-26  Spencer E. Olson  <olsonse@umich.edu>
+
+	* pru-opc.c: Add opcode description for LMBD (left-most bit detect).
+
 2020-10-26  Cooper Qu <cooper.qu@linux.alibaba.com>
 
 	* csky-opc.h (csky_v2_opcodes): Change plsl.u16 to plsl.16.
diff --git a/opcodes/pru-opc.c b/opcodes/pru-opc.c
index f1fb7fefe1..05ddfb0358 100644
--- a/opcodes/pru-opc.c
+++ b/opcodes/pru-opc.c
@@ -121,6 +121,8 @@ const struct pru_opcode pru_opcodes[] =
    OP_MATCH_JAL, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, unsigned_immed16_overflow},
   { "ldi", prui_ldi, "d,W",
    OP_MATCH_LDI, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, unsigned_immed16_overflow},
+  { "lmbd", prui_lmbd, "d,s,b",
+   OP_MATCH_LMBD, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, unsigned_immed8_overflow},
   { "halt", prui_halt, "",
    OP_MATCH_HALT, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, no_overflow},
   { "slp", prui_slp, "w",
-- 
2.17.1



More information about the Binutils mailing list