18c2ecf20Sopenharmony_ci # Alpha 21064 __udiv_qrnnd 28c2ecf20Sopenharmony_ci # Copyright (C) 1992, 1994, 1995, 2000 Free Software Foundation, Inc. 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci # This file is part of GCC. 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci # The GNU MP Library is free software; you can redistribute it and/or modify 78c2ecf20Sopenharmony_ci # it under the terms of the GNU General Public License as published by 88c2ecf20Sopenharmony_ci # the Free Software Foundation; either version 2 of the License, or (at your 98c2ecf20Sopenharmony_ci # option) any later version. 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci # In addition to the permissions in the GNU General Public License, the 128c2ecf20Sopenharmony_ci # Free Software Foundation gives you unlimited permission to link the 138c2ecf20Sopenharmony_ci # compiled version of this file with other programs, and to distribute 148c2ecf20Sopenharmony_ci # those programs without any restriction coming from the use of this 158c2ecf20Sopenharmony_ci # file. (The General Public License restrictions do apply in other 168c2ecf20Sopenharmony_ci # respects; for example, they cover modification of the file, and 178c2ecf20Sopenharmony_ci # distribution when not linked into another program.) 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci # This file is distributed in the hope that it will be useful, but 208c2ecf20Sopenharmony_ci # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 218c2ecf20Sopenharmony_ci # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 228c2ecf20Sopenharmony_ci # License for more details. 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci # You should have received a copy of the GNU General Public License 258c2ecf20Sopenharmony_ci # along with GCC; see the file COPYING. If not, write to the 268c2ecf20Sopenharmony_ci # Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 278c2ecf20Sopenharmony_ci # MA 02111-1307, USA. 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci .set noreorder 308c2ecf20Sopenharmony_ci .set noat 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci .text 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci .globl __udiv_qrnnd 358c2ecf20Sopenharmony_ci .ent __udiv_qrnnd 368c2ecf20Sopenharmony_ci__udiv_qrnnd: 378c2ecf20Sopenharmony_ci .frame $30,0,$26,0 388c2ecf20Sopenharmony_ci .prologue 0 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#define cnt $2 418c2ecf20Sopenharmony_ci#define tmp $3 428c2ecf20Sopenharmony_ci#define rem_ptr $16 438c2ecf20Sopenharmony_ci#define n1 $17 448c2ecf20Sopenharmony_ci#define n0 $18 458c2ecf20Sopenharmony_ci#define d $19 468c2ecf20Sopenharmony_ci#define qb $20 478c2ecf20Sopenharmony_ci#define AT $at 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci ldiq cnt,16 508c2ecf20Sopenharmony_ci blt d,$largedivisor 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci$loop1: cmplt n0,0,tmp 538c2ecf20Sopenharmony_ci addq n1,n1,n1 548c2ecf20Sopenharmony_ci bis n1,tmp,n1 558c2ecf20Sopenharmony_ci addq n0,n0,n0 568c2ecf20Sopenharmony_ci cmpule d,n1,qb 578c2ecf20Sopenharmony_ci subq n1,d,tmp 588c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 598c2ecf20Sopenharmony_ci bis n0,qb,n0 608c2ecf20Sopenharmony_ci cmplt n0,0,tmp 618c2ecf20Sopenharmony_ci addq n1,n1,n1 628c2ecf20Sopenharmony_ci bis n1,tmp,n1 638c2ecf20Sopenharmony_ci addq n0,n0,n0 648c2ecf20Sopenharmony_ci cmpule d,n1,qb 658c2ecf20Sopenharmony_ci subq n1,d,tmp 668c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 678c2ecf20Sopenharmony_ci bis n0,qb,n0 688c2ecf20Sopenharmony_ci cmplt n0,0,tmp 698c2ecf20Sopenharmony_ci addq n1,n1,n1 708c2ecf20Sopenharmony_ci bis n1,tmp,n1 718c2ecf20Sopenharmony_ci addq n0,n0,n0 728c2ecf20Sopenharmony_ci cmpule d,n1,qb 738c2ecf20Sopenharmony_ci subq n1,d,tmp 748c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 758c2ecf20Sopenharmony_ci bis n0,qb,n0 768c2ecf20Sopenharmony_ci cmplt n0,0,tmp 778c2ecf20Sopenharmony_ci addq n1,n1,n1 788c2ecf20Sopenharmony_ci bis n1,tmp,n1 798c2ecf20Sopenharmony_ci addq n0,n0,n0 808c2ecf20Sopenharmony_ci cmpule d,n1,qb 818c2ecf20Sopenharmony_ci subq n1,d,tmp 828c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 838c2ecf20Sopenharmony_ci bis n0,qb,n0 848c2ecf20Sopenharmony_ci subq cnt,1,cnt 858c2ecf20Sopenharmony_ci bgt cnt,$loop1 868c2ecf20Sopenharmony_ci stq n1,0(rem_ptr) 878c2ecf20Sopenharmony_ci bis $31,n0,$0 888c2ecf20Sopenharmony_ci ret $31,($26),1 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci$largedivisor: 918c2ecf20Sopenharmony_ci and n0,1,$4 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci srl n0,1,n0 948c2ecf20Sopenharmony_ci sll n1,63,tmp 958c2ecf20Sopenharmony_ci or tmp,n0,n0 968c2ecf20Sopenharmony_ci srl n1,1,n1 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ci and d,1,$6 998c2ecf20Sopenharmony_ci srl d,1,$5 1008c2ecf20Sopenharmony_ci addq $5,$6,$5 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci$loop2: cmplt n0,0,tmp 1038c2ecf20Sopenharmony_ci addq n1,n1,n1 1048c2ecf20Sopenharmony_ci bis n1,tmp,n1 1058c2ecf20Sopenharmony_ci addq n0,n0,n0 1068c2ecf20Sopenharmony_ci cmpule $5,n1,qb 1078c2ecf20Sopenharmony_ci subq n1,$5,tmp 1088c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 1098c2ecf20Sopenharmony_ci bis n0,qb,n0 1108c2ecf20Sopenharmony_ci cmplt n0,0,tmp 1118c2ecf20Sopenharmony_ci addq n1,n1,n1 1128c2ecf20Sopenharmony_ci bis n1,tmp,n1 1138c2ecf20Sopenharmony_ci addq n0,n0,n0 1148c2ecf20Sopenharmony_ci cmpule $5,n1,qb 1158c2ecf20Sopenharmony_ci subq n1,$5,tmp 1168c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 1178c2ecf20Sopenharmony_ci bis n0,qb,n0 1188c2ecf20Sopenharmony_ci cmplt n0,0,tmp 1198c2ecf20Sopenharmony_ci addq n1,n1,n1 1208c2ecf20Sopenharmony_ci bis n1,tmp,n1 1218c2ecf20Sopenharmony_ci addq n0,n0,n0 1228c2ecf20Sopenharmony_ci cmpule $5,n1,qb 1238c2ecf20Sopenharmony_ci subq n1,$5,tmp 1248c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 1258c2ecf20Sopenharmony_ci bis n0,qb,n0 1268c2ecf20Sopenharmony_ci cmplt n0,0,tmp 1278c2ecf20Sopenharmony_ci addq n1,n1,n1 1288c2ecf20Sopenharmony_ci bis n1,tmp,n1 1298c2ecf20Sopenharmony_ci addq n0,n0,n0 1308c2ecf20Sopenharmony_ci cmpule $5,n1,qb 1318c2ecf20Sopenharmony_ci subq n1,$5,tmp 1328c2ecf20Sopenharmony_ci cmovne qb,tmp,n1 1338c2ecf20Sopenharmony_ci bis n0,qb,n0 1348c2ecf20Sopenharmony_ci subq cnt,1,cnt 1358c2ecf20Sopenharmony_ci bgt cnt,$loop2 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_ci addq n1,n1,n1 1388c2ecf20Sopenharmony_ci addq $4,n1,n1 1398c2ecf20Sopenharmony_ci bne $6,$Odd 1408c2ecf20Sopenharmony_ci stq n1,0(rem_ptr) 1418c2ecf20Sopenharmony_ci bis $31,n0,$0 1428c2ecf20Sopenharmony_ci ret $31,($26),1 1438c2ecf20Sopenharmony_ci 1448c2ecf20Sopenharmony_ci$Odd: 1458c2ecf20Sopenharmony_ci /* q' in n0. r' in n1 */ 1468c2ecf20Sopenharmony_ci addq n1,n0,n1 1478c2ecf20Sopenharmony_ci 1488c2ecf20Sopenharmony_ci cmpult n1,n0,tmp # tmp := carry from addq 1498c2ecf20Sopenharmony_ci subq n1,d,AT 1508c2ecf20Sopenharmony_ci addq n0,tmp,n0 1518c2ecf20Sopenharmony_ci cmovne tmp,AT,n1 1528c2ecf20Sopenharmony_ci 1538c2ecf20Sopenharmony_ci cmpult n1,d,tmp 1548c2ecf20Sopenharmony_ci addq n0,1,AT 1558c2ecf20Sopenharmony_ci cmoveq tmp,AT,n0 1568c2ecf20Sopenharmony_ci subq n1,d,AT 1578c2ecf20Sopenharmony_ci cmoveq tmp,AT,n1 1588c2ecf20Sopenharmony_ci 1598c2ecf20Sopenharmony_ci stq n1,0(rem_ptr) 1608c2ecf20Sopenharmony_ci bis $31,n0,$0 1618c2ecf20Sopenharmony_ci ret $31,($26),1 1628c2ecf20Sopenharmony_ci 1638c2ecf20Sopenharmony_ci .end __udiv_qrnnd 164