The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/libkern/ia64/__divdi3.S

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 .file "__divdi3.s"
    2 
    3 // $FreeBSD: releng/8.3/sys/libkern/ia64/__divdi3.S 139815 2005-01-07 00:24:33Z imp $
    4 
    5 //-
    6 // Copyright (c) 2000, Intel Corporation
    7 // All rights reserved.
    8 //
    9 // Contributed 2/15/2000 by Marius Cornea, John Harrison, Cristina Iordache, 
   10 // Ted Kubaska, Bob Norin, and Shane Story of the Computational Software Lab, 
   11 // Intel Corporation.
   12 //
   13 // WARRANTY DISCLAIMER
   14 //
   15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   16 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
   17 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   18 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS 
   19 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
   20 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
   21 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
   22 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
   23 // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING
   24 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   25 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   26 //
   27 // Intel Corporation is the author of this code, and requests that all
   28 // problem reports or change requests be submitted to it directly at
   29 // http://developer.intel.com/opensource.
   30 //
   31 
   32 .section .text
   33 .proc __divdi3#
   34 .align 32
   35 .global __divdi3#
   36 .align 32
   37 
   38 // 64-bit signed integer divide
   39 
   40 __divdi3:
   41 
   42 { .mii
   43   alloc r31=ar.pfs,2,0,0,0
   44   nop.i 0
   45   nop.i 0;;
   46 } { .mmi
   47 
   48   // 64-BIT SIGNED INTEGER DIVIDE BEGINS HERE
   49 
   50   setf.sig f8=r32
   51   setf.sig f9=r33
   52   nop.i 0;;
   53 } { .mfb
   54   nop.m 0
   55   fcvt.xf f6=f8
   56   nop.b 0
   57 } { .mfb
   58   nop.m 0
   59   fcvt.xf f7=f9
   60   nop.b 0;;
   61 } { .mfi
   62   nop.m 0
   63   // Step (1)
   64   // y0 = 1 / b in f8
   65   frcpa.s1 f8,p6=f6,f7
   66   nop.i 0;;
   67 } { .mfi
   68   nop.m 0
   69   // Step (2)
   70   // e0 = 1 - b * y0 in f9
   71   (p6) fnma.s1 f9=f7,f8,f1
   72   nop.i 0
   73 } { .mfi
   74   nop.m 0
   75   // Step (3)
   76   // q0 = a * y0 in f10
   77   (p6) fma.s1 f10=f6,f8,f0
   78   nop.i 0;;
   79 } { .mfi
   80   nop.m 0
   81   // Step (4)
   82   // e1 = e0 * e0 in f11
   83   (p6) fma.s1 f11=f9,f9,f0
   84   nop.i 0
   85 } { .mfi
   86   nop.m 0
   87   // Step (5)
   88   // q1 = q0 + e0 * q0 in f10
   89   (p6) fma.s1 f10=f9,f10,f10
   90   nop.i 0;;
   91 } { .mfi
   92   nop.m 0
   93   // Step (6)
   94   // y1 = y0 + e0 * y0 in f8
   95   (p6) fma.s1 f8=f9,f8,f8
   96   nop.i 0;;
   97 } { .mfi
   98   nop.m 0
   99   // Step (7)
  100   // q2 = q1 + e1 * q1 in f9
  101   (p6) fma.s1 f9=f11,f10,f10
  102   nop.i 0;;
  103 } { .mfi
  104   nop.m 0
  105   // Step (8)
  106   // y2 = y1 + e1 * y1 in f8
  107   (p6) fma.s1 f8=f11,f8,f8
  108   nop.i 0;;
  109 } { .mfi
  110   nop.m 0
  111   // Step (9)
  112   // r2 = a - b * q2 in f10
  113   (p6) fnma.s1 f10=f7,f9,f6
  114   nop.i 0;;
  115 } { .mfi
  116   nop.m 0
  117   // Step (10)
  118   // q3 = q2 + r2 * y2 in f8
  119   (p6) fma.s1 f8=f10,f8,f9
  120   nop.i 0;;
  121 } { .mfb
  122   nop.m 0
  123   // Step (11)
  124   // q = trunc (q3)
  125   fcvt.fx.trunc.s1 f8=f8
  126   nop.b 0;;
  127 } { .mmi
  128   // quotient will be in r8 (if b != 0)
  129   getf.sig r8=f8
  130   nop.m 0
  131   nop.i 0;;
  132 }
  133 
  134   // 64-BIT SIGNED INTEGER DIVIDE ENDS HERE
  135 
  136 { .mmb
  137   nop.m 0
  138   nop.m 0
  139   br.ret.sptk b0;;
  140 }
  141 
  142 .endp __divdi3

Cache object: 2787c69ea96d1674003ae8858d002bb4


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.