From 236cbc4e836f1006cf266447c22671e5087eeae6 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Mon, 6 Jun 2022 22:47:53 +0100 Subject: [PATCH] VarAction2: Optimise SAR same as SHR on unsigned inputs --- src/newgrf.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/newgrf.cpp b/src/newgrf.cpp index 6e98cbf50d..58298c9c83 100644 --- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -6229,7 +6229,9 @@ static void OptimiseVarAction2Adjust(VarAction2OptimiseState &state, const GrfSp } break; case DSGA_OP_SHR: - if ((prev_inference & VA2AIF_PREV_MASK_ADJUST) && adjust.variable == 0x1A && adjust.shift_num == 0 && group->adjusts.size() >= 2) { + case DSGA_OP_SAR: + if ((adjust.operation == DSGA_OP_SAR || (prev_inference & VA2AIF_SIGNED_NON_NEGATIVE)) && + ((prev_inference & VA2AIF_PREV_MASK_ADJUST) && adjust.variable == 0x1A && adjust.shift_num == 0 && group->adjusts.size() >= 2)) { /* Propagate shift right into immediately prior variable read */ DeterministicSpriteGroupAdjust &prev = group->adjusts[group->adjusts.size() - 2]; if (prev.shift_num + adjust.and_mask < 32) {