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

TOMOYO Linux Cross Reference
Linux/arch/microblaze/lib/umodsi3.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 ] ~

Diff markup

Differences between /arch/microblaze/lib/umodsi3.S (Version linux-6.12-rc7) and /arch/m68k/lib/umodsi3.S (Version linux-5.11.22)


  1 /* SPDX-License-Identifier: GPL-2.0 */         !!   1 /* libgcc1 routines for 68000 w/o floating-point hardware.
  2 #include <linux/linkage.h>                     !!   2    Copyright (C) 1994, 1996, 1997, 1998 Free Software Foundation, Inc.
  3                                                     3 
  4 /*                                             !!   4 This file is part of GNU CC.
  5  * Unsigned modulo operation for 32 bit intege << 
  6  *      Input : op1 in Reg r5                  << 
  7  *              op2 in Reg r6                  << 
  8  *      Output: op1 mod op2 in Reg r3          << 
  9  */                                            << 
 10                                                     5 
 11         .text                                  !!   6 GNU CC is free software; you can redistribute it and/or modify it
 12         .globl  __umodsi3                      !!   7 under the terms of the GNU General Public License as published by the
 13         .type __umodsi3, @function             !!   8 Free Software Foundation; either version 2, or (at your option) any
 14         .ent __umodsi3                         !!   9 later version.
 15                                                !!  10 
 16 __umodsi3:                                     !!  11 In addition to the permissions in the GNU General Public License, the
 17         .frame  r1, 0, r15                     !!  12 Free Software Foundation gives you unlimited permission to link the
 18                                                !!  13 compiled version of this file with other programs, and to distribute
 19         addik   r1, r1, -12                    !!  14 those programs without any restriction coming from the use of this
 20         swi     r29, r1, 0                     !!  15 file.  (The General Public License restrictions do apply in other
 21         swi     r30, r1, 4                     !!  16 respects; for example, they cover modification of the file, and
 22         swi     r31, r1, 8                     !!  17 distribution when not linked into another program.)
 23                                                !!  18 
 24         beqi    r6, div_by_zero /* div_by_zero !!  19 This file is distributed in the hope that it will be useful, but
 25         beqid   r5, result_is_zero /* result i !!  20 WITHOUT ANY WARRANTY; without even the implied warranty of
 26         addik   r3, r0, 0 /* clear div */      !!  21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 27         addik   r30, r0, 0 /* clear mod */     !!  22 General Public License for more details. */
 28         addik   r29, r0, 32 /* initialize the  !!  23 
 29                                                !!  24 /* As a special exception, if you link this library with files
 30 /* check if r6 and r5 are equal /* if yes, ret !!  25    compiled with GCC to produce an executable, this does not cause
 31         rsub    r18, r5, r6                    !!  26    the resulting executable to be covered by the GNU General Public License.
 32         beqi    r18, return_here               !!  27    This exception does not however invalidate any other reasons why
 33                                                !!  28    the executable file might be covered by the GNU General Public License.  */
 34 /* check if (uns)r6 is greater than (uns)r5. i !!  29 
 35         xor     r18, r5, r6                    !!  30 /* Use this one for any 680x0; assumes no floating point hardware.
 36         bgeid   r18, 16                        !!  31    The trailing " '" appearing on some lines is for ANSI preprocessors.  Yuk.
 37         addik   r3, r5, 0                      !!  32    Some of this code comes from MINIX, via the folks at ericsson.
 38         blti    r6, return_here                !!  33    D. V. Henkel-Wallace (gumby@cygnus.com) Fete Bastille, 1992
 39         bri     $lcheckr6                      !!  34 */
 40         rsub    r18, r5, r6 /* microblazecmp * !!  35 #include <asm/export.h>
 41         bgti    r18, return_here               !!  36 /* These are predefined by new versions of GNU cpp.  */
 42                                                !!  37 
 43 /* if r6 [bit 31] is set, then return result a !!  38 #ifndef __USER_LABEL_PREFIX__
 44 $lcheckr6:                                     !!  39 #define __USER_LABEL_PREFIX__ _
 45         bgtid   r6, div0                       !!  40 #endif
 46         addik   r3, r0, 0                      !!  41 
 47         addik   r18, r0, 0x7fffffff            !!  42 #ifndef __REGISTER_PREFIX__
 48         and     r5, r5, r18                    !!  43 #define __REGISTER_PREFIX__
 49         and     r6, r6, r18                    !!  44 #endif
 50         brid    return_here                    !!  45 
 51         rsub    r3, r6, r5                     !!  46 #ifndef __IMMEDIATE_PREFIX__
 52 /* first part: try to find the first '1' in th !!  47 #define __IMMEDIATE_PREFIX__ #
 53 div0:                                          !!  48 #endif
 54         blti    r5, div2                       !!  49 
 55 div1:                                          !!  50 /* ANSI concatenation macros.  */
 56         add     r5, r5, r5 /* left shift logic !!  51 
 57         bgeid   r5, div1                       !!  52 #define CONCAT1(a, b) CONCAT2(a, b)
 58         addik   r29, r29, -1                   !!  53 #define CONCAT2(a, b) a ## b
 59 div2:                                          !!  54 
 60         /* left shift logical r5 get the '1' i !!  55 /* Use the right prefix for global labels.  */
 61         add     r5, r5, r5                     !!  56 
 62         addc    r3, r3, r3 /* move that bit in !!  57 #define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
 63         rsub    r31, r6, r3 /* try to subtract !!  58 
 64         blti    r31, mod_too_small             !!  59 /* Use the right prefix for registers.  */
 65         /* move the r31 to mod since the resul !!  60 
 66         or      r3, r0, r31                    !!  61 #define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
 67         addik   r30, r30, 1                    !!  62 
 68 mod_too_small:                                 !!  63 /* Use the right prefix for immediate values.  */
 69         addik   r29, r29, -1                   !!  64 
 70         beqi    r29, loop_end                  !!  65 #define IMM(x) CONCAT1 (__IMMEDIATE_PREFIX__, x)
 71         add     r30, r30, r30 /* shift in the  !!  66 
 72         bri     div2 /* div2 */                !!  67 #define d0 REG (d0)
 73 loop_end:                                      !!  68 #define d1 REG (d1)
 74         bri     return_here                    !!  69 #define d2 REG (d2)
 75 div_by_zero:                                   !!  70 #define d3 REG (d3)
 76 result_is_zero:                                !!  71 #define d4 REG (d4)
 77         or      r3, r0, r0 /* set result to 0  !!  72 #define d5 REG (d5)
 78 return_here:                                   !!  73 #define d6 REG (d6)
 79 /* restore values of csrs and that of r3 and t !!  74 #define d7 REG (d7)
 80         lwi     r29, r1, 0                     !!  75 #define a0 REG (a0)
 81         lwi     r30, r1, 4                     !!  76 #define a1 REG (a1)
 82         lwi     r31, r1, 8                     !!  77 #define a2 REG (a2)
 83         rtsd    r15, 8                         !!  78 #define a3 REG (a3)
 84         addik   r1, r1, 12                     !!  79 #define a4 REG (a4)
                                                   >>  80 #define a5 REG (a5)
                                                   >>  81 #define a6 REG (a6)
                                                   >>  82 #define fp REG (fp)
                                                   >>  83 #define sp REG (sp)
 85                                                    84 
 86 .size __umodsi3, . - __umodsi3                 !!  85         .text
 87 .end __umodsi3                                 !!  86         .proc
                                                   >>  87         .globl  SYM (__umodsi3)
                                                   >>  88 SYM (__umodsi3):
                                                   >>  89         movel   sp@(8), d1      /* d1 = divisor */
                                                   >>  90         movel   sp@(4), d0      /* d0 = dividend */
                                                   >>  91         movel   d1, sp@-
                                                   >>  92         movel   d0, sp@-
                                                   >>  93         jbsr    SYM (__udivsi3)
                                                   >>  94         addql   IMM (8), sp
                                                   >>  95         movel   sp@(8), d1      /* d1 = divisor */
                                                   >>  96 #if !(defined(__mcf5200__) || defined(__mcoldfire__))
                                                   >>  97         movel   d1, sp@-
                                                   >>  98         movel   d0, sp@-
                                                   >>  99         jbsr    SYM (__mulsi3)  /* d0 = (a/b)*b */
                                                   >> 100         addql   IMM (8), sp
                                                   >> 101 #else
                                                   >> 102         mulsl   d1,d0
                                                   >> 103 #endif
                                                   >> 104         movel   sp@(4), d1      /* d1 = dividend */
                                                   >> 105         subl    d0, d1          /* d1 = a - (a/b)*b */
                                                   >> 106         movel   d1, d0
                                                   >> 107         rts
                                                   >> 108         EXPORT_SYMBOL(__umodsi3)
                                                      

~ [ 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