~mmach/netext73/mesa-ryzen

« back to all changes in this revision

Viewing changes to src/freedreno/ir3/ir3_parser.y

  • Committer: mmach
  • Date: 2023-11-02 21:31:35 UTC
  • Revision ID: netbit73@gmail.com-20231102213135-18d4tzh7tj0uz752
2023-11-02 22:11:57

Show diffs side-by-side

added added

removed removed

Lines of Context:
343
343
%token <tok> T_NEG
344
344
%token <tok> T_ABS
345
345
%token <tok> T_R
 
346
%token <tok> T_LAST
346
347
 
347
348
%token <tok> T_HR
348
349
%token <tok> T_HC
617
618
%token <tok> T_OP_GETWID
618
619
%token <tok> T_OP_GETFIBERID
619
620
%token <tok> T_OP_STC
 
621
%token <tok> T_OP_STSC
620
622
 
621
623
/* category 7: */
622
624
%token <tok> T_OP_BAR
626
628
%token <tok> T_OP_DCCLN
627
629
%token <tok> T_OP_DCINV
628
630
%token <tok> T_OP_DCFLU
 
631
%token <tok> T_OP_LOCK
 
632
%token <tok> T_OP_UNLOCK
 
633
%token <tok> T_OP_ALIAS
629
634
 
630
635
%token <u64> T_RAW
631
636
 
676
681
%token <num> T_P0
677
682
%token <num> T_W
678
683
%token <str> T_CAT1_TYPE_TYPE
 
684
%token <str> T_INSTR_TYPE
 
685
 
 
686
%token <tok> T_MOD_TEX
 
687
%token <tok> T_MOD_MEM
 
688
%token <tok> T_MOD_RT
679
689
 
680
690
%type <num> integer offset
681
691
%type <num> flut_immed
1118
1128
 
1119
1129
cat6_immed:        integer   { instr->cat6.iim_val = $1; }
1120
1130
 
1121
 
cat6_stg_ldg_a6xx_offset:
1122
 
                    '+' '(' src offset ')' '<' '<' integer {
1123
 
                        assert($8 == 2);
 
1131
cat6_a6xx_global_address_pt3:
 
1132
                   '<' '<' integer offset '<' '<' integer {
 
1133
                        assert($7 == 2);
 
1134
                        new_src(0, IR3_REG_IMMED)->uim_val = $3 - 2;
 
1135
                        new_src(0, IR3_REG_IMMED)->uim_val = $4;
 
1136
                   }
 
1137
|                  '+' cat6_reg_or_immed
 
1138
 
 
1139
cat6_a6xx_global_address_pt2:
 
1140
                   '(' src offset ')' '<' '<' integer {
 
1141
                        assert($7 == 2);
1124
1142
                        new_src(0, IR3_REG_IMMED)->uim_val = 0;
1125
 
                        new_src(0, IR3_REG_IMMED)->uim_val = $4;
1126
 
                    }
1127
 
|                  '+' src '<' '<' integer offset '<' '<' integer {
1128
 
                        assert($9 == 2);
1129
 
                        new_src(0, IR3_REG_IMMED)->uim_val = $5 - 2;
1130
 
                        new_src(0, IR3_REG_IMMED)->uim_val = $6;
1131
 
                    }
 
1143
                        new_src(0, IR3_REG_IMMED)->uim_val = $3;
 
1144
                   }
 
1145
 
 
1146
|                  src cat6_a6xx_global_address_pt3
 
1147
 
 
1148
cat6_a6xx_global_address:
 
1149
                   src_reg_or_const '+' cat6_a6xx_global_address_pt2
1132
1150
 
1133
1151
cat6_load:         T_OP_LDG   { new_instr(OPC_LDG); }   cat6_type dst_reg ',' 'g' '[' src cat6_offset ']' ',' immediate
1134
 
|                  T_OP_LDG_A { new_instr(OPC_LDG_A); } cat6_type dst_reg ',' 'g' '[' src cat6_stg_ldg_a6xx_offset ']' ',' immediate
 
1152
|                  T_OP_LDG_A { new_instr(OPC_LDG_A); } cat6_type dst_reg ',' 'g' '[' cat6_a6xx_global_address ']' ',' immediate
1135
1153
|                  T_OP_LDP   { new_instr(OPC_LDP); }   cat6_type dst_reg ',' 'p' '[' src cat6_offset ']' ',' immediate
1136
1154
|                  T_OP_LDL   { new_instr(OPC_LDL); }   cat6_type dst_reg ',' 'l' '[' src cat6_offset ']' ',' immediate
1137
1155
|                  T_OP_LDLW  { new_instr(OPC_LDLW); }  cat6_type dst_reg ',' 'l' '[' src cat6_offset ']' ',' immediate
1140
1158
                   } ',' immediate
