diff options
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp | 7 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp | 4 | ||||
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIInstrInfo.td | 8 |
3 files changed, 17 insertions, 2 deletions
diff --git a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp index fc4cd6f1e0b..e1241139fbf 100644 --- a/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp +++ b/llvm/lib/Target/AMDGPU/AsmParser/AMDGPUAsmParser.cpp @@ -4764,13 +4764,18 @@ OperandMatchResultTy AMDGPUAsmParser::parseExpTgtImpl(StringRef Str, if (Str.getAsInteger(10, Val)) return MatchOperand_ParseFail; - if (Val > 3) + if (Val > 4 || (Val == 4 && !isGFX10())) errorExpTgt(); Val += 12; return MatchOperand_Success; } + if (isGFX10() && Str == "prim") { + Val = 20; + return MatchOperand_Success; + } + if (Str.startswith("param")) { Str = Str.drop_front(5); if (Str.getAsInteger(10, Val)) diff --git a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp index b1fdfe15b66..f67904ad19d 100644 --- a/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp +++ b/llvm/lib/Target/AMDGPU/InstPrinter/AMDGPUInstPrinter.cpp @@ -923,8 +923,10 @@ void AMDGPUInstPrinter::printExpTgt(const MCInst *MI, unsigned OpNo, O << " mrtz"; else if (Tgt == 9) O << " null"; - else if (Tgt >= 12 && Tgt <= 15) + else if ((Tgt >= 12 && Tgt <= 15) || (Tgt == 16 && AMDGPU::isGFX10(STI))) O << " pos" << Tgt - 12; + else if (AMDGPU::isGFX10(STI) && Tgt == 20) + O << " prim"; else if (Tgt >= 32 && Tgt <= 63) O << " param" << Tgt - 32; else { diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td index 52b89a219a8..72b7d5088d9 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -1159,6 +1159,14 @@ multiclass EXP_m<bit done, SDPatternOperator node> { let DecoderNamespace = "GFX8"; let DisableDecoder = DisableVIDecoder; } + + def _gfx10 : EXP_Helper<done>, + SIMCInstr <"exp"#!if(done, "_done", ""), SIEncodingFamily.GFX10>, + EXPe { + let AssemblerPredicates = [isGFX10Plus]; + let DecoderNamespace = "GFX10"; + let DisableDecoder = DisableSIDecoder; + } } } } |