xref: /netbsd-src/lib/libm/arch/i387/s_scalbnf.S (revision bec369833beed007c49e252e3710cb5ff89ae9e6)
1/*
2 * Written by J.T. Conklin <jtc@NetBSD.org>.
3 * Public domain.
4 */
5
6#include <machine/asm.h>
7
8RCSID("$NetBSD: s_scalbnf.S,v 1.14 2013/05/20 20:27:43 mlelstv Exp $")
9
10#ifdef WEAK_ALIAS
11WEAK_ALIAS(scalbnf,_scalbnf)
12WEAK_ALIAS(scalblnf,_scalblnf)
13WEAK_ALIAS(ldexpf,_scalbnf)
14#endif
15
16#ifdef __x86_64__
17ENTRY(_scalbnf)
18	movl %edi,-8(%rsp)
19	fildl -8(%rsp)
20	movss %xmm0,-4(%rsp)
21	flds -4(%rsp)
22	fscale
23	fstps -4(%rsp)
24	movss -4(%rsp),%xmm0
25	fstp %st(0)
26	ret
27#elif defined(STRONG_ALIAS)
28STRONG_ALIAS(_scalbnf,_scalblnf)
29#endif
30
31ENTRY(_scalblnf)
32#ifdef __x86_64__
33	movq %rdi,-16(%rsp)
34	fildq -16(%rsp)
35	movss %xmm0,-4(%rsp)
36	flds -4(%rsp)
37	fscale
38	fstps -4(%rsp)
39	movss -4(%rsp),%xmm0
40	fstp %st(0)
41#else
42	fildl 8(%esp)
43	flds 4(%esp)
44	fscale
45	fstp %st(1)		/* clean up stack */
46#endif
47	ret
48