Home | History | Annotate | Line # | Download | only in pa32
      1      1.1  mrg dnl  HP-PA  __udiv_qrnnd division support, used from longlong.h.
      2      1.1  mrg dnl  This version runs fast on pre-PA7000 CPUs.
      3      1.1  mrg 
      4  1.1.1.2  mrg dnl  Copyright 1993, 1994, 2000-2002 Free Software Foundation, Inc.
      5      1.1  mrg 
      6      1.1  mrg dnl  This file is part of the GNU MP Library.
      7  1.1.1.2  mrg dnl
      8      1.1  mrg dnl  The GNU MP Library is free software; you can redistribute it and/or modify
      9  1.1.1.2  mrg dnl  it under the terms of either:
     10  1.1.1.2  mrg dnl
     11  1.1.1.2  mrg dnl    * the GNU Lesser General Public License as published by the Free
     12  1.1.1.2  mrg dnl      Software Foundation; either version 3 of the License, or (at your
     13  1.1.1.2  mrg dnl      option) any later version.
     14  1.1.1.2  mrg dnl
     15  1.1.1.2  mrg dnl  or
     16  1.1.1.2  mrg dnl
     17  1.1.1.2  mrg dnl    * the GNU General Public License as published by the Free Software
     18  1.1.1.2  mrg dnl      Foundation; either version 2 of the License, or (at your option) any
     19  1.1.1.2  mrg dnl      later version.
     20  1.1.1.2  mrg dnl
     21  1.1.1.2  mrg dnl  or both in parallel, as here.
     22  1.1.1.2  mrg dnl
     23      1.1  mrg dnl  The GNU MP Library is distributed in the hope that it will be useful, but
     24      1.1  mrg dnl  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     25  1.1.1.2  mrg dnl  or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     26  1.1.1.2  mrg dnl  for more details.
     27  1.1.1.2  mrg dnl
     28  1.1.1.2  mrg dnl  You should have received copies of the GNU General Public License and the
     29  1.1.1.2  mrg dnl  GNU Lesser General Public License along with the GNU MP Library.  If not,
     30  1.1.1.2  mrg dnl  see https://www.gnu.org/licenses/.
     31      1.1  mrg 
     32      1.1  mrg include(`../config.m4')
     33      1.1  mrg 
     34      1.1  mrg C INPUT PARAMETERS
     35      1.1  mrg C rem_ptr	gr26
     36      1.1  mrg C n1		gr25
     37      1.1  mrg C n0		gr24
     38      1.1  mrg C d		gr23
     39      1.1  mrg 
     40      1.1  mrg C The code size is a bit excessive.  We could merge the last two ds;addc
     41      1.1  mrg C sequences by simply moving the "bb,< Odd" instruction down.  The only
     42      1.1  mrg C trouble is the FFFFFFFF code that would need some hacking.
     43      1.1  mrg 
     44      1.1  mrg ASM_START()
     45      1.1  mrg PROLOGUE(mpn_udiv_qrnnd)
     46      1.1  mrg 	comb,<		%r23,0,L(largedivisor)
     47      1.1  mrg 	 sub		%r0,%r23,%r1		C clear cy as side-effect
     48      1.1  mrg 	ds		%r0,%r1,%r0
     49      1.1  mrg 	addc		%r24,%r24,%r24
     50      1.1  mrg 	ds		%r25,%r23,%r25
     51      1.1  mrg 	addc		%r24,%r24,%r24
     52      1.1  mrg 	ds		%r25,%r23,%r25
     53      1.1  mrg 	addc		%r24,%r24,%r24
     54      1.1  mrg 	ds		%r25,%r23,%r25
     55      1.1  mrg 	addc		%r24,%r24,%r24
     56      1.1  mrg 	ds		%r25,%r23,%r25
     57      1.1  mrg 	addc		%r24,%r24,%r24
     58      1.1  mrg 	ds		%r25,%r23,%r25
     59      1.1  mrg 	addc		%r24,%r24,%r24
     60      1.1  mrg 	ds		%r25,%r23,%r25
     61      1.1  mrg 	addc		%r24,%r24,%r24
     62      1.1  mrg 	ds		%r25,%r23,%r25
     63      1.1  mrg 	addc		%r24,%r24,%r24
     64      1.1  mrg 	ds		%r25,%r23,%r25
     65      1.1  mrg 	addc		%r24,%r24,%r24
     66      1.1  mrg 	ds		%r25,%r23,%r25
     67      1.1  mrg 	addc		%r24,%r24,%r24
     68      1.1  mrg 	ds		%r25,%r23,%r25
     69      1.1  mrg 	addc		%r24,%r24,%r24
     70      1.1  mrg 	ds		%r25,%r23,%r25
     71      1.1  mrg 	addc		%r24,%r24,%r24
     72      1.1  mrg 	ds		%r25,%r23,%r25
     73      1.1  mrg 	addc		%r24,%r24,%r24
     74      1.1  mrg 	ds		%r25,%r23,%r25
     75      1.1  mrg 	addc		%r24,%r24,%r24
     76      1.1  mrg 	ds		%r25,%r23,%r25
     77      1.1  mrg 	addc		%r24,%r24,%r24
     78      1.1  mrg 	ds		%r25,%r23,%r25
     79      1.1  mrg 	addc		%r24,%r24,%r24
     80      1.1  mrg 	ds		%r25,%r23,%r25
     81      1.1  mrg 	addc		%r24,%r24,%r24
     82      1.1  mrg 	ds		%r25,%r23,%r25
     83      1.1  mrg 	addc		%r24,%r24,%r24
     84      1.1  mrg 	ds		%r25,%r23,%r25
     85      1.1  mrg 	addc		%r24,%r24,%r24
     86      1.1  mrg 	ds		%r25,%r23,%r25
     87      1.1  mrg 	addc		%r24,%r24,%r24
     88      1.1  mrg 	ds		%r25,%r23,%r25
     89      1.1  mrg 	addc		%r24,%r24,%r24
     90      1.1  mrg 	ds		%r25,%r23,%r25
     91      1.1  mrg 	addc		%r24,%r24,%r24
     92      1.1  mrg 	ds		%r25,%r23,%r25
     93      1.1  mrg 	addc		%r24,%r24,%r24
     94      1.1  mrg 	ds		%r25,%r23,%r25
     95      1.1  mrg 	addc		%r24,%r24,%r24
     96      1.1  mrg 	ds		%r25,%r23,%r25
     97      1.1  mrg 	addc		%r24,%r24,%r24
     98      1.1  mrg 	ds		%r25,%r23,%r25
     99      1.1  mrg 	addc		%r24,%r24,%r24
    100      1.1  mrg 	ds		%r25,%r23,%r25
    101      1.1  mrg 	addc		%r24,%r24,%r24
    102      1.1  mrg 	ds		%r25,%r23,%r25
    103      1.1  mrg 	addc		%r24,%r24,%r24
    104      1.1  mrg 	ds		%r25,%r23,%r25
    105      1.1  mrg 	addc		%r24,%r24,%r24
    106      1.1  mrg 	ds		%r25,%r23,%r25
    107      1.1  mrg 	addc		%r24,%r24,%r24
    108      1.1  mrg 	ds		%r25,%r23,%r25
    109      1.1  mrg 	addc		%r24,%r24,%r24
    110      1.1  mrg 	ds		%r25,%r23,%r25
    111      1.1  mrg 	addc		%r24,%r24,%r28
    112      1.1  mrg 	ds		%r25,%r23,%r25
    113      1.1  mrg 	comclr,>=	%r25,%r0,%r0
    114      1.1  mrg 	addl		%r25,%r23,%r25
    115      1.1  mrg 	stws		%r25,0(0,%r26)
    116      1.1  mrg 	bv		0(%r2)
    117      1.1  mrg 	 addc		%r28,%r28,%r28
    118      1.1  mrg 
    119      1.1  mrg LDEF(largedivisor)
    120      1.1  mrg 	extru		%r24,31,1,%r19		C r19 = n0 & 1
    121      1.1  mrg 	bb,<		%r23,31,L(odd)
    122      1.1  mrg 	 extru		%r23,30,31,%r22		C r22 = d >> 1
    123      1.1  mrg 	shd		%r25,%r24,1,%r24	C r24 = new n0
    124      1.1  mrg 	extru		%r25,30,31,%r25		C r25 = new n1
    125      1.1  mrg 	sub		%r0,%r22,%r21
    126      1.1  mrg 	ds		%r0,%r21,%r0
    127      1.1  mrg 	addc		%r24,%r24,%r24
    128      1.1  mrg 	ds		%r25,%r22,%r25
    129      1.1  mrg 	addc		%r24,%r24,%r24
    130      1.1  mrg 	ds		%r25,%r22,%r25
    131      1.1  mrg 	addc		%r24,%r24,%r24
    132      1.1  mrg 	ds		%r25,%r22,%r25
    133      1.1  mrg 	addc		%r24,%r24,%r24
    134      1.1  mrg 	ds		%r25,%r22,%r25
    135      1.1  mrg 	addc		%r24,%r24,%r24
    136      1.1  mrg 	ds		%r25,%r22,%r25
    137      1.1  mrg 	addc		%r24,%r24,%r24
    138      1.1  mrg 	ds		%r25,%r22,%r25
    139      1.1  mrg 	addc		%r24,%r24,%r24
    140      1.1  mrg 	ds		%r25,%r22,%r25
    141      1.1  mrg 	addc		%r24,%r24,%r24
    142      1.1  mrg 	ds		%r25,%r22,%r25
    143      1.1  mrg 	addc		%r24,%r24,%r24
    144      1.1  mrg 	ds		%r25,%r22,%r25
    145      1.1  mrg 	addc		%r24,%r24,%r24
    146      1.1  mrg 	ds		%r25,%r22,%r25
    147      1.1  mrg 	addc		%r24,%r24,%r24
    148      1.1  mrg 	ds		%r25,%r22,%r25
    149      1.1  mrg 	addc		%r24,%r24,%r24
    150      1.1  mrg 	ds		%r25,%r22,%r25
    151      1.1  mrg 	addc		%r24,%r24,%r24
    152      1.1  mrg 	ds		%r25,%r22,%r25
    153      1.1  mrg 	addc		%r24,%r24,%r24
    154      1.1  mrg 	ds		%r25,%r22,%r25
    155      1.1  mrg 	addc		%r24,%r24,%r24
    156      1.1  mrg 	ds		%r25,%r22,%r25
    157      1.1  mrg 	addc		%r24,%r24,%r24
    158      1.1  mrg 	ds		%r25,%r22,%r25
    159      1.1  mrg 	addc		%r24,%r24,%r24
    160      1.1  mrg 	ds		%r25,%r22,%r25
    161      1.1  mrg 	addc		%r24,%r24,%r24
    162      1.1  mrg 	ds		%r25,%r22,%r25
    163      1.1  mrg 	addc		%r24,%r24,%r24
    164      1.1  mrg 	ds		%r25,%r22,%r25
    165      1.1  mrg 	addc		%r24,%r24,%r24
    166      1.1  mrg 	ds		%r25,%r22,%r25
    167      1.1  mrg 	addc		%r24,%r24,%r24
    168      1.1  mrg 	ds		%r25,%r22,%r25
    169      1.1  mrg 	addc		%r24,%r24,%r24
    170      1.1  mrg 	ds		%r25,%r22,%r25
    171      1.1  mrg 	addc		%r24,%r24,%r24
    172      1.1  mrg 	ds		%r25,%r22,%r25
    173      1.1  mrg 	addc		%r24,%r24,%r24
    174      1.1  mrg 	ds		%r25,%r22,%r25
    175      1.1  mrg 	addc		%r24,%r24,%r24
    176      1.1  mrg 	ds		%r25,%r22,%r25
    177      1.1  mrg 	addc		%r24,%r24,%r24
    178      1.1  mrg 	ds		%r25,%r22,%r25
    179      1.1  mrg 	addc		%r24,%r24,%r24
    180      1.1  mrg 	ds		%r25,%r22,%r25
    181      1.1  mrg 	addc		%r24,%r24,%r24
    182      1.1  mrg 	ds		%r25,%r22,%r25
    183      1.1  mrg 	addc		%r24,%r24,%r24
    184      1.1  mrg 	ds		%r25,%r22,%r25
    185      1.1  mrg 	addc		%r24,%r24,%r24
    186      1.1  mrg 	ds		%r25,%r22,%r25
    187      1.1  mrg 	addc		%r24,%r24,%r24
    188      1.1  mrg 	ds		%r25,%r22,%r25
    189      1.1  mrg 	addc		%r24,%r24,%r24
    190      1.1  mrg 	ds		%r25,%r22,%r25
    191      1.1  mrg 	comclr,>=	%r25,%r0,%r0
    192      1.1  mrg 	addl		%r25,%r22,%r25
    193      1.1  mrg 	sh1addl		%r25,%r19,%r25
    194      1.1  mrg 	stws		%r25,0(0,%r26)
    195      1.1  mrg 	bv		0(%r2)
    196      1.1  mrg 	 addc		%r24,%r24,%r28
    197      1.1  mrg 
    198      1.1  mrg LDEF(odd)
    199      1.1  mrg 	addib,sv,n	1,%r22,L(FFFFFFFF)	C r22 = (d / 2 + 1)
    200      1.1  mrg 	shd		%r25,%r24,1,%r24	C r24 = new n0
    201      1.1  mrg 	extru		%r25,30,31,%r25		C r25 = new n1
    202      1.1  mrg 	sub		%r0,%r22,%r21
    203      1.1  mrg 	ds		%r0,%r21,%r0
    204      1.1  mrg 	addc		%r24,%r24,%r24
    205      1.1  mrg 	ds		%r25,%r22,%r25
    206      1.1  mrg 	addc		%r24,%r24,%r24
    207      1.1  mrg 	ds		%r25,%r22,%r25
    208      1.1  mrg 	addc		%r24,%r24,%r24
    209      1.1  mrg 	ds		%r25,%r22,%r25
    210      1.1  mrg 	addc		%r24,%r24,%r24
    211      1.1  mrg 	ds		%r25,%r22,%r25
    212      1.1  mrg 	addc		%r24,%r24,%r24
    213      1.1  mrg 	ds		%r25,%r22,%r25
    214      1.1  mrg 	addc		%r24,%r24,%r24
    215      1.1  mrg 	ds		%r25,%r22,%r25
    216      1.1  mrg 	addc		%r24,%r24,%r24
    217      1.1  mrg 	ds		%r25,%r22,%r25
    218      1.1  mrg 	addc		%r24,%r24,%r24
    219      1.1  mrg 	ds		%r25,%r22,%r25
    220      1.1  mrg 	addc		%r24,%r24,%r24
    221      1.1  mrg 	ds		%r25,%r22,%r25
    222      1.1  mrg 	addc		%r24,%r24,%r24
    223      1.1  mrg 	ds		%r25,%r22,%r25
    224      1.1  mrg 	addc		%r24,%r24,%r24
    225      1.1  mrg 	ds		%r25,%r22,%r25
    226      1.1  mrg 	addc		%r24,%r24,%r24
    227      1.1  mrg 	ds		%r25,%r22,%r25
    228      1.1  mrg 	addc		%r24,%r24,%r24
    229      1.1  mrg 	ds		%r25,%r22,%r25
    230      1.1  mrg 	addc		%r24,%r24,%r24
    231      1.1  mrg 	ds		%r25,%r22,%r25
    232      1.1  mrg 	addc		%r24,%r24,%r24
    233      1.1  mrg 	ds		%r25,%r22,%r25
    234      1.1  mrg 	addc		%r24,%r24,%r24
    235      1.1  mrg 	ds		%r25,%r22,%r25
    236      1.1  mrg 	addc		%r24,%r24,%r24
    237      1.1  mrg 	ds		%r25,%r22,%r25
    238      1.1  mrg 	addc		%r24,%r24,%r24
    239      1.1  mrg 	ds		%r25,%r22,%r25
    240      1.1  mrg 	addc		%r24,%r24,%r24
    241      1.1  mrg 	ds		%r25,%r22,%r25
    242      1.1  mrg 	addc		%r24,%r24,%r24
    243      1.1  mrg 	ds		%r25,%r22,%r25
    244      1.1  mrg 	addc		%r24,%r24,%r24
    245      1.1  mrg 	ds		%r25,%r22,%r25
    246      1.1  mrg 	addc		%r24,%r24,%r24
    247      1.1  mrg 	ds		%r25,%r22,%r25
    248      1.1  mrg 	addc		%r24,%r24,%r24
    249      1.1  mrg 	ds		%r25,%r22,%r25
    250      1.1  mrg 	addc		%r24,%r24,%r24
    251      1.1  mrg 	ds		%r25,%r22,%r25
    252      1.1  mrg 	addc		%r24,%r24,%r24
    253      1.1  mrg 	ds		%r25,%r22,%r25
    254      1.1  mrg 	addc		%r24,%r24,%r24
    255      1.1  mrg 	ds		%r25,%r22,%r25
    256      1.1  mrg 	addc		%r24,%r24,%r24
    257      1.1  mrg 	ds		%r25,%r22,%r25
    258      1.1  mrg 	addc		%r24,%r24,%r24
    259      1.1  mrg 	ds		%r25,%r22,%r25
    260      1.1  mrg 	addc		%r24,%r24,%r24
    261      1.1  mrg 	ds		%r25,%r22,%r25
    262      1.1  mrg 	addc		%r24,%r24,%r24
    263      1.1  mrg 	ds		%r25,%r22,%r25
    264      1.1  mrg 	addc		%r24,%r24,%r24
    265      1.1  mrg 	ds		%r25,%r22,%r25
    266      1.1  mrg 	addc		%r24,%r24,%r24
    267      1.1  mrg 	ds		%r25,%r22,%r25
    268      1.1  mrg 	addc		%r24,%r24,%r28
    269      1.1  mrg 	comclr,>=	%r25,%r0,%r0
    270      1.1  mrg 	addl		%r25,%r22,%r25
    271      1.1  mrg 	sh1addl		%r25,%r19,%r25
    272      1.1  mrg C We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
    273      1.1  mrg 	add,nuv		%r28,%r25,%r25
    274      1.1  mrg 	addl		%r25,%r1,%r25
    275      1.1  mrg 	addc		%r0,%r28,%r28
    276      1.1  mrg 	sub,<<		%r25,%r23,%r0
    277      1.1  mrg 	addl		%r25,%r1,%r25
    278      1.1  mrg 	stws		%r25,0(0,%r26)
    279      1.1  mrg 	bv		0(%r2)
    280      1.1  mrg 	 addc		%r0,%r28,%r28
    281      1.1  mrg 
    282      1.1  mrg C This is just a special case of the code above.
    283      1.1  mrg C We come here when d == 0xFFFFFFFF
    284      1.1  mrg LDEF(FFFFFFFF)
    285      1.1  mrg 	add,uv		%r25,%r24,%r24
    286      1.1  mrg 	sub,<<		%r24,%r23,%r0
    287      1.1  mrg 	ldo		1(%r24),%r24
    288      1.1  mrg 	stws		%r24,0(0,%r26)
    289      1.1  mrg 	bv		0(%r2)
    290      1.1  mrg 	 addc		%r0,%r25,%r28
    291      1.1  mrg EPILOGUE()
    292