summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Katzman <dougk@google.com>2015-08-19 19:30:57 +0000
committerDouglas Katzman <dougk@google.com>2015-08-19 19:30:57 +0000
commit2362b69dd9e1ad3b5be54780b051bb0f3860853f (patch)
tree44b1852ecaa89944ede9587e351e718d82f4c054
parent5cedc8fbfaf87d1afe0cb1e378d882dce77cb127 (diff)
downloadbcm5719-llvm-2362b69dd9e1ad3b5be54780b051bb0f3860853f.tar.gz
bcm5719-llvm-2362b69dd9e1ad3b5be54780b051bb0f3860853f.zip
[Sparc]: asm-only support for the ldstub instruction.
llvm-svn: 245485
-rw-r--r--llvm/lib/Target/Sparc/SparcInstrInfo.td11
-rw-r--r--llvm/test/MC/Sparc/sparc-atomic-instructions.s9
2 files changed, 20 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/SparcInstrInfo.td b/llvm/lib/Target/Sparc/SparcInstrInfo.td
index 21e9f70e4db..5da4983eab4 100644
--- a/llvm/lib/Target/Sparc/SparcInstrInfo.td
+++ b/llvm/lib/Target/Sparc/SparcInstrInfo.td
@@ -298,6 +298,17 @@ multiclass LoadA<string OpcStr, bits<6> Op3Val, bits<6> LoadAOp3Val,
def Arr : LoadASI<OpcStr, LoadAOp3Val, OpNode, RC, Ty>;
}
+// The LDSTUB instruction is supported for asm only.
+// It is unlikely that general-purpose code could make use of it.
+// CAS is preferred for sparc v9.
+def LDSTUBrr : F3_1<3, 0b001101, (outs IntRegs:$dst), (ins MEMrr:$addr),
+ "ldstub [$addr], $dst", []>;
+def LDSTUBri : F3_2<3, 0b001101, (outs IntRegs:$dst), (ins MEMri:$addr),
+ "ldstub [$addr], $dst", []>;
+def LDSTUBArr : F3_1_asi<3, 0b011101, (outs IntRegs:$dst),
+ (ins MEMrr:$addr, i8imm:$asi),
+ "ldstuba [$addr] $asi, $dst", []>;
+
// Store multiclass - Define both Reg+Reg/Reg+Imm patterns in one shot.
multiclass Store<string OpcStr, bits<6> Op3Val, SDPatternOperator OpNode,
RegisterClass RC, ValueType Ty> {
diff --git a/llvm/test/MC/Sparc/sparc-atomic-instructions.s b/llvm/test/MC/Sparc/sparc-atomic-instructions.s
index 17f97d4b535..4ce19d5cdda 100644
--- a/llvm/test/MC/Sparc/sparc-atomic-instructions.s
+++ b/llvm/test/MC/Sparc/sparc-atomic-instructions.s
@@ -12,3 +12,12 @@
! CHECK: swapa [%i0+%l6] 131, %o2 ! encoding: [0xd4,0xfe,0x10,0x76]
swapa [%i0+%l6] 131, %o2
+
+ ! CHECK: ldstub [%i0+40], %g1 ! encoding: [0xc2,0x6e,0x20,0x28]
+ ldstub [%i0+40], %g1
+
+ ! CHECK: ldstub [%i0+%i2], %g1 ! encoding: [0xc2,0x6e,0x00,0x1a]
+ ldstub [%i0+%i2], %g1
+
+ ! CHECK: ldstuba [%i0+%i2] 131, %g1 ! encoding: [0xc2,0xee,0x10,0x7a]
+ ldstuba [%i0+%i2] 131, %g1
OpenPOWER on IntegriCloud