📄 trig.s
字号:
/ / .data/ .asciz "@(#)trig.s 1.1 92/07/30 SMI"/ .even/ .text// Copyright (c) 1987 by Sun Microsystems, Inc.// After argument reduction (calling argred()) which return n:/ n mod 4 sin(x) cos(x) tan(x)/ ----------------------------------------------------------/ 0 S C S/C/ 1 C -S -C/S/ 2 -S -C S/C/ 3 -C S -C/S/ ---------------------------------------------------------- .text .globl sin .globl cos .globl tan .globl sincos .globl fp_picos: call reduction cmpl $1,%eax jl cos0 je cos1 cmpl $2,%eax je cos2 fsin retcos2: fcos fchs retcos1: fsin fchs retcos0: fcos retsin: call reduction cmpl $1,%eax jl sin0 je sin1 cmpl $2,%eax je sin2 fcos fchs retsin2: fsin fchs retsin1: fcos retsin0: fsin rettan: call reduction andl $1,%eax cmpl $0,%eax je tan1 fptan fdivp %st,%st(1) fchs rettan1: fptan fstp %st(0) retsincos: call reduction fsincos cmpl $1,%eax jl sincos0 je sincos1 cmpl $2,%eax je sincos2/ n=3 fchs movl 12(%esp),%eax fstpl 0(%eax) movl 16(%esp),%eax fstpl 0(%eax) retsincos2: / n=2 fchs movl 16(%esp),%eax fstpl 0(%eax) fchs movl 12(%esp),%eax fstpl 0(%eax) retsincos1: / n=1 movl 12(%esp),%eax fstpl 0(%eax) fchs movl 16(%esp),%eax fstpl 0(%eax) retsincos0: / n=2 movl 16(%esp),%eax fstpl 0(%eax) movl 12(%esp),%eax fstpl 0(%eax) retreduction: movl 12(%esp),%eax / load the high part of arg andl $0x7ff00000,%eax / clear sign and mantissa cmpl $0x3fe00000,%eax / Is arge <= (pi/4 = 0x3fe8f5c2) ? jle L0 cmpl $0x7ff00000,%eax / Is arg a NaN or an Inf ? je L0 cmpl $0x43e00000,%eax / Is arg >= 2**63 ? jge L1 movl fp_pi,%ecx cmpl $1,%ecx jne L1 / arg < 2**63 L0: fldl 8(%esp) / push arg movl $0,%eax / set n = 0 retL1: / call argred to do argument reduction pushl %ebp movl %esp,%ebp subl $16,%esp leal -16(%ebp),%eax / address of y2 pushl %eax leal -8(%ebp),%eax / address of y1 pushl %eax pushl 16(%ebp) pushl 12(%ebp) call argred / call argred(x,&y1,&y2) fldl -8(%ebp) / push y1 fldl -16(%ebp) / push y2 faddp %st,%st(1) / y1+y2 addl $16,%esp andl $3,%eax / %eax = n mod 4 leave ret / huge argument reduction.LL0: .data .align 4fp_pi: .long 1 .align 4zero: .double 0.0000000000000000000000e+00 .align 4one: .double 1.0000000000000000000000e+00 .align 4p_53: .long 10680707 .long 7228996 .long 1504196 .long 15362485 .long 13885745 .long 6349266 .long 14129194 .long 12595701 .long 14056396 .long 16585589 .long 6328731 .long 4169915 .long 6367931 .long 7425947 .long 252554 .long 12605768 .long 13640692 .long 5962295 .long 5333789 .long 13466256 .long 12601162 .long 16164595 .long 1725153 .long 6043943 .long 3856965 .long 5123509 .long 6613188 .long 2574939 .long 12012252 .long 1992081 .long 2630334 .long 4682229 .long 1222207 .long 8633653 .long 2394314 .long 2089406 .long 4375066 .long 6825321 .long 2816913 .long 6860257 .long 4866789 .long 10216279 .long 12031605 .long 13539722 .long 8630155 .long 15091174 .long 14616457 .long 10393415 .long 11146751 .long 3509311 .long 11481409 .long 7513079 .long 2879956 .long 15969686 .long 8222111 .long 2457550 .long 2751337 .long 11645996 .long 12791265 .long 9178045 .long 3271727 .long 9707558 .long 8772839 .long 6635507 .long 1273767 .long 883295 .align 4p_66: .long 10680707 .long 7228996 .long 1387008 .long 404420 .long 893558 .long 12506305 .long 16644357 .long 6084026 .long 7765228 .long 2064598 .long 12738643 .long 3801200 .long 1080362 .long 16158441 .long 6847354 .long 12161194 .long 3726923 .long 9883635 .long 9597790 .long 9123062 .long 1661948 .long 2619534 .long 11091653 .long 3758245 .long 4087059 .long 1856936 .long 5982859 .long 10759684 .long 1233157 .long 3495949 .long 16130887 .long 4524288 .long 12159946 .long 16246948 .long 10675669 .long 6929490 .long 15743005 .long 1706632 .long 16680724 .long 8349493 .long 12287309 .long 13039170 .long 11697792 .long 6394303 .long 11974480 .long 5404526 .long 14028752 .long 6323660 .long 6864815 .long 15559164 .long 7254789 .long 13784445 .long 2473467 .long 4082337 .long 8668973 .long 9110390 .long 16217920 .long 13799647 .long 1436812 .long 4564419 .long 6390255 .long 12969960 .long 14192796 .long 16130372 .long 2720808 .long 7232925 .align 4p_inf: .long 10680707 .long 7228996 .long 1387004 .long 2578385 .long 16069853 .long 12639074 .long 9804092 .long 4427841 .long 16666979 .long 11263675 .long 12935607 .long 2387514 .long 4345298 .long 14681673 .long 3074569 .long 13734428 .long 16653803 .long 1880361 .long 10960616 .long 8533493 .long 3062596 .long 8710556 .long 7349940 .long 6258241 .long 3772886 .long 3769171 .long 3798172 .long 8675211 .long 12450088 .long 3874808 .long 9961438 .long 366607 .long 15675153 .long 9132554 .long 7151469 .long 3571407 .long 2607881 .long 12013382 .long 4155038 .long 6285869 .long 7677882 .long 13102053 .long 15825725 .long 473591 .long 9065106 .long 15363067 .long 6271263 .long 9264392 .long 5636912 .long 4652155 .long 7056368 .long 13614112 .long 10155062 .long 1944035 .long 9527646 .long 15080200 .long 6658437 .long 6231200 .long 6832269 .long 16767104 .long 5075751 .long 3212806 .long 1398474 .long 7579849 .long 6349435 .long 12618859 .align 4two24: .double 1.6777216000000000000000e+07 .align 4twon24: .double 5.9604644775390625000000e-08 .align 4p1: .double 1.5707962512969970703125e+00 .align 4p2: .double 7.5497894158615963533521e-08 .align 4p3_inf: .double 5.3903025299577647655447e-15 .align 4p3_66: .double 5.3903008358918702569440e-15 .align 4p3_53: .double 5.3290705182007513940334e-15 .textargred: jmp .L194.L193: movl $0,-300(%ebp) movl $1,-304(%ebp) leal -76(%ebp),%eax movl %eax,-308(%ebp) cmpl $1072693248,one+4 jne .L195 movl $0,-304(%ebp).L195: pushl 12(%ebp) pushl 8(%ebp) call signbit addl $8,%esp movl %eax,-288(%ebp) pushl 12(%ebp) pushl 8(%ebp) call fabs addl $8,%esp fstpl 8(%ebp) pushl 12(%ebp) pushl 8(%ebp) call ilogb addl $8,%esp movl %eax,-296(%ebp) movl -296(%ebp),%eax subl $26,%eax movl $24,%ecx cltd idivl %ecx movl %eax,-292(%ebp) cmpl $0,-292(%ebp) jg .L196 movl $0,-292(%ebp) jmp .L197.L196: imull $-24,-292(%ebp),%eax pushl %eax pushl 12(%ebp) pushl 8(%ebp) call scalbn addl $12,%esp fstpl 8(%ebp).L197: movl 12(%ebp),%eax movl %eax,-72(%ebp) movl 8(%ebp),%eax movl %eax,-76(%ebp) movl -308(%ebp),%eax movl -304(%ebp),%edx andl $-32,(%eax,%edx,4) movl -72(%ebp),%eax movl %eax,-24(%ebp) movl -76(%ebp),%eax movl %eax,-28(%ebp) movl -308(%ebp),%eax movl -304(%ebp),%edx andl $-536870912,(%eax,%edx,4) movl -72(%ebp),%eax movl %eax,-8(%ebp) movl -76(%ebp),%eax movl %eax,-12(%ebp) fldl -28(%ebp) fsubl -76(%ebp) fstpl -20(%ebp) fldl 8(%ebp) fsubl -28(%ebp) fstpl -28(%ebp) movl $p_inf,-4(%ebp) movl p3_inf+4,%eax movl %eax,-64(%ebp) movl p3_inf,%eax movl %eax,-68(%ebp) cmpl $1,fp_pi jne .L198 movl $p_66,-4(%ebp) movl p3_66+4,%eax movl %eax,-64(%ebp) movl p3_66,%eax movl %eax,-68(%ebp).L198: cmpl $2,fp_pi jne .L199 movl $p_53,-4(%ebp) movl p3_53+4,%eax movl %eax,-64(%ebp) movl p3_53,%eax movl %eax,-68(%ebp).L199: cmpl $1,-292(%ebp) jl .L200 movl -4(%ebp),%eax movl -292(%ebp),%edx decl %edx fildl (%eax,%edx,4) fstpl -92(%ebp) cmpl $1,-292(%ebp) jle .L201 movl -4(%ebp),%eax movl -292(%ebp),%edx subl $2,%edx fildl (%eax,%edx,4) fmull two24 fstpl -100(%ebp).L201:.L200: movl twon24+4,%eax movl %eax,-80(%ebp) movl twon24,%eax movl %eax,-84(%ebp) movl -4(%ebp),%eax movl -292(%ebp),%edx fildl (%eax,%edx,4) fmull -84(%ebp) fstpl -260(%ebp) fldl -84(%ebp) fmull twon24 fstpl -84(%ebp) movl -4(%ebp),%eax movl -292(%ebp),%edx incl %edx fildl (%eax,%edx,4) fmull -84(%ebp) fstpl -252(%ebp) fldl -84(%ebp) fmull twon24 fstpl -84(%ebp) movl -4(%ebp),%eax movl -292(%ebp),%edx leal 2(%edx),%edx fildl (%eax,%edx,4) fmull -84(%ebp) fstpl -244(%ebp) fldl -84(%ebp) fmull twon24 fstpl -84(%ebp) movl -4(%ebp),%eax movl -292(%ebp),%edx leal 3(%edx),%edx fildl (%eax,%edx,4) fmull -84(%ebp) fstpl -236(%ebp) fldl -84(%ebp) fmull twon24 fstpl -84(%ebp) movl -4(%ebp),%eax movl -292(%ebp),%edx leal 4(%edx),%edx fildl (%eax,%edx,4) fmull -84(%ebp) fstpl -228(%ebp) fldl zero fldl -28(%ebp) fucompp fstsw %ax sahf jp .L202 jne .L202 fldl zero fldl -20(%ebp) fucompp fstsw %ax sahf jp .L203 jne .L203 fldl -12(%ebp) fmull -260(%ebp) fstpl -180(%ebp) fldl -12(%ebp) fmull -252(%ebp) fstpl -172(%ebp) fldl -12(%ebp) fmull -244(%ebp) fstpl -164(%ebp) fldl -12(%ebp) fmull -236(%ebp) fstpl -156(%ebp) fldl -12(%ebp) fmull -228(%ebp) fstpl -148(%ebp) jmp .L204.L203: cmpl $0,-292(%ebp) jle .L205 fldl -20(%ebp) fmull -92(%ebp) fldl -12(%ebp) fmull -260(%ebp) faddp %st,%st(1) fstpl -180(%ebp) jmp .L206.L205: fldl -12(%ebp) fmull -260(%ebp) fstpl -180(%ebp).L206: fldl -20(%ebp) fmull -260(%ebp) fldl -12(%ebp) fmull -252(%ebp) faddp %st,%st(1) fstpl -172(%ebp) fldl -20(%ebp) fmull -252(%ebp) fldl -12(%ebp) fmull -244(%ebp) faddp %st,%st(1) fstpl -164(%ebp) fldl -20(%ebp) fmull -244(%ebp) fldl -12(%ebp) fmull -236(%ebp) faddp %st,%st(1) fstpl -156(%ebp)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -