1/* AMD64 __mpn_lshift -- 2 Copyright 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 24 .text 25ENTRY (__mpn_lshift) 26 movq -8(%rsi,%rdx,8), %mm7 27 movd %ecx, %mm1 28 movl $64, %eax 29 subl %ecx, %eax 30 movd %eax, %mm0 31 movq %mm7, %mm3 32 psrlq %mm0, %mm7 33 movd %mm7, %rax 34 subq $2, %rdx 35 jl L(endo) 36 .p2align 2 37L(loop): 38 movq (%rsi,%rdx,8), %mm6 39 movq %mm6, %mm2 40 psrlq %mm0, %mm6 41 psllq %mm1, %mm3 42 por %mm6, %mm3 43 movq %mm3, 8(%rdi,%rdx,8) 44 je L(ende) 45 movq -8(%rsi,%rdx,8), %mm7 46 movq %mm7, %mm3 47 psrlq %mm0, %mm7 48 psllq %mm1, %mm2 49 por %mm7, %mm2 50 movq %mm2, (%rdi,%rdx,8) 51 subq $2, %rdx 52 jge L(loop) 53L(endo): 54 movq %mm3, %mm2 55L(ende): 56 psllq %mm1, %mm2 57 movq %mm2, (%rdi) 58 emms 59 ret 60END (__mpn_lshift) 61