1 /* SPDX-License-Identifier: GPL-2.0 */ 2 .file "shr_Xsig.S" 3 /*-------------------------------------------- 4 | shr_Xsig.S 5 | 6 | 12 byte right shift function 7 | 8 | Copyright (C) 1992,1994,1995 9 | W. Metzenthen, 22 Par 10 | Australia. E-mail bi 11 | 12 | Call from C as: 13 | void shr_Xsig(Xsig *arg, unsigned nr) 14 | 15 | Extended shift right function. 16 | Fastest for small shifts. 17 | Shifts the 12 byte quantity pointed to by 18 | right by the number of bits specified by 19 | 20 +-------------------------------------------- 21 22 #include "fpu_emu.h" 23 24 .text 25 SYM_FUNC_START(shr_Xsig) 26 push %ebp 27 movl %esp,%ebp 28 pushl %esi 29 movl PARAM2,%ecx 30 movl PARAM1,%esi 31 cmpl $32,%ecx /* shrd only w 32 jnc L_more_than_31 33 34 /* less than 32 bits */ 35 pushl %ebx 36 movl (%esi),%eax /* lsl */ 37 movl 4(%esi),%ebx /* midl */ 38 movl 8(%esi),%edx /* msl */ 39 shrd %cl,%ebx,%eax 40 shrd %cl,%edx,%ebx 41 shr %cl,%edx 42 movl %eax,(%esi) 43 movl %ebx,4(%esi) 44 movl %edx,8(%esi) 45 popl %ebx 46 popl %esi 47 leave 48 RET 49 50 L_more_than_31: 51 cmpl $64,%ecx 52 jnc L_more_than_63 53 54 subb $32,%cl 55 movl 4(%esi),%eax /* midl */ 56 movl 8(%esi),%edx /* msl */ 57 shrd %cl,%edx,%eax 58 shr %cl,%edx 59 movl %eax,(%esi) 60 movl %edx,4(%esi) 61 movl $0,8(%esi) 62 popl %esi 63 leave 64 RET 65 66 L_more_than_63: 67 cmpl $96,%ecx 68 jnc L_more_than_95 69 70 subb $64,%cl 71 movl 8(%esi),%eax /* msl */ 72 shr %cl,%eax 73 xorl %edx,%edx 74 movl %eax,(%esi) 75 movl %edx,4(%esi) 76 movl %edx,8(%esi) 77 popl %esi 78 leave 79 RET 80 81 L_more_than_95: 82 xorl %eax,%eax 83 movl %eax,(%esi) 84 movl %eax,4(%esi) 85 movl %eax,8(%esi) 86 popl %esi 87 leave 88 RET 89 SYM_FUNC_END(shr_Xsig)
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.