Ciao Niels,

Il 2021-10-05 20:56 ni...@lysator.liu.se ha scritto:
Marco Bodrato <bodr...@mail.dm.unipi.it> writes:
        mov     %r11, -16(rp)
        mov     %r10, %r11
        jmp     L(one)

I had hoped this jump and preceding instructions could be eliminated, to
get a structure like

        ja      L(two)
        jz      L(one)

L(nul): (no jumps to this label left)
        ...

But might need other move instructions, to get the right data into the
right registers?

Maybe with a couple of move with computed address, and with the same value in r10 and r11 we can get rid of the jump.
The difference, wrt the last code I sent, follows.

***************
*** 122,135 ****
        cmp     $1, R32(n)
        ja      L(two)
!       jnz     L(nul)
!
!       mov     -8(ap), %rax
!       mov     %r11, -16(rp)
        mov     %r10, %r11
!       jmp     L(one)

! L(nul):       mov     -16(ap), %rax
!       mov     %r11, -24(rp)
!       mul     %r8
        add     %rax, %r10
        mov     -16(bp), %rax
--- 122,131 ----
        cmp     $1, R32(n)
        ja      L(two)
!       mov     -16(ap,n,8), %rax
!       mov     %r11, -24(rp,n,8)
        mov     %r10, %r11
!       jz      L(one)

! L(nul):       mul     %r8
        add     %rax, %r10
        mov     -16(bp), %rax

So I think your version is an improvement as is, and perhaps not worth
the effort to try to eliminate a few more instructions if this rather
obscure function.

I agree. Let's choose between the two last versions, and I'll push it.

Ĝis,
m
_______________________________________________
gmp-devel mailing list
gmp-devel@gmplib.org
https://gmplib.org/mailman/listinfo/gmp-devel

Reply via email to