/**
 * 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(_ARM_) || defined(__arm__)
	vmrs	r1, fpscr
	orr		r0, r1, #0x00c00000 /* Round towards Zero */
	vmsr	fpscr, r0
	vcvtr.s32.f64	s0, d0
	vcvt.f64.s32	d0, s0
	vmsr	fpscr, r1
	bx	lr
#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
