📄 udiv_qrnnd.s
字号:
! SPARC __udiv_qrnnd division support, used from longlong.h.! Copyright (C) 1993, 1994 Free Software Foundation, Inc.! This file is part of the GNU MP Library.! The GNU MP Library is free software; you can redistribute it and/or modify! it under the terms of the GNU Library General Public License as published by! the Free Software Foundation; either version 2 of the License, or (at your! option) any later version.! The GNU MP Library is distributed in the hope that it will be useful, but! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY! or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public! License for more details.! You should have received a copy of the GNU Library General Public License! along with the GNU MP Library; see the file COPYING.LIB. If not, write to! the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.! INPUT PARAMETERS! rem_ptr o0! n1 o1! n0 o2! d o3#include "sysdep.h" .text .align 4 .global C_SYMBOL_NAME(__udiv_qrnnd)C_SYMBOL_NAME(__udiv_qrnnd): tst %o3 bneg Largedivisor mov 8,%g1 b Lp1 addxcc %o2,%o2,%o2Lplop: bcc Ln1 addxcc %o2,%o2,%o2Lp1: addx %o1,%o1,%o1 subcc %o1,%o3,%o4 bcc Ln2 addxcc %o2,%o2,%o2Lp2: addx %o1,%o1,%o1 subcc %o1,%o3,%o4 bcc Ln3 addxcc %o2,%o2,%o2Lp3: addx %o1,%o1,%o1 subcc %o1,%o3,%o4 bcc Ln4 addxcc %o2,%o2,%o2Lp4: addx %o1,%o1,%o1 addcc %g1,-1,%g1 bne Lplop subcc %o1,%o3,%o4 bcc Ln5 addxcc %o2,%o2,%o2Lp5: st %o1,[%o0] retl xnor %g0,%o2,%o0Lnlop: bcc Lp1 addxcc %o2,%o2,%o2Ln1: addx %o4,%o4,%o4 subcc %o4,%o3,%o1 bcc Lp2 addxcc %o2,%o2,%o2Ln2: addx %o4,%o4,%o4 subcc %o4,%o3,%o1 bcc Lp3 addxcc %o2,%o2,%o2Ln3: addx %o4,%o4,%o4 subcc %o4,%o3,%o1 bcc Lp4 addxcc %o2,%o2,%o2Ln4: addx %o4,%o4,%o4 addcc %g1,-1,%g1 bne Lnlop subcc %o4,%o3,%o1 bcc Lp5 addxcc %o2,%o2,%o2Ln5: st %o4,[%o0] retl xnor %g0,%o2,%o0Largedivisor: and %o2,1,%o5 ! %o5 = n0 & 1 srl %o2,1,%o2 sll %o1,31,%g2 or %g2,%o2,%o2 ! %o2 = lo(n1n0 >> 1) srl %o1,1,%o1 ! %o1 = hi(n1n0 >> 1) and %o3,1,%g2 srl %o3,1,%g3 ! %g3 = floor(d / 2) add %g3,%g2,%g3 ! %g3 = ceil(d / 2) b LLp1 addxcc %o2,%o2,%o2LLplop: bcc LLn1 addxcc %o2,%o2,%o2LLp1: addx %o1,%o1,%o1 subcc %o1,%g3,%o4 bcc LLn2 addxcc %o2,%o2,%o2LLp2: addx %o1,%o1,%o1 subcc %o1,%g3,%o4 bcc LLn3 addxcc %o2,%o2,%o2LLp3: addx %o1,%o1,%o1 subcc %o1,%g3,%o4 bcc LLn4 addxcc %o2,%o2,%o2LLp4: addx %o1,%o1,%o1 addcc %g1,-1,%g1 bne LLplop subcc %o1,%g3,%o4 bcc LLn5 addxcc %o2,%o2,%o2LLp5: add %o1,%o1,%o1 ! << 1 tst %g2 bne Oddp add %o5,%o1,%o1 st %o1,[%o0] retl xnor %g0,%o2,%o0LLnlop: bcc LLp1 addxcc %o2,%o2,%o2LLn1: addx %o4,%o4,%o4 subcc %o4,%g3,%o1 bcc LLp2 addxcc %o2,%o2,%o2LLn2: addx %o4,%o4,%o4 subcc %o4,%g3,%o1 bcc LLp3 addxcc %o2,%o2,%o2LLn3: addx %o4,%o4,%o4 subcc %o4,%g3,%o1 bcc LLp4 addxcc %o2,%o2,%o2LLn4: addx %o4,%o4,%o4 addcc %g1,-1,%g1 bne LLnlop subcc %o4,%g3,%o1 bcc LLp5 addxcc %o2,%o2,%o2LLn5: add %o4,%o4,%o4 ! << 1 tst %g2 bne Oddn add %o5,%o4,%o4 st %o4,[%o0] retl xnor %g0,%o2,%o0Oddp: xnor %g0,%o2,%o2 ! q' in %o2. r' in %o1 addcc %o1,%o2,%o1 bcc LLp6 addx %o2,0,%o2 sub %o1,%o3,%o1LLp6: subcc %o1,%o3,%g0 bcs LLp7 subx %o2,-1,%o2 sub %o1,%o3,%o1LLp7: st %o1,[%o0] retl mov %o2,%o0Oddn: xnor %g0,%o2,%o2 ! q' in %o2. r' in %o4 addcc %o4,%o2,%o4 bcc LLn6 addx %o2,0,%o2 sub %o4,%o3,%o4LLn6: subcc %o4,%o3,%g0 bcs LLn7 subx %o2,-1,%o2 sub %o4,%o3,%o4LLn7: st %o4,[%o0] retl mov %o2,%o0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -