http://sourceware.org/bugzilla/show_bug.cgi?id=13215

             Bug #: 13215
           Summary: ARM Cortex M3 strexh strexb instructions with same
                    registers generates error
           Product: binutils
           Version: 2.21
            Status: NEW
          Severity: critical
          Priority: P2
         Component: gas
        AssignedTo: unassig...@sources.redhat.com
        ReportedBy: hazelnu...@gmail.com
    Classification: Unclassified


Created attachment 5939
  --> http://sourceware.org/bugzilla/attachment.cgi?id=5939
example of ARM provided code that makes use of strexh strexb with same
registers

In gas version 2.21.53, when compiling for the Cortex-M3 with -mcpu=cortex-m3
-march=armv7-m, the following instructions generate assembler errors:

strexh r0, r0, [r1]
strexb r0, r0, [r1]

The error messages are:
Error: registers may not be the same -- `strexh r0,r0,[r1]'
Error: registers may not be the same -- `strexb r0,r0,[r1]'

However, according to the ARM documentation of STREX for the Cortex M3 [0],
only the word sized (32-bit) version of the instruction strex has the
restriction that the three registers be unique:

for STREX, Rd must be different from both Rt and Rn

This problem shows up, for example, when trying to compile vendor provided
peripheral libraries that make use of CMSIS.  In particular, the core_cm3.[ch]
of CMSIS v1.3, and core_cmInstr.h of CMSIS v2.0 have all of these instructions.
 Curiously, even strex r0, r0, [r1] shows up in CMSIS, even though this is
explicitly restricted in [0].  So perhaps even some of the CMSIS code is
breaking the specification of the ARM documentation, not sure.

[0] --
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0552a/BABFFBJB.html

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.

_______________________________________________
bug-binutils mailing list
bug-binutils@gnu.org
https://lists.gnu.org/mailman/listinfo/bug-binutils

Reply via email to