1/** 2 * This file has no copyright assigned and is placed in the Public Domain. 3 * This file is part of the mingw-w64 runtime package. 4 * No warranty is given; refer to the file DISCLAIMER.PD within this package. 5 */ 6#include <_mingw_mac.h> 7 8 .file "trunc.S" 9 .text 10 .p2align 4,,15 11 .globl __MINGW_USYMBOL(trunc) 12 .def __MINGW_USYMBOL(trunc); .scl 2; .type 32; .endef 13 14#ifdef __x86_64__ 15 .seh_proc __MINGW_USYMBOL(trunc) 16#endif 17__MINGW_USYMBOL(trunc): 18#if defined(_AMD64_) || defined(__x86_64__) 19 subq $24, %rsp 20 .seh_stackalloc 24 21 .seh_endprologue 22 movsd %xmm0, 8(%rsp) 23 movq 8(%rsp), %r8 24 movq %r8, %rdx 25 shrq $32, %rdx 26 movl %edx, %eax 27 sarl $20, %eax 28 andl $2047, %eax 29 leal -1023(%rax), %ecx 30 cmpl $19, %ecx 31 jg .l1 32 movl %edx, %r8d 33 andl $-2147483648, %r8d 34 testl %ecx, %ecx 35 js .l3 36 movl $1048575, %eax 37 sarl %cl, %eax 38 notl %eax 39 andl %edx, %eax 40 orl %r8d, %eax 41 salq $32, %rax 42 movq %rax, 8(%rsp) 43 movsd 8(%rsp), %xmm0 44 addq $24, %rsp 45 ret 46 .p2align 4,,10 47.l1: 48 cmpl $51, %ecx 49 jle .l2 50 /* Is x inf/nan? */ 51 cmpl $1024, %ecx 52 jne .noinfnan 53 addsd %xmm0, %xmm0 54.noinfnan: 55 addq $24, %rsp 56 ret 57 .p2align 4,,10 58.l2: 59 leal -1043(%rax), %ecx 60 movl $-1, %r9d 61 salq $32, %rdx 62 shrl %cl, %r9d 63 notl %r9d 64 andl %r9d, %r8d 65 orq %r8, %rdx 66 movq %rdx, 8(%rsp) 67 movsd 8(%rsp), %xmm0 68 addq $24, %rsp 69 ret 70 .p2align 4,,10 71.l3: 72 salq $32, %r8 73 movq %r8, 8(%rsp) 74 movsd 8(%rsp), %xmm0 75 addq $24, %rsp 76 ret 77 .seh_endproc 78#elif defined(_X86_) || defined(__i386__) 79 fldl 4(%esp) 80 subl $8, %esp 81 fstcw (%esp) 82 /* FE_TOWARDZERO */ 83 movzwl (%esp), %eax 84 orb $0xc, %ah 85 movw %ax, 4(%esp) 86 fldcw 4(%esp) 87 frndint 88 fldcw (%esp) 89 addl $8, %esp 90 ret 91#endif 92