• 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	"floorf.S"
9	.text
10	.p2align 4,,15
11	.globl __MINGW_USYMBOL(floorf)
12	.def	__MINGW_USYMBOL(floorf);	.scl	2;	.type	32;	.endef
13#ifdef __x86_64__
14	.seh_proc __MINGW_USYMBOL(floorf)
15#endif
16__MINGW_USYMBOL(floorf):
17#if defined(_AMD64_) || defined(__x86_64__)
18        subq    $40, %rsp
19        .seh_stackalloc 40
20        .seh_endprologue
21        unpcklps        %xmm0, %xmm0
22        cvtps2pd        %xmm0, %xmm0
23        call    floor
24        unpcklpd        %xmm0, %xmm0
25        cvtpd2ps        %xmm0, %xmm0
26        addq    $40, %rsp
27        ret
28        .seh_endproc
29        .def    __MINGW_USYMBOL(floor);  .scl    2;      .type   32;     .endef
30#elif defined(_X86_) || defined(__i386__)
31	flds	4(%esp)
32	subl	$8,%esp
33
34	fstcw	4(%esp)			/* store fpu control word */
35
36	/* We use here %edx although only the low 1 bits are defined.
37	   But none of the operations should care and they are faster
38	   than the 16 bit operations.  */
39	movl	$0x400,%edx		/* round towards -oo */
40	orl	4(%esp),%edx
41	andl	$0xf7ff,%edx
42	movl	%edx,(%esp)
43	fldcw	(%esp)			/* load modified control word */
44
45	frndint				/* round */
46
47	fldcw	4(%esp)			/* restore original control word */
48
49	addl	$8,%esp
50	ret
51#endif
52