nouveau/mme: Add basic structures for the Turing+ MME
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24326>
This commit is contained in:
committed by
Marge Bot
parent
a6c62732da
commit
af961f9aec
@@ -0,0 +1,168 @@
|
||||
#ifndef MME_TU104_H
|
||||
#define MME_TU104_H
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "util/macros.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#define MME_TU104_DRAM_COUNT 0xc00
|
||||
#define MME_TU104_SCRATCH_COUNT 256
|
||||
|
||||
enum PACKED mme_tu104_pred {
|
||||
MME_TU104_PRED_UUUU,
|
||||
MME_TU104_PRED_TTTT,
|
||||
MME_TU104_PRED_FFFF,
|
||||
MME_TU104_PRED_TTUU,
|
||||
MME_TU104_PRED_FFUU,
|
||||
MME_TU104_PRED_TFUU,
|
||||
MME_TU104_PRED_TUUU,
|
||||
MME_TU104_PRED_FUUU,
|
||||
MME_TU104_PRED_UUTT,
|
||||
MME_TU104_PRED_UUTF,
|
||||
MME_TU104_PRED_UUTU,
|
||||
MME_TU104_PRED_UUFT,
|
||||
MME_TU104_PRED_UUFF,
|
||||
MME_TU104_PRED_UUFU,
|
||||
MME_TU104_PRED_UUUT,
|
||||
MME_TU104_PRED_UUUF,
|
||||
};
|
||||
|
||||
enum PACKED mme_tu104_reg {
|
||||
MME_TU104_REG_R0,
|
||||
MME_TU104_REG_R1,
|
||||
MME_TU104_REG_R2,
|
||||
MME_TU104_REG_R3,
|
||||
MME_TU104_REG_R4,
|
||||
MME_TU104_REG_R5,
|
||||
MME_TU104_REG_R6,
|
||||
MME_TU104_REG_R7,
|
||||
MME_TU104_REG_R8,
|
||||
MME_TU104_REG_R9,
|
||||
MME_TU104_REG_R10,
|
||||
MME_TU104_REG_R11,
|
||||
MME_TU104_REG_R12,
|
||||
MME_TU104_REG_R13,
|
||||
MME_TU104_REG_R14,
|
||||
MME_TU104_REG_R15,
|
||||
MME_TU104_REG_R16,
|
||||
MME_TU104_REG_R17,
|
||||
MME_TU104_REG_R18,
|
||||
MME_TU104_REG_R19,
|
||||
MME_TU104_REG_R20,
|
||||
MME_TU104_REG_R21,
|
||||
MME_TU104_REG_R22,
|
||||
MME_TU104_REG_R23,
|
||||
MME_TU104_REG_ZERO,
|
||||
MME_TU104_REG_IMM,
|
||||
MME_TU104_REG_IMMPAIR,
|
||||
MME_TU104_REG_IMM32,
|
||||
MME_TU104_REG_LOAD0,
|
||||
MME_TU104_REG_LOAD1,
|
||||
MME_TU104_REG_VIRTUAL0 = 32,
|
||||
};
|
||||
|
||||
enum PACKED mme_tu104_alu_op {
|
||||
MME_TU104_ALU_OP_ADD,
|
||||
MME_TU104_ALU_OP_ADDC,
|
||||
MME_TU104_ALU_OP_SUB,
|
||||
MME_TU104_ALU_OP_SUBB,
|
||||
MME_TU104_ALU_OP_MUL,
|
||||
MME_TU104_ALU_OP_MULH,
|
||||
MME_TU104_ALU_OP_MULU,
|
||||
MME_TU104_ALU_OP_EXTENDED,
|
||||
MME_TU104_ALU_OP_CLZ,
|
||||
MME_TU104_ALU_OP_SLL,
|
||||
MME_TU104_ALU_OP_SRL,
|
||||
MME_TU104_ALU_OP_SRA,
|
||||
MME_TU104_ALU_OP_AND,
|
||||
MME_TU104_ALU_OP_NAND,
|
||||
MME_TU104_ALU_OP_OR,
|
||||
MME_TU104_ALU_OP_XOR,
|
||||
MME_TU104_ALU_OP_MERGE,
|
||||
MME_TU104_ALU_OP_SLT,
|
||||
MME_TU104_ALU_OP_SLTU,
|
||||
MME_TU104_ALU_OP_SLE,
|
||||
MME_TU104_ALU_OP_SLEU,
|
||||
MME_TU104_ALU_OP_SEQ,
|
||||
MME_TU104_ALU_OP_STATE,
|
||||
MME_TU104_ALU_OP_LOOP,
|
||||
MME_TU104_ALU_OP_JAL,
|
||||
MME_TU104_ALU_OP_BLT,
|
||||
MME_TU104_ALU_OP_BLTU,
|
||||
MME_TU104_ALU_OP_BLE,
|
||||
MME_TU104_ALU_OP_BLEU,
|
||||
MME_TU104_ALU_OP_BEQ,
|
||||
MME_TU104_ALU_OP_DREAD,
|
||||
MME_TU104_ALU_OP_DWRITE,
|
||||
};
|
||||
|
||||
enum PACKED mme_tu104_out_op {
|
||||
MME_TU104_OUT_OP_NONE,
|
||||
MME_TU104_OUT_OP_ALU0,
|
||||
MME_TU104_OUT_OP_ALU1,
|
||||
MME_TU104_OUT_OP_LOAD0,
|
||||
MME_TU104_OUT_OP_LOAD1,
|
||||
MME_TU104_OUT_OP_IMM0,
|
||||
MME_TU104_OUT_OP_IMM1,
|
||||
MME_TU104_OUT_OP_RESERVED,
|
||||
MME_TU104_OUT_OP_IMMHIGH0,
|
||||
MME_TU104_OUT_OP_IMMHIGH1,
|
||||
MME_TU104_OUT_OP_IMM32,
|
||||
};
|
||||
|
||||
struct mme_tu104_alu {
|
||||
enum mme_tu104_reg dst;
|
||||
enum mme_tu104_alu_op op;
|
||||
enum mme_tu104_reg src[2];
|
||||
};
|
||||
|
||||
#define MME_TU104_ALU_DEFAULTS \
|
||||
.dst = MME_TU104_REG_ZERO, \
|
||||
.op = MME_TU104_ALU_OP_ADD, \
|
||||
.src = { \
|
||||
MME_TU104_REG_ZERO, \
|
||||
MME_TU104_REG_ZERO, \
|
||||
},
|
||||
|
||||
struct mme_tu104_out {
|
||||
enum mme_tu104_out_op mthd;
|
||||
enum mme_tu104_out_op emit;
|
||||
};
|
||||
|
||||
#define MME_TU104_OUT_DEFAULTS \
|
||||
.mthd = MME_TU104_OUT_OP_NONE, \
|
||||
.emit = MME_TU104_OUT_OP_NONE,
|
||||
|
||||
struct mme_tu104_inst {
|
||||
bool end_next;
|
||||
enum mme_tu104_pred pred_mode;
|
||||
enum mme_tu104_reg pred;
|
||||
uint16_t imm[2];
|
||||
struct mme_tu104_alu alu[2];
|
||||
struct mme_tu104_out out[2];
|
||||
};
|
||||
|
||||
#define MME_TU104_INST_DEFAULTS \
|
||||
.end_next = false, \
|
||||
.pred_mode = MME_TU104_PRED_UUUU, \
|
||||
.pred = MME_TU104_REG_ZERO, \
|
||||
.imm = { 0, 0 }, \
|
||||
.alu = { \
|
||||
{ MME_TU104_ALU_DEFAULTS }, \
|
||||
{ MME_TU104_ALU_DEFAULTS } \
|
||||
}, \
|
||||
.out = { \
|
||||
{ MME_TU104_OUT_DEFAULTS }, \
|
||||
{ MME_TU104_OUT_DEFAULTS } \
|
||||
},
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* MME_TU104_H */
|
||||
Reference in New Issue
Block a user