about summary refs log tree commit diff
path: root/src/math/x86_64/floorl.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/math/x86_64/floorl.s')
-rw-r--r--src/math/x86_64/floorl.s27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/math/x86_64/floorl.s b/src/math/x86_64/floorl.s
new file mode 100644
index 00000000..80da4660
--- /dev/null
+++ b/src/math/x86_64/floorl.s
@@ -0,0 +1,27 @@
+.global floorl
+.type floorl,@function
+floorl:
+	fldt 8(%rsp)
+1:	mov $0x7,%al
+1:	fstcw 8(%rsp)
+	mov 9(%rsp),%ah
+	mov %al,9(%rsp)
+	fldcw 8(%rsp)
+	frndint
+	mov %ah,9(%rsp)
+	fldcw 8(%rsp)
+	ret
+
+.global ceill
+.type ceill,@function
+ceill:
+	fldt 8(%rsp)
+	mov $0xb,%al
+	jmp 1b
+
+.global truncl
+.type truncl,@function
+truncl:
+	fldt 8(%rsp)
+	mov $0xf,%al
+	jmp 1b