1119
1129
cat6_immed: integer { instr->cat6.iim_val = $1; }
1121
cat6_stg_ldg_a6xx_offset:
1122
'+' '(' src offset ')' '<' '<' integer {
1131
cat6_a6xx_global_address_pt3:
1132
'<' '<' integer offset '<' '<' integer {
1134
new_src(0, IR3_REG_IMMED)->uim_val = $3 - 2;
1135
new_src(0, IR3_REG_IMMED)->uim_val = $4;
1137
| '+' cat6_reg_or_immed
1139
cat6_a6xx_global_address_pt2:
1140
'(' src offset ')' '<' '<' integer {
1124
1142
new_src(0, IR3_REG_IMMED)->uim_val = 0;
1125
new_src(0, IR3_REG_IMMED)->uim_val = $4;
1127
| '+' src '<' '<' integer offset '<' '<' integer {
1129
new_src(0, IR3_REG_IMMED)->uim_val = $5 - 2;
1130
new_src(0, IR3_REG_IMMED)->uim_val = $6;
1143
new_src(0, IR3_REG_IMMED)->uim_val = $3;
1146
| src cat6_a6xx_global_address_pt3
1148
cat6_a6xx_global_address:
1149
src_reg_or_const '+' cat6_a6xx_global_address_pt2
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
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; }
1263
cat6_stc: T_OP_STC { new_instr(OPC_STC); } cat6_type 'c' '[' stc_dst ']' ',' src_reg ',' cat6_immed
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
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); }
1317
cat7_alias_src: src_reg_or_const
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; }
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); }
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;
1302
1337
raw_instr: T_RAW {new_instr(OPC_META_RAW)->raw.value = $1;}
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; }
1334
1370
src_reg_flags: src_reg_flag
1335
1371
| src_reg_flag src_reg_flags