On 3/25/25 05:39, Philippe Mathieu-Daudé wrote:
@@ -2750,12 +2752,16 @@ static bool trans_SETHI(DisasContext *dc, arg_SETHI *a)
static bool do_tcc(DisasContext *dc, int cond, int cc,
int rs1, bool imm, int rs2_or_imm)
{
- int mask = ((dc->def->features & CPU_FEATURE_HYPV) && supervisor(dc)
- ? UA2005_HTRAP_MASK : V8_TRAP_MASK);
+ int mask = 0;
DisasCompare cmp;
TCGLabel *lab;
TCGv_i32 trap;
+#ifdef TARGET_SPARC64
+ mask = ((dc->def->features & CPU_FEATURE_HYPV) && supervisor(dc))
+ ? UA2005_HTRAP_MASK : V8_TRAP_MASK;
+#endif
This is wrong. The conversion could have been
int mask = V8_TRAP_MASK;
#ifdef
if (HYPV && super) {
mask = UA2005_HTRAP_MASK;
}
#endif
but that's an excellent reason not to have the ifdef at all.
If you want to hide the features from sparc32, so they don't show up on the command-line,
fine. But I think you want to introduce
#define CPU_FEATURE_HYPV 0
etc for sparc32 to automatically fail such tests as these without further
modification.
r~