aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorMisha Brukman <brukman+llvm@gmail.com>2003-06-05 20:51:37 +0000
committerMisha Brukman <brukman+llvm@gmail.com>2003-06-05 20:51:37 +0000
commite77d65a8ed7b0da7bd1c5c4252706f2c1d879f6b (patch)
tree9199f13f20ac3fd7c79742bb37ad44ba20aaf17d /lib
parent5b4299c26d776fee322c8c7a5d44511f18366805 (diff)
downloadexternal_llvm-e77d65a8ed7b0da7bd1c5c4252706f2c1d879f6b.zip
external_llvm-e77d65a8ed7b0da7bd1c5c4252706f2c1d879f6b.tar.gz
external_llvm-e77d65a8ed7b0da7bd1c5c4252706f2c1d879f6b.tar.bz2
* The textual output of (non-)predicted FP branches is the same.
* Stop mapping FBcc instructions to deprecated opcodes, map to FBPcc instead. * Fixed opf in FCMPxy instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6632 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Target/SparcV9/SparcV9.td74
1 files changed, 50 insertions, 24 deletions
diff --git a/lib/Target/SparcV9/SparcV9.td b/lib/Target/SparcV9/SparcV9.td
index 3a2ed36..6c3aa56 100644
--- a/lib/Target/SparcV9/SparcV9.td
+++ b/lib/Target/SparcV9/SparcV9.td
@@ -52,7 +52,9 @@ set op2 = 0b011 in {
def BRGEZ : F2_4<0b111, "brgez">; // Branch on rs1 >= 0
}
-// Section A.4: p164
+// Section A.4: Branch on Floating-Point Condition Codes (FBfcc) p140
+// The following deprecated instructions don't seem to play nice on Sparc
+#if 0
set isDeprecated = 1 in {
set op2 = 0b110 in {
def FBA : F2_2<0b1000, "fba">; // Branch always
@@ -73,27 +75,51 @@ set isDeprecated = 1 in {
def FBO : F2_2<0b1111, "fbo">; // Branch on ordered
}
}
+#endif
+
+// These instructions are hacked to really represent A.5 instructions,
+// but with cc hardcoded to be %fcc0. Hence, they behave like FBPfcc instrs.
+set op2 = 0b101 in {
+ set cc = 0b00 in {
+ def FBA : F2_3<0b1000, "fba">; // Branch always
+ def FBN : F2_3<0b0000, "fbn">; // Branch never
+ def FBU : F2_3<0b0111, "fbu">; // Branch on unordered
+ def FBG : F2_3<0b0110, "fbg">; // Branch >
+ def FBUG : F2_3<0b0101, "fbug">; // Branch on unordered or >
+ def FBL : F2_3<0b0100, "fbl">; // Branch <
+ def FBUL : F2_3<0b0011, "fbul">; // Branch on unordered or <
+ def FBLG : F2_3<0b0010, "fblg">; // Branch < or >
+ def FBNE : F2_3<0b0001, "fbne">; // Branch !=
+ def FBE : F2_3<0b1001, "fbe">; // Branch ==
+ def FBUE : F2_3<0b1010, "fbue">; // Branch on unordered or ==
+ def FBGE : F2_3<0b1011, "fbge">; // Branch > or ==
+ def FBUGE : F2_3<0b1100, "fbuge">; // Branch unord or > or ==
+ def FBLE : F2_3<0b1101, "fble">; // Branch < or ==
+ def FBULE : F2_3<0b1110, "fbule">; // Branch unord or < or ==
+ def FBO : F2_3<0b1111, "fbo">; // Branch on ordered
+ }
+}
-// Section A.5: p167
+// Section A.5: Branch on FP condition codes with prediction - p143
// Not used in the Sparc backend
#if 0
set op2 = 0b101 in {
- def FBPA : F2_3<0b1000, "fbpa">; // Branch always
- def FBPN : F2_3<0b0000, "fbpn">; // Branch never
- def FBPU : F2_3<0b0111, "fbpu">; // Branch on unordered
- def FBPG : F2_3<0b0110, "fbpg">; // Branch >
- def FBPUG : F2_3<0b0101, "fbpug">; // Branch on unordered or >
- def FBPL : F2_3<0b0100, "fbpl">; // Branch <
- def FBPUL : F2_3<0b0011, "fbpul">; // Branch on unordered or <
- def FBPLG : F2_3<0b0010, "fbplg">; // Branch < or >
- def FBPNE : F2_3<0b0001, "fbpne">; // Branch !=
- def FBPE : F2_3<0b1001, "fbpe">; // Branch ==
- def FBPUE : F2_3<0b1010, "fbpue">; // Branch on unordered or ==
- def FBPGE : F2_3<0b1011, "fbpge">; // Branch > or ==
- def FBPUGE : F2_3<0b1100, "fbpuge">; // Branch unord or > or ==
- def FBPLE : F2_3<0b1101, "fbple">; // Branch < or ==
- def FBPULE : F2_3<0b1110, "fbpule">; // Branch unord or < or ==
- def FBPO : F2_3<0b1111, "fbpo">; // Branch on ordered
+ def FBPA : F2_3<0b1000, "fba">; // Branch always
+ def FBPN : F2_3<0b0000, "fbn">; // Branch never
+ def FBPU : F2_3<0b0111, "fbu">; // Branch on unordered
+ def FBPG : F2_3<0b0110, "fbg">; // Branch >
+ def FBPUG : F2_3<0b0101, "fbug">; // Branch on unordered or >
+ def FBPL : F2_3<0b0100, "fbl">; // Branch <
+ def FBPUL : F2_3<0b0011, "fbul">; // Branch on unordered or <
+ def FBPLG : F2_3<0b0010, "fblg">; // Branch < or >
+ def FBPNE : F2_3<0b0001, "fbne">; // Branch !=
+ def FBPE : F2_3<0b1001, "fbe">; // Branch ==
+ def FBPUE : F2_3<0b1010, "fbue">; // Branch on unordered or ==
+ def FBPGE : F2_3<0b1011, "fbge">; // Branch > or ==
+ def FBPUGE : F2_3<0b1100, "fbuge">; // Branch unord or > or ==
+ def FBPLE : F2_3<0b1101, "fble">; // Branch < or ==
+ def FBPULE : F2_3<0b1110, "fbule">; // Branch unord or < or ==
+ def FBPO : F2_3<0b1111, "fbo">; // Branch on ordered
}
#endif
@@ -188,14 +214,14 @@ def FSUBD : F3_16<2, 0b110100, 0x46, "fsubd">; // fsubd f, f, f
def FSUBQ : F3_16<2, 0b110100, 0x47, "fsubq">; // fsubq f, f, f
// Section A.13: Floating-point compare - p159
-def FCMPS : F3_15<2, 0b110101, 0b010100001, "fcmps">; // fcmps %fcc, r1, r2
-def FCMPD : F3_15<2, 0b110101, 0b010100010, "fcmpd">; // fcmpd %fcc, r1, r2
-def FCMPQ : F3_15<2, 0b110101, 0b010100011, "fcmpq">; // fcmpq %fcc, r1, r2
+def FCMPS : F3_15<2, 0b110101, 0b001010001, "fcmps">; // fcmps %fcc, r1, r2
+def FCMPD : F3_15<2, 0b110101, 0b001010010, "fcmpd">; // fcmpd %fcc, r1, r2
+def FCMPQ : F3_15<2, 0b110101, 0b001010011, "fcmpq">; // fcmpq %fcc, r1, r2
// Currently unused in the Sparc backend
#if 0
-def FCMPES : F3_15<2, 0b110101, 0b010100101, "fcmpes">; // fcmpes %fcc, r1, r2
-def FCMPED : F3_15<2, 0b110101, 0b010100110, "fcmped">; // fcmped %fcc, r1, r2
-def FCMPEQ : F3_15<2, 0b110101, 0b010100111, "fcmpeq">; // fcmpeq %fcc, r1, r2
+def FCMPES : F3_15<2, 0b110101, 0b001010101, "fcmpes">; // fcmpes %fcc, r1, r2
+def FCMPED : F3_15<2, 0b110101, 0b001010110, "fcmped">; // fcmped %fcc, r1, r2
+def FCMPEQ : F3_15<2, 0b110101, 0b001010111, "fcmpeq">; // fcmpeq %fcc, r1, r2
#endif
// Section A.14: Convert floating-point to integer - p161