• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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