From 0b70a1e9a9651d21242c5b6da327ecab0f1a38a6 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 19 Mar 2012 05:42:04 -0400 Subject: [PATCH] asm for floor/ceil/trunc --- src/math/i386/ceil.s | 1 + src/math/i386/ceilf.s | 1 + src/math/i386/ceill.s | 1 + src/math/i386/floor.s | 67 ++++++++++++++++++++++++++++++++++++++++++ src/math/i386/floorf.s | 1 + src/math/i386/floorl.s | 1 + src/math/i386/trunc.s | 1 + src/math/i386/truncf.s | 1 + src/math/i386/truncl.s | 1 + 9 files changed, 75 insertions(+) create mode 100644 src/math/i386/ceil.s create mode 100644 src/math/i386/ceilf.s create mode 100644 src/math/i386/ceill.s create mode 100644 src/math/i386/floor.s create mode 100644 src/math/i386/floorf.s create mode 100644 src/math/i386/floorl.s create mode 100644 src/math/i386/trunc.s create mode 100644 src/math/i386/truncf.s create mode 100644 src/math/i386/truncl.s diff --git a/src/math/i386/ceil.s b/src/math/i386/ceil.s new file mode 100644 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/ceil.s @@ -0,0 +1 @@ +# see floor.s diff --git a/src/math/i386/ceilf.s b/src/math/i386/ceilf.s new file mode 100644 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/ceilf.s @@ -0,0 +1 @@ +# see floor.s diff --git a/src/math/i386/ceill.s b/src/math/i386/ceill.s new file mode 100644 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/ceill.s @@ -0,0 +1 @@ +# see floor.s diff --git a/src/math/i386/floor.s b/src/math/i386/floor.s new file mode 100644 index 00000000..46ba88db --- /dev/null +++ b/src/math/i386/floor.s @@ -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 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/floorf.s @@ -0,0 +1 @@ +# see floor.s diff --git a/src/math/i386/floorl.s b/src/math/i386/floorl.s new file mode 100644 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/floorl.s @@ -0,0 +1 @@ +# see floor.s diff --git a/src/math/i386/trunc.s b/src/math/i386/trunc.s new file mode 100644 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/trunc.s @@ -0,0 +1 @@ +# see floor.s diff --git a/src/math/i386/truncf.s b/src/math/i386/truncf.s new file mode 100644 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/truncf.s @@ -0,0 +1 @@ +# see floor.s diff --git a/src/math/i386/truncl.s b/src/math/i386/truncl.s new file mode 100644 index 00000000..bc29f15c --- /dev/null +++ b/src/math/i386/truncl.s @@ -0,0 +1 @@ +# see floor.s -- 2.20.1