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

--- Comment #4 from Steven Bosscher <steven at gcc dot gnu.org> ---
Code looks pretty much the same for "test_ok" and "test_slow" since GCC 6 for
x86-64, and since GCC 7 for i686.

GCC 6.3 x86-64:
test_ok(float (*) [3], float, float, float, float, float):
        mulss   %xmm3, %xmm0
        movss   4(%rdi), %xmm6
        mulss   %xmm3, %xmm1
        mulss   %xmm3, %xmm2
        movss   12(%rdi), %xmm3
        movaps  %xmm0, %xmm5
        addss   %xmm4, %xmm1
        movss   (%rdi), %xmm0
        addss   %xmm4, %xmm5
        addss   %xmm4, %xmm2
        mulss   %xmm1, %xmm3
        mulss   %xmm5, %xmm0
        mulss   %xmm5, %xmm6
        mulss   8(%rdi), %xmm5
        addss   %xmm3, %xmm0
        movss   24(%rdi), %xmm3
        mulss   %xmm2, %xmm3
        addss   %xmm3, %xmm0
        movss   16(%rdi), %xmm3
        mulss   %xmm1, %xmm3
        mulss   20(%rdi), %xmm1
        addss   %xmm3, %xmm6
        movss   28(%rdi), %xmm3
        mulss   %xmm2, %xmm3
        mulss   32(%rdi), %xmm2
        addss   %xmm1, %xmm5
        addss   %xmm3, %xmm6
        addss   %xmm2, %xmm5
        addss   %xmm6, %xmm0
        addss   %xmm5, %xmm0
        ret
test_slow(mat3&, float, float, float, float, float):
        mulss   %xmm3, %xmm0
        mulss   %xmm3, %xmm1
        mulss   %xmm2, %xmm3
        movss   16(%rdi), %xmm2
        movaps  %xmm0, %xmm6
        addss   %xmm4, %xmm1
        movss   4(%rdi), %xmm0
        addss   %xmm4, %xmm6
        addss   %xmm3, %xmm4
        movss   (%rdi), %xmm3
        mulss   %xmm1, %xmm2
        mulss   %xmm6, %xmm0
        mulss   %xmm6, %xmm3
        mulss   8(%rdi), %xmm6
        addss   %xmm2, %xmm0
        movss   28(%rdi), %xmm2
        mulss   %xmm4, %xmm2
        addss   %xmm2, %xmm0
        movss   12(%rdi), %xmm2
        mulss   %xmm1, %xmm2
        mulss   20(%rdi), %xmm1
        addss   %xmm2, %xmm3
        movss   24(%rdi), %xmm2
        mulss   %xmm4, %xmm2
        mulss   32(%rdi), %xmm4
        addss   %xmm6, %xmm1
        addss   %xmm2, %xmm3
        addss   %xmm4, %xmm1
        addss   %xmm3, %xmm0
        addss   %xmm1, %xmm0
        ret


GCC 7.4 i686:
test_ok(float (*) [3], float, float, float, float, float):
        flds    20(%esp)
        flds    8(%esp)
        fmul    %st(1), %st
        movl    4(%esp), %eax
        fadds   24(%esp)
        flds    12(%esp)
        fmul    %st(2), %st
        fadds   24(%esp)
        fxch    %st(2)
        fmuls   16(%esp)
        fadds   24(%esp)
        flds    (%eax)
        fmul    %st(2), %st
        flds    12(%eax)
        fmul    %st(4), %st
        faddp   %st, %st(1)
        flds    24(%eax)
        fmul    %st(2), %st
        faddp   %st, %st(1)
        flds    4(%eax)
        fmul    %st(3), %st
        flds    16(%eax)
        fmul    %st(5), %st
        faddp   %st, %st(1)
        flds    28(%eax)
        fmul    %st(3), %st
        faddp   %st, %st(1)
        faddp   %st, %st(1)
        fxch    %st(2)
        fmuls   8(%eax)
        fxch    %st(3)
        fmuls   20(%eax)
        faddp   %st, %st(3)
        fmuls   32(%eax)
        faddp   %st, %st(2)
        faddp   %st, %st(1)
        ret
test_slow(mat3&, float, float, float, float, float):
        flds    20(%esp)
        flds    8(%esp)
        fmul    %st(1), %st
        movl    4(%esp), %eax
        fadds   24(%esp)
        flds    12(%esp)
        fmul    %st(2), %st
        fadds   24(%esp)
        fxch    %st(2)
        fmuls   16(%esp)
        fadds   24(%esp)
        flds    4(%eax)
        fmul    %st(2), %st
        flds    16(%eax)
        fmul    %st(4), %st
        faddp   %st, %st(1)
        flds    28(%eax)
        fmul    %st(2), %st
        faddp   %st, %st(1)
        flds    (%eax)
        fmul    %st(3), %st
        flds    12(%eax)
        fmul    %st(5), %st
        faddp   %st, %st(1)
        flds    24(%eax)
        fmul    %st(3), %st
        faddp   %st, %st(1)
        faddp   %st, %st(1)
        fxch    %st(2)
        fmuls   8(%eax)
        fxch    %st(3)
        fmuls   20(%eax)
        faddp   %st, %st(3)
        fmuls   32(%eax)
        faddp   %st, %st(2)
        faddp   %st, %st(1)
        ret

Reply via email to