166633Sdfr.file "__divdi3.s" 266633Sdfr 366633Sdfr// $FreeBSD$ 4139815Simp 5139815Simp//- 666633Sdfr// Copyright (c) 2000, Intel Corporation 766633Sdfr// All rights reserved. 866633Sdfr// 966633Sdfr// Contributed 2/15/2000 by Marius Cornea, John Harrison, Cristina Iordache, 1066633Sdfr// Ted Kubaska, Bob Norin, and Shane Story of the Computational Software Lab, 1166633Sdfr// Intel Corporation. 1266633Sdfr// 1366633Sdfr// WARRANTY DISCLAIMER 1466633Sdfr// 1566633Sdfr// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1666633Sdfr// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 1766633Sdfr// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 1866633Sdfr// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL OR ITS 1966633Sdfr// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 2066633Sdfr// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 2166633Sdfr// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2266633Sdfr// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 2366633Sdfr// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY OR TORT (INCLUDING 2466633Sdfr// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 2566633Sdfr// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2666633Sdfr// 2766633Sdfr// Intel Corporation is the author of this code, and requests that all 2866633Sdfr// problem reports or change requests be submitted to it directly at 2966633Sdfr// http://developer.intel.com/opensource. 3066633Sdfr// 3166633Sdfr 3266633Sdfr.section .text 3366633Sdfr.proc __divdi3# 3466633Sdfr.align 32 3566633Sdfr.global __divdi3# 3666633Sdfr.align 32 3766633Sdfr 3866633Sdfr// 64-bit signed integer divide 3966633Sdfr 4066633Sdfr__divdi3: 4166633Sdfr 4266633Sdfr{ .mii 4366633Sdfr alloc r31=ar.pfs,2,0,0,0 4466633Sdfr nop.i 0 4566633Sdfr nop.i 0;; 4666633Sdfr} { .mmi 4766633Sdfr 4866633Sdfr // 64-BIT SIGNED INTEGER DIVIDE BEGINS HERE 4966633Sdfr 5066633Sdfr setf.sig f8=r32 5166633Sdfr setf.sig f9=r33 5266633Sdfr nop.i 0;; 5366633Sdfr} { .mfb 5466633Sdfr nop.m 0 5566633Sdfr fcvt.xf f6=f8 5666633Sdfr nop.b 0 5766633Sdfr} { .mfb 5866633Sdfr nop.m 0 5966633Sdfr fcvt.xf f7=f9 6066633Sdfr nop.b 0;; 6166633Sdfr} { .mfi 6266633Sdfr nop.m 0 6366633Sdfr // Step (1) 6466633Sdfr // y0 = 1 / b in f8 6566633Sdfr frcpa.s1 f8,p6=f6,f7 6666633Sdfr nop.i 0;; 6766633Sdfr} { .mfi 6866633Sdfr nop.m 0 6966633Sdfr // Step (2) 7066633Sdfr // e0 = 1 - b * y0 in f9 7166633Sdfr (p6) fnma.s1 f9=f7,f8,f1 7266633Sdfr nop.i 0 7366633Sdfr} { .mfi 7466633Sdfr nop.m 0 7566633Sdfr // Step (3) 7666633Sdfr // q0 = a * y0 in f10 7766633Sdfr (p6) fma.s1 f10=f6,f8,f0 7866633Sdfr nop.i 0;; 7966633Sdfr} { .mfi 8066633Sdfr nop.m 0 8166633Sdfr // Step (4) 8266633Sdfr // e1 = e0 * e0 in f11 8366633Sdfr (p6) fma.s1 f11=f9,f9,f0 8466633Sdfr nop.i 0 8566633Sdfr} { .mfi 8666633Sdfr nop.m 0 8766633Sdfr // Step (5) 8866633Sdfr // q1 = q0 + e0 * q0 in f10 8966633Sdfr (p6) fma.s1 f10=f9,f10,f10 9066633Sdfr nop.i 0;; 9166633Sdfr} { .mfi 9266633Sdfr nop.m 0 9366633Sdfr // Step (6) 9466633Sdfr // y1 = y0 + e0 * y0 in f8 9566633Sdfr (p6) fma.s1 f8=f9,f8,f8 9666633Sdfr nop.i 0;; 9766633Sdfr} { .mfi 9866633Sdfr nop.m 0 9966633Sdfr // Step (7) 10066633Sdfr // q2 = q1 + e1 * q1 in f9 10166633Sdfr (p6) fma.s1 f9=f11,f10,f10 10266633Sdfr nop.i 0;; 10366633Sdfr} { .mfi 10466633Sdfr nop.m 0 10566633Sdfr // Step (8) 10666633Sdfr // y2 = y1 + e1 * y1 in f8 10766633Sdfr (p6) fma.s1 f8=f11,f8,f8 10866633Sdfr nop.i 0;; 10966633Sdfr} { .mfi 11066633Sdfr nop.m 0 11166633Sdfr // Step (9) 11266633Sdfr // r2 = a - b * q2 in f10 11366633Sdfr (p6) fnma.s1 f10=f7,f9,f6 11466633Sdfr nop.i 0;; 11566633Sdfr} { .mfi 11666633Sdfr nop.m 0 11766633Sdfr // Step (10) 11866633Sdfr // q3 = q2 + r2 * y2 in f8 11966633Sdfr (p6) fma.s1 f8=f10,f8,f9 12066633Sdfr nop.i 0;; 12166633Sdfr} { .mfb 12266633Sdfr nop.m 0 12366633Sdfr // Step (11) 12466633Sdfr // q = trunc (q3) 12566633Sdfr fcvt.fx.trunc.s1 f8=f8 12666633Sdfr nop.b 0;; 12766633Sdfr} { .mmi 12866633Sdfr // quotient will be in r8 (if b != 0) 12966633Sdfr getf.sig r8=f8 13066633Sdfr nop.m 0 13166633Sdfr nop.i 0;; 13266633Sdfr} 13366633Sdfr 13466633Sdfr // 64-BIT SIGNED INTEGER DIVIDE ENDS HERE 13566633Sdfr 13666633Sdfr{ .mmb 13766633Sdfr nop.m 0 13866633Sdfr nop.m 0 13966633Sdfr br.ret.sptk b0;; 14066633Sdfr} 14166633Sdfr 14266633Sdfr.endp __divdi3 143