~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/math-emu/shr_Xsig.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  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 Parker St, Ormond, Vic 3163,      |
 10  |                       Australia.  E-mail billm@jacobi.maths.monash.edu.au |
 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 the first arg (arg)           |
 18  |   right by the number of bits specified by the second arg (nr).           |
 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 works for 0..31 bits */
 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)

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php