github.com/aergoio/aergo@v1.3.1/libtool/src/gmp-6.1.2/mpn/pa32/udiv.asm (about)

     1  dnl  HP-PA  __udiv_qrnnd division support, used from longlong.h.
     2  dnl  This version runs fast on pre-PA7000 CPUs.
     3  
     4  dnl  Copyright 1993, 1994, 2000-2002 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 The code size is a bit excessive.  We could merge the last two ds;addc
    41  C sequences by simply moving the "bb,< Odd" instruction down.  The only
    42  C trouble is the FFFFFFFF code that would need some hacking.
    43  
    44  ASM_START()
    45  PROLOGUE(mpn_udiv_qrnnd)
    46  	comb,<		%r23,0,L(largedivisor)
    47  	 sub		%r0,%r23,%r1		C clear cy as side-effect
    48  	ds		%r0,%r1,%r0
    49  	addc		%r24,%r24,%r24
    50  	ds		%r25,%r23,%r25
    51  	addc		%r24,%r24,%r24
    52  	ds		%r25,%r23,%r25
    53  	addc		%r24,%r24,%r24
    54  	ds		%r25,%r23,%r25
    55  	addc		%r24,%r24,%r24
    56  	ds		%r25,%r23,%r25
    57  	addc		%r24,%r24,%r24
    58  	ds		%r25,%r23,%r25
    59  	addc		%r24,%r24,%r24
    60  	ds		%r25,%r23,%r25
    61  	addc		%r24,%r24,%r24
    62  	ds		%r25,%r23,%r25
    63  	addc		%r24,%r24,%r24
    64  	ds		%r25,%r23,%r25
    65  	addc		%r24,%r24,%r24
    66  	ds		%r25,%r23,%r25
    67  	addc		%r24,%r24,%r24
    68  	ds		%r25,%r23,%r25
    69  	addc		%r24,%r24,%r24
    70  	ds		%r25,%r23,%r25
    71  	addc		%r24,%r24,%r24
    72  	ds		%r25,%r23,%r25
    73  	addc		%r24,%r24,%r24
    74  	ds		%r25,%r23,%r25
    75  	addc		%r24,%r24,%r24
    76  	ds		%r25,%r23,%r25
    77  	addc		%r24,%r24,%r24
    78  	ds		%r25,%r23,%r25
    79  	addc		%r24,%r24,%r24
    80  	ds		%r25,%r23,%r25
    81  	addc		%r24,%r24,%r24
    82  	ds		%r25,%r23,%r25
    83  	addc		%r24,%r24,%r24
    84  	ds		%r25,%r23,%r25
    85  	addc		%r24,%r24,%r24
    86  	ds		%r25,%r23,%r25
    87  	addc		%r24,%r24,%r24
    88  	ds		%r25,%r23,%r25
    89  	addc		%r24,%r24,%r24
    90  	ds		%r25,%r23,%r25
    91  	addc		%r24,%r24,%r24
    92  	ds		%r25,%r23,%r25
    93  	addc		%r24,%r24,%r24
    94  	ds		%r25,%r23,%r25
    95  	addc		%r24,%r24,%r24
    96  	ds		%r25,%r23,%r25
    97  	addc		%r24,%r24,%r24
    98  	ds		%r25,%r23,%r25
    99  	addc		%r24,%r24,%r24
   100  	ds		%r25,%r23,%r25
   101  	addc		%r24,%r24,%r24
   102  	ds		%r25,%r23,%r25
   103  	addc		%r24,%r24,%r24
   104  	ds		%r25,%r23,%r25
   105  	addc		%r24,%r24,%r24
   106  	ds		%r25,%r23,%r25
   107  	addc		%r24,%r24,%r24
   108  	ds		%r25,%r23,%r25
   109  	addc		%r24,%r24,%r24
   110  	ds		%r25,%r23,%r25
   111  	addc		%r24,%r24,%r28
   112  	ds		%r25,%r23,%r25
   113  	comclr,>=	%r25,%r0,%r0
   114  	addl		%r25,%r23,%r25
   115  	stws		%r25,0(0,%r26)
   116  	bv		0(%r2)
   117  	 addc		%r28,%r28,%r28
   118  
   119  LDEF(largedivisor)
   120  	extru		%r24,31,1,%r19		C r19 = n0 & 1
   121  	bb,<		%r23,31,L(odd)
   122  	 extru		%r23,30,31,%r22		C r22 = d >> 1
   123  	shd		%r25,%r24,1,%r24	C r24 = new n0
   124  	extru		%r25,30,31,%r25		C r25 = new n1
   125  	sub		%r0,%r22,%r21
   126  	ds		%r0,%r21,%r0
   127  	addc		%r24,%r24,%r24
   128  	ds		%r25,%r22,%r25
   129  	addc		%r24,%r24,%r24
   130  	ds		%r25,%r22,%r25
   131  	addc		%r24,%r24,%r24
   132  	ds		%r25,%r22,%r25
   133  	addc		%r24,%r24,%r24
   134  	ds		%r25,%r22,%r25
   135  	addc		%r24,%r24,%r24
   136  	ds		%r25,%r22,%r25
   137  	addc		%r24,%r24,%r24
   138  	ds		%r25,%r22,%r25
   139  	addc		%r24,%r24,%r24
   140  	ds		%r25,%r22,%r25
   141  	addc		%r24,%r24,%r24
   142  	ds		%r25,%r22,%r25
   143  	addc		%r24,%r24,%r24
   144  	ds		%r25,%r22,%r25
   145  	addc		%r24,%r24,%r24
   146  	ds		%r25,%r22,%r25
   147  	addc		%r24,%r24,%r24
   148  	ds		%r25,%r22,%r25
   149  	addc		%r24,%r24,%r24
   150  	ds		%r25,%r22,%r25
   151  	addc		%r24,%r24,%r24
   152  	ds		%r25,%r22,%r25
   153  	addc		%r24,%r24,%r24
   154  	ds		%r25,%r22,%r25
   155  	addc		%r24,%r24,%r24
   156  	ds		%r25,%r22,%r25
   157  	addc		%r24,%r24,%r24
   158  	ds		%r25,%r22,%r25
   159  	addc		%r24,%r24,%r24
   160  	ds		%r25,%r22,%r25
   161  	addc		%r24,%r24,%r24
   162  	ds		%r25,%r22,%r25
   163  	addc		%r24,%r24,%r24
   164  	ds		%r25,%r22,%r25
   165  	addc		%r24,%r24,%r24
   166  	ds		%r25,%r22,%r25
   167  	addc		%r24,%r24,%r24
   168  	ds		%r25,%r22,%r25
   169  	addc		%r24,%r24,%r24
   170  	ds		%r25,%r22,%r25
   171  	addc		%r24,%r24,%r24
   172  	ds		%r25,%r22,%r25
   173  	addc		%r24,%r24,%r24
   174  	ds		%r25,%r22,%r25
   175  	addc		%r24,%r24,%r24
   176  	ds		%r25,%r22,%r25
   177  	addc		%r24,%r24,%r24
   178  	ds		%r25,%r22,%r25
   179  	addc		%r24,%r24,%r24
   180  	ds		%r25,%r22,%r25
   181  	addc		%r24,%r24,%r24
   182  	ds		%r25,%r22,%r25
   183  	addc		%r24,%r24,%r24
   184  	ds		%r25,%r22,%r25
   185  	addc		%r24,%r24,%r24
   186  	ds		%r25,%r22,%r25
   187  	addc		%r24,%r24,%r24
   188  	ds		%r25,%r22,%r25
   189  	addc		%r24,%r24,%r24
   190  	ds		%r25,%r22,%r25
   191  	comclr,>=	%r25,%r0,%r0
   192  	addl		%r25,%r22,%r25
   193  	sh1addl		%r25,%r19,%r25
   194  	stws		%r25,0(0,%r26)
   195  	bv		0(%r2)
   196  	 addc		%r24,%r24,%r28
   197  
   198  LDEF(odd)
   199  	addib,sv,n	1,%r22,L(FFFFFFFF)	C r22 = (d / 2 + 1)
   200  	shd		%r25,%r24,1,%r24	C r24 = new n0
   201  	extru		%r25,30,31,%r25		C r25 = new n1
   202  	sub		%r0,%r22,%r21
   203  	ds		%r0,%r21,%r0
   204  	addc		%r24,%r24,%r24
   205  	ds		%r25,%r22,%r25
   206  	addc		%r24,%r24,%r24
   207  	ds		%r25,%r22,%r25
   208  	addc		%r24,%r24,%r24
   209  	ds		%r25,%r22,%r25
   210  	addc		%r24,%r24,%r24
   211  	ds		%r25,%r22,%r25
   212  	addc		%r24,%r24,%r24
   213  	ds		%r25,%r22,%r25
   214  	addc		%r24,%r24,%r24
   215  	ds		%r25,%r22,%r25
   216  	addc		%r24,%r24,%r24
   217  	ds		%r25,%r22,%r25
   218  	addc		%r24,%r24,%r24
   219  	ds		%r25,%r22,%r25
   220  	addc		%r24,%r24,%r24
   221  	ds		%r25,%r22,%r25
   222  	addc		%r24,%r24,%r24
   223  	ds		%r25,%r22,%r25
   224  	addc		%r24,%r24,%r24
   225  	ds		%r25,%r22,%r25
   226  	addc		%r24,%r24,%r24
   227  	ds		%r25,%r22,%r25
   228  	addc		%r24,%r24,%r24
   229  	ds		%r25,%r22,%r25
   230  	addc		%r24,%r24,%r24
   231  	ds		%r25,%r22,%r25
   232  	addc		%r24,%r24,%r24
   233  	ds		%r25,%r22,%r25
   234  	addc		%r24,%r24,%r24
   235  	ds		%r25,%r22,%r25
   236  	addc		%r24,%r24,%r24
   237  	ds		%r25,%r22,%r25
   238  	addc		%r24,%r24,%r24
   239  	ds		%r25,%r22,%r25
   240  	addc		%r24,%r24,%r24
   241  	ds		%r25,%r22,%r25
   242  	addc		%r24,%r24,%r24
   243  	ds		%r25,%r22,%r25
   244  	addc		%r24,%r24,%r24
   245  	ds		%r25,%r22,%r25
   246  	addc		%r24,%r24,%r24
   247  	ds		%r25,%r22,%r25
   248  	addc		%r24,%r24,%r24
   249  	ds		%r25,%r22,%r25
   250  	addc		%r24,%r24,%r24
   251  	ds		%r25,%r22,%r25
   252  	addc		%r24,%r24,%r24
   253  	ds		%r25,%r22,%r25
   254  	addc		%r24,%r24,%r24
   255  	ds		%r25,%r22,%r25
   256  	addc		%r24,%r24,%r24
   257  	ds		%r25,%r22,%r25
   258  	addc		%r24,%r24,%r24
   259  	ds		%r25,%r22,%r25
   260  	addc		%r24,%r24,%r24
   261  	ds		%r25,%r22,%r25
   262  	addc		%r24,%r24,%r24
   263  	ds		%r25,%r22,%r25
   264  	addc		%r24,%r24,%r24
   265  	ds		%r25,%r22,%r25
   266  	addc		%r24,%r24,%r24
   267  	ds		%r25,%r22,%r25
   268  	addc		%r24,%r24,%r28
   269  	comclr,>=	%r25,%r0,%r0
   270  	addl		%r25,%r22,%r25
   271  	sh1addl		%r25,%r19,%r25
   272  C We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25
   273  	add,nuv		%r28,%r25,%r25
   274  	addl		%r25,%r1,%r25
   275  	addc		%r0,%r28,%r28
   276  	sub,<<		%r25,%r23,%r0
   277  	addl		%r25,%r1,%r25
   278  	stws		%r25,0(0,%r26)
   279  	bv		0(%r2)
   280  	 addc		%r0,%r28,%r28
   281  
   282  C This is just a special case of the code above.
   283  C We come here when d == 0xFFFFFFFF
   284  LDEF(FFFFFFFF)
   285  	add,uv		%r25,%r24,%r24
   286  	sub,<<		%r24,%r23,%r0
   287  	ldo		1(%r24),%r24
   288  	stws		%r24,0(0,%r26)
   289  	bv		0(%r2)
   290  	 addc		%r0,%r25,%r28
   291  EPILOGUE()