diff options
author | bde <bde@FreeBSD.org> | 2008-02-13 06:01:48 +0000 |
---|---|---|
committer | bde <bde@FreeBSD.org> | 2008-02-13 06:01:48 +0000 |
commit | 85c145264ce9d9d65eb3f1b8e73526fd1a2287f4 (patch) | |
tree | 31573530865864d3d4d81a2f68da243a871d419c /lib/msun | |
parent | d3499a87ee1e2372bc034aa43161d533bad80f55 (diff) | |
download | FreeBSD-src-85c145264ce9d9d65eb3f1b8e73526fd1a2287f4.zip FreeBSD-src-85c145264ce9d9d65eb3f1b8e73526fd1a2287f4.tar.gz |
Use hardware remainder on amd64 since it is 5 to 10 times faster than
software remainder and is already used for remquo().
Diffstat (limited to 'lib/msun')
-rw-r--r-- | lib/msun/amd64/Makefile.inc | 3 | ||||
-rw-r--r-- | lib/msun/amd64/e_remainder.S | 53 | ||||
-rw-r--r-- | lib/msun/amd64/e_remainderf.S | 23 |
3 files changed, 78 insertions, 1 deletions
diff --git a/lib/msun/amd64/Makefile.inc b/lib/msun/amd64/Makefile.inc index c4f6094b..b450112 100644 --- a/lib/msun/amd64/Makefile.inc +++ b/lib/msun/amd64/Makefile.inc @@ -2,6 +2,7 @@ ARCH_SRCS = e_sqrt.S e_sqrtf.S s_llrint.S s_llrintf.S s_llrintl.S \ s_logbl.S s_lrint.S s_lrintf.S s_lrintl.S \ - s_remquo.S s_remquof.S s_rintl.S s_scalbn.S s_scalbnf.S s_scalbnl.S + e_remainder.S e_remainderf.S s_remquo.S s_remquof.S \ + s_rintl.S s_scalbn.S s_scalbnf.S s_scalbnl.S LDBL_PREC = 64 SYM_MAPS += ${.CURDIR}/amd64/Symbol.map diff --git a/lib/msun/amd64/e_remainder.S b/lib/msun/amd64/e_remainder.S new file mode 100644 index 0000000..6d87a93 --- /dev/null +++ b/lib/msun/amd64/e_remainder.S @@ -0,0 +1,53 @@ +/* + * Copyright (c) 1993,94 Winning Strategies, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Winning Strategies, Inc. + * 4. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * Based on the i387 version written by: + * J.T. Conklin (jtc@wimsey.com), Winning Strategies, Inc. + */ + +#include <machine/asm.h> + +RCSID("from: FreeBSD: src/lib/msun/i387/e_remainder.S,v 1.8 2005/02/04 14:08:32 das Exp") +__FBSDID("$FreeBSD$") + +ENTRY(remainder) + movsd %xmm0,-8(%rsp) + movsd %xmm1,-16(%rsp) + fldl -16(%rsp) + fldl -8(%rsp) +1: fprem1 + fstsw %ax + testw $0x400,%ax + jne 1b + fstpl -8(%rsp) + movsd -8(%rsp),%xmm0 + fstp %st + ret diff --git a/lib/msun/amd64/e_remainderf.S b/lib/msun/amd64/e_remainderf.S new file mode 100644 index 0000000..ad3b59e --- /dev/null +++ b/lib/msun/amd64/e_remainderf.S @@ -0,0 +1,23 @@ +/* + * Based on the i387 version written by J.T. Conklin <jtc@netbsd.org>. + * Public domain. + */ + +#include <machine/asm.h> + +RCSID("from: $NetBSD: e_remainderf.S,v 1.2 1995/05/08 23:49:47 jtc Exp $") +__FBSDID("$FreeBSD$") + +ENTRY(remainderf) + movss %xmm0,-4(%rsp) + movss %xmm1,-8(%rsp) + flds -8(%rsp) + flds -4(%rsp) +1: fprem1 + fstsw %ax + testw $0x400,%ax + jne 1b + fstps -4(%rsp) + movss -4(%rsp),%xmm0 + fstp %st + ret |