|  | /** | 
|  | * This file has no copyright assigned and is placed in the Public Domain. | 
|  | * This file is part of the mingw-w64 runtime package. | 
|  | * No warranty is given; refer to the file DISCLAIMER.PD within this package. | 
|  | */ | 
|  | #include <_mingw_mac.h> | 
|  |  | 
|  | .file "trunc.S" | 
|  | .text | 
|  | .p2align 4,,15 | 
|  | .globl __MINGW_USYMBOL(trunc) | 
|  | .def    __MINGW_USYMBOL(trunc);  .scl    2;      .type   32;     .endef | 
|  |  | 
|  | #ifdef __x86_64__ | 
|  | .seh_proc __MINGW_USYMBOL(trunc) | 
|  | #endif | 
|  | __MINGW_USYMBOL(trunc): | 
|  | #if defined(_AMD64_) || defined(__x86_64__) | 
|  | subq	$24, %rsp | 
|  | .seh_stackalloc	24 | 
|  | .seh_endprologue | 
|  | movsd	%xmm0, 8(%rsp) | 
|  | movq	8(%rsp), %r8 | 
|  | movq	%r8, %rdx | 
|  | shrq	$32, %rdx | 
|  | movl	%edx, %eax | 
|  | sarl	$20, %eax | 
|  | andl	$2047, %eax | 
|  | leal	-1023(%rax), %ecx | 
|  | cmpl	$19, %ecx | 
|  | jg	.l1 | 
|  | movl	%edx, %r8d | 
|  | andl	$-2147483648, %r8d | 
|  | testl	%ecx, %ecx | 
|  | js	.l3 | 
|  | movl	$1048575, %eax | 
|  | sarl	%cl, %eax | 
|  | notl	%eax | 
|  | andl	%edx, %eax | 
|  | orl	%r8d, %eax | 
|  | salq	$32, %rax | 
|  | movq	%rax, 8(%rsp) | 
|  | movsd	8(%rsp), %xmm0 | 
|  | addq	$24, %rsp | 
|  | ret | 
|  | .p2align 4,,10 | 
|  | .l1: | 
|  | cmpl	$51, %ecx | 
|  | jle	.l2 | 
|  | /* Is x inf/nan? */ | 
|  | cmpl	$1024, %ecx | 
|  | jne	.noinfnan | 
|  | addsd	%xmm0, %xmm0 | 
|  | .noinfnan: | 
|  | addq	$24, %rsp | 
|  | ret | 
|  | .p2align 4,,10 | 
|  | .l2: | 
|  | leal	-1043(%rax), %ecx | 
|  | movl	$-1, %r9d | 
|  | salq	$32, %rdx | 
|  | shrl	%cl, %r9d | 
|  | notl	%r9d | 
|  | andl	%r9d, %r8d | 
|  | orq	%r8, %rdx | 
|  | movq	%rdx, 8(%rsp) | 
|  | movsd	8(%rsp), %xmm0 | 
|  | addq	$24, %rsp | 
|  | ret | 
|  | .p2align 4,,10 | 
|  | .l3: | 
|  | salq	$32, %r8 | 
|  | movq	%r8, 8(%rsp) | 
|  | movsd	8(%rsp), %xmm0 | 
|  | addq	$24, %rsp | 
|  | ret | 
|  | .seh_endproc | 
|  | #elif defined(_X86_) || defined(__i386__) | 
|  | fldl    4(%esp) | 
|  | subl	$8, %esp | 
|  | fstcw	(%esp) | 
|  | /* FE_TOWARDZERO */ | 
|  | movzwl (%esp), %eax | 
|  | orb    $0xc, %ah | 
|  | movw	%ax, 4(%esp) | 
|  | fldcw	4(%esp) | 
|  | frndint | 
|  | fldcw	(%esp) | 
|  | addl	$8, %esp | 
|  | ret | 
|  | #endif |