| //===- NVPTXInstrFormats.td - NVPTX Instruction Formats-------*- tblgen -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| //===----------------------------------------------------------------------===// |
| // Describe NVPTX instructions format |
| // |
| //===----------------------------------------------------------------------===// |
| |
| // Vector instruction type enum |
| class VecInstTypeEnum<bits<4> val> { |
| bits<4> Value=val; |
| } |
| def VecNOP : VecInstTypeEnum<0>; |
| |
| // Generic NVPTX Format |
| |
| class NVPTXInst<dag outs, dag ins, string asmstr, list<dag> pattern> |
| : Instruction { |
| field bits<14> Inst; |
| |
| let Namespace = "NVPTX"; |
| dag OutOperandList = outs; |
| dag InOperandList = ins; |
| let AsmString = asmstr; |
| let Pattern = pattern; |
| |
| // TSFlagFields |
| bits<4> VecInstType = VecNOP.Value; |
| bit IsSimpleMove = false; |
| bit IsLoad = false; |
| bit IsStore = false; |
| |
| bit IsTex = false; |
| bit IsSust = false; |
| bit IsSurfTexQuery = false; |
| bit IsTexModeUnified = false; |
| |
| // The following field is encoded as log2 of the vector size minus one, |
| // with 0 meaning the operation is not a surface instruction. For example, |
| // if IsSuld == 2, then the instruction is a suld instruction with vector size |
| // 2**(2-1) = 2. |
| bits<2> IsSuld = 0; |
| |
| let TSFlags{3...0} = VecInstType; |
| let TSFlags{4...4} = IsSimpleMove; |
| let TSFlags{5...5} = IsLoad; |
| let TSFlags{6...6} = IsStore; |
| let TSFlags{7} = IsTex; |
| let TSFlags{9...8} = IsSuld; |
| let TSFlags{10} = IsSust; |
| let TSFlags{11} = IsSurfTexQuery; |
| let TSFlags{12} = IsTexModeUnified; |
| } |