https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80492

--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> ---
FYI, if the code is not executed in a loop but instead

void do_syscalls_noloop (void)
{
    syscall_7 (0, 8);
    syscall_7 (1, 9);
    syscall_7 (0, 8);
    syscall_7 (1, 9);
}

then the generated code is as expected:

do_syscalls_noloop:
        ldi r20,0        ;  5   *movhi/2        [length = 2]
        ldi r21,0
        ldi r24,lo8(8)   ;  6   *movhi/5        [length = 2]
        ldi r25,0
/* #APP */
        /* SYSCALL_7 r20 r24 */
/* #NOAPP */
        ldi r20,lo8(1)   ;  8   *movhi/5        [length = 2]
        ldi r21,0
        ldi r24,lo8(9)   ;  9   *movhi/5        [length = 2]
        ldi r25,0
/* #APP */
        /* SYSCALL_7 r20 r24 */
/* #NOAPP */
        ldi r20,0        ;  11  *movhi/2        [length = 2]
        ldi r21,0
        ldi r24,lo8(8)   ;  12  *movhi/5        [length = 2]
        ldi r25,0
/* #APP */
        /* SYSCALL_7 r20 r24 */
/* #NOAPP */
        ldi r20,lo8(1)   ;  14  *movhi/5        [length = 2]
        ldi r21,0
        ldi r24,lo8(9)   ;  15  *movhi/5        [length = 2]
        ldi r25,0
/* #APP */
        /* SYSCALL_7 r20 r24 */
/* #NOAPP */
        ret      ;  22  return  [length = 1]

Reply via email to