ramp 0.7.0

A high-performance multiple-precision arithmetic library
Documentation
    .text
    .file "addmul_1.S"

#define wp %rdi
#define xp %rsi
#define n_param %edx
#define n %r11d
#define v %rcx

    .section .text.ramp_addmul_1,"ax",@progbits
    .globl ramp_addmul_1
    .align 16, 0x90
    .type ramp_addmul_1,@function
ramp_addmul_1:
    .cfi_startproc

#define L(lbl) .LADDMUL_ ## lbl

    mov n_param, n # Move n away from %rdx

    mov (xp), %rax
    mul v
    add %rax, (wp)
    adc $0, %rdx
    mov %rdx, %r8

    dec n
    jz L(ret)
    add $8, wp
    add $8, xp
    .align 16
L(top):
    mov (xp), %rax
    mul v
    add %r8, %rax
    adc $0, %rdx
    mov %rdx, %r8
    add %rax, (wp)
    adc $0, %r8

    add $8, wp
    add $8, xp
    dec n
    jnz L(top)
L(ret):
    mov %r8, %rax
    ret
L(tmp):
    .size ramp_addmul_1, L(tmp) - ramp_addmul_1
    .cfi_endproc

    .section .text.ramp_submul_1,"ax",@progbits
    .globl ramp_submul_1
    .align 16, 0x90
    .type ramp_submul_1,@function
ramp_submul_1:
    .cfi_startproc

#undef  L
#define L(lbl) .LSUBMUL_ ## lbl

    mov n_param, n # Move n away from %rdx

    mov (xp), %rax
    mul v
    sub %rax, (wp)
    adc $0, %rdx
    mov %rdx, %r8

    dec n
    jz L(ret)
    add $8, wp
    add $8, xp
    .align 16
L(top):
    mov (xp), %rax
    mul v
    add %r8, %rax
    adc $0, %rdx
    mov %rdx, %r8
    sub %rax, (wp)
    adc $0, %r8

    add $8, wp
    add $8, xp
    dec n
    jnz L(top)
L(ret):
    mov %r8, %rax
    ret
L(tmp):
    .size ramp_submul_1, L(tmp) - ramp_submul_1
    .cfi_endproc