| /* SPDX-License-Identifier: GPL-2.0 */ |
| # __udiv_qrnnd |
| # Copyright (C) 1992, 1994, 1995, 2000 Free Software Foundation, Inc. |
| |
| # This file is part of GCC. |
| |
| .set noreorder |
| .set noat |
| |
| .text |
| |
| .globl __udiv_qrnnd |
| .ent __udiv_qrnnd |
| __udiv_qrnnd: |
| .frame $30, 0, $26, 0 |
| .prologue 0 |
| |
| # ldiq $2,16 |
| ldi $2, 16($31) |
| blt $19, $largedivisor |
| |
| $loop1: cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $19, $17, $20 |
| subl $17, $19, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $19, $17, $20 |
| subl $17, $19, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $19, $17, $20 |
| subl $17, $19, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $19, $17, $20 |
| subl $17, $19, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| subl $2, 1, $2 |
| bgt $2, $loop1 |
| stl $17, 0($16) |
| bis $31, $18, $0 |
| ret $31, ($26), 1 |
| |
| $largedivisor: |
| and $18, 1, $4 |
| |
| srl $18, 1, $18 |
| sll $17, 63, $3 |
| or $3, $18, $18 |
| srl $17, 1, $17 |
| |
| and $19, 1, $6 |
| srl $19, 1, $5 |
| addl $5, $6, $5 |
| |
| $loop2: cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $5, $17, $20 |
| subl $17, $5, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $5, $17, $20 |
| subl $17, $5, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $5, $17, $20 |
| subl $17, $5, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| cmplt $18, 0, $3 |
| addl $17, $17, $17 |
| bis $17, $3, $17 |
| addl $18, $18, $18 |
| cmpule $5, $17, $20 |
| subl $17, $5, $3 |
| selne $20, $3, $17, $17 |
| bis $18, $20, $18 |
| subl $2, 1, $2 |
| bgt $2, $loop2 |
| |
| addl $17, $17, $17 |
| addl $4, $17, $17 |
| bne $6, $Odd |
| stl $17, 0($16) |
| bis $31, $18, $0 |
| ret $31, ($26), 1 |
| |
| $Odd: |
| # q' in $18. r' in $17 |
| addl $17, $18, $17 |
| |
| cmpult $17, $18, $3 # $3 := carry from addl |
| subl $17, $19, $at |
| addl $18, $3, $18 |
| selne $3, $at, $17, $17 |
| |
| cmpult $17, $19, $3 |
| addl $18, 1, $at |
| seleq $3, $at, $18, $18 |
| subl $17, $19, $at |
| seleq $3, $at, $17, $17 |
| |
| stl $17, 0($16) |
| bis $31, $18, $0 |
| ret $31, ($26), 1 |
| |
| .end __udiv_qrnnd |