Hi,

It seems to me that both GCC 6.3 and 6.4 mis-compiles
arch/arm/mach-imx/syscounter.c.

I'm attaching two files, bad.txt is the original syscounter.c and
good.txt is the one
with the following patch.

diff --git a/arch/arm/mach-imx/syscounter.c b/arch/arm/mach-imx/syscounter.c
index 9290918dca..30ed0109a2 100644
--- a/arch/arm/mach-imx/syscounter.c
+++ b/arch/arm/mach-imx/syscounter.c
@@ -82,7 +82,7 @@ unsigned long long get_ticks(void)
 {
        unsigned long long now;

-       asm("mrrc p15, 0, %Q0, %R0, c14" : "=r" (now));
+       asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (now));

        gd->arch.tbl = (unsigned long)(now & 0xffffffff);
        gd->arch.tbu = (unsigned long)(now >> 32);


The target code is the while loop in the __udelay.
void __udelay(unsigned long usec)
{
    unsigned long long tmp;
    ulong tmo;

    tmo = us_to_tick(usec);
    tmp = get_ticks() + tmo; /* get current timestamp */

    while (get_ticks() < tmp) /* loop till event */
        /*NOP*/;
}


Here is the mis compiled asm from the above code (whole function is
attached as bad.txt)

  88: 428b      cmp r3, r1
  8a: f8ce 20a4 str.w r2, [lr, #164] ; 0xa4
  8e: bf08      it eq
  90: 4282      cmpeq r2, r0
  92: f8ce 30a0 str.w r3, [lr, #160] ; 0xa0
  96: d3f7      bcc.n 88 <__udelay+0x88>

Note that the last bcc.n to 88 and we don't see mrrc.

This seems to be that both get_ticks() are inlined and "mrrc"s are
duplicated in the
__udealy() and GCC sees it as an opportunity to optimize out.

GCC 5 and 8 seems to work fine.  Unfortunately I don't have GCC 7 ATM so no
idea how it compiles.

Does anyone see this?
-- 
            yashi
Disassembly of section .text.__udelay:

00000000 <__udelay>:
   0:   e92d 4cf0       stmdb   sp!, {r4, r5, r6, r7, sl, fp, lr}
   4:   ee1e 1f10       mrc     15, 0, r1, cr14, cr0, {0}
   8:   f244 243f       movw    r4, #16959      ; 0x423f
   c:   f2c0 040f       movt    r4, #15
  10:   2500            movs    r5, #0
  12:   f243 4edb       movw    lr, #13531      ; 0x34db
  16:   fbe1 4500       umlal   r4, r5, r1, r0
  1a:   f2cd 7eb6       movt    lr, #55222      ; 0xd7b6
  1e:   f64d 6c82       movw    ip, #56962      ; 0xde82
  22:   f2c4 3c1b       movt    ip, #17179      ; 0x431b
  26:   2300            movs    r3, #0
  28:   fba4 670e       umull   r6, r7, r4, lr
  2c:   4629            mov     r1, r5
  2e:   2500            movs    r5, #0
  30:   2600            movs    r6, #0
  32:   fba4 ab0c       umull   sl, fp, r4, ip
  36:   fb0e 7205       mla     r2, lr, r5, r7
  3a:   fb0c bb05       mla     fp, ip, r5, fp
  3e:   2500            movs    r5, #0
  40:   fbee 2301       umlal   r2, r3, lr, r1
  44:   46ce            mov     lr, r9
  46:   eb1a 0a02       adds.w  sl, sl, r2
  4a:   eb4b 0b03       adc.w   fp, fp, r3
  4e:   459b            cmp     fp, r3
  50:   f64d 6382       movw    r3, #56962      ; 0xde82
  54:   f2c4 331b       movt    r3, #17179      ; 0x431b
  58:   465c            mov     r4, fp
  5a:   bf08            it      eq
  5c:   4592            cmpeq   sl, r2
  5e:   fbe3 4501       umlal   r4, r5, r3, r1
  62:   ec51 0f0e       mrrc    15, 0, r0, r1, cr14
  66:   bf2c            ite     cs
  68:   2700            movcs   r7, #0
  6a:   2701            movcc   r7, #1
  6c:   f8c9 00a4       str.w   r0, [r9, #164]  ; 0xa4
  70:   19a4            adds    r4, r4, r6
  72:   4602            mov     r2, r0
  74:   417d            adcs    r5, r7
  76:   f8c9 10a0       str.w   r1, [r9, #160]  ; 0xa0
  7a:   0ca4            lsrs    r4, r4, #18
  7c:   460b            mov     r3, r1
  7e:   ea44 3485       orr.w   r4, r4, r5, lsl #14
  82:   1900            adds    r0, r0, r4
  84:   f141 0100       adc.w   r1, r1, #0
  88:   428b            cmp     r3, r1
  8a:   f8ce 20a4       str.w   r2, [lr, #164]  ; 0xa4
  8e:   bf08            it      eq
  90:   4282            cmpeq   r2, r0
  92:   f8ce 30a0       str.w   r3, [lr, #160]  ; 0xa0
  96:   d3f7            bcc.n   88 <__udelay+0x88>
  98:   e8bd 8cf0       ldmia.w sp!, {r4, r5, r6, r7, sl, fp, pc}
Disassembly of section .text.__udelay:

00000000 <__udelay>:
   0:   e92d 4cf0       stmdb   sp!, {r4, r5, r6, r7, sl, fp, lr}
   4:   ee1e 1f10       mrc     15, 0, r1, cr14, cr0, {0}
   8:   f244 243f       movw    r4, #16959      ; 0x423f
   c:   f2c0 040f       movt    r4, #15
  10:   2500            movs    r5, #0
  12:   f243 4edb       movw    lr, #13531      ; 0x34db
  16:   fbe1 4500       umlal   r4, r5, r1, r0
  1a:   f2cd 7eb6       movt    lr, #55222      ; 0xd7b6
  1e:   f64d 6c82       movw    ip, #56962      ; 0xde82
  22:   f2c4 3c1b       movt    ip, #17179      ; 0x431b
  26:   2300            movs    r3, #0
  28:   f64d 6082       movw    r0, #56962      ; 0xde82
  2c:   f2c4 301b       movt    r0, #17179      ; 0x431b
  30:   fba4 670e       umull   r6, r7, r4, lr
  34:   4629            mov     r1, r5
  36:   2500            movs    r5, #0
  38:   fba4 ab0c       umull   sl, fp, r4, ip
  3c:   fb0e 7205       mla     r2, lr, r5, r7
  40:   fb0c bb05       mla     fp, ip, r5, fp
  44:   2500            movs    r5, #0
  46:   fbee 2301       umlal   r2, r3, lr, r1
  4a:   eb1a 0a02       adds.w  sl, sl, r2
  4e:   eb4b 0b03       adc.w   fp, fp, r3
  52:   459b            cmp     fp, r3
  54:   465c            mov     r4, fp
  56:   bf08            it      eq
  58:   4592            cmpeq   sl, r2
  5a:   fbe0 4501       umlal   r4, r5, r0, r1
  5e:   f04f 0200       mov.w   r2, #0
  62:   bf2c            ite     cs
  64:   2300            movcs   r3, #0
  66:   2301            movcc   r3, #1
  68:   4620            mov     r0, r4
  6a:   4629            mov     r1, r5
  6c:   ec55 4f0e       mrrc    15, 0, r4, r5, cr14
  70:   1812            adds    r2, r2, r0
  72:   f8c9 40a4       str.w   r4, [r9, #164]  ; 0xa4
  76:   414b            adcs    r3, r1
  78:   f8c9 50a0       str.w   r5, [r9, #160]  ; 0xa0
  7c:   0c92            lsrs    r2, r2, #18
  7e:   4649            mov     r1, r9
  80:   ea42 3283       orr.w   r2, r2, r3, lsl #14
  84:   18a4            adds    r4, r4, r2
  86:   f145 0500       adc.w   r5, r5, #0
  8a:   ec53 2f0e       mrrc    15, 0, r2, r3, cr14
  8e:   42ab            cmp     r3, r5
  90:   f8c1 20a4       str.w   r2, [r1, #164]  ; 0xa4
  94:   bf08            it      eq
  96:   42a2            cmpeq   r2, r4
  98:   f8c1 30a0       str.w   r3, [r1, #160]  ; 0xa0
  9c:   d3f5            bcc.n   8a <__udelay+0x8a>
  9e:   e8bd 8cf0       ldmia.w sp!, {r4, r5, r6, r7, sl, fp, pc}
  a2:   bf00            nop
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to