1d4d016caSLinus Torvalds # Alpha 21064 __udiv_qrnnd 2d4d016caSLinus Torvalds # Copyright (C) 1992, 1994, 1995, 2000 Free Software Foundation, Inc. 3d4d016caSLinus Torvalds 4d4d016caSLinus Torvalds # This file is part of GCC. 5d4d016caSLinus Torvalds 6d4d016caSLinus Torvalds # The GNU MP Library is free software; you can redistribute it and/or modify 7d4d016caSLinus Torvalds # it under the terms of the GNU General Public License as published by 8d4d016caSLinus Torvalds # the Free Software Foundation; either version 2 of the License, or (at your 9d4d016caSLinus Torvalds # option) any later version. 10d4d016caSLinus Torvalds 11d4d016caSLinus Torvalds # In addition to the permissions in the GNU General Public License, the 12d4d016caSLinus Torvalds # Free Software Foundation gives you unlimited permission to link the 13d4d016caSLinus Torvalds # compiled version of this file with other programs, and to distribute 14d4d016caSLinus Torvalds # those programs without any restriction coming from the use of this 15d4d016caSLinus Torvalds # file. (The General Public License restrictions do apply in other 16d4d016caSLinus Torvalds # respects; for example, they cover modification of the file, and 17d4d016caSLinus Torvalds # distribution when not linked into another program.) 18d4d016caSLinus Torvalds 19d4d016caSLinus Torvalds # This file is distributed in the hope that it will be useful, but 20d4d016caSLinus Torvalds # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 21d4d016caSLinus Torvalds # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 22d4d016caSLinus Torvalds # License for more details. 23d4d016caSLinus Torvalds 24d4d016caSLinus Torvalds # You should have received a copy of the GNU General Public License 25d4d016caSLinus Torvalds # along with GCC; see the file COPYING. If not, write to the 26d4d016caSLinus Torvalds # Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, 27d4d016caSLinus Torvalds # MA 02111-1307, USA. 28*f3c78e94SMasahiro Yamada#include <linux/export.h> 29d4d016caSLinus Torvalds 30d4d016caSLinus Torvalds .set noreorder 31d4d016caSLinus Torvalds .set noat 32d4d016caSLinus Torvalds 33d4d016caSLinus Torvalds .text 34d4d016caSLinus Torvalds 35d4d016caSLinus Torvalds .globl __udiv_qrnnd 36d4d016caSLinus Torvalds .ent __udiv_qrnnd 37d4d016caSLinus Torvalds__udiv_qrnnd: 38d4d016caSLinus Torvalds .frame $30,0,$26,0 39d4d016caSLinus Torvalds .prologue 0 40d4d016caSLinus Torvalds 41d4d016caSLinus Torvalds#define cnt $2 42d4d016caSLinus Torvalds#define tmp $3 43d4d016caSLinus Torvalds#define rem_ptr $16 44d4d016caSLinus Torvalds#define n1 $17 45d4d016caSLinus Torvalds#define n0 $18 46d4d016caSLinus Torvalds#define d $19 47d4d016caSLinus Torvalds#define qb $20 48d4d016caSLinus Torvalds#define AT $at 49d4d016caSLinus Torvalds 50d4d016caSLinus Torvalds ldiq cnt,16 51d4d016caSLinus Torvalds blt d,$largedivisor 52d4d016caSLinus Torvalds 53d4d016caSLinus Torvalds$loop1: cmplt n0,0,tmp 54d4d016caSLinus Torvalds addq n1,n1,n1 55d4d016caSLinus Torvalds bis n1,tmp,n1 56d4d016caSLinus Torvalds addq n0,n0,n0 57d4d016caSLinus Torvalds cmpule d,n1,qb 58d4d016caSLinus Torvalds subq n1,d,tmp 59d4d016caSLinus Torvalds cmovne qb,tmp,n1 60d4d016caSLinus Torvalds bis n0,qb,n0 61d4d016caSLinus Torvalds cmplt n0,0,tmp 62d4d016caSLinus Torvalds addq n1,n1,n1 63d4d016caSLinus Torvalds bis n1,tmp,n1 64d4d016caSLinus Torvalds addq n0,n0,n0 65d4d016caSLinus Torvalds cmpule d,n1,qb 66d4d016caSLinus Torvalds subq n1,d,tmp 67d4d016caSLinus Torvalds cmovne qb,tmp,n1 68d4d016caSLinus Torvalds bis n0,qb,n0 69d4d016caSLinus Torvalds cmplt n0,0,tmp 70d4d016caSLinus Torvalds addq n1,n1,n1 71d4d016caSLinus Torvalds bis n1,tmp,n1 72d4d016caSLinus Torvalds addq n0,n0,n0 73d4d016caSLinus Torvalds cmpule d,n1,qb 74d4d016caSLinus Torvalds subq n1,d,tmp 75d4d016caSLinus Torvalds cmovne qb,tmp,n1 76d4d016caSLinus Torvalds bis n0,qb,n0 77d4d016caSLinus Torvalds cmplt n0,0,tmp 78d4d016caSLinus Torvalds addq n1,n1,n1 79d4d016caSLinus Torvalds bis n1,tmp,n1 80d4d016caSLinus Torvalds addq n0,n0,n0 81d4d016caSLinus Torvalds cmpule d,n1,qb 82d4d016caSLinus Torvalds subq n1,d,tmp 83d4d016caSLinus Torvalds cmovne qb,tmp,n1 84d4d016caSLinus Torvalds bis n0,qb,n0 85d4d016caSLinus Torvalds subq cnt,1,cnt 86d4d016caSLinus Torvalds bgt cnt,$loop1 87d4d016caSLinus Torvalds stq n1,0(rem_ptr) 88d4d016caSLinus Torvalds bis $31,n0,$0 89d4d016caSLinus Torvalds ret $31,($26),1 90d4d016caSLinus Torvalds 91d4d016caSLinus Torvalds$largedivisor: 92d4d016caSLinus Torvalds and n0,1,$4 93d4d016caSLinus Torvalds 94d4d016caSLinus Torvalds srl n0,1,n0 95d4d016caSLinus Torvalds sll n1,63,tmp 96d4d016caSLinus Torvalds or tmp,n0,n0 97d4d016caSLinus Torvalds srl n1,1,n1 98d4d016caSLinus Torvalds 99d4d016caSLinus Torvalds and d,1,$6 100d4d016caSLinus Torvalds srl d,1,$5 101d4d016caSLinus Torvalds addq $5,$6,$5 102d4d016caSLinus Torvalds 103d4d016caSLinus Torvalds$loop2: cmplt n0,0,tmp 104d4d016caSLinus Torvalds addq n1,n1,n1 105d4d016caSLinus Torvalds bis n1,tmp,n1 106d4d016caSLinus Torvalds addq n0,n0,n0 107d4d016caSLinus Torvalds cmpule $5,n1,qb 108d4d016caSLinus Torvalds subq n1,$5,tmp 109d4d016caSLinus Torvalds cmovne qb,tmp,n1 110d4d016caSLinus Torvalds bis n0,qb,n0 111d4d016caSLinus Torvalds cmplt n0,0,tmp 112d4d016caSLinus Torvalds addq n1,n1,n1 113d4d016caSLinus Torvalds bis n1,tmp,n1 114d4d016caSLinus Torvalds addq n0,n0,n0 115d4d016caSLinus Torvalds cmpule $5,n1,qb 116d4d016caSLinus Torvalds subq n1,$5,tmp 117d4d016caSLinus Torvalds cmovne qb,tmp,n1 118d4d016caSLinus Torvalds bis n0,qb,n0 119d4d016caSLinus Torvalds cmplt n0,0,tmp 120d4d016caSLinus Torvalds addq n1,n1,n1 121d4d016caSLinus Torvalds bis n1,tmp,n1 122d4d016caSLinus Torvalds addq n0,n0,n0 123d4d016caSLinus Torvalds cmpule $5,n1,qb 124d4d016caSLinus Torvalds subq n1,$5,tmp 125d4d016caSLinus Torvalds cmovne qb,tmp,n1 126d4d016caSLinus Torvalds bis n0,qb,n0 127d4d016caSLinus Torvalds cmplt n0,0,tmp 128d4d016caSLinus Torvalds addq n1,n1,n1 129d4d016caSLinus Torvalds bis n1,tmp,n1 130d4d016caSLinus Torvalds addq n0,n0,n0 131d4d016caSLinus Torvalds cmpule $5,n1,qb 132d4d016caSLinus Torvalds subq n1,$5,tmp 133d4d016caSLinus Torvalds cmovne qb,tmp,n1 134d4d016caSLinus Torvalds bis n0,qb,n0 135d4d016caSLinus Torvalds subq cnt,1,cnt 136d4d016caSLinus Torvalds bgt cnt,$loop2 137d4d016caSLinus Torvalds 138d4d016caSLinus Torvalds addq n1,n1,n1 139d4d016caSLinus Torvalds addq $4,n1,n1 140d4d016caSLinus Torvalds bne $6,$Odd 141d4d016caSLinus Torvalds stq n1,0(rem_ptr) 142d4d016caSLinus Torvalds bis $31,n0,$0 143d4d016caSLinus Torvalds ret $31,($26),1 144d4d016caSLinus Torvalds 145d4d016caSLinus Torvalds$Odd: 146d4d016caSLinus Torvalds /* q' in n0. r' in n1 */ 147d4d016caSLinus Torvalds addq n1,n0,n1 148d4d016caSLinus Torvalds 149d4d016caSLinus Torvalds cmpult n1,n0,tmp # tmp := carry from addq 150d4d016caSLinus Torvalds subq n1,d,AT 151d4d016caSLinus Torvalds addq n0,tmp,n0 152d4d016caSLinus Torvalds cmovne tmp,AT,n1 153d4d016caSLinus Torvalds 154d4d016caSLinus Torvalds cmpult n1,d,tmp 155d4d016caSLinus Torvalds addq n0,1,AT 156d4d016caSLinus Torvalds cmoveq tmp,AT,n0 157d4d016caSLinus Torvalds subq n1,d,AT 158d4d016caSLinus Torvalds cmoveq tmp,AT,n1 159d4d016caSLinus Torvalds 160d4d016caSLinus Torvalds stq n1,0(rem_ptr) 161d4d016caSLinus Torvalds bis $31,n0,$0 162d4d016caSLinus Torvalds ret $31,($26),1 163d4d016caSLinus Torvalds 164d4d016caSLinus Torvalds .end __udiv_qrnnd 165d4d016caSLinus TorvaldsEXPORT_SYMBOL(__udiv_qrnnd) 166