summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVladimir Medic <Vladimir.Medic@imgtec.com>2013-08-16 10:17:03 +0000
committerVladimir Medic <Vladimir.Medic@imgtec.com>2013-08-16 10:17:03 +0000
commit2df9ee6ec8560363e2ee47ebde7dfdb2beae5219 (patch)
tree73d4b0fc779751c8deaeb0b197af141b88fa535b
parentf0a84f200aa656db50da5558d3b140ad3649bb5a (diff)
downloadbcm5719-llvm-2df9ee6ec8560363e2ee47ebde7dfdb2beae5219.tar.gz
bcm5719-llvm-2df9ee6ec8560363e2ee47ebde7dfdb2beae5219.zip
This patch implements wait instruction for mips. Examples are added in test files.
llvm-svn: 188537
-rw-r--r--llvm/lib/Target/Mips/MipsInstrInfo.td11
-rw-r--r--llvm/test/MC/Mips/mips-control-instructions.s4
2 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/Mips/MipsInstrInfo.td b/llvm/lib/Target/Mips/MipsInstrInfo.td
index 17532074203..3d7ba007ff7 100644
--- a/llvm/lib/Target/Mips/MipsInstrInfo.td
+++ b/llvm/lib/Target/Mips/MipsInstrInfo.td
@@ -673,6 +673,15 @@ class DEI_FT<string opstr, RegisterOperand RO> :
InstSE<(outs RO:$rt), (ins),
!strconcat(opstr, "\t$rt"), [], NoItinerary, FrmOther>;
+// Wait
+class WAIT_FT<string opstr> :
+ InstSE<(outs), (ins), opstr, [], NoItinerary, FrmOther> {
+ let Inst{31-26} = 0x10;
+ let Inst{25} = 1;
+ let Inst{24-6} = 0;
+ let Inst{5-0} = 0x20;
+}
+
// Sync
let hasSideEffects = 1 in
class SYNC_FT :
@@ -990,6 +999,8 @@ def DERET : ER_FT<"deret">, ER_FM<0x1f>;
def EI : DEI_FT<"ei", GPR32Opnd>, EI_FM<1>;
def DI : DEI_FT<"di", GPR32Opnd>, EI_FM<0>;
+def WAIT : WAIT_FT<"wait">;
+
/// Load-linked, Store-conditional
let Predicates = [NotN64, HasStdEnc] in {
def LL : LLBase<"ll", GPR32Opnd, mem>, LW_FM<0x30>;
diff --git a/llvm/test/MC/Mips/mips-control-instructions.s b/llvm/test/MC/Mips/mips-control-instructions.s
index 90d479db86c..825f349149a 100644
--- a/llvm/test/MC/Mips/mips-control-instructions.s
+++ b/llvm/test/MC/Mips/mips-control-instructions.s
@@ -16,6 +16,7 @@
# CHECK32: ei # encoding: [0x41,0x60,0x60,0x20]
# CHECK32: ei # encoding: [0x41,0x60,0x60,0x20]
# CHECK32: ei $10 # encoding: [0x41,0x6a,0x60,0x20]
+# CHECK32: wait # encoding: [0x42,0x00,0x00,0x20]
# CHECK64: break # encoding: [0x00,0x00,0x00,0x0d]
# CHECK64: break 7, 0 # encoding: [0x00,0x07,0x00,0x0d]
@@ -30,6 +31,7 @@
# CHECK64: ei # encoding: [0x41,0x60,0x60,0x20]
# CHECK64: ei # encoding: [0x41,0x60,0x60,0x20]
# CHECK64: ei $10 # encoding: [0x41,0x6a,0x60,0x20]
+# CHECK64: wait # encoding: [0x42,0x00,0x00,0x20]
break
break 7
break 7,5
@@ -44,3 +46,5 @@
ei
ei $0
ei $10
+
+ wait
OpenPOWER on IntegriCloud