asm for floor/ceil/trunc
authorRich Felker <dalias@aerifal.cx>
Mon, 19 Mar 2012 09:42:04 +0000 (05:42 -0400)
committerRich Felker <dalias@aerifal.cx>
Mon, 19 Mar 2012 09:42:04 +0000 (05:42 -0400)
src/math/i386/ceil.s [new file with mode: 0644]
src/math/i386/ceilf.s [new file with mode: 0644]
src/math/i386/ceill.s [new file with mode: 0644]
src/math/i386/floor.s [new file with mode: 0644]
src/math/i386/floorf.s [new file with mode: 0644]
src/math/i386/floorl.s [new file with mode: 0644]
src/math/i386/trunc.s [new file with mode: 0644]
src/math/i386/truncf.s [new file with mode: 0644]
src/math/i386/truncl.s [new file with mode: 0644]

diff --git a/src/math/i386/ceil.s b/src/math/i386/ceil.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s
diff --git a/src/math/i386/ceilf.s b/src/math/i386/ceilf.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s
diff --git a/src/math/i386/ceill.s b/src/math/i386/ceill.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s
diff --git a/src/math/i386/floor.s b/src/math/i386/floor.s
new file mode 100644 (file)
index 0000000..46ba88d
--- /dev/null
@@ -0,0 +1,67 @@
+.global floorf
+.type floorf,@function
+floorf:
+       flds 4(%esp)
+       jmp 1f
+
+.global floorl
+.type floorl,@function
+floorl:
+       fldt 4(%esp)
+       jmp 1f
+
+.global floor
+.type floor,@function
+floor:
+       fldl 4(%esp)
+1:     mov $0x7,%al
+1:     fstcw 4(%esp)
+       mov 5(%esp),%ah
+       mov %al,5(%esp)
+       fldcw 4(%esp)
+       frndint
+       mov %ah,5(%esp)
+       fldcw 4(%esp)
+       ret
+
+.global ceil
+.type ceil,@function
+ceil:
+       fldl 4(%esp)
+       mov $0xb,%al
+       jmp 1b
+
+.global ceilf
+.type ceilf,@function
+ceilf:
+       flds 4(%esp)
+       mov $0xb,%al
+       jmp 1b
+
+.global ceill
+.type ceill,@function
+ceill:
+       fldt 4(%esp)
+       mov $0xb,%al
+       jmp 1b
+
+.global trunc
+.type trunc,@function
+trunc:
+       fldl 4(%esp)
+       mov $0xf,%al
+       jmp 1b
+
+.global truncf
+.type truncf,@function
+truncf:
+       flds 4(%esp)
+       mov $0xf,%al
+       jmp 1b
+
+.global truncl
+.type truncl,@function
+truncl:
+       fldt 4(%esp)
+       mov $0xf,%al
+       jmp 1b
diff --git a/src/math/i386/floorf.s b/src/math/i386/floorf.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s
diff --git a/src/math/i386/floorl.s b/src/math/i386/floorl.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s
diff --git a/src/math/i386/trunc.s b/src/math/i386/trunc.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s
diff --git a/src/math/i386/truncf.s b/src/math/i386/truncf.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s
diff --git a/src/math/i386/truncl.s b/src/math/i386/truncl.s
new file mode 100644 (file)
index 0000000..bc29f15
--- /dev/null
@@ -0,0 +1 @@
+# see floor.s