--- gdtoa_smisc.s before +++ gdtoa_smisc.s after @@ -134,7 +134,7 @@ __ratio_D2A: .cfi_def_cfa_register %rbp pushq %r14 pushq %rbx - subq $48, %rsp + subq $32, %rsp .Lcfi11: .cfi_offset %rbx, -32 .Lcfi12: @@ -143,44 +143,55 @@ __ratio_D2A: movq %rdi, %rbx movq __stack_chk_guard(%rip), %rax movq %rax, -24(%rbp) - leaq -44(%rbp), %rsi + leaq -28(%rbp), %rsi callq __b2d_D2A - movsd %xmm0, -56(%rbp) # 8-byte Spill - movsd %xmm0, -32(%rbp) - leaq -48(%rbp), %rsi + movsd %xmm0, -40(%rbp) # 8-byte Spill + leaq -32(%rbp), %rsi movq %r14, %rdi callq __b2d_D2A - movsd %xmm0, -40(%rbp) - movl -44(%rbp), %eax - subl -48(%rbp), %eax - movl 20(%rbx), %ecx - subl 20(%r14), %ecx - shll $5, %ecx + movl -28(%rbp), %ecx + subl -32(%rbp), %ecx + movl 20(%rbx), %eax + subl 20(%r14), %eax + shll $5, %eax + addl %ecx, %eax + jle .LBB1_2 +# BB#1: # %if.then + shll $20, %eax + movq -40(%rbp), %xmm1 # 8-byte Folded Reload + # xmm1 = mem[0],zero + movd %xmm1, %rcx + movl %ecx, %edx + shrq $32, %rcx addl %eax, %ecx - movl %ecx, %eax - negl %eax - cmovll %ecx, %eax - testl %ecx, %ecx - leaq -32(%rbp), %rcx - leaq -40(%rbp), %rdx - cmovgq %rcx, %rdx + shlq $32, %rcx + orq %rcx, %rdx + movd %rdx, %xmm1 + jmp .LBB1_3 +.LBB1_2: # %if.else shll $20, %eax - orq $4, %rdx - addl %eax, (%rdx) + movd %xmm0, %rcx + movl %ecx, %edx + shrq $32, %rcx + subl %eax, %ecx + shlq $32, %rcx + orq %rcx, %rdx + movd %rdx, %xmm0 + movq -40(%rbp), %xmm1 # 8-byte Folded Reload + # xmm1 = mem[0],zero +.LBB1_3: # %if.end movq __stack_chk_guard(%rip), %rax cmpq -24(%rbp), %rax - jne .LBB1_2 -# BB#1: # %entry - movsd -56(%rbp), %xmm1 # 8-byte Reload - # xmm1 = mem[0],zero + jne .LBB1_5 +# BB#4: # %if.end divsd %xmm0, %xmm1 movapd %xmm1, %xmm0 - addq $48, %rsp + addq $32, %rsp popq %rbx popq %r14 popq %rbp retq -.LBB1_2: # %entry +.LBB1_5: # %if.end callq __stack_chk_fail .Lfunc_end1: .size __ratio_D2A, .Lfunc_end1-__ratio_D2A