📄 dp32.s
字号:
DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25) DIVSCC | (lo5 << 14) | lo1 | (lo5 << 25)#endif bge L27 rd %y,%i4 addcc %l1,%i4,%i4L27: umul %l5,%l2,%i2 rd %y,%l7 or %g0,0,%i5 subcc %i5,%i2,%i5 subxcc %i4,%l7,%i4 bcc i16 NOPDlab3: sub %l5,1,%l5 addcc %i5,%l2,%i5 addxcc %i4,%l1,%i4 bcc Dlab3 i16: subcc %i4,%l1,%g0 bne i17 NOP or %g0,%l2,%l7 or %g0,%i5,%i4 or %g0,0,%l6 ba e17 or %g0,%l6,%i2i17: wr %i4,0,%y or %g0,%i5,%l6 orcc %g0,0,%g0#if 0 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6 divscc %l6,%l1,%l6#else DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25) DIVSCC | (lo6 << 14) | lo1 | (lo6 << 25)#endif bge L28 rd %y,%i4 addcc %l1,%i4,%i4L28: umul %l6,%l2,%i2 rd %y,%l7e17: or %g0,0,%i5 subcc %i5,%i2,%i5 subxcc %i4,%l7,%i4 bcc i18 NOPDlab4: sub %l6,1,%l6 addcc %i5,%l2,%i5 addxcc %i4,%l1,%i4 bcc Dlab4 NOPi18: sub %l0,%l3,%l0 add %l0,0x3ff,%l0 subcc %l5,0,%l5 bneg i19 NOP addcc %l6,%l6,%l6 addx %l5,%l5,%l5 sub %l0,1,%l0i19: orcc %i4,%i5,%g1 bne,a i20 or %l6,1,%l6i20: or %g0,%l5,%i4 or %g0,%l6,%i5 sub %l0,1,%g1 subcc %g1,0x7fe,%g0 bcc Doveund NOPDlab8: addcc %i5,0x400,%i5 addxcc %i4,0,%i4 addx %l0,0,%l0 srl %i5,11,%g1 and %g1,1,%g1 sub %i5,%g1,%i5 srl %i5,11,%i1 sll %i4,21,%g1 or %i1,%g1,%i1 srl %i4,11,%i0 sethi %hi(0xfffff),%g1 or %g1,0x3ff,%g1 and %i0,%g1,%i0 sll %l0,20,%g1 or %i0,%g1,%i0Dret: or %i0,%l4,%i0D999: jmpl %i7+8,%g0 restore %g0,0,%g0Doveund: subcc %l0,0,%l0 bg Dinf NOP or %g0,1,%l5 sub %l5,%l0,%l5L29: subcc %l5,32,%g0 bcs L30 orcc %i5,0,%g0 sub %l5,32,%l5 or %i4,0,%i5 or %g0,0,%i4 be L31 orcc %i5,0,%g0 or %i5,2,%i5L31: bne L29 NOP ba,a L32 L30: subcc %g0,%l5,%l6 be L32 sll %i5,%l6,%l7 orcc %l7,0,%g0 sll %i4,%l6,%l6 srl %i5,%l5,%i5 srl %i4,%l5,%i4 or %i5,%l6,%i5 bne,a L32 or %i5,2,%i5L32: ba Dlab8 or %g0,0,%l0DspecA: subcc %l0,0,%l0 bne i21 NOP addcc %i5,%i5,%i5 addx %i4,%i4,%i4 orcc %i4,%i5,%g1 be i21 NOP/* scan %i4,0,%l5 */ SCAN | (in4 << 14) | 0 | (lo5 << 25) subcc %l5,63,%g0 bne L33 NOP or %i5,0,%i4 or %g0,0,%i5 sub %l0,32,%l0/* scan %i4,0,%l5 */ SCAN | (in4 << 14) | 0 | (lo5 << 25) subcc %l5,63,%g0 be,a L33 or %l5,0,%l0L33: subcc %g0,%l5,%l6 be Dlab1 sub %l0,%l5,%l0 sll %i4,%l5,%i4 srl %i5,%l6,%l6 or %l6,%i4,%i4 sll %i5,%l5,%i5 ba,a Dlab1 i21: subcc %l0,%l3,%g0 be Dnan subcc %l3,0x7ff,%g0 be DspecB subcc %l0,0,%l0 be Dzer sll %i4,1,%g1 orcc %g1,%i5,%g1 bne Dnan NOPDinf: sethi %hi(0x7ff00000),%i0 ba Dret or %g0,0,%i1DspecB: subcc %l3,0,%l3 bne i23 NOP addcc %l2,%l2,%l2 addx %l1,%l1,%l1 orcc %l1,%l2,%g1 be Dinf NOP/* scan %l1,0,%l5 */ SCAN | (lo1 << 14) | 0 | (lo5 << 25) subcc %l5,63,%g0 bne L35 NOP or %l2,0,%l1 or %g0,0,%l2 sub %l3,32,%l3/* scan %l1,0,%l5 */ SCAN | (lo1 << 14) | 0 | (lo5 << 25) subcc %l5,63,%g0 be,a L35 or %l5,0,%l3L35: subcc %g0,%l5,%l6 be Dlab2 sub %l3,%l5,%l3 sll %l1,%l5,%l1 srl %l2,%l6,%l6 or %l6,%l1,%l1 sll %l2,%l5,%l2 ba,a Dlab2 i23: sll %l1,1,%g1 orcc %g1,%l2,%g1 bne Dnan NOPDzer: or %g0,0,%i1 ba Dret or %g0,%i1,%i0Dnan: sethi %hi(0xfff80000),%i0 ba Dret or %g0,0,%i1 .global __dcmp .global _dpcmp! ! ! ! !! __dcmp: dp floating point comparison! On entry: o0:o1 = argument A! o2:o3 = argument B! On exit: condition codes set! o0 = -1 A < B! 0 A == B! 1 A > B! ! ! ! !__dcmp: ! C ifc_dpcmp: ! USSW ifc or %o2,%o0,%o4 ! two zeroes of any kind are equal add %o4,%o4,%o4 or %o4,%o1,%o4 orcc %o4,%o3,%o4 be cmp98! andcc %o0,%o2,%g0 bneg cmp10 ! j/ both negative!! A & B are both positive or of different sign! subcc %o0,%o2,%g0 bl,a cmp99 ! j/ A < B or %g0,-1,%o0 bg,a cmp99 ! j/ A > B or %g0,1,%o0 subcc %o1,%o3,%g0 bcs,a cmp99 ! j/ A < B or %g0,-1,%o0 bgu,a cmp99 ! j/ A > B or %g0,1,%o0cmp98: or %g0,0,%o0 ! A == Bcmp99: jmpl %o7+8,%g0 ! return orcc %g0,%o0,%g0 ! setting cc!! A & B are both negative!cmp10: subcc %o0,%o2,%g0 bl,a cmp99 ! j/ A > B or %g0,1,%o0 bg,a cmp99 ! j/ A < B or %g0,-1,%o0 subcc %o1,%o3,%o0 bcs,a cmp99 ! j/ A > B or %g0,1,%o0 bgu,a cmp99 ! j/ A < B or %g0,-1,%o0 jmpl %o7+8,%g0 ! return orcc %g0,%o0,%g0 ! setting cc .global __dtol .global _dptoli! ! ! ! !! __dtol: dp floating point to long! On entry: o0:o1 = argument A! On exit: o0 = long! Note: >>>> This routine truncates DOWN <<<<! ! ! ! !__dtol: ! C ifc_dptoli: ! USSW ifc sll %o0,1,%o2 ! o2 = exp:mant left justified sethi %hi(0xffe00000),%g1 subcc %o2,%g1,%g0 bgu tol22 ! j/ NaN srl %o2,21,%o2 ! o2 = exp right justified! sll %o0,11,%o3 ! %o3 = mantissa left justified sethi %hi(0x80000000),%g1 or %o3,%g1,%o3 srl %o1,21,%g1 or %g1,%o3,%o3!! convert mantissa to integer! subcc %o2,1054,%o2 ! check unbiased exponent bge tol22 ! j/ exp too large sub %g0,%o2,%o2 subcc %o2,31,%g0 bg tol20 ! j/ exp too small orcc %o0,0,%g0 bge tol99 ! j/ positive number srl %o3,%o2,%o0 ! shift mantissa to long answer! sub %g0,%o0,%o0 ! negative answer!tol99: jmpl %o7+8,%g0 ! return nop!! exponent too small, return 0!tol20: ba tol99 ! exp too small, return 0 or %g0,%g0,%o0!! NaN or exponent too large, return IEEE invalid 0x80000000!tol22: ba tol99 sethi %hi(0x80000000),%o0 .global _dptoul_dptoul: save %sp,-96,%sp sll %i0,11,%i3 srl %i1,21,%i5 sll %i1,11,%i4 or %i3,%i5,%i3 sethi %hi(0x80000000),%i5 or %i3,%i5,%i3 sll %i0,1,%i5 srl %i5,21,%i5 or %g0,%i3,%l0 subcc %i5,0x41f,%g0 bcc Lnaninf NOP or %g0,0x41e,%i2 subcc %i2,%i5,%i2 subcc %i2,32,%g0 bcc,a L4 or %g0,0,%l0L4: srl %l0,%i2,%l0 subcc %i0,0x0,%g0 bge i28 NOP subcc %g0,%l0,%l0i28: or %g0,%l0,%i0L999: jmpl %i7+8,%g0 restore %g0,0,%g0Lnaninf: sethi %hi(0x80000000),%i0 ba L999 NOP .global __ltod .global __ultod .global _litodp .global _ultodp! ! ! ! !! __ultod: unsigned long to dp floating point! __ltod: long to dp floating point! On entry: o0 = argument A! On exit: o0:o1 = dp floating point! ! ! ! !__ltod: ! C ifc_litodp: ! USSW ifc orcc %o0,0,%g0 bl tod10 ! j/ negative__ultod: ! C ifc_ultodp: ! USSW ifc or %g0,31+0x3ff,%o4 ! o4 = anticipated exp!! normalize mantissa to o2:o3!tod01:/* scan %o0,0,%g1 ! count zero bits */ SCAN | (out0 << 14) | 0 | (gl1 << 25) subcc %g1,63,%g0 be tod22 ! j/ zero sll %o0,%g1,%o2 ! o2 = long left justified sll %o2,1,%o2 ! toss hidden bit sll %o2,20,%o3 ! o3 = low order bits srl %o2,12,%o2 ! room for sign & mant! sub %o4,%g1,%o4 ! adjust exp sll %o4,20,%o4 ! position exp or %o2,%o4,%o2 ! combine exp & mant!! o0:o1 = answer!tod99: or %g0,%o2,%o0 ! o0:o1 = answer jmpl %o7+8,%g0 ! return or %g0,%o3,%o1!tod22: or %g0,0,%o0 ! return 0 jmpl %o7+8,%g0 or %g0,0,%o1!! negate long! normalize mantissa to o2:o3!tod10: sub %g0,%o0,%o0 ! negate long/* scan %o0,0,%g1 ! count zero bits */ SCAN | (out0 << 14) | 0 | (gl1 << 25) sll %o0,%g1,%o2 ! o2 = long left justified sll %o2,1,%o2 ! toss hidden bit sll %o2,20,%o3 ! o3 = low order bits srl %o2,12,%o2 ! room for sign & mant! sub %o4,%g1,%o4 ! adjust exp or %o4,0x800,%o4 ! combine sign & exp sll %o4,20,%o4 ! position sign & exp ba tod99 or %o2,%o4,%o2 ! combine sign & exp & mant .global _fptodp_fptodp: .global __ftod__ftod: save %sp,-96,%sp srl %i0,23,%i3 and %i3,0xff,%i3 sethi %hi(0x80000000),%i4 and %i0,%i4,%i1 sub %i3,1,%i5 subcc %i5,0xfe,%g0 bcc Gspec NOPGlab1: add %i3,0x380,%i3 sll %i0,9,%i5 srl %i5,12,%i5 or %i1,%i5,%i1 sll %i0,29,%i2Gret: sll %i3,20,%i5 or %i1,%i5,%i1Gret2: or %g0,%i1,%i0 or %g0,%i2,%i1G999: jmpl %i7+8,%g0 restore %g0,0,%g0Gspec: or %g0,0,%i2 subcc %i3,0,%i3 bne j28 NOP addcc %i0,%i0,%i0 be Gret2 NOP/* scan %i0,0,%i4 */ SCAN | (in0 << 14) | 0 | (in4 << 25) sll %i0,%i4,%i0 subcc %i3,%i4,%i3 srl %i0,8,%i0 ba Glab1 add %i3,8,%i3j28: or %g0,0x7ff,%i3 sethi %hi(0xff800000),%l0 andncc %i0,%l0,%i5 bne,a Gret sethi %hi(0xfff80000),%i1 ba,a Gret .global _dptofp_dptofp: .global __dtof__dtof: save %sp,-96,%sp sll %i0,1,%i4 srl %i4,21,%i4 sll %i0,11,%i2 srl %i1,21,%l1 or %i2,%l1,%i2 sll %i1,11,%i3 sethi %hi(0x80000000),%i5 or %i2,%i5,%i2 and %i5,%i0,%i5 sub %i4,0x380,%i4 sub %i4,1,%l1 subcc %l1,0xfe,%g0 bcc Hspec Hlab1: subcc %i3,0,%i3 bne,a i30 or %i2,1,%i2i30: addcc %i2,0x80,%i2 addx %i4,0,%i4 srl %i2,8,%l1 and %l1,1,%l1 sub %i2,%l1,%i2 sll %i2,1,%i2 srl %i2,9,%i2 sll %i4,23,%l1 or %i2,%l1,%i2 or %i2,%i5,%i0H999: jmpl %i7+8,%g0 restore %g0,0,%g0Hspec: subcc %i4,0x47f,%g0 bne i31 sll %i2,1,%l1 orcc %l1,%i3,%l1 be i31 NOP sethi %hi(0x7fc00000),%l1 ba H999 or %l1,%i5,%i0i31: subcc %i4,0xff,%g0 bl i33 NOP sethi %hi(0x7f800000),%l1 ba H999 or %l1,%i5,%i0i33: or %g0,1,%l0 sub %l0,%i4,%l0 subcc %l0,0x20,%g0 bcs i34 NOP or %i3,%i2,%i3 ba e34 or %g0,0,%i2i34: or %g0,0x20,%l2 sub %l2,%l0,%l2 sll %i2,%l2,%l1 or %i3,%l1,%i3 srl %i2,%l0,%i2e34: ba Hlab1 or %g0,0,%i4 .global _dpfabs_dpfabs: sethi %hi(0x80000000),%g1 jmpl %o7+8,%g0 andn %o0,%g1,%o0! .end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -