arm-none-eabi-g++ generate bad code on while loop
package: 5.3-2016q1 on cygwin.
FLags:
DBG= -O2
CPP_OPTS := -Wfatal-errors -Wextra -Wpedantic -Wconversion -Wshadow -Wall $(DBG) -std=c++11 -nostdlib -nostartfiles -fno-rtti -fno-exceptions -ffreestanding -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a -mtune=cortex-a7 -c
Class Static member:
u32 caMiniUart:
system_
while (!mu->lsr.
return mu->io.asReg;
}
where
typedef union mu_lsr_reg {
struct tag_mu_lsr_reg {
_R_ u32 rxready:1;
_R_ u32 overrun:1;
_R_ u32 dummy:3;
_R_ u32 txempty:1;
_R_ u32 txidle:1;
} asBit;
_RW_ u32 asReg;
} muLsrReg;
g++ generate the following assembler code .
_ZN10caMiniUart
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 0, uses_anonymous_args = 0
@ link register save eliminated.
mov r3, #20480
movt r3, 16161
ldrb r2, [r3, #84] @ zero_extendqisi2
tst r2, #1
bne .L58
.L57:
b .L57
.L58:
ldr r0, [r3, #64]
bx lr
.size _ZN10caMiniUart
I think the L57 label isn't in the right position : Must be 3 row up
gcc options error ?...sugest please...
Thanks.
Question information
- Language:
- English Edit question
- Status:
- Solved
- Assignee:
- No assignee Edit question
- Solved by:
- A.C.
- Solved:
- Last query:
- Last reply: