Home | History | Annotate | Line # | Download | only in alpha
      1   1.1       mrg  # Alpha 21064 __udiv_qrnnd
      2  1.11       mrg  # Copyright (C) 1992-2022 Free Software Foundation, Inc.
      3   1.1       mrg 
      4   1.1       mrg  # This file is part of GCC.
      5   1.1       mrg 
      6   1.1       mrg  # The GNU MP Library is free software; you can redistribute it and/or modify
      7   1.1       mrg  # it under the terms of the GNU General Public License as published by
      8   1.1       mrg  # the Free Software Foundation; either version 3 of the License, or (at your
      9   1.1       mrg  # option) any later version.
     10   1.1       mrg 
     11   1.1       mrg  # This file is distributed in the hope that it will be useful, but
     12   1.1       mrg  # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     13   1.1       mrg  # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
     14   1.1       mrg  # License for more details.
     15   1.1       mrg 
     16   1.1       mrg  # Under Section 7 of GPL version 3, you are granted additional
     17   1.1       mrg  # permissions described in the GCC Runtime Library Exception, version
     18   1.1       mrg  # 3.1, as published by the Free Software Foundation.
     19   1.1       mrg 
     20   1.1       mrg  # You should have received a copy of the GNU General Public License and
     21   1.1       mrg  # a copy of the GCC Runtime Library Exception along with this program;
     22   1.1       mrg  # see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     23   1.1       mrg  # <http://www.gnu.org/licenses/>.
     24   1.1       mrg 
     25   1.2  christos #if defined(__ELF__) && defined(__linux__)
     26   1.1       mrg .section .note.GNU-stack,""
     27   1.2  christos .previous
     28   1.1       mrg #endif
     29   1.1       mrg 
     30   1.1       mrg         .set noreorder
     31   1.1       mrg         .set noat
     32   1.1       mrg 
     33   1.1       mrg 	.text
     34   1.1       mrg 
     35   1.1       mrg 	.globl __udiv_qrnnd
     36   1.1       mrg 	.ent __udiv_qrnnd
     37   1.1       mrg #ifdef __VMS__
     38   1.1       mrg __udiv_qrnnd..en:
     39   1.1       mrg 	.frame $29,0,$26,0
     40   1.1       mrg 	.prologue
     41   1.1       mrg #else
     42   1.1       mrg __udiv_qrnnd:
     43   1.1       mrg 	.frame $30,0,$26,0
     44   1.1       mrg 	.prologue 0
     45   1.1       mrg #endif
     46   1.1       mrg 
     47   1.1       mrg #define cnt	$2
     48   1.1       mrg #define tmp	$3
     49   1.1       mrg #define rem_ptr	$16
     50   1.1       mrg #define n1	$17
     51   1.1       mrg #define n0	$18
     52   1.1       mrg #define d	$19
     53   1.1       mrg #define qb	$20
     54   1.1       mrg #define AT	$at
     55   1.1       mrg 
     56   1.1       mrg 	ldiq	cnt,16
     57   1.1       mrg 	blt	d,$largedivisor
     58   1.1       mrg 
     59   1.1       mrg $loop1:	cmplt	n0,0,tmp
     60   1.1       mrg 	addq	n1,n1,n1
     61   1.1       mrg 	bis	n1,tmp,n1
     62   1.1       mrg 	addq	n0,n0,n0
     63   1.1       mrg 	cmpule	d,n1,qb
     64   1.1       mrg 	subq	n1,d,tmp
     65   1.1       mrg 	cmovne	qb,tmp,n1
     66   1.1       mrg 	bis	n0,qb,n0
     67   1.1       mrg 	cmplt	n0,0,tmp
     68   1.1       mrg 	addq	n1,n1,n1
     69   1.1       mrg 	bis	n1,tmp,n1
     70   1.1       mrg 	addq	n0,n0,n0
     71   1.1       mrg 	cmpule	d,n1,qb
     72   1.1       mrg 	subq	n1,d,tmp
     73   1.1       mrg 	cmovne	qb,tmp,n1
     74   1.1       mrg 	bis	n0,qb,n0
     75   1.1       mrg 	cmplt	n0,0,tmp
     76   1.1       mrg 	addq	n1,n1,n1
     77   1.1       mrg 	bis	n1,tmp,n1
     78   1.1       mrg 	addq	n0,n0,n0
     79   1.1       mrg 	cmpule	d,n1,qb
     80   1.1       mrg 	subq	n1,d,tmp
     81   1.1       mrg 	cmovne	qb,tmp,n1
     82   1.1       mrg 	bis	n0,qb,n0
     83   1.1       mrg 	cmplt	n0,0,tmp
     84   1.1       mrg 	addq	n1,n1,n1
     85   1.1       mrg 	bis	n1,tmp,n1
     86   1.1       mrg 	addq	n0,n0,n0
     87   1.1       mrg 	cmpule	d,n1,qb
     88   1.1       mrg 	subq	n1,d,tmp
     89   1.1       mrg 	cmovne	qb,tmp,n1
     90   1.1       mrg 	bis	n0,qb,n0
     91   1.1       mrg 	subq	cnt,1,cnt
     92   1.1       mrg 	bgt	cnt,$loop1
     93   1.1       mrg 	stq	n1,0(rem_ptr)
     94   1.1       mrg 	bis	$31,n0,$0
     95   1.1       mrg 	ret	$31,($26),1
     96   1.1       mrg 
     97   1.1       mrg $largedivisor:
     98   1.1       mrg 	and	n0,1,$4
     99   1.1       mrg 
    100   1.1       mrg 	srl	n0,1,n0
    101   1.1       mrg 	sll	n1,63,tmp
    102   1.1       mrg 	or	tmp,n0,n0
    103   1.1       mrg 	srl	n1,1,n1
    104   1.1       mrg 
    105   1.1       mrg 	and	d,1,$6
    106   1.1       mrg 	srl	d,1,$5
    107   1.1       mrg 	addq	$5,$6,$5
    108   1.1       mrg 
    109   1.1       mrg $loop2:	cmplt	n0,0,tmp
    110   1.1       mrg 	addq	n1,n1,n1
    111   1.1       mrg 	bis	n1,tmp,n1
    112   1.1       mrg 	addq	n0,n0,n0
    113   1.1       mrg 	cmpule	$5,n1,qb
    114   1.1       mrg 	subq	n1,$5,tmp
    115   1.1       mrg 	cmovne	qb,tmp,n1
    116   1.1       mrg 	bis	n0,qb,n0
    117   1.1       mrg 	cmplt	n0,0,tmp
    118   1.1       mrg 	addq	n1,n1,n1
    119   1.1       mrg 	bis	n1,tmp,n1
    120   1.1       mrg 	addq	n0,n0,n0
    121   1.1       mrg 	cmpule	$5,n1,qb
    122   1.1       mrg 	subq	n1,$5,tmp
    123   1.1       mrg 	cmovne	qb,tmp,n1
    124   1.1       mrg 	bis	n0,qb,n0
    125   1.1       mrg 	cmplt	n0,0,tmp
    126   1.1       mrg 	addq	n1,n1,n1
    127   1.1       mrg 	bis	n1,tmp,n1
    128   1.1       mrg 	addq	n0,n0,n0
    129   1.1       mrg 	cmpule	$5,n1,qb
    130   1.1       mrg 	subq	n1,$5,tmp
    131   1.1       mrg 	cmovne	qb,tmp,n1
    132   1.1       mrg 	bis	n0,qb,n0
    133   1.1       mrg 	cmplt	n0,0,tmp
    134   1.1       mrg 	addq	n1,n1,n1
    135   1.1       mrg 	bis	n1,tmp,n1
    136   1.1       mrg 	addq	n0,n0,n0
    137   1.1       mrg 	cmpule	$5,n1,qb
    138   1.1       mrg 	subq	n1,$5,tmp
    139   1.1       mrg 	cmovne	qb,tmp,n1
    140   1.1       mrg 	bis	n0,qb,n0
    141   1.1       mrg 	subq	cnt,1,cnt
    142   1.1       mrg 	bgt	cnt,$loop2
    143   1.1       mrg 
    144   1.1       mrg 	addq	n1,n1,n1
    145   1.1       mrg 	addq	$4,n1,n1
    146   1.1       mrg 	bne	$6,$Odd
    147   1.1       mrg 	stq	n1,0(rem_ptr)
    148   1.1       mrg 	bis	$31,n0,$0
    149   1.1       mrg 	ret	$31,($26),1
    150   1.1       mrg 
    151   1.1       mrg $Odd:
    152   1.1       mrg 	/* q' in n0. r' in n1 */
    153   1.1       mrg 	addq	n1,n0,n1
    154   1.1       mrg 
    155   1.1       mrg 	cmpult	n1,n0,tmp	# tmp := carry from addq
    156   1.1       mrg 	subq	n1,d,AT
    157   1.1       mrg 	addq	n0,tmp,n0
    158   1.1       mrg 	cmovne	tmp,AT,n1
    159   1.1       mrg 
    160   1.1       mrg 	cmpult	n1,d,tmp
    161   1.1       mrg 	addq	n0,1,AT
    162   1.1       mrg 	cmoveq	tmp,AT,n0
    163   1.1       mrg 	subq	n1,d,AT
    164   1.1       mrg 	cmoveq	tmp,AT,n1
    165   1.1       mrg 
    166   1.1       mrg 	stq	n1,0(rem_ptr)
    167   1.1       mrg 	bis	$31,n0,$0
    168   1.1       mrg 	ret	$31,($26),1
    169   1.1       mrg 
    170   1.1       mrg #ifdef __VMS__
    171   1.1       mrg 	.link
    172   1.1       mrg 	.align 3
    173   1.1       mrg __udiv_qrnnd:
    174   1.1       mrg 	.pdesc	__udiv_qrnnd..en,null
    175   1.1       mrg #endif
    176   1.1       mrg 	.end	__udiv_qrnnd
    177