[gamecode] Rename the old opcodes

To reflect their basis on v6 progs instructions, they sport the v6p tag
where the p is for "plus" due to the QuakeForge extensions.
This commit is contained in:
Bill Currie 2022-01-02 21:06:14 +09:00
parent bc0a09f452
commit 0c17c6dc24
7 changed files with 1004 additions and 1003 deletions

View file

@ -89,355 +89,355 @@ extern const char * const pr_type_name[ev_type_count];
typedef enum {
OP_DONE,
OP_MUL_F,
OP_MUL_V,
OP_MUL_FV,
OP_MUL_VF,
OP_DIV_F,
OP_ADD_F,
OP_ADD_V,
OP_SUB_F,
OP_SUB_V,
OP_DONE_v6p,
OP_MUL_F_v6p,
OP_MUL_V_v6p,
OP_MUL_FV_v6p,
OP_MUL_VF_v6p,
OP_DIV_F_v6p,
OP_ADD_F_v6p,
OP_ADD_V_v6p,
OP_SUB_F_v6p,
OP_SUB_V_v6p,
OP_EQ_F,
OP_EQ_V,
OP_EQ_S,
OP_EQ_E,
OP_EQ_FN,
OP_EQ_F_v6p,
OP_EQ_V_v6p,
OP_EQ_S_v6p,
OP_EQ_E_v6p,
OP_EQ_FN_v6p,
OP_NE_F,
OP_NE_V,
OP_NE_S,
OP_NE_E,
OP_NE_FN,
OP_NE_F_v6p,
OP_NE_V_v6p,
OP_NE_S_v6p,
OP_NE_E_v6p,
OP_NE_FN_v6p,
OP_LE_F,
OP_GE_F,
OP_LT_F,
OP_GT_F,
OP_LE_F_v6p,
OP_GE_F_v6p,
OP_LT_F_v6p,
OP_GT_F_v6p,
OP_LOAD_F,
OP_LOAD_V,
OP_LOAD_S,
OP_LOAD_ENT,
OP_LOAD_FLD,
OP_LOAD_FN,
OP_LOAD_F_v6p,
OP_LOAD_V_v6p,
OP_LOAD_S_v6p,
OP_LOAD_ENT_v6p,
OP_LOAD_FLD_v6p,
OP_LOAD_FN_v6p,
OP_ADDRESS,
OP_ADDRESS_v6p,
OP_STORE_F,
OP_STORE_V,
OP_STORE_S,
OP_STORE_ENT,
OP_STORE_FLD,
OP_STORE_FN,
OP_STORE_F_v6p,
OP_STORE_V_v6p,
OP_STORE_S_v6p,
OP_STORE_ENT_v6p,
OP_STORE_FLD_v6p,
OP_STORE_FN_v6p,
OP_STOREP_F,
OP_STOREP_V,
OP_STOREP_S,
OP_STOREP_ENT,
OP_STOREP_FLD,
OP_STOREP_FN,
OP_STOREP_F_v6p,
OP_STOREP_V_v6p,
OP_STOREP_S_v6p,
OP_STOREP_ENT_v6p,
OP_STOREP_FLD_v6p,
OP_STOREP_FN_v6p,
OP_RETURN,
OP_NOT_F,
OP_NOT_V,
OP_NOT_S,
OP_NOT_ENT,
OP_NOT_FN,
OP_IF,
OP_IFNOT,
OP_CALL0,
OP_CALL1,
OP_CALL2,
OP_CALL3,
OP_CALL4,
OP_CALL5,
OP_CALL6,
OP_CALL7,
OP_CALL8,
OP_STATE,
OP_GOTO,
OP_AND,
OP_OR,
OP_RETURN_v6p,
OP_NOT_F_v6p,
OP_NOT_V_v6p,
OP_NOT_S_v6p,
OP_NOT_ENT_v6p,
OP_NOT_FN_v6p,
OP_IF_v6p,
OP_IFNOT_v6p,
OP_CALL0_v6p,
OP_CALL1_v6p,
OP_CALL2_v6p,
OP_CALL3_v6p,
OP_CALL4_v6p,
OP_CALL5_v6p,
OP_CALL6_v6p,
OP_CALL7_v6p,
OP_CALL8_v6p,
OP_STATE_v6p,
OP_GOTO_v6p,
OP_AND_v6p,
OP_OR_v6p,
OP_BITAND,
OP_BITOR, // end of v6 opcodes
OP_BITAND_v6p,
OP_BITOR_v6p, // end of v6 opcodes
OP_ADD_S,
OP_LE_S,
OP_GE_S,
OP_LT_S,
OP_GT_S,
OP_ADD_S_v6p,
OP_LE_S_v6p,
OP_GE_S_v6p,
OP_LT_S_v6p,
OP_GT_S_v6p,
OP_ADD_I,
OP_SUB_I,
OP_MUL_I,
OP_DIV_I,
OP_BITAND_I,
OP_BITOR_I,
OP_GE_I,
OP_LE_I,
OP_GT_I,
OP_LT_I,
OP_AND_I,
OP_OR_I,
OP_NOT_I,
OP_EQ_I,
OP_NE_I,
OP_STORE_I,
OP_STOREP_I,
OP_LOAD_I,
OP_ADD_I_v6p,
OP_SUB_I_v6p,
OP_MUL_I_v6p,
OP_DIV_I_v6p,
OP_BITAND_I_v6p,
OP_BITOR_I_v6p,
OP_GE_I_v6p,
OP_LE_I_v6p,
OP_GT_I_v6p,
OP_LT_I_v6p,
OP_AND_I_v6p,
OP_OR_I_v6p,
OP_NOT_I_v6p,
OP_EQ_I_v6p,
OP_NE_I_v6p,
OP_STORE_I_v6p,
OP_STOREP_I_v6p,
OP_LOAD_I_v6p,
OP_CONV_IF,
OP_CONV_FI,
OP_CONV_IF_v6p,
OP_CONV_FI_v6p,
OP_BITXOR_F,
OP_BITXOR_I,
OP_BITNOT_F,
OP_BITNOT_I,
OP_BITXOR_F_v6p,
OP_BITXOR_I_v6p,
OP_BITNOT_F_v6p,
OP_BITNOT_I_v6p,
OP_SHL_F,
OP_SHR_F,
OP_SHL_I,
OP_SHR_I,
OP_SHL_F_v6p,
OP_SHR_F_v6p,
OP_SHL_I_v6p,
OP_SHR_I_v6p,
OP_REM_F,
OP_REM_I,
OP_REM_F_v6p,
OP_REM_I_v6p,
OP_LOADB_F,
OP_LOADB_V,
OP_LOADB_S,
OP_LOADB_ENT,
OP_LOADB_FLD,
OP_LOADB_FN,
OP_LOADB_I,
OP_LOADB_P,
OP_LOADB_F_v6p,
OP_LOADB_V_v6p,
OP_LOADB_S_v6p,
OP_LOADB_ENT_v6p,
OP_LOADB_FLD_v6p,
OP_LOADB_FN_v6p,
OP_LOADB_I_v6p,
OP_LOADB_P_v6p,
OP_STOREB_F,
OP_STOREB_V,
OP_STOREB_S,
OP_STOREB_ENT,
OP_STOREB_FLD,
OP_STOREB_FN,
OP_STOREB_I,
OP_STOREB_P,
OP_STOREB_F_v6p,
OP_STOREB_V_v6p,
OP_STOREB_S_v6p,
OP_STOREB_ENT_v6p,
OP_STOREB_FLD_v6p,
OP_STOREB_FN_v6p,
OP_STOREB_I_v6p,
OP_STOREB_P_v6p,
OP_ADDRESS_VOID,
OP_ADDRESS_F,
OP_ADDRESS_V,
OP_ADDRESS_S,
OP_ADDRESS_ENT,
OP_ADDRESS_FLD,
OP_ADDRESS_FN,
OP_ADDRESS_I,
OP_ADDRESS_P,
OP_ADDRESS_VOID_v6p,
OP_ADDRESS_F_v6p,
OP_ADDRESS_V_v6p,
OP_ADDRESS_S_v6p,
OP_ADDRESS_ENT_v6p,
OP_ADDRESS_FLD_v6p,
OP_ADDRESS_FN_v6p,
OP_ADDRESS_I_v6p,
OP_ADDRESS_P_v6p,
OP_LEA,
OP_LEA_v6p,
OP_IFBE,
OP_IFB,
OP_IFAE,
OP_IFA,
OP_IFBE_v6p,
OP_IFB_v6p,
OP_IFAE_v6p,
OP_IFA_v6p,
OP_JUMP,
OP_JUMPB,
OP_JUMP_v6p,
OP_JUMPB_v6p,
OP_LT_U,
OP_GT_U,
OP_LE_U,
OP_GE_U,
OP_LT_U_v6p,
OP_GT_U_v6p,
OP_LE_U_v6p,
OP_GE_U_v6p,
OP_LOADBI_F,
OP_LOADBI_V,
OP_LOADBI_S,
OP_LOADBI_ENT,
OP_LOADBI_FLD,
OP_LOADBI_FN,
OP_LOADBI_I,
OP_LOADBI_P,
OP_LOADBI_F_v6p,
OP_LOADBI_V_v6p,
OP_LOADBI_S_v6p,
OP_LOADBI_ENT_v6p,
OP_LOADBI_FLD_v6p,
OP_LOADBI_FN_v6p,
OP_LOADBI_I_v6p,
OP_LOADBI_P_v6p,
OP_STOREBI_F,
OP_STOREBI_V,
OP_STOREBI_S,
OP_STOREBI_ENT,
OP_STOREBI_FLD,
OP_STOREBI_FN,
OP_STOREBI_I,
OP_STOREBI_P,
OP_STOREBI_F_v6p,
OP_STOREBI_V_v6p,
OP_STOREBI_S_v6p,
OP_STOREBI_ENT_v6p,
OP_STOREBI_FLD_v6p,
OP_STOREBI_FN_v6p,
OP_STOREBI_I_v6p,
OP_STOREBI_P_v6p,
OP_LEAI,
OP_LEAI_v6p,
OP_LOAD_P,
OP_STORE_P,
OP_STOREP_P,
OP_NOT_P,
OP_EQ_P,
OP_NE_P,
OP_LE_P,
OP_GE_P,
OP_LT_P,
OP_GT_P,
OP_LOAD_P_v6p,
OP_STORE_P_v6p,
OP_STOREP_P_v6p,
OP_NOT_P_v6p,
OP_EQ_P_v6p,
OP_NE_P_v6p,
OP_LE_P_v6p,
OP_GE_P_v6p,
OP_LT_P_v6p,
OP_GT_P_v6p,
OP_MOVEI,
OP_MOVEP,
OP_MOVEPI,
OP_MOVEI_v6p,
OP_MOVEP_v6p,
OP_MOVEPI_v6p,
OP_SHR_U,
OP_SHR_U_v6p,
OP_STATE_F,
OP_STATE_F_v6p,
OP_ADD_Q,
OP_SUB_Q,
OP_MUL_Q,
OP_MUL_QF,
OP_MUL_FQ,
OP_MUL_QV,
OP_CONJ_Q,
OP_NOT_Q,
OP_EQ_Q,
OP_NE_Q,
OP_STORE_Q,
OP_STOREB_Q,
OP_STOREBI_Q,
OP_STOREP_Q,
OP_LOAD_Q,
OP_LOADB_Q,
OP_LOADBI_Q,
OP_ADDRESS_Q,
OP_ADD_Q_v6p,
OP_SUB_Q_v6p,
OP_MUL_Q_v6p,
OP_MUL_QF_v6p,
OP_MUL_FQ_v6p,
OP_MUL_QV_v6p,
OP_CONJ_Q_v6p,
OP_NOT_Q_v6p,
OP_EQ_Q_v6p,
OP_NE_Q_v6p,
OP_STORE_Q_v6p,
OP_STOREB_Q_v6p,
OP_STOREBI_Q_v6p,
OP_STOREP_Q_v6p,
OP_LOAD_Q_v6p,
OP_LOADB_Q_v6p,
OP_LOADBI_Q_v6p,
OP_ADDRESS_Q_v6p,
OP_RCALL0,
OP_RCALL1,
OP_RCALL2,
OP_RCALL3,
OP_RCALL4,
OP_RCALL5,
OP_RCALL6,
OP_RCALL7,
OP_RCALL8,
OP_RCALL0_v6p,
OP_RCALL1_v6p,
OP_RCALL2_v6p,
OP_RCALL3_v6p,
OP_RCALL4_v6p,
OP_RCALL5_v6p,
OP_RCALL6_v6p,
OP_RCALL7_v6p,
OP_RCALL8_v6p,
OP_RETURN_V,
OP_RETURN_V_v6p,
OP_PUSH_S,
OP_PUSH_F,
OP_PUSH_V,
OP_PUSH_ENT,
OP_PUSH_FLD,
OP_PUSH_FN,
OP_PUSH_P,
OP_PUSH_Q,
OP_PUSH_I,
OP_PUSH_D,
OP_PUSH_S_v6p,
OP_PUSH_F_v6p,
OP_PUSH_V_v6p,
OP_PUSH_ENT_v6p,
OP_PUSH_FLD_v6p,
OP_PUSH_FN_v6p,
OP_PUSH_P_v6p,
OP_PUSH_Q_v6p,
OP_PUSH_I_v6p,
OP_PUSH_D_v6p,
OP_PUSHB_S,
OP_PUSHB_F,
OP_PUSHB_V,
OP_PUSHB_ENT,
OP_PUSHB_FLD,
OP_PUSHB_FN,
OP_PUSHB_P,
OP_PUSHB_Q,
OP_PUSHB_I,
OP_PUSHB_D,
OP_PUSHB_S_v6p,
OP_PUSHB_F_v6p,
OP_PUSHB_V_v6p,
OP_PUSHB_ENT_v6p,
OP_PUSHB_FLD_v6p,
OP_PUSHB_FN_v6p,
OP_PUSHB_P_v6p,
OP_PUSHB_Q_v6p,
OP_PUSHB_I_v6p,
OP_PUSHB_D_v6p,
OP_PUSHBI_S,
OP_PUSHBI_F,
OP_PUSHBI_V,
OP_PUSHBI_ENT,
OP_PUSHBI_FLD,
OP_PUSHBI_FN,
OP_PUSHBI_P,
OP_PUSHBI_Q,
OP_PUSHBI_I,
OP_PUSHBI_D,
OP_PUSHBI_S_v6p,
OP_PUSHBI_F_v6p,
OP_PUSHBI_V_v6p,
OP_PUSHBI_ENT_v6p,
OP_PUSHBI_FLD_v6p,
OP_PUSHBI_FN_v6p,
OP_PUSHBI_P_v6p,
OP_PUSHBI_Q_v6p,
OP_PUSHBI_I_v6p,
OP_PUSHBI_D_v6p,
OP_POP_S,
OP_POP_F,
OP_POP_V,
OP_POP_ENT,
OP_POP_FLD,
OP_POP_FN,
OP_POP_P,
OP_POP_Q,
OP_POP_I,
OP_POP_D,
OP_POP_S_v6p,
OP_POP_F_v6p,
OP_POP_V_v6p,
OP_POP_ENT_v6p,
OP_POP_FLD_v6p,
OP_POP_FN_v6p,
OP_POP_P_v6p,
OP_POP_Q_v6p,
OP_POP_I_v6p,
OP_POP_D_v6p,
OP_POPB_S,
OP_POPB_F,
OP_POPB_V,
OP_POPB_ENT,
OP_POPB_FLD,
OP_POPB_FN,
OP_POPB_P,
OP_POPB_Q,
OP_POPB_I,
OP_POPB_D,
OP_POPB_S_v6p,
OP_POPB_F_v6p,
OP_POPB_V_v6p,
OP_POPB_ENT_v6p,
OP_POPB_FLD_v6p,
OP_POPB_FN_v6p,
OP_POPB_P_v6p,
OP_POPB_Q_v6p,
OP_POPB_I_v6p,
OP_POPB_D_v6p,
OP_POPBI_S,
OP_POPBI_F,
OP_POPBI_V,
OP_POPBI_ENT,
OP_POPBI_FLD,
OP_POPBI_FN,
OP_POPBI_P,
OP_POPBI_Q,
OP_POPBI_I,
OP_POPBI_D,
OP_POPBI_S_v6p,
OP_POPBI_F_v6p,
OP_POPBI_V_v6p,
OP_POPBI_ENT_v6p,
OP_POPBI_FLD_v6p,
OP_POPBI_FN_v6p,
OP_POPBI_P_v6p,
OP_POPBI_Q_v6p,
OP_POPBI_I_v6p,
OP_POPBI_D_v6p,
OP_ADD_D,
OP_SUB_D,
OP_MUL_D,
OP_MUL_QD,
OP_MUL_DQ,
OP_MUL_VD,
OP_MUL_DV,
OP_DIV_D,
OP_REM_D,
OP_GE_D,
OP_LE_D,
OP_GT_D,
OP_LT_D,
OP_NOT_D,
OP_EQ_D,
OP_NE_D,
OP_CONV_FD,
OP_CONV_DF,
OP_CONV_ID,
OP_CONV_DI,
OP_STORE_D,
OP_STOREB_D,
OP_STOREBI_D,
OP_STOREP_D,
OP_LOAD_D,
OP_LOADB_D,
OP_LOADBI_D,
OP_ADDRESS_D,
OP_ADD_D_v6p,
OP_SUB_D_v6p,
OP_MUL_D_v6p,
OP_MUL_QD_v6p,
OP_MUL_DQ_v6p,
OP_MUL_VD_v6p,
OP_MUL_DV_v6p,
OP_DIV_D_v6p,
OP_REM_D_v6p,
OP_GE_D_v6p,
OP_LE_D_v6p,
OP_GT_D_v6p,
OP_LT_D_v6p,
OP_NOT_D_v6p,
OP_EQ_D_v6p,
OP_NE_D_v6p,
OP_CONV_FD_v6p,
OP_CONV_DF_v6p,
OP_CONV_ID_v6p,
OP_CONV_DI_v6p,
OP_STORE_D_v6p,
OP_STOREB_D_v6p,
OP_STOREBI_D_v6p,
OP_STOREP_D_v6p,
OP_LOAD_D_v6p,
OP_LOADB_D_v6p,
OP_LOADBI_D_v6p,
OP_ADDRESS_D_v6p,
OP_MOD_I,
OP_MOD_F,
OP_MOD_D,
OP_MOD_I_v6p,
OP_MOD_F_v6p,
OP_MOD_D_v6p,
OP_MEMSETI,
OP_MEMSETP,
OP_MEMSETPI,
} pr_opcode_e;
OP_MEMSETI_v6p,
OP_MEMSETP_v6p,
OP_MEMSETPI_v6p,
} pr_opcode_v6p_e;
#define OP_BREAK 0x8000
typedef struct opcode_s {
typedef struct v6p_opcode_s {
const char *name;
const char *opname;
etype_t type_a, type_b, type_c;
unsigned int min_version;
const char *fmt;
} opcode_t;
} v6p_opcode_t;
extern const opcode_t pr_opcodes[];
const opcode_t *PR_Opcode (pr_short_t opcode) __attribute__((const));
extern const v6p_opcode_t pr_v6p_opcodes[];
const v6p_opcode_t *PR_v6p_Opcode (pr_ushort_t opcode) __attribute__((const));
void PR_Opcode_Init (void); // idempotent
typedef struct dstatement_s {
pr_opcode_e op:16;
pr_opcode_v6p_e op:16;
pr_ushort_t a,b,c;
} GCC_STRUCT dstatement_t;

