📄 sqrt32.s
字号:
/* sqrt32.s - VxWorks conversion from Microtek tools to Sun native *//* Copyright 1984-1992 Wind River Systems, Inc. *//*modification history--------------------01b,13nov92,jwt added workaround for sqrt(-0.0) until USS patch.01a,06aug92,jwt converted.*//*! ! ! ! !! SPARClite Floating Point Library!! Copyright (C) 1992 By! United States Software Corporation! 14215 N.W. Science Park Drive! Portland, Oregon 97229!! This software is furnished under a license and may be used! and copied only in accordance with the terms of such license! and with the inclusion of the above copyright notice.! This software or any other copies thereof may not be provided! or otherwise made available to any other person. No title to! and ownership of the software is hereby transferred.!! The information in this software is subject to change without ! notice and should not be construed as a commitment by United! States Software Corporation.!! First Release: V1.02 March 26 1992! ! ! ! ! .macro scan,p1,p2,p3 .word 0x81602000 | (&p3<<25) | (&p1<<14) | p2 .endm .macro umul,p1,p2,p3 .word 0x80500000 | (&p3<<25) | (&p1<<14) | &p2 .endm .macro divscc,p1,p2,p3 .word 0x80e80000 | (&p3<<25) | (&p1<<14) | &p2 .endm*/#include "arch/sparc/ussSun4.h" .text .align 4 .global _exsqrt_exsqrt: save %sp,-96,%sp subcc %i0,0,%i0 be Aret andcc %i2,1,%l5 be i1 NOP sethi %hi(0x67f21800),%l0 umul %i0,%l0,%l0 rd %y,%l0 sethi %hi(0x4d134800),%l5 add %l0,%l5,%l0 srl %i1,1,%i1 sll %i0,31,%l5 srl %i0,1,%i0 or %i1,%l5,%i1 ba e1 add %i2,1,%i2i1: sethi %hi(0x93000000),%l0 umul %i0,%l0,%l0 rd %y,%l0 sethi %hi(0x6cfffc00),%l5 add %l0,%l5,%l0e1: sra %i2,1,%i2 add %i2,0x1ff,%i2 srl %i1,1,%i1 sll %i0,31,%l5 srl %i0,1,%i0 or %i1,%l5,%i1 wr %i0,0,%y or %g0,%i1,%i3 orcc %g0,0,%g0#if 0 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3#else DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25)#endif srl %l0,1,%l0 addcc %l0,%i3,%l0 subx %l0,0,%l0 wr %i0,0,%y or %g0,%i1,%i3 orcc %g0,0,%g0#if 0 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3#else DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25)#endif srl %l0,1,%l0 addcc %l0,%i3,%l0 subx %l0,0,%l0 wr %i0,0,%y or %g0,%i1,%i3 orcc %g0,0,%g0#if 0 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3 divscc %i3,%l0,%i3#else DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25) DIVSCC | (in3 << 14) | lo0 | (in3 << 25)#endif bge L1 rd %y,%l4 addcc %l0,%l4,%l4L1: wr %l4,0,%y or %g0,0x0,%i4 orcc %g0,0,%g0#if 0 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4 divscc %i4,%l0,%i4#else DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25) DIVSCC | (in4 << 14) | lo0 | (in4 << 25)#endif sll %l0,31,%l1 srl %l0,1,%l0 addcc %i4,%l1,%i4 addx %i3,%l0,%i3 or %g0,%i3,%i0 or %g0,%i4,%i1Aret:A999: jmpl %i7+8,%g0 restore %g0,0,%g0 .global _dpsqrt_dpsqrt: .global _sqrt_sqrt: save %sp,-96,%sp /* Test for negative zero */ set 0xFFF00000,%l0 /* sign (31) and exponent (30-20) */ and %l0,%i0,%l0 set 0x80000000,%l1 /* negative zero */ cmp %l0,%l1 bne sqrtNonZero nop ret /* return value = -0.0 */ restoresqrtNonZero: srl %i0,20,%i4 sll %i0,11,%i2 srl %i1,21,%l6 or %i2,%l6,%i2 sll %i1,11,%i3 sethi %hi(0x80000000),%l6 or %i2,%l6,%i2 sub %i4,1,%l6 subcc %l6,0x7fe,%g0 bcc Bspec Blab1: or %g0,%i2,%o0 or %g0,%i3,%o1 call _exsqrt or %g0,%i4,%o2 or %g0,%o0,%i5 or %g0,%o1,%l0 or %g0,%o2,%l1 andcc %i4,1,%l6 be i2 NOP srl %i3,1,%i3 sll %i2,31,%l6 srl %i2,1,%i2 or %i3,%l6,%i3i2: umul %i5,%l0,%l3 rd %y,%l2 addcc %l3,%l3,%l3 addx %l2,%l2,%l2 umul %i5,%i5,%l5 rd %y,%l4 add %l2,%l5,%l2 umul %l0,%l0,%l4 rd %y,%l5 addcc %l3,%l5,%l3 addx %l2,0,%l2 sub %l2,%i3,%l2 or %l2,%l3,%l6 orcc %l6,%l4,%l6 be Bret subcc %l2,0,%l2 bneg Bloo1 NOPBloo2: subcc %l0,1,%l0 subx %i5,0,%i5 addcc %l4,1,%l4 addxcc %l3,0,%l3 addx %l2,0,%l2 subcc %l4,%l0,%l4 subxcc %l3,%i5,%l3 subx %l2,0,%l2 subcc %l4,%l0,%l4 subxcc %l3,%i5,%l3 subxcc %l2,0,%l2 bpos Bloo2 NOP ba,a Bret Bloo1: addcc %l0,1,%l0 addxcc %i5,0,%i5 bcs Blab3 NOP addcc %l4,%l0,%l4 addxcc %l3,%i5,%l3 addx %l2,0,%l2 addcc %l4,%l0,%l4 addxcc %l3,%i5,%l3 addx %l2,0,%l2 addcc %l4,1,%l4 addxcc %l3,0,%l3 addxcc %l2,0,%l2 bneg Bloo1 NOPBlab3: subcc %l0,1,%l0 subx %i5,0,%i5Bret: addcc %l0,0x400,%l0 addxcc %i5,0,%i5 addx %l1,0,%l1 srl %l0,11,%i1 sll %i5,21,%l6 or %i1,%l6,%i1 srl %i5,11,%i0 sethi %hi(0xfffff),%l6 or %l6,0x3ff,%l6 and %i0,%l6,%i0 sll %l1,20,%l6 or %i0,%l6,%i0B999: jmpl %i7+8,%g0 restore %g0,0,%g0Bspec: subcc %i0,0,%i0 bneg Bnan subcc %i4,0,%i4 bne i4 NOP addcc %i3,%i3,%i3 addx %i2,%i2,%i2 orcc %i2,%i3,%l6 be Bzer NOP/* scan %i2,0,%l2 */ SCAN | (in2 << 14) | 0 | (lo2 << 25) subcc %l2,63,%g0 bne L2 NOP or %i3,0,%i2 or %g0,0,%i3 sub %i4,32,%i4/* scan %i2,0,%l2 */ SCAN | (in2 << 14) | 0 | (lo2 << 25) subcc %l2,63,%g0 be,a L2 or %l2,0,%i4L2: subcc %g0,%l2,%l3 be Blab1 sub %i4,%l2,%i4 sll %i2,%l2,%i2 srl %i3,%l3,%l3 or %l3,%i2,%i2 sll %i3,%l2,%i3 ba,a Blab1 i4: sll %i2,1,%l6 orcc %l6,%i3,%l6 bne Bnan NOP ba,a B999 Bnan: sethi %hi(0xfff80000),%i0 ba B999 or %g0,0,%i1Bzer: or %g0,0,%i1 ba B999 or %g0,%i1,%i0! .end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -