|
|
1.1 ! root 1: /* Ksqrtf.s 1.3 86/01/05 */ ! 2: ! 3: #include "../tahoe/SYS.h" ! 4: ! 5: .text ! 6: ENTRY(Ksqrtf, 0) ! 7: subl3 $76,fp,sp ! 8: tstl 4(fp) # if (arg <= 0.) { ! 9: jgtr L18 ! 10: jgeq L19 # if (arg < 0.) ! 11: L19: clrl r1 ! 12: clrl r0 ! 13: ret # return(0.);} ! 14: L18: ! 15: pushl 20(fp) # hfs ! 16: subl3 $72,fp,-(sp) ! 17: pushl 8(fp) ! 18: pushl 4(fp) ! 19: callf $20,_Kfrexpf ! 20: clrl -60+4(fp) ! 21: movl r0,-60(fp) # x = frexp(arg,&exp); ! 22: jbr L20 ! 23: L2000001: ! 24: pushl 20(fp) # hfs ! 25: ldd two ! 26: pushd ! 27: ldd -60(fp) ! 28: pushd ! 29: callf $24,_Kmuld # x * 2 ! 30: ldd r0 ! 31: std -60(fp) # x *= 2; ! 32: decl -72(fp) # exp--;} ! 33: L20: cmpd2 -60(fp),half # while(x < 0.5){ ! 34: jlss L2000001 ! 35: bitl $1,-72(fp) # if(exp & 1) { ! 36: jeql L24 ! 37: pushl 20(fp) # hfs ! 38: ldd two ! 39: pushd ! 40: ldd -60(fp) ! 41: pushd ! 42: callf $24,_Kmuld # x * 2 ! 43: ldd r0 ! 44: std -60(fp) # x *= 2; ! 45: decl -72(fp) # exp--;} ! 46: L24: pushl 20(fp) # hfs ! 47: ldd -60(fp) ! 48: pushd ! 49: ldd one ! 50: pushd ! 51: callf $24,_Kaddd # (1.0+x) ! 52: pushl 20(fp) # hfs ! 53: ldd r0 ! 54: pushd ! 55: ldd half ! 56: pushd ! 57: callf $24,_Kmuld ! 58: ldd r0 ! 59: std -68(fp) # temp=0.5*(1.0+x); ! 60: jbr L28 ! 61: L2000003: ! 62: pushl 20(fp) # hfs ! 63: ldd big ! 64: pushd ! 65: ldd -68(fp) ! 66: pushd ! 67: callf $24,_Kmuld # temp*(1L<<30) ! 68: ldd r0 ! 69: std -68(fp) # temp *=(1L<<30); ! 70: subl2 $60,-72(fp) # exp -= 60;} ! 71: L28: cmpl -72(fp),$60 # while(exp > 60){ ! 72: jleq L31 ! 73: jbr L2000003 ! 74: L2000005: ! 75: pushl 20(fp) # hfs ! 76: ldd big ! 77: pushd ! 78: ldd -68(fp) ! 79: pushd ! 80: callf $24,_Kdivd ! 81: ldd r0 ! 82: std -68(fp) # temp /= (1L<<30); ! 83: addl2 $60,-72(fp) # exp +=60;} ! 84: L31: cmpl -72(fp),$-60 # while(exp < -60) { ! 85: jlss L2000005 ! 86: tstl -72(fp) # if(exp >=0) ! 87: jlss L34 ! 88: divl3 $2,-72(fp),r0 ! 89: shll r0,$1,r0 ! 90: pushl 20(fp) # hfs ! 91: pushl $0 ! 92: pushl r0 ! 93: pushl $0 ! 94: pushl $0 ! 95: callf $24,_Kcvtld ! 96: pushl 20(fp) # hfs ! 97: ldd r0 ! 98: pushd ! 99: ldd -68(fp) ! 100: pushd ! 101: callf $24,_Kmuld # temp * (1L <<(exp/2)) ! 102: jbr L2000006 # temp *= 1L << (exp/2)); ! 103: L34: mnegl -72(fp),r0 # -exp ! 104: divl2 $2,r0 # -exp/2 ! 105: shll r0,$1,r0 ! 106: pushl 20(fp) # hfs ! 107: pushl $0 ! 108: pushl r0 ! 109: pushl $0 ! 110: pushl $0 ! 111: callf $24,_Kcvtld ! 112: pushl 20(fp) # hfs ! 113: ldd r0 ! 114: pushd ! 115: ldd -68(fp) ! 116: pushd ! 117: callf $24,_Kdivd # temp / (1L <<(-exp/2)) ! 118: L2000006: ! 119: ldd r0 ! 120: std -68(fp) # temp (*/)= 1L << (exp/2)); ! 121: clrl -76(fp) ! 122: L2000008: ! 123: pushl 20(fp) # hfs ! 124: ldd -68(fp) ! 125: pushd ! 126: ldd 4(fp) ! 127: pushd ! 128: callf $24,_Kdivd ! 129: pushl 20(fp) # hfs ! 130: ldd r0 ! 131: pushd ! 132: ldd -68(fp) ! 133: pushd ! 134: callf $24,_Kaddd ! 135: pushl 20(fp) # hfs ! 136: ldd r0 ! 137: pushd ! 138: ldd half ! 139: pushd ! 140: callf $24,_Kmuld ! 141: ldd r0 ! 142: std -68(fp) # temp=0.5*(temp+arg/temp); ! 143: aobleq $3,-76(fp),L2000008 ! 144: ldd -68(fp) ! 145: cvdf ! 146: stf r0 ! 147: ret ! 148: ! 149: .data ! 150: .align 2 ! 151: half: .long 0x40000000, 0x00000000 # .double .5 ! 152: two: .long 0x41000000, 0x00000000 # .double 2 ! 153: one: .long 0x40800000, 0x00000000 # .double 1 ! 154: big: .long 0x4F800000, 0x00000000 # .double (1<<30)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.