diff --git a/hw/xbox/nv2a/vsh.c b/hw/xbox/nv2a/vsh.c
index 8b527ad8ba..8c52f7d3cc 100644
--- a/hw/xbox/nv2a/vsh.c
+++ b/hw/xbox/nv2a/vsh.c
@@ -405,13 +405,6 @@ static QString* decode_opcode(const uint32_t *shader_token,
         reg_num = 1;
     }
 
-    if (strcmp(opcode, mac_opcode[MAC_ARL]) == 0) {
-        qstring_append_fmt(ret, "  ARL(A0%s);\n", inputs);
-    } else if (mask > 0) {
-        qstring_append_fmt(ret, "  %s(R%d%s%s);\n",
-                           opcode, reg_num, mask_str[mask], inputs);
-    }
-
     /* See if we must add a muxed opcode too: */
     if (vsh_get_field(shader_token, FLD_OUT_MUX) == out_mux
         /* Only if it's not masked away: */
@@ -439,6 +432,13 @@ static QString* decode_opcode(const uint32_t *shader_token,
         qstring_append(ret, ");\n");
     }
 
+    if (strcmp(opcode, mac_opcode[MAC_ARL]) == 0) {
+        qstring_append_fmt(ret, "  ARL(A0%s);\n", inputs);
+    } else if (mask > 0) {
+        qstring_append_fmt(ret, "  %s(R%d%s%s);\n",
+                           opcode, reg_num, mask_str[mask], inputs);
+    }
+
     return ret;
 }