diff --git a/libs/gamecode/opcodes.py b/libs/gamecode/opcodes.py index 2c4410eb7..319859f1d 100644 --- a/libs/gamecode/opcodes.py +++ b/libs/gamecode/opcodes.py @@ -114,8 +114,8 @@ branch_formats = { "types": "ev_void, ev_void, ev_integer", "args": { "op_mode": "ABCD", - "op_cond": ["ifnot", "ifb", "ifa", "jump", - "if", "ifae", "ifbe", "call"], + "op_cond": ["ifz", "ifb", "ifa", "jump", + "ifnz", "ifae", "ifbe", "call"], "branch_fmt": branch_fmt, "cond_fmt": ["%Gc ", "%Gc ", "%Gc ", "", "%Gc ", "%Gc ", "%Gc ", ""], "cond_widths": [ diff --git a/libs/gamecode/pr_exec.c b/libs/gamecode/pr_exec.c index d5be92743..3d179c869 100644 --- a/libs/gamecode/pr_exec.c +++ b/libs/gamecode/pr_exec.c @@ -2819,20 +2819,29 @@ pr_exec_ruamoko (progs_t *pr, int exitdepth) MM(ivec4) = STK(ivec4); break; // 0 0100 - case OP_IFNOT_A: - case OP_IFNOT_B: - case OP_IFNOT_C: - case OP_IFNOT_D: + case OP_IFZ_A: + case OP_IFZ_B: + case OP_IFZ_C: + case OP_IFZ_D: if (!OPC(int)) { pr->pr_xstatement = pr_jump_mode (pr, st); st = pr->pr_statements + pr->pr_xstatement; } break; - case OP_IF_A: - case OP_IF_B: - case OP_IF_C: - case OP_IF_D: - if (OPC(int)) { + case OP_IFB_A: + case OP_IFB_B: + case OP_IFB_C: + case OP_IFB_D: + if (OPC(int) < 0) { + pr->pr_xstatement = pr_jump_mode (pr, st); + st = pr->pr_statements + pr->pr_xstatement; + } + break; + case OP_IFA_A: + case OP_IFA_B: + case OP_IFA_C: + case OP_IFA_D: + if (OPC(int) > 0) { pr->pr_xstatement = pr_jump_mode (pr, st); st = pr->pr_statements + pr->pr_xstatement; } @@ -2844,6 +2853,33 @@ pr_exec_ruamoko (progs_t *pr, int exitdepth) pr->pr_xstatement = pr_jump_mode (pr, st); st = pr->pr_statements + pr->pr_xstatement; break; + case OP_IFNZ_A: + case OP_IFNZ_B: + case OP_IFNZ_C: + case OP_IFNZ_D: + if (OPC(int)) { + pr->pr_xstatement = pr_jump_mode (pr, st); + st = pr->pr_statements + pr->pr_xstatement; + } + break; + case OP_IFAE_A: + case OP_IFAE_B: + case OP_IFAE_C: + case OP_IFAE_D: + if (OPC(int) >= 0) { + pr->pr_xstatement = pr_jump_mode (pr, st); + st = pr->pr_statements + pr->pr_xstatement; + } + break; + case OP_IFBE_A: + case OP_IFBE_B: + case OP_IFBE_C: + case OP_IFBE_D: + if (OPC(int) <= 0) { + pr->pr_xstatement = pr_jump_mode (pr, st); + st = pr->pr_statements + pr->pr_xstatement; + } + break; case OP_CALL_A: case OP_CALL_B: case OP_CALL_C: @@ -2922,42 +2958,6 @@ pr_exec_ruamoko (progs_t *pr, int exitdepth) } break; // 0 0110 - case OP_IFA_A: - case OP_IFA_B: - case OP_IFA_C: - case OP_IFA_D: - if (OPC(int) > 0) { - pr->pr_xstatement = pr_jump_mode (pr, st); - st = pr->pr_statements + pr->pr_xstatement; - } - break; - case OP_IFBE_A: - case OP_IFBE_B: - case OP_IFBE_C: - case OP_IFBE_D: - if (OPC(int) <= 0) { - pr->pr_xstatement = pr_jump_mode (pr, st); - st = pr->pr_statements + pr->pr_xstatement; - } - break; - case OP_IFB_A: - case OP_IFB_B: - case OP_IFB_C: - case OP_IFB_D: - if (OPC(int) < 0) { - pr->pr_xstatement = pr_jump_mode (pr, st); - st = pr->pr_statements + pr->pr_xstatement; - } - break; - case OP_IFAE_A: - case OP_IFAE_B: - case OP_IFAE_C: - case OP_IFAE_D: - if (OPC(int) >= 0) { - pr->pr_xstatement = pr_jump_mode (pr, st); - st = pr->pr_statements + pr->pr_xstatement; - } - break; // 0 0111 case OP_CROSS_F: { diff --git a/libs/gamecode/test/test-double.c b/libs/gamecode/test/test-double.c index 230ba69ee..8e11359ee 100644 --- a/libs/gamecode/test/test-double.c +++ b/libs/gamecode/test/test-double.c @@ -129,7 +129,7 @@ static dstatement_t double_cossin_statements[] = { { OP(0, 0, 0, OP_DIV_D_2), 40, 16, 40 }, // xn /= f { OP(0, 0, 0, OP_ADD_D_2), 16, 24, 16 }, // f += inc { OP(0, 0, 0, OP_LT_D_1), 16, 30, 46 }, // f0 < fmax - { OP(0, 0, 0, OP_IF_A), -7, 0, 46 }, // f0 < fmax + { OP(0, 0, 0, OP_IFNZ_A), -7, 0, 46 }, // f0 < fmax }; test_t tests[] = { diff --git a/libs/gamecode/test/test-float.c b/libs/gamecode/test/test-float.c index d974931bb..8f5794c3d 100644 --- a/libs/gamecode/test/test-float.c +++ b/libs/gamecode/test/test-float.c @@ -129,7 +129,7 @@ static dstatement_t float_cossin_statements[] = { { OP(0, 0, 0, OP_DIV_F_2), 20, 8, 20 }, // xn /= f { OP(0, 0, 0, OP_ADD_F_2), 8, 12, 8 }, // f += inc { OP(0, 0, 0, OP_LT_F_1), 8, 15, 23 }, // f0 < fmax - { OP(0, 0, 0, OP_IF_A), -7, 0, 23 }, // f0 < fmax + { OP(0, 0, 0, OP_IFNZ_A), -7, 0, 23 }, // f0 < fmax }; test_t tests[] = {