/* x86-64 __mpn_rshift --
   Copyright (C) 2007-2014 Free Software Foundation, Inc.
   This file is part of the GNU MP Library.

   The GNU MP Library is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published by
   the Free Software Foundation; either version 2.1 of the License, or (at your
   option) any later version.

   The GNU MP Library is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
   License for more details.

   You should have received a copy of the GNU Lesser General Public License
   along with the GNU MP Library; see the file COPYING.LIB.  If not,
   see <http://www.gnu.org/licenses/>.  */

#include "sysdep.h"
#include "asm-syntax.h"

#define rp	%rdi
#define up	%rsi
#define n	%rdx
#define cnt	%cl

	.text
ENTRY (__mpn_rshift)
	mov	%edx, %eax
	and	$3, %eax
	jne	L(nb00)
L(b00):	/* n = 4, 8, 12, ... */
	mov	(up), %r10
	mov	8(up), %r11
	xor	%eax, %eax
	shrd	%cl, %r10, %rax
	mov	16(up), %r8
	lea	8(up), up
	lea	-24(rp), rp
	sub	$4, n
	jmp	L(00)

L(nb00):/* n = 1, 5, 9, ... */
	cmp	$2, %eax
	jae	L(nb01)
L(b01):	mov	(up), %r9
	xor	%eax, %eax
	shrd	%cl, %r9, %rax
	sub	$2, n
	jb	L(le1)
	mov	8(up), %r10
	mov	16(up), %r11
	lea	16(up), up
	lea	-16(rp), rp
	jmp	L(01)
L(le1): shr	%cl, %r9
	mov	%r9, (rp)
	ret

L(nb01):/* n = 2, 6, 10, ... */
	jne	L(b11)
L(b10):	mov	(up), %r8
	mov	8(up), %r9
	xor	%eax, %eax
	shrd	%cl, %r8, %rax
	sub	$3, n
	jb	L(le2)
	mov	16(up), %r10
	lea	24(up), up
	lea	-8(rp), rp
	jmp	L(10)
L(le2): shrd	%cl, %r9, %r8
	mov	%r8, (rp)
	shr	%cl, %r9
	mov	%r9, 8(rp)
	ret

	.p2align 4
L(b11):	/* n = 3, 7, 11, ... */
	mov	(up), %r11
	mov	8(up), %r8
	xor	%eax, %eax
	shrd	%cl, %r11, %rax
	mov	16(up), %r9
	lea	32(up), up
	sub	$4, n
	jb	L(end)

	.p2align 4
L(top):	shrd	%cl, %r8, %r11
	mov	-8(up), %r10
	mov	%r11, (rp)
L(10):	shrd	%cl, %r9, %r8
	mov	(up), %r11
	mov	%r8, 8(rp)
L(01):	shrd	%cl, %r10, %r9
	mov	8(up), %r8
	mov	%r9, 16(rp)
L(00):	shrd	%cl, %r11, %r10
	mov	16(up), %r9
	mov	%r10, 24(rp)
	add	$32, up
	lea	32(rp), rp
	sub	$4, n
	jnc	L(top)

L(end):	shrd	%cl, %r8, %r11
	mov	%r11, (rp)
	shrd	%cl, %r9, %r8
	mov	%r8, 8(rp)
	shr	%cl, %r9
	mov	%r9, 16(rp)
	ret
END (__mpn_rshift)
