summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2004-02-08 17:29:39 +0000
committerderaadt <deraadt@openbsd.org>2004-02-08 17:29:39 +0000
commitc6d7fe1e42b28193e510aad14c74791777a9c21b (patch)
tree4976686ad4083cfedcfb342329a7176b11cd2eee /lib/libc
parentsync (diff)
downloadwireguard-openbsd-c6d7fe1e42b28193e510aad14c74791777a9c21b.tar.xz
wireguard-openbsd-c6d7fe1e42b28193e510aad14c74791777a9c21b.zip
from freebsd (and appears to make our awk work better)
Tidy up modf.S and make it actually work. It wasn't extracting the value out of ST(0) before copying it to %xmm0. Also remove bogus stack frame and work in the red zone.
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/arch/amd64/gen/modf.S31
-rw-r--r--lib/libc/arch/x86_64/gen/modf.S31
2 files changed, 28 insertions, 34 deletions
diff --git a/lib/libc/arch/amd64/gen/modf.S b/lib/libc/arch/amd64/gen/modf.S
index 9e6c13b3cb4..44ef74ab668 100644
--- a/lib/libc/arch/amd64/gen/modf.S
+++ b/lib/libc/arch/amd64/gen/modf.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: modf.S,v 1.1 2004/01/28 01:44:45 mickey Exp $ */
+/* $OpenBSD: modf.S,v 1.2 2004/02/08 17:29:39 deraadt Exp $ */
/* $NetBSD: modf.S,v 1.1 2001/06/19 00:25:03 fvdl Exp $ */
/*-
@@ -51,44 +51,41 @@
/* With CHOP mode on, frndint behaves as TRUNC does. Useful. */
ENTRY(modf)
- pushq %rbp
- movq %rsp,%rbp
- subq $24,%rsp
/*
* Set chop mode.
*/
- fnstcw -12(%rbp)
- movw -12(%rbp),%dx
+ fnstcw -12(%rsp)
+ movw -12(%rsp),%dx
orw $3072,%dx
- movw %dx,-16(%rbp)
- fldcw -16(%rbp)
+ movw %dx,-16(%rsp)
+ fldcw -16(%rsp)
/*
* Get integral part.
*/
- movsd %xmm0,-24(%rbp)
- fldl -24(%rbp)
+ movsd %xmm0,-24(%rsp)
+ fldl -24(%rsp)
frndint
- fstpl -8(%rbp)
+ fstpl -8(%rsp)
/*
* Restore control word.
*/
- fldcw -12(%rbp)
+ fldcw -12(%rsp)
/*
* Store integral part.
*/
- movsd -8(%rbp),%xmm0
+ movsd -8(%rsp),%xmm0
movsd %xmm0,(%rdi)
/*
* Get fractional part and return it.
*/
- fldl -24(%rbp)
- fsubl -8(%rbp)
- movsd -8(%rbp),%xmm0
+ fldl -24(%rsp)
+ fsubl -8(%rsp)
+ fstpl -8(%rsp)
+ movsd -8(%rsp),%xmm0
- leave
ret
diff --git a/lib/libc/arch/x86_64/gen/modf.S b/lib/libc/arch/x86_64/gen/modf.S
index 9e6c13b3cb4..44ef74ab668 100644
--- a/lib/libc/arch/x86_64/gen/modf.S
+++ b/lib/libc/arch/x86_64/gen/modf.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: modf.S,v 1.1 2004/01/28 01:44:45 mickey Exp $ */
+/* $OpenBSD: modf.S,v 1.2 2004/02/08 17:29:39 deraadt Exp $ */
/* $NetBSD: modf.S,v 1.1 2001/06/19 00:25:03 fvdl Exp $ */
/*-
@@ -51,44 +51,41 @@
/* With CHOP mode on, frndint behaves as TRUNC does. Useful. */
ENTRY(modf)
- pushq %rbp
- movq %rsp,%rbp
- subq $24,%rsp
/*
* Set chop mode.
*/
- fnstcw -12(%rbp)
- movw -12(%rbp),%dx
+ fnstcw -12(%rsp)
+ movw -12(%rsp),%dx
orw $3072,%dx
- movw %dx,-16(%rbp)
- fldcw -16(%rbp)
+ movw %dx,-16(%rsp)
+ fldcw -16(%rsp)
/*
* Get integral part.
*/
- movsd %xmm0,-24(%rbp)
- fldl -24(%rbp)
+ movsd %xmm0,-24(%rsp)
+ fldl -24(%rsp)
frndint
- fstpl -8(%rbp)
+ fstpl -8(%rsp)
/*
* Restore control word.
*/
- fldcw -12(%rbp)
+ fldcw -12(%rsp)
/*
* Store integral part.
*/
- movsd -8(%rbp),%xmm0
+ movsd -8(%rsp),%xmm0
movsd %xmm0,(%rdi)
/*
* Get fractional part and return it.
*/
- fldl -24(%rbp)
- fsubl -8(%rbp)
- movsd -8(%rbp),%xmm0
+ fldl -24(%rsp)
+ fsubl -8(%rsp)
+ fstpl -8(%rsp)
+ movsd -8(%rsp),%xmm0
- leave
ret