Ciao Niels,

you are the author of this code.

Il 2020-06-07 21:48 Idigger Lee ha scritto:
Please update addaddmul_1msb0.asm to support ABI in mingw64.

While looking at this e-mail on gmp-bugs, I added DOS support and also reordered the branches around the exit code.
Do you agree with those changes?

--------8<-------------
*** /tmp/extdiff.X4CyBq/gmp-err.b03b3cb1ce98/mpn/x86_64/addaddmul_1msb0.asm 2020-11-16 21:41:15.000000000 +0100 --- /home/bodrato/src/gmp-err/mpn/x86_64/addaddmul_1msb0.asm 2020-10-29 04:37:12.369375684 +0100
*************** define(`u0',    `%r8')
*** 51,64 ****
--- 51,70 ----
  define(`v0',  `%r9')


  define(`bp', `%rbp')

+ ABI_SUPPORT(DOS64)
+ ABI_SUPPORT(STD64)
+
  ASM_START()
        TEXT
        ALIGN(16)
  PROLOGUE(mpn_addaddmul_1msb0)
+         FUNC_ENTRY(4)
+ IFDOS(`       mov     56(%rsp), %r8   ')
+ IFDOS(`       mov     64(%rsp), %r9   ')
        push    %r12
        push    %rbp

        lea     (ap,n,8), ap
        lea     (bp_param,n,8), bp
*************** L(top): mul     %r9
*** 105,170 ****
        mov     $0, R32(%r10)
        adc     %rdx, %r10
        add     $3, n
        js      L(top)

! L(end):       cmp     $1, R32(n)
!       ja      2f
!       jz      1f
!
!       mul     %r9
        add     %rax, %r12
-       mov     -16(ap), %rax
        adc     %rdx, %r10
!       mov     %r12, -24(rp)
        mul     %r8
        add     %rax, %r10
!       mov     -16(bp), %rax
        mov     $0, R32(%r11)
        adc     %rdx, %r11
        mul     %r9
        add     %rax, %r10
-       mov     -8(ap), %rax
        adc     %rdx, %r11
!       mov     %r10, -16(rp)
        mul     %r8
!       add     %rax, %r11
!       mov     -8(bp), %rax
        mov     $0, R32(%r12)
        adc     %rdx, %r12
        mul     %r9
!       add     %rax, %r11
!       adc     %rdx, %r12
!       mov     %r11, -8(rp)
!       mov     %r12, %rax
!       pop     %rbp
!       pop     %r12
!       ret
!
! 1:    mul     %r9
!       add     %rax, %r12
        mov     -8(ap), %rax
!       adc     %rdx, %r10
!       mov     %r12, -16(rp)
        mul     %r8
!       add     %rax, %r10
        mov     -8(bp), %rax
!       mov     $0, R32(%r11)
!       adc     %rdx, %r11
        mul     %r9
-       add     %rax, %r10
-       adc     %rdx, %r11
-       mov     %r10, -8(rp)
-       mov     %r11, %rax
-       pop     %rbp
-       pop     %r12
-       ret
-
- 2:    mul     %r9
        add     %rax, %r12
-       mov     %r12, -8(rp)
        adc     %rdx, %r10
        mov     %r10, %rax
!       pop     %rbp
        pop     %r12
        ret
  EPILOGUE()
--- 111,164 ----
        mov     $0, R32(%r10)
        adc     %rdx, %r10
        add     $3, n
        js      L(top)

! L(end):       mul     %r9
        add     %rax, %r12
        adc     %rdx, %r10
!       cmp     $1, R32(n)
!       ja      L(two)
!       jnz     L(nul)
!
! L(one):       mov     -8(ap), %rax
!       mov     %r12, -16(rp)
        mul     %r8
        add     %rax, %r10
!       mov     -8(bp), %rax
        mov     $0, R32(%r11)
        adc     %rdx, %r11
        mul     %r9
        add     %rax, %r10
        adc     %rdx, %r11
!       mov     %r10, -8(rp)
!       mov     %r11, %rax
!       jmp     L(ret)
!
! L(nul):       mov     -16(ap), %rax
!       mov     %r12, -24(rp)
        mul     %r8
!       add     %rax, %r10
!       mov     -16(bp), %rax
        mov     $0, R32(%r12)
        adc     %rdx, %r12
        mul     %r9
!       add     %rax, %r10
        mov     -8(ap), %rax
!       adc     %rdx, %r12
!       mov     %r10, -16(rp)
        mul     %r8
!       add     %rax, %r12
        mov     -8(bp), %rax
!       mov     $0, R32(%r10)
!       adc     %rdx, %r10
        mul     %r9
        add     %rax, %r12
        adc     %rdx, %r10
+
+ L(two):       mov     %r12, -8(rp)
        mov     %r10, %rax
! L(ret):       pop     %rbp
        pop     %r12
+       FUNC_EXIT()
        ret
  EPILOGUE()
--------8<-------------

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

Reply via email to