https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105090
Torbjorn SVENSSON <azoff at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |azoff at gcc dot gnu.org --- Comment #8 from Torbjorn SVENSSON <azoff at gcc dot gnu.org> --- r13-1006-g2005b9b888eeac078f2524b1521885f4b5453894 causes a small regression for gcc.target/arm/copysign_softfloat_1.c. With the arm-gnu-toolchain-13.3.rel1-x86_64-arm-none-eabi, I see that the "scan-assembler-times lsr 1" test is now failing on Cortex-A7 with -mfloat-abi=soft. Without the changeset above, this is the assembly: 0x00002a94 <+0>: stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} 0x00002a98 <+4>: sub sp, #12 0x00002a9a <+6>: ldr r4, [pc, #104] @ (0x2b04 <main+112>) 0x00002a9c <+8>: add.w r5, r4, #64 @ 0x40 0x00002aa0 <+12>: add.w r8, r4, #128 @ 0x80 0x00002aa4 <+16>: mov r9, r5 0x00002aa6 <+18>: ldr.w r3, [r4, #4]! 0x00002aaa <+22>: ldr.w r0, [r5, #4]! 0x00002aae <+26>: ldr.w r1, [r8, #4]! 0x00002ab2 <+30>: bfi r0, r3, #0, #31 0x00002ab6 <+34>: bl 0x28fc <__aeabi_fcmpeq> 0x00002aba <+38>: cbz r0, 0x2afe <main+106> 0x00002abc <+40>: cmp r4, r9 0x00002abe <+42>: bne.n 0x2aa6 <main+18> 0x00002ac0 <+44>: ldr r4, [pc, #68] @ (0x2b08 <main+116>) 0x00002ac2 <+46>: add.w r5, r4, #128 @ 0x80 0x00002ac6 <+50>: add.w r8, r4, #256 @ 0x100 0x00002aca <+54>: mov r9, r5 0x00002acc <+56>: ldrd r2, r3, [r4, #8]! 0x00002ad0 <+60>: ldrd r10, r11, [r5, #8]! 0x00002ad4 <+64>: mov r0, r2 0x00002ad6 <+66>: mov r1, r3 0x00002ad8 <+68>: strd r0, r1, [sp] 0x00002adc <+72>: ldr r6, [sp, #0] 0x00002ade <+74>: mov.w r12, r11, lsr #31 0x00002ae2 <+78>: ldrd r2, r3, [r8, #8]! 0x00002ae6 <+82>: bfi r1, r12, #31, #1 0x00002aea <+86>: mov r0, r6 0x00002aec <+88>: bl 0x2794 <__aeabi_dcmpeq> 0x00002af0 <+92>: cbz r0, 0x2afe <main+106> 0x00002af2 <+94>: cmp r4, r9 0x00002af4 <+96>: bne.n 0x2acc <main+56> 0x00002af6 <+98>: movs r0, #0 0x00002af8 <+100>: add sp, #12 0x00002afa <+102>: ldmia.w sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} 0x00002afe <+106>: bl 0x1794 <__wrap_abort> 0x00002b02 <+110>: nop 0x00002b04 <+112>: andmi r0, r0, r4 0x00002b08 <+116>: andmi r0, r0, r0, asr #1 With the above changeset, this is the assembly: 0x00002a94 <+0>: stmdb sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr} 0x00002a98 <+4>: sub sp, #12 0x00002a9a <+6>: ldr r4, [pc, #104] @ (0x2b04 <main+112>) 0x00002a9c <+8>: add.w r5, r4, #64 @ 0x40 0x00002aa0 <+12>: add.w r8, r4, #128 @ 0x80 0x00002aa4 <+16>: mov r9, r5 0x00002aa6 <+18>: ldr.w r3, [r4, #4]! 0x00002aaa <+22>: ldr.w r0, [r5, #4]! 0x00002aae <+26>: ldr.w r1, [r8, #4]! 0x00002ab2 <+30>: bfi r0, r3, #0, #31 0x00002ab6 <+34>: bl 0x28fc <__aeabi_fcmpeq> 0x00002aba <+38>: cbz r0, 0x2b00 <main+108> 0x00002abc <+40>: cmp r4, r9 0x00002abe <+42>: bne.n 0x2aa6 <main+18> 0x00002ac0 <+44>: ldr r4, [pc, #68] @ (0x2b08 <main+116>) 0x00002ac2 <+46>: add.w r5, r4, #128 @ 0x80 0x00002ac6 <+50>: add.w r8, r4, #256 @ 0x100 0x00002aca <+54>: mov r9, r5 0x00002acc <+56>: ldrd r2, r3, [r4, #8]! 0x00002ad0 <+60>: ldrd r10, r11, [r5, #8]! 0x00002ad4 <+64>: mov r1, r3 0x00002ad6 <+66>: mov r0, r2 0x00002ad8 <+68>: strd r0, r1, [sp] 0x00002adc <+72>: ldr r6, [sp, #0] 0x00002ade <+74>: mov r0, r11 0x00002ae0 <+76>: bfi r0, r1, #0, #31 0x00002ae4 <+80>: mov r7, r0 0x00002ae6 <+82>: mov r0, r6 0x00002ae8 <+84>: ldrd r2, r3, [r8, #8]! 0x00002aec <+88>: mov r1, r7 0x00002aee <+90>: bl 0x2794 <__aeabi_dcmpeq> 0x00002af2 <+94>: cbz r0, 0x2b00 <main+108> 0x00002af4 <+96>: cmp r4, r9 0x00002af6 <+98>: bne.n 0x2acc <main+56> 0x00002af8 <+100>: movs r0, #0 0x00002afa <+102>: add sp, #12 0x00002afc <+104>: ldmia.w sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc} 0x00002b00 <+108>: bl 0x1794 <__wrap_abort> 0x00002b04 <+112>: andmi r0, r0, r4 0x00002b08 <+116>: andmi r0, r0, r0, asr #1 As can be seen, the lsr is indeed removed (the testcase needs to be aligned with this change), but the updated main function is instead 2 bytes bigger. Is this intended?