#include "sysdep.h"
#include "asm-syntax.h"
#include "bp-sym.h"
#include "bp-asm.h"
#define PARMS LINKAGE+16
#define RES PARMS
#define S1 RES+PTR_SIZE
#define SIZE S1+PTR_SIZE
#define S2LIMB SIZE+4
#define res_ptr edi
#define s1_ptr esi
#define size ecx
#define s2_limb ebx
.text
ENTRY (BP_SYM (__mpn_addmul_1))
ENTER
pushl %edi
pushl %esi
pushl %ebp
pushl %ebx
movl RES(%esp), %res_ptr
movl S1(%esp), %s1_ptr
movl SIZE(%esp), %size
movl S2LIMB(%esp), %s2_limb
#if __BOUNDED_POINTERS__
shll $2, %size
CHECK_BOUNDS_BOTH_WIDE (%res_ptr, RES(%esp), %size)
CHECK_BOUNDS_BOTH_WIDE (%s1_ptr, S1(%esp), %size)
shrl $2, %size
#endif
leal (%res_ptr,%size,4), %res_ptr
leal (%s1_ptr,%size,4), %s1_ptr
negl %size
xorl %ebp, %ebp
ALIGN (3)
L(oop): adcl $0, %ebp
movl (%s1_ptr,%size,4), %eax
mull %s2_limb
addl %ebp, %eax
movl (%res_ptr,%size,4), %ebp
adcl $0, %edx
addl %eax, %ebp
movl %ebp, (%res_ptr,%size,4)
incl %size
movl %edx, %ebp
jnz L(oop)
adcl $0, %ebp
movl %ebp, %eax
popl %ebx
popl %ebp
popl %esi
popl %edi
LEAVE
ret
#undef size
END (BP_SYM (__mpn_addmul_1))