|
|
1.1 ! root 1: # double atan(arg1); -pi/2 < atan < pi/2 ! 2: #double atan2(arg1,arg2); -pi< atan2<pi ! 3: #double arg1,arg2 ! 4: #method: range reduction to [sqrt(2)-1,sqrt(2)+1] ! 5: # followed by Hart&Cheney ARCTN 5076 D=17.55 ! 6: # J. F. Jarvis August 8, 1978 ! 7: .globl _atan ! 8: .globl _atan2 ! 9: .text ! 10: .align 1 ! 11: _atan: ! 12: .word 0x03c0 ! 13: bispsw $0xe0 ! 14: movd 4(ap),r0 ! 15: jgtr a1 ! 16: mnegd r0,r0 # atan(arg1), arg1<0 ! 17: bsbb satan ! 18: mnegd r0,r0 ! 19: ret ! 20: a1: bsbb satan # atan(arg1), arg1>=0 ! 21: ret ! 22: # ! 23: .align 1 ! 24: _atan2: ! 25: .word 0x03c0 ! 26: bispsw $0xe0 ! 27: movd 4(ap),r0 # atan(arg1/arg2) ! 28: movd 12(ap),r2 ! 29: addd3 r0,r2,r4 ! 30: cmpd r0,r4 ! 31: jneq b1 ! 32: tstd r0 ! 33: jgeq b2 ! 34: mnegd pio2,r0 ! 35: ret ! 36: b2: movd pio2,r0 ! 37: ret ! 38: # ! 39: b1: tstd r2 ! 40: jgeq b3 ! 41: divd2 r2,r0 ! 42: jleq b4 ! 43: bsbb satan # arg1<0, arg2<0 ! 44: subd2 pi,r0 ! 45: ret ! 46: b4: mnegd r0,r0 # arg1>0, arg2<0 ! 47: bsbb satan ! 48: subd3 r0,pi,r0 ! 49: ret ! 50: # ! 51: b3: divd2 r2,r0 ! 52: jleq b5 ! 53: bsbb satan # arg1>0, arg2>0 ! 54: ret ! 55: b5: mnegd r0,r0 # arg1<0, arg2>0 ! 56: bsbb satan ! 57: mnegd r0,r0 ! 58: ret ! 59: # ! 60: .globl satan ! 61: satan: # range reduction on positive arg(r0) ! 62: cmpd r0,sq2m1 ! 63: jgeq c1 ! 64: bsbb xatan ! 65: rsb ! 66: c1: cmpd r0,sq2p1 ! 67: jleq c2 ! 68: divd3 r0,$0d1.0e+0,r0 ! 69: bsbb xatan ! 70: subd3 r0,pio2,r0 ! 71: rsb ! 72: c2: addd3 $0d1.0e+0,r0,r2 ! 73: subd2 $0d1.0e+0,r0 ! 74: divd2 r2,r0 ! 75: bsbb xatan ! 76: addd2 pio4,r0 ! 77: rsb ! 78: # ! 79: xatan: # compute arctan(r0) for:sqrt(2)-1<r0<sqrt(2)+1 ! 80: # Hart&Cheney ARCTN 5076 is evaluated ! 81: movd r0,r8 ! 82: muld3 r0,r0,r6 ! 83: polyd r6,$4,pcoef ! 84: muld2 r0,r8 ! 85: polyd r6,$4,qcoef ! 86: divd3 r0,r8,r0 ! 87: rsb ! 88: .data ! 89: .align 2 ! 90: pcoef: ! 91: .double 0d0.1589740288482307048e+0 ! 92: .double 0d0.66605790170092626575e+1 ! 93: .double 0d0.40969264832102256374e+2 ! 94: .double 0d0.77477687719204208616e+2 ! 95: .double 0d0.44541340059290680319e+2 ! 96: qcoef: ! 97: .double 0d1.0e+0 ! 98: .double 0d0.15503977551421987525e+2 ! 99: .double 0d0.62835930511032376833e+2 ! 100: .double 0d0.92324801072300974840e+2 ! 101: .double 0d0.44541340059290680444e+2 ! 102: pio4: .double 0d0.78539816339744830961e+0 ! 103: pio2: .double 0d1.57079632679489661923e+0 ! 104: sq2p1: .double 0d2.41421356237309504880e+0 ! 105: sq2m1: .double 0d0.41421356237309504880e+0 ! 106: pi: .double 0d3.14159265358979323846e+0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.