get unsigned mostly working

This commit is contained in:
Bill Currie 2003-08-01 21:20:04 +00:00
parent 9210829573
commit dd9ab1e050
8 changed files with 165 additions and 24 deletions

View file

@ -327,9 +327,11 @@ PR_ExecuteProgram (progs_t * pr, func_t fnum)
OPC.integer_var = OPA.integer_var << OPB.integer_var;
break;
case OP_SHR_I:
case OP_SHR_U:
OPC.integer_var = OPA.integer_var >> OPB.integer_var;
break;
case OP_SHR_U:
OPC.uinteger_var = OPA.uinteger_var >> OPB.uinteger_var;
break;
case OP_GE_F:
OPC.float_var = OPA.float_var >= OPB.float_var;
break;

View file

@ -694,11 +694,11 @@ opcode_t pr_opcodes[] = {
"%Ga, %Gb",
},
{"&&", "and", OP_AND, false,
{"&&", "and.f", OP_AND, false,
ev_float, ev_float, ev_integer,
PROG_ID_VERSION,
},
{"||", "or", OP_OR, false,
{"||", "or.f", OP_OR, false,
ev_float, ev_float, ev_integer,
PROG_ID_VERSION,
},
@ -766,6 +766,35 @@ opcode_t pr_opcodes[] = {
PROG_VERSION,
},
{"+", "add.u", OP_ADD_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"-", "sub.u", OP_SUB_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"*", "mul.u", OP_MUL_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"/", "div.u", OP_DIV_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"%", "mod_u", OP_MOD_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"&", "bitand.u", OP_BITAND_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"|", "bitor.u", OP_BITOR_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"%", "mod.f", OP_MOD_F, false,
ev_float, ev_float, ev_float,
PROG_VERSION,
@ -809,6 +838,27 @@ opcode_t pr_opcodes[] = {
PROG_VERSION,
},
{"&&", "and.u", OP_AND_U, false,
ev_uinteger, ev_uinteger, ev_integer,
PROG_VERSION,
},
{"||", "or.u", OP_OR_U, false,
ev_uinteger, ev_uinteger, ev_integer,
PROG_VERSION,
},
{"!", "not.u", OP_NOT_U, false,
ev_uinteger, ev_void, ev_integer,
PROG_VERSION,
},
{"==", "eq.u", OP_EQ_U, false,
ev_uinteger, ev_uinteger, ev_integer,
PROG_VERSION,
},
{"!=", "ne.u", OP_NE_U, false,
ev_uinteger, ev_uinteger, ev_integer,
PROG_VERSION,
},
{">=", "ge.u", OP_GE_U, false,
ev_uinteger, ev_uinteger, ev_integer,
PROG_VERSION,
@ -842,6 +892,14 @@ opcode_t pr_opcodes[] = {
ev_integer, ev_void, ev_integer,
PROG_VERSION,
},
{"^", "bitxor.u", OP_BITXOR_U, false,
ev_uinteger, ev_uinteger, ev_uinteger,
PROG_VERSION,
},
{"~", "bitnot.u", OP_BITNOT_U, false,
ev_uinteger, ev_void, ev_uinteger,
PROG_VERSION,
},
{">=", "ge.p", OP_GE_P, false,
ev_pointer, ev_pointer, ev_integer,