diff options
Diffstat (limited to 'macho64/areals.s')
-rw-r--r-- | macho64/areals.s | 8965 |
1 files changed, 8965 insertions, 0 deletions
diff --git a/macho64/areals.s b/macho64/areals.s new file mode 100644 index 0000000..363f824 --- /dev/null +++ b/macho64/areals.s @@ -0,0 +1,8965 @@ + + .intel_syntax noprefix + + .macro att_jp + .att_syntax + jp $0 + .intel_syntax noprefix + .endmacro + + .text + + .globl sin_real + +sin_real: + ucomisd xmm0,qword ptr real_pi_d_4[rip] + jbe sin_real_1 # x<=pi/4 | NAN + ucomisd xmm0,qword ptr real_3_pi_d_4[rip] + jbe sin_real_2 + ucomisd xmm0,qword ptr real_5_pi_d_4[rip] + jbe sin_real_3 + ucomisd xmm0,qword ptr real_7_pi_d_4[rip] + jbe sin_real_4 + ucomisd xmm0,qword ptr real_9_pi_d_4[rip] + jbe sin_real_5 + + ucomisd xmm0,qword ptr real_36825084_pi[rip] + jbe sin_real_0 + + ucomisd xmm0,qword ptr real_2_p_53[rip] + jae sin_cos_or_tan_real_too_large # x>=-2^53 + + call rem_36825084_pi + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + 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[rip] + + mulsd xmm1,xmm0 # x*4/pi + + movq xmm4,qword ptr round_even_c[rip] + + addsd xmm1,qword ptr real_1_0[rip] # x*4/pi+1 + + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 # round_even (x*4/pi+1) + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + movq xmm5,qword ptr mask_all_one_except_last[rip] + psllq xmm5,xmm4 + movq xmm6,qword ptr mask_all_one_except_second_last[rip] + 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[rip] + jae sin_real_n_2 + ucomisd xmm0,qword ptr real_m_5_pi_d_4[rip] + jae sin_real_n_3 + ucomisd xmm0,qword ptr real_m_7_pi_d_4[rip] + jae sin_real_n_4 + ucomisd xmm0,qword ptr real_m_9_pi_d_4[rip] + jae sin_real_n_5 + + ucomisd xmm0,qword ptr real_m_36825084_pi[rip] + jae sin_real_n_0 + + ucomisd xmm0,qword ptr real_m_2_p_53[rip] + jbe sin_cos_or_tan_real_too_small_or_nan # x<=-2^53 | NAN + + call rem_n_36825084_pi + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + 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[rip] + + mulsd xmm1,xmm0 # x*4/pi + + movq xmm4,qword ptr m_round_even_c[rip] + + subsd xmm1,qword ptr real_1_0[rip] # x*4/pi-1 + + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 # round_even (x*4/pi-1) + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + movq xmm5,qword ptr mask_all_one_except_last[rip] + psllq xmm5,xmm4 + movq xmm6,qword ptr mask_all_one_except_second_last[rip] + 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 + att_je sin_real_sin + + subsd xmm0,xmm2 + subsd xmm0,xmm3 + + ucomisd xmm1,xmm6 + att_jne cos_real_p + att_jmp cos_real_m + +sin_real_1: + ucomisd xmm0,qword ptr real_m_pi_d_4[rip] + att_jb sin_real_n # # x<-pi/4 | NAN + + ucomisd xmm0,qword ptr real_0_43540000008249979402[rip] + jae sin_real_p_0_6 + ucomisd xmm0,qword ptr real_m_0_43540000008249979402[rip] + jbe sin_real_m_0_6 + + movsd xmm1,xmm0 # x + + ucomisd xmm0,qword ptr real_0_0[rip] + je sin_real_0_0 # sin -0.0 = -0.0 + + mulsd xmm0,xmm0 # x2 + + movlpd xmm5,qword ptr sin_p_0[rip] + movlpd xmm6,qword ptr sin_p_1[rip] + + 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[rip] + movlpd xmm8,qword ptr sin_p_3[rip] + + 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[rip] # p11 + mulsd xmm3,qword ptr sin_p_5[rip] # 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[rip] + + ucomisd xmm0,xmm1 + subsd xmm0,xmm1 + + lea rcx,sin_p3_c[rip] + lea rdx,sin_p4_c[rip] + + cmova rcx,rdx + + jmp sin_real_0_6 + +sin_real_p_0_6: + movlpd xmm1,qword ptr real_0_600000000082499762577[rip] + + ucomisd xmm0,xmm1 + subsd xmm0,xmm1 + + lea rcx,sin_p1_c[rip] + lea rdx,sin_p2_c[rip] + + 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[rip] + 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[rip] + movlpd xmm13,qword ptr real_m_2_pi_l[rip] + att_jmp sin_real_p + +sin_real_5: + subsd xmm0,qword ptr real_2_pi[rip] + movlpd xmm13,qword ptr real_2_pi_l[rip] + att_jmp sin_real_p + +cos_real_n_2: + addsd xmm0,qword ptr real_pi_d_2[rip] + movlpd xmm13,qword ptr real_m_pi_d_2_l[rip] + att_jmp sin_real_p + +cos_real_4: + subsd xmm0,qword ptr real_3_pi_d_2[rip] + movlpd xmm13,qword ptr real_3_pi_d_2_l[rip] + +sin_real_p: + ucomisd xmm0,qword ptr real_0_43540000008249979402[rip] + + movsd xmm12,xmm0 + + jae sin_real_p_p_0_6 + ucomisd xmm0,qword ptr real_m_0_43540000008249979402[rip] + 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[rip] + movlpd xmm6,qword ptr sin_p_1[rip] + + 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[rip] + movlpd xmm8,qword ptr sin_p_3[rip] + + 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[rip] # p11 + mulsd xmm3,qword ptr sin_p_5[rip] # p13 + + movsd xmm0,xmm2 # x + + mulsd xmm14,qword ptr real_0_5[rip] # 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[rip] + + subsd xmm0,xmm13 + + ucomisd xmm0,xmm1 + movsd xmm15,xmm0 # x1 + subsd xmm0,xmm1 + + lea rcx,sin_p3_c[rip] + lea rdx,sin_p4_c[rip] + + cmova rcx,rdx + jmp sin_real_p_pm_0_6 + +sin_real_p_p_0_6: + movlpd xmm1,qword ptr real_0_600000000082499762577[rip] + + subsd xmm0,xmm13 + + ucomisd xmm0,xmm1 + movsd xmm15,xmm0 # x1 + subsd xmm0,xmm1 + + lea rcx,sin_p1_c[rip] + lea rdx,sin_p2_c[rip] + + 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[rip] # 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[rip] + 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[rip] + movlpd xmm13,qword ptr real_pi_l[rip] + subsd xmm1,xmm0 + att_jmp sin_real_m + +cos_real_n_4: + movlpd xmm1,qword ptr real_m_3_pi_d_2[rip] + movlpd xmm13,qword ptr real_m_3_pi_d_2_l[rip] + subsd xmm1,xmm0 + att_jmp sin_real_m + +sin_real_n_3: + movlpd xmm1,qword ptr real_m_pi[rip] + movlpd xmm13,qword ptr real_m_pi_l[rip] + subsd xmm1,xmm0 + att_jmp sin_real_m + +cos_real_2: + movlpd xmm1,qword ptr real_pi_d_2[rip] + movlpd xmm13,qword ptr real_pi_d_2_l[rip] + subsd xmm1,xmm0 + +sin_real_m: + ucomisd xmm1,qword ptr real_0_43540000008249979402[rip] + + movsd xmm12,xmm1 + + jae sin_real_m_p_0_6 + ucomisd xmm1,qword ptr real_m_0_43540000008249979402[rip] + 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[rip] + movlpd xmm6,qword ptr sin_p_1[rip] + + 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[rip] + movlpd xmm8,qword ptr sin_p_3[rip] + + 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[rip] # p11 + mulsd xmm3,qword ptr sin_p_5[rip] # p13 + + movsd xmm1,xmm2 # x + + mulsd xmm14,qword ptr real_0_5[rip] + + 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[rip] + + ucomisd xmm1,qword ptr real_m_0_600000000082499762577[rip] + movsd xmm15,xmm1 # x1 + addsd xmm0,xmm1 + + lea rcx,sin_p3_c[rip] + lea rdx,sin_p4_c[rip] + + 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[rip] + + ucomisd xmm1,qword ptr real_0_600000000082499762577[rip] + movsd xmm15,xmm1 # x1 + addsd xmm0,xmm1 + + lea rcx,sin_p1_c[rip] + lea rdx,sin_p2_c[rip] + + 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 + att_jmp sin_real_pm_0_6 + + .globl cos_real + +cos_real: + ucomisd xmm0,qword ptr real_pi_d_4[rip] + jbe cos_real_1 # x<=pi/4 | NAN + ucomisd xmm0,qword ptr real_3_pi_d_4[rip] + att_jbe cos_real_2 + ucomisd xmm0,qword ptr real_5_pi_d_4[rip] + jbe cos_real_3 + ucomisd xmm0,qword ptr real_7_pi_d_4[rip] + att_jbe cos_real_4 + ucomisd xmm0,qword ptr real_9_pi_d_4[rip] + jbe cos_real_5 + + ucomisd xmm0,qword ptr real_36825084_pi[rip] + jbe cos_real_0 + + ucomisd xmm0,qword ptr real_2_p_53[rip] + att_jae sin_cos_or_tan_real_too_large # x>=-2^53 + + att_call rem_36825084_pi + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + 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[rip] + + mulsd xmm1,xmm0 # x*4/pi + + addsd xmm1,qword ptr real_1_0[rip] # x*4/pi+1 + + movq xmm4,qword ptr round_even_c[rip] + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 # round_even (x*4/pi+1) + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + movq xmm5,qword ptr mask_all_one_except_last[rip] + psllq xmm5,xmm4 + movq xmm6,qword ptr mask_all_one_except_second_last[rip] + 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 + att_je cos_real_p + att_jmp cos_real_m + +cos_real_sin: + ucomisd xmm1,xmm6 + jne cos_real_p_sin + + movsd xmm1,xmm3 + subsd xmm0,xmm2 + subsd xmm1,xmm0 + att_jmp sin_real_m + +cos_real_p_sin: + subsd xmm0,xmm2 + subsd xmm0,xmm3 + att_jmp sin_real_p + +cos_real_n: + ucomisd xmm0,qword ptr real_m_3_pi_d_4[rip] + att_jae cos_real_n_2 + ucomisd xmm0,qword ptr real_m_5_pi_d_4[rip] + jae cos_real_n_3 + ucomisd xmm0,qword ptr real_m_7_pi_d_4[rip] + att_jae cos_real_n_4 + ucomisd xmm0,qword ptr real_m_9_pi_d_4[rip] + jae cos_real_n_5 + + ucomisd xmm0,qword ptr real_m_36825084_pi[rip] + jae cos_real_n_0 + + ucomisd xmm0,qword ptr real_m_2_p_53[rip] + att_jbe sin_cos_or_tan_real_too_small_or_nan # x<=-2^53 | NAN + + att_call rem_n_36825084_pi + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + 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[rip] + + mulsd xmm1,xmm0 # x*4/pi + + movq xmm4,qword ptr m_round_even_c[rip] + + subsd xmm1,qword ptr real_1_0[rip] # x*4/pi-1 + + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 # round_even (x*4/pi-1) + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm13,qword ptr real_pi_d_4_52_l[rip] + + movq xmm5,qword ptr mask_all_one_except_last[rip] + psllq xmm5,xmm4 + movq xmm6,qword ptr mask_all_one_except_second_last[rip] + 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 + att_je cos_real_cos + + ucomisd xmm1,xmm6 + je cos_real_n_p_sin + + movsd xmm1,xmm3 + subsd xmm0,xmm2 + subsd xmm1,xmm0 + att_jmp sin_real_m + +cos_real_n_p_sin: + subsd xmm0,xmm2 + subsd xmm0,xmm3 + att_jmp sin_real_p + +cos_real_1: + ucomisd xmm0,qword ptr real_m_pi_d_4[rip] + att_jb cos_real_n # x<-pi/4 | NAN + + movsd xmm1,xmm0 # x + mulsd xmm0,xmm0 # x2 + + movlpd xmm9,qword ptr real_17_bits[rip] + movlpd xmm5,qword ptr cos_p_0[rip] + + 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[rip] + + movsd xmm3,xmm2 # x2 + mulsd xmm2,xmm0 # x6 + + movsd xmm4,xmm0 # x4 + mulsd xmm0,xmm0 # x8 + + movlpd xmm7,qword ptr cos_p_2[rip] + + 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[rip] # p6 + mulsd xmm4,qword ptr cos_p_3[rip] # p10 + mulsd xmm2,qword ptr cos_p_4[rip] # p12 + mulsd xmm0,qword ptr cos_p_5[rip] # 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[rip] + + addsd xmm0,xmm4 # p10+p12+p14 + + mulsd xmm8,qword ptr real_0_5[rip] # 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[rip] # 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[rip] + movlpd xmm13,qword ptr real_m_2_pi_l[rip] + att_jmp cos_real_p + +cos_real_5: + subsd xmm0,qword ptr real_2_pi[rip] + movlpd xmm13,qword ptr real_2_pi_l[rip] + att_jmp cos_real_p + +sin_real_n_4: + addsd xmm0,qword ptr real_3_pi_d_2[rip] + movlpd xmm13,qword ptr real_m_3_pi_d_2_l[rip] + att_jmp cos_real_p + +sin_real_2: + subsd xmm0,qword ptr real_pi_d_2[rip] + movlpd xmm13,qword ptr real_pi_d_2_l[rip] + +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[rip] + movlpd xmm5,qword ptr cos_p_0[rip] + + 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[rip] + + movsd xmm3,xmm2 # x2 + mulsd xmm2,xmm0 # x6 + + movsd xmm4,xmm0 # x4 + mulsd xmm0,xmm0 # x8 + + movlpd xmm7,qword ptr cos_p_2[rip] + + 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[rip] # p6 + mulsd xmm4,qword ptr cos_p_3[rip] # p10 + mulsd xmm2,qword ptr cos_p_4[rip] # p12 + mulsd xmm0,qword ptr cos_p_5[rip] # 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[rip] + + addsd xmm0,xmm4 # p10+p12+p14 + + mulsd xmm8,qword ptr real_0_5[rip] # 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[rip] # 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[rip] + movlpd xmm13,qword ptr real_3_pi_d_2_l[rip] + att_jmp cos_real_m + +cos_real_n_3: + addsd xmm0,qword ptr real_pi[rip] + movlpd xmm13,qword ptr real_m_pi_l[rip] + att_jmp cos_real_m + +sin_real_n_2: + addsd xmm0,qword ptr real_pi_d_2[rip] + movlpd xmm13,qword ptr real_m_pi_d_2_l[rip] + att_jmp cos_real_m + +cos_real_3: + subsd xmm0,qword ptr real_pi[rip] + movlpd xmm13,qword ptr real_pi_l[rip] + +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[rip] + movlpd xmm5,qword ptr cos_p_0[rip] + + 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[rip] + + movsd xmm3,xmm2 # x2 + mulsd xmm2,xmm0 # x6 + + movsd xmm4,xmm0 # x4 + mulsd xmm0,xmm0 # x8 + + movlpd xmm7,qword ptr cos_p_2[rip] + + 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[rip] # p6 + mulsd xmm4,qword ptr cos_p_3[rip] # p10 + mulsd xmm2,qword ptr cos_p_4[rip] # p12 + mulsd xmm0,qword ptr cos_p_5[rip] # 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[rip] + + addsd xmm0,xmm4 # p10+p12+p14 + + mulsd xmm8,qword ptr real_0_5[rip] # 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[rip] # 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 + + .globl tan_real + +tan_real: + ucomisd xmm0,qword ptr real_m_0_338[rip] + jb tan_real_n # x<-0.338 | NAN + ucomisd xmm0,qword ptr real_0_89[rip] + jbe tan_real_1 + ucomisd xmm0,qword ptr real_pi_m_0_699[rip] + jbe tan_real_2 + ucomisd xmm0,qword ptr real_pi_p_0_89[rip] + jbe tan_real_3 + ucomisd xmm0,qword ptr real_2pi_m_0_699[rip] + jbe tan_real_4 + ucomisd xmm0,qword ptr real_2pi_p_0_89[rip] + jbe tan_real_5 + + ucomisd xmm0,qword ptr real_36825084_pi[rip] + jbe tan_real_0 + + ucomisd xmm0,qword ptr real_2_p_53[rip] + att_jae sin_cos_or_tan_real_too_large # x>=-2^53 + + att_call rem_36825084_pi + +tan_real_pn_l: + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm12,qword ptr real_pi_d_4_52_l[rip] + + 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[rip] + + mulsd xmm1,xmm0 # x*4/pi + + addsd xmm1,qword ptr real_1_0[rip] # x*4/pi+1 + + movq xmm4,qword ptr round_even_c[rip] +tan_real_pn_0: + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 # round_even (x*4/pi+1) + + movlpd xmm2,qword ptr real_pi_d_4_26[rip] + movlpd xmm3,qword ptr real_pi_d_4_26_26[rip] + movlpd xmm12,qword ptr real_pi_d_4_52_l[rip] + + movq xmm5,qword ptr mask_all_one_except_last[rip] + 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[rip] + ja tan_real_0_1p + ucomisd xmm0,qword ptr real_m_0_338[rip] + jae tan_real_3_ + + ucomisd xmm0,qword ptr real_m_0_542[rip] + ja tan_real_0_5_n + ucomisd xmm0,qword ptr real_m_0_699[rip] + 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[rip] + jb tan_real_0_5_p + ucomisd xmm0,qword ptr real_0_699[rip] + 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[rip] + ja tan_real_0_2p + ucomisd xmm1,qword ptr real_1_18_m_0_5_pi[rip] + jae tan_real_2_ + + ucomisd xmm1,qword ptr real_1_04_m_0_5_pi[rip] + ja tan_real_2_0_n + ucomisd xmm1,qword ptr real_0_89_m_0_5_pi[rip] + 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[rip] + jb tan_real_2_0_p + ucomisd xmm1,qword ptr real_0_5_pi_m_0_89[rip] + jb tan_real_s_2_p + jmp tan_real_1_0_2_p + +tan_real_n: + ucomisd xmm0,qword ptr real_m_0_89[rip] + jae tan_real_n_1 + ucomisd xmm0,qword ptr real_n_pi_m_0_699[rip] + jae tan_real_n_2 + ucomisd xmm0,qword ptr real_n_pi_p_0_89[rip] + jae tan_real_n_3 + ucomisd xmm0,qword ptr real_n_2pi_m_0_699[rip] + jae tan_real_n_4 + ucomisd xmm0,qword ptr real_n_2pi_p_0_89[rip] + jae tan_real_n_5 + + ucomisd xmm0,qword ptr real_m_36825084_pi[rip] + jae tan_real_n_0 + + ucomisd xmm0,qword ptr real_m_2_p_53[rip] + att_jbe sin_cos_or_tan_real_too_small_or_nan # x<=-2^53 | NAN + + att_call rem_n_36825084_pi + att_jmp tan_real_pn_l + +tan_real_n_0: + movlpd xmm1,qword ptr real_4_d_pi[rip] + + mulsd xmm1,xmm0 # x*4/pi + + subsd xmm1,qword ptr real_1_0[rip] # x*4/pi-1 + + movq xmm4,qword ptr m_round_even_c[rip] + att_jmp tan_real_pn_0 + +tan_real_1: + ucomisd xmm0,qword ptr real_0_699[rip] + ja tan_real_1_2 + ucomisd xmm0,qword ptr real_0_338[rip] + ja tan_real_0_5 + +tan_real_1_0: + movsd xmm1,xmm0 # x + mulsd xmm0,xmm0 # x2 + + movlpd xmm6,qword ptr tan_q_1[rip] + movlpd xmm5,qword ptr tan_q_2[rip] + + movsd xmm2,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + movlpd xmm7,qword ptr tan_p_1[rip] + 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[rip] # q6 + + mulsd xmm4,qword ptr tan_p_2[rip] # 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[rip] # p4+p2+p0 + + addsd xmm0,qword ptr tan_q_0[rip] # 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[rip] + jb tan_real_n_s_0_5 + + movlpd xmm1,qword ptr atan_0_5_53[rip] + movlpd xmm10,qword ptr real_49_bits[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + lea rdx,tan_n_0_5_t[rip] + addsd xmm1,qword ptr atan_0_5_53_l[rip] # 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[rip] + movlpd xmm10,qword ptr real_51_bits[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + lea rdx,tan_n_s_0_5_t[rip] + addsd xmm1,qword ptr atan_sqrt_0_5_l[rip] # y=x+atan sqrt 0.5 + att_jmp tan_real_0_5_a_s_0_5_a_s_2 + +tan_real_0_5: + ucomisd xmm0,qword ptr real_0_542[rip] + ja tan_real_s_0_5 + + movlpd xmm1,qword ptr m_atan_0_5_53[rip] + movlpd xmm10,qword ptr real_49_bits[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + lea rdx,tan_0_5_t[rip] + subsd xmm1,qword ptr atan_0_5_53_l[rip] # y=x-atan 0.5 + att_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[rip] + movlpd xmm10,qword ptr real_51_bits[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + lea rdx,tan_s_0_5_t[rip] + subsd xmm1,qword ptr atan_sqrt_0_5_l[rip] # 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[rip] + movlpd xmm6,qword ptr tan3_q_2[rip] + + movsd xmm3,xmm1 # y2 + mulsd xmm1,xmm1 # y4 + + movlpd xmm9,qword ptr tan3_q_3[rip] + mulsd xmm7,xmm3 # q2 + + movsd xmm4,xmm3 # y2 + mulsd xmm3,xmm1 # y6 + + movlpd xmm8,qword ptr tan3_p_0[rip] + + movsd xmm5,xmm1 # y4 + mulsd xmm1,xmm1 # y8 + + mulsd xmm9,xmm3 # q6 + mulsd xmm3,qword ptr tan3_p_2[rip] # p6 + + mulsd xmm6,xmm5 # q4 + mulsd xmm5,qword ptr tan3_p_1[rip] # 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[rip] # 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[rip] + att_ja tan_real_m_0_5 + +tan_real_n_1_2: + movlpd xmm1,qword ptr real_pi_d_4[rip] + + addsd xmm1,xmm0 + addsd xmm0,xmm0 # 2x + + addsd xmm1,qword ptr real_pi_d_4_l[rip] # y=pi/4+x + + addsd xmm0,qword ptr real_pi_d_2_m_1_0_52[rip] # 1+2x-pi/2=1-2y + movlpd xmm10,qword ptr real_m_pi_d_2_m_1_0_52_l[rip] + movlpd xmm11,qword ptr real_m_2_0[rip] + jmp tan_real_1_2_ + +tan_real_1_2: + movlpd xmm1,qword ptr real_pi_d_4[rip] + + subsd xmm1,xmm0 + addsd xmm0,xmm0 # 2x + + addsd xmm1,qword ptr real_pi_d_4_l[rip] # y=pi/4-x + subsd xmm0,qword ptr real_pi_d_2_m_1_0_52[rip] # 1+2x-pi/2=1-2y + movlpd xmm10,qword ptr real_pi_d_2_m_1_0_52_l[rip] + movlpd xmm11,qword ptr real_2_0[rip] + +tan_real_1_2_: + movsd xmm2,xmm1 # y + mulsd xmm1,xmm1 # y2 + + movlpd xmm7,qword ptr tan3_q_1[rip] + movlpd xmm6,qword ptr tan3_q_2[rip] + + movsd xmm3,xmm1 # y2 + mulsd xmm1,xmm1 # y4 + + movlpd xmm9,qword ptr tan3_q_3[rip] + mulsd xmm7,xmm3 # q2 + + movsd xmm4,xmm3 # y2 + mulsd xmm3,xmm1 # y6 + + movlpd xmm8,qword ptr tan3_p_0[rip] + + movsd xmm5,xmm1 # y4 + mulsd xmm1,xmm1 # y8 + + mulsd xmm9,xmm3 # q6 + mulsd xmm3,qword ptr tan3_p_2[rip] # p6 + + mulsd xmm6,xmm5 # q4 + mulsd xmm5,qword ptr tan3_p_1[rip] # 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[rip] # 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[rip] + + movlpd xmm1,qword ptr real_m_3_pi_d_2[rip] + movlpd xmm12,qword ptr real_m_3_pi_d_2_l[rip] + + ja tan_real_n_2_0_4_n + + ucomisd xmm0,qword ptr real_n_2pi_m_0_89[rip] + jb tan_real_n_1_0_2 + ucomisd xmm0,qword ptr real_n_2pi_m_1_18[rip] + jb tan_real_n_2_0_4_p + jmp tan_real_24 + +tan_real_4: + ucomisd xmm0,qword ptr real_pi_p_1_18[rip] + + movlpd xmm1,qword ptr real_3_pi_d_2[rip] + movlpd xmm12,qword ptr real_3_pi_d_2_l[rip] + + jb tan_real_2_0_2_p + + ucomisd xmm0,qword ptr real_2pi_m_0_89[rip] + ja tan_real_1_0_2 + ucomisd xmm0,qword ptr real_2pi_m_1_18[rip] + ja tan_real_2_0_4_n + att_jmp tan_real_24 + +tan_real_n_2: + ucomisd xmm0,qword ptr real_m_1_18[rip] + ja tan_real_n_s_2 + + movlpd xmm1,qword ptr real_m_pi_d_2[rip] + movlpd xmm12,qword ptr real_m_pi_d_2_l[rip] + + ucomisd xmm0,qword ptr real_n_pi_m_0_89[rip] + att_jb tan_real_n_1_0_2 + ucomisd xmm0,qword ptr real_n_pi_m_1_18[rip] + jb tan_real_n_2_0_2_n + + att_jmp tan_real_24 + +tan_real_2: + ucomisd xmm0,qword ptr real_1_18[rip] + jb tan_real_s_2 + + movlpd xmm1,qword ptr real_pi_d_2[rip] + movlpd xmm12,qword ptr real_pi_d_2_l[rip] + + ucomisd xmm0,qword ptr real_pi_m_0_89[rip] + att_ja tan_real_1_0_2 + ucomisd xmm0,qword ptr real_pi_m_1_18[rip] + 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[rip] + 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[rip] + movlpd xmm9,qword ptr tan2_p_0[rip] + + 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[rip] + movlpd xmm11,qword ptr tan2_p_1[rip] + + movsd xmm3,xmm2 # x2 + mulsd xmm2,xmm1 # x3 + + movsd xmm8,xmm1 # x + + movlpd xmm10,qword ptr real_0_5[rip] + + mulsd xmm6,xmm0 # q4 + mulsd xmm11,xmm0 # p4 + + addsd xmm5,xmm6 # q4+q2 + + movlpd xmm7,qword ptr real_1_0[rip] + + mulsd xmm10,xmm3 # 0.5*x2 + mulsd xmm3,xmm0 # x6 + + addsd xmm5,qword ptr tan2_q_0[rip] # q4+q2+q0 + + mulsd xmm0,xmm0 # x8 + mulsd xmm3,qword ptr tan2_p_2[rip] # p6 + + mulsd xmm5,xmm2 # (q4+q2+q0)*x3 + + mulsd xmm0,qword ptr tan2_p_3[rip] # 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[rip] + + 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[rip] + +# ucomisd xmm8,qword ptr real_0_4 + ucomisd xmm10,qword ptr real_2_p_m_31[rip] + + subsd xmm8,xmm5 # x-q_h + + addsd xmm8,xmm2 # q_l=q-q_h + movlpd xmm6,qword ptr real_1_0[rip] + + 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[rip] # (0.5*x2)_l + mulsd xmm13,qword ptr real_0_5[rip] # (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[rip] + + 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[rip] + + 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[rip] + jb tan_real_n_2_0 + + movlpd xmm1,qword ptr atan_sqrt_2[rip] + movlpd xmm10,qword ptr real_51_bits[rip] + + lea rdx,tan_n_s_2_t[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + addsd xmm1,qword ptr atan_sqrt_2_l[rip] # y=x+atan sqrt 2 + att_jmp tan_real_0_5_a_s_0_5_a_s_2 + +tan_real_s_2: + ucomisd xmm0,qword ptr real_1_04[rip] + ja tan_real_2_0 + + movlpd xmm1,qword ptr m_atan_sqrt_2[rip] + movlpd xmm10,qword ptr real_51_bits[rip] + + lea rdx,tan_s_2_t[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + subsd xmm1,qword ptr atan_sqrt_2_l[rip] # y=x-atan sqrt 2 + att_jmp tan_real_0_5_a_s_0_5_a_s_2 + +tan_real_n_2_0: + movlpd xmm1,qword ptr atan_2_53[rip] + movlpd xmm10,qword ptr real_49_bits[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + addsd xmm1,qword ptr atan_2_53_l[rip] # y=x+atan 2 + subsd xmm0,xmm10 # x_l + + movlpd xmm11,qword ptr real_5_atan_2_m_2_53_l[rip] + movlpd xmm12,qword ptr real_5_atan_2_m_2_53[rip] + movlpd xmm13,qword ptr real_m_2_0[rip] + jmp tan_real_2_0_ + +tan_real_2_0: + movlpd xmm1,qword ptr m_atan_2_53[rip] + movlpd xmm10,qword ptr real_49_bits[rip] + + addsd xmm1,xmm0 + andpd xmm10,xmm0 # x_h + + subsd xmm1,qword ptr atan_2_53_l[rip] # y=x-atan 2 + subsd xmm0,xmm10 # x_l + + movlpd xmm11,qword ptr real_n_2_m_5_atan_2_53_l[rip] + movlpd xmm12,qword ptr real_n_2_m_5_atan_2_53[rip] + movlpd xmm13,qword ptr real_2_0[rip] + +tan_real_2_0_: + movsd xmm2,xmm1 # y + mulsd xmm1,xmm1 # y2 + + mulsd xmm10,qword ptr real_5_0[rip] # 5*x_h + + movlpd xmm7,qword ptr tan3_q_1[rip] + movlpd xmm6,qword ptr tan3_q_2[rip] + + movsd xmm3,xmm1 # y2 + mulsd xmm1,xmm1 # y4 + + movlpd xmm9,qword ptr tan3_q_3[rip] + mulsd xmm7,xmm3 # q2 + + movsd xmm4,xmm3 # y2 + mulsd xmm3,xmm1 # y6 + + movlpd xmm8,qword ptr tan3_p_0[rip] + + movsd xmm5,xmm1 # y4 + mulsd xmm1,xmm1 # y8 + + mulsd xmm9,xmm3 # q6 + mulsd xmm3,qword ptr tan3_p_2[rip] # p6 + + mulsd xmm6,xmm5 # q4 + mulsd xmm5,qword ptr tan3_p_1[rip] # p4 + + addsd xmm1,xmm9 # y8+q6 + + mulsd xmm8,xmm4 # p2 + + addsd xmm1,xmm6 # y8+q6+q4 + + mulsd xmm0,qword ptr real_5_0[rip] # 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[rip] # 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[rip] # 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[rip] + subsd xmm1,xmm0 + att_jb tan_real_s_2_p + att_jmp tan_real_2_0_p + +tan_real_n_2_0_4_n: + ucomisd xmm0,qword ptr real_n_pi_p_1_04[rip] + subsd xmm1,xmm0 + att_ja tan_real_s_2_n + att_jmp tan_real_2_0_n + +tan_real_n_2_0_2_n: + ucomisd xmm0,qword ptr real_n_pi_m_1_04[rip] + subsd xmm1,xmm0 + att_jb tan_real_s_2_p + att_jmp tan_real_2_0_p + +tan_real_2_0_2_p: + ucomisd xmm0,qword ptr real_pi_p_1_04[rip] + subsd xmm1,xmm0 + att_jb tan_real_s_2_p + +tan_real_2_0_p: + movlpd xmm0,qword ptr real_h_pi_m_atan_2_52[rip] + movlpd xmm2,qword ptr real_h_pi_m_atan_2_52_l[rip] + movlpd xmm10,qword ptr real_48_bits[rip] + + 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[rip] + 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[rip] # -5x+(2+2.5pi-5atan 2)=2+5y + + movlpd xmm12,qword ptr real_2_p_2_5_pi_m_5_atan_2_53_l[rip] + movlpd xmm13,qword ptr real_5_0[rip] + jmp tan_real_2_0_pn + +tan_real_2_0_4_n: + ucomisd xmm0,qword ptr real_2pi_m_1_04[rip] + subsd xmm1,xmm0 + att_ja tan_real_s_2_n + att_jmp tan_real_2_0_n + +tan_real_2_0_2_n: + ucomisd xmm0,qword ptr real_pi_m_1_04[rip] + subsd xmm1,xmm0 + att_ja tan_real_s_2_n + +tan_real_2_0_n: + movlpd xmm0,qword ptr real_h_pi_m_atan_2_52[rip] + movlpd xmm2,qword ptr real_h_pi_m_atan_2_52_l[rip] + movlpd xmm10,qword ptr real_48_bits[rip] + + 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[rip] + 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[rip] # -5x-(2+2.5pi-5atan 2)=-2-5y + + movlpd xmm12,qword ptr real_5_atan_2_m_2_m_2_5_pi_53_l[rip] + movlpd xmm13,qword ptr real_m_5_0[rip] + +tan_real_2_0_pn: + movlpd xmm7,qword ptr tan3_q_1[rip] + movlpd xmm6,qword ptr tan3_q_2[rip] + + movsd xmm3,xmm2 # y2 + mulsd xmm2,xmm2 # y4 + + movlpd xmm9,qword ptr tan3_q_3[rip] + mulsd xmm7,xmm3 # q2 + + movsd xmm4,xmm3 # y2 + mulsd xmm3,xmm2 # y6 + + movlpd xmm8,qword ptr tan3_p_0[rip] + + movsd xmm5,xmm2 # y4 + mulsd xmm2,xmm2 # y8 + + mulsd xmm9,xmm3 # q6 + mulsd xmm3,qword ptr tan3_p_2[rip] # p6 + + mulsd xmm6,xmm5 # q4 + mulsd xmm5,qword ptr tan3_p_1[rip] # p4 + + addsd xmm2,xmm9 # y8+q6 + + mulsd xmm8,xmm4 # p2 + + addsd xmm2,xmm6 # y8+q6+q4 + + movlpd xmm6,qword ptr real_2_0[rip] + 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[rip] # 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[rip] + movlpd xmm2,qword ptr real_h_pi_m_atan_s_2_53_l[rip] + movlpd xmm10,qword ptr real_49_bits[rip] + + 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[rip] + 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[rip] # -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[rip] + movlpd xmm13,qword ptr real_3_0[rip] + jmp tan_real_s_2_pn + +tan_real_s_2_n: + movlpd xmm0,qword ptr real_h_pi_m_atan_s_2_53[rip] + movlpd xmm2,qword ptr real_h_pi_m_atan_s_2_53_l[rip] + movlpd xmm10,qword ptr real_49_bits[rip] + + 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[rip] + 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[rip] # -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[rip] + movlpd xmm13,qword ptr real_m_3_0[rip] + +tan_real_s_2_pn: + movlpd xmm7,qword ptr tan3_q_1[rip] + movlpd xmm6,qword ptr tan3_q_2[rip] + + movsd xmm3,xmm2 # y2 + mulsd xmm2,xmm2 # y4 + + movlpd xmm9,qword ptr tan3_q_3[rip] + mulsd xmm7,xmm3 # q2 + + movsd xmm4,xmm3 # y2 + mulsd xmm3,xmm2 # y6 + + movlpd xmm8,qword ptr tan3_p_0[rip] + + movsd xmm5,xmm2 # y4 + mulsd xmm2,xmm2 # y8 + + mulsd xmm9,xmm3 # q6 + mulsd xmm3,qword ptr tan3_p_2[rip] # p6 + + mulsd xmm6,xmm5 # q4 + mulsd xmm5,qword ptr tan3_p_1[rip] # p4 + + addsd xmm2,xmm9 # y8+q6 + + mulsd xmm8,xmm4 # p2 + + addsd xmm2,xmm6 # y8+q6+q4 + + movlpd xmm6,qword ptr sqrt_2_0[rip] + 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[rip] # 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[rip] + movlpd xmm2,qword ptr real_m_pi_d_4_l[rip] + + subsd xmm0,xmm1 # -(pi/4)_h-x_h + subsd xmm2,xmm12 # -(pi/4)_l-x_l + mulsd xmm1,qword ptr real_m_2_0[rip] # -2x + + addsd xmm2,xmm0 # y=-pi/4-x + addsd xmm12,xmm12 # 2x_l + subsd xmm1,qword ptr real_pi_d_2_p_1_0[rip] # -2x-(pi/2+1)=-1-2y + + movlpd xmm10,qword ptr real_pi_d_2_p_1_0_l[rip] + movlpd xmm11,qword ptr real_2_0[rip] + 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[rip] + movlpd xmm2,qword ptr real_m_pi_d_4_l[rip] + movlpd xmm11,qword ptr real_m_2_0[rip] + + 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[rip] # (pi/2+1)-2x-=1+2y + + movlpd xmm10,qword ptr real_m_pi_d_2_p_1_0_l[rip] + att_jmp tan_real_1_0_pn + +tan_real_n_5: + ucomisd xmm0,qword ptr real_n_2pi_m_0_338[rip] + movlpd xmm12,qword ptr real_m_2_pi_l[rip] + movlpd xmm1,qword ptr real_2_pi[rip] + ja tan_real_n_s_0_5_5_p + ucomisd xmm0,qword ptr real_n_2pi_p_0_338[rip] + ja tan_real_5_n + ucomisd xmm0,qword ptr real_n_2pi_p_0_699[rip] + ja tan_real_n_s_0_5_5_n + addsd xmm0,xmm1 + att_jmp tan_real_1_0_3_n + +tan_real_5: + ucomisd xmm0,qword ptr real_2pi_m_0_338[rip] + movlpd xmm12,qword ptr real_2_pi_l[rip] + movlpd xmm1,qword ptr real_2_pi[rip] + jb tan_real_s_0_5_5 + ucomisd xmm0,qword ptr real_2pi_p_0_338[rip] + jb tan_real_5_0 + ucomisd xmm0,qword ptr real_2pi_p_0_699[rip] + jb tan_real_s_0_5_5_p + subsd xmm0,xmm1 + att_jmp tan_real_1_0_3 + +tan_real_n_3: + ucomisd xmm0,qword ptr real_n_pi_m_0_338[rip] + movlpd xmm12,qword ptr real_m_pi_l[rip] + movlpd xmm1,qword ptr real_pi[rip] + ja tan_real_n_s_0_5_3_p + ucomisd xmm0,qword ptr real_n_pi_p_0_338[rip] + ja tan_real_3_n + ucomisd xmm0,qword ptr real_n_pi_p_0_699[rip] + ja tan_real_n_s_0_5_3_n + addsd xmm0,xmm1 + att_jmp tan_real_1_0_3_n + +tan_real_3: + ucomisd xmm0,qword ptr real_pi_m_0_338[rip] + movlpd xmm1,qword ptr real_pi[rip] + movlpd xmm12,qword ptr real_pi_l[rip] + jb tan_real_s_0_5_3 + ucomisd xmm0,qword ptr real_pi_p_0_338[rip] + jb tan_real_3_0 + ucomisd xmm0,qword ptr real_pi_p_0_699[rip] + jb tan_real_s_0_5_3_p + subsd xmm0,xmm1 + att_jmp tan_real_1_0_3 + +tan_real_5_n: +tan_real_3_n: + addsd xmm0,xmm1 + att_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[rip] + + 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[rip] + movlpd xmm5,qword ptr tan_q_2[rip] + + subsd xmm8,xmm12 # y_s + + movsd xmm2,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + movlpd xmm7,qword ptr tan_p_1[rip] + 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[rip] # q6 + + mulsd xmm4,qword ptr tan_p_2[rip] # 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[rip] # p4+p2+p0 + + addsd xmm0,qword ptr tan_q_0[rip] # 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[rip] + movlpd xmm2,qword ptr real_pi_d_4_l[rip] + + subsd xmm1,xmm0 # (pi/4)_h-x + addsd xmm2,xmm12 # (pi/4)_l+n_x_l + mulsd xmm0,qword ptr real_2_0[rip] # 2x + + addsd xmm2,xmm1 # y=pi/4-x + movlpd xmm1,qword ptr real_1_0_m_pi_d_2_52[rip] + addsd xmm12,xmm12 # 2n_x_l + addsd xmm1,xmm0 # 2x+(1-pi/2)=1-2y + + movlpd xmm11,qword ptr real_m_2_0[rip] + movlpd xmm10,qword ptr real_pi_d_2_m_1_0_52_l[rip] + + att_jmp tan_real_1_0_pn + +tan_real_1_0_3_n: + movlpd xmm1,qword ptr real_pi_d_4[rip] + movlpd xmm2,qword ptr real_pi_d_4_l[rip] + + addsd xmm1,xmm0 + subsd xmm2,xmm12 # (pi/4)_l-n_x_l + mulsd xmm0,qword ptr real_2_0[rip] # 2x + + addsd xmm2,xmm1 # y=pi/4+x + movlpd xmm1,qword ptr real_pi_d_2_m_1_0_52[rip] + addsd xmm12,xmm12 # 2n_x_l + addsd xmm1,xmm0 # 2x+(pi/2-1)=-1+2y + + movlpd xmm11,qword ptr real_2_0[rip] + movlpd xmm10,qword ptr real_m_pi_d_2_m_1_0_52_l[rip] + +tan_real_1_0_pn: + movsd xmm0,xmm2 # y + mulsd xmm2,xmm2 # y2 + + movlpd xmm7,qword ptr tan3_q_1[rip] + movlpd xmm6,qword ptr tan3_q_2[rip] + + movsd xmm3,xmm2 # y2 + mulsd xmm2,xmm2 # y4 + + movlpd xmm9,qword ptr tan3_q_3[rip] + mulsd xmm7,xmm3 # q2 + + movsd xmm4,xmm3 # y2 + mulsd xmm3,xmm2 # y6 + + movlpd xmm8,qword ptr tan3_p_0[rip] + + movsd xmm5,xmm2 # y4 + mulsd xmm2,xmm2 # y8 + + mulsd xmm9,xmm3 # q6 + mulsd xmm3,qword ptr tan3_p_2[rip] # p6 + + mulsd xmm6,xmm5 # q4 + mulsd xmm5,qword ptr tan3_p_1[rip] # 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[rip] # 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[rip] + addsd xmm0,xmm1 + att_jb tan_real_0_5_p + att_jmp tan_real_s_0_5_p + +tan_real_s_0_5_5_p: + ucomisd xmm0,qword ptr real_2pi_p_0_542[rip] + subsd xmm0,xmm1 + att_jb tan_real_0_5_p + att_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[rip] + addsd xmm0,xmm1 + att_jb tan_real_0_5_p + att_jmp tan_real_s_0_5_p + +tan_real_s_0_5_3_p: + ucomisd xmm0,qword ptr real_pi_p_0_542[rip] + subsd xmm0,xmm1 + att_jb tan_real_0_5_p + +tan_real_s_0_5_p: + movlpd xmm1,qword ptr atan_sqrt_0_5[rip] + movlpd xmm2,qword ptr atan_sqrt_0_5_l[rip] + movlpd xmm10,qword ptr real_51_bits[rip] + + 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[rip] + 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[rip] # 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[rip] + movlpd xmm13,qword ptr real_m_1_5[rip] + movlpd xmm14,qword ptr sqrt_0_5[rip] + 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[rip] + addsd xmm0,xmm1 + att_ja tan_real_0_5_n + att_jmp tan_real_s_0_5_n + +tan_real_s_0_5_5: + ucomisd xmm0,qword ptr real_2pi_m_0_542[rip] + subsd xmm0,xmm1 + att_ja tan_real_0_5_n + att_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[rip] + addsd xmm0,xmm1 + att_ja tan_real_0_5_n + att_jmp tan_real_s_0_5_n + +tan_real_s_0_5_3: + ucomisd xmm0,qword ptr real_pi_m_0_542[rip] + subsd xmm0,xmm1 + att_ja tan_real_0_5_n + +tan_real_s_0_5_n: + movlpd xmm1,qword ptr atan_sqrt_0_5[rip] + movlpd xmm2,qword ptr atan_sqrt_0_5_l[rip] + movlpd xmm10,qword ptr real_51_bits[rip] + + 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[rip] + 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[rip] # 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[rip] + movlpd xmm13,qword ptr real_1_5[rip] + movlpd xmm14,qword ptr sqrt_0_5[rip] + +tan_real_0_5_a_s_0_5_3_pn: + movlpd xmm7,qword ptr tan3_q_1[rip] + movlpd xmm6,qword ptr tan3_q_2[rip] + + movsd xmm3,xmm2 # y2 + mulsd xmm2,xmm2 # y4 + + movlpd xmm9,qword ptr tan3_q_3[rip] + mulsd xmm7,xmm3 # q2 + + movsd xmm4,xmm3 # y2 + mulsd xmm3,xmm2 # y6 + + movlpd xmm8,qword ptr tan3_p_0[rip] + + movsd xmm5,xmm2 # y4 + mulsd xmm2,xmm2 # y8 + + mulsd xmm9,xmm3 # q6 + mulsd xmm3,qword ptr tan3_p_2[rip] # p6 + + mulsd xmm6,xmm5 # q4 + mulsd xmm5,qword ptr tan3_p_1[rip] # 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[rip] # 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[rip] + movlpd xmm2,qword ptr atan_0_5_53_l[rip] + movlpd xmm10,qword ptr real_50_bits[rip] + + 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[rip] + 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[rip] # 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[rip] + movlpd xmm13,qword ptr real_m_1_25[rip] + movlpd xmm14,qword ptr real_0_5[rip] + att_jmp tan_real_0_5_a_s_0_5_3_pn + +tan_real_0_5_n: + movlpd xmm1,qword ptr atan_0_5_53[rip] + movlpd xmm2,qword ptr atan_0_5_53_l[rip] + movlpd xmm10,qword ptr real_50_bits[rip] + + 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[rip] + 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[rip] # 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[rip] + movlpd xmm13,qword ptr real_1_25[rip] + movlpd xmm14,qword ptr real_0_5[rip] + att_jmp tan_real_0_5_a_s_0_5_3_pn + + +sin_cos_or_tan_real_too_large: +sin_cos_or_tan_real_too_small_or_nan: + subsd xmm0,xmm0 + ret + +rem_36825084_pi: + movsd xmm1,xmm0 + divsd xmm0,qword ptr real_36825084_pi[rip] + + movq xmm4,qword ptr round_c[rip] + movq xmm2,xmm0 + psrlq xmm0,52 + psubq xmm4,xmm0 + movq xmm5,qword ptr mask_all_one[rip] + psllq xmm5,xmm4 + andpd xmm5,xmm2 + + movlpd xmm2,qword ptr real_36825084_pi_27[rip] + movlpd xmm3,qword ptr real_36825084_pi_27_27[rip] + movlpd xmm4,qword ptr real_36825084_pi_54_l[rip] + + 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[rip] + + mulsd xmm1,xmm0 # x*4/pi + + ucomisd xmm1,qword ptr real_3_0[rip] + jae rem_36825084_pi_g3 + + ucomisd xmm1,qword ptr real_1_0[rip] + jae rem_36825084_pi_g1 + + movlpd xmm1,qword ptr real_0_0[rip] + movsd xmm5,xmm1 + movsd xmm6,xmm1 + ret + +rem_36825084_pi_g1: + movlpd xmm1,qword ptr real_2_0[rip] + movlpd xmm5,qword ptr real_0_0[rip] + movsd xmm6,xmm1 + ret + +rem_36825084_pi_g3: + addsd xmm1,qword ptr real_1_0[rip] # x*4/pi+1 + + movq xmm4,qword ptr round_even_c[rip] + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 # round_even (x*4/pi+1) + + movq xmm5,qword ptr mask_all_one_except_last[rip] + movq xmm6,qword ptr mask_all_one_except_second_last[rip] + psllq xmm5,xmm4 + psllq xmm6,xmm4 + ret + +rem_n_36825084_pi: + movsd xmm1,xmm0 + divsd xmm0,qword ptr real_36825084_pi[rip] + + movq xmm4,qword ptr m_round_c[rip] + movq xmm2,xmm0 + psrlq xmm0,52 + psubq xmm4,xmm0 + movq xmm5,qword ptr mask_all_one[rip] + psllq xmm5,xmm4 + andpd xmm5,xmm2 + + movlpd xmm2,qword ptr real_36825084_pi_27[rip] + movlpd xmm3,qword ptr real_36825084_pi_27_27[rip] + movlpd xmm4,qword ptr real_36825084_pi_54_l[rip] + + 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[rip] + + mulsd xmm1,xmm0 # x*4/pi + + ucomisd xmm1,qword ptr real_m_3_0[rip] + jbe rem_n_36825084_pi_g3 + + ucomisd xmm1,qword ptr real_m_1_0[rip] + jbe rem_n_36825084_pi_g1 + + movlpd xmm1,qword ptr real_0_0[rip] + movsd xmm5,xmm1 + movsd xmm6,xmm1 + ret + +rem_n_36825084_pi_g1: + movlpd xmm1,qword ptr real_m_2_0[rip] + movlpd xmm5,qword ptr real_0_0[rip] + movsd xmm6,xmm1 + ret + +rem_n_36825084_pi_g3: + subsd xmm1,qword ptr real_1_0[rip] # x*4/pi-1 + + movq xmm4,qword ptr m_round_even_c[rip] + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 # round_even (x*4/pi-1) + + movq xmm5,qword ptr mask_all_one_except_last[rip] + movq xmm6,qword ptr mask_all_one_except_second_last[rip] + psllq xmm5,xmm4 + psllq xmm6,xmm4 + ret + + + .globl asin_real + +asin_real: + ucomisd xmm0,qword ptr real_0_4[rip] + + lea rcx,asin_c[rip] + + ja asin_real_2 + + ucomisd xmm0,qword ptr real_m_0_4[rip] + 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[rip] + jb asin_real_0_54 + + movlpd xmm1,qword ptr real_1_0[rip] + + ucomisd xmm0,xmm1 + subsd xmm1,xmm0 + + jae asin_real_1_or_e + + movlpd xmm11,qword ptr real_2_0[rip] + + 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[rip] + + 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[rip] # s21-pi_d_2 + mulsd xmm4,xmm0 # x*p/q + + movlpd xmm0,qword ptr real_pi_d_2_l[rip] + 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[rip] + ja asin_real_m_0_54 + + movlpd xmm1,qword ptr real_m_1_0[rip] + + ucomisd xmm0,xmm1 + jbe asin_real_m_1_or_e # x<=-1 | NAN + + subsd xmm0,xmm1 + + movlpd xmm11,qword ptr real_2_0[rip] + + 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[rip] + + 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[rip] # s21-pi_d_2 + mulsd xmm4,xmm1 # x*p/q + + movlpd xmm0,qword ptr real_m_pi_d_2_l[rip] + 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[rip] + + ucomisd xmm0,xmm1 + subsd xmm0,xmm1 + + lea rcx,asin_p3_c[rip] + lea rdx,asin_p4_c[rip] + + cmova rcx,rdx + + jmp asin_real_pm_0_54 + +asin_real_0_54: + movlpd xmm1,qword ptr real_0_54000000017867999524[rip] + + ucomisd xmm0,xmm1 + subsd xmm0,xmm1 + + lea rcx,asin_p1_c[rip] + lea rdx,asin_p2_c[rip] + + 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[rip] + 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[rip] + ret + +asin_real_m_1_or_e: + att_jb asin_real_e # NAN + + movlpd xmm0,qword ptr real_m_pi_d_2[rip] + ret + +asin_real_e: + subsd xmm0,xmm0 + divsd xmm0,xmm0 + ret + + + .globl acos_real + +acos_real: +# ucomisd xmm0,qword ptr real_0_58 + ucomisd xmm0,qword ptr real_0_5[rip] + ja acos_real_2 + ucomisd xmm0,qword ptr real_m_0_58[rip] + jb acos_real_3 + + movsd xmm1,xmm0 # x + mulsd xmm0,xmm0 # x2 + + movlpd xmm6,qword ptr acos_q_4[rip] + movlpd xmm7,qword ptr acos_q_3[rip] + + movsd xmm2,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + movlpd xmm8,qword ptr acos_q_2[rip] + movlpd xmm9,qword ptr acos_q_1[rip] + + movsd xmm4,xmm0 # x4 + mulsd xmm0,xmm0 # x8 + + movlpd xmm10,qword ptr acos_p_1[rip] + + 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[rip] # p8 + + mulsd xmm7,xmm3 # q6 + mulsd xmm3,qword ptr acos_p_3[rip] # p6 + + addsd xmm0,xmm6 # x10+q8 + + mulsd xmm8,xmm4 # q4 + mulsd xmm4,qword ptr acos_p_2[rip] # 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[rip] + + 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[rip] # x10+q8+q6+q4+q2+q0 + addsd xmm3,qword ptr acos_p_0[rip] # 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[rip] # 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[rip] # 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[rip] + jb acos_real_0_65 + + movlpd xmm1,qword ptr real_1_0[rip] + + ucomisd xmm0,xmm1 + + subsd xmm1,xmm0 + + jae acos_real_1_or_e + + movlpd xmm11,qword ptr real_2_0[rip] + + movsd xmm0,xmm1 # x + mulsd xmm1,xmm1 # x2 + + mulsd xmm11,xmm0 # 2x + + movlpd xmm7,qword ptr acos2_q_3[rip] + + movsd xmm2,xmm1 # x2 + mulsd xmm1,xmm1 # x4 + + sqrtsd xmm12,xmm11 # sqrt 2x + + movlpd xmm5,qword ptr acos2_p_3[rip] + movlpd xmm8,qword ptr acos2_q_2[rip] + + movsd xmm4,xmm1 # x4 + + movlpd xmm9,qword ptr acos2_q_1[rip] + movlpd xmm10,qword ptr acos2_p_1[rip] + + movsd xmm3,xmm2 # x2 + mulsd xmm3,xmm0 # x3 + + mulsd xmm1,qword ptr acos2_p_4[rip] # p4 + + mulsd xmm7,xmm3 # q3 + mulsd xmm5,xmm3 # p3 + + mulsd xmm8,xmm2 # q2 + mulsd xmm2,qword ptr acos2_p_2[rip] # 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[rip] + + addsd xmm4,qword ptr acos2_q_0[rip] # x4+q3+q2+q1+q0 + addsd xmm1,qword ptr acos2_p_0[rip] # 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[rip] + + ucomisd xmm0,xmm1 + subsd xmm0,xmm1 + + lea rcx,acos_p1_c[rip] + lea rdx,acos_p2_c[rip] + + cmovb rcx,rdx + + att_jmp asin_real_pm_0_54 + +acos_real_3: + movlpd xmm1,real_m_1_0[rip] + + ucomisd xmm0,xmm1 + + subsd xmm0,xmm1 + + jbe acos_real_m_1_or_e + + movlpd xmm11,qword ptr real_2_0[rip] + + movsd xmm1,xmm0 # x + mulsd xmm0,xmm0 # x2 + + mulsd xmm11,xmm1 # 2x + + movlpd xmm7,qword ptr acos2_q_3[rip] + + movsd xmm2,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + sqrtsd xmm12,xmm11 # sqrt 2x + + movlpd xmm5,qword ptr acos2_p_3[rip] + movlpd xmm8,qword ptr acos2_q_2[rip] + + movsd xmm4,xmm0 # x4 + + movlpd xmm9,qword ptr acos2_q_1[rip] + movlpd xmm10,qword ptr acos2_p_1[rip] + + movsd xmm3,xmm2 # x2 + mulsd xmm3,xmm1 # x3 + + mulsd xmm0,qword ptr acos2_p_4[rip] # p4 + + mulsd xmm7,xmm3 # q3 + mulsd xmm5,xmm3 # p3 + + mulsd xmm8,xmm2 # q2 + mulsd xmm2,qword ptr acos2_p_2[rip] # 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[rip] + + addsd xmm4,qword ptr acos2_q_0[rip] # x4+q3+q2+q1+q0 + addsd xmm0,qword ptr acos2_p_0[rip] # 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[rip] + + subsd xmm11,qword ptr real_pi_l[rip] # 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[rip] + ret + +acos_real_m_1_or_e: + att_jb acos_real_e # NAN + + movlpd xmm0,qword ptr real_pi[rip] + ret + +acos_real_e: + subsd xmm0,xmm0 + divsd xmm0,xmm0 + ret + + .globl atan_real + +atan_real: + ucomisd xmm0,qword ptr real_m_0_26[rip] + + movsd xmm1,xmm0 # x + + jb atan_real_n # x<-0.26 | NAN + + ucomisd xmm0,qword ptr real_1_0[rip] + ja atan_real_g1 # x>1.0 + + ucomisd xmm0,qword ptr real_0_70[rip] + ja atan_real_2 + + ucomisd xmm0,qword ptr real_0_26[rip] + ja atan_real_1 + + ucomisd xmm0,qword ptr real_0_0[rip] + je atan_real_0_0 # atan -0.0 = -0.0 + + mulsd xmm0,xmm0 # x2 + + movlpd xmm5,qword ptr atan_p_9_1[rip] + + 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[rip] + + movsd xmm10,xmm0 # x4 + mulsd xmm0,xmm0 # x8 + + mulsd xmm9,xmm10 # p4 + + movlpd xmm7,qword ptr atan_p_9_3[rip] + movlpd xmm12,qword ptr atan_p_9_4[rip] + + 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[rip] # p10 + mulsd xmm6,qword ptr atan_p_9_6[rip] # p12 + mulsd xmm2,qword ptr atan_p_9_7[rip] # p14 + mulsd xmm0,qword ptr atan_p_9_8[rip] # 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[rip] # 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[rip] + jb atan_real_l_m1 # x<-1.0 | NAN + + ucomisd xmm0,qword ptr real_m_0_70[rip] + jb atan_real_2n + + movlpd xmm2,qword ptr real_m_2_0[rip] + movlpd xmm3,qword ptr real_m_0_5[rip] + + lea rdx,n_atan_0_5_52[rip] + jmp atan_real_1pn + +atan_real_1: + movlpd xmm2,qword ptr real_2_0[rip] + movlpd xmm3,qword ptr real_0_5[rip] + + lea rdx,atan_0_5_52[rip] + +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[rip] + movsd xmm0,xmm3 # 0.5-x + + lea rcx,atan_n_0_5_8_c[rip] + 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[rip] + + 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[rip] + 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[rip] + movlpd xmm12,qword ptr real_abs_40_bits[rip] + 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[rip] + 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[rip] + +atan_real_2n_: + movlpd xmm2,qword ptr real_m_1_0[rip] + movlpd xmm3,qword ptr real_m_1_0[rip] + + addsd xmm0,xmm2 # 1+x + subsd xmm3,xmm1 # 1-x + + lea rdx,n_atan_1_53[rip] + + divsd xmm2,xmm0 # 1/(1+x) + + movlpd xmm15,qword ptr real_26_bits[rip] + 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[rip] + + 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[rip] + 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[rip] + +atan_real_2p_: + movlpd xmm2,qword ptr real_1_0[rip] + movlpd xmm3,qword ptr real_1_0[rip] + + addsd xmm0,xmm2 # 1+x + subsd xmm3,xmm1 # 1-x + + lea rdx,atan_1_53[rip] + + divsd xmm2,xmm0 # 1/(1+x) + + movlpd xmm15,qword ptr real_26_bits[rip] + 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[rip] + + 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[rip] + 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[rip] + jb atan_real_4n # x<4.0 | NAN + + ucomisd xmm0,qword ptr real_m_1_4[rip] + jb atan_real_3n + + lea rcx,atan_p_8_c[rip] + + att_jmp atan_real_2n_ + +atan_real_g1: + ucomisd xmm0,qword ptr real_4_0[rip] + ja atan_real_4 # x>4.0 + + ucomisd xmm0,qword ptr real_1_4[rip] + ja atan_real_3 + + lea rcx,atan_p_8_c[rip] + + att_jmp atan_real_2p_ + +atan_real_3n: + movlpd xmm2,qword ptr real_m_0_5[rip] + movlpd xmm3,qword ptr real_m_2_0[rip] + + lea rdx,n_atan_2_0[rip] + jmp atan_real_3pn + +atan_real_3: + movlpd xmm2,qword ptr real_0_5[rip] + movlpd xmm3,qword ptr real_2_0[rip] + + lea rdx,atan_2_0[rip] + +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[rip] + movsd xmm0,xmm3 # 2-x + + movsd xmm11,xmm3 # (2-x) + andpd xmm15,xmm3 # (2-x)_h + + lea rcx,atan_n_2_8_c[rip] + 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[rip] + + 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[rip] + 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[rip] + movlpd xmm12,qword ptr real_abs_39_bits[rip] + 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[rip] + 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[rip] + jb atan_real_m_large_or_nan # x<-5805358775541310.0840 | NAN + + movlpd xmm2,qword ptr real_1_0[rip] + mulsd xmm0,xmm0 # x2 + + lea rdx,real_m_pi_d_2[rip] + + jmp atan_real_4pn + +atan_real_4: + ucomisd xmm0,qword ptr real_atan_large[rip] + ja atan_real_large # x>5805358775541310.0840 + + movlpd xmm2,qword ptr real_1_0[rip] + mulsd xmm0,xmm0 # x2 + + lea rdx,real_pi_d_2[rip] + +atan_real_4pn: + divsd xmm2,xmm1 # 1/x + + lea rcx,atan4_p_c[rip] + + 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[rip] # 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[rip] + movsd xmm6,xmm1 # x + movlpd xmm7,qword ptr real_26_bits[rip] + 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[rip] + 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[rip] + divsd xmm3,xmm0 # 1/x + + movlpd xmm5,qword ptr real_26_bits[rip] + movsd xmm6,xmm0 # x + movlpd xmm7,qword ptr real_26_bits[rip] + 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[rip] + + 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[rip] + + movsd xmm10,xmm3 # x4 + mulsd xmm3,xmm3 # x8 + + mulsd xmm9,xmm10 # p4 + + movlpd xmm4,qword ptr atan_p_9_3[rip] + movlpd xmm12,qword ptr atan_p_9_4[rip] + + 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[rip] # p10 + mulsd xmm11,qword ptr atan_p_9_6[rip] # p12 + mulsd xmm2,qword ptr atan_p_9_7[rip] # p14 + mulsd xmm3,qword ptr atan_p_9_8[rip] # 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[rip] + 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[rip] # p16+p14+p12+p10+p8+p6+p4+p2+p0 + + movlpd xmm1,qword ptr real_pi_d_2_l[rip] + movlpd xmm0,qword ptr real_pi_d_2[rip] + + 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[rip] + ret + +atan_real_nan: + addsd xmm0,xmm0 + ret + +atan_real_large: + movlpd xmm0,qword ptr real_pi_d_2[rip] + ret + + .globl exp_real + +exp_real: + ucomisd xmm0,qword ptr real_ln_2_t_0_5[rip] + ja exp_real_2 # x>0.3.4657359027997265471 + + ucomisd xmm0,qword ptr real_n_ln_2_t_0_5[rip] + jb exp_real_3_n # x<-0.34657359027997265471 | nan + + movlpd xmm1,qword ptr n_45_d_256[rip] + movlpd xmm2,qword ptr n_m_45_d_256[rip] + + ucomisd xmm0,xmm1 + ja exp_real_p1 + + ucomisd xmm0,xmm2 + jb exp_real_n1 + + ucomisd xmm0,qword ptr real_0_0[rip] + + lea rcx,exp_p0_c[rip] + lea rdx,exp_m0_c[rip] + + 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[rip] + movlpd xmm10,qword ptr real_1_0[rip] + + 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[rip] + jmp exp_real_np1 + +exp_real_p1: + subsd xmm0,xmm1 + + lea rcx,exp_p1_c[rip] + +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[rip] + + 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[rip] + ja exp_real_3 + + subsd xmm0,qword ptr real_ln2_42[rip] + movlpd xmm14,qword ptr real_ln2_42_l[rip] + + movsd xmm13,xmm0 + subsd xmm0,xmm14 + + movlpd xmm15,qword ptr real_2_0[rip] + +exp_real_: + movlpd xmm1,qword ptr n_45_d_256[rip] + movlpd xmm2,qword ptr n_m_45_d_256[rip] + + ucomisd xmm0,xmm1 + ja exp_real_p1_ + + ucomisd xmm0,xmm2 + jb exp_real_n1_ + + ucomisd xmm0,qword ptr real_0_0[rip] + + lea rcx,exp_p0_c[rip] + lea rdx,exp_m0_c[rip] + + 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[rip] + movlpd xmm10,qword ptr real_1_0[rip] + + 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[rip] + jmp exp_real_np1_ + +exp_real_p1_: + subsd xmm0,xmm1 + subsd xmm13,xmm1 + + lea rcx,exp_p1_c[rip] + +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[rip] + + 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[rip] + mulsd xmm1,xmm0 + movq xmm4,qword ptr m_round_c[rip] + subsd xmm1,qword ptr real_0_5[rip] + + ucomisd xmm1,qword ptr real_m_1022[rip] + jae exp_real_3_pn + + ucomisd xmm1,qword ptr real_m_1076[rip] + jb exp_real_3_n_large + + movq xmm9,qword ptr qw_1078[rip] + + call exp_real_3_pn_ + + mulsd xmm0,qword ptr real_2_p_m_55[rip] + ret + +exp_real_3: + movlpd xmm1,qword ptr real_1_d_ln2[rip] + mulsd xmm1,xmm0 + movq xmm4,qword ptr round_c[rip] + addsd xmm1,qword ptr real_0_5[rip] + + ucomisd xmm1,qword ptr real_1024[rip] + jae exp_real_3_large + +exp_real_3_pn: + movq xmm9,qword ptr qw_1023[rip] + +exp_real_3_pn_: + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 + + movlpd xmm13,qword ptr real_ln2_42[rip] + movlpd xmm14,qword ptr real_ln2_42_l[rip] + + mulsd xmm13,xmm1 + mulsd xmm14,xmm1 + + cvtpd2dq xmm15,xmm1 + subsd xmm0,xmm13 + + movsd xmm13,xmm0 + subsd xmm0,xmm14 + + paddq xmm15,xmm9 + psllq xmm15,52 + att_jmp exp_real_ + +exp_real_3_large: + ucomisd xmm1,qword ptr real_1025[rip] + jae exp_real_3_larger + + movq xmm9,qword ptr qw_1022[rip] + + att_call exp_real_3_pn_ + + mulsd xmm0,qword ptr real_2_0[rip] + ret + +exp_real_3_larger: + ucomisd xmm0,qword ptr real_max[rip] + ja exp_real_3_inf_or_nan + movlpd xmm0,qword ptr qword ptr real_2_p_1023[rip] + mulsd xmm0,xmm0 +exp_real_3_inf_or_nan: + ret + +exp_real_3_n_large: + att_jp exp_real_3_inf_or_nan # nan + movlpd xmm0,qword ptr real_0_0[rip] + ret + + .globl ln_real + +ln_real: + ucomisd xmm0,qword ptr real_0_8243[rip] + jb ln_real_small # x<0.82436063535006407342 | nan + ucomisd xmm0,qword ptr real_1_6487[rip] + ja ln_real_large # x>1.6487212707001281468 + movlpd xmm2,qword ptr real_1_0[rip] + + ucomisd xmm0,qword ptr real_7_d_6[rip] + 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[rip] + jae ln_real_ + + ucomisd xmm0,qword ptr real_0_0[rip] + jbe ln_real_less_or_equal_0_or_nan + +# denormalized number + + mulsd xmm0,qword ptr real_2_p_55[rip] + + movlpd xmm1,qword ptr mask_significand[rip] + andpd xmm1,xmm0 + psrlq xmm0,52 + + movlpd xmm2,qword ptr real_1_0[rip] + movlpd xmm3,qword ptr real_0_5[rip] + orpd xmm2,xmm1 + orpd xmm3,xmm1 + + ucomisd xmm2,qword ptr real_1_6487[rip] + jbe ln_real_dn_g1 + + subsd xmm3,qword ptr real_1_0[rip] + psubq xmm0,xmmword ptr qw_1077[rip] + jmp ln_real_l1_ + +ln_real_dn_g1: + ucomisd xmm2,qword ptr real_7_d_6[rip] + + subsd xmm2,qword ptr real_1_0[rip] + psubq xmm0,xmmword ptr qw_1078[rip] + + ja ln_real_g_7_d_6 + jmp ln_real_g1_ + +ln_real_large: + ucomisd xmm0,qword ptr real_max[rip] + ja ln_real_inf_or_nan + +ln_real_: + movlpd xmm1,qword ptr mask_significand[rip] + andpd xmm1,xmm0 + psrlq xmm0,52 + + movlpd xmm2,qword ptr real_1_0[rip] + movlpd xmm3,qword ptr real_0_5[rip] + orpd xmm2,xmm1 + orpd xmm3,xmm1 + + ucomisd xmm2,qword ptr real_1_6487[rip] + jbe ln_real_g1 + jmp ln_real_l1 + +ln_real_0: + movlpd xmm3,qword ptr ln_b_q_1[rip] + movlpd xmm2,qword ptr ln_b_p_1[rip] + + mulsd xmm3,xmm1 # q1 + mulsd xmm2,xmm1 # p1 + movsd xmm7,xmm1 # x + movlpd xmm5,qword ptr ln_b_q_2[rip] + movlpd xmm4,qword ptr ln_b_p_2[rip] + movsd xmm6,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + movsd xmm11,xmm1 # x + mulsd xmm7,xmm6 # x3 + + movlpd xmm9,qword ptr ln_b_q_3[rip] + movlpd xmm8,qword ptr ln_b_p_3[rip] + + mulsd xmm11,xmm0 # x5 + + mulsd xmm5,xmm6 # q2 + mulsd xmm4,xmm6 # p2 + + movlpd xmm10,qword ptr ln_b_q_4[rip] + + mulsd xmm9,xmm7 # q3 + mulsd xmm8,xmm7 # p3 + + mulsd xmm10,xmm0 # q4 + mulsd xmm0,qword ptr ln_b_p_4[rip] # p4 + + addsd xmm10,xmm11 # q4+x5 + + addsd xmm0,xmm8 # p3+p4 + addsd xmm9,xmm10 # q3+q4+x5 + + movlpd xmm6,qword ptr real_17_bits[rip] + + 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[rip] + + 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[rip] # p0+p1+p2+p3+p4 + addsd xmm3,qword ptr ln_b_q_0[rip] # q0+q1+q2+q3+q4+x5 + + mulsd xmm8,qword ptr real_0_5[rip] # 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[rip] + 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[rip] + movlpd xmm1,qword ptr real_0_25[rip] + + lea rcx,ln_b_c[rip] + lea rdx,ln_s_c[rip] + + 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[rip] + 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[rip] + 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[rip] # 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[rip] + movlpd xmm4,qword ptr ln_4_d_3_53_l[rip] + addsd xmm2,xmm1 + subsd xmm4,xmm6 + + movlpd xmm3,qword ptr ln_4_d_3_53[rip] + 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[rip] + + subsd xmm2,qword ptr real_1_0[rip] + + psubq xmm0,xmmword ptr qw_1023[rip] + + att_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[rip] + movlpd xmm3,qword ptr ln_b_p_1[rip] + mulsd xmm4,xmm1 # q1 + mulsd xmm3,xmm1 # p1 + movsd xmm8,xmm1 # x + + cvtdq2pd xmm0,xmm0 + + movlpd xmm6,qword ptr ln_b_q_2[rip] + movlpd xmm5,qword ptr ln_b_p_2[rip] + movsd xmm7,xmm2 # x2 + mulsd xmm2,xmm2 # x4 + + movsd xmm12,xmm1 # x + mulsd xmm8,xmm7 # x3 + + movlpd xmm10,qword ptr ln_b_q_3[rip] + movlpd xmm9,qword ptr ln_b_p_3[rip] + + mulsd xmm12,xmm2 # x5 + + mulsd xmm6,xmm7 # q2 + mulsd xmm5,xmm7 # p2 + + movlpd xmm11,qword ptr ln_b_p_4[rip] + + mulsd xmm10,xmm8 # q3 + mulsd xmm9,xmm8 # p3 + + mulsd xmm11,xmm2 # p4 + mulsd xmm2,qword ptr ln_b_q_4[rip] # q4 + + addsd xmm2,xmm12 # q4+x5 + + addsd xmm2,xmm10 # q3+q4+x5 + addsd xmm9,xmm11 # p3+p4 + + movlpd xmm7,qword ptr real_17_bits[rip] + + 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[rip] + + movlpd xmm6,qword ptr real_ln2_42_l[rip] + + 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[rip] + + addsd xmm2,qword ptr ln_b_q_0[rip] # q0+q1+q2+q3+q4+x5 + addsd xmm3,qword ptr ln_b_p_0[rip] # p0+p1+p2+p3+p4 + + mulsd xmm14,qword ptr real_0_5[rip] # 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[rip] + 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[rip] + movlpd xmm1,qword ptr real_0_25[rip] + + lea rcx,ln_b_c[rip] + lea rdx,ln_s_c[rip] + + 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[rip] + + 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[rip] + + movlpd xmm6,qword ptr real_ln2_42_l[rip] + + 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[rip] + + 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[rip] # 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[rip] + addsd xmm6,qword ptr ln_4_d_3_42_l[rip] + att_jmp ln_real_g1_l + +ln_real_s: + movlpd xmm3,qword ptr ln_s_q_1[rip] + movlpd xmm2,qword ptr ln_s_p_1[rip] + + mulsd xmm3,xmm1 # q1 + mulsd xmm2,xmm1 # p1 + movsd xmm7,xmm1 # x + movlpd xmm5,qword ptr ln_s_q_2[rip] + movlpd xmm4,qword ptr ln_s_p_2[rip] + movsd xmm6,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + movsd xmm11,xmm1 # x + mulsd xmm7,xmm6 # x3 + + movlpd xmm9,qword ptr ln_s_q_3[rip] + movlpd xmm8,qword ptr ln_s_p_3[rip] + + mulsd xmm11,xmm0 # x5 + + mulsd xmm5,xmm6 # q2 + mulsd xmm4,xmm6 # p2 + + movlpd xmm10,qword ptr ln_s_q_4[rip] + + mulsd xmm9,xmm7 # q3 + mulsd xmm8,xmm7 # p3 + + mulsd xmm10,xmm0 # q4 + mulsd xmm0,qword ptr ln_s_p_4[rip] # p4 + + addsd xmm10,xmm11 # q4+x5 + + addsd xmm0,xmm8 # p3+p4 + addsd xmm9,xmm10 # q3+q4+x5 + + movlpd xmm6,qword ptr real_17_bits[rip] + + 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[rip] + + 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[rip] # p0+p1+p2+p3+p4 + addsd xmm3,qword ptr ln_s_q_0[rip] # q0+q1+q2+q3+q4+x5 + + mulsd xmm8,qword ptr real_0_5[rip] # 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[rip] + 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[rip] + + psubq xmm0,xmmword ptr qw_1022[rip] +ln_real_l1_: + movsd xmm1,xmm3 # x + mulsd xmm3,xmm3 # x2 + + movlpd xmm4,qword ptr ln_s_q_1[rip] + movlpd xmm2,qword ptr ln_s_p_1[rip] + mulsd xmm4,xmm1 # q1 + mulsd xmm2,xmm1 # p1 + movsd xmm8,xmm1 # x + + cvtdq2pd xmm0,xmm0 + + movlpd xmm6,qword ptr ln_s_q_2[rip] + movlpd xmm5,qword ptr ln_s_p_2[rip] + movsd xmm7,xmm3 # x2 + mulsd xmm3,xmm3 # x4 + + movsd xmm12,xmm1 # x + mulsd xmm8,xmm7 # x3 + + movlpd xmm10,qword ptr ln_s_q_3[rip] + movlpd xmm9,qword ptr ln_s_p_3[rip] + + mulsd xmm12,xmm3 # x5 + + mulsd xmm6,xmm7 # q2 + mulsd xmm5,xmm7 # p2 + + movlpd xmm11,qword ptr ln_s_p_4[rip] + + mulsd xmm10,xmm8 # q3 + mulsd xmm9,xmm8 # p3 + + mulsd xmm11,xmm3 # p4 + mulsd xmm3,qword ptr ln_s_q_4[rip] # q4 + + addsd xmm3,xmm12 # q4+x5 + + addsd xmm3,xmm10 # q3+q4+x5 + addsd xmm9,xmm11 # p3+p4 + + movlpd xmm7,qword ptr real_17_bits[rip] + + 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[rip] + + movlpd xmm6,qword ptr real_ln2_42_l[rip] + + 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[rip] + + addsd xmm3,qword ptr ln_s_q_0[rip] # q0+q1+q2+q3+q4+x5 + addsd xmm2,qword ptr ln_s_p_0[rip] # p0+p1+p2+p3+p4 + + mulsd xmm14,qword ptr real_0_5[rip] # 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[rip] + 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[rip] + divsd xmm0,qword ptr real_0_0[rip] # yield -inf + ret + +ln_real_less_0_or_nan: + att_jp ln_real_inf_or_nan # nan + + movsd xmm0,qword ptr real_0_0[rip] # yield nan + divsd xmm0,xmm0 + +ln_real_inf_or_nan: + ret + + .globl log10_real + +log10_real: +# ucomisd xmm0,qword ptr real_0_7025 + ucomisd xmm0,qword ptr real_0_833[rip] +# jb log10_real_small # x<0.7025 | nan + jb log10_real_small # x<0.833 | nan + ucomisd xmm0,qword ptr real_1_666[rip] + ja log10_real_large # x>1.666 + + movlpd xmm2,qword ptr real_1_0[rip] + + ucomisd xmm0,qword ptr real_7_d_6[rip] + 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[rip] + jae log10_real_ + + ucomisd xmm0,qword ptr real_0_0[rip] + jbe log10_real_less_or_equal_0_or_nan + +# denormalized number + + mulsd xmm0,qword ptr real_2_p_55[rip] + + movlpd xmm1,qword ptr mask_significand[rip] + andpd xmm1,xmm0 + psrlq xmm0,52 + + movlpd xmm2,qword ptr real_1_0[rip] + movlpd xmm3,qword ptr real_0_5[rip] + orpd xmm2,xmm1 + orpd xmm3,xmm1 + +# ucomisd xmm2,qword ptr real_1_405 + ucomisd xmm2,qword ptr real_1_666[rip] + jbe log10_real_dn_g1 + + subsd xmm3,qword ptr real_1_0[rip] + psubq xmm0,xmmword ptr qw_1077[rip] + jmp log10_real_l1_ + +log10_real_dn_g1: + ucomisd xmm2,qword ptr real_7_d_6[rip] + + subsd xmm2,qword ptr real_1_0[rip] + psubq xmm0,xmmword ptr qw_1078[rip] + + ja log10_real_g_7_d_6 + jmp log10_real_g1_ + +log10_real_large: + ucomisd xmm0,qword ptr real_max[rip] + ja log10_real_inf_or_nan + +log10_real_: + movlpd xmm1,qword ptr mask_significand[rip] + andpd xmm1,xmm0 + psrlq xmm0,52 + + movlpd xmm2,qword ptr real_1_0[rip] + movlpd xmm3,qword ptr real_0_5[rip] + orpd xmm2,xmm1 + orpd xmm3,xmm1 + +# ucomisd xmm2,qword ptr real_1_405 + ucomisd xmm2,qword ptr real_1_666[rip] + jbe log10_real_g1 + jmp log10_real_l1 + +log10_real_0: + movlpd xmm2,qword ptr log10_b_p_1[rip] + movlpd xmm3,qword ptr log10_b_q_1[rip] + mulsd xmm2,xmm1 # p1 + mulsd xmm3,xmm1 # q1 + movsd xmm7,xmm1 # x + + movlpd xmm4,qword ptr log10_b_p_2[rip] + movlpd xmm5,qword ptr log10_b_q_2[rip] + mulsd xmm7,xmm0 # x3 + movsd xmm6,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + movlpd xmm8,qword ptr log10_b_p_3[rip] + movlpd xmm9,qword ptr log10_b_q_3[rip] + + mulsd xmm4,xmm6 # p2 + mulsd xmm5,xmm6 # q2 + + movlpd xmm10,qword ptr log10_b_p_4[rip] + + 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[rip] # q4 + + addsd xmm0,xmm7 # q4+x5 + + addsd xmm9,xmm0 # q3+q4+x5 + addsd xmm8,xmm10 # p3+p4 + + mulsd xmm6,qword ptr real_0_5[rip] # 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[rip] + movsd xmm0,xmm1 # x + + addsd xmm9,qword ptr log10_b_q_0[rip] # q0+q1+q2+q3+q4+x5 + addsd xmm2,qword ptr log10_b_p_0[rip] # 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[rip] # (x-0.5x2) * (1/ln 10)_l + mulsd xmm0,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h + mulsd xmm4,qword ptr d1ln10_26[rip] # (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[rip] + movlpd xmm1,qword ptr real_0_25[rip] + + lea rcx,log10_b_c[rip] + lea rdx,log10_s_c[rip] + + 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[rip] # 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[rip] + 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[rip] # (x-0.5x2) * (1/ln 10)_l + mulsd xmm0,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h + mulsd xmm4,qword ptr d1ln10_26[rip] # (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[rip] + movlpd xmm5,qword ptr log10_4_d_3_53[rip] + + addsd xmm3,xmm4 + addsd xmm0,qword ptr log10_4_d_3_53_l[rip] + + 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[rip] + + subsd xmm2,qword ptr real_1_0[rip] + + psubq xmm0,xmmword ptr qw_1023[rip] + + att_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[rip] + movlpd xmm10,qword ptr log10_b_q_1[rip] + mulsd xmm11,xmm1 # p1 + mulsd xmm10,xmm1 # q1 + movsd xmm7,xmm1 # x + + cvtdq2pd xmm12,xmm0 + + movlpd xmm0,qword ptr log10_b_p_2[rip] + movlpd xmm5,qword ptr log10_b_q_2[rip] + mulsd xmm7,xmm2 # x3 + movsd xmm6,xmm2 # x2 + mulsd xmm2,xmm2 # x4 + + movlpd xmm8,qword ptr log10_b_p_3[rip] + movlpd xmm9,qword ptr log10_b_q_3[rip] + + mulsd xmm0,xmm6 # p2 + mulsd xmm5,xmm6 # q2 + + movlpd xmm3,qword ptr log10_b_p_4[rip] + + mulsd xmm8,xmm7 # p3 + mulsd xmm9,xmm7 # q3 + + mulsd xmm6,xmm7 # x5 + + mulsd xmm3,xmm2 # p4 + mulsd xmm2,qword ptr log10_b_q_4[rip] # q4 + + movsd xmm4,xmm1 # x + addsd xmm2,xmm6 # q4+x5 + movlpd xmm6,qword ptr real_m_0_5[rip] + + addsd xmm9,xmm2 # q3+q4+x5 + addsd xmm8,xmm3 # p3+p4 + + movlpd xmm13,qword ptr real_log2_10_42_l[rip] + movlpd xmm2,qword ptr real_14_bits[rip] + + 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[rip] + + movsd xmm3,xmm1 # x + subsd xmm4,xmm2 # x_l + addsd xmm6,qword ptr real_1_0[rip] # 1-0.5x + movlpd xmm5,qword ptr real_13_bits[rip] + + 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[rip] # q0+q1+q2+q3+q4+x5 + addsd xmm0,qword ptr log10_b_p_0[rip] # 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[rip] # (x-0.5x2) * (1/ln 10)_l + mulsd xmm6,xmm1 # (1-0.5x)_l*x + mulsd xmm2,qword ptr d1ln10_26[rip] # (x-0.5x2)_h * (1/ln 10)_h + + addsd xmm6,xmm4 # (x-0.5x2)_l + + mulsd xmm6,qword ptr d1ln10_26[rip] # (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[rip] + movlpd xmm1,qword ptr real_0_25[rip] + + lea rcx,log10_b_c[rip] + lea rdx,log10_s_c[rip] + + 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[rip] # 0.5x2 + + addsd xmm10,xmm6 # q2+q3+q4+x5 + addsd xmm5,xmm9 # p2+p3+p4 + + movlpd xmm6,qword ptr real_log2_10_42_l[rip] + + addsd xmm10,xmm4 # q1+q2+q3+q4+x5 + addsd xmm3,xmm5 # p1+p2+p3+p4 + + movlpd xmm5,qword ptr real_26_bits[rip] + movsd xmm2,xmm1 # x + + mulsd xmm6,xmm0 + mulsd xmm0,qword ptr real_log2_10_42[rip] + + 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[rip] + addsd xmm0,qword ptr log10_4_d_3_42[rip] + + 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[rip] # (x-0.5x2) * (1/ln 10)_l + mulsd xmm2,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h + mulsd xmm5,qword ptr d1ln10_26[rip] # (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[rip] + movlpd xmm3,qword ptr log10_s_q_1[rip] + mulsd xmm2,xmm1 # p1 + mulsd xmm3,xmm1 # q1 + movsd xmm7,xmm1 # x + + movlpd xmm4,qword ptr log10_s_p_2[rip] + movlpd xmm5,qword ptr log10_s_q_2[rip] + mulsd xmm7,xmm0 # x3 + movsd xmm6,xmm0 # x2 + mulsd xmm0,xmm0 # x4 + + movlpd xmm8,qword ptr log10_s_p_3[rip] + movlpd xmm9,qword ptr log10_s_q_3[rip] + + mulsd xmm4,xmm6 # p2 + mulsd xmm5,xmm6 # q2 + + movlpd xmm10,qword ptr log10_s_p_4[rip] + + 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[rip] # q4 + + addsd xmm0,xmm7 # q4+x5 + + addsd xmm9,xmm0 # q3+q4+x5 + addsd xmm8,xmm10 # p3+p4 + + mulsd xmm6,qword ptr real_0_5[rip] # 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[rip] + movsd xmm0,xmm1 # x + + addsd xmm9,qword ptr log10_s_q_0[rip] # q0+q1+q2+q3+q4+x5 + addsd xmm2,qword ptr log10_s_p_0[rip] # 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[rip] # (x-0.5x2) * (1/ln 10)_l + mulsd xmm0,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h + mulsd xmm4,qword ptr d1ln10_26[rip] # (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[rip] + + psubq xmm0,xmmword ptr qw_1022[rip] +log10_real_l1_: + movsd xmm1,xmm3 # x + mulsd xmm3,xmm3 # x2 + + movlpd xmm2,qword ptr log10_s_p_1[rip] + movlpd xmm4,qword ptr log10_s_q_1[rip] + mulsd xmm2,xmm1 # p1 + mulsd xmm4,xmm1 # q1 + movsd xmm8,xmm1 # x + + cvtdq2pd xmm0,xmm0 + + movlpd xmm5,qword ptr log10_s_p_2[rip] + movlpd xmm6,qword ptr log10_s_q_2[rip] + mulsd xmm8,xmm3 # x3 + movsd xmm7,xmm3 # x2 + mulsd xmm3,xmm3 # x4 + + movlpd xmm9,qword ptr log10_s_p_3[rip] + movlpd xmm10,qword ptr log10_s_q_3[rip] + + mulsd xmm5,xmm7 # p2 + mulsd xmm6,xmm7 # q2 + + movlpd xmm11,qword ptr log10_s_p_4[rip] + + 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[rip] # q4 + + addsd xmm3,xmm8 # q4+x5 + + addsd xmm10,xmm3 # q3+q4+x5 + addsd xmm9,xmm11 # p3+p4 + + mulsd xmm7,qword ptr real_0_5[rip] # 0.5x2 + + addsd xmm10,xmm6 # q2+q3+q4+x5 + addsd xmm5,xmm9 # p2+p3+p4 + + movlpd xmm6,qword ptr real_log2_10_42_l[rip] + + addsd xmm10,xmm4 # q1+q2+q3+q4+x5 + addsd xmm2,xmm5 # p1+p2+p3+p4 + + movlpd xmm5,qword ptr real_26_bits[rip] + movsd xmm3,xmm1 # x + + mulsd xmm6,xmm0 + mulsd xmm0,qword ptr real_log2_10_42[rip] + + addsd xmm10,qword ptr log10_s_q_0[rip] # q0+q1+q2+q3+q4+x5 + addsd xmm2,qword ptr log10_s_p_0[rip] # 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[rip] # (x-0.5x2) * (1/ln 10)_l + mulsd xmm3,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h + mulsd xmm5,qword ptr d1ln10_26[rip] # (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[rip] + divsd xmm0,qword ptr real_0_0[rip] # yield -inf + ret + +log10_real_less_0_or_nan: + att_jp log10_real_inf_or_nan # nan + + movsd xmm0,qword ptr real_0_0[rip] # yield nan + divsd xmm0,xmm0 + +log10_real_inf_or_nan: + ret + + + .globl pow_real + +pow_real: + ucomisd xmm0,qword ptr real_0_0[rip] + je pow_real_to_zero_or_nan # y==0.0 | nan + + ucomisd xmm1,qword ptr real_0_83[rip] + jb pow_real_small # x<0.83 | nan +pow_real_not_small: + ucomisd xmm1,qword ptr real_1_66[rip] + ja pow_real_large + + ucomisd xmm1,qword ptr real_7_d_6[rip] + + movlpd xmm2,qword ptr real_1_0[rip] + + 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[rip] + ja pow_real_exp_too_large + + ucomisd xmm0,qword ptr real_power_exp_too_small[rip] + jb pow_real_exp_too_large_m + + ucomisd xmm1,xmm2 + + subsd xmm1,xmm2 + + lea rcx,log2_b_c[rip] + lea rdx,log2_s_c[rip] + 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[rip] # 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[rip] + 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[rip] # (x-0.5x2) * (1/ln 2)_l + mulsd xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h + mulsd xmm3,qword ptr d1ln2_26[rip] # (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[rip] + + 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[rip] + jae pow_real_overflow # because 1.1666666666666667407^4605>2^1024 + + ucomisd xmm0,qword ptr real_m_4834_0[rip] + jbe pow_real_underflow # because 1.1666666666666667407^-4834<2^-1075 + + subsd xmm1,xmm2 + + mulsd xmm1,qword ptr real_0_75[rip] + lea rcx,log2_b_c[rip] + lea rdx,log2_s_c[rip] + + movlpd xmm2,qword ptr real_0_25[rip] + + 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[rip] # 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[rip] + 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[rip] # (x-0.5x2) * (1/ln 2)_l + mulsd xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h + mulsd xmm3,qword ptr d1ln2_26[rip] # (x-0.5x2)_h * (1/ln 2)_h + + + movlpd xmm6,qword ptr log2_4_d_3_53[rip] + 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[rip] # 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[rip] + + addsd xmm1,xmm3 # xh+xl+r + + andpd xmm1,xmm6 # (log2 x)_h + andpd xmm6,xmm0 # y_h + + subsd xmm3,xmm1 # xh-(log2 x)_h + att_jmp pow_real_2 + +pow_real_small: + ucomisd xmm1,qword ptr real_2_p_m_1022[rip] + jb pow_real_negative_zero_denormalized_or_nan + +pow_real_small_: + ucomisd xmm0,qword ptr real_4000_0[rip] + att_jae pow_real_underflow # because 0.83^4000<2^-1075 + + ucomisd xmm0,qword ptr real_m_3810_0[rip] + ja log2_real_ + att_jmp pow_real_overflow # because 0.83^-3810>2^1024 + +pow_real_large: + ucomisd xmm1,qword ptr real_max[rip] + ja pow_real_inf + + ucomisd xmm0,qword ptr real_1401_0[rip] + att_jae pow_real_overflow # because 1.66^1401>2^1024 + + ucomisd xmm0,qword ptr real_m_1471_0[rip] + att_jbe pow_real_underflow # because 1.66^-1471<2^-1075 + +log2_real_: + movlpd xmm2,qword ptr mask_significand[rip] + andpd xmm2,xmm1 + psrlq xmm1,52 + +log2_real__: + movlpd xmm3,qword ptr real_1_0[rip] + movlpd xmm4,qword ptr real_0_5[rip] + orpd xmm3,xmm2 + orpd xmm4,xmm2 + + ucomisd xmm3,qword ptr real_1_66[rip] + + movlpd xmm5,qword ptr real_1_0[rip] + + ja log2_real_l1 + + ucomisd xmm3,qword ptr real_7_d_6[rip] + ja pow_real_g_7_d_6 + +log2_real_g1: + subsd xmm3,xmm5 + + psubq xmm1,xmmword ptr qw_1023[rip] + + movsd xmm6,xmm3 # x + mulsd xmm3,xmm3 # x2 + + movlpd xmm2,qword ptr log2_b_p_1[rip] + movlpd xmm5,qword ptr log2_b_q_1[rip] + mulsd xmm2,xmm6 # p1 + mulsd xmm5,xmm6 # q1 + movsd xmm9,xmm6 # x + + cvtdq2pd xmm4,xmm1 + + movlpd xmm1,qword ptr log2_b_p_2[rip] + movlpd xmm7,qword ptr log2_b_q_2[rip] + mulsd xmm9,xmm3 # x3 + movsd xmm8,xmm3 # x2 + mulsd xmm3,xmm3 # x4 + + movlpd xmm10,qword ptr log2_b_p_3[rip] + movlpd xmm11,qword ptr log2_b_q_3[rip] + + mulsd xmm1,xmm8 # p2 + mulsd xmm7,xmm8 # q2 + + movlpd xmm12,qword ptr log2_b_p_4[rip] + + 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[rip] # 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[rip] + movsd xmm1,xmm6 # x + + addsd xmm11,qword ptr log2_b_q_0[rip] # q0+q1+q2+q3+x4 + addsd xmm2,qword ptr log2_b_p_0[rip] # 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[rip] # (x-0.5x2) * (1/ln 2)_l + mulsd xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h + mulsd xmm3,qword ptr d1ln2_26[rip] # (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[rip] + + 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 + att_jmp pow_real_2 + +log2_real_l1: + subsd xmm4,xmm5 + + psubq xmm1,xmmword ptr qw_1022[rip] + + movsd xmm6,xmm4 # x + mulsd xmm4,xmm4 # x2 + + movlpd xmm2,qword ptr log2_s_p_1[rip] + movlpd xmm5,qword ptr log2_s_q_1[rip] + mulsd xmm2,xmm6 # p1 + mulsd xmm5,xmm6 # q1 + movsd xmm9,xmm6 # x + + movlpd xmm3,qword ptr log2_s_p_2[rip] + movlpd xmm7,qword ptr log2_s_q_2[rip] + mulsd xmm9,xmm4 # x3 + movsd xmm8,xmm4 # x2 + mulsd xmm4,xmm4 # x4 + + movlpd xmm10,qword ptr log2_s_p_3[rip] + movlpd xmm11,qword ptr log2_s_q_3[rip] + + mulsd xmm3,xmm8 # p2 + mulsd xmm7,xmm8 # q2 + + movlpd xmm12,qword ptr log2_s_p_4[rip] + + 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[rip] # 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[rip] + movsd xmm1,xmm6 # x + + addsd xmm11,qword ptr log2_s_q_0[rip] # q0+q1+q2+q3+x4 + addsd xmm2,qword ptr log2_s_p_0[rip] # p0+p1+p2+p3+p4 + + att_jmp log2_real_gl + +pow_real_to_zero_or_nan: + jp pow_real_to_nan + movlpd xmm0,qword ptr real_1_0[rip] + ret + +pow_real_negative_zero_denormalized_or_nan: + ucomisd xmm1,qword ptr real_0_0[rip] + jbe pow_real_zero_negative_or_nan + + # denormalized > 0.0 + +pow_real_denormalized: + ucomisd xmm0,qword ptr real_1_052[rip] + att_jae pow_real_underflow # because (2^-1022)^1.052<2^-1075 + + ucomisd xmm0,qword ptr real_m_1_052[rip] + att_jbe pow_real_overflow # because (2^-1022)^-1.052>2^1075 + + mulsd xmm1,qword ptr real_2_p_55[rip] + + movlpd xmm2,qword ptr mask_significand[rip] + andpd xmm2,xmm1 + + movq xmm5,qword ptr qw_55[rip] + psrlq xmm1,52 + + psubq xmm1,xmm5 + att_jmp log2_real__ + +pow_real_zero_negative_or_nan: + je pow_real_zero_or_nan + + movlpd xmm2,qword ptr mask_all_except_sign[rip] + andpd xmm2,xmm0 # |y| + + ucomisd xmm2,qword ptr real_2_p_53[rip] + jae pow_real_negative_to_large_or_inf + + ucomisd xmm2,qword ptr real_1_0[rip] + jb pow_real_negative_to_non_int + + movq xmm3,qword ptr round_c[rip] + psrlq xmm2,52 + psubq xmm3,xmm2 + + movq xmm4,qword ptr mask_all_one[rip] + movq xmm5,qword ptr mask_all_one_except_last[rip] + psllq xmm4,xmm3 + psllq xmm5,xmm3 + andpd xmm4,xmm0 + andpd xmm5,xmm0 # 1 -> 2 and -1 -> -2 + + ucomisd xmm4,xmm0 + att_jne pow_real_negative_to_non_int + + ucomisd xmm5,xmm0 + je pow_real_negative_to_even_int + +pow_real_negative_to_odd_int: + att_call pow_real_negative_to_even_int + movlpd xmm1,qword ptr mask_sign[rip] + xorpd xmm0,xmm1 + ret + +pow_real_negative_to_even_int: + movlpd xmm2,qword ptr mask_all_except_sign[rip] + andpd xmm1,xmm2 # |x| + ucomisd xmm1,qword ptr real_0_83[rip] # x>=0.83 + att_jae pow_real_not_small + + ucomisd xmm1,qword ptr real_2_p_m_1022[rip] + att_jae pow_real_small_ + att_jmp pow_real_denormalized + +pow_real_negative_to_large_or_inf: + movlpd xmm2,qword ptr mask_all_except_sign[rip] + andpd xmm1,xmm2 # |x| + ucomisd xmm1,qword ptr real_0_83[rip] + 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[rip] + + movlpd xmm2,qword ptr real_1_0[rip] + + ja pow_real_large_to_large_or_inf # because 1.16^(2^53) too large or small + + att_jmp pow_real_between_0_83_and_7_d_6 + +pow_real_negative_to_non_int: + ucomisd xmm1,qword ptr real_m_max[rip] + jb pow_real_m_inf_to_non_int # x==-inf + movlpd xmm0,qword ptr real_0_0[rip] + + 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[rip] + orpd xmm2,xmm1 # 0.0 -> 1.0 and -0.0 -> -1.0 + ucomisd xmm2,qword ptr real_0_0[rip] + 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[rip] + att_jb pow_real_overflow + +pow_real_inf_to_negative: +pow_real_underflow: + movlpd xmm0,qword ptr real_0_0[rip] + ret + +pow_real_m_inf_to_non_int: +pow_real_large_to_large_or_inf: + ucomisd xmm0,qword ptr real_0_0[rip] + att_jb pow_real_underflow + +pow_real_overflow: + movlpd xmm0,qword ptr real_1_0[rip] + divsd xmm0,qword ptr real_0_0[rip] # inf + ret + +pow_real_m_zero: + movlpd xmm2,qword ptr mask_all_except_sign[rip] + andpd xmm2,xmm0 # |y| + + ucomisd xmm2,qword ptr real_2_p_53[rip] + att_jae pow_real_m_zero_to_non_odd_int + + ucomisd xmm2,qword ptr real_m_1_0[rip] + att_jb pow_real_m_zero_to_non_odd_int + + movq xmm4,qword ptr round_c[rip] + psrlq xmm2,52 + psubq xmm4,xmm2 + + movq xmm5,qword ptr mask_all_one_except_last[rip] + psllq xmm5,xmm4 + andpd xmm5,xmm0 # 1 -> 2 and -1 -> -2 + + ucomisd xmm5,xmm0 + att_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[rip] + divsd xmm0,qword ptr real_0_0[rip] # -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[rip] + att_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 + att_ja pow_real_overflow + att_jmp pow_real_underflow + +pow_real_exp_too_large_m: + ucomisd xmm1,xmm2 + je power_one_to_large_or_inf_m + att_jb pow_real_overflow + att_jmp pow_real_underflow + +power_one_to_large_or_inf: + ucomisd xmm0,qword ptr real_max[rip] + ja power_one_to_inf + movsd xmm0,xmm1 + ret + +power_one_to_large_or_inf_m: + ucomisd xmm0,qword ptr real_m_max[rip] + 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[rip] + lea rcx,log2_b_c[rip] + lea rdx,log2_s_c[rip] + + movlpd xmm4,qword ptr real_0_25[rip] + + ucomisd xmm3,xmm4 + subsd xmm3,xmm4 + + cmovb rcx,rdx + psubq xmm1,xmmword ptr qw_1023[rip] + + 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[rip] # 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[rip] + 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[rip] # 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[rip] # (x-0.5x2) * (1/ln 2)_l + mulsd xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h + mulsd xmm3,qword ptr d1ln2_26[rip] # (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[rip] # 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[rip] + + 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[rip] + jb exp2_l_n + ucomisd xmm0,qword ptr real_0_5[rip] + ja exp2_l +exp2_l_: + ucomisd xmm0,qword ptr real_m_0_25[rip] + jbe exp2_l_m_0_25 + ucomisd xmm0,qword ptr real_0_25[rip] + jae exp2_g_0_25 + + ucomisd xmm0,qword ptr real_0_0[rip] + + lea rcx,exp2_p0_c[rip] + lea rdx,exp2_m0_c[rip] + + 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[rip] + 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[rip] + addsd xmm0,xmm1 + addsd xmm6,xmm1 + + lea rcx,exp2_m0_25_c[rip] + + movsd xmm1,xmm0 # x + mulsd xmm0,xmm0 # x2 + att_jmp exp2_ + +exp2_g_0_25: + movlpd xmm1,qword ptr real_0_25[rip] + subsd xmm0,xmm1 + subsd xmm6,xmm1 + + lea rcx,exp2_p0_25_c[rip] + + movsd xmm1,xmm0 # x + mulsd xmm0,xmm0 # x2 + att_jmp exp2_ + +exp2_l_n: + movlpd xmm1,qword ptr real_m_0_5[rip] + movq xmm4,qword ptr m_round_c[rip] + jmp exp2_l_pn + +exp2_l: + movlpd xmm1,qword ptr real_0_5[rip] + movq xmm4,qword ptr round_c[rip] + +exp2_l_pn: + addsd xmm1,xmm0 + + movq xmm2,xmm1 + psrlq xmm1,52 + psubq xmm4,xmm1 + movq xmm1,qword ptr mask_all_one[rip] + psllq xmm1,xmm4 + andpd xmm1,xmm2 + + subsd xmm6,xmm1 + movsd xmm0,xmm7 + + cvtpd2dq xmm8,xmm1 + + ucomisd xmm1,qword ptr qword ptr real_1023[rip] + ja exp2_overflow0 + ucomisd xmm1,qword ptr qword ptr real_m_1022[rip] + jb exp2_underflow0 + + movq xmm9,qword ptr qw_1023[rip] + + addsd xmm0,xmm6 + + paddq xmm8,xmm9 + + psllq xmm8,52 + + att_call exp2_l_ + + mulsd xmm0,xmm8 + ret + +exp2_overflow0: + ucomisd xmm1,qword ptr qword ptr real_1025[rip] + ja exp2_overflow + + movq xmm9,qword ptr qw_1021[rip] + + addsd xmm0,xmm6 + + paddq xmm8,xmm9 + + psllq xmm8,52 + + att_call exp2_l_ + + mulsd xmm0,xmm8 + mulsd xmm0,qword ptr real_4_0[rip] + ret + +exp2_overflow: + movlpd xmm0,qword ptr qword ptr real_2_p_1023[rip] + mulsd xmm0,xmm0 + ret + +exp2_underflow0: + ucomisd xmm1,qword ptr qword ptr real_m_1076[rip] + jbe exp2_underflow + + movq xmm9,qword ptr qw_1078[rip] + + addsd xmm0,xmm6 + + paddq xmm8,xmm9 + + psllq xmm8,52 + + att_call exp2_l_ + + mulsd xmm0,xmm8 + mulsd xmm0,qword ptr real_2_p_m_55[rip] + ret + +exp2_underflow: + movlpd xmm0,qword ptr qword ptr real_0_0[rip] + ret + + .data + +real_13_bits: + .quad 0xffffff0000000000 +real_14_bits: + .quad 0xffffff8000000000 +real_17_bits: + .quad 0xfffffff000000000 +real_18_bits: + .quad 0xfffffff800000000 +real_21_bits: + .quad 0xffffffff00000000 +real_25_bits: + .quad 0xfffffffff0000000 +real_26_bits: + .quad 0xfffffffff8000000 +real_27_bits: + .quad 0xfffffffffc000000 +real_34_bits: + .quad 0xfffffffffff80000 +real_39_bits: + .quad 0xffffffffffffc000 +real_40_bits: + .quad 0xffffffffffffe000 +real_47_bits: + .quad 0xffffffffffffffc0 +real_48_bits: + .quad 0xffffffffffffffe0 +real_49_bits: + .quad 0xfffffffffffffff0 +real_50_bits: + .quad 0xfffffffffffffff8 +real_51_bits: + .quad 0xfffffffffffffffc + +real_abs_40_bits: + .quad 0x7fffffffffffe000 +real_abs_39_bits: + .quad 0x7fffffffffffc000 + +real_0_0: + .double 0r0.0 +real_0_25: + .double 0r0.25 +real_m_0_25: + .double 0r-0.25 +real_0_5: + .double 0r0.5 +real_m_0_5: + .double 0r-0.5 +real_1_0: + .double 0r1.0 +real_m_1_0: + .double 0r-1.0 +real_1_25: + .double 0r1.25 +real_m_1_25: + .double 0r-1.25 +real_1_5: + .double 0r1.5 +real_m_1_5: + .double 0r-1.5 +real_2_0: + .double 0r2.0 +real_m_2_0: + .double 0r-2.0 +real_3_0: + .double 0r3.0 +real_m_3_0: + .double 0r-3.0 +real_4_0: + .double 0r4.0 +real_m_4_0: + .double 0r-4.0 +real_5_0: + .double 0r5.0 +real_m_5_0: + .double 0r-5.0 + +real_2_p_m_11: + .double 0r4.8828125E-4 +real_2_p_m_12: + .double 0r2.44140625E-4 +real_m_2_p_m_12: + .double 0r-2.44140625E-4 +real_2_p_m_13: + .double 0r1.220703125E-4 +real_2_p_m_16: + .double 0r1.52587890625E-5 +real_m_2_p_m_16: + .double 0r-1.52587890625E-5 +real_2_p_m_18: + .double 0r3.814697265625E-6 +real_2_p_m_31: + .double 0r4.656612873077392578125E-10 + +real_0_4: + .double 0r0.4 +real_m_0_4: + .double 0r-0.4 +real_0_125: + .double 0r0.125 + +real_0_675: + .double 0r0.675 +real_m_0_675: + .double 0r-0.675 +real_0_9920: + .double 0r0.9920 +real_0_54000000017867999524: + .double 0r0.54000000017867999524 +real_m_0_54000000017867999524: + .double 0r-0.54000000017867999524 +real_0_03125: + .double 0r0.03125 +real_pi_d_2_m_0_03125: + .double 0r1.5395463267948965579 + +real_0_58: + .double 0r0.58 +real_m_0_58: + .double 0r-0.58 +real_0_54: + .double 0r0.54 +real_0_76: + .double 0r0.76 +real_0_65000000004061742054: + .double 0r0.65000000004061742054 + +real_0_26: + .double 0r0.26 +real_m_0_26: + .double 0r-0.26 +real_0_70: + .double 0r0.70 +real_m_0_70: + .double 0r-0.70 +real_1_4: + .double 0r1.4 +real_m_1_4: + .double 0r-1.4 + +real_0_7025: + .double 0r0.7025 +real_1_405: + .double 0r1.405 +real_0_8243: + .double 0r0.82436063535006407342 +real_1_6487: + .double 0r1.6487212707001281468 +real_0_833: + .double 0r0.833 +real_1_666: + .double 0r1.666 +real_7_d_6: + .double 0r1.1666666666666667407 +real_0_75: + .double 0r0.75 + +ln_4_d_3_53: + .double 0r2.8768207245178090137E-1 +ln_4_d_3_53_l: + .double 0r2.6071606164425639761E-17 +ln_4_d_3_42: + .double 0r2.8768207245173016417E-1 +ln_4_d_3_42_l: + .double 0r5.0763263831534079404E-14 + +log10_4_d_3_53: + .double 0r1.2493873660829994676E-1 +log10_4_d_3_53_l: + .double 0r6.3704258509422005489E-18 +log10_4_d_3_42: + .double 0r1.2493873660829990513E-1 +log10_4_d_3_42_l: + .double 0r4.8003789274385573126E-17 + +log2_4_d_3_53: + .double 0r4.1503749927884381332E-1 +log2_4_d_3_53_l: + .double 0r5.2244900613901090572E-18 +log2_4_d_3_42: + .double 0r4.1503749927881017356E-1 +log2_4_d_3_42_l: + .double 0r3.3644982136203633607E-14 + +mask_significand: + .quad 0x0000fffffffffffff + +real_1_66: + .double 0r1.66 +real_0_83: + .double 0r0.83 + +real_pi: + .double 0r3.1415926535897931160 +real_m_pi: + .double 0r-3.1415926535897931160 +real_pi_l: + .double 0r1.2246467991473532072E-16 +real_m_pi_l: + .double 0r-1.2246467991473532072E-16 + +real_pi_d_2: + .double 0r1.5707963267948965579 +real_pi_d_2_l: + .double 0r6.1232339957367660359E-17 + +real_m_pi_d_2: + .double 0r-1.5707963267948965579 +real_m_pi_d_2_l: + .double 0r-6.1232339957367660359E-17 + +real_pi_m_1_d_2: + .double 0r1.07079632679489655800 +real_pi_d_4: + .double 0r7.8539816339744827900E-1 +real_m_pi_d_4: + .double 0r-7.8539816339744827900E-1 +real_pi_d_4_l: + .double 0r3.0616169978683830179E-17 +real_m_pi_d_4_l: + .double 0r-3.0616169978683830179E-17 +real_pi_p_0_375_d_4: + .double 0r8.7914816339744830962E-1 +real_pi_p_0_875_d_4: + .double 0r1.0041481633974482790 +real_pi_p_1_5_d_4: + .double 0r1.1603981633974483096 +real_3_pi_d_4: + .double 0r2.3561944901923449288 +real_m_3_pi_d_4: + .double 0r-2.3561944901923449288 +real_5_pi_d_4: + .double 0r3.9269908169872413950 +real_m_5_pi_d_4: + .double 0r-3.9269908169872413950 +real_7_pi_d_4: + .double 0r5.4977871437821379530 +real_m_7_pi_d_4: + .double 0r-5.4977871437821379530 +real_9_pi_d_4: + .double 0r7.0685834705770345110 +real_m_9_pi_d_4: + .double 0r-7.0685834705770345110 +real_3_pi_d_2: + .double 0r4.7123889803846896740 +real_m_3_pi_d_2: + .double 0r-4.7123889803846896740 +real_3_pi_d_2_l: + .double 0r1.8369701987210296875E-16 +real_m_3_pi_d_2_l: + .double 0r-1.8369701987210296875E-16 +real_2_pi: + .double 0r6.2831853071795862320 +real_2_pi_l: + .double 0r2.4492935982947064143E-16 +real_m_2_pi_l: + .double 0r-2.4492935982947064143E-16 + +real_4_d_pi: + .double 0r1.2732395447351627649 +real_pi_d_4_26: + .double 0r7.8539815545082092285E-1 +real_pi_d_4_26_26: + .double 0r7.9466273561479283671E-9 +real_pi_d_4_52_l: + .double 0r3.0616169978683830179E-17 + +real_36825084_pi: + .double 0r115689413.36222703755 +real_m_36825084_pi: + .double 0r-115689413.36222703755 +real_36825084_pi_27: + .double 0r115689413.0 +real_36825084_pi_27_27: + .double 0r3.6222703754901885986E-1 +real_36825084_pi_54_l: + .double 0r1.3588030639188803060E-17 + +real_pi_d_2_m_1_0_52: + .double 0r5.7079632679489655800E-1 +real_1_0_m_pi_d_2_52: + .double 0r-5.7079632679489655800E-1 +real_pi_d_2_m_1_0_52_l: + .double 0r6.1232339957367660359E-17 +real_m_pi_d_2_m_1_0_52_l: + .double 0r-6.1232339957367660359E-17 +real_pi_d_2_p_1_0: + .double 0r2.57079632679489655800 +real_pi_d_2_p_1_0_l: + .double 0r6.1232339957367660359E-17 +real_m_pi_d_2_p_1_0_l: + .double 0r-6.1232339957367660359E-17 + +real_0_338: + .double 0r0.338 +real_m_0_338: + .double 0r-0.338 +real_0_542: + .double 0r0.542 +real_m_0_542: + .double 0r-0.542 +real_0_699: + .double 0r0.699 +real_m_0_699: + .double 0r-0.699 +real_0_89: + .double 0r0.89 +real_m_0_89: + .double 0r-0.89 +real_1_04: + .double 0r1.04 +real_m_1_04: + .double 0r-1.04 +real_1_18: + .double 0r1.18 +real_m_1_18: + .double 0r-1.18 + +real_0_5_pi_m_1_18: + .double 0r3.9079632679489667568E-1 +real_1_18_m_0_5_pi: + .double 0r-3.9079632679489667568E-1 +real_0_5_pi_m_1_04: + .double 0r5.3079632679489663349E-1 +real_1_04_m_0_5_pi: + .double 0r-5.3079632679489663349E-1 +real_0_5_pi_m_0_89: + .double 0r6.8079632679489665570E-1 +real_0_89_m_0_5_pi: + .double 0r-6.8079632679489665570E-1 + +real_pi_m_1_18: + .double 0r1.9615926535897934002 +real_n_pi_m_1_18: + .double 0r-1.9615926535897934002 +real_pi_m_1_04: + .double 0r2.1015926535897930805 +real_n_pi_m_1_04: + .double 0r-2.1015926535897930805 +real_pi_m_0_89: + .double 0r2.2515926535897934357 +real_n_pi_m_0_89: + .double 0r-2.2515926535897934357 +real_pi_m_0_699: + .double 0r2.4425926535897932723 +real_n_pi_m_0_699: + .double 0r-2.4425926535897932723 +real_pi_m_0_542: + .double 0r2.5995926535897933007 +real_n_pi_m_0_542: + .double 0r-2.5995926535897933007 +real_pi_m_0_338: + .double 0r2.8035926535897930378 +real_n_pi_m_0_338: + .double 0r-2.8035926535897930378 + +real_pi_p_0_338: + .double 0r3.4795926535897931942 +real_n_pi_p_0_338: + .double 0r-3.4795926535897931942 +real_pi_p_0_542: + .double 0r3.6835926535897933753 +real_n_pi_p_0_542: + .double 0r-3.6835926535897933753 +real_pi_p_0_699: + .double 0r3.8405926535897934038 +real_n_pi_p_0_699: + .double 0r-3.8405926535897934038 +real_pi_p_0_89: + .double 0r4.0315926535897936844 +real_n_pi_p_0_89: + .double 0r-4.0315926535897936844 +real_pi_p_1_04: + .double 0r4.1815926535897931515 +real_n_pi_p_1_04: + .double 0r-4.1815926535897931515 +real_pi_p_1_18: + .double 0r4.3215926535897928318 +real_n_pi_p_1_18: + .double 0r-4.3215926535897928318 + +real_2pi_m_1_18: + .double 0r5.1031853071795865162 +real_n_2pi_m_1_18: + .double 0r-5.1031853071795865162 +real_2pi_m_1_04: + .double 0r5.2431853071795861965 +real_n_2pi_m_1_04: + .double 0r-5.2431853071795861965 +real_2pi_m_0_89: + .double 0r5.3931853071795865517 +real_n_2pi_m_0_89: + .double 0r-5.3931853071795865517 +real_2pi_m_0_699: + .double 0r5.5841853071795863883 +real_n_2pi_m_0_699: + .double 0r-5.5841853071795863883 +real_2pi_m_0_542: + .double 0r5.7411853071795864167 +real_n_2pi_m_0_542: + .double 0r-5.7411853071795864167 +real_2pi_m_0_338: + .double 0r5.9451853071795861538 +real_n_2pi_m_0_338: + .double 0r-5.9451853071795861538 + +real_2pi_p_0_338: + .double 0r6.6211853071795863102 +real_n_2pi_p_0_338: + .double 0r-6.6211853071795863102 +real_2pi_p_0_542: + .double 0r6.8251853071795869354 +real_n_2pi_p_0_542: + .double 0r-6.8251853071795869354 +real_2pi_p_0_699: + .double 0r6.9821853071795860757 +real_n_2pi_p_0_699: + .double 0r-6.9821853071795860757 +real_2pi_p_0_89: + .double 0r7.1731853071795868004 +real_n_2pi_p_0_89: + .double 0r-7.1731853071795868004 + +atan_0_5_53: + .double 0r4.6364760900080609352E-1 +m_atan_0_5_53: + .double 0r-4.6364760900080609352E-1 +atan_0_5_53_l: + .double 0r2.2698777452961687092E-17 + +atan_sqrt_0_5: + .double 0r6.1547970867038737097E-1 +m_atan_sqrt_0_5: + .double 0r-6.1547970867038737097E-1 +atan_sqrt_0_5_l: + .double 0r-2.9904856561351187768E-17 + +real_h_pi_m_atan_s_2_53: + .double 0r6.1547970867038737097E-1 +real_h_pi_m_atan_s_2_53_l: + .double 0r-2.9904856561351187768E-17 + +real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53: + .double 0r3.2606526883842570363 +real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53_l: + .double 0r3.5657102106448616432E-17 +real_3_atan_sqrt_2_m_sqrt_2_m_1_5_pi_m_53_l: + .double 0r-3.5657102106448616432E-17 + +atan_sqrt_2: + .double 0r9.5531661812450929805E-1 +m_atan_sqrt_2: + .double 0r-9.5531661812450929805E-1 +atan_sqrt_2_l: + .double 0r-1.9885105943796805915E-17 + +real_h_pi_m_atan_2_52: + .double 0r4.6364760900080603800E-1 +real_h_pi_m_atan_2_52_l: + .double 0r7.8209928684219507951E-17 +real_2_p_2_5_pi_m_5_atan_2_53: + .double 0r4.3182380450040307451 +real_2_p_2_5_pi_m_5_atan_2_53_l: + .double 0r-1.6406186889148070581E-16 +real_5_atan_2_m_2_m_2_5_pi_53_l: + .double 0r1.6406186889148070581E-16 + +atan_2_53: + .double 0r1.1071487177940904090 +m_atan_2_53: + .double 0r-1.1071487177940904090 +atan_2_53_l: + .double 0r9.4044713735663794124E-17 +real_n_2_m_5_atan_2_53: + .double 0r-3.5357435889704524890 +real_n_2_m_5_atan_2_53_l: + .double 0r-2.6134358828256379104E-17 + +real_5_atan_2_m_2_53: + .double 0r3.5357435889704524890 +real_5_atan_2_m_2_53_l: + .double 0r2.6134358828256379104E-17 + +real_ln_2_t_0_5: + .double 0r3.4657359027997265471E-1 +real_n_ln_2_t_0_5: + .double 0r-3.4657359027997265471E-1 +real_ln_2_t_1_5: + .double 0r1.0397207708399179641 +real_ln2_42: + .double 0r0.69314718055989033019 +real_ln2_42_l: + .double 0r5.4979230187083711552E-14 +real_1_d_ln2: + .double 0r1.4426950408889634074 + +real_log2_10_42: + .double 0r0.30102999566395283182 +real_log2_10_42_l: + .double 0r2.8363394551044964154E-14 + +#d1ln10: +# .double 0r4.3429448190325181667E-1 +d1ln10_26: + .double 0r4.3429447710514068603E-1 +d1ln10_26_l: + .double 0r4.7981111416159728067E-9 + +#d1ln2: +# .double 0r1.4426950408889633870 +d1ln2_26: + .double 0r1.4426950216293334961 +d1ln2_26_l: + .double 0r1.9259629911266174689E-8 + + .align 4 +round_c: + .quad 0x3ff+52 + .quad 0x3ff+52 +m_round_c: + .quad 0x0bff+52 + .quad 0x0bff+52 +round_even_c: + .quad 0x3ff+53 + .quad 0x3ff+53 +m_round_even_c: + .quad 0x0bff+53 + .quad 0x0bff+53 +mask_all_one: + .quad -1 + .quad -1 +mask_all_one_except_last: + .quad -2 + .quad -2 +mask_all_one_except_second_last: + .quad -3 + .quad -3 +qw_1023: + .quad 0x3ff + .quad 0x3ff +qw_1022: + .quad 0x3fe + .quad 0x3fe +qw_1021: + .quad 0x3fd + .quad 0x3fd +qw_1077: + .quad 0x3ff+54 + .quad 0x3ff+54 +qw_1078: + .quad 0x3ff+55 + .quad 0x3ff+55 +qw_55: + .quad 55 + .quad 55 +mask_sign: + .quad 0x08000000000000000 + .quad 0x08000000000000000 +mask_all_except_sign: + .quad 0x07fffffffffffffff + .quad 0x07fffffffffffffff + +real_0_43540000008249979402: + .double 0r0.43540000008249979402 +real_m_0_43540000008249979402: + .double 0r-0.43540000008249979402 +real_0_600000000082499762577: + .double 0r0.600000000082499762577 +real_m_0_600000000082499762577: + .double 0r-0.600000000082499762577 + +#sin_p_0: +# .double 0r-1.6666666666666629659E-1 +#sin_p_1: +# .double 0r8.3333333333220592498E-3 +#sin_p_2: +# .double 0r-1.9841269829591994520E-4 +#sin_p_3: +# .double 0r2.7557313627980839565E-6 +#sin_p_4: +# .double 0r-2.5050749232606622552E-8 +#sin_p_5: +# .double 0r1.5896334589820396677E-10 + +sin_p_0: + .double 0r-1.6666666666666635210E-1 +sin_p_1: + .double 0r8.3333333333230012047E-3 +sin_p_2: + .double 0r-1.9841269830204560616E-4 +sin_p_3: + .double 0r2.7557313816586650493E-6 +sin_p_4: + .double 0r-2.5050776321203382309E-8 +sin_p_5: + .double 0r1.5897788850050641142E-10 + +sin_p1_c: +sin_p1_0h: + .double 0r5.6464247346312534948E-1 +sin_p1_0l: + .double 0r-6.06241788103829245082E-24 +sin_p1_1h: + .double 0r8.2533560693264007568E-1 +sin_p1_1l: + .double 0r7.9304552924597260244E-9 +sin_p1_2: + .double 0r-2.8232123673155168353E-1 +sin_p1_3: + .double 0r-1.3755593581121927649E-1 +sin_p1_4: + .double 0r2.3526769749636338575E-2 +sin_p1_5: + .double 0r6.8777964033410682668E-3 +sin_p1_6: + .double 0r-7.8422158064252829243E-4 +sin_p1_7: + .double 0r-1.6378316139497952112E-4 +sin_p1_8: + .double 0r1.4102652890564176127E-5 +sin_p1_9: + .double 0r2.0754701007995074451E-6 + +sin_p2_c: +sin_p2_0h: + .double 0r5.6464247346312534948E-1 +sin_p2_0l: + .double 0r-6.06241788103829245082E-24 +sin_p2_1h: + .double 0r8.2533560693264007568E-1 +sin_p2_1l: + .double 0r7.9304554034820284869E-9 +sin_p2_2: + .double 0r-2.8232123673155273824E-1 +sin_p2_3: + .double 0r-1.3755593580986152924E-1 +sin_p2_4: + .double 0r2.3526769748731638648E-2 +sin_p2_5: + .double 0r6.8777971733520841535E-3 +sin_p2_6: + .double 0r-7.8422151328288352071E-4 +sin_p2_7: + .double 0r-1.6373002515216467253E-4 +sin_p2_8: + .double 0r1.4106512050855138886E-5 +sin_p2_9: + .double 0r2.4764422854631738044E-6 + +sin_p3_c: +sin_p3_0h: + .double 0r-5.6464247346312534948E-1 +sin_p3_0l: + .double 0r6.06241788103829245082E-24 +sin_p3_1h: + .double 0r8.2533560693264007568E-1 +sin_p3_1l: + .double 0r7.9304552924597260244E-9 +sin_p3_2: + .double 0r2.8232123673155168353E-1 +sin_p3_3: + .double 0r-1.3755593581121927649E-1 +sin_p3_4: + .double 0r-2.3526769749636338575E-2 +sin_p3_5: + .double 0r6.8777964033410682668E-3 +sin_p3_6: + .double 0r7.8422158064252829243E-4 +sin_p3_7: + .double 0r-1.6378316139497952112E-4 +sin_p3_8: + .double 0r-1.4102652890564176127E-5 +sin_p3_9: + .double 0r2.0754701007995074451E-6 + +sin_p4_c: +sin_p4_0h: + .double 0r-5.6464247346312534948E-1 +sin_p4_0l: + .double 0r6.06241788103829245082E-24 +sin_p4_1h: + .double 0r8.2533560693264007568E-1 +sin_p4_1l: + .double 0r7.9304554034820284869E-9 +sin_p4_2: + .double 0r2.8232123673155273824E-1 +sin_p4_3: + .double 0r-1.3755593580986152924E-1 +sin_p4_4: + .double 0r-2.3526769748731638648E-2 +sin_p4_5: + .double 0r6.8777971733520841535E-3 +sin_p4_6: + .double 0r7.8422151328288352071E-4 +sin_p4_7: + .double 0r-1.6373002515216467253E-4 +sin_p4_8: + .double 0r-1.4106512050855138886E-5 +sin_p4_9: + .double 0r2.4764422854631738044E-6 + +cos_p_0: + .double 0r4.1666666666666588026E-2 +cos_p_1: + .double 0r-1.3888888888872778175E-3 +cos_p_2: + .double 0r2.4801587288764459412E-5 +cos_p_3: + .double 0r-2.7557314167050702998E-7 +cos_p_4: + .double 0r2.0875701408714520036E-9 +cos_p_5: + .double 0r-1.1358718309736171193E-11 + +# .. .5854 +#tan_p_0: +# .double 0r-18086151.600729089230 +#tan_p_1: +# .double 0r1161461.5827075217385 +#tan_p_2: +# .double 0r-13169.960960193349820 +#tan_q_0: +# .double 0r-54258454.802187263966 +#tan_q_1: +# .double 0r25187766.668997306377 +#tan_q_2: +# .double 0r-1329914.3444088697433 +#tan_q_3: +# .double 0r13760.338151945812569 + +# .. .338 +tan_p_0: + .double 0r-18191117.789276178926 +tan_p_1: + .double 0r1167963.0645372841973 +tan_p_2: + .double 0r-13234.676172752202547 +tan_q_0: + .double 0r-54573353.367828540504 +tan_q_1: + .double 0r25333230.540743269026 +tan_q_2: + .double 0r-1337310.4614476819988 +tan_q_3: + .double 0r13827.503083158084337 + +# ..7854 +#tan2_p_0: +# .double 0r3.3283674370620949801E-2 +#tan2_p_1: +# .double 0r2.5663601402049946582E-2 +#tan2_p_2: +# .double 0r-3.1180502523212879186E-4 +#tan2_p_3: +# .double 0r4.9814468378033982921E-7 +#tan2_q_0: +# .double 0r-1.3338299229604572149E-1 +#tan2_q_1: +# .double 0r3.4248261922569253959E-3 +#tan2_q_2: +# .double 0r-1.7860673544716858919E-5 + +# ..3678 +#tan2_p_0: +# .double 0r3.3322645703933846673E-2 +#tan2_p_1: +# .double 0r2.5645883816593488536E-2 +#tan2_p_2: +# .double 0r-3.1101629629724883994E-4 +#tan2_p_3: +# .double 0r4.9436497805178155231E-7 +#tan2_q_0: +# .double 0r-1.3334402096273281768E-1 +#tan2_q_1: +# .double 0r3.4200990512379442383E-3 +#tan2_q_2: +# .double 0r-1.7781628650750523380E-5 + +# ..3908 +tan2_p_0: + .double 0r3.3321283446731200795E-2 +tan2_p_1: + .double 0r2.5646503068216856824E-2 +tan2_p_2: + .double 0r-3.1104383115385493899E-4 +tan2_p_3: + .double 0r4.9449499280323978810E-7 +tan2_q_0: + .double 0r-1.3334538321993547050E-1 +tan2_q_1: + .double 0r3.4202642171272572627E-3 +tan2_q_2: + .double 0r-1.7784380596478880932E-5 + +# .. .2 +tan3_p_0: + .double 0r-18224747.034562580287 +tan3_p_1: + .double 0r1170032.8518652219791 +tan3_p_2: + .double 0r-13254.922404240271135 +tan3_q_0: + .double 0r-54674241.103687740862 +tan3_q_1: + .double 0r25379794.997070763260 +tan3_q_2: + .double 0r-1339662.7778249811381 +tan3_q_3: + .double 0r13848.512058865804647 + +tan_0_5_t: + .double 0r1.25 + .double 0r0.5 +real_0_5_m_1_25_atan_0_5_49_l: + .double 0r-1.8102913770216112547E-16 +real_0_5_m_1_25_atan_0_5_49: + .double 0r-7.9559511251007464239E-2 + +tan_n_0_5_t: + .double 0r1.25 + .double 0r-0.5 +real_1_25_atan_0_5_m_0_5_49_l: + .double 0r1.8102913770216112547E-16 +real_1_25_atan_0_5_m_0_5_49: + .double 0r7.9559511251007464239E-2 + +tan_s_0_5_t: + .double 0r1.5 +sqrt_0_5: + .double 0r7.07106781186547572737E-1 +sqrtn_0_5_m_1_5_atann_sqrt_0_5_l: + .double 0r-3.4791817252377832918E-18 +sqrtn_0_5_m_1_5_atann_sqrt_0_5: + .double 0r-2.1611278181903348372E-1 + +tan_n_s_0_5_t: + .double 0r1.5 +n_sqrt_0_5: + .double 0r-7.07106781186547572737E-1 +n_sqrtn_0_5_m_1_5_atann_sqrt_0_5_l: + .double 0r3.4791817252377832918E-18 +n_sqrtn_0_5_m_1_5_atann_sqrt_0_5: + .double 0r2.1611278181903348372E-1 + +tan_s_2_t: + .double 0r3.0 +sqrt_2_0: + .double 0r1.4142135623730951455 +sqrt_2_m_3_atan_sqrt_2_l: + .double 0r7.4004687159376949604E-17 +sqrt_2_m_3_atan_sqrt_2: + .double 0r-1.4517362920004328597 + +tan_n_s_2_t: + .double 0r3.0 +n_sqrt_2_0: + .double 0r-1.4142135623730951455 +n_sqrt_2_m_3_atan_sqrt_2_l: + .double 0r-7.4004687159376949604E-17 +n_sqrt_2_m_3_atan_sqrt_2: + .double 0r1.4517362920004328597 + +# .. 0.55 +#asin_p_0: +# .double 0r-25.316696852169688014 +#asin_p_1: +# .double 0r53.530200010422156254 +#asin_p_2: +# .double 0r-37.683203270692622766 +#asin_p_3: +# .double 0r9.8280386103977175338 +#asin_p_4: +# .double 0r-0.6933246588625101570 +#asin_q_0: +# .double 0r-151.90018111301861836 +#asin_q_1: +# .double 0r389.53628156345331490 +#asin_q_2: +# .double 0r-360.70299781814912876 +#asin_q_3: +# .double 0r144.63464250990605819 +#asin_q_4: +# .double 0r-23.247871426450686272 + +asin_p_0: + .double 0r-31.133659782158286333 +asin_p_1: + .double 0r63.858157457633225818 +asin_p_2: + .double 0r-43.244454939408448979 +asin_p_3: + .double 0r10.711904434851501122 +asin_p_4: + .double 0r-0.7023102565817557208 +asin_q_0: + .double 0r-186.80195869294971089 +asin_q_1: + .double 0r467.20982615762636669 +asin_q_2: + .double 0r-419.67491247177241576 +asin_q_3: + .double 0r162.03208845920067915 +asin_q_4: + .double 0r-24.808857438965841169 + +asin_c: + +asin2_p_0: + .double 0r31.367022265271895520 +asin2_p_1: + .double 0r-27.553457288163915706 +asin2_p_2: + .double 0r7.3142287109234631615 +asin2_p_3: + .double 0r-0.5695539268055010984 +asin2_p_4: + .double 0r2.7732700457810590539E-3 +asin2_q_0: + .double 0r376.40426718326244782 +asin2_q_1: + .double 0r-415.33244757417799065 +asin2_q_2: + .double 0r156.01490234281396852 +asin2_q_3: + .double 0r-22.702479601946876642 + +// 0.55 .. +#asin2_p_0: +# .double 0r29.355358314463529723 +#asin2_p_1: +# .double 0r-26.147018538045006864 +#asin2_p_2: +# .double 0r7.0703500716163327766 +#asin2_p_3: +# .double 0r-0.5652641176899680930 +#asin2_p_4: +# .double 0r2.9079909341710704143E-3 +#asin2_q_0: +# .double 0r352.26429977355559231 +#asin2_q_1: +# .double 0r-393.02368990519767067 +#asin2_q_2: +# .double 0r149.68540386246363028 +#asin2_q_3: +# .double 0r-22.170690309691252651 + +asin_p1_c: +asin_p1_0h: + .double 0r5.7043710961221538724E-1 +asin_p1_0l: + .double 0r4.9248428721475757358E-23 +asin_p1_1h: + .double 0r1.1881211400032043457 +asin_p1_1l: + .double 0r1.4630145983574038837E-9 +asin_p1_2: + .double 0r4.5284120326143617596E-1 +asin_p1_3: + .double 0r6.2472394124586794195E-1 +asin_p1_4: + .double 0r8.0835086833083236169E-1 +asin_p1_5: + .double 0r1.2595104015172415846 +asin_p1_6: + .double 0r2.0488537552293428767 +asin_p1_7: + .double 0r3.5089140995443472981 +asin_p1_8: + .double 0r6.2851334414813333495 +asin_p1_9: + .double 0r10.128040933414240499 +asin_p1_10: + .double 0r33.046781180882994988 +asin_p1_11: + .double 0r-52.817309641779630169 +asin_p1_12: + .double 0r540.99494117159986217 +asin_p1_13: + .double 0r-1326.1434641099594955 +asin_p1_14: + .double 0r2612.6799241572512074 + +asin_p2_c: +asin_p2_0h: + .double 0r5.7043710961221538724E-1 +asin_p2_0l: + .double 0r4.9248428721475757358E-23 +asin_p2_1h: + .double 0r1.1881211400032043457 +asin_p2_1l: + .double 0r1.4630165967588482090E-9 +asin_p2_2: + .double 0r4.5284120325997734291E-1 +asin_p2_3: + .double 0r6.2472394155362398482E-1 +asin_p2_4: + .double 0r8.0835082941011759949E-1 +asin_p2_5: + .double 0r1.2595128937378745615 +asin_p2_6: + .double 0r2.0487338667125807312 +asin_p2_7: + .double 0r3.5123184925937764866 +asin_p2_8: + .double 0r6.2076105483454178113 +asin_p2_9: + .double 0r11.227381892153145415 +asin_p2_10: + .double 0r20.429661082626292767 +asin_p2_11: + .double 0r35.926476241524127886 +asin_p2_12: + .double 0r55.782391042293575367 +asin_p2_13: + .double 0r64.653236450484357078 +asin_p2_14: + .double 0r39.681910714502151905 + +asin_p3_c: +asin_p3_0h: + .double 0r-5.7043710961221538724E-1 +asin_p3_0l: + .double 0r-4.9248428721475757358E-23 +asin_p3_1h: + .double 0r1.1881211400032043457 +asin_p3_1l: + .double 0r1.4630145983574038837E-9 +asin_p3_2: + .double 0r-4.5284120326143617596E-1 +asin_p3_3: + .double 0r6.2472394124586794195E-1 +asin_p3_4: + .double 0r-8.0835086833083236169E-1 +asin_p3_5: + .double 0r1.2595104015172415846 +asin_p3_6: + .double 0r-2.0488537552293428767 +asin_p3_7: + .double 0r3.5089140995443472981 +asin_p3_8: + .double 0r-6.2851334414813333495 +asin_p3_9: + .double 0r10.128040933414240499 +asin_p3_10: + .double 0r-33.046781180882994988 +asin_p3_11: + .double 0r-52.817309641779630169 +asin_p3_12: + .double 0r-540.99494117159986217 +asin_p3_13: + .double 0r-1326.1434641099594955 +asin_p3_14: + .double 0r-2612.6799241572512074 + +asin_p4_c: +asin_p4_0h: + .double 0r-5.7043710961221538724E-1 +asin_p4_0l: + .double 0r-4.9248428721475757358E-23 +asin_p4_1h: + .double 0r1.1881211400032043457 +asin_p4_1l: + .double 0r1.4630165967588482090E-9 +asin_p4_2: + .double 0r-4.5284120325997734291E-1 +asin_p4_3: + .double 0r6.2472394155362398482E-1 +asin_p4_4: + .double 0r-8.0835082941011759949E-1 +asin_p4_5: + .double 0r1.2595128937378745615 +asin_p4_6: + .double 0r-2.0487338667125807312 +asin_p4_7: + .double 0r3.5123184925937764866 +asin_p4_8: + .double 0r-6.2076105483454178113 +asin_p4_9: + .double 0r11.227381892153145415 +asin_p4_10: + .double 0r-20.429661082626292767 +asin_p4_11: + .double 0r35.926476241524127886 +asin_p4_12: + .double 0r-55.782391042293575367 +asin_p4_13: + .double 0r64.653236450484357078 +asin_p4_14: + .double 0r-39.681910714502151905 + +acos_p_0: + .double 0r-23.490891740111308650 +acos_p_1: + .double 0r50.216364730997767651 +acos_p_2: + .double 0r-35.846130541173899076 +acos_p_3: + .double 0r9.5237685361261430472 +acos_p_4: + .double 0r-0.68995264971619463257 +acos_q_0: + .double 0r-140.94535044067245622 +acos_q_1: + .double 0r364.72359608470605963 +acos_q_2: + .double 0r-341.44918263146718118 +acos_q_3: + .double 0r138.79408611688072028 +acos_q_4: + .double 0r-22.704016182082593645 + +acos2_p_0: + .double 0r30.187145498002834643 +acos2_p_1: + .double 0r-26.731562531992352660 +acos2_p_2: + .double 0r7.1724615825161839311 +acos2_p_3: + .double 0r-0.56708755287485912433 +acos2_p_4: + .double 0r2.8497262016782816223E-3 +acos2_q_0: + .double 0r362.24574597603304937 +acos2_q_1: + .double 0r-402.28404322843209684 +acos2_q_2: + .double 0r152.32592108178161538 +acos2_q_3: + .double 0r-22.394016829865698526 + +acos_p1_c: +acos_p1_0h: + .double 0r8.6321189001609244240E-1 +acos_p1_0l: + .double 0r-2.7467628254551864260E-23 +acos_p1_1h: + .double 0r-1.3159033656120300293 +acos_p1_1l: + .double 0r-2.4367664774871400368E-8 +acos_p1_2: + .double 0r-7.4055169144604560127E-1 +acos_p1_3: + .double 0r-1.2132914821382745352 +acos_p1_4: + .double 0r-2.1344587603015683364 +acos_p1_5: + .double 0r-4.3088049195660635959 +acos_p1_6: + .double 0r-9.2462207583022237856 +acos_p1_7: + .double 0r-20.778559358953092584 +acos_p1_8: + .double 0r-48.776431616826357640 +acos_p1_9: + .double 0r-105.97079800530472937 +acos_p1_10: + .double 0r-413.00216737064670269 +acos_p1_11: + .double 0r662.354234414432198719 +acos_p1_12: + .double 0r-11016.701631003812508 +acos_p1_13: + .double 0r35318.9338646810210776 +acos_p1_14: + .double 0r-97099.956120653485414 + +acos_p2_c: +acos_p2_0h: + .double 0r8.6321189001609244240E-1 +acos_p2_0l: + .double 0r-2.7467628254551864260E-23 +acos_p2_1h: + .double 0r-1.3159033656120300293 +acos_p2_1l: + .double 0r-2.4367664108737585593E-8 +acos_p2_2: + .double 0r-7.4055169144296173478E-1 +acos_p2_3: + .double 0r-1.2132914822347449224 +acos_p2_4: + .double 0r-2.1344586500282272112 +acos_p2_5: + .double 0r-4.3088086958273930094 +acos_p2_6: + .double 0r-9.2457168210006930309 +acos_p2_7: + .double 0r-20.790839559740305731 +acos_p2_8: + .double 0r-48.251128736941033992 +acos_p2_9: + .double 0r-114.02209884122218853 +acos_p2_10: + .double 0r-267.05630398433208939 +acos_p2_11: + .double 0r-584.65850073182002689 +acos_p2_12: + .double 0r-1076.6291620946751664 +acos_p2_13: + .double 0r-1407.9468675552657260 +acos_p2_14: + .double 0r-936.98633843723951031 + +atan4_p_c: +atan4_p_0: + .double 0r-51.285593469956815227 +atan4_p_1: + .double 0r-100.64117630107490697 +atan4_p_2: + .double 0r-64.297908354955467303 +atan4_p_3: + .double 0r-14.727705326536764119 +atan4_p_4: + .double 0r-0.8688437904180191795 +atan4_q_0: + .double 0r153.85678040987045279 +atan4_q_1: + .double 0r394.23759714914689312 +atan4_q_2: + .double 0r363.49766317870364674 +atan4_q_3: + .double 0r144.60833714965690433 +atan4_q_4: + .double 0r23.038413151078877661 + +n_45_d_256: + .double 0r0.175781250000 +n_m_45_d_256: + .double 0r-0.175781250000 + +atan_p_9_0: + .double 0r-3.3333333333333309279E-1 +atan_p_9_1: + .double 0r1.9999999999984593990E-1 +atan_p_9_2: + .double 0r-1.4285714282482467330E-1 +atan_p_9_3: + .double 0r1.1111110782523182794E-1 +atan_p_9_4: + .double 0r-9.0908902574698829957E-2 +atan_p_9_5: + .double 0r7.6916554867419328900E-2 +atan_p_9_6: + .double 0r-6.6526935532345926605E-2 +atan_p_9_7: + .double 0r5.6999867343679795628E-2 +atan_p_9_8: + .double 0r-3.9093313704495452621E-2 + +atan_0_5_52: + .double 0r4.6364760900080603800E-1 +atan_0_5_52_l: + .double 0r7.8209928684219507951E-17 +atan_0_5_real_0_5: + .double 0r0.5 + +n_atan_0_5_52: + .double 0r-4.6364760900080603800E-1 +n_atan_0_5_52_l: + .double 0r-7.8209928684219507951E-17 +n_atan_0_5_real_0_5: + .double 0r-0.5 + +atan_n_0_5_8_c: +atan_n_0_5_8_0: + .double 0r-3.3333333333333192705E-1 +atan_n_0_5_8_1: + .double 0r1.9999999999920992089E-1 +atan_n_0_5_8_2: + .double 0r-1.4285714269165267210E-1 +atan_n_0_5_8_3: + .double 0r1.1111109349119581424E-1 +atan_n_0_5_8_4: + .double 0r-9.0908019792184269203E-2 +atan_n_0_5_8_5: + .double 0r7.6884259191928067123E-2 +atan_n_0_5_8_6: + .double 0r-6.5833773159939656949E-2 +atan_n_0_5_8_7: + .double 0r4.8945313616423499758E-2 + +atan_1_53: + .double 0r7.8539816339744827900E-1 +atan_1_53_l: + .double 0r3.0616169978683830179E-17 + +n_atan_1_53: + .double 0r-7.8539816339744827900E-1 +n_atan_1_53_l: + .double 0r-3.0616169978683830179E-17 + +atan_n_8_c: +atan_n_8_0: + .double 0r-3.3333333333333325932E-1 +atan_n_8_1: + .double 0r1.9999999999993750555E-1 +atan_n_8_2: + .double 0r-1.4285714283792697032E-1 +atan_n_8_3: + .double 0r1.1111110814149251225E-1 +atan_n_8_4: + .double 0r-9.0908830368634924168E-2 +atan_n_8_5: + .double 0r7.6909493951295496150E-2 +atan_n_8_6: + .double 0r-6.6248652556378059830E-2 +atan_n_8_7: + .double 0r5.1752788427847688790E-2 +atan_n_8_real_40_bits: + .quad 0x0ffffffffffffe000 +atan_n_8_real_abs_40_bits: + .quad 0x07fffffffffffe000 +atan_n_8_real_2_p_m_12: + .double 0r2.44140625E-4 + +atan_p_8_c: +atan_p_8_0: + .double 0r-3.3333333333333331483E-1 +atan_p_8_1: + .double 0r1.9999999999997875033E-1 +atan_p_8_2: + .double 0r-1.4285714284904510452E-1 +atan_p_8_3: + .double 0r1.1111110961868993219E-1 +atan_p_8_4: + .double 0r-9.0908937814301260527E-2 +atan_p_8_5: + .double 0r7.6913854250452912131E-2 +atan_p_8_6: + .double 0r-6.6341308897488418528E-2 +atan_p_8_7: + .double 0r5.2556144706942850564E-2 +atan_p_8_real_39_bits: + .quad 0x0ffffffffffffc000 +atan_p_8_abs_real_39_bits: + .quad 0x07fffffffffffc000 +atan_p_8_real_2_p_m_12: + .double 0r2.44140625E-4 + +atan_2_0: + .double 0r1.1071487177940904090 +atan_2_0_l: + .double 0r9.4044713735663794124E-17 +atan_2_0_real_2_0: + .double 0r2.0 + +n_atan_2_0: + .double 0r-1.1071487177940904090 +n_atan_2_0_l: + .double 0r-9.4044713735663794124E-17 +n_atan_2_0_real_2_0: + .double 0r-2.0 + +atan_n_2_8_c: +atan_n_2_8_0: + .double 0r-3.3333333333333042825E-1 +atan_n_2_8_1: + .double 0r1.9999999999849707444E-1 +atan_n_2_8_2: + .double 0r-1.4285714256949089140E-1 +atan_n_2_8_3: + .double 0r1.1111108323968375833E-1 +atan_n_2_8_4: + .double 0r-9.0907550811429177484E-2 +atan_n_2_8_5: + .double 0r7.6872320463257509671E-2 +atan_n_2_8_6: + .double 0r-6.5674898157514843833E-2 +atan_n_2_8_7: + .double 0r4.8083662211730243685E-2 + +real_atan_large: + .double 0r5805358775541310.0840 +real_atan_m_large: + .double 0r-5805358775541310.0840 + +exp_p0_c: +exp_p0_2: + .double 0r4.9999999999999900080E-1 +exp_p0_3: + .double 0r1.6666666666678625619E-1 +exp_p0_4: + .double 0r4.1666666661027668139E-2 +exp_p0_5: + .double 0r8.3333334724719175524E-3 +exp_p0_6: + .double 0r1.3888868951434380893E-3 +exp_p0_7: + .double 0r1.9842988288729944998E-4 +exp_p0_8: + .double 0r2.4713876429938641863E-5 +exp_p0_9: + .double 0r2.9988651596576767477E-6 + +exp_p1_c: +exp_p1_0: + .double 0r1.1921772413532716328 +exp_p1_0_l: + .double 0r-5.3111925243256501606E-17 +exp_p1_1_h: + .double 0r1.1921772360801696777 +exp_p1_1_l: + .double 0r5.2731019550833480025E-9 +exp_p1_2: + .double 0r5.9608862067662515827E-1 +exp_p1_3: + .double 0r1.9869620689294639759E-1 +exp_p1_4: + .double 0r4.9674051698174313818E-2 +exp_p1_5: + .double 0r9.9348108199627475218E-3 +exp_p1_6: + .double 0r1.6557962681130399766E-3 +exp_p1_7: + .double 0r2.3658136938083061391E-4 +exp_p1_8: + .double 0r2.9408132193586159414E-5 +exp_p1_9: + .double 0r3.6463907908503166658E-6 + +exp_m0_c: +exp_m0_2: + .double 0r4.9999999999999916733E-1 +exp_m0_3: + .double 0r1.6666666666656548834E-1 +exp_m0_4: + .double 0r4.1666666661841822439E-2 +exp_m0_5: + .double 0r8.3333332132295139666E-3 +exp_m0_6: + .double 0r1.3888871537291139647E-3 +exp_m0_7: + .double 0r1.9839759941175428605E-4 +exp_m0_8: + .double 0r2.4723414228338120148E-5 +exp_m0_9: + .double 0r2.5328445339119633100E-6 + +exp_m1_c: +exp_m1_0: + .double 0r8.3880145108698256351E-1 +exp_m1_0_l: + .double 0r-3.1258096785010882408E-17 +exp_m1_1_h: + .double 0r8.3880144357681274414E-1 +exp_m1_1_l: + .double 0r7.5101698193691390770E-9 +exp_m1_2: + .double 0r4.1940072554349638878E-1 +exp_m1_3: + .double 0r1.3980024184811054577E-1 +exp_m1_4: + .double 0r3.4950060469065312441E-2 +exp_m1_5: + .double 0r6.9900121811488523035E-3 +exp_m1_6: + .double 0r1.1650024396098284090E-3 +exp_m1_7: + .double 0r1.6642701498218752582E-4 +exp_m1_8: + .double 0r2.0771521593253968396E-5 +exp_m1_9: + .double 0r2.1676257763527338661E-6 + +# ln < 1 + +#ln_s_c: +#ln_s_p_0: +# .double 0r9.1503481690678860616 +#ln_s_p_1: +# .double 0r20.941485866336655874 +#ln_s_p_2: +# .double 0r16.487417954606193859 +#ln_s_p_3: +# .double 0r5.1186080224958212526 +#ln_s_p_4: +# .double 0r4.9845734945458103349E-1 +#ln_s_q_0: +# .double 0r27.451044507203782530 +#ln_s_q_1: +# .double 0r83.412740979424398802 +#ln_s_q_2: +# .double 0r95.551182894484938402 +#ln_s_q_3: +# .double 0r50.697088912299392405 +#ln_s_q_4: +# .double 0r12.129116214794825268 + +# ln .83 .. 1 + +#ln_s_c: +#ln_s_p_0: +# .double 0r10.602228952834687803 +#ln_s_p_1: +# .double 0r23.654147261303222649 +#ln_s_p_2: +# .double 0r18.048399385285609497 +#ln_s_p_3: +# .double 0r5.3866317747411187611 +#ln_s_p_4: +# .double 0r4.9866367203621170257E-1 +#ln_s_q_0: +# .double 0r31.806686858504065185 +#ln_s_q_1: +# .double 0r94.817456927787816312 +#ln_s_q_2: +# .double 0r106.17427873659880788 +#ln_s_q_3: +# .double 0r54.803473649357279385 +#ln_s_q_4: +# .double 0r12.671320252177885379 + +# ln .8243 .. 1 + +ln_s_c: +ln_s_p_0: + .double 0r10.533214407052481576 +ln_s_p_1: + .double 0r23.526643885226203423 +ln_s_p_2: + .double 0r17.976077060886193948 +ln_s_p_3: + .double 0r5.3744490269565492468 +ln_s_p_4: + .double 0r4.9865516811442134326E-1 +ln_s_q_0: + .double 0r31.599643221157446504 +ln_s_q_1: + .double 0r94.279664071546818604 +ln_s_q_2: + .double 0r105.67819330362900132 +ln_s_q_3: + .double 0r54.614015226380423940 +ln_s_q_4: + .double 0r12.646688742839442554 + +# ln >= 1 + +#ln_b_c: +#ln_b_p_0: +# .double 0r17.467871503051810578 +#ln_b_p_1: +# .double 0r35.785852544901331385 +#ln_b_p_2: +# .double 0r24.552006690337957906 +#ln_b_p_3: +# .double 0r6.4047236758045062999 +#ln_b_p_4: +# .double 0r4.9917096570160635061E-1 +#ln_b_q_0: +# .double 0r52.403614509155588053 +#ln_b_q_1: +# .double 0r146.66026851655587393 +#ln_b_q_2: +# .double 0r152.20905275348258101 +#ln_b_q_3: +# .double 0r71.576606726420877180 +#ln_b_q_4: +# .double 0r14.725978745938864023 + +# ln 1.0 .. 1.25 + +ln_b_c: +ln_b_p_0: + .double 0r15.580409683056638315 +ln_b_p_1: + .double 0r32.543914666072645048 +ln_b_p_2: + .double 0r22.877901706403754645 +ln_b_p_3: + .double 0r6.1556714513765760088 +ln_b_p_4: + .double 0r4.9907618814155391140E-1 +ln_b_q_0: + .double 0r46.741229049169916721 +ln_b_q_1: + .double 0r132.68766578509504939 +ln_b_q_2: + .double 0r140.10471702854880505 +ln_b_q_3: + .double 0r67.303567178530471438 +ln_b_q_4: + .double 0r14.223951326720150945 + +# log10 < 1 + +#log10_s_c: +#log10_s_p_0: +# .double 0r3.9766162055986344903 +#log10_s_p_1: +# .double 0r9.0998450829915000782 +#log10_s_p_2: +# .double 0r7.1633761863796170388 +#log10_s_p_3: +# .double 0r2.2235094671281157019 +#log10_s_p_4: +# .double 0r2.1647774010462134120E-1 +#log10_s_q_0: +# .double 0r27.469491586710010012 +#log10_s_q_1: +# .double 0r83.461621599998238707 +#log10_s_q_2: +# .double 0r95.597370915186246521 +#log10_s_q_3: +# .double 0r50.715260287037992271 +#log10_s_q_4: +# .double 0r12.131569554734877414 + +# log10 .83 .. 1 + +log10_s_c: +log10_s_p_0: + .double 0r4.6028186381430433727 +log10_s_p_1: + .double 0r10.269763424759014825 +log10_s_p_2: + .double 0r7.8365495824134949743 +log10_s_p_3: + .double 0r2.3390837249823710486 +log10_s_p_4: + .double 0r2.1656666260147883207E-1 +log10_s_q_0: + .double 0r31.795144745829979627 +log10_s_q_1: + .double 0r94.787371070649314220 +log10_s_q_2: + .double 0r106.14640820241447727 +log10_s_q_3: + .double 0r54.792773831672434426 +log10_s_q_4: + .double 0r12.669919891359308295 + +# log10 >= 1 + +#log10_b_c: +#log10_b_p_0: +# .double 0r7.5811637929542987635 +#log10_b_p_1: +# .double 0r15.533033113504695066 +#log10_b_p_2: +# .double 0r10.658434759740712749 +#log10_b_p_3: +# .double 0r2.7808975967872808788 +#log10_b_p_4: +# .double 0r2.1678697192356721768E-1 +#log10_b_q_0: +# .double 0r52.368824211608433927 +#log10_b_q_1: +# .double 0r146.57500964710882840 +#log10_b_q_2: +# .double 0r152.13582168617784873 +#log10_b_q_3: +# .double 0r71.551032626191883423 +#log10_b_q_4: +# .double 0r14.723015954370795910 + +# log10 1 .. 1.25 + +log10_b_c: +log10_b_p_0: + .double 0r6.7674014091633534207 +log10_b_p_1: + .double 0r14.135207984866871911 +log10_b_p_2: + .double 0r9.9365500005391176330 +log10_b_p_3: + .double 0r2.6734926843772655047 +log10_b_p_4: + .double 0r2.1674607755999492076E-1 +log10_b_q_0: + .double 0r46.747552809139307328 +log10_b_q_1: + .double 0r132.70322218382881374 +log10_b_q_2: + .double 0r140.11814067349982338 +log10_b_q_3: + .double 0r67.308281802680511419 +log10_b_q_4: + .double 0r14.224501421540916013 + +log2_b_c: +log2_b_p_0: + .double 0r5.7248655744376097942 +log2_b_p_1: + .double 0r9.7037982066316619267 +log2_b_p_2: + .double 0r4.9251104233553251177 +log2_b_p_3: + .double 0r0.71604182547154882066 +log2_b_p_4: + .double 0r0.00024384785289470863262 +log2_b_q_0: + .double 0r11.904523296020823153 +log2_b_q_1: + .double 0r29.106873574779058345 +log2_b_q_2: + .double 0r24.928920420570964467 +log2_b_q_3: + .double 0r8.6737948511229703286 + +log2_s_c: +log2_s_p_0: + .double 0r3.6543174401668601092 +log2_s_p_1: + .double 0r6.9236821167562956347 +log2_s_p_2: + .double 0r4.0552858971538414679 +log2_s_p_3: + .double 0r0.71265600724817212974 +log2_s_p_4: + .double 0r0.00061552202164347354606 +log2_s_q_0: + .double 0r7.5989394915663739383 +log2_s_q_1: + .double 0r20.096596833512705871 +log2_s_q_2: + .double 0r18.945813884202145516 +log2_s_q_3: + .double 0r7.4327985038948378715 + +exp2_p0_25_c: +exp2_p0_25_0h: + .double 0r1.1892071150027210269 +exp2_p0_25_0l: + .double 0r3.9820152314656461110E-17 +exp2_p0_25_1h: + .double 0r8.2429555058479309082E-1 +exp2_p0_25_1l: + .double 0r8.2811696389128996998E-9 +exp2_p0_25_2: + .double 0r2.8567907128801478533E-1 +exp2_p0_25_3: + .double 0r6.6005880936045882579E-2 +exp2_p0_25_4: + .double 0r1.1437947568180147420E-2 +exp2_p0_25_5: + .double 0r1.5856362256660922264E-3 +exp2_p0_25_6: + .double 0r1.8317976935970924383E-4 +exp2_p0_25_7: + .double 0r1.8139623479154579359E-5 +exp2_p0_25_8: + .double 0r1.5673360359583023396E-6 +exp2_p0_25_9: + .double 0r1.3055968895300254492E-7 + +exp2_p0_c: +exp2_p0_0h: + .double 0r1.0 +exp2_p0_0l: + .double 0r0.0 +exp2_p0_1h: + .double 0r6.9314716756343841553E-1 +exp2_p0_1l: + .double 0r1.2996506870699420233E-8 +exp2_p0_2: + .double 0r2.4022650695910330310E-1 +exp2_p0_3: + .double 0r5.5504108664725972100E-2 +exp2_p0_4: + .double 0r9.6181291092419882865E-3 +exp2_p0_5: + .double 0r1.3333558019987959767E-3 +exp2_p0_6: + .double 0r1.5403532681856270284E-4 +exp2_p0_7: + .double 0r1.5253065510864060166E-5 +exp2_p0_8: + .double 0r1.3190300302967161470E-6 +exp2_p0_9: + .double 0r1.0881074348847176580E-7 + +exp2_m0_c: +exp2_m0_0h: + .double 0r1.0 +exp2_m0_0l: + .double 0r0.0 +exp2_m0_1h: + .double 0r6.9314716756343841553E-1 +exp2_m0_1l: + .double 0r1.2996506870699420233E-8 +exp2_m0_2: + .double 0r2.4022650695909780749E-1 +exp2_m0_3: + .double 0r5.5504108664691832742E-2 +exp2_m0_4: + .double 0r9.6181291047027026725E-3 +exp2_m0_5: + .double 0r1.3333557764085299593E-3 +exp2_m0_6: + .double 0r1.5403499520940549562E-4 +exp2_m0_7: + .double 0r1.5251161994200753343E-5 +exp2_m0_8: + .double 0r1.3166061357593046239E-6 +exp2_m0_9: + .double 0r9.2942318847941285694E-8 + +exp2_m0_25_c: +exp2_m0_25_0h: + .double 0r8.4089641525371450204E-1 +exp2_m0_25_0l: + .double 0r4.0995050102907482601E-17 +exp2_m0_25_1h: + .double 0r5.8286496996879577637E-1 +exp2_m0_25_1l: + .double 0r9.4072813983103742430E-9 +exp2_m0_25_2: + .double 0r2.0200560855082275169E-1 +exp2_m0_25_3: + .double 0r4.6673206007799013240E-2 +exp2_m0_25_4: + .double 0r8.0878502812528896282E-3 +exp2_m0_25_5: + .double 0r1.1212140390502213245E-3 +exp2_m0_25_6: + .double 0r1.2952709156943405071E-4 +exp2_m0_25_7: + .double 0r1.2823060087120729985E-5 +exp2_m0_25_8: + .double 0r1.1036110895925728151E-6 +exp2_m0_25_9: + .double 0r7.4921899653437894396E-8 + +real_m_1022: + .double 0r-1022.0 +real_1023: + .double 0r1023.0 +real_1024: + .double 0r1024.0 +real_1025: + .double 0r1025.0 +real_m_1076: + .double 0r-1076.0 +real_2_p_m_1022: + .quad 0x00010000000000000 +real_2_p_m_55: + .quad 0x03C80000000000000 +real_2_p_53: + .quad 0x04340000000000000 +real_m_2_p_53: + .quad 0x0C340000000000000 +real_2_p_55: + .quad 0x04360000000000000 +real_2_p_1023: + .quad 0x07fe0000000000000 +real_max: + .quad 0x07fefffffffffffff +real_m_max: + .quad 0x0ffefffffffffffff + +real_4000_0: + .double 0r4000.0 +real_m_3810_0: + .double 0r-3810.0 +real_1401_0: + .double 0r1401.0 +real_m_1471_0: + .double 0r-1471.0 +real_4605_0: + .double 0r4605.0 +real_m_4834_0: + .double 0r-4834.0 +real_1_052: + .double 0r1.052 +real_m_1_052: + .double 0r-1.052 +real_power_exp_too_large: + .double 0r6711563375777760768.0 +real_power_exp_too_small: + .double 0r-6393154322601327104.0 + |