_DATA segment para 'DATA' _DATA ends _T000 segment para 'CODE' public sin_real sin_real: ucomisd xmm0,qword ptr real_pi_d_4 jbe sin_real_1 ; x<=pi/4 | NAN ucomisd xmm0,qword ptr real_3_pi_d_4 jbe sin_real_2 ucomisd xmm0,qword ptr real_5_pi_d_4 jbe sin_real_3 ucomisd xmm0,qword ptr real_7_pi_d_4 jbe sin_real_4 ucomisd xmm0,qword ptr real_9_pi_d_4 jbe sin_real_5 ucomisd xmm0,qword ptr real_36825084_pi jbe sin_real_0 ucomisd xmm0,qword ptr real_2_p_53 jae sin_or_cos_real_too_large ; x>=-2^53 call rem_36825084_pi movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 subsd xmm13,xmm7 jmp sin_real_0_ sin_real_0: movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi movq xmm4,qword ptr round_even_c addsd xmm1,qword ptr real_1_0 ; x*4/pi+1 movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 ; round_even (x*4/pi+1) movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l movq xmm5,qword ptr mask_all_one_except_last psllq xmm5,xmm4 movq xmm6,qword ptr mask_all_one_except_second_last psllq xmm6,xmm4 mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 sin_real_0_: ucomisd xmm1,xmm5 jne sin_real_cos sin_real_sin: ucomisd xmm1,xmm6 jne sin_real_n_sin subsd xmm0,xmm2 subsd xmm0,xmm3 jmp sin_real_p sin_real_n_sin: movsd xmm1,xmm3 subsd xmm0,xmm2 subsd xmm1,xmm0 jmp sin_real_m sin_real_cos: subsd xmm0,xmm2 subsd xmm0,xmm3 ucomisd xmm1,xmm6 je cos_real_p jmp cos_real_m sin_real_n: ucomisd xmm0,qword ptr real_m_3_pi_d_4 jae sin_real_n_2 ucomisd xmm0,qword ptr real_m_5_pi_d_4 jae sin_real_n_3 ucomisd xmm0,qword ptr real_m_7_pi_d_4 jae sin_real_n_4 ucomisd xmm0,qword ptr real_m_9_pi_d_4 jae sin_real_n_5 ucomisd xmm0,qword ptr real_m_36825084_pi jae sin_real_n_0 ucomisd xmm0,qword ptr real_m_2_p_53 jbe sin_or_cos_real_too_small_or_nan ; x<=-2^53 | NAN call rem_n_36825084_pi movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 subsd xmm13,xmm7 jmp sin_real_n_0_ sin_real_n_0: movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi movq xmm4,qword ptr m_round_even_c subsd xmm1,qword ptr real_1_0 ; x*4/pi-1 movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 ; round_even (x*4/pi-1) movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l movq xmm5,qword ptr mask_all_one_except_last psllq xmm5,xmm4 movq xmm6,qword ptr mask_all_one_except_second_last psllq xmm6,xmm4 mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 sin_real_n_0_: ucomisd xmm1,xmm5 je sin_real_sin subsd xmm0,xmm2 subsd xmm0,xmm3 ucomisd xmm1,xmm6 jne cos_real_p jmp cos_real_m sin_real_1: ucomisd xmm0,qword ptr real_m_pi_d_4 jb sin_real_n ; ; x<-pi/4 | NAN ucomisd xmm0,qword ptr real_0_43540000008249979402 jae sin_real_p_0_6 ucomisd xmm0,qword ptr real_m_0_43540000008249979402 jbe sin_real_m_0_6 movsd xmm1,xmm0 ; x ucomisd xmm0,qword ptr real_0_0 je sin_real_0_0 ; sin -0.0 = -0.0 mulsd xmm0,xmm0 ; x2 movlpd xmm5,qword ptr sin_p_0 movlpd xmm6,qword ptr sin_p_1 movsd xmm2,xmm1 ; x mulsd xmm1,xmm0 ; x3 movsd xmm3,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 ; ucomisd xmm3,qword ptr real_0_25 ; x2>=0.25 (|x|>0.5) mulsd xmm3,xmm1 ; x5 movlpd xmm7,qword ptr sin_p_2 movlpd xmm8,qword ptr sin_p_3 mulsd xmm5,xmm1 ; p3 mulsd xmm1,xmm0 ; x7 mulsd xmm6,xmm3 ; p5 mulsd xmm3,xmm0 ; x9 mulsd xmm7,xmm1 ; p7 mulsd xmm1,xmm0 ; x11 mulsd xmm8,xmm3 ; p9 mulsd xmm3,xmm0 ; x13 mulsd xmm1,qword ptr sin_p_4 ; p11 mulsd xmm3,qword ptr sin_p_5 ; p13 movsd xmm0,xmm2 ; x addsd xmm1,xmm3 ; p11+p13 addsd xmm1,xmm8 ; p9+p11+p13 ; jae sin_real_1_l addsd xmm1,xmm7 ; p7+p9+p11+p13 addsd xmm1,xmm6 ; p5+p7+p9+p11+p13 addsd xmm1,xmm5 ; p3+p5+p7+p9+p11+p13 addsd xmm0,xmm1 ; x+p3+p5+p7+p9+p11+p13 sin_real_0_0: ret ;sin_real_1_l: ; movlpd xmm2,qword ptr real_47_bits ; andpd xmm2,xmm5 ; p3h ; addsd xmm1,xmm7 ; p7+p9+p11+p13 ; subsd xmm5,xmm2 ; p3l ; addsd xmm0,xmm2 ; x+p3h ; addsd xmm1,xmm6 ; p5+p7+p9+p11+p13 ; addsd xmm1,xmm5 ; p3l+p5+p7+p9+p11+p13 ; addsd xmm0,xmm1 ; x+p3+p5+p7+p9+p11+p13 ; ret sin_real_m_0_6: movlpd xmm1,qword ptr real_m_0_600000000082499762577 ucomisd xmm0,xmm1 subsd xmm0,xmm1 lea rcx,sin_p3_c lea rdx,sin_p4_c cmova rcx,rdx jmp sin_real_0_6 sin_real_p_0_6: movlpd xmm1,qword ptr real_0_600000000082499762577 ucomisd xmm0,xmm1 subsd xmm0,xmm1 lea rcx,sin_p1_c lea rdx,sin_p2_c cmovb rcx,rdx sin_real_0_6: movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm7,qword ptr (sin_p1_3-sin_p1_c)[rcx] movlpd xmm8,qword ptr (sin_p1_2-sin_p1_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm7,xmm2 ; p3 mulsd xmm8,xmm2 ; p2 movlpd xmm9,qword ptr (sin_p1_5-sin_p1_c)[rcx] mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 mulsd xmm9,xmm4 ; p5 mulsd xmm4,qword ptr (sin_p1_4-sin_p1_c)[rcx] ; p4 movlpd xmm11,qword ptr (sin_p1_7-sin_p1_c)[rcx] movlpd xmm12,qword ptr (sin_p1_9-sin_p1_c)[rcx] mulsd xmm11,xmm2 ; p7 mulsd xmm2,qword ptr (sin_p1_6-sin_p1_c)[rcx] ; p6 mulsd xmm12,xmm0 ; p9 mulsd xmm0,qword ptr (sin_p1_8-sin_p1_c)[rcx] ; p8 addsd xmm11,xmm12 ; p9+p7 addsd xmm0,xmm2 ; p8+p6 movlpd xmm2,qword ptr real_26_bits movsd xmm3,xmm1 ; x movlpd xmm6,qword ptr (sin_p1_1l-sin_p1_c)[rcx] movlpd xmm5,qword ptr (sin_p1_1h-sin_p1_c)[rcx] addsd xmm9,xmm11 ; p9+p7+p5 addsd xmm0,xmm4 ; p8+p6+p4 andpd xmm2,xmm1 ; x_h mulsd xmm6,xmm1 ; x*c1l movlpd xmm13,qword ptr (sin_p1_0h-sin_p1_c)[rcx] addsd xmm7,xmm9 ; p9+p7+p5+p3 addsd xmm0,xmm8 ; p8+p6+p4+p2 subsd xmm3,xmm2 ; x_l mulsd xmm2,xmm5 ; x_h*c1h mulsd xmm7,xmm1 ; (p9+p7+p5+p3)(*x) movsd xmm14,xmm13 addsd xmm13,xmm2 ; x_h*c1h+c0h addsd xmm0,xmm7 ; p9+p8+..+p2 subsd xmm14,xmm13 ; c0h-(x_h*c1h+c0h) mulsd xmm3,xmm5 ; x_l*c1h ; addsd xmm0,qword ptr (sin_p1_0l-sin_p1_c)[rcx] addsd xmm14,xmm2 ; (c0h-(x_h*c1h+c0h))+x_h*c1h addsd xmm3,xmm6 ; x_l*c1h+x*c1l addsd xmm3,xmm14 ; (c0h-(x_h*c1h+c0h))+x_h*c1h+x_l*c1h+x*c1l addsd xmm0,xmm3 addsd xmm0,xmm13 ret sin_real_n_5: addsd xmm0,qword ptr real_2_pi movlpd xmm13,qword ptr real_m_2_pi_l jmp sin_real_p sin_real_5: subsd xmm0,qword ptr real_2_pi movlpd xmm13,qword ptr real_2_pi_l jmp sin_real_p cos_real_n_2: addsd xmm0,qword ptr real_pi_d_2 movlpd xmm13,qword ptr real_m_pi_d_2_l jmp sin_real_p cos_real_4: subsd xmm0,qword ptr real_3_pi_d_2 movlpd xmm13,qword ptr real_3_pi_d_2_l sin_real_p: ucomisd xmm0,qword ptr real_0_43540000008249979402 movsd xmm12,xmm0 jae sin_real_p_p_0_6 ucomisd xmm0,qword ptr real_m_0_43540000008249979402 jb sin_real_p_m_0_6 subsd xmm0,xmm13 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 subsd xmm12,xmm1 movlpd xmm5,qword ptr sin_p_0 movlpd xmm6,qword ptr sin_p_1 movsd xmm2,xmm1 ; x mulsd xmm1,xmm0 ; x3 movsd xmm3,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 subsd xmm12,xmm13 ; x_l movsd xmm14,xmm3 ; x2 ; ucomisd xmm3,qword ptr real_0_25 ; x2>=0.25 (|x|>0.5) mulsd xmm3,xmm1 ; x5 movlpd xmm7,qword ptr sin_p_2 movlpd xmm8,qword ptr sin_p_3 mulsd xmm5,xmm1 ; p3 mulsd xmm1,xmm0 ; x7 mulsd xmm6,xmm3 ; p5 mulsd xmm3,xmm0 ; x9 mulsd xmm7,xmm1 ; p7 mulsd xmm1,xmm0 ; x11 mulsd xmm8,xmm3 ; p9 mulsd xmm3,xmm0 ; x13 mulsd xmm14,xmm12 ; x_l*x2 mulsd xmm1,qword ptr sin_p_4 ; p11 mulsd xmm3,qword ptr sin_p_5 ; p13 movsd xmm0,xmm2 ; x mulsd xmm14,qword ptr real_0_5 ; 0.5*x_l*x2 addsd xmm1,xmm3 ; p11+p13 subsd xmm12,xmm14 ; x_l-0.5*x_l*x2 addsd xmm1,xmm8 ; p9+p11+p13 ; jae sin_real_p_l addsd xmm1,xmm7 ; p7+p9+p11+p13 addsd xmm1,xmm6 ; p5+p7+p9+p11+p13 addsd xmm1,xmm5 ; p3+p5+p7+p9+p11+p13 addsd xmm1,xmm12 addsd xmm0,xmm1 ; x+p3+p5+p7+p9+p11+p13 ret ;sin_real_p_l: ; movlpd xmm2,qword ptr real_47_bits ; andpd xmm2,xmm5 ; p3h ; addsd xmm1,xmm7 ; p7+p9+p11+p13 ; subsd xmm5,xmm2 ; p3l ; addsd xmm0,xmm2 ; x+p3h ; addsd xmm1,xmm6 ; p5+p7+p9+p11+p13 ; addsd xmm1,xmm5 ; p3+p5+p7+p9+p11+p13 ; addsd xmm1,xmm12 ; addsd xmm0,xmm1 ; x+p3+p5+p7+p9+p11+p13 ; ret sin_real_p_m_0_6: movlpd xmm1,qword ptr real_m_0_600000000082499762577 subsd xmm0,xmm13 ucomisd xmm0,xmm1 movsd xmm15,xmm0 ; x1 subsd xmm0,xmm1 lea rcx,sin_p3_c lea rdx,sin_p4_c cmova rcx,rdx jmp sin_real_p_pm_0_6 sin_real_p_p_0_6: movlpd xmm1,qword ptr real_0_600000000082499762577 subsd xmm0,xmm13 ucomisd xmm0,xmm1 movsd xmm15,xmm0 ; x1 subsd xmm0,xmm1 lea rcx,sin_p1_c lea rdx,sin_p2_c cmovb rcx,rdx sin_real_p_pm_0_6: movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 subsd xmm12,xmm15 mulsd xmm15,xmm15 ; x1*x1 movlpd xmm7,qword ptr (sin_p1_3-sin_p1_c)[rcx] movlpd xmm8,qword ptr (sin_p1_2-sin_p1_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm7,xmm2 ; p3 mulsd xmm8,xmm2 ; p2 subsd xmm12,xmm13 ; x_l sin_real_pm_0_6: mulsd xmm15,qword ptr real_0_5 ; 0.5*x1*x1 movlpd xmm9,qword ptr (sin_p1_5-sin_p1_c)[rcx] mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 mulsd xmm9,xmm4 ; p5 mulsd xmm4,qword ptr (sin_p1_4-sin_p1_c)[rcx] ; p4 mulsd xmm15,xmm12 ; x_l*0.5*x1*x1 movlpd xmm11,qword ptr (sin_p1_7-sin_p1_c)[rcx] movlpd xmm10,qword ptr (sin_p1_9-sin_p1_c)[rcx] mulsd xmm11,xmm2 ; p7 mulsd xmm2,qword ptr (sin_p1_6-sin_p1_c)[rcx] ; p6 mulsd xmm10,xmm0 ; p9 mulsd xmm0,qword ptr (sin_p1_8-sin_p1_c)[rcx] ; p8 addsd xmm11,xmm10 ; p9+p7 addsd xmm0,xmm2 ; p8+p6 subsd xmm12,xmm15 ; x_l-x_l*0.5*x1*x1 movlpd xmm2,qword ptr real_26_bits movsd xmm3,xmm1 ; x movlpd xmm6,qword ptr (sin_p1_1l-sin_p1_c)[rcx] movlpd xmm5,qword ptr (sin_p1_1h-sin_p1_c)[rcx] addsd xmm9,xmm11 ; p9+p7+p5 addsd xmm0,xmm4 ; p8+p6+p4 andpd xmm2,xmm1 ; x_h mulsd xmm6,xmm1 ; x*c1l movlpd xmm13,qword ptr (sin_p1_0h-sin_p1_c)[rcx] addsd xmm7,xmm9 ; p9+p7+p5+p3 addsd xmm0,xmm8 ; p8+p6+p4+p2 subsd xmm3,xmm2 ; x_l mulsd xmm2,xmm5 ; x_h*c1h mulsd xmm7,xmm1 ; (p9+p7+p5+p3)(*x) movsd xmm14,xmm13 addsd xmm13,xmm2 ; x_h*c1h+c0h addsd xmm0,xmm7 ; p9+p8+..+p2 subsd xmm14,xmm13 ; c0h-(x_h*c1h+c0h) mulsd xmm3,xmm5 ; x_l*c1h ; addsd xmm0,qword ptr (sin_p1_0l-sin_p1_c)[rcx] addsd xmm0,xmm12 addsd xmm14,xmm2 ; (c0h-(x_h*c1h+c0h))+x_h*c1h addsd xmm3,xmm6 ; x_l*c1h+x*c1l addsd xmm3,xmm14 ; (c0h-(x_h*c1h+c0h))+x_h*c1h+x_l*c1h+x*c1l addsd xmm0,xmm3 addsd xmm0,xmm13 ret sin_real_3: movlpd xmm1,qword ptr real_pi movlpd xmm13,qword ptr real_pi_l subsd xmm1,xmm0 jmp sin_real_m cos_real_n_4: movlpd xmm1,qword ptr real_m_3_pi_d_2 movlpd xmm13,qword ptr real_m_3_pi_d_2_l subsd xmm1,xmm0 jmp sin_real_m sin_real_n_3: movlpd xmm1,qword ptr real_m_pi movlpd xmm13,qword ptr real_m_pi_l subsd xmm1,xmm0 jmp sin_real_m cos_real_2: movlpd xmm1,qword ptr real_pi_d_2 movlpd xmm13,qword ptr real_pi_d_2_l subsd xmm1,xmm0 sin_real_m: ucomisd xmm1,qword ptr real_0_43540000008249979402 movsd xmm12,xmm1 jae sin_real_m_p_0_6 ucomisd xmm1,qword ptr real_m_0_43540000008249979402 jbe sin_real_m_m_0_6 addsd xmm1,xmm13 movsd xmm0,xmm1 ; x mulsd xmm1,xmm1 ; x2 subsd xmm12,xmm0 movlpd xmm5,qword ptr sin_p_0 movlpd xmm6,qword ptr sin_p_1 movsd xmm2,xmm0 ; x mulsd xmm0,xmm1 ; x3 ; ucomisd xmm1,qword ptr real_0_25 ; x2>=0.25 (|x|>0.5) movsd xmm3,xmm1 ; x2 mulsd xmm1,xmm1 ; x4 addsd xmm12,xmm13 movsd xmm14,xmm3 mulsd xmm3,xmm0 ; x5 movlpd xmm7,qword ptr sin_p_2 movlpd xmm8,qword ptr sin_p_3 mulsd xmm5,xmm0 ; p3 mulsd xmm0,xmm1 ; x7 mulsd xmm6,xmm3 ; p5 mulsd xmm3,xmm1 ; x9 mulsd xmm7,xmm0 ; p7 mulsd xmm0,xmm1 ; x11 mulsd xmm8,xmm3 ; p9 mulsd xmm3,xmm1 ; x13 mulsd xmm14,xmm12 mulsd xmm0,qword ptr sin_p_4 ; p11 mulsd xmm3,qword ptr sin_p_5 ; p13 movsd xmm1,xmm2 ; x mulsd xmm14,qword ptr real_0_5 addsd xmm0,xmm3 ; p11+p13 subsd xmm12,xmm14 addsd xmm0,xmm8 ; p9+p11+p13 ; jae sin_real_m_l addsd xmm0,xmm7 ; p7+p9+p11+p13 addsd xmm0,xmm6 ; p5+p7+p9+p11+p13 addsd xmm0,xmm5 ; p3+p5+p7+p9+p11+p13 addsd xmm0,xmm12 addsd xmm0,xmm1 ; x+p3+p5+p7+p9+p11+p13 ret ;sin_real_m_l: ; movlpd xmm2,qword ptr real_47_bits ; andpd xmm2,xmm5 ; p3h ; addsd xmm0,xmm7 ; p7+p9+p11+p13 ; subsd xmm5,xmm2 ; p3l ; addsd xmm1,xmm2 ; x+p3h ; addsd xmm0,xmm6 ; p5+p7+p9+p11+p13 ; addsd xmm0,xmm5 ; p3+p5+p7+p9+p11+p13 ; addsd xmm0,xmm12 ; addsd xmm0,xmm1 ; x+p3+p5+p7+p9+p11+p13 ; ret sin_real_m_m_0_6: addsd xmm1,xmm13 movlpd xmm0,qword ptr real_0_600000000082499762577 ucomisd xmm1,qword ptr real_m_0_600000000082499762577 movsd xmm15,xmm1 ; x1 addsd xmm0,xmm1 lea rcx,sin_p3_c lea rdx,sin_p4_c cmova rcx,rdx jmp sin_real_m_pm_0_6 sin_real_m_p_0_6: addsd xmm1,xmm13 movlpd xmm0,qword ptr real_m_0_600000000082499762577 ucomisd xmm1,qword ptr real_0_600000000082499762577 movsd xmm15,xmm1 ; x1 addsd xmm0,xmm1 lea rcx,sin_p1_c lea rdx,sin_p2_c cmovb rcx,rdx sin_real_m_pm_0_6: movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 subsd xmm12,xmm15 mulsd xmm15,xmm15 ; x1*x1 movlpd xmm7,qword ptr (sin_p1_3-sin_p1_c)[rcx] movlpd xmm8,qword ptr (sin_p1_2-sin_p1_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm7,xmm2 ; p3 mulsd xmm8,xmm2 ; p2 addsd xmm12,xmm13 ; x_l jmp sin_real_pm_0_6 public cos_real cos_real: ucomisd xmm0,qword ptr real_pi_d_4 jbe cos_real_1 ; x<=pi/4 | NAN ucomisd xmm0,qword ptr real_3_pi_d_4 jbe cos_real_2 ucomisd xmm0,qword ptr real_5_pi_d_4 jbe cos_real_3 ucomisd xmm0,qword ptr real_7_pi_d_4 jbe cos_real_4 ucomisd xmm0,qword ptr real_9_pi_d_4 jbe cos_real_5 ucomisd xmm0,qword ptr real_36825084_pi jbe cos_real_0 ucomisd xmm0,qword ptr real_2_p_53 jae sin_or_cos_real_too_large ; x>=-2^53 call rem_36825084_pi movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 subsd xmm13,xmm7 jmp cos_real_0_ cos_real_0: movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi addsd xmm1,qword ptr real_1_0 ; x*4/pi+1 movq xmm4,qword ptr round_even_c movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 ; round_even (x*4/pi+1) movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l movq xmm5,qword ptr mask_all_one_except_last psllq xmm5,xmm4 movq xmm6,qword ptr mask_all_one_except_second_last psllq xmm6,xmm4 mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 cos_real_0_: ucomisd xmm1,xmm5 jne cos_real_sin cos_real_cos: subsd xmm0,xmm2 subsd xmm0,xmm3 ucomisd xmm1,xmm6 je cos_real_p jmp cos_real_m cos_real_sin: ucomisd xmm1,xmm6 jne cos_real_p_sin movsd xmm1,xmm3 subsd xmm0,xmm2 subsd xmm1,xmm0 jmp sin_real_m cos_real_p_sin: subsd xmm0,xmm2 subsd xmm0,xmm3 jmp sin_real_p cos_real_n: ucomisd xmm0,qword ptr real_m_3_pi_d_4 jae cos_real_n_2 ucomisd xmm0,qword ptr real_m_5_pi_d_4 jae cos_real_n_3 ucomisd xmm0,qword ptr real_m_7_pi_d_4 jae cos_real_n_4 ucomisd xmm0,qword ptr real_m_9_pi_d_4 jae cos_real_n_5 ucomisd xmm0,qword ptr real_m_36825084_pi jae cos_real_n_0 ucomisd xmm0,qword ptr real_m_2_p_53 jbe sin_or_cos_real_too_small_or_nan ; x<=-2^53 | NAN call rem_n_36825084_pi movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 subsd xmm13,xmm7 jmp cos_real_n_0_ cos_real_n_0: movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi movq xmm4,qword ptr m_round_even_c subsd xmm1,qword ptr real_1_0 ; x*4/pi-1 movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 ; round_even (x*4/pi-1) movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm13,qword ptr real_pi_d_4_52_l movq xmm5,qword ptr mask_all_one_except_last psllq xmm5,xmm4 movq xmm6,qword ptr mask_all_one_except_second_last psllq xmm6,xmm4 mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm13,xmm1 andpd xmm5,xmm1 andpd xmm6,xmm1 cos_real_n_0_: ucomisd xmm1,xmm5 je cos_real_cos ucomisd xmm1,xmm6 je cos_real_n_p_sin movsd xmm1,xmm3 subsd xmm0,xmm2 subsd xmm1,xmm0 jmp sin_real_m cos_real_n_p_sin: subsd xmm0,xmm2 subsd xmm0,xmm3 jmp sin_real_p cos_real_1: ucomisd xmm0,qword ptr real_m_pi_d_4 jb cos_real_n ; x<-pi/4 | NAN movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm9,qword ptr real_17_bits movlpd xmm5,qword ptr cos_p_0 movsd xmm8,xmm1 ; x movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 andpd xmm9,xmm1 ; x_17_h movlpd xmm10,qword ptr real_0_5 movsd xmm3,xmm2 ; x2 mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movlpd xmm7,qword ptr cos_p_2 mulsd xmm5,xmm4 ; p4 mulsd xmm4,xmm2 ; x10 movsd xmm6,xmm2 ; x6 mulsd xmm2,xmm2 ; x12 mulsd xmm7,xmm0 ; p8 mulsd xmm0,xmm6 ; x14 mulsd xmm6,qword ptr cos_p_1 ; p6 mulsd xmm4,qword ptr cos_p_3 ; p10 mulsd xmm2,qword ptr cos_p_4 ; p12 mulsd xmm0,qword ptr cos_p_5 ; p14 subsd xmm8,xmm9 ; x_17_l mulsd xmm10,xmm9 ; 0.5*x_17_h addsd xmm0,xmm2 ; p12+p14 mulsd xmm10,xmm9 ; 0.5*x_17_h*x_17_h movlpd xmm11,qword ptr real_1_0 addsd xmm0,xmm4 ; p10+p12+p14 mulsd xmm8,qword ptr real_0_5 ; 0.5*x_17_l addsd xmm9,xmm1 ; x+x_17_h addsd xmm0,xmm7 ; p8+p10+p12+p14 mulsd xmm8,xmm9 ; 0.5*x_17_l*(x+x_17_h) addsd xmm0,xmm6 ; p6+p8+p10+p12+p14 ucomisd xmm10,qword ptr real_2_p_m_18 ; 0.5*x_17_h*x_17_h<2**-18 jb cos_real_1_s subsd xmm11,xmm10 ; 1.0-0.5*x_17_h*x_17_h addsd xmm0,xmm5 ; p4+p6+p8+p10+p12+p14 subsd xmm0,xmm8 addsd xmm0,xmm11 ret cos_real_1_s: addsd xmm0,xmm5 ; p4+p6+p8+p10+p12+p14 subsd xmm0,xmm8 subsd xmm0,xmm10 addsd xmm0,xmm11 ret cos_real_n_5: addsd xmm0,qword ptr real_2_pi movlpd xmm13,qword ptr real_m_2_pi_l jmp cos_real_p cos_real_5: subsd xmm0,qword ptr real_2_pi movlpd xmm13,qword ptr real_2_pi_l jmp cos_real_p sin_real_n_4: addsd xmm0,qword ptr real_3_pi_d_2 movlpd xmm13,qword ptr real_m_3_pi_d_2_l jmp cos_real_p sin_real_2: subsd xmm0,qword ptr real_pi_d_2 movlpd xmm13,qword ptr real_pi_d_2_l cos_real_p: movsd xmm12,xmm0 subsd xmm0,xmm13 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 subsd xmm12,xmm1 movlpd xmm9,qword ptr real_17_bits movlpd xmm5,qword ptr cos_p_0 movsd xmm8,xmm1 ; x movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 subsd xmm12,xmm13 andpd xmm9,xmm1 ; x_17_h movlpd xmm10,qword ptr real_0_5 movsd xmm3,xmm2 ; x2 mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movlpd xmm7,qword ptr cos_p_2 mulsd xmm12,xmm8 mulsd xmm5,xmm4 ; p4 mulsd xmm4,xmm2 ; x10 movsd xmm6,xmm2 ; x6 mulsd xmm2,xmm2 ; x12 mulsd xmm7,xmm0 ; p8 mulsd xmm0,xmm6 ; x14 mulsd xmm6,qword ptr cos_p_1 ; p6 mulsd xmm4,qword ptr cos_p_3 ; p10 mulsd xmm2,qword ptr cos_p_4 ; p12 mulsd xmm0,qword ptr cos_p_5 ; p14 subsd xmm8,xmm9 ; x_17_l mulsd xmm10,xmm9 ; 0.5*x_17_h addsd xmm0,xmm2 ; p12+p14 mulsd xmm10,xmm9 ; 0.5*x_17_h*x_17_h movlpd xmm11,qword ptr real_1_0 addsd xmm0,xmm4 ; p10+p12+p14 mulsd xmm8,qword ptr real_0_5 ; 0.5*x_17_l addsd xmm9,xmm1 ; x+x_17_h addsd xmm0,xmm7 ; p8+p10+p12+p14 mulsd xmm8,xmm9 ; 0.5*x_17_l*(x+x_17_h) addsd xmm0,xmm6 ; p6+p8+p10+p12+p14 ucomisd xmm10,qword ptr real_2_p_m_18 ; 0.5*x_17_h*x_17_h<2**-18 jb cos_real__s subsd xmm11,xmm10 ; 1.0-0.5*x_17_h*x_17_h addsd xmm0,xmm5 ; p4+p6+p8+p10+p12+p14 addsd xmm8,xmm12 subsd xmm0,xmm8 addsd xmm0,xmm11 ret cos_real__s: addsd xmm0,xmm5 ; p4+p6+p8+p10+p12+p14 addsd xmm8,xmm12 subsd xmm0,xmm8 subsd xmm0,xmm10 addsd xmm0,xmm11 ret sin_real_4: subsd xmm0,qword ptr real_3_pi_d_2 movlpd xmm13,qword ptr real_3_pi_d_2_l jmp cos_real_m cos_real_n_3: addsd xmm0,qword ptr real_pi movlpd xmm13,qword ptr real_m_pi_l jmp cos_real_m sin_real_n_2: addsd xmm0,qword ptr real_pi_d_2 movlpd xmm13,qword ptr real_m_pi_d_2_l jmp cos_real_m cos_real_3: subsd xmm0,qword ptr real_pi movlpd xmm13,qword ptr real_pi_l cos_real_m: movsd xmm12,xmm0 subsd xmm0,xmm13 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 subsd xmm12,xmm1 movlpd xmm9,qword ptr real_17_bits movlpd xmm5,qword ptr cos_p_0 movsd xmm8,xmm1 ; x movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 subsd xmm12,xmm13 andpd xmm9,xmm1 ; x_17_h movlpd xmm10,qword ptr real_0_5 movsd xmm3,xmm2 ; x2 mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movlpd xmm7,qword ptr cos_p_2 mulsd xmm12,xmm8 mulsd xmm5,xmm4 ; p4 mulsd xmm4,xmm2 ; x10 movsd xmm6,xmm2 ; x6 mulsd xmm2,xmm2 ; x12 mulsd xmm7,xmm0 ; p8 mulsd xmm0,xmm6 ; x14 mulsd xmm6,qword ptr cos_p_1 ; p6 mulsd xmm4,qword ptr cos_p_3 ; p10 mulsd xmm2,qword ptr cos_p_4 ; p12 mulsd xmm0,qword ptr cos_p_5 ; p14 subsd xmm8,xmm9 ; x_17_l mulsd xmm10,xmm9 ; 0.5*x_17_h addsd xmm0,xmm2 ; p12+p14 mulsd xmm10,xmm9 ; 0.5*x_17_h*x_17_h movlpd xmm11,qword ptr real_m_1_0 addsd xmm0,xmm4 ; p10+p12+p14 mulsd xmm8,qword ptr real_0_5 ; 0.5*x_17_l addsd xmm9,xmm1 ; x+x_17_h addsd xmm0,xmm7 ; p8+p10+p12+p14 mulsd xmm8,xmm9 ; 0.5*x_17_l*(x+x_17_h) addsd xmm0,xmm6 ; p6+p8+p10+p12+p14 ucomisd xmm10,qword ptr real_2_p_m_18 ; 0.5*x_17_h*x_17_h<2**-18 jb cos_real_m_s addsd xmm11,xmm10 ; -1.0+0.5*x_17_h*x_17_h addsd xmm0,xmm5 ; p4+p6+p8+p10+p12+p14 addsd xmm8,xmm12 subsd xmm8,xmm0 movsd xmm0,xmm11 addsd xmm0,xmm8 ret cos_real_m_s: addsd xmm0,xmm5 ; p4+p6+p8+p10+p12+p14 addsd xmm8,xmm12 subsd xmm8,xmm0 movsd xmm0,xmm11 addsd xmm8,xmm10 addsd xmm0,xmm8 ret sin_or_cos_real_too_large: sin_or_cos_real_too_small_or_nan: subsd xmm0,xmm0 ret _T000 ends _T001 segment para 'CODE' public tan_real tan_real: ucomisd xmm0,qword ptr real_m_0_338 jb tan_real_n ; x<-0.338 | NAN ucomisd xmm0,qword ptr real_0_89 jbe tan_real_1 ucomisd xmm0,qword ptr real_pi_m_0_699 jbe tan_real_2 ucomisd xmm0,qword ptr real_pi_p_0_89 jbe tan_real_3 ucomisd xmm0,qword ptr real_2pi_m_0_699 jbe tan_real_4 ucomisd xmm0,qword ptr real_2pi_p_0_89 jbe tan_real_5 ucomisd xmm0,qword ptr real_36825084_pi jbe tan_real_0 ucomisd xmm0,qword ptr real_2_p_53 jae tan_real_too_large ; x>=-2^53 call rem_36825084_pi tan_real_pn_l: movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm12,qword ptr real_pi_d_4_52_l mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm12,xmm1 subsd xmm12,xmm7 jmp tan_real_ tan_real_0: movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi addsd xmm1,qword ptr real_1_0 ; x*4/pi+1 movq xmm4,qword ptr round_even_c tan_real_pn_0: movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 ; round_even (x*4/pi+1) movlpd xmm2,qword ptr real_pi_d_4_26 movlpd xmm3,qword ptr real_pi_d_4_26_26 movlpd xmm12,qword ptr real_pi_d_4_52_l movq xmm5,qword ptr mask_all_one_except_last psllq xmm5,xmm4 mulsd xmm2,xmm1 mulsd xmm3,xmm1 mulsd xmm12,xmm1 tan_real_: andpd xmm5,xmm1 ucomisd xmm1,xmm5 jne tan_real_0_2 subsd xmm0,xmm2 subsd xmm0,xmm3 ucomisd xmm0,qword ptr real_0_338 ja tan_real_0_1p ucomisd xmm0,qword ptr real_m_0_338 jae tan_real_3_ ucomisd xmm0,qword ptr real_m_0_542 ja tan_real_0_5_n ucomisd xmm0,qword ptr real_m_0_699 ja tan_real_s_0_5_n jmp tan_real_1_0_3_n tan_real_0_1p: ucomisd xmm0,qword ptr real_0_542 jb tan_real_0_5_p ucomisd xmm0,qword ptr real_0_699 jb tan_real_s_0_5_p jmp tan_real_1_0_3 tan_real_0_2: subsd xmm2,xmm0 movsd xmm1,xmm3 addsd xmm1,xmm2 ucomisd xmm1,qword ptr real_0_5_pi_m_1_18 ja tan_real_0_2p ucomisd xmm1,qword ptr real_1_18_m_0_5_pi jae tan_real_2_ ucomisd xmm1,qword ptr real_1_04_m_0_5_pi ja tan_real_2_0_n ucomisd xmm1,qword ptr real_0_89_m_0_5_pi ja tan_real_s_2_n jmp tan_real_1_0_n tan_real_0_2p: ucomisd xmm1,qword ptr real_0_5_pi_m_1_04 jb tan_real_2_0_p ucomisd xmm1,qword ptr real_0_5_pi_m_0_89 jb tan_real_s_2_p jmp tan_real_1_0_2_p tan_real_n: ucomisd xmm0,qword ptr real_m_0_89 jae tan_real_n_1 ucomisd xmm0,qword ptr real_n_pi_m_0_699 jae tan_real_n_2 ucomisd xmm0,qword ptr real_n_pi_p_0_89 jae tan_real_n_3 ucomisd xmm0,qword ptr real_n_2pi_m_0_699 jae tan_real_n_4 ucomisd xmm0,qword ptr real_n_2pi_p_0_89 jae tan_real_n_5 ucomisd xmm0,qword ptr real_m_36825084_pi jae tan_real_n_0 ucomisd xmm0,qword ptr real_m_2_p_53 jbe tan_real_too_small_or_nan ; x<=-2^53 | NAN call rem_n_36825084_pi jmp tan_real_pn_l tan_real_n_0: movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi subsd xmm1,qword ptr real_1_0 ; x*4/pi-1 movq xmm4,qword ptr m_round_even_c jmp tan_real_pn_0 tan_real_1: ucomisd xmm0,qword ptr real_0_699 ja tan_real_1_2 ucomisd xmm0,qword ptr real_0_338 ja tan_real_0_5 tan_real_1_0: movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm6,qword ptr tan_q_1 movlpd xmm5,qword ptr tan_q_2 movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movlpd xmm7,qword ptr tan_p_1 mulsd xmm6,xmm2 ; q2 movsd xmm3,xmm2 ; x2 mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 mulsd xmm5,xmm4 ; q4 mulsd xmm2,qword ptr tan_q_3 ; q6 mulsd xmm4,qword ptr tan_p_2 ; p4 addsd xmm0,xmm2 ; x8+q6 mulsd xmm7,xmm3 ; p2 addsd xmm0,xmm5 ; x8+q6+q4 addsd xmm4,xmm7 ; p4+p2 addsd xmm0,xmm6 ; x8+q6+q4+q2 addsd xmm4,qword ptr tan_p_0 ; p4+p2+p0 addsd xmm0,qword ptr tan_q_0 ; x8+q6+q4+q2+q0 divsd xmm4,xmm0 ; p/q mulsd xmm3,xmm1 ; x3 movsd xmm0,xmm1 ; x mulsd xmm3,xmm4 addsd xmm0,xmm3 ret tan_real_m_0_5: ucomisd xmm0,qword ptr real_m_0_542 jb tan_real_n_s_0_5 movlpd xmm1,qword ptr atan_0_5_53 movlpd xmm10,qword ptr real_49_bits addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h lea rdx,tan_n_0_5_t addsd xmm1,qword ptr atan_0_5_53_l ; y=x+atan 0.5 jmp tan_real_0_5_a_s_0_5_a_s_2 tan_real_n_s_0_5: movlpd xmm1,qword ptr atan_sqrt_0_5 movlpd xmm10,qword ptr real_51_bits addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h lea rdx,tan_n_s_0_5_t addsd xmm1,qword ptr atan_sqrt_0_5_l ; y=x+atan sqrt 0.5 jmp tan_real_0_5_a_s_0_5_a_s_2 tan_real_0_5: ucomisd xmm0,qword ptr real_0_542 ja tan_real_s_0_5 movlpd xmm1,qword ptr m_atan_0_5_53 movlpd xmm10,qword ptr real_49_bits addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h lea rdx,tan_0_5_t subsd xmm1,qword ptr atan_0_5_53_l ; y=x-atan 0.5 jmp tan_real_0_5_a_s_0_5_a_s_2 tan_real_s_0_5: movlpd xmm1,qword ptr m_atan_sqrt_0_5 movlpd xmm10,qword ptr real_51_bits addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h lea rdx,tan_s_0_5_t subsd xmm1,qword ptr atan_sqrt_0_5_l ; y=x-atan sqrt 0.5 tan_real_0_5_a_s_0_5_a_s_2: subsd xmm0,xmm10 ; x_l movsd xmm2,xmm1 ; y mulsd xmm1,xmm1 ; y2 mulsd xmm10,qword ptr [rdx] ; 1.25|1.5|3*x_h movlpd xmm7,qword ptr tan3_q_1 movlpd xmm6,qword ptr tan3_q_2 movsd xmm3,xmm1 ; y2 mulsd xmm1,xmm1 ; y4 movlpd xmm9,qword ptr tan3_q_3 mulsd xmm7,xmm3 ; q2 movsd xmm4,xmm3 ; y2 mulsd xmm3,xmm1 ; y6 movlpd xmm8,qword ptr tan3_p_0 movsd xmm5,xmm1 ; y4 mulsd xmm1,xmm1 ; y8 mulsd xmm9,xmm3 ; q6 mulsd xmm3,qword ptr tan3_p_2 ; p6 mulsd xmm6,xmm5 ; q4 mulsd xmm5,qword ptr tan3_p_1 ; p4 addsd xmm1,xmm9 ; y8+q6 mulsd xmm8,xmm4 ; p2 addsd xmm1,xmm6 ; y8+q6+q4 mulsd xmm0,qword ptr [rdx] ; 1.25|1.5|3*x_l movlpd xmm6,qword ptr 8[rdx] ; 0.5|sqrt 0.5|sqrt 2 addsd xmm3,xmm5 ; p6+p4 addsd xmm1,xmm7 ; y8+q6+q4+q2 mulsd xmm6,xmm2 ; 0.5|sqrt 0.5|sqrt 2*y addsd xmm3,xmm8 ; p6+p4+p2 addsd xmm1,qword ptr tan3_q_0 ; y8+q6+q4+q2+q0 movsd xmm4,xmm3 ; p addsd xmm4,xmm1 ; p+q mulsd xmm4,xmm6 ; 0.5|sqrt 0.5|sqrt 2*y*(p+q) mulsd xmm2,qword ptr [rdx] ; 1.25|1.5|3*y addsd xmm3,xmm4 ; p+y*(p+q) subsd xmm1,xmm4 ; q-y*(p+q) divsd xmm3,xmm1 ; (p-y*(p+q))/(q+y*(p+q)) addsd xmm0,qword ptr 16[rdx] ; (0.5-1.25atan0.5)_49_l | (sqrt0.5-1.5atan(sqrt0.5))_l | (sqrt2-3atan(sqrt2))_l mulsd xmm2,xmm3 ; 1.25|1.5|3 * y * (p-y*(p+q))/(q+y*(p+q)) addsd xmm10,qword ptr 24[rdx] ; (0.5-1.25atan0.5)_49 | sqrt0.5-1.5atan(sqrt0.5) | sqrt2-3atan(sqrt2) addsd xmm0,xmm2 addsd xmm0,xmm10 ; 0.5|sqrt 0.5|sqrt 2+1.25|1.5|3y+1.25|1.5|3y * .. ret tan_real_n_1: ucomisd xmm0,qword ptr real_m_0_699 ja tan_real_m_0_5 tan_real_n_1_2: movlpd xmm1,qword ptr real_pi_d_4 addsd xmm1,xmm0 addsd xmm0,xmm0 ; 2x addsd xmm1,qword ptr real_pi_d_4_l ; y=pi/4+x addsd xmm0,qword ptr real_pi_d_2_m_1_0_52 ; 1+2x-pi/2=1-2y movlpd xmm10,qword ptr real_m_pi_d_2_m_1_0_52_l movlpd xmm11,qword ptr real_m_2_0 jmp tan_real_1_2_ tan_real_1_2: movlpd xmm1,qword ptr real_pi_d_4 subsd xmm1,xmm0 addsd xmm0,xmm0 ; 2x addsd xmm1,qword ptr real_pi_d_4_l ; y=pi/4-x subsd xmm0,qword ptr real_pi_d_2_m_1_0_52 ; 1+2x-pi/2=1-2y movlpd xmm10,qword ptr real_pi_d_2_m_1_0_52_l movlpd xmm11,qword ptr real_2_0 tan_real_1_2_: movsd xmm2,xmm1 ; y mulsd xmm1,xmm1 ; y2 movlpd xmm7,qword ptr tan3_q_1 movlpd xmm6,qword ptr tan3_q_2 movsd xmm3,xmm1 ; y2 mulsd xmm1,xmm1 ; y4 movlpd xmm9,qword ptr tan3_q_3 mulsd xmm7,xmm3 ; q2 movsd xmm4,xmm3 ; y2 mulsd xmm3,xmm1 ; y6 movlpd xmm8,qword ptr tan3_p_0 movsd xmm5,xmm1 ; y4 mulsd xmm1,xmm1 ; y8 mulsd xmm9,xmm3 ; q6 mulsd xmm3,qword ptr tan3_p_2 ; p6 mulsd xmm6,xmm5 ; q4 mulsd xmm5,qword ptr tan3_p_1 ; p4 addsd xmm1,xmm9 ; y8+q6 mulsd xmm8,xmm4 ; p2 addsd xmm1,xmm6 ; y8+q6+q4 addsd xmm3,xmm5 ; p6+p4 addsd xmm1,xmm7 ; y8+q6+q4+q2 addsd xmm3,xmm8 ; p6+p4+p2 addsd xmm1,qword ptr tan3_q_0 ; y8+q6+q4+q2+q0 movsd xmm4,xmm3 ; p addsd xmm4,xmm1 ; p+q mulsd xmm4,xmm2 ; y*(p+q) mulsd xmm2,xmm11 ; 2y subsd xmm3,xmm4 ; p-y*(p+q) addsd xmm1,xmm4 ; q+y*(p+q) divsd xmm3,xmm1 ; (p-y*(p+q))/(q+y*(p+q)) mulsd xmm2,xmm3 ; 2y * (p-y*(p+q))/(q+y*(p+q)) addsd xmm2,xmm10 subsd xmm0,xmm2 ; 1-2y-2y * .. ret tan_real_n_4: ucomisd xmm0,qword ptr real_n_pi_p_1_18 movlpd xmm1,qword ptr real_m_3_pi_d_2 movlpd xmm12,qword ptr real_m_3_pi_d_2_l ja tan_real_n_2_0_4_n ucomisd xmm0,qword ptr real_n_2pi_m_0_89 jb tan_real_n_1_0_2 ucomisd xmm0,qword ptr real_n_2pi_m_1_18 jb tan_real_n_2_0_4_p jmp tan_real_24 tan_real_4: ucomisd xmm0,qword ptr real_pi_p_1_18 movlpd xmm1,qword ptr real_3_pi_d_2 movlpd xmm12,qword ptr real_3_pi_d_2_l jb tan_real_2_0_2_p ucomisd xmm0,qword ptr real_2pi_m_0_89 ja tan_real_1_0_2 ucomisd xmm0,qword ptr real_2pi_m_1_18 ja tan_real_2_0_4_n jmp tan_real_24 tan_real_n_2: ucomisd xmm0,qword ptr real_m_1_18 ja tan_real_n_s_2 movlpd xmm1,qword ptr real_m_pi_d_2 movlpd xmm12,qword ptr real_m_pi_d_2_l ucomisd xmm0,qword ptr real_n_pi_m_0_89 jb tan_real_n_1_0_2 ucomisd xmm0,qword ptr real_n_pi_m_1_18 jb tan_real_n_2_0_2_n jmp tan_real_24 tan_real_2: ucomisd xmm0,qword ptr real_1_18 jb tan_real_s_2 movlpd xmm1,qword ptr real_pi_d_2 movlpd xmm12,qword ptr real_pi_d_2_l ucomisd xmm0,qword ptr real_pi_m_0_89 ja tan_real_1_0_2 ucomisd xmm0,qword ptr real_pi_m_1_18 ja tan_real_2_0_2_n tan_real_24: subsd xmm1,xmm0 ; y_1 tan_real_2_: movlpd xmm2,qword ptr real_18_bits movsd xmm3,xmm12 andpd xmm2,xmm1 ; y_1_h addsd xmm3,xmm1 ; y movsd xmm6,xmm1 ; y_1 subsd xmm1,xmm2 ; y_1-y_1_h movsd xmm0,xmm2 ; y_1_h addsd xmm2,xmm3 ; y+y_1_h addsd xmm1,xmm12 ; y_1_l mulsd xmm0,xmm0 ; y_1_h^2 mulsd xmm1,xmm2 ; (y+y_1_h)*y_1_l movsd xmm13,xmm0 ; y_1_h^2 addsd xmm0,xmm1 ; y^2 movsd xmm14,xmm1 ; (y_1^2)_l movsd xmm1,xmm3 ; y subsd xmm3,xmm6 ; y-y_1 movlpd xmm5,qword ptr tan2_q_1 movlpd xmm9,qword ptr tan2_p_0 subsd xmm12,xmm3 ; y_s movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm5,xmm2 ; q2 mulsd xmm9,xmm2 ; p2 movlpd xmm6,qword ptr tan2_q_2 movlpd xmm11,qword ptr tan2_p_1 movsd xmm3,xmm2 ; x2 mulsd xmm2,xmm1 ; x3 movsd xmm8,xmm1 ; x movlpd xmm10,qword ptr real_0_5 mulsd xmm6,xmm0 ; q4 mulsd xmm11,xmm0 ; p4 addsd xmm5,xmm6 ; q4+q2 movlpd xmm7,qword ptr real_1_0 mulsd xmm10,xmm3 ; 0.5*x2 mulsd xmm3,xmm0 ; x6 addsd xmm5,qword ptr tan2_q_0 ; q4+q2+q0 mulsd xmm0,xmm0 ; x8 mulsd xmm3,qword ptr tan2_p_2 ; p6 mulsd xmm5,xmm2 ; (q4+q2+q0)*x3 mulsd xmm0,qword ptr tan2_p_3 ; p8 movsd xmm2,xmm5 ; (q4+q2+q0)*x3 addsd xmm5,xmm8 ; (q4+q2+q0)*x3+x addsd xmm0,xmm3 ; p8+p6 divsd xmm7,xmm5 ; 1/(q4+q2+q0)*x3+x movlpd xmm4,qword ptr real_25_bits addsd xmm0,xmm11 ; p8+p6+p4 andpd xmm5,xmm4 ; q_h addsd xmm0,xmm9 ; p8+p6+p4+p2 movlpd xmm9,qword ptr real_18_bits ; ucomisd xmm8,qword ptr real_0_4 ucomisd xmm10,qword ptr real_2_p_m_31 subsd xmm8,xmm5 ; x-q_h addsd xmm8,xmm2 ; q_l=q-q_h movlpd xmm6,qword ptr real_1_0 jb tan_real_2_s ; x<1.25*2**-16 tan_real_2_1: movsd xmm3,xmm0 ; p mulsd xmm14,qword ptr real_0_5 ; (0.5*x2)_l mulsd xmm13,qword ptr real_0_5 ; (0.5*x2)_h subsd xmm3,xmm10 ; p-0.5*x2 addsd xmm8,xmm12 ; q_l+y_s subsd xmm0,xmm14 ; p-(0.5*x2)_l andpd xmm9,xmm7 ; (1/q)_h mulsd xmm5,xmm9 ; q_h*(1/q)_h mulsd xmm8,xmm9 ; q_l*(1/q)_h mulsd xmm13,xmm9 ; (0.5*x2)_h*(1/q)_h mulsd xmm0,xmm9 ; (p-(0.5*x2)_l)*(1/q)_h movlpd xmm1,qword ptr real_21_bits subsd xmm6,xmm5 ; 1-q_h*(1/q)_h andpd xmm1,xmm0 ; ((p-(0.5*x2)_l)*(1/q)_h)_h subsd xmm6,xmm8 ; 1-(q_h+q_l)*(1/q)_h subsd xmm0,xmm1 ; ((p-(0.5*x2)_l)*(1/q)_h)_l subsd xmm1,xmm13 ; ((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_h movlpd xmm2,qword ptr real_21_bits mulsd xmm7,xmm6 ; (1/q)_l andpd xmm2,xmm1 ; (((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_h)_h mulsd xmm3,xmm7 ; (p-0.5x2)*(1/q)_l subsd xmm1,xmm2 ; (((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_l addsd xmm2,xmm9 ; (((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_h)_h+(1/q)_h addsd xmm0,xmm3 ; ((p-(0.5*x2)_l)*(1/q)_h)_l+(p-0.5x2)*(1/q)_l addsd xmm0,xmm7 ; ((p-(0.5*x2)_l)*(1/q)_h)_l+(p-0.5x2)*(1/q)_l+(1/q)_l addsd xmm0,xmm1 ; ((p-(0.5*x2)_l)*(1/q)_h)+(p-0.5x2)*(1/q)_l+(1/q)_l ; -(0.5*x2)_h*(1/q)_l addsd xmm0,xmm2 ret tan_real_2_s: subsd xmm0,xmm10 ; p-0.5*x2 addsd xmm8,xmm12 ; q_l+y_s andpd xmm9,xmm7 ; (1/q)_h mulsd xmm0,xmm7 ; (p-0.5*x2)*(1/q) mulsd xmm5,xmm9 ; q_h*(1/q)_h mulsd xmm8,xmm9 ; q_l*(1/q)_h subsd xmm6,xmm5 ; 1-q_h*(1/q)_h subsd xmm6,xmm8 ; 1-(q_h+q_l)*(1/q)_h mulsd xmm6,xmm7 ; (1/q)_l addsd xmm0,xmm6 ; (p/q)_l+(1/q)_l addsd xmm0,xmm9 ; p/q+1/q ret ; x<0.4 ; subsd xmm0,xmm10 ; p-0.5*x2 ; addsd xmm8,xmm12 ; q_l+y_s ; andpd xmm9,xmm7 ; (1/q)_h ; mulsd xmm0,xmm7 ; (p-0.5*x2)*(1/q) ; movlpd xmm4,qword ptr real_21_bits ; mulsd xmm5,xmm9 ; q_h*(1/q)_h ; mulsd xmm8,xmm9 ; q_l*(1/q)_h ; andpd xmm4,xmm0 ; (p/q)_h ; subsd xmm6,xmm5 ; 1-q_h*(1/q)_h ; subsd xmm0,xmm4 ; (p/q)_l ; addsd xmm4,xmm9 ; (p/q)_h+(1/q)_h ; subsd xmm6,xmm8 ; 1-(q_h+q_l)*(1/q)_h ; mulsd xmm6,xmm7 ; (1/q)_l ; addsd xmm0,xmm6 ; (p/q)_l+(1/q)_l ; addsd xmm0,xmm4 ; p/q+1/q ; ret tan_real_n_s_2: ucomisd xmm0,qword ptr real_m_1_04 jb tan_real_n_2_0 movlpd xmm1,qword ptr atan_sqrt_2 movlpd xmm10,qword ptr real_51_bits lea rdx,tan_n_s_2_t addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h addsd xmm1,qword ptr atan_sqrt_2_l ; y=x+atan sqrt 2 jmp tan_real_0_5_a_s_0_5_a_s_2 tan_real_s_2: ucomisd xmm0,qword ptr real_1_04 ja tan_real_2_0 movlpd xmm1,qword ptr m_atan_sqrt_2 movlpd xmm10,qword ptr real_51_bits lea rdx,tan_s_2_t addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h subsd xmm1,qword ptr atan_sqrt_2_l ; y=x-atan sqrt 2 jmp tan_real_0_5_a_s_0_5_a_s_2 tan_real_n_2_0: movlpd xmm1,qword ptr atan_2_53 movlpd xmm10,qword ptr real_49_bits addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h addsd xmm1,qword ptr atan_2_53_l ; y=x+atan 2 subsd xmm0,xmm10 ; x_l movlpd xmm11,qword ptr real_5_atan_2_m_2_53_l movlpd xmm12,qword ptr real_5_atan_2_m_2_53 movlpd xmm13,qword ptr real_m_2_0 jmp tan_real_2_0_ tan_real_2_0: movlpd xmm1,qword ptr m_atan_2_53 movlpd xmm10,qword ptr real_49_bits addsd xmm1,xmm0 andpd xmm10,xmm0 ; x_h subsd xmm1,qword ptr atan_2_53_l ; y=x-atan 2 subsd xmm0,xmm10 ; x_l movlpd xmm11,qword ptr real_n_2_m_5_atan_2_53_l movlpd xmm12,qword ptr real_n_2_m_5_atan_2_53 movlpd xmm13,qword ptr real_2_0 tan_real_2_0_: movsd xmm2,xmm1 ; y mulsd xmm1,xmm1 ; y2 mulsd xmm10,qword ptr real_5_0 ; 5*x_h movlpd xmm7,qword ptr tan3_q_1 movlpd xmm6,qword ptr tan3_q_2 movsd xmm3,xmm1 ; y2 mulsd xmm1,xmm1 ; y4 movlpd xmm9,qword ptr tan3_q_3 mulsd xmm7,xmm3 ; q2 movsd xmm4,xmm3 ; y2 mulsd xmm3,xmm1 ; y6 movlpd xmm8,qword ptr tan3_p_0 movsd xmm5,xmm1 ; y4 mulsd xmm1,xmm1 ; y8 mulsd xmm9,xmm3 ; q6 mulsd xmm3,qword ptr tan3_p_2 ; p6 mulsd xmm6,xmm5 ; q4 mulsd xmm5,qword ptr tan3_p_1 ; p4 addsd xmm1,xmm9 ; y8+q6 mulsd xmm8,xmm4 ; p2 addsd xmm1,xmm6 ; y8+q6+q4 mulsd xmm0,qword ptr real_5_0 ; 5*x_l addsd xmm3,xmm5 ; p6+p4 addsd xmm1,xmm7 ; y8+q6+q4+q2 mulsd xmm13,xmm2 ; 2*y addsd xmm3,xmm8 ; p6+p4+p2 addsd xmm1,qword ptr tan3_q_0 ; y8+q6+q4+q2+q0 movsd xmm4,xmm3 ; p addsd xmm4,xmm1 ; p+q mulsd xmm4,xmm13 ; 2*y*(p+q) ; mulsd xmm2,qword ptr real_5_0 ; 5*y addsd xmm3,xmm4 ; p+y*(p+q) subsd xmm1,xmm4 ; q-y*(p+q) divsd xmm3,xmm1 ; (p-y*(p+q))/(q+y*(p+q)) addsd xmm0,xmm11 mulsd xmm2,xmm3 ; y * (p-y*(p+q))/(q+y*(p+q)) addsd xmm10,xmm12 ; 2+5*x_h-5*atan 2=2-5*y mulsd xmm2,qword ptr real_5_0 ; 5*y*.. addsd xmm0,xmm2 addsd xmm0,xmm10 ; 2+5*y+5*y * .. ret tan_real_n_2_0_4_p: ucomisd xmm0,qword ptr real_n_2pi_m_1_04 subsd xmm1,xmm0 jb tan_real_s_2_p jmp tan_real_2_0_p tan_real_n_2_0_4_n: ucomisd xmm0,qword ptr real_n_pi_p_1_04 subsd xmm1,xmm0 ja tan_real_s_2_n jmp tan_real_2_0_n tan_real_n_2_0_2_n: ucomisd xmm0,qword ptr real_n_pi_m_1_04 subsd xmm1,xmm0 jb tan_real_s_2_p jmp tan_real_2_0_p tan_real_2_0_2_p: ucomisd xmm0,qword ptr real_pi_p_1_04 subsd xmm1,xmm0 jb tan_real_s_2_p tan_real_2_0_p: movlpd xmm0,qword ptr real_h_pi_m_atan_2_52 movlpd xmm2,qword ptr real_h_pi_m_atan_2_52_l movlpd xmm10,qword ptr real_48_bits subsd xmm0,xmm1 ; (0.5pi-atan 2)_h-x_h subsd xmm2,xmm12 ; (0.5pi-atan 2)_l-x_l andpd xmm10,xmm1 ; x_h movlpd xmm11,qword ptr real_m_5_0 addsd xmm2,xmm0 ; y=0.5pi-atan 2-x subsd xmm1,xmm10 ; x_h_l mulsd xmm10,xmm11 ; -5x_h movsd xmm0,xmm2 ; y mulsd xmm2,xmm2 ; y2 addsd xmm1,xmm12 ; x_h_l+x_l addsd xmm10,qword ptr real_2_p_2_5_pi_m_5_atan_2_53 ; -5x+(2+2.5pi-5atan 2)=2+5y movlpd xmm12,qword ptr real_2_p_2_5_pi_m_5_atan_2_53_l movlpd xmm13,qword ptr real_5_0 jmp tan_real_2_0_pn tan_real_2_0_4_n: ucomisd xmm0,qword ptr real_2pi_m_1_04 subsd xmm1,xmm0 ja tan_real_s_2_n jmp tan_real_2_0_n tan_real_2_0_2_n: ucomisd xmm0,qword ptr real_pi_m_1_04 subsd xmm1,xmm0 ja tan_real_s_2_n tan_real_2_0_n: movlpd xmm0,qword ptr real_h_pi_m_atan_2_52 movlpd xmm2,qword ptr real_h_pi_m_atan_2_52_l movlpd xmm10,qword ptr real_48_bits addsd xmm0,xmm1 ; (0.5pi-atan 2)_h+x_h addsd xmm2,xmm12 ; (0.5pi-atan 2)_l+x_l andpd xmm10,xmm1 ; x_h movlpd xmm11,qword ptr real_m_5_0 addsd xmm2,xmm0 ; y=0.5pi-atan 2+x subsd xmm1,xmm10 ; x_h_l mulsd xmm10,xmm11 ; -5x_h movsd xmm0,xmm2 ; y mulsd xmm2,xmm2 ; y2 addsd xmm1,xmm12 ; x_h_l+x_l subsd xmm10,qword ptr real_2_p_2_5_pi_m_5_atan_2_53 ; -5x-(2+2.5pi-5atan 2)=-2-5y movlpd xmm12,qword ptr real_5_atan_2_m_2_m_2_5_pi_53_l movlpd xmm13,qword ptr real_m_5_0 tan_real_2_0_pn: movlpd xmm7,qword ptr tan3_q_1 movlpd xmm6,qword ptr tan3_q_2 movsd xmm3,xmm2 ; y2 mulsd xmm2,xmm2 ; y4 movlpd xmm9,qword ptr tan3_q_3 mulsd xmm7,xmm3 ; q2 movsd xmm4,xmm3 ; y2 mulsd xmm3,xmm2 ; y6 movlpd xmm8,qword ptr tan3_p_0 movsd xmm5,xmm2 ; y4 mulsd xmm2,xmm2 ; y8 mulsd xmm9,xmm3 ; q6 mulsd xmm3,qword ptr tan3_p_2 ; p6 mulsd xmm6,xmm5 ; q4 mulsd xmm5,qword ptr tan3_p_1 ; p4 addsd xmm2,xmm9 ; y8+q6 mulsd xmm8,xmm4 ; p2 addsd xmm2,xmm6 ; y8+q6+q4 movlpd xmm6,qword ptr real_2_0 mulsd xmm1,xmm11 ; -5x_l addsd xmm3,xmm5 ; p6+p4 addsd xmm2,xmm7 ; y8+q6+q4+q2 mulsd xmm6,xmm0 ; 2*y addsd xmm3,xmm8 ; p6+p4+p2 addsd xmm2,qword ptr tan3_q_0 ; y8+q6+q4+q2+q0 movsd xmm4,xmm3 ; p addsd xmm4,xmm2 ; p+q mulsd xmm4,xmm6 ; 2*y*(p+q) addsd xmm3,xmm4 ; p+y*(p+q) subsd xmm2,xmm4 ; q-y*(p+q) divsd xmm3,xmm2 ; (p-y*(p+q))/(q+y*(p+q)) addsd xmm1,xmm12 mulsd xmm0,xmm3 ; y * (p-y*(p+q))/(q+y*(p+q)) mulsd xmm0,xmm13 ; -5*y*.. addsd xmm0,xmm1 addsd xmm0,xmm10 ; -2-5*y-5*y * .. ret tan_real_s_2_p: movlpd xmm0,qword ptr real_h_pi_m_atan_s_2_53 movlpd xmm2,qword ptr real_h_pi_m_atan_s_2_53_l movlpd xmm10,qword ptr real_49_bits subsd xmm0,xmm1 ; (0.5pi-atan sqrt 2)_h-x_h subsd xmm2,xmm12 ; (0.5pi-atan sqrt 2)_l-x_l andpd xmm10,xmm1 ; x_h movlpd xmm11,qword ptr real_m_3_0 addsd xmm2,xmm0 ; y=0.5pi-atan 2+x subsd xmm1,xmm10 ; x_h_l mulsd xmm10,xmm11 ; -3x_h movsd xmm0,xmm2 ; y mulsd xmm2,xmm2 ; y2 addsd xmm1,xmm12 ; x_h_l+x_l addsd xmm10,qword ptr real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53 ; -3x+(2+2.5pi-5atan 2)=sqrt 2+3y movlpd xmm12,qword ptr real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53_l movlpd xmm13,qword ptr real_3_0 jmp tan_real_s_2_pn tan_real_s_2_n: movlpd xmm0,qword ptr real_h_pi_m_atan_s_2_53 movlpd xmm2,qword ptr real_h_pi_m_atan_s_2_53_l movlpd xmm10,qword ptr real_49_bits addsd xmm0,xmm1 ; (0.5pi-atan sqrt 2)_h+x addsd xmm2,xmm12 ; (0.5pi-atan sqrt 2)_l+x_l andpd xmm10,xmm1 ; x_h movlpd xmm11,qword ptr real_m_3_0 addsd xmm2,xmm0 ; y=0.5pi-atan 2+x subsd xmm1,xmm10 ; x_h_l mulsd xmm10,xmm11 ; -3x_h movsd xmm0,xmm2 ; y mulsd xmm2,xmm2 ; y2 addsd xmm1,xmm12 ; x_h_l+x_l subsd xmm10,qword ptr real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53 ; -3x-(2+2.5pi-5atan 2)=-sqrt 2-3y movlpd xmm12,qword ptr real_3_atan_sqrt_2_m_sqrt_2_m_1_5_pi_m_53_l movlpd xmm13,qword ptr real_m_3_0 tan_real_s_2_pn: movlpd xmm7,qword ptr tan3_q_1 movlpd xmm6,qword ptr tan3_q_2 movsd xmm3,xmm2 ; y2 mulsd xmm2,xmm2 ; y4 movlpd xmm9,qword ptr tan3_q_3 mulsd xmm7,xmm3 ; q2 movsd xmm4,xmm3 ; y2 mulsd xmm3,xmm2 ; y6 movlpd xmm8,qword ptr tan3_p_0 movsd xmm5,xmm2 ; y4 mulsd xmm2,xmm2 ; y8 mulsd xmm9,xmm3 ; q6 mulsd xmm3,qword ptr tan3_p_2 ; p6 mulsd xmm6,xmm5 ; q4 mulsd xmm5,qword ptr tan3_p_1 ; p4 addsd xmm2,xmm9 ; y8+q6 mulsd xmm8,xmm4 ; p2 addsd xmm2,xmm6 ; y8+q6+q4 movlpd xmm6,qword ptr sqrt_2_0 mulsd xmm1,xmm11 ; -3x_l addsd xmm3,xmm5 ; p6+p4 addsd xmm2,xmm7 ; y8+q6+q4+q2 mulsd xmm6,xmm0 ; sqrt 2*y addsd xmm3,xmm8 ; p6+p4+p2 addsd xmm2,qword ptr tan3_q_0 ; y8+q6+q4+q2+q0 movsd xmm4,xmm3 ; p addsd xmm4,xmm2 ; p+q mulsd xmm4,xmm6 ; sqrt 2*y*(p+q) mulsd xmm0,xmm13 ; -3*y addsd xmm3,xmm4 ; p+sqrt 2*y*(p+q) subsd xmm2,xmm4 ; q-sqrt 2*y*(p+q) divsd xmm3,xmm2 ; (p-y*(p+q))/(q+y*(p+q)) addsd xmm1,xmm12 mulsd xmm0,xmm3 ; -3*y * (p-y*(p+q))/(q+y*(p+q)) addsd xmm0,xmm1 addsd xmm0,xmm10 ; -sqrt 2-3*y-3*y * .. ret tan_real_1_0_2: subsd xmm1,xmm0 tan_real_1_0_n: movlpd xmm0,qword ptr real_m_pi_d_4 movlpd xmm2,qword ptr real_m_pi_d_4_l subsd xmm0,xmm1 ; -(pi/4)_h-x_h subsd xmm2,xmm12 ; -(pi/4)_l-x_l mulsd xmm1,qword ptr real_m_2_0 ; -2x addsd xmm2,xmm0 ; y=-pi/4-x addsd xmm12,xmm12 ; 2x_l subsd xmm1,qword ptr real_pi_d_2_p_1_0 ; -2x-(pi/2+1)=-1-2y movlpd xmm10,qword ptr real_pi_d_2_p_1_0_l movlpd xmm11,qword ptr real_2_0 jmp tan_real_1_0_pn tan_real_n_1_0_2: subsd xmm1,xmm0 tan_real_1_0_2_p: movlpd xmm0,qword ptr real_m_pi_d_4 movlpd xmm2,qword ptr real_m_pi_d_4_l movlpd xmm11,qword ptr real_m_2_0 addsd xmm0,xmm1 ; -(pi/4)_h+x_h addsd xmm2,xmm12 ; -(pi/4)_l+x_l mulsd xmm1,xmm11 ; -2x addsd xmm2,xmm0 ; y=pi/4-x addsd xmm12,xmm12 ; 2x_l addsd xmm1,qword ptr real_pi_d_2_p_1_0 ; (pi/2+1)-2x-=1+2y movlpd xmm10,qword ptr real_m_pi_d_2_p_1_0_l jmp tan_real_1_0_pn tan_real_n_5: ucomisd xmm0,qword ptr real_n_2pi_m_0_338 movlpd xmm12,qword ptr real_m_2_pi_l movlpd xmm1,qword ptr real_2_pi ja tan_real_n_s_0_5_5_p ucomisd xmm0,qword ptr real_n_2pi_p_0_338 ja tan_real_5_n ucomisd xmm0,qword ptr real_n_2pi_p_0_699 ja tan_real_n_s_0_5_5_n addsd xmm0,xmm1 jmp tan_real_1_0_3_n tan_real_5: ucomisd xmm0,qword ptr real_2pi_m_0_338 movlpd xmm12,qword ptr real_2_pi_l movlpd xmm1,qword ptr real_2_pi jb tan_real_s_0_5_5 ucomisd xmm0,qword ptr real_2pi_p_0_338 jb tan_real_5_0 ucomisd xmm0,qword ptr real_2pi_p_0_699 jb tan_real_s_0_5_5_p subsd xmm0,xmm1 jmp tan_real_1_0_3 tan_real_n_3: ucomisd xmm0,qword ptr real_n_pi_m_0_338 movlpd xmm12,qword ptr real_m_pi_l movlpd xmm1,qword ptr real_pi ja tan_real_n_s_0_5_3_p ucomisd xmm0,qword ptr real_n_pi_p_0_338 ja tan_real_3_n ucomisd xmm0,qword ptr real_n_pi_p_0_699 ja tan_real_n_s_0_5_3_n addsd xmm0,xmm1 jmp tan_real_1_0_3_n tan_real_3: ucomisd xmm0,qword ptr real_pi_m_0_338 movlpd xmm1,qword ptr real_pi movlpd xmm12,qword ptr real_pi_l jb tan_real_s_0_5_3 ucomisd xmm0,qword ptr real_pi_p_0_338 jb tan_real_3_0 ucomisd xmm0,qword ptr real_pi_p_0_699 jb tan_real_s_0_5_3_p subsd xmm0,xmm1 jmp tan_real_1_0_3 tan_real_5_n: tan_real_3_n: addsd xmm0,xmm1 jmp tan_real_3_ tan_real_5_0: tan_real_3_0: subsd xmm0,xmm1 tan_real_3_: movlpd xmm2,qword ptr real_26_bits andpd xmm2,xmm0 ; y_1_h movsd xmm1,xmm0 ; y_1 subsd xmm1,xmm12 ; y movsd xmm8,xmm0 ; y_1 subsd xmm0,xmm2 ; y_1-y_1_h movsd xmm3,xmm2 ; y_1_h addsd xmm2,xmm1 ; y+y_1_h subsd xmm0,xmm12 ; y_1_l mulsd xmm3,xmm3 ; y_1_h^2 mulsd xmm0,xmm2 ; (y+y_1_h)*y_1_l addsd xmm0,xmm3 ; y^2 subsd xmm8,xmm1 ; y_1-y movlpd xmm6,qword ptr tan_q_1 movlpd xmm5,qword ptr tan_q_2 subsd xmm8,xmm12 ; y_s movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movlpd xmm7,qword ptr tan_p_1 mulsd xmm6,xmm2 ; q2 movsd xmm3,xmm2 ; x2 mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 mulsd xmm5,xmm4 ; q4 mulsd xmm2,qword ptr tan_q_3 ; q6 mulsd xmm4,qword ptr tan_p_2 ; p4 addsd xmm0,xmm2 ; x8+q6 mulsd xmm7,xmm3 ; p2 addsd xmm0,xmm5 ; x8+q6+q4 addsd xmm4,xmm7 ; p4+p2 addsd xmm0,xmm6 ; x8+q6+q4+q2 addsd xmm4,qword ptr tan_p_0 ; p4+p2+p0 addsd xmm0,qword ptr tan_q_0 ; x8+q6+q4+q2+q0 divsd xmm4,xmm0 ; p/q mulsd xmm3,xmm1 ; x3 movsd xmm0,xmm1 ; x ; movlpd xmm2,qword ptr real_0_125 mulsd xmm3,xmm4 ; ucomisd xmm3,xmm2 ; jae tan_real_3_1 addsd xmm3,xmm8 addsd xmm0,xmm3 ret ;tan_real_3_1: ; subsd xmm3,xmm2 ; addsd xmm0,xmm2 ; addsd xmm3,xmm8 ; addsd xmm0,xmm3 ; ret tan_real_1_0_3: movlpd xmm1,qword ptr real_pi_d_4 movlpd xmm2,qword ptr real_pi_d_4_l subsd xmm1,xmm0 ; (pi/4)_h-x addsd xmm2,xmm12 ; (pi/4)_l+n_x_l mulsd xmm0,qword ptr real_2_0 ; 2x addsd xmm2,xmm1 ; y=pi/4-x movlpd xmm1,qword ptr real_1_0_m_pi_d_2_52 addsd xmm12,xmm12 ; 2n_x_l addsd xmm1,xmm0 ; 2x+(1-pi/2)=1-2y movlpd xmm11,qword ptr real_m_2_0 movlpd xmm10,qword ptr real_pi_d_2_m_1_0_52_l jmp tan_real_1_0_pn tan_real_1_0_3_n: movlpd xmm1,qword ptr real_pi_d_4 movlpd xmm2,qword ptr real_pi_d_4_l addsd xmm1,xmm0 subsd xmm2,xmm12 ; (pi/4)_l-n_x_l mulsd xmm0,qword ptr real_2_0 ; 2x addsd xmm2,xmm1 ; y=pi/4+x movlpd xmm1,qword ptr real_pi_d_2_m_1_0_52 addsd xmm12,xmm12 ; 2n_x_l addsd xmm1,xmm0 ; 2x+(pi/2-1)=-1+2y movlpd xmm11,qword ptr real_2_0 movlpd xmm10,qword ptr real_m_pi_d_2_m_1_0_52_l tan_real_1_0_pn: movsd xmm0,xmm2 ; y mulsd xmm2,xmm2 ; y2 movlpd xmm7,qword ptr tan3_q_1 movlpd xmm6,qword ptr tan3_q_2 movsd xmm3,xmm2 ; y2 mulsd xmm2,xmm2 ; y4 movlpd xmm9,qword ptr tan3_q_3 mulsd xmm7,xmm3 ; q2 movsd xmm4,xmm3 ; y2 mulsd xmm3,xmm2 ; y6 movlpd xmm8,qword ptr tan3_p_0 movsd xmm5,xmm2 ; y4 mulsd xmm2,xmm2 ; y8 mulsd xmm9,xmm3 ; q6 mulsd xmm3,qword ptr tan3_p_2 ; p6 mulsd xmm6,xmm5 ; q4 mulsd xmm5,qword ptr tan3_p_1 ; p4 addsd xmm2,xmm9 ; y8+q6 mulsd xmm8,xmm4 ; p2 addsd xmm2,xmm6 ; y8+q6+q4 addsd xmm3,xmm5 ; p6+p4 addsd xmm2,xmm7 ; y8+q6+q4+q2 addsd xmm3,xmm8 ; p6+p4+p2 addsd xmm2,qword ptr tan3_q_0 ; y8+q6+q4+q2+q0 movsd xmm4,xmm3 ; p addsd xmm4,xmm2 ; p+q mulsd xmm4,xmm0 ; y*(p+q) mulsd xmm0,xmm11 ; -2y | 2y subsd xmm3,xmm4 ; p-y*(p+q) addsd xmm2,xmm4 ; q+y*(p+q) divsd xmm3,xmm2 ; (p-y*(p+q))/(q+y*(p+q)) addsd xmm12,xmm10 mulsd xmm0,xmm3 ; -2y * (p-y*(p+q))/(q+y*(p+q)) | 2y * (p-y*(p+q))/(q+y*(p+q)) subsd xmm0,xmm12 addsd xmm0,xmm1 ; 1-2y-2y * .. | -1+2y+2y * .. ret tan_real_n_s_0_5_5_p: ucomisd xmm0,qword ptr real_n_2pi_m_0_542 addsd xmm0,xmm1 jb tan_real_0_5_p jmp tan_real_s_0_5_p tan_real_s_0_5_5_p: ucomisd xmm0,qword ptr real_2pi_p_0_542 subsd xmm0,xmm1 jb tan_real_0_5_p jmp tan_real_s_0_5_p tan_real_n_s_0_5_3_p: ucomisd xmm0,qword ptr real_n_pi_m_0_542 addsd xmm0,xmm1 jb tan_real_0_5_p jmp tan_real_s_0_5_p tan_real_s_0_5_3_p: ucomisd xmm0,qword ptr real_pi_p_0_542 subsd xmm0,xmm1 jb tan_real_0_5_p tan_real_s_0_5_p: movlpd xmm1,qword ptr atan_sqrt_0_5 movlpd xmm2,qword ptr atan_sqrt_0_5_l movlpd xmm10,qword ptr real_51_bits subsd xmm1,xmm0 ; atan sqrt 0.5_h-x addsd xmm2,xmm12 ; atan sqrt 0.5_l+n_x_l andpd xmm10,xmm0 ; x_h movlpd xmm11,qword ptr real_1_5 addsd xmm2,xmm1 ; y=atan sqrt 0.5-x subsd xmm0,xmm10 ; x_h_l mulsd xmm10,xmm11 ; 1.5x_h movsd xmm1,xmm2 ; y mulsd xmm2,xmm2 ; y2 subsd xmm0,xmm12 ; x_h_l-n_x_l addsd xmm10,qword ptr sqrtn_0_5_m_1_5_atann_sqrt_0_5 ; 1.5x+(sqrt 0.5-1.5atan sqrt 0.5)=sqrt 0.5+1.5y movlpd xmm12,qword ptr sqrtn_0_5_m_1_5_atann_sqrt_0_5_l movlpd xmm13,qword ptr real_m_1_5 movlpd xmm14,qword ptr sqrt_0_5 jmp tan_real_0_5_a_s_0_5_3_pn tan_real_n_s_0_5_5_n: ucomisd xmm0,qword ptr real_n_2pi_p_0_542 addsd xmm0,xmm1 ja tan_real_0_5_n jmp tan_real_s_0_5_n tan_real_s_0_5_5: ucomisd xmm0,qword ptr real_2pi_m_0_542 subsd xmm0,xmm1 ja tan_real_0_5_n jmp tan_real_s_0_5_n tan_real_n_s_0_5_3_n: ucomisd xmm0,qword ptr real_n_pi_p_0_542 addsd xmm0,xmm1 ja tan_real_0_5_n jmp tan_real_s_0_5_n tan_real_s_0_5_3: ucomisd xmm0,qword ptr real_pi_m_0_542 subsd xmm0,xmm1 ja tan_real_0_5_n tan_real_s_0_5_n: movlpd xmm1,qword ptr atan_sqrt_0_5 movlpd xmm2,qword ptr atan_sqrt_0_5_l movlpd xmm10,qword ptr real_51_bits addsd xmm1,xmm0 ; x_h+atan sqrt 0.5_h subsd xmm2,xmm12 ; -n_x_l+atan sqrt 0.5_l andpd xmm10,xmm0 ; x_h movlpd xmm11,qword ptr real_1_5 addsd xmm2,xmm1 ; y=x+atan sqrt 0.5 subsd xmm0,xmm10 ; x_h_l mulsd xmm10,xmm11 ; 1.5x_h movsd xmm1,xmm2 ; y mulsd xmm2,xmm2 ; y2 subsd xmm0,xmm12 ; x_h_l-n_x_l subsd xmm10,qword ptr sqrtn_0_5_m_1_5_atann_sqrt_0_5 ; 1.5x-(sqrt 0.5-1.5atan sqrt 0.5)=-sqrt 0.5+1.5y movlpd xmm12,qword ptr n_sqrtn_0_5_m_1_5_atann_sqrt_0_5_l movlpd xmm13,qword ptr real_1_5 movlpd xmm14,qword ptr sqrt_0_5 tan_real_0_5_a_s_0_5_3_pn: movlpd xmm7,qword ptr tan3_q_1 movlpd xmm6,qword ptr tan3_q_2 movsd xmm3,xmm2 ; y2 mulsd xmm2,xmm2 ; y4 movlpd xmm9,qword ptr tan3_q_3 mulsd xmm7,xmm3 ; q2 movsd xmm4,xmm3 ; y2 mulsd xmm3,xmm2 ; y6 movlpd xmm8,qword ptr tan3_p_0 movsd xmm5,xmm2 ; y4 mulsd xmm2,xmm2 ; y8 mulsd xmm9,xmm3 ; q6 mulsd xmm3,qword ptr tan3_p_2 ; p6 mulsd xmm6,xmm5 ; q4 mulsd xmm5,qword ptr tan3_p_1 ; p4 addsd xmm2,xmm9 ; y8+q6 mulsd xmm8,xmm4 ; p2 addsd xmm2,xmm6 ; y8+q6+q4 mulsd xmm0,xmm11 ; 1.25|1.5x_l addsd xmm3,xmm5 ; p6+p4 addsd xmm2,xmm7 ; y8+q6+q4+q2 mulsd xmm14,xmm1 ; 0.5|sqrt 0.5*y addsd xmm3,xmm8 ; p6+p4+p2 addsd xmm2,qword ptr tan3_q_0 ; y8+q6+q4+q2+q0 movsd xmm4,xmm3 ; p addsd xmm4,xmm2 ; p+q mulsd xmm4,xmm14 ; 0.5|sqrt 0.5*y*(p+q) subsd xmm3,xmm4 ; p-sqrt 0.5*y*(p+q) addsd xmm2,xmm4 ; q+sqrt 0.5*y*(p+q) divsd xmm3,xmm2 ; (p-y*(p+q))/(q+y*(p+q)) addsd xmm0,xmm12 mulsd xmm1,xmm3 ; y * (p-y*(p+q))/(q+y*(p+q)) mulsd xmm1,xmm13 ; 1.25|1.5*y*.. addsd xmm0,xmm1 addsd xmm0,xmm10 ; 0.5|sqrt 0.5+1.25|1.5*y+1.25|1.5*y * .. ret tan_real_0_5_p: movlpd xmm1,qword ptr atan_0_5_53 movlpd xmm2,qword ptr atan_0_5_53_l movlpd xmm10,qword ptr real_50_bits subsd xmm1,xmm0 ; atan 0.5_h-x addsd xmm2,xmm12 ; atan 0.5_l-n_x_l andpd xmm10,xmm0 ; x_h movlpd xmm11,qword ptr real_1_25 addsd xmm2,xmm1 ; y=x+atan 0.5 subsd xmm0,xmm10 ; x_h_l mulsd xmm10,xmm11 ; 1.25x_h movsd xmm1,xmm2 ; y mulsd xmm2,xmm2 ; y2 subsd xmm0,xmm12 ; x_h_l-n_x_l addsd xmm10,qword ptr real_0_5_m_1_25_atan_0_5_49 ; 1.25x+(0.5-1.25atan 0.5)=0.5+1.25y movlpd xmm12,qword ptr real_0_5_m_1_25_atan_0_5_49_l movlpd xmm13,qword ptr real_m_1_25 movlpd xmm14,qword ptr real_0_5 jmp tan_real_0_5_a_s_0_5_3_pn tan_real_0_5_n: movlpd xmm1,qword ptr atan_0_5_53 movlpd xmm2,qword ptr atan_0_5_53_l movlpd xmm10,qword ptr real_50_bits addsd xmm1,xmm0 ; x_h+atan 0.5_h subsd xmm2,xmm12 ; -n_x_l+atan 0.5_l andpd xmm10,xmm0 ; x_h movlpd xmm11,qword ptr real_1_25 addsd xmm2,xmm1 ; y=x+atan 0.5 subsd xmm0,xmm10 ; x_h_l mulsd xmm10,xmm11 ; 1.25x_h movsd xmm1,xmm2 ; y mulsd xmm2,xmm2 ; y2 subsd xmm0,xmm12 ; x_h_l-n_x_l subsd xmm10,qword ptr real_0_5_m_1_25_atan_0_5_49 ; 1.25x-(0.5-1.25atan 0.5)=-0.5+1.25y movlpd xmm12,qword ptr real_1_25_atan_0_5_m_0_5_49_l movlpd xmm13,qword ptr real_1_25 movlpd xmm14,qword ptr real_0_5 jmp tan_real_0_5_a_s_0_5_3_pn tan_real_too_large: tan_real_too_small_or_nan: subsd xmm0,xmm0 ret _T001 ends _T002 segment para 'CODE' rem_36825084_pi: movsd xmm1,xmm0 divsd xmm0,qword ptr real_36825084_pi movq xmm4,qword ptr round_c movq xmm2,xmm0 psrlq xmm0,52 psubq xmm4,xmm0 movq xmm5,qword ptr mask_all_one psllq xmm5,xmm4 andpd xmm5,xmm2 movlpd xmm2,qword ptr real_36825084_pi_27 movlpd xmm3,qword ptr real_36825084_pi_27_27 movlpd xmm4,qword ptr real_36825084_pi_54_l movsd xmm0,xmm1 mulsd xmm2,xmm5 mulsd xmm3,xmm5 mulsd xmm4,xmm5 subsd xmm0,xmm2 subsd xmm0,xmm3 movsd xmm7,xmm0 subsd xmm0,xmm4 subsd xmm7,xmm0 subsd xmm7,xmm4 movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi ucomisd xmm1,qword ptr real_3_0 jae rem_36825084_pi_g3 ucomisd xmm1,qword ptr real_1_0 jae rem_36825084_pi_g1 movlpd xmm1,qword ptr real_0_0 movsd xmm5,xmm1 movsd xmm6,xmm1 ret rem_36825084_pi_g1: movlpd xmm1,qword ptr real_2_0 movlpd xmm5,qword ptr real_0_0 movsd xmm6,xmm1 ret rem_36825084_pi_g3: addsd xmm1,qword ptr real_1_0 ; x*4/pi+1 movq xmm4,qword ptr round_even_c movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 ; round_even (x*4/pi+1) movq xmm5,qword ptr mask_all_one_except_last movq xmm6,qword ptr mask_all_one_except_second_last psllq xmm5,xmm4 psllq xmm6,xmm4 ret rem_n_36825084_pi: movsd xmm1,xmm0 divsd xmm0,qword ptr real_36825084_pi movq xmm4,qword ptr m_round_c movq xmm2,xmm0 psrlq xmm0,52 psubq xmm4,xmm0 movq xmm5,qword ptr mask_all_one psllq xmm5,xmm4 andpd xmm5,xmm2 movlpd xmm2,qword ptr real_36825084_pi_27 movlpd xmm3,qword ptr real_36825084_pi_27_27 movlpd xmm4,qword ptr real_36825084_pi_54_l movsd xmm0,xmm1 mulsd xmm2,xmm5 mulsd xmm3,xmm5 mulsd xmm4,xmm5 subsd xmm0,xmm2 subsd xmm0,xmm3 movsd xmm7,xmm0 subsd xmm0,xmm4 subsd xmm7,xmm0 subsd xmm7,xmm4 movlpd xmm1,qword ptr real_4_d_pi mulsd xmm1,xmm0 ; x*4/pi ucomisd xmm1,qword ptr real_m_3_0 jbe rem_n_36825084_pi_g3 ucomisd xmm1,qword ptr real_m_1_0 jbe rem_n_36825084_pi_g1 movlpd xmm1,qword ptr real_0_0 movsd xmm5,xmm1 movsd xmm6,xmm1 ret rem_n_36825084_pi_g1: movlpd xmm1,qword ptr real_m_2_0 movlpd xmm5,qword ptr real_0_0 movsd xmm6,xmm1 ret rem_n_36825084_pi_g3: subsd xmm1,qword ptr real_1_0 ; x*4/pi-1 movq xmm4,qword ptr m_round_even_c movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 ; round_even (x*4/pi-1) movq xmm5,qword ptr mask_all_one_except_last movq xmm6,qword ptr mask_all_one_except_second_last psllq xmm5,xmm4 psllq xmm6,xmm4 ret _T002 ends _T003 segment para 'CODE' public asin_real asin_real: ucomisd xmm0,qword ptr real_0_4 lea rcx,asin_c ja asin_real_2 ucomisd xmm0,qword ptr real_m_0_4 jb asin_real_3 ; x<0.55 | NAN movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm6,qword ptr (asin_q_4-asin_c)[rcx] movlpd xmm7,qword ptr (asin_q_3-asin_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movlpd xmm8,qword ptr (asin_q_2-asin_c)[rcx] movlpd xmm9,qword ptr (asin_q_1-asin_c)[rcx] movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movlpd xmm10,qword ptr (asin_p_1-asin_c)[rcx] movsd xmm3,xmm2 ; x2 mulsd xmm3,xmm4 ; x6 mulsd xmm6,xmm0 ; q8 movsd xmm5,xmm0 ; x8 mulsd xmm0,xmm2 ; x10 mulsd xmm5,qword ptr (asin_p_4-asin_c)[rcx] ; p8 mulsd xmm7,xmm3 ; q6 mulsd xmm3,qword ptr (asin_p_3-asin_c)[rcx] ; p6 addsd xmm0,xmm6 ; x10+q8 mulsd xmm8,xmm4 ; q4 mulsd xmm4,qword ptr (asin_p_2-asin_c)[rcx] ; p4 addsd xmm0,xmm7 ; x10+q8+q6 addsd xmm3,xmm5 ; p8+p6 mulsd xmm9,xmm2 ; q2 mulsd xmm10,xmm2 ; p2 addsd xmm0,xmm8 ; x10+q8+q6+q4 addsd xmm3,xmm4 ; p8+p6+p4 addsd xmm0,xmm9 ; x10+q8+q6+q4+q2 addsd xmm3,xmm10 ; p8+p6+p4+p2 addsd xmm0,qword ptr (asin_q_0-asin_c)[rcx] ; x10+q8+q6+q4+q2+q0 addsd xmm3,qword ptr (asin_p_0-asin_c)[rcx] ; p8+p6+p4+p2+p0 divsd xmm3,xmm0 ; p/q mulsd xmm2,xmm1 ; x3 movsd xmm0,xmm1 ; x mulsd xmm2,xmm3 addsd xmm0,xmm2 ret asin_real_2: ucomisd xmm0,qword ptr real_0_675 jb asin_real_0_54 movlpd xmm1,qword ptr real_1_0 ucomisd xmm0,xmm1 subsd xmm1,xmm0 jae asin_real_1_or_e movlpd xmm11,qword ptr real_2_0 movsd xmm0,xmm1 ; x mulsd xmm1,xmm1 ; x2 mulsd xmm11,xmm0 ; 2x movlpd xmm7,qword ptr (asin2_q_3-asin_c)[rcx] movsd xmm2,xmm1 ; x2 mulsd xmm1,xmm1 ; x4 sqrtsd xmm12,xmm11 ; sqrt 2x movlpd xmm5,qword ptr (asin2_p_3-asin_c)[rcx] movlpd xmm8,qword ptr (asin2_q_2-asin_c)[rcx] movsd xmm4,xmm1 ; x4 movlpd xmm9,qword ptr (asin2_q_1-asin_c)[rcx] movlpd xmm10,qword ptr (asin2_p_1-asin_c)[rcx] movsd xmm3,xmm2 ; x2 mulsd xmm3,xmm0 ; x3 mulsd xmm4,qword ptr (asin2_p_4-asin_c)[rcx] ; p4 mulsd xmm7,xmm3 ; q3 mulsd xmm5,xmm3 ; p3 mulsd xmm8,xmm2 ; q2 mulsd xmm2,qword ptr (asin2_p_2-asin_c)[rcx] ; p2 addsd xmm1,xmm7 ; x4+q3 addsd xmm4,xmm5 ; p4+p3 mulsd xmm9,xmm0 ; q1 mulsd xmm10,xmm0 ; p1 addsd xmm1,xmm8 ; x5+q4+q3+q2 addsd xmm4,xmm2 ; p4+p3+p2 addsd xmm1,xmm9 ; x5+q4+q3+q2+q1 addsd xmm4,xmm10 ; p4+p3+p2+p1 movlpd xmm13,qword ptr real_21_bits addsd xmm1,qword ptr (asin2_q_0-asin_c)[rcx] ; x5+q4+q3+q2+q1+q0 addsd xmm4,qword ptr (asin2_p_0-asin_c)[rcx] ; p4+p3+p2+p1+p0 andpd xmm13,xmm12 ; s21 divsd xmm4,xmm1 ; p/q movsd xmm14,xmm13 ; s21 movsd xmm15,xmm12 ; s addsd xmm12,xmm13 ; s+s21 mulsd xmm13,xmm13 ; s21*s21 subsd xmm11,xmm13 ; 2x-s21*s21 divsd xmm11,xmm12 ; sl addsd xmm14,qword ptr real_m_pi_d_2 ; s21-pi_d_2 mulsd xmm4,xmm0 ; x*p/q movlpd xmm0,qword ptr real_pi_d_2_l subsd xmm0,xmm11 ; pi_d_2_l-sl mulsd xmm4,xmm15 ; s*x*p/q subsd xmm0,xmm4 ; pi_d_2_l-sl-s*x*p/q subsd xmm0,xmm14 ; pi_d_2_l-sl-s*x*p/q-s21+pi_d_2 ret asin_real_3: ucomisd xmm0,qword ptr real_m_0_675 ja asin_real_m_0_54 movlpd xmm1,qword ptr real_m_1_0 ucomisd xmm0,xmm1 jbe asin_real_m_1_or_e ; x<=-1 | NAN subsd xmm0,xmm1 movlpd xmm11,qword ptr real_2_0 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 mulsd xmm11,xmm1 ; 2x movlpd xmm7,qword ptr (asin2_q_3-asin_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 sqrtsd xmm12,xmm11 ; sqrt 2x movlpd xmm5,qword ptr (asin2_p_3-asin_c)[rcx] movlpd xmm8,qword ptr (asin2_q_2-asin_c)[rcx] movsd xmm4,xmm0 ; x4 movlpd xmm9,qword ptr (asin2_q_1-asin_c)[rcx] movlpd xmm10,qword ptr (asin2_p_1-asin_c)[rcx] movsd xmm3,xmm2 ; x2 mulsd xmm3,xmm1 ; x3 mulsd xmm4,qword ptr (asin2_p_4-asin_c)[rcx] ; p4 mulsd xmm7,xmm3 ; q3 mulsd xmm5,xmm3 ; p3 mulsd xmm8,xmm2 ; q2 mulsd xmm2,qword ptr (asin2_p_2-asin_c)[rcx] ; p2 addsd xmm0,xmm7 ; x4+q3 addsd xmm4,xmm5 ; p4+p3 mulsd xmm9,xmm1 ; q1 mulsd xmm10,xmm1 ; p1 addsd xmm0,xmm8 ; x5+q4+q3+q2 addsd xmm4,xmm2 ; p4+p3+p2 addsd xmm0,xmm9 ; x5+q4+q3+q2+q1 addsd xmm4,xmm10 ; p4+p3+p2+p1 movlpd xmm13,qword ptr real_21_bits addsd xmm0,qword ptr (asin2_q_0-asin_c)[rcx] ; x5+q4+q3+q2+q1+q0 addsd xmm4,qword ptr (asin2_p_0-asin_c)[rcx] ; p4+p3+p2+p1+p0 andpd xmm13,xmm12 ; s21 divsd xmm4,xmm0 ; p/q movsd xmm14,xmm13 ; s21 movsd xmm15,xmm12 ; s addsd xmm12,xmm13 ; s+s21 mulsd xmm13,xmm13 ; s21*s21 subsd xmm11,xmm13 ; 2x-s21*s21 divsd xmm11,xmm12 ; sl addsd xmm14,qword ptr real_m_pi_d_2 ; s21-pi_d_2 mulsd xmm4,xmm1 ; x*p/q movlpd xmm0,qword ptr real_m_pi_d_2_l addsd xmm0,xmm11 ; -pi_d_2_l+sl mulsd xmm4,xmm15 ; s*x*p/q addsd xmm0,xmm4 ; -pi_d_2_l+sl+s*x*p/q addsd xmm0,xmm14 ; -pi_d_2_l+sl+s*x*p/q+s21-pi_d_2 ret asin_real_m_0_54: movlpd xmm1,qword ptr real_m_0_54000000017867999524 ucomisd xmm0,xmm1 subsd xmm0,xmm1 lea rcx,asin_p3_c lea rdx,asin_p4_c cmova rcx,rdx jmp asin_real_pm_0_54 asin_real_0_54: movlpd xmm1,qword ptr real_0_54000000017867999524 ucomisd xmm0,xmm1 subsd xmm0,xmm1 lea rcx,asin_p1_c lea rdx,asin_p2_c cmovb rcx,rdx asin_real_pm_0_54: movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm7,qword ptr (asin_p1_4-asin_p1_c)[rcx] movlpd xmm8,qword ptr (asin_p1_3-asin_p1_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm7,xmm2 ; p4 mulsd xmm8,xmm2 ; p3 movlpd xmm9,qword ptr (asin_p1_6-asin_p1_c)[rcx] movlpd xmm10,qword ptr (asin_p1_5-asin_p1_c)[rcx] movsd xmm3,xmm2 ; x2 mulsd xmm2,xmm0 ; x6 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 mulsd xmm9,xmm4 ; p6 mulsd xmm10,xmm4 ; p5 movlpd xmm11,qword ptr (asin_p1_8-asin_p1_c)[rcx] movlpd xmm12,qword ptr (asin_p1_10-asin_p1_c)[rcx] mulsd xmm4,xmm2 ; x10 movlpd xmm13,qword ptr (asin_p1_12-asin_p1_c)[rcx] movlpd xmm14,qword ptr (asin_p1_14-asin_p1_c)[rcx] movsd xmm6,xmm2 ; x6 mulsd xmm2,xmm2 ; x12 mulsd xmm11,xmm6 ; p8 mulsd xmm6,qword ptr (asin_p1_7-asin_p1_c)[rcx] ; p7 mulsd xmm12,xmm0 ; p10 mulsd xmm0,qword ptr (asin_p1_9-asin_p1_c)[rcx] ; p9 mulsd xmm13,xmm4 ; p12 mulsd xmm4,qword ptr (asin_p1_11-asin_p1_c)[rcx] ; p11 mulsd xmm14,xmm2 ; p14 mulsd xmm2,qword ptr (asin_p1_13-asin_p1_c)[rcx] ; p13 addsd xmm13,xmm14 ; p14+p12 addsd xmm2,xmm4 ; p13+p11 movlpd xmm15,qword ptr (asin_p1_2-asin_p1_c)[rcx] addsd xmm12,xmm13 ; p14+p12+p10 addsd xmm0,xmm2 ; p13+p11+p9 mulsd xmm15,xmm3 ; p2 addsd xmm11,xmm12 ; p14+p12+p10+p8 addsd xmm0,xmm6 ; p13+p11+p9+p7 movlpd xmm2,qword ptr real_26_bits movsd xmm4,xmm1 ; x movlpd xmm6,qword ptr (asin_p1_1l-asin_p1_c)[rcx] movlpd xmm5,qword ptr (asin_p1_1h-asin_p1_c)[rcx] addsd xmm9,xmm11 ; p14+p12+p10+p8+p6 addsd xmm0,xmm10 ; p13+p11+p9+p7+p5 andpd xmm2,xmm1 ; x_h mulsd xmm6,xmm1 ; x*c1l movlpd xmm13,qword ptr (asin_p1_0h-asin_p1_c)[rcx] addsd xmm7,xmm9 ; p14+p12+p10+p8+p6+p4 addsd xmm0,xmm8 ; p13+p11+p9+p7+p5+p3 subsd xmm4,xmm2 ; x_l mulsd xmm2,xmm5 ; x_h*c1h mulsd xmm7,xmm3 ; (p14+p12+p10+p8+p6+p4)(*x2) mulsd xmm0,xmm1 ; (p13+p11+p9+p7+p5+p3)(*x) movsd xmm14,xmm13 addsd xmm13,xmm2 ; x_h*c1h+c0h addsd xmm0,xmm7 ; p14+p13+..+p3 subsd xmm14,xmm13 ; c0h-(x_h*c1h+c0h) mulsd xmm4,xmm5 ; x_l*c1h addsd xmm0,xmm15 ; p14+p13+..+p3+p2 ; addsd xmm0,qword ptr (asin_p1_0l-asin_p1_c)[rcx] addsd xmm14,xmm2 ; (c0h-(x_h*c1h+c0h))+x_h*c1h addsd xmm4,xmm6 ; x_l*c1h+x*c1l addsd xmm4,xmm14 ; (c0h-(x_h*c1h+c0h))+x_h*c1h+x_l*c1h+x*c1l addsd xmm0,xmm4 addsd xmm0,xmm13 ret asin_real_1_or_e: jne asin_real_e movlpd xmm0,qword ptr real_pi_d_2 ret asin_real_m_1_or_e: jb asin_real_e ; NAN movlpd xmm0,qword ptr real_m_pi_d_2 ret asin_real_e: subsd xmm0,xmm0 divsd xmm0,xmm0 ret _T003 ends _T004 segment para 'CODE' public acos_real acos_real: ; ucomisd xmm0,qword ptr real_0_58 ucomisd xmm0,qword ptr real_0_5 ja acos_real_2 ucomisd xmm0,qword ptr real_m_0_58 jb acos_real_3 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm6,qword ptr acos_q_4 movlpd xmm7,qword ptr acos_q_3 movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movlpd xmm8,qword ptr acos_q_2 movlpd xmm9,qword ptr acos_q_1 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movlpd xmm10,qword ptr acos_p_1 movsd xmm3,xmm2 ; x2 mulsd xmm3,xmm4 ; x6 mulsd xmm6,xmm0 ; q8 movsd xmm5,xmm0 ; x8 mulsd xmm0,xmm2 ; x10 mulsd xmm5,qword ptr acos_p_4 ; p8 mulsd xmm7,xmm3 ; q6 mulsd xmm3,qword ptr acos_p_3 ; p6 addsd xmm0,xmm6 ; x10+q8 mulsd xmm8,xmm4 ; q4 mulsd xmm4,qword ptr acos_p_2 ; p4 addsd xmm0,xmm7 ; x10+q8+q6 addsd xmm3,xmm5 ; p8+p6 mulsd xmm9,xmm2 ; q2 mulsd xmm10,xmm2 ; p2 addsd xmm0,xmm8 ; x10+q8+q6+q4 addsd xmm3,xmm4 ; p8+p6+p4 movlpd xmm11,qword ptr real_21_bits addsd xmm0,xmm9 ; x10+q8+q6+q4+q2 addsd xmm3,xmm10 ; p8+p6+p4+p2 andpd xmm11,xmm1 ; x21 addsd xmm0,qword ptr acos_q_0 ; x10+q8+q6+q4+q2+q0 addsd xmm3,qword ptr acos_p_0 ; p8+p6+p4+p2+p0 mulsd xmm2,xmm1 ; x3 divsd xmm3,xmm0 ; p/q ; ucomisd xmm1,qword ptr real_0_54 ; ja acos_real_1 movsd xmm0,qword ptr real_pi_d_2 ; pi_d_2 subsd xmm1,xmm11 ; x21_l subsd xmm0,xmm11 ; pi_d_2-x21 mulsd xmm2,xmm3 ; x3*(p/q) addsd xmm2,qword ptr real_m_pi_d_2_l ; x3*(p/q)-pi_d_2_l addsd xmm1,xmm2 ; x21_l+x3*(p/q)-pi_d_2_l subsd xmm0,xmm1 ; pi_d_2-x21-x21_l-x3*(p/q)+pi_d_2_l ret ;acos_real_1: ; movlpd xmm0,qword ptr real_pi_d_2_m_0_03125 ; subsd xmm1,xmm11 ; x21_l ; subsd xmm0,xmm11 ; pi_d_2-0.03125-x21 ; mulsd xmm2,xmm3 ; x3*(p/q) ; addsd xmm1,qword ptr real_m_pi_d_2_l ; x21_l-pi_d_2_l ; subsd xmm2,qword ptr real_0_03125 ; x3*(p/q)-0.03125 ; addsd xmm1,xmm2 ; x21_l+x3*(p/q)-0.03125-pi_d_2_l ; subsd xmm0,xmm1 ; pi_d_2-x21-x21_l-x3*(p/q)+pi_d_2_l ; ret acos_real_2: ucomisd xmm0,qword ptr real_0_75 jb acos_real_0_65 movlpd xmm1,qword ptr real_1_0 ucomisd xmm0,xmm1 subsd xmm1,xmm0 jae acos_real_1_or_e movlpd xmm11,qword ptr real_2_0 movsd xmm0,xmm1 ; x mulsd xmm1,xmm1 ; x2 mulsd xmm11,xmm0 ; 2x movlpd xmm7,qword ptr acos2_q_3 movsd xmm2,xmm1 ; x2 mulsd xmm1,xmm1 ; x4 sqrtsd xmm12,xmm11 ; sqrt 2x movlpd xmm5,qword ptr acos2_p_3 movlpd xmm8,qword ptr acos2_q_2 movsd xmm4,xmm1 ; x4 movlpd xmm9,qword ptr acos2_q_1 movlpd xmm10,qword ptr acos2_p_1 movsd xmm3,xmm2 ; x2 mulsd xmm3,xmm0 ; x3 mulsd xmm1,qword ptr acos2_p_4 ; p4 mulsd xmm7,xmm3 ; q3 mulsd xmm5,xmm3 ; p3 mulsd xmm8,xmm2 ; q2 mulsd xmm2,qword ptr acos2_p_2 ; p2 addsd xmm4,xmm7 ; x4+q3 addsd xmm1,xmm5 ; p4+p3 mulsd xmm9,xmm0 ; q1 mulsd xmm10,xmm0 ; p1 addsd xmm4,xmm8 ; x4+q3+q2 addsd xmm1,xmm2 ; p4+p3+p2 addsd xmm4,xmm9 ; x4+q3+q2+q1 addsd xmm1,xmm10 ; p4+p3+p2+p1 movlpd xmm13,qword ptr real_21_bits addsd xmm4,qword ptr acos2_q_0 ; x4+q3+q2+q1+q0 addsd xmm1,qword ptr acos2_p_0 ; p4+p3+p2+p1+p0 andpd xmm13,xmm12 ; s21 divsd xmm1,xmm4 ; p/q movsd xmm14,xmm13 ; s21 movsd xmm15,xmm12 ; s addsd xmm12,xmm13 ; s+s21 mulsd xmm13,xmm13 ; s21*s21 subsd xmm11,xmm13 ; 2x-s21*s21 divsd xmm11,xmm12 ; sl mulsd xmm0,xmm1 ; x*p/q mulsd xmm0,xmm15 ; s addsd xmm0,xmm11 ; s*x*p/q+sl addsd xmm0,xmm14 ; s*x*p/q+sl+s21 ret acos_real_0_65: movlpd xmm1,qword ptr real_0_65000000004061742054 ucomisd xmm0,xmm1 subsd xmm0,xmm1 lea rcx,acos_p1_c lea rdx,acos_p2_c cmovb rcx,rdx jmp asin_real_pm_0_54 acos_real_3: movlpd xmm1,qword ptr real_m_1_0 ucomisd xmm0,xmm1 subsd xmm0,xmm1 jbe acos_real_m_1_or_e movlpd xmm11,qword ptr real_2_0 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 mulsd xmm11,xmm1 ; 2x movlpd xmm7,qword ptr acos2_q_3 movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 sqrtsd xmm12,xmm11 ; sqrt 2x movlpd xmm5,qword ptr acos2_p_3 movlpd xmm8,qword ptr acos2_q_2 movsd xmm4,xmm0 ; x4 movlpd xmm9,qword ptr acos2_q_1 movlpd xmm10,qword ptr acos2_p_1 movsd xmm3,xmm2 ; x2 mulsd xmm3,xmm1 ; x3 mulsd xmm0,qword ptr acos2_p_4 ; p4 mulsd xmm7,xmm3 ; q3 mulsd xmm5,xmm3 ; p3 mulsd xmm8,xmm2 ; q2 mulsd xmm2,qword ptr acos2_p_2 ; p2 addsd xmm4,xmm7 ; x4+q3 addsd xmm0,xmm5 ; p4+p3 mulsd xmm9,xmm1 ; q1 mulsd xmm10,xmm1 ; p1 addsd xmm4,xmm8 ; x4+q3+q2 addsd xmm0,xmm2 ; p4+p3+p2 addsd xmm4,xmm9 ; x4+q3+q2+q1 addsd xmm0,xmm10 ; p4+p3+p2+p1 movlpd xmm13,qword ptr real_21_bits addsd xmm4,qword ptr acos2_q_0 ; x4+q3+q2+q1+q0 addsd xmm0,qword ptr acos2_p_0 ; p4+p3+p2+p1+p0 andpd xmm13,xmm12 ; s21 divsd xmm0,xmm4 ; p/q movsd xmm14,xmm13 ; s21 movsd xmm15,xmm12 ; s addsd xmm12,xmm13 ; s+s21 mulsd xmm13,xmm13 ; s21*s21 subsd xmm11,xmm13 ; 2x-s21*s21 divsd xmm11,xmm12 ; sl mulsd xmm1,xmm0 ; x*p/q mulsd xmm1,xmm15 ; s movlpd xmm0,qword ptr real_pi subsd xmm11,qword ptr real_pi_l ; sl-pi_l addsd xmm1,xmm11 ; s*x*p/q+sl-pi_l subsd xmm0,xmm14 ; pi-s21 subsd xmm0,xmm1 ; pi-s21-(s*x*p/q+sl) ; addsd xmm1,xmm14 ; s*x*p/q+sl+s21-pi_l ; subsd xmm0,xmm1 ; pi-(s*x*p/q+sl+s21) ret acos_real_1_or_e: jne acos_real_e movlpd xmm0,qword ptr real_0_0 ret acos_real_m_1_or_e: jb acos_real_e ; NAN movlpd xmm0,qword ptr real_pi ret acos_real_e: subsd xmm0,xmm0 divsd xmm0,xmm0 ret _T004 ends _T005 segment para 'CODE' public atan_real atan_real: ucomisd xmm0,qword ptr real_m_0_26 movsd xmm1,xmm0 ; x jb atan_real_n ; x<-0.26 | NAN ucomisd xmm0,qword ptr real_1_0 ja atan_real_g1 ; x>1.0 ucomisd xmm0,qword ptr real_0_70 ja atan_real_2 ucomisd xmm0,qword ptr real_0_26 ja atan_real_1 ucomisd xmm0,qword ptr real_0_0 je atan_real_0_0 ; atan -0.0 = -0.0 mulsd xmm0,xmm0 ; x2 movlpd xmm5,qword ptr atan_p_9_1 movsd xmm6,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movsd xmm14,xmm6 ; x2 mulsd xmm5,xmm6 ; p2 mulsd xmm6,xmm0 ; x6 movlpd xmm9,qword ptr atan_p_9_2 movsd xmm10,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 mulsd xmm9,xmm10 ; p4 movlpd xmm7,qword ptr atan_p_9_3 movlpd xmm12,qword ptr atan_p_9_4 mulsd xmm10,xmm6 ; x10 movsd xmm2,xmm6 ; x6 mulsd xmm7,xmm6 ; p6 mulsd xmm6,xmm6 ; x12 mulsd xmm2,xmm0 ; x14 mulsd xmm12,xmm0 ; p8 mulsd xmm0,xmm0 ; x16 mulsd xmm10,qword ptr atan_p_9_5 ; p10 mulsd xmm6,qword ptr atan_p_9_6 ; p12 mulsd xmm2,qword ptr atan_p_9_7 ; p14 mulsd xmm0,qword ptr atan_p_9_8 ; p16 addsd xmm0,xmm2 ; p16+p14 addsd xmm0,xmm6 ; p16+p14+p12 addsd xmm0,xmm10 ; p16+p14+p12+p10 addsd xmm0,xmm12 ; p16+p14+p12+p10+p8 addsd xmm0,xmm7 ; p16+p14+p12+p10+p8+p6 mulsd xmm14,xmm1 ; x3 addsd xmm0,xmm9 ; p16+p14+p12+p10+p8+p6+p4 addsd xmm0,xmm5 ; p16+p14+p12+p10+p8+p6+p4+p2 addsd xmm0,qword ptr atan_p_9_0 ; p16+p14+p12+p10+p8+p6+p4+p2+p0 mulsd xmm0,xmm14 ; x3*p addsd xmm0,xmm1 ; x+x3*p atan_real_0_0: ret atan_real_n: ucomisd xmm0,qword ptr real_m_1_0 jb atan_real_l_m1 ; x<-1.0 | NAN ucomisd xmm0,qword ptr real_m_0_70 jb atan_real_2n movlpd xmm2,qword ptr real_m_2_0 movlpd xmm3,qword ptr real_m_0_5 lea rdx,n_atan_0_5_52 jmp atan_real_1pn atan_real_1: movlpd xmm2,qword ptr real_2_0 movlpd xmm3,qword ptr real_0_5 lea rdx,atan_0_5_52 atan_real_1pn: addsd xmm0,xmm2 ; -2+x subsd xmm3,xmm1 ; -0.5-x divsd xmm2,xmm0 ; 2/(2+x) = 1/(1+0.5x) movlpd xmm15,qword ptr real_26_bits movsd xmm0,xmm3 ; 0.5-x lea rcx,atan_n_0_5_8_c movsd xmm11,xmm3 ; (0.5-x) andpd xmm15,xmm3 ; (0.5-x)_h subsd xmm11,xmm15 ; (0.5-x)_l mulsd xmm0,xmm2 ; y=(0.5-x)*(1/(1+0.5x)) movsd xmm4,xmm0 ; y mulsd xmm0,xmm0 ; y2 movlpd xmm5,qword ptr (atan_n_0_5_8_1-atan_n_0_5_8_c)[rcx] movsd xmm6,xmm0 ; y2 mulsd xmm0,xmm0 ; y4 movsd xmm14,xmm6 ; y2 mulsd xmm5,xmm6 ; p2 movlpd xmm8,qword ptr real_27_bits mulsd xmm6,xmm0 ; y6 movlpd xmm9,qword ptr (atan_n_0_5_8_2-atan_n_0_5_8_c)[rcx] movsd xmm10,xmm0 ; y4 mulsd xmm0,xmm0 ; y8 mulsd xmm9,xmm10 ; p4 movlpd xmm12,qword ptr (atan_n_0_5_8_4-atan_n_0_5_8_c)[rcx] mulsd xmm10,xmm6 ; y10 movsd xmm7,xmm6 ; x6 mulsd xmm6,xmm6 ; x12 mulsd xmm12,xmm0 ; p8 mulsd xmm0,xmm7 ; x14 andpd xmm8,xmm4 ; y_h mulsd xmm7,qword ptr (atan_n_0_5_8_3-atan_n_0_5_8_c)[rcx] ; p6 mulsd xmm10,qword ptr (atan_n_0_5_8_5-atan_n_0_5_8_c)[rcx] ; p10 mulsd xmm6,qword ptr (atan_n_0_5_8_6-atan_n_0_5_8_c)[rcx] ; p12 mulsd xmm0,qword ptr (atan_n_0_5_8_7-atan_n_0_5_8_c)[rcx] ; p14 movlpd xmm13,qword ptr real_0_25 movlpd xmm1,qword ptr (atan_0_5_real_0_5-atan_0_5_52)[rdx] mulsd xmm13,xmm8 ; 0.25*y_h mulsd xmm1,xmm8 ; 0.5*y_h subsd xmm3,xmm8 ; (0.5-x)-y_h addsd xmm0,xmm6 ; p14+p12 subsd xmm3,xmm13 ; (0.5-x)-1.25*y_h mulsd xmm15,xmm1 ; (0.5-x)_h*0.5*y_h mulsd xmm11,xmm1 ; (0.5-x)_l*0.5*y_h addsd xmm0,xmm10 ; p14+p12+p10 addsd xmm3,xmm15 ; (0.5-x)-1.25*y_h+(0.5-x)_h*0.5*y_h addsd xmm0,xmm12 ; p14+p12+p10+p8 addsd xmm3,xmm11 ; (0.5-x)-1.25*y_h+(0.5-x)_h*0.5*y_h+(0.5-x)_l*0.5*y_h addsd xmm0,xmm7 ; p14+p12+p10+p8+p6 mulsd xmm14,xmm4 ; y3 mulsd xmm3,xmm2 ; c=((0.5-x)-1.25*y_h-(0.5-x)_h*0.5*y_h-(0.5-x)_l*0.5*y_h)*(1/(1+0.5x)) addsd xmm0,xmm9 ; p14+p12+p10+p8+p6+p4 movsd xmm11,xmm8 ; y_h addsd xmm8,xmm3 ; y_h+c addsd xmm0,xmm5 ; p14+p12+p10+p8+p6+p4+p2 movlpd xmm7,qword ptr real_40_bits movlpd xmm12,qword ptr real_abs_40_bits andpd xmm7,xmm8 ; (y_h+c)_h andpd xmm12,xmm8 addsd xmm0,qword ptr (atan_n_0_5_8_0-atan_n_0_5_8_c)[rcx] ; p14+p12+p10+p8+p6+p4+p2+p0 subsd xmm11,xmm7 ; y_h-(y_h+c)_h addsd xmm3,xmm11 ; (y_h-(y_h+c)_h)+c mulsd xmm0,xmm14 ; y3*p/q movlpd xmm2,qword ptr (atan_0_5_52_l-atan_0_5_52)[rdx] subsd xmm2,xmm0 ; atan_0_5_52_l-y3*p/q movlpd xmm0,qword ptr (atan_0_5_52-atan_0_5_52)[rdx] ucomisd xmm12,qword ptr real_2_p_m_13 jb atan_real_1_s subsd xmm0,xmm7 ; atan_0_5_52-(y_h+c)_h subsd xmm2,xmm3 ; atan_0_5_52_l-y3*p/q-(y_h+c)_l addsd xmm0,xmm2 ; atan 0_5-y3*p/q-(0.5-x)/(1+x) ret atan_real_1_s: subsd xmm2,xmm3 ; atan_0_5_52_l-y3*p/q-(y_h+c)_l subsd xmm2,xmm7 ; atan_0_5_52_l-y3*p/q-(y_h+c)_l-(y_h+c)_h addsd xmm0,xmm2 ; atan 0_5-y3*p/q-(1-x)/(1+x) ret atan_real_2n: lea rcx,atan_n_8_c atan_real_2n_: movlpd xmm2,qword ptr real_m_1_0 movlpd xmm3,qword ptr real_m_1_0 addsd xmm0,xmm2 ; 1+x subsd xmm3,xmm1 ; 1-x lea rdx,n_atan_1_53 divsd xmm2,xmm0 ; 1/(1+x) movlpd xmm15,qword ptr real_26_bits movsd xmm0,xmm3 ; 1-x movsd xmm11,xmm3 ; (1-x) andpd xmm15,xmm3 ; (1-x)_h subsd xmm11,xmm15 ; (1-x)_l mulsd xmm0,xmm2 ; y=(1-x)*(1/(1+x)) movsd xmm4,xmm0 ; y mulsd xmm0,xmm0 ; y2 movlpd xmm5,qword ptr (atan_n_8_1-atan_n_8_c)[rcx] movsd xmm6,xmm0 ; y2 mulsd xmm0,xmm0 ; y4 movsd xmm14,xmm6 ; y2 mulsd xmm5,xmm6 ; p2 movlpd xmm8,qword ptr real_27_bits mulsd xmm6,xmm0 ; y6 movlpd xmm9,qword ptr (atan_n_8_2-atan_n_8_c)[rcx] movsd xmm10,xmm0 ; y4 mulsd xmm0,xmm0 ; y8 mulsd xmm9,xmm10 ; p4 movlpd xmm12,qword ptr (atan_n_8_4-atan_n_8_c)[rcx] mulsd xmm10,xmm6 ; y10 movsd xmm7,xmm6 ; x6 mulsd xmm6,xmm6 ; x12 mulsd xmm12,xmm0 ; p8 mulsd xmm0,xmm7 ; x14 andpd xmm8,xmm4 ; y_h mulsd xmm7,qword ptr (atan_n_8_3-atan_n_8_c)[rcx] ; p6 mulsd xmm10,qword ptr (atan_n_8_5-atan_n_8_c)[rcx] ; p10 mulsd xmm6,qword ptr (atan_n_8_6-atan_n_8_c)[rcx] ; p12 mulsd xmm0,qword ptr (atan_n_8_7-atan_n_8_c)[rcx] ; p14 movlpd xmm13,qword ptr real_2_0 mulsd xmm13,xmm8 ; 2*y_h mulsd xmm15,xmm8 ; (1-x)_h*y_h addsd xmm0,xmm6 ; p14+p12 subsd xmm3,xmm13 ; (1-x)-2*y_h mulsd xmm11,xmm8 ; (1-x)_l*y_h addsd xmm0,xmm10 ; p14+p12+p10 subsd xmm3,xmm15 ; (1-x)-2*y_h-(1-x)_h*y_h addsd xmm0,xmm12 ; p14+p12+p10+p8 subsd xmm3,xmm11 ; (1-x)-2*y_h-(1-x)_h*y_h-(1-x)_h*y_l jmp atan_real_2pn_ atan_real_2: lea rcx,atan_n_8_c atan_real_2p_: movlpd xmm2,qword ptr real_1_0 movlpd xmm3,qword ptr real_1_0 addsd xmm0,xmm2 ; 1+x subsd xmm3,xmm1 ; 1-x lea rdx,atan_1_53 divsd xmm2,xmm0 ; 1/(1+x) movlpd xmm15,qword ptr real_26_bits movsd xmm0,xmm3 ; 1-x movsd xmm11,xmm3 ; (1-x) andpd xmm15,xmm3 ; (1-x)_h subsd xmm11,xmm15 ; (1-x)_l mulsd xmm0,xmm2 ; y=(1-x)*(1/(1+x)) movsd xmm4,xmm0 ; y mulsd xmm0,xmm0 ; y2 movlpd xmm5,qword ptr (atan_n_8_1-atan_n_8_c)[rcx] movsd xmm6,xmm0 ; y2 mulsd xmm0,xmm0 ; y4 movsd xmm14,xmm6 ; y2 mulsd xmm5,xmm6 ; p2 movlpd xmm8,qword ptr real_27_bits mulsd xmm6,xmm0 ; y6 movlpd xmm9,qword ptr (atan_n_8_2-atan_n_8_c)[rcx] movsd xmm10,xmm0 ; y4 mulsd xmm0,xmm0 ; y8 mulsd xmm9,xmm10 ; p4 movlpd xmm12,qword ptr (atan_n_8_4-atan_n_8_c)[rcx] mulsd xmm10,xmm6 ; y10 movsd xmm7,xmm6 ; x6 mulsd xmm6,xmm6 ; x12 mulsd xmm12,xmm0 ; p8 mulsd xmm0,xmm7 ; x14 andpd xmm8,xmm4 ; y_h mulsd xmm7,qword ptr (atan_n_8_3-atan_n_8_c)[rcx] ; p6 mulsd xmm10,qword ptr (atan_n_8_5-atan_n_8_c)[rcx] ; p10 mulsd xmm6,qword ptr (atan_n_8_6-atan_n_8_c)[rcx] ; p12 mulsd xmm0,qword ptr (atan_n_8_7-atan_n_8_c)[rcx] ; p14 movlpd xmm13,qword ptr real_2_0 mulsd xmm13,xmm8 ; 2*y_h mulsd xmm15,xmm8 ; (1-x)_h*y_h addsd xmm0,xmm6 ; p14+p12 subsd xmm3,xmm13 ; (1-x)-2*y_h mulsd xmm11,xmm8 ; (1-x)_l*y_h addsd xmm0,xmm10 ; p14+p12+p10 addsd xmm3,xmm15 ; (1-x)-2*y_h+(1-x)_h*y_h addsd xmm0,xmm12 ; p14+p12+p10+p8 addsd xmm3,xmm11 ; (1-x)-2*y_h+(1-x)_h*y_h+(1-x)_h*y_l atan_real_2pn_: addsd xmm0,xmm7 ; p14+p12+p10+p8+p6 mulsd xmm14,xmm4 ; y3 mulsd xmm3,xmm2 ; c=((1-x)-2*y_h-(1-x)_h*y_h-(1-x)_h*y_l)*(1/(1+x)) addsd xmm0,xmm9 ; p14+p12+p10+p8+p6+p4 movsd xmm11,xmm8 ; y_h addsd xmm8,xmm3 ; y_h+c addsd xmm0,xmm5 ; p14+p12+p10+p8+p6+p4+p2 movlpd xmm7,qword ptr (atan_n_8_real_40_bits-atan_n_8_c)[rcx] movlpd xmm12,qword ptr (atan_n_8_real_abs_40_bits-atan_n_8_c)[rcx] andpd xmm7,xmm8 ; (y_h+c)_h andpd xmm12,xmm8 addsd xmm0,qword ptr (atan_n_8_0-atan_n_8_c)[rcx] ; p14+p12+p10+p8+p6+p4+p2+p0 subsd xmm11,xmm7 ; y_h-(y_h+c)_h addsd xmm3,xmm11 ; (y_h-(y_h+c)_h)+c mulsd xmm0,xmm14 ; y3*p/q movlpd xmm2,qword ptr (atan_1_53_l-atan_1_53)[rdx] subsd xmm2,xmm0 ; pi_d_4_l-y3*p/q movlpd xmm0,qword ptr (atan_1_53-atan_1_53)[rdx] ucomisd xmm12,qword ptr (atan_n_8_real_2_p_m_12-atan_n_8_c)[rcx] jb atan_real_2_s subsd xmm0,xmm7 ; pi_d_4-(y_h+c)_h subsd xmm2,xmm3 ; pi_d_4_l-y3*p/q-(y_h+c)_l addsd xmm0,xmm2 ; pi/4-y3*p/q-(1-x)/(1+x) ret atan_real_2_s: subsd xmm2,xmm3 ; pi_d_4_l-y3*p/q-(y_h+c)_l subsd xmm2,xmm7 ; pi_d_4_l-y3*p/q-(y_h+c)_l-(y_h+c)_h addsd xmm0,xmm2 ; pi/4-y3*p/q-(1-x)/(1+x) ret atan_real_l_m1: ucomisd xmm0,qword ptr real_m_4_0 jb atan_real_4n ; x<4.0 | NAN ucomisd xmm0,qword ptr real_m_1_4 jb atan_real_3n lea rcx,atan_p_8_c jmp atan_real_2n_ atan_real_g1: ucomisd xmm0,qword ptr real_4_0 ja atan_real_4 ; x>4.0 ucomisd xmm0,qword ptr real_1_4 ja atan_real_3 lea rcx,atan_p_8_c jmp atan_real_2p_ atan_real_3n: movlpd xmm2,qword ptr real_m_0_5 movlpd xmm3,qword ptr real_m_2_0 lea rdx,n_atan_2_0 jmp atan_real_3pn atan_real_3: movlpd xmm2,qword ptr real_0_5 movlpd xmm3,qword ptr real_2_0 lea rdx,atan_2_0 atan_real_3pn: addsd xmm0,xmm2 ; 0.5+x subsd xmm3,xmm1 ; 2-x divsd xmm2,xmm0 ; 0.5/(0.5+x) = 1/(1+2*x) movlpd xmm15,qword ptr real_26_bits movsd xmm0,xmm3 ; 2-x movsd xmm11,xmm3 ; (2-x) andpd xmm15,xmm3 ; (2-x)_h lea rcx,atan_n_2_8_c subsd xmm11,xmm15 ; (2-x)_l mulsd xmm0,xmm2 ; y=(2-x)*(1/(1+0.5x)) movsd xmm4,xmm0 ; y mulsd xmm0,xmm0 ; y2 movlpd xmm5,qword ptr (atan_n_2_8_1-atan_n_2_8_c)[rcx] movsd xmm6,xmm0 ; y2 mulsd xmm0,xmm0 ; y4 movsd xmm14,xmm6 ; y2 mulsd xmm5,xmm6 ; p2 movlpd xmm8,qword ptr real_27_bits mulsd xmm6,xmm0 ; y6 movlpd xmm9,qword ptr (atan_n_2_8_2-atan_n_2_8_c)[rcx] movsd xmm10,xmm0 ; y4 mulsd xmm0,xmm0 ; y8 mulsd xmm9,xmm10 ; p4 movlpd xmm12,qword ptr (atan_n_2_8_4-atan_n_2_8_c)[rcx] mulsd xmm10,xmm6 ; y10 movsd xmm7,xmm6 ; x6 mulsd xmm6,xmm6 ; x12 mulsd xmm12,xmm0 ; p8 mulsd xmm0,xmm7 ; x14 andpd xmm8,xmm4 ; y_h mulsd xmm7,qword ptr (atan_n_2_8_3-atan_n_2_8_c)[rcx] ; p6 mulsd xmm10,qword ptr (atan_n_2_8_5-atan_n_2_8_c)[rcx] ; p10 mulsd xmm6,qword ptr (atan_n_2_8_6-atan_n_2_8_c)[rcx] ; p12 mulsd xmm0,qword ptr (atan_n_2_8_7-atan_n_2_8_c)[rcx] ; p14 movlpd xmm13,qword ptr real_4_0 movlpd xmm1,qword ptr (atan_2_0_real_2_0-atan_2_0)[rdx] mulsd xmm13,xmm8 ; 4*y_h mulsd xmm1,xmm8 ; 2*y_h addsd xmm0,xmm6 ; p14+p12 subsd xmm3,xmm13 ; (2-x)-4*y_h mulsd xmm15,xmm1 ; (2-x)_h*2*y_h mulsd xmm11,xmm1 ; (2-x)_l*2*y_h subsd xmm3,xmm8 ; (2-x)-y_h addsd xmm0,xmm10 ; p14+p12+p10 addsd xmm3,xmm15 ; (2-x)-5*y_h+(2-x)_h*2*y_h addsd xmm0,xmm12 ; p14+p12+p10+p8 addsd xmm3,xmm11 ; (2-x)-5*y_h+(2-x)_h*2*y_h+(2-x)_l*2*y_h addsd xmm0,xmm7 ; p14+p12+p10+p8+p6 mulsd xmm14,xmm4 ; y3 mulsd xmm3,xmm2 ; c=((2-x)-5*y_h-(2-x)_h*2*y_h-(2-x)_l*2*y_h)*(1/(1+0.5x)) addsd xmm0,xmm9 ; p14+p12+p10+p8+p6+p4 movsd xmm11,xmm8 ; y_h addsd xmm8,xmm3 ; y_h+c addsd xmm0,xmm5 ; p14+p12+p10+p8+p6+p4+p2 movlpd xmm7,qword ptr real_39_bits movlpd xmm12,qword ptr real_abs_39_bits andpd xmm7,xmm8 andpd xmm12,xmm8 ; (y_h+c)_h addsd xmm0,qword ptr (atan_n_2_8_0-atan_n_2_8_c)[rcx] ; p14+p12+p10+p8+p6+p4+p2+p0 subsd xmm11,xmm7 ; y_h-(y_h+c)_h addsd xmm3,xmm11 ; (y_h-(y_h+c)_h)+c mulsd xmm0,xmm14 ; y3*p/q movlpd xmm2,qword ptr (atan_2_0_l-atan_2_0)[rdx] subsd xmm2,xmm0 ; atan_2_0_l-y3*p/q movlpd xmm0,qword ptr (atan_2_0-atan_2_0)[rdx] ucomisd xmm12,qword ptr real_2_p_m_11 jb atan_real_3_s subsd xmm0,xmm7 ; atan_2_0-(y_h+c)_h subsd xmm2,xmm3 ; atan_2_0_l-y3*p/q-(y_h+c)_l addsd xmm0,xmm2 ; atan 2_0-y3*p/q-(2-x)/(1+x) ret atan_real_3_s: subsd xmm2,xmm3 ; atan_2_0_l-y3*p/q-(y_h+c)_l subsd xmm2,xmm7 ; atan_2_0_l-y3*p/q-(y_h+c)_l-(y_h+c)_h addsd xmm0,xmm2 ; atan 2_0-y3*p/q-(1-x)/(1+x) ret atan_real_4n: ucomisd xmm0,qword ptr real_atan_m_large jb atan_real_m_large_or_nan ; x<-5805358775541310.0840 | NAN movlpd xmm2,qword ptr real_1_0 mulsd xmm0,xmm0 ; x2 lea rdx,real_m_pi_d_2 jmp atan_real_4pn atan_real_4: ucomisd xmm0,qword ptr real_atan_large ja atan_real_large ; x>5805358775541310.0840 movlpd xmm2,qword ptr real_1_0 mulsd xmm0,xmm0 ; x2 lea rdx,real_pi_d_2 atan_real_4pn: divsd xmm2,xmm1 ; 1/x lea rcx,atan4_p_c movlpd xmm4,qword ptr (atan4_q_4-atan4_p_c)[rcx] movlpd xmm3,qword ptr (atan4_p_3-atan4_p_c)[rcx] movsd xmm5,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm4,xmm5 ; q2 mulsd xmm3,xmm5 ; p2 movlpd xmm9,qword ptr (atan4_q_3-atan4_p_c)[rcx] movlpd xmm8,qword ptr (atan4_p_2-atan4_p_c)[rcx] movsd xmm6,xmm0 ; x4 mulsd xmm0,xmm5 ; x6 mulsd xmm9,xmm6 ; q4 mulsd xmm8,xmm6 ; p4 movlpd xmm11,qword ptr (atan4_q_2-atan4_p_c)[rcx] movlpd xmm10,qword ptr (atan4_p_1-atan4_p_c)[rcx] addsd xmm4,qword ptr real_1_0 ; 1+q2 addsd xmm3,qword ptr (atan4_p_4-atan4_p_c)[rcx] ; p0+p2 movsd xmm7,xmm6 ; x4 mulsd xmm6,xmm6 ; x8 mulsd xmm11,xmm0 ; q6 mulsd xmm10,xmm0 ; p6 addsd xmm4,xmm9 ; 1+q2+q4 addsd xmm3,xmm8 ; p0+p2+p4 mulsd xmm0,xmm7 ; x10 movlpd xmm9,qword ptr (atan4_q_1-atan4_p_c)[rcx] movlpd xmm8,qword ptr (atan4_p_0-atan4_p_c)[rcx] addsd xmm4,xmm11 ; 1+q2+q4+q6 addsd xmm3,xmm10 ; p0+p2+p4+p6 mulsd xmm9,xmm6 ; q8 mulsd xmm8,xmm6 ; p8 mulsd xmm0,qword ptr (atan4_q_0-atan4_p_c)[rcx]; q10 movlpd xmm5,qword ptr real_26_bits movsd xmm6,xmm1 ; x movlpd xmm7,qword ptr real_26_bits andpd xmm5,xmm1 ; x_h subsd xmm6,xmm5 ; x_l andpd xmm7,xmm2 ; (1/x)_h addsd xmm4,xmm9 ; 1+q2+q4+q6+q8 addsd xmm3,xmm8 ; p0+p2+p4+p6+p8 movlpd xmm8,qword ptr real_1_0 mulsd xmm5,xmm7 ; x_h*(1/x)_h mulsd xmm6,xmm7 ; x_l*(1/x)_h addsd xmm4,xmm0 ; 1+q2+q4+q6+q8+q10 subsd xmm8,xmm5 ; 1-x_h*(1/x)_h subsd xmm8,xmm6 ; 1-x_h*(1/x)_h-x_l*(1/x)_h mulsd xmm8,xmm2 ; (1-x_h*(1/x)_h-x_l*(1/x)_h)*(1/x) divsd xmm3,xmm4 ; p/q movlpd xmm1,qword ptr (real_pi_d_2_l-real_pi_d_2)[rdx] movlpd xmm0,qword ptr (real_pi_d_2-real_pi_d_2)[rdx] mulsd xmm3,xmm2 ; (p/q)*(1/x) subsd xmm1,xmm3 ; pi_d_2_l-(p/q)*(1/x) subsd xmm0,xmm7 ; pi_d_2-(1/x)_h subsd xmm1,xmm8 ; pi_d_2_l-(p/q)*(1/x)-(1/x)_l addsd xmm0,xmm1 ret atan_real_4poly: movlpd xmm3,qword ptr real_1_0 divsd xmm3,xmm0 ; 1/x movlpd xmm5,qword ptr real_26_bits movsd xmm6,xmm0 ; x movlpd xmm7,qword ptr real_26_bits andpd xmm5,xmm0 ; x_h subsd xmm6,xmm5 ; x_l movsd xmm15,xmm3 ; x mulsd xmm3,xmm3 ; x2 movlpd xmm1,qword ptr atan_p_9_1 movsd xmm11,xmm3 ; x2 mulsd xmm3,xmm3 ; x4 movsd xmm14,xmm11 ; x2 mulsd xmm1,xmm11 ; p2 mulsd xmm11,xmm3 ; x6 movlpd xmm9,qword ptr atan_p_9_2 movsd xmm10,xmm3 ; x4 mulsd xmm3,xmm3 ; x8 mulsd xmm9,xmm10 ; p4 movlpd xmm4,qword ptr atan_p_9_3 movlpd xmm12,qword ptr atan_p_9_4 mulsd xmm10,xmm11 ; x10 movsd xmm2,xmm11 ; x6 mulsd xmm4,xmm11 ; p6 mulsd xmm11,xmm11 ; x12 mulsd xmm2,xmm3 ; x14 mulsd xmm12,xmm3 ; p8 mulsd xmm3,xmm3 ; x16 mulsd xmm10,qword ptr atan_p_9_5 ; p10 mulsd xmm11,qword ptr atan_p_9_6 ; p12 mulsd xmm2,qword ptr atan_p_9_7 ; p14 mulsd xmm3,qword ptr atan_p_9_8 ; p16 addsd xmm3,xmm2 ; p16+p14 addsd xmm3,xmm11 ; p16+p14+p12 addsd xmm3,xmm10 ; p16+p14+p12+p10 andpd xmm7,xmm15 ; (1/x)_h addsd xmm3,xmm12 ; p16+p14+p12+p10+p8 movlpd xmm8,qword ptr real_1_0 mulsd xmm5,xmm7 ; x_h*(1/x)_h mulsd xmm6,xmm7 ; x_l*(1/x)_h addsd xmm3,xmm4 ; p16+p14+p12+p10+p8+p6 mulsd xmm14,xmm15 ; x3 subsd xmm8,xmm5 ; 1-x_h*(1/x)_h addsd xmm3,xmm9 ; p16+p14+p12+p10+p8+p6+p4 subsd xmm8,xmm6 ; 1-x_h*(1/x)_h-x_l*(1/x)_h addsd xmm3,xmm1 ; p16+p14+p12+p10+p8+p6+p4+p2 mulsd xmm8,xmm15 ; (1-x_h*(1/x)_h-x_l*(1/x)_h)*(1/x) addsd xmm3,qword ptr atan_p_9_0 ; p16+p14+p12+p10+p8+p6+p4+p2+p0 movlpd xmm1,qword ptr real_pi_d_2_l movlpd xmm0,qword ptr real_pi_d_2 mulsd xmm3,xmm14 ; x3*p subsd xmm1,xmm3 ; pi_d_2_l-(p/q)*(1/x) subsd xmm0,xmm7 ; pi_d_2-(1/x)_h subsd xmm1,xmm8 ; pi_d_2_l-(p/q)*(1/x)-(1/x)_l addsd xmm0,xmm1 ret atan_real_m_large_or_nan: jp atan_real_nan movlpd xmm0,qword ptr real_m_pi_d_2 ret atan_real_nan: addsd xmm0,xmm0 ret atan_real_large: movlpd xmm0,qword ptr real_pi_d_2 ret _T005 ends _T006 segment para 'CODE' public exp_real exp_real: ucomisd xmm0,qword ptr real_ln_2_t_0_5 ja exp_real_2 ; x>0.3.4657359027997265471 ucomisd xmm0,qword ptr real_n_ln_2_t_0_5 jb exp_real_3_n ; x<-0.34657359027997265471 | nan movlpd xmm1,qword ptr n_45_d_256 movlpd xmm2,qword ptr n_m_45_d_256 ucomisd xmm0,xmm1 ja exp_real_p1 ucomisd xmm0,xmm2 jb exp_real_n1 ucomisd xmm0,qword ptr real_0_0 lea rcx,exp_p0_c lea rdx,exp_m0_c movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 cmovb rcx,rdx movlpd xmm6,qword ptr (exp_p0_2-exp_p0_c)[rcx] movlpd xmm7,qword ptr (exp_p0_4-exp_p0_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm6,xmm2 ; p2 movsd xmm3,xmm1 ; x mulsd xmm1,xmm2 ; x3 movlpd xmm8,qword ptr (exp_p0_3-exp_p0_c)[rcx] mulsd xmm7,xmm0 ; p4 mulsd xmm8,xmm1 ; p3 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movsd xmm5,xmm2 ; x2 mulsd xmm2,xmm1 ; x5 mulsd xmm5,xmm4 ; x6 mulsd xmm1,xmm4 ; x7 mulsd xmm4,xmm2 ; x9 mulsd xmm0,qword ptr (exp_p0_8-exp_p0_c)[rcx] ; p8 mulsd xmm2,qword ptr (exp_p0_5-exp_p0_c)[rcx] ; p5 mulsd xmm5,qword ptr (exp_p0_6-exp_p0_c)[rcx] ; p6 mulsd xmm1,qword ptr (exp_p0_7-exp_p0_c)[rcx] ; p7 mulsd xmm4,qword ptr (exp_p0_9-exp_p0_c)[rcx] ; p9 addsd xmm0,xmm4 ; p9+p8 movlpd xmm9,qword ptr real_26_bits movlpd xmm10,qword ptr real_1_0 addsd xmm0,xmm1 ; p9+p8+p7 addsd xmm0,xmm5 ; p9+p8+p7+p6 andpd xmm9,xmm3 ; x_h addsd xmm0,xmm2 ; p9+p8+p7+p6+p5 addsd xmm9,xmm10 ; 1+x_h addsd xmm0,xmm7 ; p9+p8+p7+p6+p5+p4 subsd xmm10,xmm9 ; 1-(1+x_h) addsd xmm0,xmm8 ; p9+p8+p7+p6+p5+p4+p3 addsd xmm10,xmm3 ; (1-(1+x_h))+x addsd xmm0,xmm6 ; p9+p8+p7+p6+p5+p4+p3+p2 addsd xmm0,xmm10 addsd xmm0,xmm9 ret exp_real_n1: subsd xmm0,xmm2 lea rcx,exp_m1_c jmp exp_real_np1 exp_real_p1: subsd xmm0,xmm1 lea rcx,exp_p1_c exp_real_np1: movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm6,qword ptr (exp_p1_2-exp_p1_c)[rcx] movlpd xmm7,qword ptr (exp_p1_4-exp_p1_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm6,xmm2 ; p2 movsd xmm3,xmm1 ; x mulsd xmm1,xmm2 ; x3 movlpd xmm8,qword ptr (exp_p1_3-exp_p1_c)[rcx] mulsd xmm7,xmm0 ; p4 mulsd xmm8,xmm1 ; p3 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movsd xmm5,xmm2 ; x2 mulsd xmm2,xmm1 ; x5 mulsd xmm5,xmm4 ; x6 mulsd xmm1,xmm4 ; x7 mulsd xmm4,xmm2 ; x9 mulsd xmm0,qword ptr (exp_p1_8-exp_p1_c)[rcx] ; p8 mulsd xmm2,qword ptr (exp_p1_5-exp_p1_c)[rcx] ; p5 mulsd xmm5,qword ptr (exp_p1_6-exp_p1_c)[rcx] ; p6 mulsd xmm1,qword ptr (exp_p1_7-exp_p1_c)[rcx] ; p7 mulsd xmm4,qword ptr (exp_p1_9-exp_p1_c)[rcx] ; p9 addsd xmm0,xmm4 ; p9+p8 movlpd xmm9,qword ptr real_26_bits addsd xmm0,xmm1 ; p9+p8+p7 movsd xmm11,xmm3 ; x andpd xmm9,xmm3 ; x_h mulsd xmm3,qword ptr (exp_p1_1_l-exp_p1_c)[rcx] ; x*c1_l addsd xmm0,xmm5 ; p9+p8+p7+p6 subsd xmm11,xmm9 ; x_l mulsd xmm9,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] ; x_h*c1_h addsd xmm0,xmm2 ; p9+p8+p7+p6+p5 movlpd xmm10,qword ptr (exp_p1_0-exp_p1_c)[rcx] mulsd xmm11,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] ; x_l*c1_h addsd xmm10,xmm9 ; x_h*c1_h+c0 movlpd xmm12,qword ptr (exp_p1_0-exp_p1_c)[rcx] addsd xmm0,xmm7 ; p9+p8+p7+p6+p5+p4 addsd xmm3,xmm11 ; x*c1_l+x_l*c1_h subsd xmm12,xmm10 ; c0-(x_h*c1_h+c0) addsd xmm0,xmm8 ; p9+p8+p7+p6+p5+p4+p3 addsd xmm12,xmm9 ; (c0-(x_h*c1_h+c0))+x_h*c1_h addsd xmm0,xmm6 ; p9+p8+p7+p6+p5+p4+p3+p2 addsd xmm3,xmm12 ; (c0-(x_h*c1_h+c0))+x_h*c1_h+x*c1_l+x_l*c1_h addsd xmm0,qword ptr (exp_p1_0_l-exp_p1_c)[rcx] addsd xmm0,xmm3 addsd xmm0,xmm10 ret exp_real_2: ucomisd xmm0,qword ptr real_ln_2_t_1_5 ja exp_real_3 subsd xmm0,qword ptr real_ln2_42 movlpd xmm14,qword ptr real_ln2_42_l movsd xmm13,xmm0 subsd xmm0,xmm14 movlpd xmm15,qword ptr real_2_0 exp_real_: movlpd xmm1,qword ptr n_45_d_256 movlpd xmm2,qword ptr n_m_45_d_256 ucomisd xmm0,xmm1 ja exp_real_p1_ ucomisd xmm0,xmm2 jb exp_real_n1_ ucomisd xmm0,qword ptr real_0_0 lea rcx,exp_p0_c lea rdx,exp_m0_c movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 cmovb rcx,rdx movlpd xmm6,qword ptr (exp_p0_2-exp_p0_c)[rcx] movlpd xmm7,qword ptr (exp_p0_4-exp_p0_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm6,xmm2 ; p2 movsd xmm3,xmm1 ; x mulsd xmm1,xmm2 ; x3 movlpd xmm8,qword ptr (exp_p0_3-exp_p0_c)[rcx] mulsd xmm7,xmm0 ; p4 mulsd xmm8,xmm1 ; p3 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movsd xmm5,xmm2 ; x2 mulsd xmm2,xmm1 ; x5 mulsd xmm5,xmm4 ; x6 mulsd xmm1,xmm4 ; x7 mulsd xmm4,xmm2 ; x9 mulsd xmm0,qword ptr (exp_p0_8-exp_p0_c)[rcx] ; p8 mulsd xmm2,qword ptr (exp_p0_5-exp_p0_c)[rcx] ; p5 mulsd xmm5,qword ptr (exp_p0_6-exp_p0_c)[rcx] ; p6 mulsd xmm1,qword ptr (exp_p0_7-exp_p0_c)[rcx] ; p7 mulsd xmm4,qword ptr (exp_p0_9-exp_p0_c)[rcx] ; p9 addsd xmm0,xmm4 ; p9+p8 movlpd xmm9,qword ptr real_26_bits movlpd xmm10,qword ptr real_1_0 addsd xmm0,xmm1 ; p9+p8+p7 andpd xmm9,xmm3 ; x_h addsd xmm0,xmm5 ; p9+p8+p7+p6 addsd xmm9,xmm10 ; 1+x_h addsd xmm0,xmm2 ; p9+p8+p7+p6+p5 subsd xmm10,xmm9 ; 1-(1+x_h) addsd xmm0,xmm7 ; p9+p8+p7+p6+p5+p4 addsd xmm10,xmm13 ; (1-(1+x_h))+xh addsd xmm0,xmm8 ; p9+p8+p7+p6+p5+p4+p3 subsd xmm10,xmm14 ; (1-(1+x_h))+xh-nxl addsd xmm0,xmm6 ; p9+p8+p7+p6+p5+p4+p3+p2 addsd xmm0,xmm10 addsd xmm0,xmm9 mulsd xmm0,xmm15 ret exp_real_n1_: subsd xmm0,xmm2 subsd xmm13,xmm2 lea rcx,exp_m1_c jmp exp_real_np1_ exp_real_p1_: subsd xmm0,xmm1 subsd xmm13,xmm1 lea rcx,exp_p1_c exp_real_np1_: movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm6,qword ptr (exp_p1_2-exp_p1_c)[rcx] movlpd xmm7,qword ptr (exp_p1_4-exp_p1_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm6,xmm2 ; p2 movsd xmm3,xmm1 ; x mulsd xmm1,xmm2 ; x3 movlpd xmm8,qword ptr (exp_p1_3-exp_p1_c)[rcx] mulsd xmm7,xmm0 ; p4 mulsd xmm8,xmm1 ; p3 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movsd xmm5,xmm2 ; x2 mulsd xmm2,xmm1 ; x5 mulsd xmm5,xmm4 ; x6 mulsd xmm1,xmm4 ; x7 mulsd xmm4,xmm2 ; x9 mulsd xmm0,qword ptr (exp_p1_8-exp_p1_c)[rcx] ; p8 mulsd xmm2,qword ptr (exp_p1_5-exp_p1_c)[rcx] ; p5 mulsd xmm5,qword ptr (exp_p1_6-exp_p1_c)[rcx] ; p6 mulsd xmm1,qword ptr (exp_p1_7-exp_p1_c)[rcx] ; p7 mulsd xmm4,qword ptr (exp_p1_9-exp_p1_c)[rcx] ; p9 movlpd xmm9,qword ptr real_26_bits addsd xmm0,xmm4 ; p9+p8 movsd xmm11,xmm13 ; xh andpd xmm9,xmm3 ; x_h mulsd xmm3,qword ptr (exp_p1_1_l-exp_p1_c)[rcx] ; x*c1_l addsd xmm0,xmm1 ; p9+p8+p7 subsd xmm11,xmm9 ; xh-x_h addsd xmm0,xmm5 ; p9+p8+p7+p6 subsd xmm11,xmm14 ; x_l=(xh-x_h)-nxl mulsd xmm9,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] ; x_h*c1_h addsd xmm0,xmm2 ; p9+p8+p7+p6+p5 movlpd xmm10,qword ptr (exp_p1_0-exp_p1_c)[rcx] mulsd xmm11,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] ; x_l*c1_h addsd xmm10,xmm9 ; x_h*c1_h+c0 movlpd xmm12,qword ptr (exp_p1_0-exp_p1_c)[rcx] addsd xmm0,xmm7 ; p9+p8+p7+p6+p5+p4 addsd xmm3,xmm11 ; x*c1_l+x_l*c1_h subsd xmm12,xmm10 ; c0-(x_h*c1_h+c0) addsd xmm0,xmm8 ; p9+p8+p7+p6+p5+p4+p3 addsd xmm12,xmm9 ; (c0-(x_h*c1_h+c0))+x_h*c1_h addsd xmm0,xmm6 ; p9+p8+p7+p6+p5+p4+p3+p2 addsd xmm3,xmm12 ; (c0-(x_h*c1_h+c0))+x_h*c1_h+x*c1_l+x_l*c1_h addsd xmm0,qword ptr (exp_p1_0_l-exp_p1_c)[rcx] addsd xmm0,xmm3 addsd xmm0,xmm10 mulsd xmm0,xmm15 ret exp_real_3_n: movlpd xmm1,qword ptr real_1_d_ln2 mulsd xmm1,xmm0 movq xmm4,qword ptr m_round_c subsd xmm1,qword ptr real_0_5 ucomisd xmm1,qword ptr real_m_1022 jae exp_real_3_pn ucomisd xmm1,qword ptr real_m_1076 jb exp_real_3_n_large movq xmm9,qword ptr qw_1078 call exp_real_3_pn_ mulsd xmm0,qword ptr real_2_p_m_55 ret exp_real_3: movlpd xmm1,qword ptr real_1_d_ln2 mulsd xmm1,xmm0 movq xmm4,qword ptr round_c addsd xmm1,qword ptr real_0_5 ucomisd xmm1,qword ptr real_1024 jae exp_real_3_large exp_real_3_pn: movq xmm9,qword ptr qw_1023 exp_real_3_pn_: movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 movlpd xmm13,qword ptr real_ln2_42 movlpd xmm14,qword ptr real_ln2_42_l mulsd xmm13,xmm1 mulsd xmm14,xmm1 cvtpd2dq xmm15,xmm1 subsd xmm0,xmm13 movsd xmm13,xmm0 subsd xmm0,xmm14 paddq xmm15,xmm9 psllq xmm15,52 jmp exp_real_ exp_real_3_large: ucomisd xmm1,qword ptr real_1025 jae exp_real_3_larger movq xmm9,qword ptr qw_1022 call exp_real_3_pn_ mulsd xmm0,qword ptr real_2_0 ret exp_real_3_larger: ucomisd xmm0,qword ptr real_max ja exp_real_3_inf_or_nan movlpd xmm0,qword ptr qword ptr real_2_p_1023 mulsd xmm0,xmm0 exp_real_3_inf_or_nan: ret exp_real_3_n_large: jp exp_real_3_inf_or_nan ; nan movlpd xmm0,qword ptr real_0_0 ret _T006 ends _T007 segment para 'CODE' public ln_real ln_real: ucomisd xmm0,qword ptr real_0_8243 jb ln_real_small ; x<0.82436063535006407342 | nan ucomisd xmm0,qword ptr real_1_6487 ja ln_real_large ; x>1.6487212707001281468 movlpd xmm2,qword ptr real_1_0 ucomisd xmm0,qword ptr real_7_d_6 ja ln_real_a_7_d_6 ucomisd xmm0,xmm2 subsd xmm0,xmm2 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 jae ln_real_0 jmp ln_real_s ln_real_small: ucomisd xmm0,qword ptr real_2_p_m_1022 jae ln_real_ ucomisd xmm0,qword ptr real_0_0 jbe ln_real_less_or_equal_0_or_nan ; denormalized number mulsd xmm0,qword ptr real_2_p_55 movlpd xmm1,qword ptr mask_significand andpd xmm1,xmm0 psrlq xmm0,52 movlpd xmm2,qword ptr real_1_0 movlpd xmm3,qword ptr real_0_5 orpd xmm2,xmm1 orpd xmm3,xmm1 ucomisd xmm2,qword ptr real_1_6487 jbe ln_real_dn_g1 subsd xmm3,qword ptr real_1_0 psubq xmm0,qword ptr qw_1077 jmp ln_real_l1_ ln_real_dn_g1: ucomisd xmm2,qword ptr real_7_d_6 subsd xmm2,qword ptr real_1_0 psubq xmm0,qword ptr qw_1078 ja ln_real_g_7_d_6 jmp ln_real_g1_ ln_real_large: ucomisd xmm0,qword ptr real_max ja ln_real_inf_or_nan ln_real_: movlpd xmm1,qword ptr mask_significand andpd xmm1,xmm0 psrlq xmm0,52 movlpd xmm2,qword ptr real_1_0 movlpd xmm3,qword ptr real_0_5 orpd xmm2,xmm1 orpd xmm3,xmm1 ucomisd xmm2,qword ptr real_1_6487 jbe ln_real_g1 jmp ln_real_l1 ln_real_0: movlpd xmm3,qword ptr ln_b_q_1 movlpd xmm2,qword ptr ln_b_p_1 mulsd xmm3,xmm1 ; q1 mulsd xmm2,xmm1 ; p1 movsd xmm7,xmm1 ; x movlpd xmm5,qword ptr ln_b_q_2 movlpd xmm4,qword ptr ln_b_p_2 movsd xmm6,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movsd xmm11,xmm1 ; x mulsd xmm7,xmm6 ; x3 movlpd xmm9,qword ptr ln_b_q_3 movlpd xmm8,qword ptr ln_b_p_3 mulsd xmm11,xmm0 ; x5 mulsd xmm5,xmm6 ; q2 mulsd xmm4,xmm6 ; p2 movlpd xmm10,qword ptr ln_b_q_4 mulsd xmm9,xmm7 ; q3 mulsd xmm8,xmm7 ; p3 mulsd xmm10,xmm0 ; q4 mulsd xmm0,qword ptr ln_b_p_4 ; p4 addsd xmm10,xmm11 ; q4+x5 addsd xmm0,xmm8 ; p3+p4 addsd xmm9,xmm10 ; q3+q4+x5 movlpd xmm6,qword ptr real_17_bits addsd xmm0,xmm4 ; p2+p3+p4 addsd xmm5,xmm9 ; q2+q3+q4+x5 andpd xmm6,xmm1 ; x_17_h movsd xmm8,xmm1 ; x movlpd xmm4,qword ptr real_0_5 addsd xmm0,xmm2 ; p1+p2+p3+p4 addsd xmm3,xmm5 ; q1+q2+q3+q4+x5 subsd xmm8,xmm6 ; x_17_l mulsd xmm4,xmm6 ; 0.5*x_17_h addsd xmm0,qword ptr ln_b_p_0 ; p0+p1+p2+p3+p4 addsd xmm3,qword ptr ln_b_q_0 ; q0+q1+q2+q3+q4+x5 mulsd xmm8,qword ptr real_0_5 ; 0.5*x_17_l mulsd xmm4,xmm6 ; 0.5*x_17_h*x_17_h addsd xmm6,xmm1 ; x+x_17_h ucomisd xmm1,qword ptr real_2_p_m_16 jb ln_real_0_s divsd xmm0,xmm3 ; p/q subsd xmm1,xmm4 ; x-0.5*x_17_h*x_17_h mulsd xmm6,xmm8 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm0,xmm7 ; (p/q)*x3 subsd xmm0,xmm6 ; (p/q)*x3-0.5x2_l addsd xmm0,xmm1 ; (p/q)*x3-0.5x2+x ret ln_real_0_s: divsd xmm0,xmm3 ; p/q mulsd xmm6,xmm8 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm0,xmm7 ; (p/q)*x3 subsd xmm0,xmm6 ; (p/q)*x3-0.5x2_l subsd xmm0,xmm4 ; (p/q)*x3-0.5x2 addsd xmm0,xmm1 ; (p/q)*x3-0.5x2+x ret ln_real_a_7_d_6: subsd xmm0,xmm2 mulsd xmm0,qword ptr real_0_75 movlpd xmm1,qword ptr real_0_25 lea rcx,ln_b_c lea rdx,ln_s_c ucomisd xmm0,xmm1 subsd xmm0,xmm1 cmovb rcx,rdx movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm3,qword ptr (ln_b_q_1-ln_b_c)[rcx] movlpd xmm2,qword ptr (ln_b_p_1-ln_b_c)[rcx] mulsd xmm3,xmm1 ; q1 mulsd xmm2,xmm1 ; p1 movsd xmm7,xmm1 ; x movlpd xmm5,qword ptr (ln_b_q_2-ln_b_c)[rcx] movlpd xmm4,qword ptr (ln_b_p_2-ln_b_c)[rcx] movsd xmm6,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movsd xmm11,xmm1 ; x mulsd xmm7,xmm6 ; x3 movlpd xmm9,qword ptr (ln_b_q_3-ln_b_c)[rcx] movlpd xmm8,qword ptr (ln_b_p_3-ln_b_c)[rcx] mulsd xmm11,xmm0 ; x5 mulsd xmm5,xmm6 ; q2 mulsd xmm4,xmm6 ; p2 movlpd xmm6,qword ptr real_17_bits movlpd xmm10,qword ptr (ln_b_q_4-ln_b_c)[rcx] mulsd xmm9,xmm7 ; q3 mulsd xmm8,xmm7 ; p3 andpd xmm6,xmm1 ; x_17_h mulsd xmm10,xmm0 ; q4 mulsd xmm0,qword ptr (ln_b_p_4-ln_b_c)[rcx] ; p4 addsd xmm10,xmm11 ; q4+x5 addsd xmm0,xmm8 ; p3+p4 addsd xmm9,xmm10 ; q3+q4+x5 movsd xmm8,xmm1 ; x addsd xmm0,xmm4 ; p2+p3+p4 addsd xmm5,xmm9 ; q2+q3+q4+x5 movlpd xmm4,qword ptr real_0_5 subsd xmm8,xmm6 ; x_17_l mulsd xmm4,xmm6 ; 0.5*x_17_h addsd xmm0,xmm2 ; p1+p2+p3+p4 addsd xmm3,xmm5 ; q1+q2+q3+q4+x5 mulsd xmm8,qword ptr real_0_5 ; 0.5*x_17_l mulsd xmm4,xmm6 ; 0.5*x_17_h*x_17_h addsd xmm6,xmm1 ; x+x_17_h addsd xmm0,qword ptr (ln_b_p_0-ln_b_c)[rcx] ; p0+p1+p2+p3+p4 addsd xmm3,qword ptr (ln_b_q_0-ln_b_c)[rcx] ; q0+q1+q2+q3+q4+x5 subsd xmm1,xmm4 ; x-0.5*x_17_h*x_17_h mulsd xmm6,xmm8 ; 0.5*x_17_l*(x+x_17_h) divsd xmm0,xmm3 ; p/q movlpd xmm2,qword ptr ln_4_d_3_53 movlpd xmm4,qword ptr ln_4_d_3_53_l addsd xmm2,xmm1 subsd xmm4,xmm6 movlpd xmm3,qword ptr ln_4_d_3_53 subsd xmm3,xmm2 mulsd xmm0,xmm7 ; (p/q)*x3 addsd xmm3,xmm1 addsd xmm3,xmm4 addsd xmm0,xmm3 addsd xmm0,xmm2 ret ln_real_g1: ucomisd xmm2,qword ptr real_7_d_6 subsd xmm2,qword ptr real_1_0 psubq xmm0,qword ptr qw_1023 ja ln_real_g_7_d_6 ln_real_g1_: movsd xmm1,xmm2 ; x mulsd xmm2,xmm2 ; x2 movlpd xmm4,qword ptr ln_b_q_1 movlpd xmm3,qword ptr ln_b_p_1 mulsd xmm4,xmm1 ; q1 mulsd xmm3,xmm1 ; p1 movsd xmm8,xmm1 ; x cvtdq2pd xmm0,xmm0 movlpd xmm6,qword ptr ln_b_q_2 movlpd xmm5,qword ptr ln_b_p_2 movsd xmm7,xmm2 ; x2 mulsd xmm2,xmm2 ; x4 movsd xmm12,xmm1 ; x mulsd xmm8,xmm7 ; x3 movlpd xmm10,qword ptr ln_b_q_3 movlpd xmm9,qword ptr ln_b_p_3 mulsd xmm12,xmm2 ; x5 mulsd xmm6,xmm7 ; q2 mulsd xmm5,xmm7 ; p2 movlpd xmm11,qword ptr ln_b_p_4 mulsd xmm10,xmm8 ; q3 mulsd xmm9,xmm8 ; p3 mulsd xmm11,xmm2 ; p4 mulsd xmm2,qword ptr ln_b_q_4 ; q4 addsd xmm2,xmm12 ; q4+x5 addsd xmm2,xmm10 ; q3+q4+x5 addsd xmm9,xmm11 ; p3+p4 movlpd xmm7,qword ptr real_17_bits addsd xmm2,xmm6 ; q2+q3+q4+x5 addsd xmm5,xmm9 ; p2+p3+p4 andpd xmm7,xmm1 ; x_17_h movsd xmm14,xmm1 ; x movlpd xmm13,qword ptr real_0_5 movlpd xmm6,qword ptr real_ln2_42_l addsd xmm2,xmm4 ; q1+q2+q3+q4+x5 addsd xmm3,xmm5 ; p1+p2+p3+p4 subsd xmm14,xmm7 ; x_17_l mulsd xmm13,xmm7 ; 0.5*x_17_h mulsd xmm6,xmm0 mulsd xmm0,qword ptr real_ln2_42 addsd xmm2,qword ptr ln_b_q_0 ; q0+q1+q2+q3+q4+x5 addsd xmm3,qword ptr ln_b_p_0 ; p0+p1+p2+p3+p4 mulsd xmm14,qword ptr real_0_5; 0.5*x_17_l mulsd xmm13,xmm7 ; 0.5*x_17_h*x_17_h addsd xmm7,xmm1 ; x+x_17_h ucomisd xmm1,qword ptr real_2_p_m_16 jb ln_real_g1_s ln_real_g1_l: divsd xmm3,xmm2 ; p/q subsd xmm1,xmm13 ; x-0.5*x_17_h*x_17_h mulsd xmm7,xmm14 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm3,xmm8 ; (p/q)*x3 subsd xmm3,xmm7 ; (p/q)*x3-0.5x2_l addsd xmm3,xmm6 movsd xmm2,xmm0 addsd xmm0,xmm1 subsd xmm2,xmm0 addsd xmm2,xmm1 addsd xmm2,xmm3 addsd xmm0,xmm2 ; addsd xmm1,xmm3 ; (p/q)*x3-0.5x2+x ; addsd xmm0,xmm1 ret ln_real_g1_s: divsd xmm3,xmm2 ; p/q mulsd xmm7,xmm14 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm3,xmm8 ; (p/q)*x3 subsd xmm3,xmm7 ; (p/q)*x3-0.5x2_l addsd xmm3,xmm6 subsd xmm3,xmm13 ; (p/q)*x3-0.5x2 addsd xmm1,xmm3 ; (p/q)*x3-0.5x2_l+x addsd xmm0,xmm1 ret ln_real_g_7_d_6: mulsd xmm2,qword ptr real_0_75 movlpd xmm1,qword ptr real_0_25 lea rcx,ln_b_c lea rdx,ln_s_c ucomisd xmm2,xmm1 subsd xmm2,xmm1 cmovb rcx,rdx movsd xmm1,xmm2 ; x mulsd xmm2,xmm2 ; x2 movlpd xmm4,qword ptr (ln_b_q_1-ln_b_c)[rcx] movlpd xmm3,qword ptr (ln_b_p_1-ln_b_c)[rcx] mulsd xmm4,xmm1 ; q1 mulsd xmm3,xmm1 ; p1 movsd xmm8,xmm1 ; x cvtdq2pd xmm0,xmm0 movlpd xmm6,qword ptr (ln_b_q_2-ln_b_c)[rcx] movlpd xmm5,qword ptr (ln_b_p_2-ln_b_c)[rcx] movsd xmm7,xmm2 ; x2 mulsd xmm2,xmm2 ; x4 movsd xmm12,xmm1 ; x mulsd xmm8,xmm7 ; x3 movlpd xmm10,qword ptr (ln_b_q_3-ln_b_c)[rcx] movlpd xmm9,qword ptr (ln_b_p_3-ln_b_c)[rcx] mulsd xmm12,xmm2 ; x5 mulsd xmm6,xmm7 ; q2 mulsd xmm5,xmm7 ; p2 movlpd xmm11,qword ptr (ln_b_p_4-ln_b_c)[rcx] mulsd xmm10,xmm8 ; q3 mulsd xmm9,xmm8 ; p3 mulsd xmm11,xmm2 ; p4 mulsd xmm2,qword ptr (ln_b_q_4-ln_b_c)[rcx] ; q4 addsd xmm2,xmm12 ; q4+x5 addsd xmm2,xmm10 ; q3+q4+x5 addsd xmm9,xmm11 ; p3+p4 movlpd xmm7,qword ptr real_17_bits addsd xmm2,xmm6 ; q2+q3+q4+x5 addsd xmm5,xmm9 ; p2+p3+p4 andpd xmm7,xmm1 ; x_17_h movsd xmm14,xmm1 ; x movlpd xmm13,qword ptr real_0_5 movlpd xmm6,qword ptr real_ln2_42_l addsd xmm2,xmm4 ; q1+q2+q3+q4+x5 addsd xmm3,xmm5 ; p1+p2+p3+p4 subsd xmm14,xmm7 ; x_17_l mulsd xmm13,xmm7 ; 0.5*x_17_h mulsd xmm6,xmm0 mulsd xmm0,qword ptr real_ln2_42 addsd xmm2,qword ptr (ln_b_q_0-ln_b_c)[rcx] ; q0+q1+q2+q3+q4+x5 addsd xmm3,qword ptr (ln_b_p_0-ln_b_c)[rcx] ; p0+p1+p2+p3+p4 mulsd xmm14,qword ptr real_0_5; 0.5*x_17_l mulsd xmm13,xmm7 ; 0.5*x_17_h*x_17_h addsd xmm7,xmm1 ; x+x_17_h addsd xmm0,qword ptr ln_4_d_3_42 addsd xmm6,qword ptr ln_4_d_3_42_l jmp ln_real_g1_l ln_real_s: movlpd xmm3,qword ptr ln_s_q_1 movlpd xmm2,qword ptr ln_s_p_1 mulsd xmm3,xmm1 ; q1 mulsd xmm2,xmm1 ; p1 movsd xmm7,xmm1 ; x movlpd xmm5,qword ptr ln_s_q_2 movlpd xmm4,qword ptr ln_s_p_2 movsd xmm6,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movsd xmm11,xmm1 ; x mulsd xmm7,xmm6 ; x3 movlpd xmm9,qword ptr ln_s_q_3 movlpd xmm8,qword ptr ln_s_p_3 mulsd xmm11,xmm0 ; x5 mulsd xmm5,xmm6 ; q2 mulsd xmm4,xmm6 ; p2 movlpd xmm10,qword ptr ln_s_q_4 mulsd xmm9,xmm7 ; q3 mulsd xmm8,xmm7 ; p3 mulsd xmm10,xmm0 ; q4 mulsd xmm0,qword ptr ln_s_p_4 ; p4 addsd xmm10,xmm11 ; q4+x5 addsd xmm0,xmm8 ; p3+p4 addsd xmm9,xmm10 ; q3+q4+x5 movlpd xmm6,qword ptr real_17_bits addsd xmm0,xmm4 ; p2+p3+p4 addsd xmm5,xmm9 ; q2+q3+q4+x5 andpd xmm6,xmm1 ; x_17_h movsd xmm8,xmm1 ; x movlpd xmm4,qword ptr real_0_5 addsd xmm0,xmm2 ; p1+p2+p3+p4 addsd xmm3,xmm5 ; q1+q2+q3+q4+x5 subsd xmm8,xmm6 ; x_17_l mulsd xmm4,xmm6 ; 0.5*x_17_h addsd xmm0,qword ptr ln_s_p_0 ; p0+p1+p2+p3+p4 addsd xmm3,qword ptr ln_s_q_0 ; q0+q1+q2+q3+q4+x5 mulsd xmm8,qword ptr real_0_5; 0.5*x_17_l mulsd xmm4,xmm6 ; 0.5*x_17_h*x_17_h addsd xmm6,xmm1 ; x+x_17_h ucomisd xmm1,qword ptr real_m_2_p_m_16 ja ln_real_s_s divsd xmm0,xmm3 ; p/q subsd xmm1,xmm4 ; x-0.5*x_17_h*x_17_h mulsd xmm6,xmm8 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm0,xmm7 ; (p/q)*x3 subsd xmm0,xmm6 ; (p/q)*x3-0.5x2_l addsd xmm0,xmm1 ; (p/q)*x3-0.5x2+x ret ln_real_s_s: divsd xmm0,xmm3 ; p/q mulsd xmm6,xmm8 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm0,xmm7 ; (p/q)*x3 subsd xmm0,xmm6 ; (p/q)*x3-0.5x2_l subsd xmm0,xmm4 ; (p/q)*x3-0.5x2 addsd xmm0,xmm1 ; (p/q)*x3-0.5x2+x ret ln_real_l1: subsd xmm3,qword ptr real_1_0 psubq xmm0,qword ptr qw_1022 ln_real_l1_: movsd xmm1,xmm3 ; x mulsd xmm3,xmm3 ; x2 movlpd xmm4,qword ptr ln_s_q_1 movlpd xmm2,qword ptr ln_s_p_1 mulsd xmm4,xmm1 ; q1 mulsd xmm2,xmm1 ; p1 movsd xmm8,xmm1 ; x cvtdq2pd xmm0,xmm0 movlpd xmm6,qword ptr ln_s_q_2 movlpd xmm5,qword ptr ln_s_p_2 movsd xmm7,xmm3 ; x2 mulsd xmm3,xmm3 ; x4 movsd xmm12,xmm1 ; x mulsd xmm8,xmm7 ; x3 movlpd xmm10,qword ptr ln_s_q_3 movlpd xmm9,qword ptr ln_s_p_3 mulsd xmm12,xmm3 ; x5 mulsd xmm6,xmm7 ; q2 mulsd xmm5,xmm7 ; p2 movlpd xmm11,qword ptr ln_s_p_4 mulsd xmm10,xmm8 ; q3 mulsd xmm9,xmm8 ; p3 mulsd xmm11,xmm3 ; p4 mulsd xmm3,qword ptr ln_s_q_4 ; q4 addsd xmm3,xmm12 ; q4+x5 addsd xmm3,xmm10 ; q3+q4+x5 addsd xmm9,xmm11 ; p3+p4 movlpd xmm7,qword ptr real_17_bits addsd xmm3,xmm6 ; q2+q3+q4+x5 addsd xmm5,xmm9 ; p2+p3+p4 andpd xmm7,xmm1 ; x_17_h movsd xmm14,xmm1 ; x movlpd xmm13,qword ptr real_0_5 movlpd xmm6,qword ptr real_ln2_42_l addsd xmm3,xmm4 ; q1+q2+q3+q4+x5 addsd xmm2,xmm5 ; p1+p2+p3+p4 subsd xmm14,xmm7 ; x_17_l mulsd xmm13,xmm7 ; 0.5*x_17_h mulsd xmm6,xmm0 mulsd xmm0,qword ptr real_ln2_42 addsd xmm3,qword ptr ln_s_q_0 ; q0+q1+q2+q3+q4+x5 addsd xmm2,qword ptr ln_s_p_0 ; p0+p1+p2+p3+p4 mulsd xmm14,qword ptr real_0_5; 0.5*x_17_l mulsd xmm13,xmm7 ; 0.5*x_17_h*x_17_h addsd xmm7,xmm1 ; x+x_17_h ucomisd xmm1,qword ptr real_m_2_p_m_16 ja ln_real_l1_s divsd xmm2,xmm3 ; p/q subsd xmm1,xmm13 ; x-0.5*x_17_h*x_17_h mulsd xmm7,xmm14 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm2,xmm8 ; (p/q)*x3 subsd xmm2,xmm7 ; (p/q)*x3-0.5x2_l addsd xmm2,xmm6 movsd xmm3,xmm0 addsd xmm0,xmm1 subsd xmm3,xmm0 addsd xmm3,xmm1 addsd xmm3,xmm2 addsd xmm0,xmm3 ; addsd xmm1,xmm2 ; (p/q)*x3-0.5x2+x ; addsd xmm0,xmm1 ret ln_real_l1_s: divsd xmm2,xmm3 ; p/q mulsd xmm7,xmm14 ; 0.5*x_17_l*(x+x_17_h) mulsd xmm2,xmm8 ; (p/q)*x3 subsd xmm2,xmm7 ; (p/q)*x3-0.5x2_l addsd xmm2,xmm6 subsd xmm2,xmm13 ; (p/q)*x3-0.5x2 addsd xmm1,xmm2 ; (p/q)*x3-0.5x2+x addsd xmm0,xmm1 ret ln_real_less_or_equal_0_or_nan: jb ln_real_less_0_or_nan ; x<0.0 | nan movsd xmm0,qword ptr real_m_1_0 divsd xmm0,qword ptr real_0_0 ; yield -inf ret ln_real_less_0_or_nan: jp ln_real_inf_or_nan ; nan movsd xmm0,qword ptr real_0_0 ; yield nan divsd xmm0,xmm0 ln_real_inf_or_nan: ret _T007 ends _T008 segment para 'CODE' public log10_real log10_real: ; ucomisd xmm0,qword ptr real_0_7025 ucomisd xmm0,qword ptr real_0_833 ; jb log10_real_small ; x<0.7025 | nan jb log10_real_small ; x<0.833 | nan ucomisd xmm0,qword ptr real_1_666 ja log10_real_large ; x>1.666 movlpd xmm2,qword ptr real_1_0 ucomisd xmm0,qword ptr real_7_d_6 ja log10_real_a_7_d_6 ucomisd xmm0,xmm2 subsd xmm0,xmm2 movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 jae log10_real_0 jmp log10_real_s log10_real_small: ucomisd xmm0,qword ptr real_2_p_m_1022 jae log10_real_ ucomisd xmm0,qword ptr real_0_0 jbe log10_real_less_or_equal_0_or_nan ; denormalized number mulsd xmm0,qword ptr real_2_p_55 movlpd xmm1,qword ptr mask_significand andpd xmm1,xmm0 psrlq xmm0,52 movlpd xmm2,qword ptr real_1_0 movlpd xmm3,qword ptr real_0_5 orpd xmm2,xmm1 orpd xmm3,xmm1 ; ucomisd xmm2,qword ptr real_1_405 ucomisd xmm2,qword ptr real_1_666 jbe log10_real_dn_g1 subsd xmm3,qword ptr real_1_0 psubq xmm0,qword ptr qw_1077 jmp log10_real_l1_ log10_real_dn_g1: ucomisd xmm2,qword ptr real_7_d_6 subsd xmm2,qword ptr real_1_0 psubq xmm0,qword ptr qw_1078 ja log10_real_g_7_d_6 jmp log10_real_g1_ log10_real_large: ucomisd xmm0,qword ptr real_max ja log10_real_inf_or_nan log10_real_: movlpd xmm1,qword ptr mask_significand andpd xmm1,xmm0 psrlq xmm0,52 movlpd xmm2,qword ptr real_1_0 movlpd xmm3,qword ptr real_0_5 orpd xmm2,xmm1 orpd xmm3,xmm1 ; ucomisd xmm2,qword ptr real_1_405 ucomisd xmm2,qword ptr real_1_666 jbe log10_real_g1 jmp log10_real_l1 log10_real_0: movlpd xmm2,qword ptr log10_b_p_1 movlpd xmm3,qword ptr log10_b_q_1 mulsd xmm2,xmm1 ; p1 mulsd xmm3,xmm1 ; q1 movsd xmm7,xmm1 ; x movlpd xmm4,qword ptr log10_b_p_2 movlpd xmm5,qword ptr log10_b_q_2 mulsd xmm7,xmm0 ; x3 movsd xmm6,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movlpd xmm8,qword ptr log10_b_p_3 movlpd xmm9,qword ptr log10_b_q_3 mulsd xmm4,xmm6 ; p2 mulsd xmm5,xmm6 ; q2 movlpd xmm10,qword ptr log10_b_p_4 mulsd xmm8,xmm7 ; p3 mulsd xmm9,xmm7 ; q3 movsd xmm11,xmm7 ; x3 mulsd xmm7,xmm6 ; x5 mulsd xmm10,xmm0 ; p4 mulsd xmm0,qword ptr log10_b_q_4 ; q4 addsd xmm0,xmm7 ; q4+x5 addsd xmm9,xmm0 ; q3+q4+x5 addsd xmm8,xmm10 ; p3+p4 mulsd xmm6,qword ptr real_0_5 ; 0.5x2 addsd xmm9,xmm5 ; q2+q3+q4+x5 addsd xmm4,xmm8 ; p2+p3+p4 addsd xmm9,xmm3 ; q1+q2+q3+q4+x5 addsd xmm2,xmm4 ; p1+p2+p3+p4 movlpd xmm4,qword ptr real_26_bits movsd xmm0,xmm1 ; x addsd xmm9,qword ptr log10_b_q_0 ; q0+q1+q2+q3+q4+x5 addsd xmm2,qword ptr log10_b_p_0 ; p0+p1+p2+p3+p4 subsd xmm1,xmm6 ; x-0.5x2 divsd xmm2,xmm9 ; p/q andpd xmm4,xmm1 ; (x-0.5x2)_h subsd xmm0,xmm4 ; x-(x-0.5x2)_h subsd xmm0,xmm6 ; (x-0.5x2)_l mulsd xmm2,xmm11 ; (p/q)*x3 mulsd xmm1,qword ptr d1ln10_26_l ; (x-0.5x2) * (1/ln 10)_l mulsd xmm0,qword ptr d1ln10_26 ; (x-0.5x2)_l * (1/ln 10)_h mulsd xmm4,qword ptr d1ln10_26 ; (x-0.5x2)_h * (1/ln 10)_h addsd xmm0,xmm1 ; (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h addsd xmm0,xmm2 addsd xmm0,xmm4 ; (x-0.5x2)*(1/ln 10) + (p/q)*x3 ret ;log10_real_0_: ; movlpd xmm2,qword ptr log10_b_p_1 ; movlpd xmm10,qword ptr log10_b_q_1 ; mulsd xmm2,xmm1 ; p1 ; mulsd xmm10,xmm1 ; q1 ; movsd xmm7,xmm1 ; x ; ; movlpd xmm11,qword ptr log10_b_p_2 ; movlpd xmm5,qword ptr log10_b_q_2 ; mulsd xmm7,xmm0 ; x3 ; movsd xmm6,xmm0 ; x2 ; mulsd xmm0,xmm0 ; x4 ; ; movlpd xmm8,qword ptr log10_b_p_3 ; movlpd xmm9,qword ptr log10_b_q_3 ; ;; mulsd xmm11,xmm6 ; p2 ; mulsd xmm5,xmm6 ; q2 ; ; movlpd xmm3,qword ptr log10_b_p_4 ; ; mulsd xmm8,xmm7 ; p3 ; mulsd xmm9,xmm7 ; q3 ; ; mulsd xmm6,xmm7 ; x5 ; ; mulsd xmm3,xmm0 ; p4 ; mulsd xmm0,qword ptr log10_b_q_4 ; q4 ; ; movsd xmm4,xmm1 ; x ; addsd xmm0,xmm6 ; q4+x5 ; movlpd xmm6,qword ptr real_m_0_5 ; ; addsd xmm9,xmm0 ; q3+q4+x5 ; addsd xmm8,xmm3 ; p3+p4 ; ; movlpd xmm0,qword ptr real_14_bits ; ; andpd xmm0,xmm1 ; x_h ; mulsd xmm6,xmm1 ; -0.5x ; ; addsd xmm9,xmm5 ; q2+q3+q4+x5 ; addsd xmm11,xmm8 ; p2+p3+p4 ; ; movsd xmm3,xmm1 ; x ; subsd xmm4,xmm0 ; x_l ; addsd xmm6,qword ptr real_1_0 ; 1-0.5x ; movlpd xmm5,qword ptr real_13_bits ; ; addsd xmm9,xmm10 ; q1+q2+q3+q4+x5 ; addsd xmm2,xmm11 ; p1+p2+p3+p4 ; ; andpd xmm5,xmm6 ; (1-0.5x)_h ; mulsd xmm3,xmm6 ; (1-0.5x)*x = x-0.5x2 ; ; addsd xmm9,qword ptr log10_b_q_0 ; q0+q1+q2+q3+q4+x5 ; addsd xmm2,qword ptr log10_b_p_0 ; p0+p1+p2+p3+p4 ; ; subsd xmm6,xmm5 ; (1-0.5x)_l ; mulsd xmm0,xmm5 ; (1-0.5x)_h*x_h = (x-0.5x2)_h ; mulsd xmm4,xmm5 ; (1-0.5x)_h*x_l ; ; divsd xmm2,xmm9 ; p/q ; ; mulsd xmm3,qword ptr d1ln10_26_l ; (x-0.5x2) * (1/ln 10)_l ; mulsd xmm6,xmm1 ; (1-0.5x)_l*x ; mulsd xmm0,qword ptr d1ln10_26 ; (x-0.5x2)_h * (1/ln 10)_h ; ; addsd xmm6,xmm4 ; (x-0.5x2)_l ; ; mulsd xmm6,qword ptr d1ln10_26 ; (x-0.5x2)_l * (1/ln 10)_h ; ; mulsd xmm2,xmm7 ; (p/q)*x3 ; ; addsd xmm6,xmm3 ; ; addsd xmm2,xmm6 ; ; addsd xmm0,xmm2 ; ; ret log10_real_a_7_d_6: subsd xmm0,xmm2 mulsd xmm0,qword ptr real_0_75 movlpd xmm1,qword ptr real_0_25 lea rcx,log10_b_c lea rdx,log10_s_c ucomisd xmm0,xmm1 subsd xmm0,xmm1 cmovb rcx,rdx movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 movlpd xmm2,qword ptr (log10_b_p_1-log10_b_c)[rcx] movlpd xmm3,qword ptr (log10_b_q_1-log10_b_c)[rcx] mulsd xmm2,xmm1 ; p1 mulsd xmm3,xmm1 ; q1 movsd xmm7,xmm1 ; x movlpd xmm4,qword ptr (log10_b_p_2-log10_b_c)[rcx] movlpd xmm5,qword ptr (log10_b_q_2-log10_b_c)[rcx] mulsd xmm7,xmm0 ; x3 movsd xmm6,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movlpd xmm8,qword ptr (log10_b_p_3-log10_b_c)[rcx] movlpd xmm9,qword ptr (log10_b_q_3-log10_b_c)[rcx] mulsd xmm4,xmm6 ; p2 mulsd xmm5,xmm6 ; q2 movlpd xmm10,qword ptr (log10_b_p_4-log10_b_c)[rcx] mulsd xmm8,xmm7 ; p3 mulsd xmm9,xmm7 ; q3 movsd xmm11,xmm7 ; x3 mulsd xmm7,xmm6 ; x5 mulsd xmm10,xmm0 ; p4 mulsd xmm0,qword ptr (log10_b_q_4-log10_b_c)[rcx] ; q4 addsd xmm0,xmm7 ; q4+x5 addsd xmm9,xmm0 ; q3+q4+x5 addsd xmm8,xmm10 ; p3+p4 mulsd xmm6,qword ptr real_0_5 ; 0.5x2 addsd xmm9,xmm5 ; q2+q3+q4+x5 addsd xmm4,xmm8 ; p2+p3+p4 addsd xmm9,xmm3 ; q1+q2+q3+q4+x5 addsd xmm2,xmm4 ; p1+p2+p3+p4 movlpd xmm4,qword ptr real_26_bits movsd xmm0,xmm1 ; x addsd xmm9,qword ptr (log10_b_q_0-log10_b_c)[rcx] ; q0+q1+q2+q3+q4+x5 addsd xmm2,qword ptr (log10_b_p_0-log10_b_c)[rcx] ; p0+p1+p2+p3+p4 subsd xmm1,xmm6 ; x-0.5x2 divsd xmm2,xmm9 ; p/q andpd xmm4,xmm1 ; (x-0.5x2)_h subsd xmm0,xmm4 ; x-(x-0.5x2)_h subsd xmm0,xmm6 ; (x-0.5x2)_l mulsd xmm2,xmm11 ; (p/q)*x3 mulsd xmm1,qword ptr d1ln10_26_l ; (x-0.5x2) * (1/ln 10)_l mulsd xmm0,qword ptr d1ln10_26 ; (x-0.5x2)_l * (1/ln 10)_h mulsd xmm4,qword ptr d1ln10_26 ; (x-0.5x2)_h * (1/ln 10)_h addsd xmm0,xmm1 ; (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h movlpd xmm3,qword ptr log10_4_d_3_53 movlpd xmm5,qword ptr log10_4_d_3_53 addsd xmm3,xmm4 addsd xmm0,qword ptr log10_4_d_3_53_l subsd xmm5,xmm3 addsd xmm5,xmm4 addsd xmm0,xmm5 addsd xmm0,xmm2 addsd xmm0,xmm3 ; (x-0.5x2)*(1/ln 10) + (p/q)*x3 ret log10_real_g1: ucomisd xmm2,qword ptr real_7_d_6 subsd xmm2,qword ptr real_1_0 psubq xmm0,qword ptr qw_1023 ja log10_real_g_7_d_6 log10_real_g1_: movsd xmm1,xmm2 ; x mulsd xmm2,xmm2 ; x2 movlpd xmm11,qword ptr log10_b_p_1 movlpd xmm10,qword ptr log10_b_q_1 mulsd xmm11,xmm1 ; p1 mulsd xmm10,xmm1 ; q1 movsd xmm7,xmm1 ; x cvtdq2pd xmm12,xmm0 movlpd xmm0,qword ptr log10_b_p_2 movlpd xmm5,qword ptr log10_b_q_2 mulsd xmm7,xmm2 ; x3 movsd xmm6,xmm2 ; x2 mulsd xmm2,xmm2 ; x4 movlpd xmm8,qword ptr log10_b_p_3 movlpd xmm9,qword ptr log10_b_q_3 mulsd xmm0,xmm6 ; p2 mulsd xmm5,xmm6 ; q2 movlpd xmm3,qword ptr log10_b_p_4 mulsd xmm8,xmm7 ; p3 mulsd xmm9,xmm7 ; q3 mulsd xmm6,xmm7 ; x5 mulsd xmm3,xmm2 ; p4 mulsd xmm2,qword ptr log10_b_q_4 ; q4 movsd xmm4,xmm1 ; x addsd xmm2,xmm6 ; q4+x5 movlpd xmm6,qword ptr real_m_0_5 addsd xmm9,xmm2 ; q3+q4+x5 addsd xmm8,xmm3 ; p3+p4 movlpd xmm13,qword ptr real_log2_10_42_l movlpd xmm2,qword ptr real_14_bits andpd xmm2,xmm1 ; x_h mulsd xmm6,xmm1 ; -0.5x addsd xmm9,xmm5 ; q2+q3+q4+x5 addsd xmm0,xmm8 ; p2+p3+p4 mulsd xmm13,xmm12 mulsd xmm12,qword ptr real_log2_10_42 movsd xmm3,xmm1 ; x subsd xmm4,xmm2 ; x_l addsd xmm6,qword ptr real_1_0 ; 1-0.5x movlpd xmm5,qword ptr real_13_bits addsd xmm9,xmm10 ; q1+q2+q3+q4+x5 addsd xmm0,xmm11 ; p1+p2+p3+p4 andpd xmm5,xmm6 ; (1-0.5x)_h mulsd xmm3,xmm6 ; (1-0.5x)*x = x-0.5x2 addsd xmm9,qword ptr log10_b_q_0 ; q0+q1+q2+q3+q4+x5 addsd xmm0,qword ptr log10_b_p_0 ; p0+p1+p2+p3+p4 subsd xmm6,xmm5 ; (1-0.5x)_l mulsd xmm2,xmm5 ; (1-0.5x)_h*x_h = (x-0.5x2)_h mulsd xmm4,xmm5 ; (1-0.5x)_h*x_l divsd xmm0,xmm9 ; p/q mulsd xmm3,qword ptr d1ln10_26_l ; (x-0.5x2) * (1/ln 10)_l mulsd xmm6,xmm1 ; (1-0.5x)_l*x mulsd xmm2,qword ptr d1ln10_26 ; (x-0.5x2)_h * (1/ln 10)_h addsd xmm6,xmm4 ; (x-0.5x2)_l mulsd xmm6,qword ptr d1ln10_26 ; (x-0.5x2)_l * (1/ln 10)_h mulsd xmm0,xmm7 ; (p/q)*x3 addsd xmm6,xmm3 addsd xmm0,xmm6 addsd xmm0,xmm13 movsd xmm3,xmm2 addsd xmm2,xmm12 subsd xmm12,xmm2 addsd xmm12,xmm3 addsd xmm0,xmm12 addsd xmm0,xmm2 ; addsd xmm0,xmm2 ; addsd xmm0,xmm12 ret log10_real_g_7_d_6: mulsd xmm2,qword ptr real_0_75 movlpd xmm1,qword ptr real_0_25 lea rcx,log10_b_c lea rdx,log10_s_c ucomisd xmm2,xmm1 subsd xmm2,xmm1 cmovb rcx,rdx movsd xmm1,xmm2 ; x mulsd xmm2,xmm2 ; x2 movlpd xmm3,qword ptr (log10_b_p_1-log10_b_c)[rcx] movlpd xmm4,qword ptr (log10_b_q_1-log10_b_c)[rcx] mulsd xmm3,xmm1 ; p1 mulsd xmm4,xmm1 ; q1 movsd xmm8,xmm1 ; x cvtdq2pd xmm0,xmm0 movlpd xmm5,qword ptr (log10_b_p_2-log10_b_c)[rcx] movlpd xmm6,qword ptr (log10_b_q_2-log10_b_c)[rcx] mulsd xmm8,xmm2 ; x3 movsd xmm7,xmm2 ; x2 mulsd xmm2,xmm2 ; x4 movlpd xmm9,qword ptr (log10_b_p_3-log10_b_c)[rcx] movlpd xmm10,qword ptr (log10_b_q_3-log10_b_c)[rcx] mulsd xmm5,xmm7 ; p2 mulsd xmm6,xmm7 ; q2 movlpd xmm11,qword ptr (log10_b_p_4-log10_b_c)[rcx] mulsd xmm9,xmm8 ; p3 mulsd xmm10,xmm8 ; q3 movsd xmm12,xmm8 ; x3 mulsd xmm8,xmm7 ; x5 mulsd xmm11,xmm2 ; p4 mulsd xmm2,qword ptr (log10_b_q_4-log10_b_c)[rcx] ; q4 addsd xmm2,xmm8 ; q4+x5 addsd xmm10,xmm2 ; q3+q4+x5 addsd xmm9,xmm11 ; p3+p4 mulsd xmm7,qword ptr real_0_5 ; 0.5x2 addsd xmm10,xmm6 ; q2+q3+q4+x5 addsd xmm5,xmm9 ; p2+p3+p4 movlpd xmm6,qword ptr real_log2_10_42_l addsd xmm10,xmm4 ; q1+q2+q3+q4+x5 addsd xmm3,xmm5 ; p1+p2+p3+p4 movlpd xmm5,qword ptr real_26_bits movsd xmm2,xmm1 ; x mulsd xmm6,xmm0 mulsd xmm0,qword ptr real_log2_10_42 addsd xmm10,qword ptr (log10_b_q_0-log10_b_c)[rcx] ; q0+q1+q2+q3+q4+x5 addsd xmm3,qword ptr (log10_b_p_0-log10_b_c)[rcx] ; p0+p1+p2+p3+p4 subsd xmm1,xmm7 ; x-0.5x2 addsd xmm6,qword ptr log10_4_d_3_42_l addsd xmm0,qword ptr log10_4_d_3_42 divsd xmm3,xmm10 ; p/q andpd xmm5,xmm1 ; (x-0.5x2)_h subsd xmm2,xmm5 ; x-(x-0.5x2)_h subsd xmm2,xmm7 ; (x-0.5x2)_l mulsd xmm3,xmm12 ; (p/q)*x3 mulsd xmm1,qword ptr d1ln10_26_l ; (x-0.5x2) * (1/ln 10)_l mulsd xmm2,qword ptr d1ln10_26 ; (x-0.5x2)_l * (1/ln 10)_h mulsd xmm5,qword ptr d1ln10_26 ; (x-0.5x2)_h * (1/ln 10)_h addsd xmm2,xmm1 ; (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h addsd xmm2,xmm3 addsd xmm2,xmm6 movsd xmm3,xmm0 addsd xmm0,xmm5 subsd xmm3,xmm0 addsd xmm3,xmm5 addsd xmm3,xmm2 addsd xmm0,xmm3 ; addsd xmm2,xmm5 ; (x-0.5x2)*(1/ln 10) + (p/q)*x3 ; addsd xmm0,xmm2 ret log10_real_s: movlpd xmm2,qword ptr log10_s_p_1 movlpd xmm3,qword ptr log10_s_q_1 mulsd xmm2,xmm1 ; p1 mulsd xmm3,xmm1 ; q1 movsd xmm7,xmm1 ; x movlpd xmm4,qword ptr log10_s_p_2 movlpd xmm5,qword ptr log10_s_q_2 mulsd xmm7,xmm0 ; x3 movsd xmm6,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 movlpd xmm8,qword ptr log10_s_p_3 movlpd xmm9,qword ptr log10_s_q_3 mulsd xmm4,xmm6 ; p2 mulsd xmm5,xmm6 ; q2 movlpd xmm10,qword ptr log10_s_p_4 mulsd xmm8,xmm7 ; p3 mulsd xmm9,xmm7 ; q3 movsd xmm11,xmm7 ; x3 mulsd xmm7,xmm6 ; x5 mulsd xmm10,xmm0 ; p4 mulsd xmm0,qword ptr log10_s_q_4 ; q4 addsd xmm0,xmm7 ; q4+x5 addsd xmm9,xmm0 ; q3+q4+x5 addsd xmm8,xmm10 ; p3+p4 mulsd xmm6,qword ptr real_0_5 ; 0.5x2 addsd xmm9,xmm5 ; q2+q3+q4+x5 addsd xmm4,xmm8 ; p2+p3+p4 addsd xmm9,xmm3 ; q1+q2+q3+q4+x5 addsd xmm2,xmm4 ; p1+p2+p3+p4 movlpd xmm4,qword ptr real_26_bits movsd xmm0,xmm1 ; x addsd xmm9,qword ptr log10_s_q_0 ; q0+q1+q2+q3+q4+x5 addsd xmm2,qword ptr log10_s_p_0 ; p0+p1+p2+p3+p4 subsd xmm1,xmm6 ; x-0.5x2 divsd xmm2,xmm9 ; p/q andpd xmm4,xmm1 ; (x-0.5x2)_h subsd xmm0,xmm4 ; x-(x-0.5x2)_h subsd xmm0,xmm6 ; (x-0.5x2)_l mulsd xmm2,xmm11 ; (p/q)*x3 mulsd xmm1,qword ptr d1ln10_26_l ; (x-0.5x2) * (1/ln 10)_l mulsd xmm0,qword ptr d1ln10_26 ; (x-0.5x2)_l * (1/ln 10)_h mulsd xmm4,qword ptr d1ln10_26 ; (x-0.5x2)_h * (1/ln 10)_h addsd xmm0,xmm1 ; (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h addsd xmm0,xmm2 addsd xmm0,xmm4 ; (x-0.5x2)*(1/ln 10) + (p/q)*x3 ret log10_real_l1: subsd xmm3,qword ptr real_1_0 psubq xmm0,qword ptr qw_1022 log10_real_l1_: movsd xmm1,xmm3 ; x mulsd xmm3,xmm3 ; x2 movlpd xmm2,qword ptr log10_s_p_1 movlpd xmm4,qword ptr log10_s_q_1 mulsd xmm2,xmm1 ; p1 mulsd xmm4,xmm1 ; q1 movsd xmm8,xmm1 ; x cvtdq2pd xmm0,xmm0 movlpd xmm5,qword ptr log10_s_p_2 movlpd xmm6,qword ptr log10_s_q_2 mulsd xmm8,xmm3 ; x3 movsd xmm7,xmm3 ; x2 mulsd xmm3,xmm3 ; x4 movlpd xmm9,qword ptr log10_s_p_3 movlpd xmm10,qword ptr log10_s_q_3 mulsd xmm5,xmm7 ; p2 mulsd xmm6,xmm7 ; q2 movlpd xmm11,qword ptr log10_s_p_4 mulsd xmm9,xmm8 ; p3 mulsd xmm10,xmm8 ; q3 movsd xmm12,xmm8 ; x3 mulsd xmm8,xmm7 ; x5 mulsd xmm11,xmm3 ; p4 mulsd xmm3,qword ptr log10_s_q_4 ; q4 addsd xmm3,xmm8 ; q4+x5 addsd xmm10,xmm3 ; q3+q4+x5 addsd xmm9,xmm11 ; p3+p4 mulsd xmm7,qword ptr real_0_5 ; 0.5x2 addsd xmm10,xmm6 ; q2+q3+q4+x5 addsd xmm5,xmm9 ; p2+p3+p4 movlpd xmm6,qword ptr real_log2_10_42_l addsd xmm10,xmm4 ; q1+q2+q3+q4+x5 addsd xmm2,xmm5 ; p1+p2+p3+p4 movlpd xmm5,qword ptr real_26_bits movsd xmm3,xmm1 ; x mulsd xmm6,xmm0 mulsd xmm0,qword ptr real_log2_10_42 addsd xmm10,qword ptr log10_s_q_0 ; q0+q1+q2+q3+q4+x5 addsd xmm2,qword ptr log10_s_p_0 ; p0+p1+p2+p3+p4 subsd xmm1,xmm7 ; x-0.5x2 divsd xmm2,xmm10 ; p/q andpd xmm5,xmm1 ; (x-0.5x2)_h subsd xmm3,xmm5 ; x-(x-0.5x2)_h subsd xmm3,xmm7 ; (x-0.5x2)_l mulsd xmm2,xmm12 ; (p/q)*x3 mulsd xmm1,qword ptr d1ln10_26_l ; (x-0.5x2) * (1/ln 10)_l mulsd xmm3,qword ptr d1ln10_26 ; (x-0.5x2)_l * (1/ln 10)_h mulsd xmm5,qword ptr d1ln10_26 ; (x-0.5x2)_h * (1/ln 10)_h addsd xmm3,xmm1 ; (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h addsd xmm3,xmm2 addsd xmm3,xmm6 movsd xmm2,xmm0 addsd xmm0,xmm5 subsd xmm2,xmm0 addsd xmm2,xmm5 addsd xmm2,xmm3 addsd xmm0,xmm2 ; addsd xmm3,xmm5 ; (x-0.5x2)*(1/ln 10) + (p/q)*x3 ; addsd xmm0,xmm3 ret log10_real_less_or_equal_0_or_nan: jb log10_real_less_0_or_nan ; x<0.0 | nan movsd xmm0,qword ptr real_m_1_0 divsd xmm0,qword ptr real_0_0 ; yield -inf ret log10_real_less_0_or_nan: jp log10_real_inf_or_nan ; nan movsd xmm0,qword ptr real_0_0 ; yield nan divsd xmm0,xmm0 log10_real_inf_or_nan: ret _T008 ends _T009 segment para 'CODE' public pow_real pow_real: ucomisd xmm0,qword ptr real_0_0 je pow_real_to_zero_or_nan ; y==0.0 | nan ucomisd xmm1,qword ptr real_0_83 jb pow_real_small ; x<0.83 | nan pow_real_not_small: ucomisd xmm1,qword ptr real_1_66 ja pow_real_large ucomisd xmm1,qword ptr real_7_d_6 movlpd xmm2,qword ptr real_1_0 ja pow_real_a_7_d_6 pow_real_between_0_83_and_7_d_6: ucomisd xmm0,qword ptr real_power_exp_too_large ja pow_real_exp_too_large ucomisd xmm0,qword ptr real_power_exp_too_small jb pow_real_exp_too_large_m ucomisd xmm1,xmm2 subsd xmm1,xmm2 lea rcx,log2_b_c lea rdx,log2_s_c cmovb rcx,rdx movsd xmm5,xmm1 ; x mulsd xmm1,xmm1 ; x2 movlpd xmm2,qword ptr (log2_b_p_1-log2_b_c)[rcx] movlpd xmm4,qword ptr (log2_b_q_1-log2_b_c)[rcx] mulsd xmm2,xmm5 ; p1 mulsd xmm4,xmm5 ; q1 movsd xmm8,xmm5 ; x movlpd xmm3,qword ptr (log2_b_p_2-log2_b_c)[rcx] movlpd xmm6,qword ptr (log2_b_q_2-log2_b_c)[rcx] mulsd xmm8,xmm1 ; x3 movsd xmm7,xmm1 ; x2 mulsd xmm1,xmm1 ; x4 movlpd xmm9,qword ptr (log2_b_p_3-log2_b_c)[rcx] movlpd xmm10,qword ptr (log2_b_q_3-log2_b_c)[rcx] mulsd xmm3,xmm7 ; p2 mulsd xmm6,xmm7 ; q2 movlpd xmm11,qword ptr (log2_b_p_4-log2_b_c)[rcx] mulsd xmm9,xmm8 ; p3 mulsd xmm10,xmm8 ; q3 mulsd xmm11,xmm1 ; p4 addsd xmm10,xmm1 ; q3+x4 addsd xmm9,xmm11 ; p3+p4 mulsd xmm7,qword ptr real_0_5 ; 0.5x2 addsd xmm10,xmm6 ; q2+q3+x4 addsd xmm3,xmm9 ; p2+p3+p4 addsd xmm10,xmm4 ; q1+q2+q3+x4 addsd xmm2,xmm3 ; p1+p2+p3+p4 movlpd xmm3,qword ptr real_26_bits movsd xmm1,xmm5 ; x addsd xmm10,qword ptr (log2_b_q_0-log2_b_c)[rcx] ; q0+q1+q2+q3+x4 addsd xmm2,qword ptr (log2_b_p_0-log2_b_c)[rcx] ; p0+p1+p2+p3+p4 subsd xmm5,xmm7 ; x-0.5x2 divsd xmm2,xmm10 ; p/q andpd xmm3,xmm5 ; (x-0.5x2)_h subsd xmm1,xmm3 ; x-(x-0.5x2)_h subsd xmm1,xmm7 ; (x-0.5x2)_l mulsd xmm2,xmm8 ; (p/q)*x3 mulsd xmm5,qword ptr d1ln2_26_l ; (x-0.5x2) * (1/ln 2)_l mulsd xmm1,qword ptr d1ln2_26 ; (x-0.5x2)_l * (1/ln 2)_h mulsd xmm3,qword ptr d1ln2_26 ; (x-0.5x2)_h * (1/ln 2)_h addsd xmm1,xmm5 ; (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h movsd xmm5,xmm1 ; xl addsd xmm1,xmm2 ; xl+r movlpd xmm6,qword ptr real_26_bits addsd xmm1,xmm3 ; xh+xl+r andpd xmm1,xmm6 ; (log2 x)_h andpd xmm6,xmm0 ; y_h subsd xmm3,xmm1 ; xh-(log2 x)_h jmp pow_real_2 pow_real_a_7_d_6: ucomisd xmm0,qword ptr real_4605_0 jae pow_real_overflow ; because 1.1666666666666667407^4605>2^1024 ucomisd xmm0,qword ptr real_m_4834_0 jbe pow_real_underflow ; because 1.1666666666666667407^-4834<2^-1075 subsd xmm1,xmm2 mulsd xmm1,qword ptr real_0_75 lea rcx,log2_b_c lea rdx,log2_s_c movlpd xmm2,qword ptr real_0_25 ucomisd xmm1,xmm2 subsd xmm1,xmm2 cmovb rcx,rdx movsd xmm5,xmm1 ; x mulsd xmm1,xmm1 ; x2 movlpd xmm2,qword ptr (log2_b_p_1-log2_b_c)[rcx] movlpd xmm4,qword ptr (log2_b_q_1-log2_b_c)[rcx] mulsd xmm2,xmm5 ; p1 mulsd xmm4,xmm5 ; q1 movsd xmm8,xmm5 ; x movlpd xmm3,qword ptr (log2_b_p_2-log2_b_c)[rcx] movlpd xmm6,qword ptr (log2_b_q_2-log2_b_c)[rcx] mulsd xmm8,xmm1 ; x3 movsd xmm7,xmm1 ; x2 mulsd xmm1,xmm1 ; x4 movlpd xmm9,qword ptr (log2_b_p_3-log2_b_c)[rcx] movlpd xmm10,qword ptr (log2_b_q_3-log2_b_c)[rcx] mulsd xmm3,xmm7 ; p2 mulsd xmm6,xmm7 ; q2 movlpd xmm11,qword ptr (log2_b_p_4-log2_b_c)[rcx] mulsd xmm9,xmm8 ; p3 mulsd xmm10,xmm8 ; q3 mulsd xmm11,xmm1 ; p4 addsd xmm10,xmm1 ; q3+x4 addsd xmm9,xmm11 ; p3+p4 mulsd xmm7,qword ptr real_0_5 ; 0.5x2 addsd xmm10,xmm6 ; q2+q3+x4 addsd xmm3,xmm9 ; p2+p3+p4 addsd xmm10,xmm4 ; q1+q2+q3+x4 addsd xmm2,xmm3 ; p1+p2+p3+p4 movlpd xmm3,qword ptr real_26_bits movsd xmm1,xmm5 ; x addsd xmm10,qword ptr (log2_b_q_0-log2_b_c)[rcx] ; q0+q1+q2+q3+x4 addsd xmm2,qword ptr (log2_b_p_0-log2_b_c)[rcx] ; p0+p1+p2+p3+p4 subsd xmm5,xmm7 ; x-0.5x2 divsd xmm2,xmm10 ; p/q andpd xmm3,xmm5 ; (x-0.5x2)_h subsd xmm1,xmm3 ; x-(x-0.5x2)_h subsd xmm1,xmm7 ; (x-0.5x2)_l mulsd xmm2,xmm8 ; (p/q)*x3 mulsd xmm5,qword ptr d1ln2_26_l ; (x-0.5x2) * (1/ln 2)_l mulsd xmm1,qword ptr d1ln2_26 ; (x-0.5x2)_l * (1/ln 2)_h mulsd xmm3,qword ptr d1ln2_26 ; (x-0.5x2)_h * (1/ln 2)_h movlpd xmm6,qword ptr log2_4_d_3_53 movsd xmm7,xmm3 ; xh addsd xmm3,xmm6 ; xh+(log2 4/3)_h addsd xmm1,xmm5 ; (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h subsd xmm6,xmm3 ; (log2 4/3)_h-(xh+(log2 4/3)_h) addsd xmm6,xmm7 ; ((log2 4/3)_h-(xh+(log2 4/3)_h))+xh addsd xmm1,qword ptr log2_4_d_3_53_l ; xl+(log2 4/3)_l addsd xmm1,xmm6 ; (x+log2 4/3)_l movsd xmm5,xmm1 ; xl addsd xmm1,xmm2 ; xl+r movlpd xmm6,qword ptr real_26_bits addsd xmm1,xmm3 ; xh+xl+r andpd xmm1,xmm6 ; (log2 x)_h andpd xmm6,xmm0 ; y_h subsd xmm3,xmm1 ; xh-(log2 x)_h jmp pow_real_2 pow_real_small: ucomisd xmm1,qword ptr real_2_p_m_1022 jb pow_real_negative_zero_denormalized_or_nan pow_real_small_: ucomisd xmm0,qword ptr real_4000_0 jae pow_real_underflow ; because 0.83^4000<2^-1075 ucomisd xmm0,qword ptr real_m_3810_0 ja log2_real_ jmp pow_real_overflow ; because 0.83^-3810>2^1024 pow_real_large: ucomisd xmm1,qword ptr real_max ja pow_real_inf ucomisd xmm0,qword ptr real_1401_0 jae pow_real_overflow ; because 1.66^1401>2^1024 ucomisd xmm0,qword ptr real_m_1471_0 jbe pow_real_underflow ; because 1.66^-1471<2^-1075 log2_real_: movlpd xmm2,qword ptr mask_significand andpd xmm2,xmm1 psrlq xmm1,52 log2_real__: movlpd xmm3,qword ptr real_1_0 movlpd xmm4,qword ptr real_0_5 orpd xmm3,xmm2 orpd xmm4,xmm2 ucomisd xmm3,qword ptr real_1_66 movlpd xmm5,qword ptr real_1_0 ja log2_real_l1 ucomisd xmm3,qword ptr real_7_d_6 ja pow_real_g_7_d_6 log2_real_g1: subsd xmm3,xmm5 psubq xmm1,qword ptr qw_1023 movsd xmm6,xmm3 ; x mulsd xmm3,xmm3 ; x2 movlpd xmm2,qword ptr log2_b_p_1 movlpd xmm5,qword ptr log2_b_q_1 mulsd xmm2,xmm6 ; p1 mulsd xmm5,xmm6 ; q1 movsd xmm9,xmm6 ; x cvtdq2pd xmm4,xmm1 movlpd xmm1,qword ptr log2_b_p_2 movlpd xmm7,qword ptr log2_b_q_2 mulsd xmm9,xmm3 ; x3 movsd xmm8,xmm3 ; x2 mulsd xmm3,xmm3 ; x4 movlpd xmm10,qword ptr log2_b_p_3 movlpd xmm11,qword ptr log2_b_q_3 mulsd xmm1,xmm8 ; p2 mulsd xmm7,xmm8 ; q2 movlpd xmm12,qword ptr log2_b_p_4 mulsd xmm10,xmm9 ; p3 mulsd xmm11,xmm9 ; q3 mulsd xmm12,xmm3 ; p4 addsd xmm11,xmm3 ; q3+x4 addsd xmm10,xmm12 ; p3+p4 mulsd xmm8,qword ptr real_0_5 ; 0.5x2 addsd xmm11,xmm7 ; q2+q3+x4 addsd xmm1,xmm10 ; p2+p3+p4 addsd xmm11,xmm5 ; q1+q2+q3+x4 addsd xmm2,xmm1 ; p1+p2+p3+p4 movlpd xmm3,qword ptr real_26_bits movsd xmm1,xmm6 ; x addsd xmm11,qword ptr log2_b_q_0 ; q0+q1+q2+q3+x4 addsd xmm2,qword ptr log2_b_p_0 ; p0+p1+p2+p3+p4 log2_real_gl: subsd xmm6,xmm8 ; x-0.5x2 divsd xmm2,xmm11 ; p/q andpd xmm3,xmm6 ; (x-0.5x2)_h subsd xmm1,xmm3 ; x-(x-0.5x2)_h subsd xmm1,xmm8 ; (x-0.5x2)_l mulsd xmm2,xmm9 ; (p/q)*x3 mulsd xmm6,qword ptr d1ln2_26_l ; (x-0.5x2) * (1/ln 2)_l mulsd xmm1,qword ptr d1ln2_26 ; (x-0.5x2)_l * (1/ln 2)_h mulsd xmm3,qword ptr d1ln2_26 ; (x-0.5x2)_h * (1/ln 2)_h addsd xmm1,xmm6 ; (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h movsd xmm5,xmm1 ; xl addsd xmm1,xmm2 ; xl+r movlpd xmm6,qword ptr real_26_bits addsd xmm1,xmm3 ; xh+xl+r addsd xmm1,xmm4 ; e+xh+xl+r andpd xmm1,xmm6 ; (log2 x)_h andpd xmm6,xmm0 ; y_h subsd xmm4,xmm1 ; e-(log2 x)_h addsd xmm3,xmm4 ; e+xh-(log2 x)_h jmp pow_real_2 log2_real_l1: subsd xmm4,xmm5 psubq xmm1,qword ptr qw_1022 movsd xmm6,xmm4 ; x mulsd xmm4,xmm4 ; x2 movlpd xmm2,qword ptr log2_s_p_1 movlpd xmm5,qword ptr log2_s_q_1 mulsd xmm2,xmm6 ; p1 mulsd xmm5,xmm6 ; q1 movsd xmm9,xmm6 ; x movlpd xmm3,qword ptr log2_s_p_2 movlpd xmm7,qword ptr log2_s_q_2 mulsd xmm9,xmm4 ; x3 movsd xmm8,xmm4 ; x2 mulsd xmm4,xmm4 ; x4 movlpd xmm10,qword ptr log2_s_p_3 movlpd xmm11,qword ptr log2_s_q_3 mulsd xmm3,xmm8 ; p2 mulsd xmm7,xmm8 ; q2 movlpd xmm12,qword ptr log2_s_p_4 mulsd xmm10,xmm9 ; p3 mulsd xmm11,xmm9 ; q3 mulsd xmm12,xmm4 ; p4 addsd xmm11,xmm4 ; q3+x4 addsd xmm10,xmm12 ; p3+p4 mulsd xmm8,qword ptr real_0_5 ; 0.5x2 cvtdq2pd xmm4,xmm1 addsd xmm11,xmm7 ; q2+q3+x4 addsd xmm3,xmm10 ; p2+p3+p4 addsd xmm11,xmm5 ; q1+q2+q3+x4 addsd xmm2,xmm3 ; p1+p2+p3+p4 movlpd xmm3,qword ptr real_26_bits movsd xmm1,xmm6 ; x addsd xmm11,qword ptr log2_s_q_0 ; q0+q1+q2+q3+x4 addsd xmm2,qword ptr log2_s_p_0 ; p0+p1+p2+p3+p4 jmp log2_real_gl pow_real_to_zero_or_nan: jp pow_real_to_nan movlpd xmm0,qword ptr real_1_0 ret pow_real_negative_zero_denormalized_or_nan: ucomisd xmm1,qword ptr real_0_0 jbe pow_real_zero_negative_or_nan ; denormalized > 0.0 pow_real_denormalized: ucomisd xmm0,qword ptr real_1_052 jae pow_real_underflow ; because (2^-1022)^1.052<2^-1075 ucomisd xmm0,qword ptr real_m_1_052 jbe pow_real_overflow ; because (2^-1022)^-1.052>2^1075 mulsd xmm1,qword ptr real_2_p_55 movlpd xmm2,qword ptr mask_significand andpd xmm2,xmm1 movq xmm5,qword ptr qw_55 psrlq xmm1,52 psubq xmm1,xmm5 jmp log2_real__ pow_real_zero_negative_or_nan: je pow_real_zero_or_nan movlpd xmm2,qword ptr mask_all_except_sign andpd xmm2,xmm0 ; |y| ucomisd xmm2,qword ptr real_2_p_53 jae pow_real_negative_to_large_or_inf ucomisd xmm2,qword ptr real_1_0 jb pow_real_negative_to_non_int movq xmm3,qword ptr round_c psrlq xmm2,52 psubq xmm3,xmm2 movq xmm4,qword ptr mask_all_one movq xmm5,qword ptr mask_all_one_except_last psllq xmm4,xmm3 psllq xmm5,xmm3 andpd xmm4,xmm0 andpd xmm5,xmm0 ; 1 -> 2 and -1 -> -2 ucomisd xmm4,xmm0 jne pow_real_negative_to_non_int ucomisd xmm5,xmm0 je pow_real_negative_to_even_int pow_real_negative_to_odd_int: call pow_real_negative_to_even_int movlpd xmm1,qword ptr mask_sign xorpd xmm0,xmm1 ret pow_real_negative_to_even_int: movlpd xmm2,qword ptr mask_all_except_sign andpd xmm1,xmm2 ; |x| ucomisd xmm1,qword ptr real_0_83 ; x>=0.83 jae pow_real_not_small ucomisd xmm1,qword ptr real_2_p_m_1022 jae pow_real_small_ jmp pow_real_denormalized pow_real_negative_to_large_or_inf: movlpd xmm2,qword ptr mask_all_except_sign andpd xmm1,xmm2 ; |x| ucomisd xmm1,qword ptr real_0_83 jb pow_real_small_to_large_or_inf ; because 0.83^(2^53) too large or small ucomisd xmm1,qword ptr real_7_d_6 movlpd xmm2,qword ptr real_1_0 ja pow_real_large_to_large_or_inf ; because 1.16^(2^53) too large or small jmp pow_real_between_0_83_and_7_d_6 pow_real_negative_to_non_int: ucomisd xmm1,qword ptr real_m_max jb pow_real_m_inf_to_non_int ; x==-inf movlpd xmm0,qword ptr real_0_0 divsd xmm0,xmm0 ret pow_real_zero_or_nan: jp pow_real_nan_to_non_zero pow_real_zero: movlpd xmm2,qword ptr real_1_0 orpd xmm2,xmm1 ; 0.0 -> 1.0 and -0.0 -> -1.0 ucomisd xmm2,qword ptr real_0_0 jb pow_real_m_zero pow_real_small_to_large_or_inf: pow_real_m_zero_to_non_odd_int: ucomisd xmm0,qword ptr real_0_0 jb pow_real_overflow pow_real_inf_to_negative: pow_real_underflow: movlpd xmm0,qword ptr real_0_0 ret pow_real_m_inf_to_non_int: pow_real_large_to_large_or_inf: ucomisd xmm0,qword ptr real_0_0 jb pow_real_underflow pow_real_overflow: movlpd xmm0,qword ptr real_1_0 divsd xmm0,qword ptr real_0_0 ; inf ret pow_real_m_zero: movlpd xmm2,qword ptr mask_all_except_sign andpd xmm2,xmm0 ; |y| ucomisd xmm2,qword ptr real_2_p_53 jae pow_real_m_zero_to_non_odd_int ucomisd xmm2,qword ptr real_m_1_0 jb pow_real_m_zero_to_non_odd_int movq xmm4,qword ptr round_c psrlq xmm2,52 psubq xmm4,xmm2 movq xmm5,qword ptr mask_all_one_except_last psllq xmm5,xmm4 andpd xmm5,xmm0 ; 1 -> 2 and -1 -> -2 ucomisd xmm5,xmm0 je pow_real_m_zero_to_non_odd_int ucomisd xmm0,xmm3 jb pow_real_m_overflow movsd xmm0,xmm1 ; -0.0 ret pow_real_m_overflow: movlpd xmm0,qword ptr real_m_1_0 divsd xmm0,qword ptr real_0_0 ; -inf ret pow_real_nan_to_non_zero: pow_real_to_nan: addsd xmm0,xmm1 ret pow_real_inf: ucomisd xmm0,qword ptr real_0_0 jb pow_real_inf_to_negative movsd xmm0,xmm1 ret pow_real_exp_too_large: ucomisd xmm1,xmm2 je power_one_to_large_or_inf ja pow_real_overflow jmp pow_real_underflow pow_real_exp_too_large_m: ucomisd xmm1,xmm2 je power_one_to_large_or_inf_m jb pow_real_overflow jmp pow_real_underflow power_one_to_large_or_inf: ucomisd xmm0,qword ptr real_max ja power_one_to_inf movsd xmm0,xmm1 ret power_one_to_large_or_inf_m: ucomisd xmm0,qword ptr real_m_max jb power_one_to_inf_m movsd xmm0,xmm1 ret power_one_to_inf_m: power_one_to_inf: subsd xmm0,xmm0 ret pow_real_g_7_d_6: subsd xmm3,xmm5 mulsd xmm3,qword ptr real_0_75 lea rcx,log2_b_c lea rdx,log2_s_c movlpd xmm4,qword ptr real_0_25 ucomisd xmm3,xmm4 subsd xmm3,xmm4 cmovb rcx,rdx psubq xmm1,qword ptr qw_1023 movsd xmm6,xmm3 ; x mulsd xmm3,xmm3 ; x2 movlpd xmm2,qword ptr (log2_b_p_1-log2_b_c)[rcx] movlpd xmm5,qword ptr (log2_b_q_1-log2_b_c)[rcx] mulsd xmm2,xmm6 ; p1 mulsd xmm5,xmm6 ; q1 movsd xmm9,xmm6 ; x cvtdq2pd xmm4,xmm1 movlpd xmm1,qword ptr (log2_b_p_2-log2_b_c)[rcx] movlpd xmm7,qword ptr (log2_b_q_2-log2_b_c)[rcx] mulsd xmm9,xmm3 ; x3 movsd xmm8,xmm3 ; x2 mulsd xmm3,xmm3 ; x4 movlpd xmm10,qword ptr (log2_b_p_3-log2_b_c)[rcx] movlpd xmm11,qword ptr (log2_b_q_3-log2_b_c)[rcx] mulsd xmm1,xmm8 ; p2 mulsd xmm7,xmm8 ; q2 movlpd xmm12,qword ptr (log2_b_p_4-log2_b_c)[rcx] mulsd xmm10,xmm9 ; p3 mulsd xmm11,xmm9 ; q3 mulsd xmm12,xmm3 ; p4 addsd xmm11,xmm3 ; q3+x4 addsd xmm10,xmm12 ; p3+p4 mulsd xmm8,qword ptr real_0_5 ; 0.5x2 addsd xmm11,xmm7 ; q2+q3+x4 addsd xmm1,xmm10 ; p2+p3+p4 addsd xmm11,xmm5 ; q1+q2+q3+x4 addsd xmm2,xmm1 ; p1+p2+p3+p4 movlpd xmm3,qword ptr real_26_bits movsd xmm1,xmm6 ; x addsd xmm11,qword ptr (log2_b_q_0-log2_b_c)[rcx] ; q0+q1+q2+q3+x4 addsd xmm2,qword ptr (log2_b_p_0-log2_b_c)[rcx] ; p0+p1+p2+p3+p4 subsd xmm6,xmm8 ; x-0.5x2 addsd xmm4,qword ptr log2_4_d_3_42 ; e+(log2 4/3)_h divsd xmm2,xmm11 ; p/q andpd xmm3,xmm6 ; (x-0.5x2)_h subsd xmm1,xmm3 ; x-(x-0.5x2)_h subsd xmm1,xmm8 ; (x-0.5x2)_l mulsd xmm2,xmm9 ; (p/q)*x3 mulsd xmm6,qword ptr d1ln2_26_l ; (x-0.5x2) * (1/ln 2)_l mulsd xmm1,qword ptr d1ln2_26 ; (x-0.5x2)_l * (1/ln 2)_h mulsd xmm3,qword ptr d1ln2_26 ; (x-0.5x2)_h * (1/ln 2)_h movsd xmm7,xmm3 ; xh addsd xmm3,xmm4 ; xh+e+(log2 4/3)_h addsd xmm1,xmm6 ; (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h subsd xmm4,xmm3 ; e+(log2 4/3)_h-(xh+e+(log2 4/3)_h) addsd xmm4,xmm7 ; (e+(log2 4/3)_h-(xh+e+(log2 4/3)_h))+xh addsd xmm1,qword ptr log2_4_d_3_42_l ; xl+(log2 4/3)_l addsd xmm1,xmm4 ; (x+log2 4/3)_l movsd xmm5,xmm1 ; xl addsd xmm1,xmm2 ; xl+r movlpd xmm6,qword ptr real_26_bits addsd xmm1,xmm3 ; e+xh+xl+r andpd xmm1,xmm6 ; (log2 x)_h andpd xmm6,xmm0 ; y_h subsd xmm4,xmm1 ; e-(log2 x)_h addsd xmm3,xmm4 ; e+xh-(log2 x)_h ; jmp pow_real_2 pow_real_2: ; xmm0 = y ; xmm1 = (log2 x)_h ; xmm2 = r ; xmm3 = (e+)xh-(log2 x)_h ; xmm5 = xl ; xmm6 = y_h movsd xmm7,xmm0 ; y subsd xmm0,xmm6 ; y_l mulsd xmm6,xmm1 ; p_h = y_h*(log2 x)_h addsd xmm3,xmm2 ; xh+r-(log2 x)_h mulsd xmm0,xmm1 ; y_l*(log2 x)_h addsd xmm3,xmm5 ; (log2 x)_l mulsd xmm3,xmm7 ; y*(log2 x)_l addsd xmm0,xmm3 ; p_l movsd xmm7,xmm0 ; p_l addsd xmm0,xmm6 ; p exp2: ucomisd xmm0,qword ptr real_m_0_5 jb exp2_l_n ucomisd xmm0,qword ptr real_0_5 ja exp2_l exp2_l_: ucomisd xmm0,qword ptr real_m_0_25 jbe exp2_l_m_0_25 ucomisd xmm0,qword ptr real_0_25 jae exp2_g_0_25 ucomisd xmm0,qword ptr real_0_0 lea rcx,exp2_p0_c lea rdx,exp2_m0_c movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 cmovb rcx,rdx exp2_: movlpd xmm13,qword ptr (exp2_p0_2-exp2_p0_c)[rcx] movlpd xmm14,qword ptr (exp2_p0_4-exp2_p0_c)[rcx] movsd xmm2,xmm0 ; x2 mulsd xmm0,xmm0 ; x4 mulsd xmm13,xmm2 ; p2 movsd xmm3,xmm1 ; x mulsd xmm1,xmm2 ; x3 movlpd xmm15,qword ptr (exp2_p0_3-exp2_p0_c)[rcx] mulsd xmm14,xmm0 ; p4 mulsd xmm15,xmm1 ; p3 movsd xmm4,xmm0 ; x4 mulsd xmm0,xmm0 ; x8 movsd xmm5,xmm2 ; x2 mulsd xmm2,xmm1 ; x5 mulsd xmm5,xmm4 ; x6 mulsd xmm1,xmm4 ; x7 mulsd xmm4,xmm2 ; x9 mulsd xmm0,qword ptr (exp2_p0_8-exp2_p0_c)[rcx] ; p8 mulsd xmm2,qword ptr (exp2_p0_5-exp2_p0_c)[rcx] ; p5 mulsd xmm5,qword ptr (exp2_p0_6-exp2_p0_c)[rcx] ; p6 mulsd xmm1,qword ptr (exp2_p0_7-exp2_p0_c)[rcx] ; p7 mulsd xmm4,qword ptr (exp2_p0_9-exp2_p0_c)[rcx] ; p9 addsd xmm0,xmm4 ; p9+p8 movlpd xmm9,qword ptr real_26_bits andpd xmm9,xmm6 ; xh_h mulsd xmm3,qword ptr (exp2_p0_1l-exp2_p0_c)[rcx] ; x*c1l addsd xmm0,xmm1 ; p9+p8+p7 subsd xmm6,xmm9 ; xh_l mulsd xmm9,qword ptr (exp2_p0_1h-exp2_p0_c)[rcx] ; p1h=xh_h*c1h addsd xmm0,xmm5 ; p9+p8+p7+p6 movlpd xmm1,qword ptr (exp2_p0_0h-exp2_p0_c)[rcx] addsd xmm6,xmm7 ; xh_l+x_l movsd xmm4,xmm9 ; p1h addsd xmm9,xmm1 ; p1h+c0h addsd xmm0,xmm2 ; p9+p8+p7+p6+p5 mulsd xmm6,qword ptr (exp2_p0_1h-exp2_p0_c)[rcx] ; (xh_l+x_l)*c1h subsd xmm1,xmm9 ; c0h-(p1h+c0h) addsd xmm0,xmm14 ; p9+p8+p7+p6+p5+p4 addsd xmm3,xmm6 ; (xh_l+x_l)*c1h+x*c1l addsd xmm1,xmm4 ; (c0h-(p1h+c0h))+p1h addsd xmm0,xmm15 ; p9+p8+p7+p6+p5+p4+p3 addsd xmm1,xmm3 addsd xmm0,xmm13 ; p9+p8+p7+p6+p5+p4+p3+p2 addsd xmm0,qword ptr (exp2_p0_0l-exp2_p0_c)[rcx] addsd xmm0,xmm1 addsd xmm0,xmm9 ret exp2_l_m_0_25: movlpd xmm1,qword ptr real_0_25 addsd xmm0,xmm1 addsd xmm6,xmm1 lea rcx,exp2_m0_25_c movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 jmp exp2_ exp2_g_0_25: movlpd xmm1,qword ptr real_0_25 subsd xmm0,xmm1 subsd xmm6,xmm1 lea rcx,exp2_p0_25_c movsd xmm1,xmm0 ; x mulsd xmm0,xmm0 ; x2 jmp exp2_ exp2_l_n: movlpd xmm1,qword ptr real_m_0_5 movq xmm4,qword ptr m_round_c jmp exp2_l_pn exp2_l: movlpd xmm1,qword ptr real_0_5 movq xmm4,qword ptr round_c exp2_l_pn: addsd xmm1,xmm0 movq xmm2,xmm1 psrlq xmm1,52 psubq xmm4,xmm1 movq xmm1,qword ptr mask_all_one psllq xmm1,xmm4 andpd xmm1,xmm2 subsd xmm6,xmm1 movsd xmm0,xmm7 cvtpd2dq xmm8,xmm1 ucomisd xmm1,qword ptr qword ptr real_1023 ja exp2_overflow0 ucomisd xmm1,qword ptr qword ptr real_m_1022 jb exp2_underflow0 movq xmm9,qword ptr qw_1023 addsd xmm0,xmm6 paddq xmm8,xmm9 psllq xmm8,52 call exp2_l_ mulsd xmm0,xmm8 ret exp2_overflow0: ucomisd xmm1,qword ptr qword ptr real_1025 ja exp2_overflow movq xmm9,qword ptr qw_1021 addsd xmm0,xmm6 paddq xmm8,xmm9 psllq xmm8,52 call exp2_l_ mulsd xmm0,xmm8 mulsd xmm0,qword ptr real_4_0 ret exp2_overflow: movlpd xmm0,qword ptr qword ptr real_2_p_1023 mulsd xmm0,xmm0 ret exp2_underflow0: ucomisd xmm1,qword ptr qword ptr real_m_1076 jbe exp2_underflow movq xmm9,qword ptr qw_1078 addsd xmm0,xmm6 paddq xmm8,xmm9 psllq xmm8,52 call exp2_l_ mulsd xmm0,xmm8 mulsd xmm0,qword ptr real_2_p_m_55 ret exp2_underflow: movlpd xmm0,qword ptr qword ptr real_0_0 ret _T009 ends _DATA segment real_13_bits: dq 0ffffff0000000000h real_14_bits: dq 0ffffff8000000000h real_17_bits: dq 0fffffff000000000h real_18_bits: dq 0fffffff800000000h real_21_bits: dq 0ffffffff00000000h real_25_bits: dq 0fffffffff0000000h real_26_bits: dq 0fffffffff8000000h real_27_bits: dq 0fffffffffc000000h real_34_bits: dq 0fffffffffff80000h real_39_bits: dq 0ffffffffffffc000h real_40_bits: dq 0ffffffffffffe000h real_47_bits: dq 0ffffffffffffffc0h real_48_bits: dq 0ffffffffffffffe0h real_49_bits: dq 0fffffffffffffff0h real_50_bits: dq 0fffffffffffffff8h real_51_bits: dq 0fffffffffffffffch real_abs_40_bits: dq 07fffffffffffe000h real_abs_39_bits: dq 07fffffffffffc000h real_0_0: dq 0.0 real_0_25: dq 0.25 real_m_0_25: dq -0.25 real_0_5: dq 0.5 real_m_0_5: dq -0.5 real_1_0: dq 1.0 real_m_1_0: dq -1.0 real_1_25: dq 1.25 real_m_1_25: dq -1.25 real_1_5: dq 1.5 real_m_1_5: dq -1.5 real_2_0: dq 2.0 real_m_2_0: dq -2.0 real_3_0: dq 3.0 real_m_3_0: dq -3.0 real_4_0: dq 4.0 real_m_4_0: dq -4.0 real_5_0: dq 5.0 real_m_5_0: dq -5.0 real_2_p_m_11: dq 4.8828125E-4 real_2_p_m_12: dq 2.44140625E-4 real_m_2_p_m_12: dq -2.44140625E-4 real_2_p_m_13: dq 1.220703125E-4 real_2_p_m_16: dq 1.52587890625E-5 real_m_2_p_m_16: dq -1.52587890625E-5 real_2_p_m_18: dq 3.814697265625E-6 real_2_p_m_31: dq 4.656612873077392578125E-10 real_0_4: dq 0.4 real_m_0_4: dq -0.4 real_0_125: dq 0.125 real_0_675: dq 0.675 real_m_0_675: dq -0.675 real_0_9920: dq 0.9920 real_0_54000000017867999524: dq 0.54000000017867999524 real_m_0_54000000017867999524: dq -0.54000000017867999524 real_0_03125: dq 0.03125 real_pi_d_2_m_0_03125: dq 1.5395463267948965579 real_0_58: dq 0.58 real_m_0_58: dq -0.58 real_0_54: dq 0.54 real_0_76: dq 0.76 real_0_65000000004061742054: dq 0.65000000004061742054 real_0_26: dq 0.26 real_m_0_26: dq -0.26 real_0_70: dq 0.70 real_m_0_70: dq -0.70 real_1_4: dq 1.4 real_m_1_4: dq -1.4 ;real_0_7025: ; dq 0.7025 ;real_1_405: ; dq 1.405 real_0_8243: dq 0.82436063535006407342 real_1_6487: dq 1.6487212707001281468 real_0_833: dq 0.833 real_1_666: dq 1.666 real_7_d_6: dq 1.1666666666666667407 real_0_75: dq 0.75 ln_4_d_3_53: dq 2.8768207245178090137E-1 ln_4_d_3_53_l: dq 2.6071606164425639761E-17 ln_4_d_3_42: dq 2.8768207245173016417E-1 ln_4_d_3_42_l: dq 5.0763263831534079404E-14 log10_4_d_3_53: dq 1.2493873660829994676E-1 log10_4_d_3_53_l: dq 6.3704258509422005489E-18 log10_4_d_3_42: dq 1.2493873660829990513E-1 log10_4_d_3_42_l: dq 4.8003789274385573126E-17 log2_4_d_3_53: dq 4.1503749927884381332E-1 log2_4_d_3_53_l: dq 5.2244900613901090572E-18 log2_4_d_3_42: dq 4.1503749927881017356E-1 log2_4_d_3_42_l: dq 3.3644982136203633607E-14 mask_significand: dq 0000fffffffffffffh real_1_66: dq 1.66 real_0_83: dq 0.83 real_pi: dq 3.1415926535897931160 real_m_pi: dq -3.1415926535897931160 real_pi_l: dq 1.2246467991473532072E-16 real_m_pi_l: dq -1.2246467991473532072E-16 real_pi_d_2: dq 1.5707963267948965579 real_pi_d_2_l: dq 6.1232339957367660359E-17 real_m_pi_d_2: dq -1.5707963267948965579 real_m_pi_d_2_l: dq -6.1232339957367660359E-17 real_pi_m_1_d_2: dq 1.07079632679489655800 real_pi_d_4: dq 7.8539816339744827900E-1 real_m_pi_d_4: dq -7.8539816339744827900E-1 real_pi_d_4_l: dq 3.0616169978683830179E-17 real_m_pi_d_4_l: dq -3.0616169978683830179E-17 real_pi_p_0_375_d_4: dq 8.7914816339744830962E-1 real_pi_p_0_875_d_4: dq 1.0041481633974482790 real_pi_p_1_5_d_4: dq 1.1603981633974483096 real_3_pi_d_4: dq 2.3561944901923449288 real_m_3_pi_d_4: dq -2.3561944901923449288 real_5_pi_d_4: dq 3.9269908169872413950 real_m_5_pi_d_4: dq -3.9269908169872413950 real_7_pi_d_4: dq 5.4977871437821379530 real_m_7_pi_d_4: dq -5.4977871437821379530 real_9_pi_d_4: dq 7.0685834705770345110 real_m_9_pi_d_4: dq -7.0685834705770345110 real_3_pi_d_2: dq 4.7123889803846896740 real_m_3_pi_d_2: dq -4.7123889803846896740 real_3_pi_d_2_l: dq 1.8369701987210296875E-16 real_m_3_pi_d_2_l: dq -1.8369701987210296875E-16 real_2_pi: dq 6.2831853071795862320 real_2_pi_l: dq 2.4492935982947064143E-16 real_m_2_pi_l: dq -2.4492935982947064143E-16 real_4_d_pi: dq 1.2732395447351627649 real_pi_d_4_26: dq 7.8539815545082092285E-1 real_pi_d_4_26_26: dq 7.9466273561479283671E-9 real_pi_d_4_52_l: dq 3.0616169978683830179E-17 real_36825084_pi: dq 115689413.36222703755 real_m_36825084_pi: dq -115689413.36222703755 real_36825084_pi_27: dq 115689413.0 real_36825084_pi_27_27: dq 3.6222703754901885986E-1 real_36825084_pi_54_l: dq 1.3588030639188803060E-17 real_pi_d_2_m_1_0_52: dq 5.7079632679489655800E-1 real_1_0_m_pi_d_2_52: dq -5.7079632679489655800E-1 real_pi_d_2_m_1_0_52_l: dq 6.1232339957367660359E-17 real_m_pi_d_2_m_1_0_52_l: dq -6.1232339957367660359E-17 real_pi_d_2_p_1_0: dq 2.57079632679489655800 real_pi_d_2_p_1_0_l: dq 6.1232339957367660359E-17 real_m_pi_d_2_p_1_0_l: dq -6.1232339957367660359E-17 real_0_338: dq 0.338 real_m_0_338: dq -0.338 real_0_542: dq 0.542 real_m_0_542: dq -0.542 real_0_699: dq 0.699 real_m_0_699: dq -0.699 real_0_89: dq 0.89 real_m_0_89: dq -0.89 real_1_04: dq 1.04 real_m_1_04: dq -1.04 real_1_18: dq 1.18 real_m_1_18: dq -1.18 real_0_5_pi_m_1_18: dq 3.9079632679489667568E-1 real_1_18_m_0_5_pi: dq -3.9079632679489667568E-1 real_0_5_pi_m_1_04: dq 5.3079632679489663349E-1 real_1_04_m_0_5_pi: dq -5.3079632679489663349E-1 real_0_5_pi_m_0_89: dq 6.8079632679489665570E-1 real_0_89_m_0_5_pi: dq -6.8079632679489665570E-1 real_pi_m_1_18: dq 1.9615926535897934002 real_n_pi_m_1_18: dq -1.9615926535897934002 real_pi_m_1_04: dq 2.1015926535897930805 real_n_pi_m_1_04: dq -2.1015926535897930805 real_pi_m_0_89: dq 2.2515926535897934357 real_n_pi_m_0_89: dq -2.2515926535897934357 real_pi_m_0_699: dq 2.4425926535897932723 real_n_pi_m_0_699: dq -2.4425926535897932723 real_pi_m_0_542: dq 2.5995926535897933007 real_n_pi_m_0_542: dq -2.5995926535897933007 real_pi_m_0_338: dq 2.8035926535897930378 real_n_pi_m_0_338: dq -2.8035926535897930378 real_pi_p_0_338: dq 3.4795926535897931942 real_n_pi_p_0_338: dq -3.4795926535897931942 real_pi_p_0_542: dq 3.6835926535897933753 real_n_pi_p_0_542: dq -3.6835926535897933753 real_pi_p_0_699: dq 3.8405926535897934038 real_n_pi_p_0_699: dq -3.8405926535897934038 real_pi_p_0_89: dq 4.0315926535897936844 real_n_pi_p_0_89: dq -4.0315926535897936844 real_pi_p_1_04: dq 4.1815926535897931515 real_n_pi_p_1_04: dq -4.1815926535897931515 real_pi_p_1_18: dq 4.3215926535897928318 real_n_pi_p_1_18: dq -4.3215926535897928318 real_2pi_m_1_18: dq 5.1031853071795865162 real_n_2pi_m_1_18: dq -5.1031853071795865162 real_2pi_m_1_04: dq 5.2431853071795861965 real_n_2pi_m_1_04: dq -5.2431853071795861965 real_2pi_m_0_89: dq 5.3931853071795865517 real_n_2pi_m_0_89: dq -5.3931853071795865517 real_2pi_m_0_699: dq 5.5841853071795863883 real_n_2pi_m_0_699: dq -5.5841853071795863883 real_2pi_m_0_542: dq 5.7411853071795864167 real_n_2pi_m_0_542: dq -5.7411853071795864167 real_2pi_m_0_338: dq 5.9451853071795861538 real_n_2pi_m_0_338: dq -5.9451853071795861538 real_2pi_p_0_338: dq 6.6211853071795863102 real_n_2pi_p_0_338: dq -6.6211853071795863102 real_2pi_p_0_542: dq 6.8251853071795869354 real_n_2pi_p_0_542: dq -6.8251853071795869354 real_2pi_p_0_699: dq 6.9821853071795860757 real_n_2pi_p_0_699: dq -6.9821853071795860757 real_2pi_p_0_89: dq 7.1731853071795868004 real_n_2pi_p_0_89: dq -7.1731853071795868004 atan_0_5_53: dq 4.6364760900080609352E-1 m_atan_0_5_53: dq -4.6364760900080609352E-1 atan_0_5_53_l: dq 2.2698777452961687092E-17 atan_sqrt_0_5: dq 6.1547970867038737097E-1 m_atan_sqrt_0_5: dq -6.1547970867038737097E-1 atan_sqrt_0_5_l: dq -2.9904856561351187768E-17 real_h_pi_m_atan_s_2_53: dq 6.1547970867038737097E-1 real_h_pi_m_atan_s_2_53_l: dq -2.9904856561351187768E-17 real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53: dq 3.2606526883842570363 real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53_l: dq 3.5657102106448616432E-17 real_3_atan_sqrt_2_m_sqrt_2_m_1_5_pi_m_53_l: dq -3.5657102106448616432E-17 atan_sqrt_2: dq 9.5531661812450929805E-1 m_atan_sqrt_2: dq -9.5531661812450929805E-1 atan_sqrt_2_l: dq -1.9885105943796805915E-17 real_h_pi_m_atan_2_52: dq 4.6364760900080603800E-1 real_h_pi_m_atan_2_52_l: dq 7.8209928684219507951E-17 real_2_p_2_5_pi_m_5_atan_2_53: dq 4.3182380450040307451 real_2_p_2_5_pi_m_5_atan_2_53_l: dq -1.6406186889148070581E-16 real_5_atan_2_m_2_m_2_5_pi_53_l: dq 1.6406186889148070581E-16 atan_2_53: dq 1.1071487177940904090 m_atan_2_53: dq -1.1071487177940904090 atan_2_53_l: dq 9.4044713735663794124E-17 real_n_2_m_5_atan_2_53: dq -3.5357435889704524890 real_n_2_m_5_atan_2_53_l: dq -2.6134358828256379104E-17 real_5_atan_2_m_2_53: dq 3.5357435889704524890 real_5_atan_2_m_2_53_l: dq 2.6134358828256379104E-17 real_ln_2_t_0_5: dq 3.4657359027997265471E-1 real_n_ln_2_t_0_5: dq -3.4657359027997265471E-1 real_ln_2_t_1_5: dq 1.0397207708399179641 real_ln2_42: dq 0.69314718055989033019 real_ln2_42_l: dq 5.4979230187083711552E-14 real_1_d_ln2: dq 1.4426950408889634074 real_log2_10_42: dq 0.30102999566395283182 real_log2_10_42_l: dq 2.8363394551044964154E-14 ;d1ln10: ; dq 4.3429448190325181667E-1 d1ln10_26: dq 4.3429447710514068603E-1 d1ln10_26_l: dq 4.7981111416159728067E-9 ;d1ln2: ; dq 1.4426950408889633870 d1ln2_26: dq 1.4426950216293334961 d1ln2_26_l: dq 1.9259629911266174689E-8 align 16 round_c: dq 3ffh+52 dq 3ffh+52 m_round_c: dq 0bffh+52 dq 0bffh+52 round_even_c: dq 3ffh+53 dq 3ffh+53 m_round_even_c: dq 0bffh+53 dq 0bffh+53 mask_all_one: dq -1 dq -1 mask_all_one_except_last: dq -2 dq -2 mask_all_one_except_second_last: dq -3 dq -3 qw_1023: dq 3ffh dq 3ffh qw_1022: dq 3feh dq 3feh qw_1021: dq 3fdh dq 3fdh qw_1077: dq 3ffh+54 dq 3ffh+54 qw_1078: dq 3ffh+55 dq 3ffh+55 qw_55: dq 55 dq 55 mask_sign: dq 08000000000000000h dq 08000000000000000h mask_all_except_sign: dq 07fffffffffffffffh dq 07fffffffffffffffh real_0_43540000008249979402: dq 0.43540000008249979402 real_m_0_43540000008249979402: dq -0.43540000008249979402 real_0_600000000082499762577: dq 0.600000000082499762577 real_m_0_600000000082499762577: dq -0.600000000082499762577 ;sin_p_0: ; dq -1.6666666666666629659E-1 ;sin_p_1: ; dq 8.3333333333220592498E-3 ;sin_p_2: ; dq -1.9841269829591994520E-4 ;sin_p_3: ; dq 2.7557313627980839565E-6 ;sin_p_4: ; dq -2.5050749232606622552E-8 ;sin_p_5: ; dq 1.5896334589820396677E-10 sin_p_0: dq -1.6666666666666635210E-1 sin_p_1: dq 8.3333333333230012047E-3 sin_p_2: dq -1.9841269830204560616E-4 sin_p_3: dq 2.7557313816586650493E-6 sin_p_4: dq -2.5050776321203382309E-8 sin_p_5: dq 1.5897788850050641142E-10 sin_p1_c: sin_p1_0h: dq 5.6464247346312534948E-1 sin_p1_0l: dq -6.06241788103829245082E-24 sin_p1_1h: dq 8.2533560693264007568E-1 sin_p1_1l: dq 7.9304552924597260244E-9 sin_p1_2: dq -2.8232123673155168353E-1 sin_p1_3: dq -1.3755593581121927649E-1 sin_p1_4: dq 2.3526769749636338575E-2 sin_p1_5: dq 6.8777964033410682668E-3 sin_p1_6: dq -7.8422158064252829243E-4 sin_p1_7: dq -1.6378316139497952112E-4 sin_p1_8: dq 1.4102652890564176127E-5 sin_p1_9: dq 2.0754701007995074451E-6 sin_p2_c: sin_p2_0h: dq 5.6464247346312534948E-1 sin_p2_0l: dq -6.06241788103829245082E-24 sin_p2_1h: dq 8.2533560693264007568E-1 sin_p2_1l: dq 7.9304554034820284869E-9 sin_p2_2: dq -2.8232123673155273824E-1 sin_p2_3: dq -1.3755593580986152924E-1 sin_p2_4: dq 2.3526769748731638648E-2 sin_p2_5: dq 6.8777971733520841535E-3 sin_p2_6: dq -7.8422151328288352071E-4 sin_p2_7: dq -1.6373002515216467253E-4 sin_p2_8: dq 1.4106512050855138886E-5 sin_p2_9: dq 2.4764422854631738044E-6 sin_p3_c: sin_p3_0h: dq -5.6464247346312534948E-1 sin_p3_0l: dq 6.06241788103829245082E-24 sin_p3_1h: dq 8.2533560693264007568E-1 sin_p3_1l: dq 7.9304552924597260244E-9 sin_p3_2: dq 2.8232123673155168353E-1 sin_p3_3: dq -1.3755593581121927649E-1 sin_p3_4: dq -2.3526769749636338575E-2 sin_p3_5: dq 6.8777964033410682668E-3 sin_p3_6: dq 7.8422158064252829243E-4 sin_p3_7: dq -1.6378316139497952112E-4 sin_p3_8: dq -1.4102652890564176127E-5 sin_p3_9: dq 2.0754701007995074451E-6 sin_p4_c: sin_p4_0h: dq -5.6464247346312534948E-1 sin_p4_0l: dq 6.06241788103829245082E-24 sin_p4_1h: dq 8.2533560693264007568E-1 sin_p4_1l: dq 7.9304554034820284869E-9 sin_p4_2: dq 2.8232123673155273824E-1 sin_p4_3: dq -1.3755593580986152924E-1 sin_p4_4: dq -2.3526769748731638648E-2 sin_p4_5: dq 6.8777971733520841535E-3 sin_p4_6: dq 7.8422151328288352071E-4 sin_p4_7: dq -1.6373002515216467253E-4 sin_p4_8: dq -1.4106512050855138886E-5 sin_p4_9: dq 2.4764422854631738044E-6 cos_p_0: dq 4.1666666666666588026E-2 cos_p_1: dq -1.3888888888872778175E-3 cos_p_2: dq 2.4801587288764459412E-5 cos_p_3: dq -2.7557314167050702998E-7 cos_p_4: dq 2.0875701408714520036E-9 cos_p_5: dq -1.1358718309736171193E-11 ; .. .5854 ;tan_p_0: ; dq -18086151.600729089230 ;tan_p_1: ; dq 1161461.5827075217385 ;tan_p_2: ; dq -13169.960960193349820 ;tan_q_0: ; dq -54258454.802187263966 ;tan_q_1: ; dq 25187766.668997306377 ;tan_q_2: ; dq -1329914.3444088697433 ;tan_q_3: ; dq 13760.338151945812569 ; .. .338 tan_p_0: dq -18191117.789276178926 tan_p_1: dq 1167963.0645372841973 tan_p_2: dq -13234.676172752202547 tan_q_0: dq -54573353.367828540504 tan_q_1: dq 25333230.540743269026 tan_q_2: dq -1337310.4614476819988 tan_q_3: dq 13827.503083158084337 ; ..7854 ;tan2_p_0: ; dq 3.3283674370620949801E-2 ;tan2_p_1: ; dq 2.5663601402049946582E-2 ;tan2_p_2: ; dq -3.1180502523212879186E-4 ;tan2_p_3: ; dq 4.9814468378033982921E-7 ;tan2_q_0: ; dq -1.3338299229604572149E-1 ;tan2_q_1: ; dq 3.4248261922569253959E-3 ;tan2_q_2: ; dq -1.7860673544716858919E-5 ; ..3678 ;tan2_p_0: ; dq 3.3322645703933846673E-2 ;tan2_p_1: ; dq 2.5645883816593488536E-2 ;tan2_p_2: ; dq -3.1101629629724883994E-4 ;tan2_p_3: ; dq 4.9436497805178155231E-7 ;tan2_q_0: ; dq -1.3334402096273281768E-1 ;tan2_q_1: ; dq 3.4200990512379442383E-3 ;tan2_q_2: ; dq -1.7781628650750523380E-5 ; ..3908 tan2_p_0: dq 3.3321283446731200795E-2 tan2_p_1: dq 2.5646503068216856824E-2 tan2_p_2: dq -3.1104383115385493899E-4 tan2_p_3: dq 4.9449499280323978810E-7 tan2_q_0: dq -1.3334538321993547050E-1 tan2_q_1: dq 3.4202642171272572627E-3 tan2_q_2: dq -1.7784380596478880932E-5 ; .. .2 tan3_p_0: dq -18224747.034562580287 tan3_p_1: dq 1170032.8518652219791 tan3_p_2: dq -13254.922404240271135 tan3_q_0: dq -54674241.103687740862 tan3_q_1: dq 25379794.997070763260 tan3_q_2: dq -1339662.7778249811381 tan3_q_3: dq 13848.512058865804647 tan_0_5_t: dq 1.25 dq 0.5 real_0_5_m_1_25_atan_0_5_49_l: dq -1.8102913770216112547E-16 real_0_5_m_1_25_atan_0_5_49: dq -7.9559511251007464239E-2 tan_n_0_5_t: dq 1.25 dq -0.5 real_1_25_atan_0_5_m_0_5_49_l: dq 1.8102913770216112547E-16 real_1_25_atan_0_5_m_0_5_49: dq 7.9559511251007464239E-2 tan_s_0_5_t: dq 1.5 sqrt_0_5: dq 7.07106781186547572737E-1 sqrtn_0_5_m_1_5_atann_sqrt_0_5_l: dq -3.4791817252377832918E-18 sqrtn_0_5_m_1_5_atann_sqrt_0_5: dq -2.1611278181903348372E-1 tan_n_s_0_5_t: dq 1.5 n_sqrt_0_5: dq -7.07106781186547572737E-1 n_sqrtn_0_5_m_1_5_atann_sqrt_0_5_l: dq 3.4791817252377832918E-18 n_sqrtn_0_5_m_1_5_atann_sqrt_0_5: dq 2.1611278181903348372E-1 tan_s_2_t: dq 3.0 sqrt_2_0: dq 1.4142135623730951455 sqrt_2_m_3_atan_sqrt_2_l: dq 7.4004687159376949604E-17 sqrt_2_m_3_atan_sqrt_2: dq -1.4517362920004328597 tan_n_s_2_t: dq 3.0 n_sqrt_2_0: dq -1.4142135623730951455 n_sqrt_2_m_3_atan_sqrt_2_l: dq -7.4004687159376949604E-17 n_sqrt_2_m_3_atan_sqrt_2: dq 1.4517362920004328597 ; .. 0.55 ;asin_p_0: ; dq -25.316696852169688014 ;asin_p_1: ; dq 53.530200010422156254 ;asin_p_2: ; dq -37.683203270692622766 ;asin_p_3: ; dq 9.8280386103977175338 ;asin_p_4: ; dq -0.6933246588625101570 ;asin_q_0: ; dq -151.90018111301861836 ;asin_q_1: ; dq 389.53628156345331490 ;asin_q_2: ; dq -360.70299781814912876 ;asin_q_3: ; dq 144.63464250990605819 ;asin_q_4: ; dq -23.247871426450686272 asin_p_0: dq -31.133659782158286333 asin_p_1: dq 63.858157457633225818 asin_p_2: dq -43.244454939408448979 asin_p_3: dq 10.711904434851501122 asin_p_4: dq -0.7023102565817557208 asin_q_0: dq -186.80195869294971089 asin_q_1: dq 467.20982615762636669 asin_q_2: dq -419.67491247177241576 asin_q_3: dq 162.03208845920067915 asin_q_4: dq -24.808857438965841169 asin_c: asin2_p_0: dq 31.367022265271895520 asin2_p_1: dq -27.553457288163915706 asin2_p_2: dq 7.3142287109234631615 asin2_p_3: dq -0.5695539268055010984 asin2_p_4: dq 2.7732700457810590539E-3 asin2_q_0: dq 376.40426718326244782 asin2_q_1: dq -415.33244757417799065 asin2_q_2: dq 156.01490234281396852 asin2_q_3: dq -22.702479601946876642 ; 0.55 .. ;asin2_p_0: ; dq 29.355358314463529723 ;asin2_p_1: ; dq -26.147018538045006864 ;asin2_p_2: ; dq 7.0703500716163327766 ;asin2_p_3: ; dq -0.5652641176899680930 ;asin2_p_4: ; dq 2.9079909341710704143E-3 ;asin2_q_0: ; dq 352.26429977355559231 ;asin2_q_1: ; dq -393.02368990519767067 ;asin2_q_2: ; dq 149.68540386246363028 ;asin2_q_3: ; dq -22.170690309691252651 asin_p1_c: asin_p1_0h: dq 5.7043710961221538724E-1 asin_p1_0l: dq 4.9248428721475757358E-23 asin_p1_1h: dq 1.1881211400032043457 asin_p1_1l: dq 1.4630145983574038837E-9 asin_p1_2: dq 4.5284120326143617596E-1 asin_p1_3: dq 6.2472394124586794195E-1 asin_p1_4: dq 8.0835086833083236169E-1 asin_p1_5: dq 1.2595104015172415846 asin_p1_6: dq 2.0488537552293428767 asin_p1_7: dq 3.5089140995443472981 asin_p1_8: dq 6.2851334414813333495 asin_p1_9: dq 10.128040933414240499 asin_p1_10: dq 33.046781180882994988 asin_p1_11: dq -52.817309641779630169 asin_p1_12: dq 540.99494117159986217 asin_p1_13: dq -1326.1434641099594955 asin_p1_14: dq 2612.6799241572512074 asin_p2_c: asin_p2_0h: dq 5.7043710961221538724E-1 asin_p2_0l: dq 4.9248428721475757358E-23 asin_p2_1h: dq 1.1881211400032043457 asin_p2_1l: dq 1.4630165967588482090E-9 asin_p2_2: dq 4.5284120325997734291E-1 asin_p2_3: dq 6.2472394155362398482E-1 asin_p2_4: dq 8.0835082941011759949E-1 asin_p2_5: dq 1.2595128937378745615 asin_p2_6: dq 2.0487338667125807312 asin_p2_7: dq 3.5123184925937764866 asin_p2_8: dq 6.2076105483454178113 asin_p2_9: dq 11.227381892153145415 asin_p2_10: dq 20.429661082626292767 asin_p2_11: dq 35.926476241524127886 asin_p2_12: dq 55.782391042293575367 asin_p2_13: dq 64.653236450484357078 asin_p2_14: dq 39.681910714502151905 asin_p3_c: asin_p3_0h: dq -5.7043710961221538724E-1 asin_p3_0l: dq -4.9248428721475757358E-23 asin_p3_1h: dq 1.1881211400032043457 asin_p3_1l: dq 1.4630145983574038837E-9 asin_p3_2: dq -4.5284120326143617596E-1 asin_p3_3: dq 6.2472394124586794195E-1 asin_p3_4: dq -8.0835086833083236169E-1 asin_p3_5: dq 1.2595104015172415846 asin_p3_6: dq -2.0488537552293428767 asin_p3_7: dq 3.5089140995443472981 asin_p3_8: dq -6.2851334414813333495 asin_p3_9: dq 10.128040933414240499 asin_p3_10: dq -33.046781180882994988 asin_p3_11: dq -52.817309641779630169 asin_p3_12: dq -540.99494117159986217 asin_p3_13: dq -1326.1434641099594955 asin_p3_14: dq -2612.6799241572512074 asin_p4_c: asin_p4_0h: dq -5.7043710961221538724E-1 asin_p4_0l: dq -4.9248428721475757358E-23 asin_p4_1h: dq 1.1881211400032043457 asin_p4_1l: dq 1.4630165967588482090E-9 asin_p4_2: dq -4.5284120325997734291E-1 asin_p4_3: dq 6.2472394155362398482E-1 asin_p4_4: dq -8.0835082941011759949E-1 asin_p4_5: dq 1.2595128937378745615 asin_p4_6: dq -2.0487338667125807312 asin_p4_7: dq 3.5123184925937764866 asin_p4_8: dq -6.2076105483454178113 asin_p4_9: dq 11.227381892153145415 asin_p4_10: dq -20.429661082626292767 asin_p4_11: dq 35.926476241524127886 asin_p4_12: dq -55.782391042293575367 asin_p4_13: dq 64.653236450484357078 asin_p4_14: dq -39.681910714502151905 acos_p_0: dq -23.490891740111308650 acos_p_1: dq 50.216364730997767651 acos_p_2: dq -35.846130541173899076 acos_p_3: dq 9.5237685361261430472 acos_p_4: dq -0.68995264971619463257 acos_q_0: dq -140.94535044067245622 acos_q_1: dq 364.72359608470605963 acos_q_2: dq -341.44918263146718118 acos_q_3: dq 138.79408611688072028 acos_q_4: dq -22.704016182082593645 acos2_p_0: dq 30.187145498002834643 acos2_p_1: dq -26.731562531992352660 acos2_p_2: dq 7.1724615825161839311 acos2_p_3: dq -0.56708755287485912433 acos2_p_4: dq 2.8497262016782816223E-3 acos2_q_0: dq 362.24574597603304937 acos2_q_1: dq -402.28404322843209684 acos2_q_2: dq 152.32592108178161538 acos2_q_3: dq -22.394016829865698526 acos_p1_c: acos_p1_0h: dq 8.6321189001609244240E-1 acos_p1_0l: dq -2.7467628254551864260E-23 acos_p1_1h: dq -1.3159033656120300293 acos_p1_1l: dq -2.4367664774871400368E-8 acos_p1_2: dq -7.4055169144604560127E-1 acos_p1_3: dq -1.2132914821382745352 acos_p1_4: dq -2.1344587603015683364 acos_p1_5: dq -4.3088049195660635959 acos_p1_6: dq -9.2462207583022237856 acos_p1_7: dq -20.778559358953092584 acos_p1_8: dq -48.776431616826357640 acos_p1_9: dq -105.97079800530472937 acos_p1_10: dq -413.00216737064670269 acos_p1_11: dq 662.354234414432198719 acos_p1_12: dq -11016.701631003812508 acos_p1_13: dq 35318.9338646810210776 acos_p1_14: dq -97099.956120653485414 acos_p2_c: acos_p2_0h: dq 8.6321189001609244240E-1 acos_p2_0l: dq -2.7467628254551864260E-23 acos_p2_1h: dq -1.3159033656120300293 acos_p2_1l: dq -2.4367664108737585593E-8 acos_p2_2: dq -7.4055169144296173478E-1 acos_p2_3: dq -1.2132914822347449224 acos_p2_4: dq -2.1344586500282272112 acos_p2_5: dq -4.3088086958273930094 acos_p2_6: dq -9.2457168210006930309 acos_p2_7: dq -20.790839559740305731 acos_p2_8: dq -48.251128736941033992 acos_p2_9: dq -114.02209884122218853 acos_p2_10: dq -267.05630398433208939 acos_p2_11: dq -584.65850073182002689 acos_p2_12: dq -1076.6291620946751664 acos_p2_13: dq -1407.9468675552657260 acos_p2_14: dq -936.98633843723951031 atan4_p_c: atan4_p_0: dq -51.285593469956815227 atan4_p_1: dq -100.64117630107490697 atan4_p_2: dq -64.297908354955467303 atan4_p_3: dq -14.727705326536764119 atan4_p_4: dq -0.8688437904180191795 atan4_q_0: dq 153.85678040987045279 atan4_q_1: dq 394.23759714914689312 atan4_q_2: dq 363.49766317870364674 atan4_q_3: dq 144.60833714965690433 atan4_q_4: dq 23.038413151078877661 n_45_d_256: dq 0.175781250000 n_m_45_d_256: dq -0.175781250000 atan_p_9_0: dq -3.3333333333333309279E-1 atan_p_9_1: dq 1.9999999999984593990E-1 atan_p_9_2: dq -1.4285714282482467330E-1 atan_p_9_3: dq 1.1111110782523182794E-1 atan_p_9_4: dq -9.0908902574698829957E-2 atan_p_9_5: dq 7.6916554867419328900E-2 atan_p_9_6: dq -6.6526935532345926605E-2 atan_p_9_7: dq 5.6999867343679795628E-2 atan_p_9_8: dq -3.9093313704495452621E-2 atan_0_5_52: dq 4.6364760900080603800E-1 atan_0_5_52_l: dq 7.8209928684219507951E-17 atan_0_5_real_0_5: dq 0.5 n_atan_0_5_52: dq -4.6364760900080603800E-1 n_atan_0_5_52_l: dq -7.8209928684219507951E-17 n_atan_0_5_real_0_5: dq -0.5 atan_n_0_5_8_c: atan_n_0_5_8_0: dq -3.3333333333333192705E-1 atan_n_0_5_8_1: dq 1.9999999999920992089E-1 atan_n_0_5_8_2: dq -1.4285714269165267210E-1 atan_n_0_5_8_3: dq 1.1111109349119581424E-1 atan_n_0_5_8_4: dq -9.0908019792184269203E-2 atan_n_0_5_8_5: dq 7.6884259191928067123E-2 atan_n_0_5_8_6: dq -6.5833773159939656949E-2 atan_n_0_5_8_7: dq 4.8945313616423499758E-2 atan_1_53: dq 7.8539816339744827900E-1 atan_1_53_l: dq 3.0616169978683830179E-17 n_atan_1_53: dq -7.8539816339744827900E-1 n_atan_1_53_l: dq -3.0616169978683830179E-17 atan_n_8_c: atan_n_8_0: dq -3.3333333333333325932E-1 atan_n_8_1: dq 1.9999999999993750555E-1 atan_n_8_2: dq -1.4285714283792697032E-1 atan_n_8_3: dq 1.1111110814149251225E-1 atan_n_8_4: dq -9.0908830368634924168E-2 atan_n_8_5: dq 7.6909493951295496150E-2 atan_n_8_6: dq -6.6248652556378059830E-2 atan_n_8_7: dq 5.1752788427847688790E-2 atan_n_8_real_40_bits: dq 0ffffffffffffe000h atan_n_8_real_abs_40_bits: dq 07fffffffffffe000h atan_n_8_real_2_p_m_12: dq 2.44140625E-4 atan_p_8_c: atan_p_8_0: dq -3.3333333333333331483E-1 atan_p_8_1: dq 1.9999999999997875033E-1 atan_p_8_2: dq -1.4285714284904510452E-1 atan_p_8_3: dq 1.1111110961868993219E-1 atan_p_8_4: dq -9.0908937814301260527E-2 atan_p_8_5: dq 7.6913854250452912131E-2 atan_p_8_6: dq -6.6341308897488418528E-2 atan_p_8_7: dq 5.2556144706942850564E-2 atan_p_8_real_39_bits: dq 0ffffffffffffc000h atan_p_8_abs_real_39_bits: dq 07fffffffffffc000h atan_p_8_real_2_p_m_12: dq 2.44140625E-4 atan_2_0: dq 1.1071487177940904090 atan_2_0_l: dq 9.4044713735663794124E-17 atan_2_0_real_2_0: dq 2.0 n_atan_2_0: dq -1.1071487177940904090 n_atan_2_0_l: dq -9.4044713735663794124E-17 n_atan_2_0_real_2_0: dq -2.0 atan_n_2_8_c: atan_n_2_8_0: dq -3.3333333333333042825E-1 atan_n_2_8_1: dq 1.9999999999849707444E-1 atan_n_2_8_2: dq -1.4285714256949089140E-1 atan_n_2_8_3: dq 1.1111108323968375833E-1 atan_n_2_8_4: dq -9.0907550811429177484E-2 atan_n_2_8_5: dq 7.6872320463257509671E-2 atan_n_2_8_6: dq -6.5674898157514843833E-2 atan_n_2_8_7: dq 4.8083662211730243685E-2 real_atan_large: dq 5805358775541310.0840 real_atan_m_large: dq -5805358775541310.0840 exp_p0_c: exp_p0_2: dq 4.9999999999999900080E-1 exp_p0_3: dq 1.6666666666678625619E-1 exp_p0_4: dq 4.1666666661027668139E-2 exp_p0_5: dq 8.3333334724719175524E-3 exp_p0_6: dq 1.3888868951434380893E-3 exp_p0_7: dq 1.9842988288729944998E-4 exp_p0_8: dq 2.4713876429938641863E-5 exp_p0_9: dq 2.9988651596576767477E-6 exp_p1_c: exp_p1_0: dq 1.1921772413532716328 exp_p1_0_l: dq -5.3111925243256501606E-17 exp_p1_1_h: dq 1.1921772360801696777 exp_p1_1_l: dq 5.2731019550833480025E-9 exp_p1_2: dq 5.9608862067662515827E-1 exp_p1_3: dq 1.9869620689294639759E-1 exp_p1_4: dq 4.9674051698174313818E-2 exp_p1_5: dq 9.9348108199627475218E-3 exp_p1_6: dq 1.6557962681130399766E-3 exp_p1_7: dq 2.3658136938083061391E-4 exp_p1_8: dq 2.9408132193586159414E-5 exp_p1_9: dq 3.6463907908503166658E-6 exp_m0_c: exp_m0_2: dq 4.9999999999999916733E-1 exp_m0_3: dq 1.6666666666656548834E-1 exp_m0_4: dq 4.1666666661841822439E-2 exp_m0_5: dq 8.3333332132295139666E-3 exp_m0_6: dq 1.3888871537291139647E-3 exp_m0_7: dq 1.9839759941175428605E-4 exp_m0_8: dq 2.4723414228338120148E-5 exp_m0_9: dq 2.5328445339119633100E-6 exp_m1_c: exp_m1_0: dq 8.3880145108698256351E-1 exp_m1_0_l: dq -3.1258096785010882408E-17 exp_m1_1_h: dq 8.3880144357681274414E-1 exp_m1_1_l: dq 7.5101698193691390770E-9 exp_m1_2: dq 4.1940072554349638878E-1 exp_m1_3: dq 1.3980024184811054577E-1 exp_m1_4: dq 3.4950060469065312441E-2 exp_m1_5: dq 6.9900121811488523035E-3 exp_m1_6: dq 1.1650024396098284090E-3 exp_m1_7: dq 1.6642701498218752582E-4 exp_m1_8: dq 2.0771521593253968396E-5 exp_m1_9: dq 2.1676257763527338661E-6 ; ln < 1 ;ln_s_c: ;ln_s_p_0: ; dq 9.1503481690678860616 ;ln_s_p_1: ; dq 20.941485866336655874 ;ln_s_p_2: ; dq 16.487417954606193859 ;ln_s_p_3: ; dq 5.1186080224958212526 ;ln_s_p_4: ; dq 4.9845734945458103349E-1 ;ln_s_q_0: ; dq 27.451044507203782530 ;ln_s_q_1: ; dq 83.412740979424398802 ;ln_s_q_2: ; dq 95.551182894484938402 ;ln_s_q_3: ; dq 50.697088912299392405 ;ln_s_q_4: ; dq 12.129116214794825268 ; ln .83 .. 1 ;ln_s_c: ;ln_s_p_0: ; dq 10.602228952834687803 ;ln_s_p_1: ; dq 23.654147261303222649 ;ln_s_p_2: ; dq 18.048399385285609497 ;ln_s_p_3: ; dq 5.3866317747411187611 ;ln_s_p_4: ; dq 4.9866367203621170257E-1 ;ln_s_q_0: ; dq 31.806686858504065185 ;ln_s_q_1: ; dq 94.817456927787816312 ;ln_s_q_2: ; dq 106.17427873659880788 ;ln_s_q_3: ; dq 54.803473649357279385 ;ln_s_q_4: ; dq 12.671320252177885379 ; ln .8243 .. 1 ln_s_c: ln_s_p_0: dq 10.533214407052481576 ln_s_p_1: dq 23.526643885226203423 ln_s_p_2: dq 17.976077060886193948 ln_s_p_3: dq 5.3744490269565492468 ln_s_p_4: dq 4.9865516811442134326E-1 ln_s_q_0: dq 31.599643221157446504 ln_s_q_1: dq 94.279664071546818604 ln_s_q_2: dq 105.67819330362900132 ln_s_q_3: dq 54.614015226380423940 ln_s_q_4: dq 12.646688742839442554 ; ln >= 1 ;ln_b_c: ;ln_b_p_0: ; dq 17.467871503051810578 ;ln_b_p_1: ; dq 35.785852544901331385 ;ln_b_p_2: ; dq 24.552006690337957906 ;ln_b_p_3: ; dq 6.4047236758045062999 ;ln_b_p_4: ; dq 4.9917096570160635061E-1 ;ln_b_q_0: ; dq 52.403614509155588053 ;ln_b_q_1: ; dq 146.66026851655587393 ;ln_b_q_2: ; dq 152.20905275348258101 ;ln_b_q_3: ; dq 71.576606726420877180 ;ln_b_q_4: ; dq 14.725978745938864023 ; ln 1.0 .. 1.25 ln_b_c: ln_b_p_0: dq 15.580409683056638315 ln_b_p_1: dq 32.543914666072645048 ln_b_p_2: dq 22.877901706403754645 ln_b_p_3: dq 6.1556714513765760088 ln_b_p_4: dq 4.9907618814155391140E-1 ln_b_q_0: dq 46.741229049169916721 ln_b_q_1: dq 132.68766578509504939 ln_b_q_2: dq 140.10471702854880505 ln_b_q_3: dq 67.303567178530471438 ln_b_q_4: dq 14.223951326720150945 ; log10 < 1 ;log10_s_c: ;log10_s_p_0: ; dq 3.9766162055986344903 ;log10_s_p_1: ; dq 9.0998450829915000782 ;log10_s_p_2: ; dq 7.1633761863796170388 ;log10_s_p_3: ; dq 2.2235094671281157019 ;log10_s_p_4: ; dq 2.1647774010462134120E-1 ;log10_s_q_0: ; dq 27.469491586710010012 ;log10_s_q_1: ; dq 83.461621599998238707 ;log10_s_q_2: ; dq 95.597370915186246521 ;log10_s_q_3: ; dq 50.715260287037992271 ;log10_s_q_4: ; dq 12.131569554734877414 ; log10 .83 .. 1 log10_s_c: log10_s_p_0: dq 4.6028186381430433727 log10_s_p_1: dq 10.269763424759014825 log10_s_p_2: dq 7.8365495824134949743 log10_s_p_3: dq 2.3390837249823710486 log10_s_p_4: dq 2.1656666260147883207E-1 log10_s_q_0: dq 31.795144745829979627 log10_s_q_1: dq 94.787371070649314220 log10_s_q_2: dq 106.14640820241447727 log10_s_q_3: dq 54.792773831672434426 log10_s_q_4: dq 12.669919891359308295 ; log10 >= 1 ;log10_b_c: ;log10_b_p_0: ; dq 7.5811637929542987635 ;log10_b_p_1: ; dq 15.533033113504695066 ;log10_b_p_2: ; dq 10.658434759740712749 ;log10_b_p_3: ; dq 2.7808975967872808788 ;log10_b_p_4: ; dq 2.1678697192356721768E-1 ;log10_b_q_0: ; dq 52.368824211608433927 ;log10_b_q_1: ; dq 146.57500964710882840 ;log10_b_q_2: ; dq 152.13582168617784873 ;log10_b_q_3: ; dq 71.551032626191883423 ;log10_b_q_4: ; dq 14.723015954370795910 ; log10 1 .. 1.25 log10_b_c: log10_b_p_0: dq 6.7674014091633534207 log10_b_p_1: dq 14.135207984866871911 log10_b_p_2: dq 9.9365500005391176330 log10_b_p_3: dq 2.6734926843772655047 log10_b_p_4: dq 2.1674607755999492076E-1 log10_b_q_0: dq 46.747552809139307328 log10_b_q_1: dq 132.70322218382881374 log10_b_q_2: dq 140.11814067349982338 log10_b_q_3: dq 67.308281802680511419 log10_b_q_4: dq 14.224501421540916013 log2_b_c: log2_b_p_0: dq 5.7248655744376097942 log2_b_p_1: dq 9.7037982066316619267 log2_b_p_2: dq 4.9251104233553251177 log2_b_p_3: dq 0.71604182547154882066 log2_b_p_4: dq 0.00024384785289470863262 log2_b_q_0: dq 11.904523296020823153 log2_b_q_1: dq 29.106873574779058345 log2_b_q_2: dq 24.928920420570964467 log2_b_q_3: dq 8.6737948511229703286 log2_s_c: log2_s_p_0: dq 3.6543174401668601092 log2_s_p_1: dq 6.9236821167562956347 log2_s_p_2: dq 4.0552858971538414679 log2_s_p_3: dq 0.71265600724817212974 log2_s_p_4: dq 0.00061552202164347354606 log2_s_q_0: dq 7.5989394915663739383 log2_s_q_1: dq 20.096596833512705871 log2_s_q_2: dq 18.945813884202145516 log2_s_q_3: dq 7.4327985038948378715 exp2_p0_25_c: exp2_p0_25_0h: dq 1.1892071150027210269 exp2_p0_25_0l: dq 3.9820152314656461110E-17 exp2_p0_25_1h: dq 8.2429555058479309082E-1 exp2_p0_25_1l: dq 8.2811696389128996998E-9 exp2_p0_25_2: dq 2.8567907128801478533E-1 exp2_p0_25_3: dq 6.6005880936045882579E-2 exp2_p0_25_4: dq 1.1437947568180147420E-2 exp2_p0_25_5: dq 1.5856362256660922264E-3 exp2_p0_25_6: dq 1.8317976935970924383E-4 exp2_p0_25_7: dq 1.8139623479154579359E-5 exp2_p0_25_8: dq 1.5673360359583023396E-6 exp2_p0_25_9: dq 1.3055968895300254492E-7 exp2_p0_c: exp2_p0_0h: dq 1.0 exp2_p0_0l: dq 0.0 exp2_p0_1h: dq 6.9314716756343841553E-1 exp2_p0_1l: dq 1.2996506870699420233E-8 exp2_p0_2: dq 2.4022650695910330310E-1 exp2_p0_3: dq 5.5504108664725972100E-2 exp2_p0_4: dq 9.6181291092419882865E-3 exp2_p0_5: dq 1.3333558019987959767E-3 exp2_p0_6: dq 1.5403532681856270284E-4 exp2_p0_7: dq 1.5253065510864060166E-5 exp2_p0_8: dq 1.3190300302967161470E-6 exp2_p0_9: dq 1.0881074348847176580E-7 exp2_m0_c: exp2_m0_0h: dq 1.0 exp2_m0_0l: dq 0.0 exp2_m0_1h: dq 6.9314716756343841553E-1 exp2_m0_1l: dq 1.2996506870699420233E-8 exp2_m0_2: dq 2.4022650695909780749E-1 exp2_m0_3: dq 5.5504108664691832742E-2 exp2_m0_4: dq 9.6181291047027026725E-3 exp2_m0_5: dq 1.3333557764085299593E-3 exp2_m0_6: dq 1.5403499520940549562E-4 exp2_m0_7: dq 1.5251161994200753343E-5 exp2_m0_8: dq 1.3166061357593046239E-6 exp2_m0_9: dq 9.2942318847941285694E-8 exp2_m0_25_c: exp2_m0_25_0h: dq 8.4089641525371450204E-1 exp2_m0_25_0l: dq 4.0995050102907482601E-17 exp2_m0_25_1h: dq 5.8286496996879577637E-1 exp2_m0_25_1l: dq 9.4072813983103742430E-9 exp2_m0_25_2: dq 2.0200560855082275169E-1 exp2_m0_25_3: dq 4.6673206007799013240E-2 exp2_m0_25_4: dq 8.0878502812528896282E-3 exp2_m0_25_5: dq 1.1212140390502213245E-3 exp2_m0_25_6: dq 1.2952709156943405071E-4 exp2_m0_25_7: dq 1.2823060087120729985E-5 exp2_m0_25_8: dq 1.1036110895925728151E-6 exp2_m0_25_9: dq 7.4921899653437894396E-8 real_m_1022: dq -1022.0 real_1023: dq 1023.0 real_1024: dq 1024.0 real_1025: dq 1025.0 real_m_1076: dq -1076.0 real_2_p_m_1022: dq 00010000000000000h real_2_p_m_55: dq 03C80000000000000h real_2_p_53: dq 04340000000000000h real_m_2_p_53: dq 0C340000000000000h real_2_p_55: dq 04360000000000000h real_2_p_1023: dq 07fe0000000000000h real_max: dq 07fefffffffffffffh real_m_max: dq 0ffefffffffffffffh real_4000_0: dq 4000.0 real_m_3810_0: dq -3810.0 real_1401_0: dq 1401.0 real_m_1471_0: dq -1471.0 real_4605_0: dq 4605.0 real_m_4834_0: dq -4834.0 real_1_052: dq 1.052 real_m_1_052: dq -1.052 real_power_exp_too_large: dq 6711563375777760768.0 real_power_exp_too_small: dq -6393154322601327104.0 _DATA ends ; end