xref: /netbsd-src/lib/libm/arch/i387/s_scalbnf.S (revision a4ddc2c8fb9af816efe3b1c375a5530aef0e89e9)
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.11 2013/02/12 02:52:13 matt Exp $")
9
10#ifdef WEAK_ALIAS
11WEAK_ALIAS(scalbnf,_scalbnf)
12WEAK_ALIAS(scalblnf,_scalblnf)
13#endif
14
15#ifdef __x86_64__
16ENTRY(_scalbnf)
17	movl %edi,-8(%rsp)
18	fildl -8(%rsp)
19	movss %xmm0,-4(%rsp)
20	flds -4(%rsp)
21	fscale
22	fstps -4(%rsp)
23	movss -4(%rsp),%xmm0
24	fstp %st(0)
25	ret
26#elif defined(STRONG_ALIAS)
27STRONG_ALIAS(_scalbnf,_scalblnf)
28#endif
29
30ENTRY(_scalblnf)
31#ifdef __x86_64__
32	movq %rdx,-16(%rsp)
33	fildq -16(%rsp)
34	movss %xmm0,-4(%rsp)
35	flds -4(%rsp)
36	fscale
37	fstps -4(%rsp)
38	movss -4(%rsp),%xmm0
39	fstp %st(0)
40#else
41	fildl 8(%esp)
42	flds 4(%esp)
43	fscale
44	fstp %st(1)		/* clean up stack */
45#endif
46	ret
47