NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-arm/55854: bogus thumb code in bswap32



>Number:         55854
>Category:       port-arm
>Synopsis:       bogus thumb code in bswap32
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    port-arm-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Dec 09 03:00:00 +0000 2020
>Originator:     David A. Holland
>Release:        NetBSD 9.99.75 (20201208)
>Organization:
>Environment:
System: n/a
Architecture: arm
Machine: arm
>Description:

I found this in byte_swap_4.S:

#ifdef _ARM_ARCH_6
   :
#elif !defined(__thumb__)
   :
#else
        movs    r3, #16
        lsls    r1, r0, #8              /* d.c.b.a -> c.b.a.0 /*
        lsrs    r0, r0, #8              /* d.c.b.a -> 0.d.c.b */
        rors    r1, r3                  /* c.b.a.0 -> a.0.c.b */
        rors    r0, r3                  /* 0.d.c.b -> c.b.0.d */
        lsrs    r1, r1, #8              /* a.0.c.b -> 0.a.0.c */
        lsls    r1, r1, #8              /* 0.a.0.c -> a.0.c.0 */
        lsls    r0, r0, #8              /* c.b.0.d -> b.0.d.0 */
        lsrs    r0, r0, #8              /* b.0.d.0 -> 0.b.0.d */
        orrs    r0, r0, r1              /* a.0.c.0 | 0.b.0.d -> a.b.c.d */
#endif

Note the comment delimiter at the end of the second line; that
silently comments out the third line, which according to the byte flow
comments (which I just went over to change [1-4] to [a-d], so I'm
pretty sure they're right) makes the code wrong.

It's been this way since the thumb version was first committed in
2013. Likely as not it's just a typo, but...

Is the thumb code actually used/tested at all? Enquiring minds would
like to know.

>How-To-Repeat:

Code inspection.

>Fix:
apply bswap16 to the comment delimiter :-)



Home | Main Index | Thread Index | Old Index