github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/mpn/pa32/hppa1_1/udiv.asm (about) 1 dnl HP-PA __udiv_qrnnd division support, used from longlong.h. 2 dnl This version runs fast on PA 7000 and later. 3 4 dnl Copyright 1993, 1994, 2000, 2001, 2003 Free Software Foundation, Inc. 5 6 dnl This file is part of the GNU MP Library. 7 dnl 8 dnl The GNU MP Library is free software; you can redistribute it and/or modify 9 dnl it under the terms of either: 10 dnl 11 dnl * the GNU Lesser General Public License as published by the Free 12 dnl Software Foundation; either version 3 of the License, or (at your 13 dnl option) any later version. 14 dnl 15 dnl or 16 dnl 17 dnl * the GNU General Public License as published by the Free Software 18 dnl Foundation; either version 2 of the License, or (at your option) any 19 dnl later version. 20 dnl 21 dnl or both in parallel, as here. 22 dnl 23 dnl The GNU MP Library is distributed in the hope that it will be useful, but 24 dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 25 dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 26 dnl for more details. 27 dnl 28 dnl You should have received copies of the GNU General Public License and the 29 dnl GNU Lesser General Public License along with the GNU MP Library. If not, 30 dnl see https://www.gnu.org/licenses/. 31 32 include(`../config.m4') 33 34 C INPUT PARAMETERS 35 C rem_ptr gr26 36 C n1 gr25 37 C n0 gr24 38 C d gr23 39 40 C This file has caused a lot of trouble, since it demands PIC reference to 41 C static data, which triggers bugs in gas (at least version 2.7 through 42 C 2.11.2). When the bug is triggered, many bogus relocs are generated. The 43 C current solution is to stuff data right into the code, and refer it using 44 C absolute offsets. Fragile to be sure, but nothing else seems to work. 45 46 ASM_START() 47 ifdef(`PIC',`', 48 ` RODATA 49 INT64(0000, 0x43f00000, 0x0) C 2^64 50 ') 51 52 PROLOGUE(mpn_udiv_qrnnd) 53 C .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 60 ifdef(`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 76 LDEF(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 98 LDEF(2) 99 bv 0(%r2) 100 stws %r22,0(0,%r26) 101 102 EPILOGUE(mpn_udiv_qrnnd)