From bf7948c70d106145008269acfb6aeb4a8d2bf7c1 Mon Sep 17 00:00:00 2001 From: espes Date: Mon, 13 Jul 2015 01:21:07 +1000 Subject: [PATCH] maybe fix ARL instruction --- hw/xbox/nv2a_vsh.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/hw/xbox/nv2a_vsh.c b/hw/xbox/nv2a_vsh.c index 9605acaf0c..7da6f785c1 100644 --- a/hw/xbox/nv2a_vsh.c +++ b/hw/xbox/nv2a_vsh.c @@ -381,8 +381,8 @@ static QString* decode_opcode_input(const uint32_t *shader_token, static QString* decode_opcode(const uint32_t *shader_token, VshOutputMux out_mux, uint32_t mask, - const char* opcode, - QString *inputs) + const char *opcode, + const char *inputs) { QString *ret = qstring_new(); int reg_num = vsh_get_field(shader_token, FLD_OUT_R); @@ -399,21 +399,11 @@ static QString* decode_opcode(const uint32_t *shader_token, reg_num = 1; } - if (mask > 0) { - if (strcmp(opcode, mac_opcode[MAC_ARL]) == 0) { - qstring_append(ret, " ARL(a0"); - qstring_append(ret, qstring_get_str(inputs)); - qstring_append(ret, ";\n"); - } else { - qstring_append(ret, " "); - qstring_append(ret, opcode); - qstring_append(ret, "("); - qstring_append(ret, "R"); - qstring_append_int(ret, reg_num); - qstring_append(ret, mask_str[mask]); - qstring_append(ret, qstring_get_str(inputs)); - 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); } /* See if we must add a muxed opcode too: */ @@ -439,7 +429,7 @@ static QString* decode_opcode(const uint32_t *shader_token, qstring_append(ret, mask_str[ vsh_get_field(shader_token, FLD_OUT_O_MASK)]); - qstring_append(ret, qstring_get_str(inputs)); + qstring_append(ret, inputs); qstring_append(ret, ");\n"); } @@ -493,7 +483,7 @@ static QString* decode_token(const uint32_t *shader_token) OMUX_MAC, vsh_get_field(shader_token, FLD_OUT_MAC_MASK), mac_opcode[mac], - inputs_mac); + qstring_get_str(inputs_mac)); QDECREF(inputs_mac); } else { ret = qstring_new(); @@ -511,7 +501,7 @@ static QString* decode_token(const uint32_t *shader_token) OMUX_ILU, vsh_get_field(shader_token, FLD_OUT_ILU_MASK), ilu_opcode[ilu], - inputs_c); + qstring_get_str(inputs_c)); qstring_append(ret, qstring_get_str(ilu_op));