1/* sparc rshift 2 * 3 * Copyright (C) 1995, 1996, 1998, 4 * 2001, 2002 Free Software Foundation, Inc. 5 * 6 * This file is part of Libgcrypt. 7 * 8 * Libgcrypt is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU Lesser General Public License as 10 * published by the Free Software Foundation; either version 2.1 of 11 * the License, or (at your option) any later version. 12 * 13 * Libgcrypt is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU Lesser General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public 19 * License along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 21 */ 22 23! INPUT PARAMETERS 24! res_ptr %o0 25! src_ptr %o1 26! size %o2 27! cnt %o3 28 29#include "sysdep.h" 30 31 .text 32 .align 4 33 .global C_SYMBOL_NAME(_gcry_mpih_rshift) 34C_SYMBOL_NAME(_gcry_mpih_rshift): 35 ld [%o1],%g2 ! load first limb 36 sub %g0,%o3,%o5 ! negate shift count 37 add %o2,-1,%o2 38 andcc %o2,4-1,%g4 ! number of limbs in first loop 39 sll %g2,%o5,%g1 ! compute function result 40 be L0 ! if multiple of 4 limbs, skip first loop 41 st %g1,[%sp+80] 42 43 sub %o2,%g4,%o2 ! adjust count for main loop 44 45Loop0: ld [%o1+4],%g3 46 add %o0,4,%o0 47 add %o1,4,%o1 48 addcc %g4,-1,%g4 49 srl %g2,%o3,%o4 50 sll %g3,%o5,%g1 51 mov %g3,%g2 52 or %o4,%g1,%o4 53 bne Loop0 54 st %o4,[%o0-4] 55 56L0: tst %o2 57 be Lend 58 nop 59 60Loop: ld [%o1+4],%g3 61 add %o0,16,%o0 62 addcc %o2,-4,%o2 63 srl %g2,%o3,%o4 64 sll %g3,%o5,%g1 65 66 ld [%o1+8],%g2 67 srl %g3,%o3,%g4 68 or %o4,%g1,%o4 69 st %o4,[%o0-16] 70 sll %g2,%o5,%g1 71 72 ld [%o1+12],%g3 73 srl %g2,%o3,%o4 74 or %g4,%g1,%g4 75 st %g4,[%o0-12] 76 sll %g3,%o5,%g1 77 78 ld [%o1+16],%g2 79 srl %g3,%o3,%g4 80 or %o4,%g1,%o4 81 st %o4,[%o0-8] 82 sll %g2,%o5,%g1 83 84 add %o1,16,%o1 85 or %g4,%g1,%g4 86 bne Loop 87 st %g4,[%o0-4] 88 89Lend: srl %g2,%o3,%g2 90 st %g2,[%o0-0] 91 retl 92 ld [%sp+80],%o0 93 94