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