summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/Sparc/README.txt2
-rw-r--r--lib/Target/Sparc/SparcInstrInfo.td18
-rw-r--r--lib/Target/SparcV8/README.txt2
-rw-r--r--lib/Target/SparcV8/SparcV8InstrInfo.td18
4 files changed, 32 insertions, 8 deletions
diff --git a/lib/Target/Sparc/README.txt b/lib/Target/Sparc/README.txt
index e97edec19a..1d7ceac3f6 100644
--- a/lib/Target/Sparc/README.txt
+++ b/lib/Target/Sparc/README.txt
@@ -79,7 +79,5 @@ To-do
where possible. I think this is what afflicts the inner loop of Olden/tsp
(hot block = tsp():no_exit.1.i, overall GCC/LLC = 0.03).
-* Generate fsqrtd for calls to sqrt() (~ 4% speedup on Olden/tsp).
-
$Date$
diff --git a/lib/Target/Sparc/SparcInstrInfo.td b/lib/Target/Sparc/SparcInstrInfo.td
index cf8d551d74..04fb7fe4f5 100644
--- a/lib/Target/Sparc/SparcInstrInfo.td
+++ b/lib/Target/Sparc/SparcInstrInfo.td
@@ -514,10 +514,24 @@ def FMOVS : F3_3<2, 0b110100, 0b000000001,
"fmovs $src, $dst", []>;
def FNEGS : F3_3<2, 0b110100, 0b000000101,
(ops FPRegs:$dst, FPRegs:$src),
- "fnegs $src, $dst", []>;
+ "fnegs $src, $dst",
+ [(set FPRegs:$dst, (fneg FPRegs:$src))]>;
def FABSS : F3_3<2, 0b110100, 0b000001001,
(ops FPRegs:$dst, FPRegs:$src),
- "fabss $src, $dst", []>;
+ "fabss $src, $dst",
+ [(set FPRegs:$dst, (fabs FPRegs:$src))]>;
+
+// Floating-point Square Root Instructions, p.145
+def FSQRTS : F3_3<2, 0b110100, 0b000101001,
+ (ops FPRegs:$dst, FPRegs:$src),
+ "fsqrts $src, $dst",
+ [(set FPRegs:$dst, (fsqrt FPRegs:$src))]>;
+def FSQRTD : F3_3<2, 0b110100, 0b000101010,
+ (ops DFPRegs:$dst, DFPRegs:$src),
+ "fsqrtd $src, $dst",
+ [(set DFPRegs:$dst, (fsqrt DFPRegs:$src))]>;
+
+
// Floating-point Add and Subtract Instructions, p. 146
def FADDS : F3_3<2, 0b110100, 0b001000001,
diff --git a/lib/Target/SparcV8/README.txt b/lib/Target/SparcV8/README.txt
index e97edec19a..1d7ceac3f6 100644
--- a/lib/Target/SparcV8/README.txt
+++ b/lib/Target/SparcV8/README.txt
@@ -79,7 +79,5 @@ To-do
where possible. I think this is what afflicts the inner loop of Olden/tsp
(hot block = tsp():no_exit.1.i, overall GCC/LLC = 0.03).
-* Generate fsqrtd for calls to sqrt() (~ 4% speedup on Olden/tsp).
-
$Date$
diff --git a/lib/Target/SparcV8/SparcV8InstrInfo.td b/lib/Target/SparcV8/SparcV8InstrInfo.td
index cf8d551d74..04fb7fe4f5 100644
--- a/lib/Target/SparcV8/SparcV8InstrInfo.td
+++ b/lib/Target/SparcV8/SparcV8InstrInfo.td
@@ -514,10 +514,24 @@ def FMOVS : F3_3<2, 0b110100, 0b000000001,
"fmovs $src, $dst", []>;
def FNEGS : F3_3<2, 0b110100, 0b000000101,
(ops FPRegs:$dst, FPRegs:$src),
- "fnegs $src, $dst", []>;
+ "fnegs $src, $dst",
+ [(set FPRegs:$dst, (fneg FPRegs:$src))]>;
def FABSS : F3_3<2, 0b110100, 0b000001001,
(ops FPRegs:$dst, FPRegs:$src),
- "fabss $src, $dst", []>;
+ "fabss $src, $dst",
+ [(set FPRegs:$dst, (fabs FPRegs:$src))]>;
+
+// Floating-point Square Root Instructions, p.145
+def FSQRTS : F3_3<2, 0b110100, 0b000101001,
+ (ops FPRegs:$dst, FPRegs:$src),
+ "fsqrts $src, $dst",
+ [(set FPRegs:$dst, (fsqrt FPRegs:$src))]>;
+def FSQRTD : F3_3<2, 0b110100, 0b000101010,
+ (ops DFPRegs:$dst, DFPRegs:$src),
+ "fsqrtd $src, $dst",
+ [(set DFPRegs:$dst, (fsqrt DFPRegs:$src))]>;
+
+
// Floating-point Add and Subtract Instructions, p. 146
def FADDS : F3_3<2, 0b110100, 0b001000001,