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