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