1141
1159
 
1142
1160
cat6_store:        T_OP_STG   { new_instr(OPC_STG); dummy_dst(); }   cat6_type 'g' '[' src cat6_imm_offset ']' ',' src ',' immediate
1143
 
|                  T_OP_STG_A { new_instr(OPC_STG_A); dummy_dst(); } cat6_type 'g' '[' src cat6_stg_ldg_a6xx_offset ']' ',' src ',' immediate
 
1161
|                  T_OP_STG_A { new_instr(OPC_STG_A); dummy_dst(); } cat6_type 'g' '[' cat6_a6xx_global_address ']' ',' src ',' immediate
1144
1162
|                  T_OP_STP  { new_instr(OPC_STP); dummy_dst(); }  cat6_type 'p' '[' src cat6_dst_offset ']' ',' src ',' immediate
1145
1163
|                  T_OP_STL  { new_instr(OPC_STL); dummy_dst(); }  cat6_type 'l' '[' src cat6_dst_offset ']' ',' src ',' immediate
1146
1164
|                  T_OP_STLW { new_instr(OPC_STLW); dummy_dst(); } cat6_type 'l' '[' src cat6_dst_offset ']' ',' src ',' immediate
1260
1278
|                 T_A1 { new_src(0, IR3_REG_IMMED)->iim_val = 0; instr->flags |= IR3_INSTR_A1EN; }
1261
1279
|                 T_A1 '+' integer { new_src(0, IR3_REG_IMMED)->iim_val = $3; instr->flags |= IR3_INSTR_A1EN; }
1262
1280
 
1263
 
cat6_stc: T_OP_STC { new_instr(OPC_STC); } cat6_type 'c' '[' stc_dst ']' ',' src_reg ',' cat6_immed
 
1281
cat6_stc:
 
1282
              T_OP_STC  { new_instr(OPC_STC); }  cat6_type 'c' '[' stc_dst ']' ',' src_reg ',' cat6_immed
 
1283
|             T_OP_STSC { new_instr(OPC_STSC); } cat6_type 'c' '[' stc_dst ']' ',' immediate ',' cat6_immed
1264
1284
 
1265
1285
cat6_todo:         T_OP_G2L                 { new_instr(OPC_G2L); }
1266
1286
|                  T_OP_L2G                 { new_instr(OPC_L2G); }
1294
1314
|                  T_OP_DCINV              { new_instr(OPC_DCINV); }
1295
1315
|                  T_OP_DCFLU              { new_instr(OPC_DCFLU); }
1296
1316
 
 
1317
cat7_alias_src:    src_reg_or_const
 
1318
|                  immediate_cat1
 
1319
 
 
1320
cat7_alias_scope: T_MOD_TEX     { instr->cat7.alias_scope = ALIAS_TEX; }
 
1321
|                 T_MOD_MEM     { instr->cat7.alias_scope = ALIAS_MEM; }
 
1322
|                 T_MOD_RT      { instr->cat7.alias_scope = ALIAS_RT; }
 
1323
 
1297
1324
cat7_instr:        cat7_barrier
1298
1325
|                  cat7_data_cache
1299
1326
|                  T_OP_SLEEP              { new_instr(OPC_SLEEP); }
1300
1327
|                  T_OP_ICINV              { new_instr(OPC_ICINV); }
 
1328
|                  T_OP_LOCK               { new_instr(OPC_LOCK); }
 
1329
|                  T_OP_UNLOCK             { new_instr(OPC_UNLOCK); }
 
1330
|                  T_OP_ALIAS {
 
1331
                       /* TODO: handle T_INSTR_TYPE */
 
1332
                       new_instr(OPC_ALIAS);
 
1333
                   } '.' cat7_alias_scope '.' T_INSTR_TYPE '.' integer dst_reg ',' cat7_alias_src {
 
1334
                       new_src(0, IR3_REG_IMMED)->uim_val = $8;
 
1335
                   }
1301
1336
 
1302
1337
raw_instr: T_RAW   {new_instr(OPC_META_RAW)->raw.value = $1;}
1303
1338
 
1330
1365
|                  T_NEG          { rflags.flags |= IR3_REG_NEGATE; }
1331
1366
|                  T_ABS          { rflags.flags |= IR3_REG_ABS; }
1332
1367
|                  T_R            { rflags.flags |= IR3_REG_R; }
 
1368
|                  T_LAST         { rflags.flags |= IR3_REG_LAST_USE; }
1333
1369
 
1334
1370
src_reg_flags:     src_reg_flag
1335
1371
|                  src_reg_flag src_reg_flags