add fneg,fabs,fsqrt instructions
authorChris Lattner <sabre@nondot.org>
Sat, 17 Dec 2005 23:20:27 +0000 (23:20 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 17 Dec 2005 23:20:27 +0000 (23:20 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24803 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Sparc/README.txt
lib/Target/Sparc/SparcInstrInfo.td
lib/Target/SparcV8/README.txt
lib/Target/SparcV8/SparcV8InstrInfo.td

index e97edec19a3201953fcd3910e7b31c2a6d07939b..1d7ceac3f60c7b8ad9a151cf8b15d3a46597e92c 100644 (file)
@@ -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$
 
index cf8d551d7405da0c5b21a9ea0b8ad2c0acb90c51..04fb7fe4f5988301f65a55b39d8d55e550ffed1c 100644 (file)
@@ -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,
index e97edec19a3201953fcd3910e7b31c2a6d07939b..1d7ceac3f60c7b8ad9a151cf8b15d3a46597e92c 100644 (file)
@@ -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$
 
index cf8d551d7405da0c5b21a9ea0b8ad2c0acb90c51..04fb7fe4f5988301f65a55b39d8d55e550ffed1c 100644 (file)
@@ -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,