From b935147761d1770bb115f09f8c28ddb4d36e1236 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sun, 18 Mar 2012 17:09:34 -0400 Subject: [PATCH] assembly optimizations for fmod/remainder functions --- src/math/i386/fmod.s | 11 +++++++++++ src/math/i386/fmodf.s | 11 +++++++++++ src/math/i386/fmodl.s | 11 +++++++++++ src/math/i386/remainder.s | 11 +++++++++++ src/math/i386/remainderf.s | 11 +++++++++++ src/math/i386/remainderl.s | 11 +++++++++++ src/math/x86_64/fmodl.s | 11 +++++++++++ src/math/x86_64/remainderl.s | 11 +++++++++++ 8 files changed, 88 insertions(+) create mode 100644 src/math/i386/fmod.s create mode 100644 src/math/i386/fmodf.s create mode 100644 src/math/i386/fmodl.s create mode 100644 src/math/i386/remainder.s create mode 100644 src/math/i386/remainderf.s create mode 100644 src/math/i386/remainderl.s create mode 100644 src/math/x86_64/fmodl.s create mode 100644 src/math/x86_64/remainderl.s diff --git a/src/math/i386/fmod.s b/src/math/i386/fmod.s new file mode 100644 index 00000000..069fbfe7 --- /dev/null +++ b/src/math/i386/fmod.s @@ -0,0 +1,11 @@ +.global fmod +.type fmod,@function +fmod: + fldl 12(%esp) + fldl 4(%esp) +1: fprem + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret diff --git a/src/math/i386/fmodf.s b/src/math/i386/fmodf.s new file mode 100644 index 00000000..d99c80f2 --- /dev/null +++ b/src/math/i386/fmodf.s @@ -0,0 +1,11 @@ +.global fmodf +.type fmodf,@function +fmodf: + flds 8(%esp) + flds 4(%esp) +1: fprem + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret diff --git a/src/math/i386/fmodl.s b/src/math/i386/fmodl.s new file mode 100644 index 00000000..7e07e7b5 --- /dev/null +++ b/src/math/i386/fmodl.s @@ -0,0 +1,11 @@ +.global fmodl +.type fmodl,@function +fmodl: + fldt 16(%esp) + fldt 4(%esp) +1: fprem + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret diff --git a/src/math/i386/remainder.s b/src/math/i386/remainder.s new file mode 100644 index 00000000..47ee3402 --- /dev/null +++ b/src/math/i386/remainder.s @@ -0,0 +1,11 @@ +.global remainder +.type remainder,@function +remainder: + fldl 12(%esp) + fldl 4(%esp) +1: fprem1 + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret diff --git a/src/math/i386/remainderf.s b/src/math/i386/remainderf.s new file mode 100644 index 00000000..5b5fc235 --- /dev/null +++ b/src/math/i386/remainderf.s @@ -0,0 +1,11 @@ +.global remainderf +.type remainderf,@function +remainderf: + flds 8(%esp) + flds 4(%esp) +1: fprem1 + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret diff --git a/src/math/i386/remainderl.s b/src/math/i386/remainderl.s new file mode 100644 index 00000000..00978729 --- /dev/null +++ b/src/math/i386/remainderl.s @@ -0,0 +1,11 @@ +.global remainderl +.type remainderl,@function +remainderl: + fldt 16(%esp) + fldt 4(%esp) +1: fprem1 + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret diff --git a/src/math/x86_64/fmodl.s b/src/math/x86_64/fmodl.s new file mode 100644 index 00000000..ca81e60c --- /dev/null +++ b/src/math/x86_64/fmodl.s @@ -0,0 +1,11 @@ +.global fmodl +.type fmodl,@function +fmodl: + fldt 24(%rsp) + fldt 8(%rsp) +1: fprem + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret diff --git a/src/math/x86_64/remainderl.s b/src/math/x86_64/remainderl.s new file mode 100644 index 00000000..75c12374 --- /dev/null +++ b/src/math/x86_64/remainderl.s @@ -0,0 +1,11 @@ +.global remainderl +.type remainderl,@function +remainderl: + fldt 24(%rsp) + fldt 8(%rsp) +1: fprem1 + fstsw %ax + sahf + jp 1b + fstp %st(1) + ret -- 2.20.1