diff --git a/include/QF/pr_comp.h b/include/QF/pr_comp.h index 8d56e75e7..161bdf0ac 100644 --- a/include/QF/pr_comp.h +++ b/include/QF/pr_comp.h @@ -257,6 +257,7 @@ typedef enum { OP_MOVEI, OP_MOVEP, + OP_MOVEPI, OP_SHL_U, OP_SHR_U, diff --git a/libs/gamecode/engine/pr_exec.c b/libs/gamecode/engine/pr_exec.c index 6a09bf73b..e30876802 100644 --- a/libs/gamecode/engine/pr_exec.c +++ b/libs/gamecode/engine/pr_exec.c @@ -1055,6 +1055,15 @@ op_call: pr->pr_globals + OPA.integer_var, OPB.uinteger_var * 4); break; + case OP_MOVEPI: + if (pr_boundscheck->int_val) { + PR_BoundsCheckSize (pr, OPC.integer_var, st->b); + PR_BoundsCheckSize (pr, OPA.integer_var, st->b); + } + memmove (pr->pr_globals + OPC.integer_var, + pr->pr_globals + OPA.integer_var, + st->b * 4); + break; // LordHavoc: to be enabled when Progs version 7 (or whatever it will be numbered) is finalized /* diff --git a/libs/gamecode/engine/pr_opcode.c b/libs/gamecode/engine/pr_opcode.c index 52a92822f..2ce63a991 100644 --- a/libs/gamecode/engine/pr_opcode.c +++ b/libs/gamecode/engine/pr_opcode.c @@ -1030,6 +1030,11 @@ VISIBLE opcode_t pr_opcodes[] = { PROG_VERSION, "%Ga, %Gb, %Gc", }, + {"", "movepi", OP_MOVEPI, true, + ev_pointer, ev_short, ev_pointer, + PROG_VERSION, + "%Ga, %Gb, %Gc", + }, // end of table {0},