Add support for the LMBD (left-most bit detect) instruction to the PRU assembler.

include	* opcode/pru.h: Add LMBD (left-most bit detect) opcode index
opcodes * pru-opc.c: Add opcode description for LMBD (left-most bit detect)
gas 	* testsuite/gas/pru/misc.s: Add tests for lmbd (left-most bit detect)
 	* testsuite/gas/pru/misc.d: Add tests for lmbd (left-most bit
This commit is contained in:
Spencer E. Olson
2020-11-09 12:41:09 +00:00
committed by Nick Clifton
parent 4a3e3e2282
commit 9372689d72
8 changed files with 65 additions and 16 deletions

View File

@ -1,3 +1,9 @@
2020-11-09 Spencer E. Olson <olsonse@umich.edu>
* testsuite/gas/pru/misc.s: Add tests for lmbd (left-most bit
detect).
* testsuite/gas/pru/misc.d: Update expected disassembly.
2020-11-09 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> 2020-11-09 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
* config/tc-aarch64.c: Fix comment. * config/tc-aarch64.c: Fix comment.

View File

@ -9,3 +9,6 @@ Disassembly of section .text:
0+0000 <[^>]*> 2a000000 halt 0+0000 <[^>]*> 2a000000 halt
0+0004 <[^>]*> 3e800000 slp 1 0+0004 <[^>]*> 3e800000 slp 1
0+0008 <[^>]*> 3e000000 slp 0 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

View File

@ -4,3 +4,6 @@ foo:
halt halt
slp 1 slp 1
slp 0 slp 0
lmbd r0, r1, 0x1
lmbd r0.b0, r1, 0x0
lmbd r0, r1, r2.b2

View File

@ -771,6 +771,22 @@ resolve_reloc_expr_symbols (void)
} }
} }
static bfd_boolean
is_dwo_section (asection *sec)
{
const char *name;
int len;
if (sec == NULL || (name = bfd_section_name (sec)) == NULL)
return FALSE;
len = strlen (name);
if (len < 5)
return FALSE;
return strncmp (name + len - 4, ".dwo", 4) == 0;
}
/* This pass over fixups decides whether symbols can be replaced with /* This pass over fixups decides whether symbols can be replaced with
section symbols. */ section symbols. */
@ -899,6 +915,14 @@ adjust_reloc_syms (bfd *abfd ATTRIBUTE_UNUSED,
#endif #endif
} }
/* PR 26841: DWO sections are not supposed to have relocations. */
if (is_dwo_section (sec) && seginfo->fix_root != NULL)
{
as_bad (_("DWO section '%s' contains unresolved expressions - this is not allowed"),
bfd_section_name (sec));
seginfo->fix_root = NULL; /* FIXME: Memory leak ? */
}
dump_section_relocs (abfd, sec, stderr); dump_section_relocs (abfd, sec, stderr);
} }

View File

@ -1,3 +1,7 @@
2020-11-09 Spencer E. Olson <olsonse@umich.edu>
* opcode/pru.h: Add LMBD (left-most bit detect) opcode index.
2020-11-09 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> 2020-11-09 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
* opcode/aarch64.h (enum aarch64_opnd): Add new operand AARCH64_OPND_Rt_LS64. * opcode/aarch64.h (enum aarch64_opnd): Add new operand AARCH64_OPND_Rt_LS64.

View File

@ -44,25 +44,27 @@ enum overflow_type
no_overflow no_overflow
}; };
enum opcode_format_type { enum opcode_format_type
opcode_format1, {
opcode_format2ab, opcode_format1,
opcode_format2abl, opcode_format2ab,
opcode_format2c, opcode_format2abl,
opcode_format2de, opcode_format2c,
opcode_format45, opcode_format2de,
opcode_format6 opcode_format45,
opcode_format6
}; };
/* Opcode ID listing. Used for indexing by the simulator. */ /* Opcode ID listing. Used for indexing by the simulator. */
enum pru_instr_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_add, prui_adc, prui_sub, prui_suc, prui_lsl, prui_lsr, prui_rsb,
prui_set, prui_not, prui_jmp, prui_jal, prui_ldi, prui_halt, prui_slp, prui_rsc, prui_and, prui_or, prui_xor, prui_min, prui_max, prui_clr,
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_loop, prui_iloop, prui_qbgt, prui_qbge, prui_qblt, prui_qble, prui_halt, prui_slp, prui_xin, prui_xout, prui_xchg, prui_sxin,
prui_qbeq, prui_qbne, prui_qba, prui_qbbs, prui_qbbc, prui_lbbo, prui_sxout, prui_sxchg, prui_loop, prui_iloop, prui_qbgt, prui_qbge,
prui_sbbo, prui_lbco, prui_sbco prui_qblt, prui_qble, prui_qbeq, prui_qbne, prui_qba, prui_qbbs,
prui_qbbc, prui_lbbo, prui_sbbo, prui_lbco, prui_sbco
}; };
/* This structure holds information for a particular instruction. /* This structure holds information for a particular instruction.

View File

@ -1,3 +1,8 @@
2020-11-09 Spencer E. Olson <olsonse@umich.edu>
* pru-opc.c: Add opcode description for LMBD (left-most bit
detect).
2020-11-09 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com> 2020-11-09 Przemyslaw Wirkus <przemyslaw.wirkus@arm.com>
* aarch64-opc.c: Add ACCDATA_EL1 system register * aarch64-opc.c: Add ACCDATA_EL1 system register

View File

@ -121,6 +121,8 @@ const struct pru_opcode pru_opcodes[] =
OP_MATCH_JAL, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, unsigned_immed16_overflow}, OP_MATCH_JAL, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, unsigned_immed16_overflow},
{ "ldi", prui_ldi, "d,W", { "ldi", prui_ldi, "d,W",
OP_MATCH_LDI, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, unsigned_immed16_overflow}, 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, "", { "halt", prui_halt, "",
OP_MATCH_HALT, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, no_overflow}, OP_MATCH_HALT, OP_MASK_FMT2_OP | OP_MASK_SUBOP, 0, no_overflow},
{ "slp", prui_slp, "w", { "slp", prui_slp, "w",