Blame sysdeps/x86_64/add_n.S

Packit Service 82fcde
/* x86-64 __mpn_add_n -- Add two limb vectors of the same length > 0 and store
Packit Service 82fcde
   sum in a third limb vector.
Packit Service 82fcde
   Copyright (C) 2006-2018 Free Software Foundation, Inc.
Packit Service 82fcde
   This file is part of the GNU MP Library.
Packit Service 82fcde
Packit Service 82fcde
   The GNU MP Library is free software; you can redistribute it and/or modify
Packit Service 82fcde
   it under the terms of the GNU Lesser General Public License as published by
Packit Service 82fcde
   the Free Software Foundation; either version 2.1 of the License, or (at your
Packit Service 82fcde
   option) any later version.
Packit Service 82fcde
Packit Service 82fcde
   The GNU MP Library is distributed in the hope that it will be useful, but
Packit Service 82fcde
   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
Packit Service 82fcde
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
Packit Service 82fcde
   License for more details.
Packit Service 82fcde
Packit Service 82fcde
   You should have received a copy of the GNU Lesser General Public License
Packit Service 82fcde
   along with the GNU MP Library; see the file COPYING.LIB.  If not,
Packit Service 82fcde
   see <http://www.gnu.org/licenses/>.  */
Packit Service 82fcde
Packit Service 82fcde
#include "sysdep.h"
Packit Service 82fcde
#include "asm-syntax.h"
Packit Service 82fcde
Packit Service 82fcde
#define rp	%rdi
Packit Service 82fcde
#define up	%rsi
Packit Service 82fcde
#define vp	%rdx
Packit Service 82fcde
#define n	%rcx
Packit Service 82fcde
#define cy	%r8
Packit Service 82fcde
Packit Service 82fcde
#ifndef func
Packit Service 82fcde
# define func __mpn_add_n
Packit Service 82fcde
# define ADCSBB adc
Packit Service 82fcde
#endif
Packit Service 82fcde
Packit Service 82fcde
	.text
Packit Service 82fcde
ENTRY (func)
Packit Service 82fcde
	xor	%r8, %r8
Packit Service 82fcde
	mov	(up), %r10
Packit Service 82fcde
	mov	(vp), %r11
Packit Service 82fcde
Packit Service 82fcde
	lea	-8(up,n,8), up
Packit Service 82fcde
	lea	-8(vp,n,8), vp
Packit Service 82fcde
	lea	-16(rp,n,8), rp
Packit Service 82fcde
	mov	%ecx, %eax
Packit Service 82fcde
	neg	n
Packit Service 82fcde
	and	$3, %eax
Packit Service 82fcde
	je	L(b00)
Packit Service 82fcde
	add	%rax, n		/* clear low rcx bits for jrcxz */
Packit Service 82fcde
	cmp	$2, %eax
Packit Service 82fcde
	jl	L(b01)
Packit Service 82fcde
	je	L(b10)
Packit Service 82fcde
Packit Service 82fcde
L(b11):	shr	%r8		/* set cy */
Packit Service 82fcde
	jmp	L(e11)
Packit Service 82fcde
Packit Service 82fcde
L(b00):	shr	%r8		/* set cy */
Packit Service 82fcde
	mov	%r10, %r8
Packit Service 82fcde
	mov	%r11, %r9
Packit Service 82fcde
	lea	4(n), n
Packit Service 82fcde
	jmp	L(e00)
Packit Service 82fcde
Packit Service 82fcde
L(b01):	shr	%r8		/* set cy */
Packit Service 82fcde
	jmp	L(e01)
Packit Service 82fcde
Packit Service 82fcde
L(b10):	shr	%r8		/* set cy */
Packit Service 82fcde
	mov	%r10, %r8
Packit Service 82fcde
	mov	%r11, %r9
Packit Service 82fcde
	jmp	L(e10)
Packit Service 82fcde
Packit Service 82fcde
L(end):	ADCSBB	%r11, %r10
Packit Service 82fcde
	mov	%r10, 8(rp)
Packit Service 82fcde
	mov	%ecx, %eax	/* clear eax, ecx contains 0 */
Packit Service 82fcde
	adc	%eax, %eax
Packit Service 82fcde
	ret
Packit Service 82fcde
Packit Service 82fcde
	.p2align 4
Packit Service 82fcde
L(top):
Packit Service 82fcde
	mov	-24(up,n,8), %r8
Packit Service 82fcde
	mov	-24(vp,n,8), %r9
Packit Service 82fcde
	ADCSBB	%r11, %r10
Packit Service 82fcde
	mov	%r10, -24(rp,n,8)
Packit Service 82fcde
L(e00):
Packit Service 82fcde
	mov	-16(up,n,8), %r10
Packit Service 82fcde
	mov	-16(vp,n,8), %r11
Packit Service 82fcde
	ADCSBB	%r9, %r8
Packit Service 82fcde
	mov	%r8, -16(rp,n,8)
Packit Service 82fcde
L(e11):
Packit Service 82fcde
	mov	-8(up,n,8), %r8
Packit Service 82fcde
	mov	-8(vp,n,8), %r9
Packit Service 82fcde
	ADCSBB	%r11, %r10
Packit Service 82fcde
	mov	%r10, -8(rp,n,8)
Packit Service 82fcde
L(e10):
Packit Service 82fcde
	mov	(up,n,8), %r10
Packit Service 82fcde
	mov	(vp,n,8), %r11
Packit Service 82fcde
	ADCSBB	%r9, %r8
Packit Service 82fcde
	mov	%r8, (rp,n,8)
Packit Service 82fcde
L(e01):
Packit Service 82fcde
	jrcxz	L(end)
Packit Service 82fcde
	lea	4(n), n
Packit Service 82fcde
	jmp	L(top)
Packit Service 82fcde
END (func)