diff --git a/src/freedreno/ir3/ir3_lexer.l b/src/freedreno/ir3/ir3_lexer.l index 11a2abd518d..fbf06e54de1 100644 --- a/src/freedreno/ir3/ir3_lexer.l +++ b/src/freedreno/ir3/ir3_lexer.l @@ -115,6 +115,12 @@ static int parse_reg(const char *str) /* category 0: */ "nop" return TOKEN(T_OP_NOP); "br" return TOKEN(T_OP_BR); +"brao" return TOKEN(T_OP_BRAO); +"braa" return TOKEN(T_OP_BRAA); +"brac" return TOKEN(T_OP_BRAC); +"bany" return TOKEN(T_OP_BANY); +"ball" return TOKEN(T_OP_BALL); +"brax" return TOKEN(T_OP_BRAX); "jump" return TOKEN(T_OP_JUMP); "call" return TOKEN(T_OP_CALL); "ret" return TOKEN(T_OP_RET); @@ -125,6 +131,18 @@ static int parse_reg(const char *str) "chmask" return TOKEN(T_OP_CHMASK); "chsh" return TOKEN(T_OP_CHSH); "flow_rev" return TOKEN(T_OP_FLOW_REV); +"bkt" return TOKEN(T_OP_BKT); +"stks" return TOKEN(T_OP_STKS); +"stkr" return TOKEN(T_OP_STKR); +"xset" return TOKEN(T_OP_XSET); +"xclr" return TOKEN(T_OP_XCLR); +"getone" return TOKEN(T_OP_GETONE); +"dbg" return TOKEN(T_OP_DBG); +"shps" return TOKEN(T_OP_SHPS); +"shpe" return TOKEN(T_OP_SHPE); +"predt" return TOKEN(T_OP_PREDT); +"predf" return TOKEN(T_OP_PREDF); +"prede" return TOKEN(T_OP_PREDE); /* category 1: */ "mova" return TOKEN(T_OP_MOVA); diff --git a/src/freedreno/ir3/ir3_parser.y b/src/freedreno/ir3/ir3_parser.y index e3b8146280b..5a295e7340e 100644 --- a/src/freedreno/ir3/ir3_parser.y +++ b/src/freedreno/ir3/ir3_parser.y @@ -284,6 +284,12 @@ static void print_token(FILE *file, int type, YYSTYPE value) /* category 0: */ %token T_OP_NOP %token T_OP_BR +%token T_OP_BRAO +%token T_OP_BRAA +%token T_OP_BRAC +%token T_OP_BANY +%token T_OP_BALL +%token T_OP_BRAX %token T_OP_JUMP %token T_OP_CALL %token T_OP_RET @@ -294,6 +300,18 @@ static void print_token(FILE *file, int type, YYSTYPE value) %token T_OP_CHMASK %token T_OP_CHSH %token T_OP_FLOW_REV +%token T_OP_BKT +%token T_OP_STKS +%token T_OP_STKR +%token T_OP_XSET +%token T_OP_XCLR +%token T_OP_GETONE +%token T_OP_DBG +%token T_OP_SHPS +%token T_OP_SHPE +%token T_OP_PREDT +%token T_OP_PREDF +%token T_OP_PREDE /* category 1: */ %token T_OP_MOVA @@ -589,10 +607,19 @@ instr: iflags cat0_instr cat0_src1: '!' T_P0 { instr->cat0.inv1 = true; instr->cat0.comp1 = $2 >> 1; } | T_P0 { instr->cat0.comp1 = $1 >> 1; } +cat0_src2: '!' T_P0 { instr->cat0.inv2 = true; instr->cat0.comp2 = $2 >> 1; } +| T_P0 { instr->cat0.comp2 = $1 >> 1; } + cat0_immed: '#' integer { instr->cat0.immed = $2; } cat0_instr: T_OP_NOP { new_instr(OPC_NOP); } -| T_OP_BR { new_instr(OPC_B); } cat0_src1 ',' cat0_immed +| T_OP_BR { new_instr(OPC_B)->cat0.brtype = BRANCH_PLAIN; } cat0_src1 ',' cat0_immed +| T_OP_BRAO { new_instr(OPC_B)->cat0.brtype = BRANCH_OR; } cat0_src1 ',' cat0_src2 ',' cat0_immed +| T_OP_BRAA { new_instr(OPC_B)->cat0.brtype = BRANCH_AND; } cat0_src1 ',' cat0_src2 ',' cat0_immed +| T_OP_BRAC '.' integer { new_instr(OPC_B)->cat0.brtype = BRANCH_CONST; instr->cat0.idx = $3; } cat0_immed +| T_OP_BANY { new_instr(OPC_B)->cat0.brtype = BRANCH_ANY; } cat0_src1 ',' cat0_immed +| T_OP_BALL { new_instr(OPC_B)->cat0.brtype = BRANCH_ALL; } cat0_src1 ',' cat0_immed +| T_OP_BRAX { new_instr(OPC_B)->cat0.brtype = BRANCH_X; } cat0_immed | T_OP_JUMP { new_instr(OPC_JUMP); } cat0_immed | T_OP_CALL { new_instr(OPC_CALL); } cat0_immed | T_OP_RET { new_instr(OPC_RET); } @@ -603,6 +630,18 @@ cat0_instr: T_OP_NOP { new_instr(OPC_NOP); } | T_OP_CHMASK { new_instr(OPC_CHMASK); } | T_OP_CHSH { new_instr(OPC_CHSH); } | T_OP_FLOW_REV { new_instr(OPC_FLOW_REV); } +| T_OP_BKT { new_instr(OPC_BKT); } cat0_immed +| T_OP_STKS { new_instr(OPC_STKS); } +| T_OP_STKR { new_instr(OPC_STKR); } +| T_OP_XSET { new_instr(OPC_XSET); } +| T_OP_XCLR { new_instr(OPC_XCLR); } +| T_OP_GETONE { new_instr(OPC_GETONE); } cat0_immed +| T_OP_DBG { new_instr(OPC_DBG); } +| T_OP_SHPS { new_instr(OPC_SHPS); } cat0_immed +| T_OP_SHPE { new_instr(OPC_SHPE); } +| T_OP_PREDT { new_instr(OPC_PREDT); } cat0_src1 +| T_OP_PREDF { new_instr(OPC_PREDF); } cat0_src1 +| T_OP_PREDE { new_instr(OPC_PREDE); } cat1_opc: T_OP_MOVA { new_instr(OPC_MOV);