View file

@ -1482,7 +1482,7 @@ PR_PrintStatement (progs_t *pr, dstatement_t *s, int contents)
int addr = s - pr->pr_statements;
int dump_code = contents & 2;
const char *fmt;
const opcode_t *op;
const v6p_opcode_t *op;
dfunction_t *call_func = 0;
pr_def_t *parm_def = 0;
pr_auxfunction_t *aux_func = 0;
@ -1508,7 +1508,7 @@ PR_PrintStatement (progs_t *pr, dstatement_t *s, int contents)
return;
}
op = PR_Opcode (s->op);
op = PR_v6p_Opcode (s->op);
if (!op) {
Sys_Printf ("%sUnknown instruction %d\n", res->line->str, s->op);
return;

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -31,27 +31,28 @@
#ifndef __opcodes_h
#define __opcodes_h
extern struct opcode_s *op_done;
extern struct opcode_s *op_return;
extern struct opcode_s *op_return_v;
extern struct opcode_s *op_if;
extern struct opcode_s *op_ifnot;
extern struct opcode_s *op_ifbe;
extern struct opcode_s *op_ifb;
extern struct opcode_s *op_ifae;
extern struct opcode_s *op_ifa;
extern struct opcode_s *op_state;
extern struct opcode_s *op_state_f;
extern struct opcode_s *op_goto;
extern struct opcode_s *op_jump;
extern struct opcode_s *op_jumpb;
extern struct v6p_opcode_s *op_done;
extern struct v6p_opcode_s *op_return;
extern struct v6p_opcode_s *op_return_v;
extern struct v6p_opcode_s *op_if;
extern struct v6p_opcode_s *op_ifnot;
extern struct v6p_opcode_s *op_ifbe;
extern struct v6p_opcode_s *op_ifb;
extern struct v6p_opcode_s *op_ifae;
extern struct v6p_opcode_s *op_ifa;
extern struct v6p_opcode_s *op_state;
extern struct v6p_opcode_s *op_state_f;
extern struct v6p_opcode_s *op_goto;
extern struct v6p_opcode_s *op_jump;
extern struct v6p_opcode_s *op_jumpb;
struct operand_s;
extern struct opcode_s *opcode_map;
extern struct v6p_opcode_s *opcode_map;
struct opcode_s *opcode_find (const char *name, struct operand_s *op_a,
struct operand_s *op_b, struct operand_s *op_c);
struct v6p_opcode_s *opcode_find (const char *name, struct operand_s *op_a,
struct operand_s *op_b,
struct operand_s *op_c);
void opcode_init (void);
#endif//__opcodes_h

View file

@ -185,7 +185,7 @@ emit_statement (statement_t *statement)
{
const char *opcode = statement->opcode;
def_t *def_a, *def_b, *def_c;
opcode_t *op;
v6p_opcode_t *op;
dstatement_t *s;
def_a = get_operand_def (statement->expr, statement->opa);

View file

@ -49,14 +49,14 @@
hashtab_t *opcode_type_table;
hashtab_t *opcode_void_table;
opcode_t *opcode_map;
v6p_opcode_t *opcode_map;
#define ROTL(x,n) ((((unsigned)(x))<<(n))|((unsigned)(x))>>(32-n))
static uintptr_t
get_hash (const void *_op, void *_tab)
{
opcode_t *op = (opcode_t *) _op;
v6p_opcode_t *op = (v6p_opcode_t *) _op;
uintptr_t hash;
hash = ROTL (~op->type_a, 8) + ROTL (~op->type_b, 16)
@ -67,8 +67,8 @@ get_hash (const void *_op, void *_tab)
static int
compare (const void *_opa, const void *_opb, void *unused)
{
opcode_t *opa = (opcode_t *) _opa;
opcode_t *opb = (opcode_t *) _opb;
v6p_opcode_t *opa = (v6p_opcode_t *) _opa;
v6p_opcode_t *opb = (v6p_opcode_t *) _opb;
int cmp;
cmp = (opa->type_a == opb->type_a)
@ -80,7 +80,7 @@ compare (const void *_opa, const void *_opb, void *unused)
static const char *
get_key (const void *op, void *unused)
{
return ((opcode_t *) op)->name;
return ((v6p_opcode_t *) op)->name;
}
static int
@ -92,13 +92,13 @@ check_operand_type (etype_t ot1, etype_t ot2)
return 0;
}
opcode_t *
v6p_opcode_t *
opcode_find (const char *name, operand_t *op_a, operand_t *op_b,
operand_t *op_c)
{
opcode_t search_op = {};
opcode_t *op;
opcode_t *sop;
v6p_opcode_t search_op = {};
v6p_opcode_t *op;
v6p_opcode_t *sop;
void **op_list;
int i;
@ -126,8 +126,8 @@ opcode_find (const char *name, operand_t *op_a, operand_t *op_b,
void
opcode_init (void)
{
const opcode_t *op;
opcode_t *mop;
const v6p_opcode_t *op;
v6p_opcode_t *mop;
if (opcode_type_table) {
Hash_FlushTable (opcode_void_table);
@ -140,14 +140,14 @@ opcode_init (void)
}
int num_opcodes = 0;
for (op = pr_opcodes; op->name; op++) {
for (op = pr_v6p_opcodes; op->name; op++) {
num_opcodes++;
}
if (!opcode_map) {
opcode_map = calloc (num_opcodes, sizeof (opcode_t));
opcode_map = calloc (num_opcodes, sizeof (v6p_opcode_t));
}
for (int i = 0; i < num_opcodes; i++) {
op = pr_opcodes + i;
op = pr_v6p_opcodes + i;
if (op->min_version > options.code.progsversion)
continue;
mop = opcode_map + i;