From 294974bd576c381d66af6e73159d0574af81d405 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 17 Dec 2005 23:20:27 +0000 Subject: [PATCH] add fneg,fabs,fsqrt instructions git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24803 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/Sparc/README.txt | 2 -- lib/Target/Sparc/SparcInstrInfo.td | 18 ++++++++++++++++-- lib/Target/SparcV8/README.txt | 2 -- lib/Target/SparcV8/SparcV8InstrInfo.td | 18 ++++++++++++++++-- 4 files changed, 32 insertions(+), 8 deletions(-) diff --git a/lib/Target/Sparc/README.txt b/lib/Target/Sparc/README.txt index e97edec19a3..1d7ceac3f60 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 cf8d551d740..04fb7fe4f59 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 e97edec19a3..1d7ceac3f60 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 cf8d551d740..04fb7fe4f59 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, -- 2.34.1