https://sourceware.org/bugzilla/show_bug.cgi?id=33214
Bug ID: 33214
Summary: sparc LDM/STM/LDMA/STMA etc. FAIL on Solaris/SPARC
Product: binutils
Version: 2.46 (HEAD)
Status: NEW
Severity: normal
Priority: P2
Component: binutils
Assignee: unassigned at sourceware dot org
Reporter: ro at gcc dot gnu.org
CC: jose.marchesi at oracle dot com
Target Milestone: ---
Host: sparc*-sun-solaris2.11
Target: sparc*-sun-solaris2.11
Build: sparc*-sun-solaris2.11
Two gas tests FAIL on Solaris/SPARC (both 32 and 64-bit):
FAIL: sparc LDM/STM/LDMA/STMA
FAIL: sparc LDMF/STMF/LDMFA/STMFA
The problem is the same in both cases. For the first (gas/sparc/ldm-stm.d),
there's
regexp_diff match failure
regexp "^ 8: c7 88 60 66 ldmsh \[ %g1 \+ 0x66 \], %g3$"
line " 8: c7 88 60 66 ldmsh [ 0x66 + %g1 ], %g3"
i.e. the order of the operands is reversed.
This doesn't occur on Linux/SPARC.
Via side-by-side debugging of Solaris vs. Linux objdump, I find that in
sparc-dis.c (print_insn_sparc) at l.557 (i.e. once a matching insn has been
found), there's
$21 = {name = 0x1001f8500 "ldmsh", match = 3246923776, lose = 7347200,
args = 0x1001f8510 "[j+1],d", flags = 0, hwcaps = 0, hwcaps2 = 131072,
architecture = 16384}
on Solaris while Linux has
$11 = {name = 0x2e30a8 "ldmsh", match = 3246923776, lose = 7347200,
args = 0x2e30b0 "[1+j],d", flags = 0, hwcaps = 0, hwcaps2 = 131072,
architecture = 16384}
instead. So, the only difference is that args is reversed:
* Solaris: [j+1],d
* Linux: [1+j],d
It seems that compare_opcodes, which already has special code to prefer 1+i
over i+1, needs similar code for j (and maybe others, I cannot tell).
--
You are receiving this mail because:
You are on the CC list for the bug.