1/* AMD64 __mpn_rshift -- 2 Copyright (C) 2004, 2006 Free Software Foundation, Inc. 3 This file is part of the GNU MP Library. 4 5 The GNU MP Library is free software; you can redistribute it and/or modify 6 it under the terms of the GNU Lesser General Public License as published by 7 the Free Software Foundation; either version 2.1 of the License, or (at your 8 option) any later version. 9 10 The GNU MP Library is distributed in the hope that it will be useful, but 11 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 12 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 13 License for more details. 14 15 You should have received a copy of the GNU Lesser General Public License 16 along with the GNU MP Library; see the file COPYING.LIB. If not, write to 17 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 18 MA 02111-1307, USA. */ 19 20#include "sysdep.h" 21#include "asm-syntax.h" 22 23 .text 24ENTRY (__mpn_rshift) 25 movq (%rsi), %mm7 26 movd %ecx, %mm1 27 movl $64, %eax 28 subl %ecx, %eax 29 movd %eax, %mm0 30 movq %mm7, %mm3 31 psllq %mm0, %mm7 32 movd %mm7, %rax 33 leaq (%rsi,%rdx,8), %rsi 34 leaq (%rdi,%rdx,8), %rdi 35 negq %rdx 36 addq $2, %rdx 37 jg L(endo) 38 .p2align 2 39L(loop): 40 movq -8(%rsi,%rdx,8), %mm6 41 movq %mm6, %mm2 42 psllq %mm0, %mm6 43 psrlq %mm1, %mm3 44 por %mm6, %mm3 45 movq %mm3, -16(%rdi,%rdx,8) 46 je L(ende) 47 movq (%rsi,%rdx,8), %mm7 48 movq %mm7, %mm3 49 psllq %mm0, %mm7 50 psrlq %mm1, %mm2 51 por %mm7, %mm2 52 movq %mm2, -8(%rdi,%rdx,8) 53 addq $2, %rdx 54 jle L(loop) 55L(endo): 56 movq %mm3, %mm2 57L(ende): 58 psrlq %mm1, %mm2 59 movq %mm2, -8(%rdi) 60 emms 61 ret 62END (__mpn_rshift) 63