1dnl HP-PA __udiv_qrnnd division support, used from longlong.h. 2dnl This version runs fast on PA 7000 and later. 3 4dnl Copyright 1993, 1994, 2000, 2001, 2003 Free Software Foundation, Inc. 5 6dnl This file is part of the GNU MP Library. 7dnl 8dnl The GNU MP Library is free software; you can redistribute it and/or modify 9dnl it under the terms of either: 10dnl 11dnl * the GNU Lesser General Public License as published by the Free 12dnl Software Foundation; either version 3 of the License, or (at your 13dnl option) any later version. 14dnl 15dnl or 16dnl 17dnl * the GNU General Public License as published by the Free Software 18dnl Foundation; either version 2 of the License, or (at your option) any 19dnl later version. 20dnl 21dnl or both in parallel, as here. 22dnl 23dnl The GNU MP Library is distributed in the hope that it will be useful, but 24dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 25dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 26dnl for more details. 27dnl 28dnl You should have received copies of the GNU General Public License and the 29dnl GNU Lesser General Public License along with the GNU MP Library. If not, 30dnl see https://www.gnu.org/licenses/. 31 32include(`../config.m4') 33 34C INPUT PARAMETERS 35C rem_ptr gr26 36C n1 gr25 37C n0 gr24 38C d gr23 39 40C This file has caused a lot of trouble, since it demands PIC reference to 41C static data, which triggers bugs in gas (at least version 2.7 through 42C 2.11.2). When the bug is triggered, many bogus relocs are generated. The 43C current solution is to stuff data right into the code, and refer it using 44C absolute offsets. Fragile to be sure, but nothing else seems to work. 45 46ASM_START() 47ifdef(`PIC',`', 48` RODATA 49 INT64(0000, 0x43f00000, 0x0) C 2^64 50') 51 52PROLOGUE(mpn_udiv_qrnnd) 53C .callinfo frame=64,no_calls 54 55 ldo 64(%r30),%r30 56 57 stws %r25,-16(0,%r30) C n_hi 58 stws %r24,-12(0,%r30) C n_lo 59 60ifdef(`PIC', 61` bl .+20,%r31 62 dep %r0,31,2,%r31 63 .word 0x0 C padding for alignment 64 .word 0x43f00000, 0x0 C 2^64 65 ldo 4(%r31),%r31', 66` ldil `L'%L(0000),%r31 67 ldo R%L(0000)(%r31),%r31') 68 69 fldds -16(0,%r30),%fr5 70 stws %r23,-12(0,%r30) 71 comib,<= 0,%r25,L(1) 72 fcnvxf,dbl,dbl %fr5,%fr5 73 fldds 0(0,%r31),%fr4 74 fadd,dbl %fr4,%fr5,%fr5 75 76LDEF(1) 77 fcpy,sgl %fr0,%fr6L 78 fldws -12(0,%r30),%fr6R 79 fcnvxf,dbl,dbl %fr6,%fr4 80 81 fdiv,dbl %fr5,%fr4,%fr5 82 83 fcnvfx,dbl,dbl %fr5,%fr4 84 fstws %fr4R,-16(%r30) 85 xmpyu %fr4R,%fr6R,%fr6 86 ldws -16(%r30),%r28 87 fstds %fr6,-16(0,%r30) 88 ldws -12(0,%r30),%r21 89 ldws -16(0,%r30),%r20 90 sub %r24,%r21,%r22 91 subb %r25,%r20,%r20 92 comib,= 0,%r20,L(2) 93 ldo -64(%r30),%r30 94 95 add %r22,%r23,%r22 96 ldo -1(%r28),%r28 97 98LDEF(2) 99 bv 0(%r2) 100 stws %r22,0(0,%r26) 101 102EPILOGUE(mpn_udiv_qrnnd) 103