about summary refs log tree commit diff
path: root/src/math/i386/s_trunc.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/math/i386/s_trunc.s')
-rw-r--r--src/math/i386/s_trunc.s36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/math/i386/s_trunc.s b/src/math/i386/s_trunc.s
new file mode 100644
index 00000000..0773891a
--- /dev/null
+++ b/src/math/i386/s_trunc.s
@@ -0,0 +1,36 @@
+.global ceilf
+ceilf:	flds 4(%esp)
+	jmp 1f
+	
+.global ceil
+ceil:	fldl 4(%esp)
+1:	mov $0x08fb,%edx
+	jmp 0f
+
+.global floorf
+floorf:	flds 4(%esp)
+	jmp 1f
+
+.global floor
+floor:	fldl 4(%esp)
+1:	mov $0x04f7,%edx
+	jmp 0f
+
+.global truncf
+truncf:	flds 4(%esp)
+	jmp 1f
+
+.global trunc
+trunc:	fldl 4(%esp)
+1:	mov $0x0cff,%edx
+
+0:	fstcw 4(%esp)
+	mov 5(%esp),%ah
+	or %dh,%ah
+	and %dl,%ah
+	xchg %ah,5(%esp)
+	fldcw 4(%esp)
+	frndint
+	mov %ah,5(%esp)
+	fldcw 4(%esp)
+	ret