fail_instr(state, "LDUNIF after a LDVARY");
}
- /* GFXH-1633 */
- bool last_reads_ldunif = (state->last && (state->last->sig.ldunif ||
- state->last->sig.ldunifrf));
- bool last_reads_ldunifa = (state->last && (state->last->sig.ldunifa ||
- state->last->sig.ldunifarf));
- bool reads_ldunif = inst->sig.ldunif || inst->sig.ldunifrf;
- bool reads_ldunifa = inst->sig.ldunifa || inst->sig.ldunifarf;
- if ((last_reads_ldunif && reads_ldunifa) ||
- (last_reads_ldunifa && reads_ldunif)) {
- fail_instr(state,
- "LDUNIF and LDUNIFA can't be next to each other");
+ /* GFXH-1633 (fixed since V3D 4.2.14, which is Rpi4)
+ *
+ * FIXME: This would not check correctly for V3D 4.2 versions lower
+ * than V3D 4.2.14, but that is not a real issue because the simulator
+ * will still catch this, and we are not really targetting any such
+ * versions anyway.
+ */
+ if (state->c->devinfo->ver < 42) {
+ bool last_reads_ldunif = (state->last && (state->last->sig.ldunif ||
+ state->last->sig.ldunifrf));
+ bool last_reads_ldunifa = (state->last && (state->last->sig.ldunifa ||
+ state->last->sig.ldunifarf));
+ bool reads_ldunif = inst->sig.ldunif || inst->sig.ldunifrf;
+ bool reads_ldunifa = inst->sig.ldunifa || inst->sig.ldunifarf;
+ if ((last_reads_ldunif && reads_ldunifa) ||
+ (last_reads_ldunifa && reads_ldunif)) {
+ fail_instr(state,
+ "LDUNIF and LDUNIFA can't be next to each other");
+ }
}
int tmu_writes = 0;