Merge pull request #421 from Daniel-Cortez/emit-3

A batch of improvements for the '__emit' operator
This commit is contained in:
Zeex 2019-06-15 22:24:36 +06:00 committed by GitHub
commit 8561b38d6d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 2648 additions and 237 deletions

View File

@ -415,13 +415,14 @@ enum {
tLABEL,
tSTRING,
/* argument types for emit/__emit */
teANY , /* any value */
teANY, /* any value */
teNUMERIC, /* integer/rational number */
teDATA , /* data (variable name or address) */
teDATA, /* data (variable name or address) */
teLOCAL, /* local variable (name or offset) */
teREFERENCE, /* function argument passed by reference */
teFUNCTN, /* Pawn function */
teNATIVE, /* native function */
teNONNEG , /* nonnegative integer */
teNONNEG, /* nonnegative integer */
/* for assigment to "lastst" only (see SC1.C) */
tEXPR,
tENDLESS, /* endless loop */
@ -920,9 +921,9 @@ SC_VDECL FILE *outf; /* file written to */
SC_VDECL jmp_buf errbuf; /* target of longjmp() on a fatal error */
/* Possible entries for "emit_flags"
* Bits: 0 (epmBLOCK) multiline ('{}' block) syntax
* 1 (epmEXPR) used within an expression
* 2 (epmGLOBAL) used outside of a function
* Bits: 0 (efBLOCK) multiline ('()' block) syntax
* 1 (efEXPR) used within an expression
* 2 (efGLOBAL) used outside of a function
*/
#define efBLOCK 1
#define efEXPR 2

File diff suppressed because it is too large Load Diff

View File

@ -1337,12 +1337,12 @@ static int command(void)
case tpEMIT: {
if (!SKIPPING) {
/* write opcode to output file */
char name[40];
char name[MAX_INSTR_LEN];
int i;
insert_dbgline(fline);
while (*lptr<=' ' && *lptr!='\0')
lptr++;
for (i=0; i<40 && (isalpha(*lptr) || *lptr=='.'); i++,lptr++)
for (i=0; i<sizeof(name)-1 && (isalpha(*lptr) || *lptr=='.'); i++,lptr++)
name[i]=(char)tolower(*lptr);
name[i]='\0';
stgwrite("\t");
@ -1405,7 +1405,7 @@ static int command(void)
break;
} else if (current_token==tRATIONAL) {
/* change the first bit to make float negative value */
outval(val|((cell)1 << (PAWN_CELL_SIZE-1)),FALSE);
outval(val|(cell)((ucell)1 << (PAWN_CELL_SIZE-1)),FALSE);
code_idx+=opargs(1);
break;
} else {
@ -2148,7 +2148,7 @@ char *sc_tokens[] = {
";", ";", "-integer value-", "-rational value-", "-identifier-",
"-label-", "-string-",
"-any value-", "-numeric value-", "-data offset-", "-local variable-",
"-function-", "-native function-", "-nonnegative integer-"
"-reference-", "-function-", "-native function-", "-nonnegative integer-"
};
SC_FUNC int lex(cell *lexvalue,char **lexsym)

View File

@ -1463,24 +1463,21 @@ static int hier2(value *lval)
return FALSE;
} /* case */
case tEMIT:
case t__EMIT: {
cell val;
char* st;
int block_syntax=matchtoken('(');
case t__EMIT:
paranthese=matchtoken('(');
emit_flags |= efEXPR;
if (emit_stgbuf_idx==-1)
emit_stgbuf_idx=stgidx;
do {
lex(&val,&st);
emit_parse_line();
} while ((block_syntax!=0) && matchtoken(','));
if (block_syntax!=0)
} while ((paranthese!=0) && matchtoken(','));
if (paranthese!=0)
needtoken(')');
emit_flags &= ~efEXPR;
lval->ident=iEXPRESSION;
pc_sideeffect=TRUE;
return FALSE;
} /* case */
default:
lexpush();
lvalue=hier1(lval);

View File

@ -50,7 +50,7 @@ static char *errmsg[] = {
/*008*/ "must be a constant expression; assumed zero\n",
/*009*/ "invalid array size (negative, zero or out of bounds)\n",
/*010*/ "invalid function or declaration\n",
/*011*/ "invalid outside functions\n",
/*011*/ "stack offset/data address must be a multiple of cell size\n",
/*012*/ "invalid function call, not a valid address\n",
/*013*/ "no entry point (no public functions)\n",
/*014*/ "invalid statement; not in switch\n",

View File

@ -0,0 +1,7 @@
#include <console>
const global_const = 0;
new stock global_var = 0;
new stock global_array[2];
forward global_func(); public global_func() { return 0; }
native global_native(const string[]) = print;

View File

@ -0,0 +1,30 @@
{
'test_type': 'output_check',
'errors': """
__emit_p1.pwn(56) : error 001: expected token: "-any value-", but found "-(-function-)"
__emit_p1.pwn(57) : error 001: expected token: "-any value-", but found "-(-label-)"
__emit_p1.pwn(58) : error 001: expected token: "-any value-", but found "--"
__emit_p1.pwn(58) : warning 215: expression has no effect
__emit_p1.pwn(59) : error 017: undefined symbol "local_label2"
__emit_p1.pwn(60) : error 001: expected token: "-any value-", but found "-:"
__emit_p1.pwn(60) : error 029: invalid expression, assumed zero
__emit_p1.pwn(60) : warning 215: expression has no effect
__emit_p1.pwn(83) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p1.pwn(84) : error 001: expected token: "-integer value-", but found "-function-"
__emit_p1.pwn(85) : error 001: expected token: "-integer value-", but found "-reference-"
__emit_p1.pwn(86) : error 001: expected token: "-integer value-", but found "-reference-"
__emit_p1.pwn(87) : error 001: expected token: "-integer value-", but found "-local variable-"
__emit_p1.pwn(88) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p1.pwn(89) : error 001: expected token: "-integer value-", but found "-label-"
__emit_p1.pwn(115) : error 001: expected token: "-nonnegative integer-", but found "-data offset-"
__emit_p1.pwn(116) : error 001: expected token: "-nonnegative integer-", but found "-function-"
__emit_p1.pwn(117) : error 001: expected token: "-nonnegative integer-", but found "-reference-"
__emit_p1.pwn(118) : error 001: expected token: "-nonnegative integer-", but found "-reference-"
__emit_p1.pwn(119) : error 001: expected token: "-nonnegative integer-", but found "-local variable-"
__emit_p1.pwn(120) : error 001: expected token: "-nonnegative integer-", but found "-data offset-"
__emit_p1.pwn(121) : error 001: expected token: "-nonnegative integer-", but found "-label-"
__emit_p1.pwn(122) : error 001: expected token: "-nonnegative integer-", but found "-1"
__emit_p1.pwn(123) : error 001: expected token: "-nonnegative integer-", but found "-1"
__emit_p1.pwn(127) : error 001: expected token: "-nonnegative integer-", but found "-2147483648"
"""
}

View File

@ -0,0 +1,141 @@
#include "__emit.inc"
stock test__any(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit const.pri global_const;
emit const.pri global_var;
emit const.pri global_func;
emit const.pri local_refvar;
emit const.pri local_refarray;
emit const.pri local_const;
emit const.pri local_var;
emit const.pri local_static_var;
emit const.pri local_label;
emit const.pri :local_label;
emit const.pri :local_label2;
emit const.pri 0;
emit const.pri -0;
emit const.pri 1;
emit const.pri -1;
emit const.pri 0x0;
emit const.pri -0x0;
emit const.pri 0x1;
emit const.pri -0x1;
#if cellbits == 16
emit const.pri 32767;
emit const.pri -32768;
emit const.pri 0x7FFF;
emit const.pri -0x7FFF;
emit const.pri 0x8000;
emit const.pri -0x8000;
#elseif cellbits == 32
emit const.pri 2147483647;
emit const.pri -2147483648;
emit const.pri 0x7FFFFFFF;
emit const.pri -0x7FFFFFFF;
emit const.pri 0x80000000;
emit const.pri -0x80000000;
#else // cellbits == 64
emit const.pri 9223372036854775807;
emit const.pri -9223372036854775808;
emit const.pri 0x7FFFFFFFFFFFFFFF;
emit const.pri -0x7FFFFFFFFFFFFFFF;
emit const.pri 0x8000000000000000;
emit const.pri -0x8000000000000000;
#endif
emit const.pri (cellbits / charbits * 2);
// should trigger an error
emit const.pri -global_func;
emit const.pri -local_label;
emit const.pri --0;
emit const.pri local_label2;
emit const.pri -:local_label;
local_label2:
}
stock test__integer(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit jrel global_const;
emit jrel local_const;
emit jrel 0;
emit jrel 1;
emit jrel -1;
emit jrel 0x1;
emit jrel -0x1;
emit jrel (cellbits / charbits * 2);
// should trigger an error
emit jrel global_var;
emit jrel global_func;
emit jrel local_refvar;
emit jrel local_refarray;
emit jrel local_var;
emit jrel local_static_var;
emit jrel local_label;
}
stock test__nonneg(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit cmps global_const;
emit cmps local_const;
emit cmps 0;
emit cmps 1;
emit cmps 0x1;
emit cmps (cellbits / charbits * 2);
#if cellbits == 16
emit cmps 0x7FFF;
#elseif cellbits == 32
emit cmps 0x7FFFFFFF;
#else // cellbits == 64
emit cmps 0x7FFFFFFFFFFFFFFF;
#endif
// should trigger an error
emit cmps global_var;
emit cmps global_func;
emit cmps local_refvar;
emit cmps local_refarray;
emit cmps local_var;
emit cmps local_static_var;
emit cmps local_label;
emit cmps -1;
emit cmps -0x1;
#if cellbits == 16
emit cmps 0x8000;
#elseif cellbits == 32
emit cmps 0x80000000;
#else // cellbits == 64
emit cmps 0x8000000000000000;
#endif
}
main()
{
new t;
static a[1];
test__any(t, a); // 4
test__integer(t, a); // 7
test__nonneg(t, a); // 10
}

View File

@ -0,0 +1,25 @@
{
'test_type': 'output_check',
'errors': """
__emit_p2.pwn(30) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p2.pwn(31) : error 001: expected token: "-integer value-", but found "-function-"
__emit_p2.pwn(32) : error 001: expected token: "-integer value-", but found "-reference-"
__emit_p2.pwn(33) : error 001: expected token: "-integer value-", but found "-reference-"
__emit_p2.pwn(34) : error 001: expected token: "-integer value-", but found "-local variable-"
__emit_p2.pwn(35) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p2.pwn(36) : error 001: expected token: "-integer value-", but found "-label-"
__emit_p2.pwn(37) : error 050: invalid range
__emit_p2.pwn(38) : error 050: invalid range
__emit_p2.pwn(43) : error 050: invalid range
__emit_p2.pwn(44) : error 050: invalid range
__emit_p2.pwn(65) : error 001: expected token: "-label-", but found "-numeric value-"
__emit_p2.pwn(66) : error 001: expected token: "-label-", but found "-data offset-"
__emit_p2.pwn(67) : error 001: expected token: "-label-", but found "-function-"
__emit_p2.pwn(68) : error 001: expected token: "-label-", but found "-reference-"
__emit_p2.pwn(69) : error 001: expected token: "-label-", but found "-reference-"
__emit_p2.pwn(70) : error 001: expected token: "-label-", but found "-numeric value-"
__emit_p2.pwn(71) : error 001: expected token: "-label-", but found "-local variable-"
__emit_p2.pwn(72) : error 001: expected token: "-label-", but found "-data offset-"
__emit_p2.pwn(73) : error 001: expected token: "-label-", but found "-integer value-"
"""
}

View File

@ -0,0 +1,82 @@
#include "__emit.inc"
stock test__shift(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit shl.c.pri global_const;
emit shl.c.pri local_const;
emit shl.c.pri 0;
emit shl.c.pri 1;
emit shl.c.pri 15;
emit shl.c.pri (cellbits / charbits);
#if cellbits == 16
emit shl.c.pri 15;
emit shl.c.pri 0xF;
#elseif cellbits == 32
emit shl.c.pri 31;
emit shl.c.pri 0x1F;
#else // cellbits == 64
emit shl.c.pri 63;
emit shl.c.pri 0x3F;
#endif
// should trigger an error
emit shl.c.pri global_var;
emit shl.c.pri global_func;
emit shl.c.pri local_refvar;
emit shl.c.pri local_refarray;
emit shl.c.pri local_var;
emit shl.c.pri local_static_var;
emit shl.c.pri local_label;
emit shl.c.pri -1;
emit shl.c.pri -0x1;
#if cellbits == 16
emit shl.c.pri 16;
emit shl.c.pri 0x10;
#elseif cellbits == 32
emit shl.c.pri 32;
emit shl.c.pri 0x20;
#else // cellbits == 64
emit shl.c.pri 64;
emit shl.c.pri 0x40;
#endif
}
stock test__label(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit jump local_label;
emit jump local_label2;
emit jump :local_label2;
local_label2:
// should trigger an error
emit jump global_const;
emit jump global_var;
emit jump global_func;
emit jump local_refvar;
emit jump local_refarray;
emit jump local_const;
emit jump local_var;
emit jump local_static_var;
emit jump 0;
}
main()
{
new t, a[1];
test__shift(t, a); // 11
test__label(t, a); // 9
}

View File

@ -0,0 +1,23 @@
{
'test_type': 'output_check',
'errors': """
__emit_p3.pwn(17) : error 001: expected token: "-function-", but found "-numeric value-"
__emit_p3.pwn(18) : error 001: expected token: "-function-", but found "-data offset-"
__emit_p3.pwn(19) : error 001: expected token: "-function-", but found "-reference-"
__emit_p3.pwn(20) : error 001: expected token: "-function-", but found "-reference-"
__emit_p3.pwn(21) : error 001: expected token: "-function-", but found "-numeric value-"
__emit_p3.pwn(22) : error 001: expected token: "-function-", but found "-local variable-"
__emit_p3.pwn(23) : error 001: expected token: "-function-", but found "-data offset-"
__emit_p3.pwn(24) : error 001: expected token: "-function-", but found "-label-"
__emit_p3.pwn(25) : error 001: expected token: "-function-", but found "-integer value-"
__emit_p3.pwn(26) : error 001: expected token: "-native function-", but found "-numeric value-"
__emit_p3.pwn(27) : error 001: expected token: "-native function-", but found "-data offset-"
__emit_p3.pwn(28) : error 001: expected token: "-native function-", but found "-reference-"
__emit_p3.pwn(29) : error 001: expected token: "-native function-", but found "-reference-"
__emit_p3.pwn(30) : error 001: expected token: "-native function-", but found "-numeric value-"
__emit_p3.pwn(31) : error 001: expected token: "-native function-", but found "-local variable-"
__emit_p3.pwn(32) : error 001: expected token: "-native function-", but found "-data offset-"
__emit_p3.pwn(33) : error 001: expected token: "-native function-", but found "-label-"
__emit_p3.pwn(34) : error 001: expected token: "-native function-", but found "-integer value-"
"""
}

View File

@ -0,0 +1,42 @@
#include "__emit.inc"
stock test__function(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit call global_func;
emit sysreq.c global_native;
emit sysreq.n global_native 0;
// should trigger an error
emit call global_const;
emit call global_var;
emit call local_refvar;
emit call local_refarray;
emit call local_const;
emit call local_var;
emit call local_static_var;
emit call local_label;
emit call 0;
emit sysreq.c global_const;
emit sysreq.c global_var;
emit sysreq.c local_refvar;
emit sysreq.c local_refarray;
emit sysreq.c local_const;
emit sysreq.c local_var;
emit sysreq.c local_static_var;
emit sysreq.c local_label;
emit sysreq.c 0;
}
main()
{
new t, a[1];
test__function(t, a); // 18
}

View File

@ -0,0 +1,25 @@
{
'test_type': 'output_check',
'errors': """
__emit_p4.pwn(16) : error 001: expected token: "-data offset-", but found "-numeric value-"
__emit_p4.pwn(17) : error 001: expected token: "-data offset-", but found "-function-"
__emit_p4.pwn(18) : error 001: expected token: "-data offset-", but found "-reference-"
__emit_p4.pwn(19) : error 001: expected token: "-data offset-", but found "-reference-"
__emit_p4.pwn(20) : error 001: expected token: "-data offset-", but found "-numeric value-"
__emit_p4.pwn(21) : error 001: expected token: "-data offset-", but found "-local variable-"
__emit_p4.pwn(22) : error 001: expected token: "-data offset-", but found "-label-"
__emit_p4.pwn(23) : error 001: expected token: "-data offset-", but found "-integer value-"
__emit_p4.pwn(48) : error 001: expected token: "-local variable-", but found "-data offset-"
__emit_p4.pwn(49) : error 001: expected token: "-local variable-", but found "-function-"
__emit_p4.pwn(50) : error 001: expected token: "-local variable-", but found "-data offset-"
__emit_p4.pwn(51) : error 001: expected token: "-local variable-", but found "-label-"
__emit_p4.pwn(52) : error 001: expected token: "-local variable-", but found "-reference-"
__emit_p4.pwn(53) : error 001: expected token: "-local variable-", but found "-reference-"
__emit_p4.pwn(54) : error 001: expected token: "-local variable-", but found "-(-data offset-)"
__emit_p4.pwn(55) : error 001: expected token: "-local variable-", but found "-(-function-)"
__emit_p4.pwn(56) : error 001: expected token: "-local variable-", but found "-(-data offset-)"
__emit_p4.pwn(57) : error 001: expected token: "-local variable-", but found "-(-label-)"
__emit_p4.pwn(58) : error 001: expected token: "-local variable-", but found "-(-reference-)"
__emit_p4.pwn(59) : error 001: expected token: "-local variable-", but found "-(-reference-)"
"""
}

View File

@ -0,0 +1,68 @@
#include "__emit.inc"
stock test__data_offset(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit load.pri global_var;
emit load.pri local_static_var;
// should trigger an error
emit load.pri global_const;
emit load.pri global_func;
emit load.pri local_refvar;
emit load.pri local_refarray;
emit load.pri local_const;
emit load.pri local_var;
emit load.pri local_label;
emit load.pri 0;
}
stock test__local_var(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit load.s.pri global_const;
emit load.s.pri local_refvar;
emit load.s.pri local_refarray;
emit load.s.pri local_const;
emit load.s.pri local_var;
emit load.s.pri 20;
emit load.s.pri -20;
emit stor.s.pri global_const;
emit stor.s.pri local_const;
emit stor.s.pri local_var;
emit stor.s.pri 20;
emit stor.s.pri -20;
// should trigger an error
emit load.s.pri global_var;
emit load.s.pri global_func;
emit load.s.pri local_static_var;
emit load.s.pri local_label;
emit stor.s.pri local_refvar;
emit stor.s.pri local_refarray;
emit load.s.pri -global_var;
emit load.s.pri -global_func;
emit load.s.pri -local_static_var;
emit load.s.pri -local_label;
emit stor.s.pri -local_refvar;
emit stor.s.pri -local_refarray;
}
main()
{
new t, a[1];
test__data_offset(t, a); // 8
test__local_var(t, a); // 6
}

View File

@ -0,0 +1,29 @@
{
'test_type': 'output_check',
'errors': """
__emit_p5.pwn(25) : error 050: invalid range
__emit_p5.pwn(26) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p5.pwn(27) : error 001: expected token: "-integer value-", but found "-function-"
__emit_p5.pwn(28) : error 001: expected token: "-integer value-", but found "-reference-"
__emit_p5.pwn(29) : error 050: invalid range
__emit_p5.pwn(30) : error 001: expected token: "-integer value-", but found "-local variable-"
__emit_p5.pwn(31) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p5.pwn(32) : error 001: expected token: "-integer value-", but found "-label-"
__emit_p5.pwn(33) : error 050: invalid range
__emit_p5.pwn(34) : error 050: invalid range
__emit_p5.pwn(35) : error 050: invalid range
__emit_p5.pwn(36) : error 050: invalid range
__emit_p5.pwn(37) : error 050: invalid range
__emit_p5.pwn(38) : error 050: invalid range
__emit_p5.pwn(61) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p5.pwn(62) : error 001: expected token: "-integer value-", but found "-function-"
__emit_p5.pwn(63) : error 001: expected token: "-integer value-", but found "-reference-"
__emit_p5.pwn(64) : error 001: expected token: "-integer value-", but found "-local variable-"
__emit_p5.pwn(65) : error 001: expected token: "-integer value-", but found "-data offset-"
__emit_p5.pwn(66) : error 001: expected token: "-integer value-", but found "-label-"
__emit_p5.pwn(67) : error 050: invalid range
__emit_p5.pwn(68) : error 050: invalid range
__emit_p5.pwn(69) : error 050: invalid range
__emit_p5.pwn(70) : error 050: invalid range
"""
}

View File

@ -0,0 +1,79 @@
#include "__emit.inc"
const global_const_1 = 1;
stock test__op_lodb_strb(&local_refvar)
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
const local_const_1 = 0x1;
// ok
emit lodb.i 1;
emit lodb.i 2;
emit lodb.i 4;
emit lodb.i 0x1;
emit lodb.i 0x2;
emit lodb.i 0x4;
emit lodb.i global_const_1;
emit lodb.i local_const_1;
// should trigger an error
emit lodb.i global_const;
emit lodb.i global_var;
emit lodb.i global_func;
emit lodb.i local_refvar;
emit lodb.i local_const;
emit lodb.i local_var;
emit lodb.i local_static_var;
emit lodb.i local_label;
emit lodb.i -1;
emit lodb.i 3;
emit lodb.i 5;
emit lodb.i -0x1;
emit lodb.i 0x3;
emit lodb.i 0x5;
}
stock test__op_align(&local_refvar)
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
local_label:
// ok
emit align.pri global_const;
emit align.pri local_const;
emit align.pri 0;
emit align.pri 1;
emit align.pri 2;
emit align.pri 3;
emit align.pri 0x0;
emit align.pri 0x1;
emit align.pri 0x2;
emit align.pri 0x3;
// should trigger an error
emit align.pri global_var;
emit align.pri global_func;
emit align.pri local_refvar;
emit align.pri local_var;
emit align.pri local_static_var;
emit align.pri local_label;
emit align.pri -1;
emit align.pri 4;
emit align.pri -0x1;
emit align.pri 0x4;
}
main()
{
new t;
test__op_lodb_strb(t); // 14
test__op_align(t); // 10
}

View File

@ -0,0 +1,25 @@
{
'test_type': 'output_check',
'errors': """
__emit_p6.pwn(23) : error 076: syntax error in the expression, or invalid function call
__emit_p6.pwn(24) : error 076: syntax error in the expression, or invalid function call
__emit_p6.pwn(25) : error 033: array must be indexed (variable "local_array")
__emit_p6.pwn(26) : error 033: array must be indexed (variable "local_refarray")
__emit_p6.pwn(45) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(46) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(47) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(48) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(49) : error 033: array must be indexed (variable "local_array")
__emit_p6.pwn(50) : error 033: array must be indexed (variable "local_refarray")
__emit_p6.pwn(69) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(70) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(71) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(72) : error 022: must be lvalue (non-constant)
__emit_p6.pwn(73) : error 033: array must be indexed (variable "local_array")
__emit_p6.pwn(74) : error 033: array must be indexed (variable "local_refarray")
__emit_p6.pwn(96) : error 076: syntax error in the expression, or invalid function call
__emit_p6.pwn(97) : error 076: syntax error in the expression, or invalid function call
__emit_p6.pwn(98) : error 033: array must be indexed (variable "local_array")
__emit_p6.pwn(99) : error 033: array must be indexed (variable "local_refarray")
"""
}

View File

@ -0,0 +1,110 @@
#include "__emit.inc"
stock test__op_load_u_pri_alt(&local_refvar, const local_refarray[])
{
const local_const = 1;
new local_var = 0;
static local_static_var = 0;
new local_array[2];
// ok
emit load.u.pri global_const;
emit load.u.pri global_var;
emit load.u.pri local_const;
emit load.u.pri local_var;
emit load.u.pri local_static_var;
emit load.u.pri local_refvar;
emit load.u.pri global_const + local_const;
emit load.u.pri global_var * local_var;
emit load.u.pri local_refarray[0];
// should trigger an error
emit load.u.pri global_func;
emit load.u.pri global_native;
emit load.u.pri local_array;
emit load.u.pri local_refarray;
}
stock test__op_stor_u_pri_alt(&local_refvar, local_refarray[])
{
const local_const = 1;
new local_var = 0;
static local_static_var = 0;
new local_array[2];
// ok
emit stor.u.pri global_var;
emit stor.u.pri local_var;
emit stor.u.pri local_static_var;
emit stor.u.pri local_refvar;
emit stor.u.pri local_array[1];
emit stor.u.pri local_refarray[local_const];
// should trigger an error
emit stor.u.pri global_const;
emit stor.u.pri global_func;
emit stor.u.pri global_native;
emit stor.u.pri local_const;
emit stor.u.pri local_array;
emit stor.u.pri local_refarray;
}
stock test__op_addr_u_pri_alt(&local_refvar, local_refarray[])
{
const local_const = 1;
new local_var = 0;
static local_static_var = 0;
new local_array[2];
// ok
emit addr.u.pri global_var;
emit addr.u.pri local_var;
emit addr.u.pri local_static_var;
emit addr.u.pri local_refvar;
emit addr.u.pri local_array[1];
emit addr.u.pri local_refarray[local_const];
// should trigger an error
emit addr.u.pri global_const;
emit addr.u.pri global_func;
emit addr.u.pri global_native;
emit addr.u.pri local_const;
emit addr.u.pri local_array;
emit addr.u.pri local_refarray;
}
stock test__push_u(&local_refvar, local_refarray[])
{
const local_const = 1;
new local_var = 0;
static local_static_var = 0;
new local_array[2];
// ok
emit push.u global_const;
emit push.u global_var;
emit push.u local_refvar;
emit push.u local_const;
emit push.u local_var;
emit push.u local_static_var;
emit push.u (global_const + local_const);
emit push.u (global_var * local_var + local_static_var + local_refvar);
emit push.u local_refarray[0];
// should trigger an error
emit push.u global_func;
emit push.u global_native;
emit push.u local_array;
emit push.u local_refarray;
}
main()
{
new t, a[2];
test__op_load_u_pri_alt(t, a); // 4
test__op_stor_u_pri_alt(t, a); // 6
test__op_addr_u_pri_alt(t, a); // 6
test__push_u(t, a); // 4
}

View File

@ -0,0 +1,25 @@
{
'test_type': 'output_check',
'errors': """
__emit_p7.pwn(20) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(21) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(22) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(23) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(24) : error 033: array must be indexed (variable "local_array")
__emit_p7.pwn(25) : error 033: array must be indexed (variable "local_refarray")
__emit_p7.pwn(26) : error 035: argument type mismatch (argument 1)
__emit_p7.pwn(27) : error 035: argument type mismatch (argument 1)
__emit_p7.pwn(46) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(47) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(48) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(49) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(50) : error 033: array must be indexed (variable "local_array")
__emit_p7.pwn(51) : error 033: array must be indexed (variable "local_refarray")
__emit_p7.pwn(70) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(71) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(72) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(73) : error 022: must be lvalue (non-constant)
__emit_p7.pwn(74) : error 033: array must be indexed (variable "local_array")
__emit_p7.pwn(75) : error 033: array must be indexed (variable "local_refarray")
"""
}

View File

@ -0,0 +1,85 @@
#include "__emit.inc"
stock test__push_u_adr(&local_refvar, local_refarray[])
{
const local_const = 1;
new local_var = 0;
static local_static_var = 0;
new local_array[2];
// ok
emit push.u.adr global_var;
emit push.u.adr local_refvar;
emit push.u.adr local_var;
emit push.u.adr local_static_var;
emit push.u.adr local_array[1];
emit push.u.adr local_refarray[local_const];
// should trigger an error
emit push.u.adr global_const;
emit push.u.adr global_func;
emit push.u.adr global_native;
emit push.u.adr local_const;
emit push.u.adr local_array;
emit push.u.adr local_refarray;
emit push.u.adr local_array{1};
emit push.u.adr local_array{local_var};
}
stock test__zero_u(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
new local_array[2];
// ok
emit zero.u global_var;
emit zero.u local_refvar;
emit zero.u local_var;
emit zero.u local_static_var;
emit zero.u local_array[1];
emit zero.u local_refarray[local_const];
// should trigger an error
emit zero.u global_const;
emit zero.u global_func;
emit zero.u global_native;
emit zero.u local_const;
emit zero.u local_array;
emit zero.u local_refarray;
}
stock test__inc_dec_u(&local_refvar, local_refarray[])
{
const local_const = 0;
new local_var = 0;
static local_static_var = 0;
new local_array[2];
// ok
emit inc.u global_var;
emit inc.u local_refvar;
emit inc.u local_var;
emit inc.u local_static_var;
emit inc.u local_array[1];
emit inc.u local_refarray[local_const];
// should trigger an error
emit inc.u global_const;
emit inc.u global_func;
emit inc.u global_native;
emit inc.u local_const;
emit inc.u local_array;
emit inc.u local_refarray;
}
main()
{
new t, a[2];
test__push_u_adr(t, a); // 8
test__zero_u(t, a); // 6
test__inc_dec_u(t, a); // 6
}

View File

@ -0,0 +1,702 @@
{
'test_type': 'pcode_check',
'code_pattern': r"""
[0-9a-f]+ push.r 00000000
[0-9a-f]+ load.pri 00000000
[0-9a-f]+ load.pri 00000004
[0-9a-f]+ load.pri 0000000c
[0-9a-f]+ push.r 00000001
[0-9a-f]+ load.s.pri 00001234
[0-9a-f]+ load.s.pri 0000000c
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ load.s.pri 00005678
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.pri 0000fedc
[0-9a-f]+ push.r 00000002
[0-9a-f]+ call [0-9a-f]+
[0-9a-f]+ sysreq.c 00000000
[0-9a-f]+ push.c 00000000
[0-9a-f]+ sysreq.c 00000000
[0-9a-f]+ stack 00000004
[0-9a-f]+ push.r 00000003
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ lodb.i 00000002
[0-9a-f]+ lodb.i 00000004
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ lodb.i 00000002
[0-9a-f]+ lodb.i 00000004
[0-9a-f]+ push.r 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ align.pri 00000000
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ align.pri 00000002
[0-9a-f]+ align.pri 00000003
[0-9a-f]+ align.pri 00000000
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ align.pri 00000002
[0-9a-f]+ align.pri 00000003
[0-9a-f]+ push.r 00000005
[0-9a-f]+ push.c 00001234
[0-9a-f]+ push.c 00005678
[0-9a-f]+ push.c 00009abc
[0-9a-f]+ push.c 00000000
[0-9a-f]+ push.c 00000004
[0-9a-f]+ push.c 0000000c
[0-9a-f]+ push.c 0000000c
[0-9a-f]+ push.c fffffffc
[0-9a-f]+ push.r 00000006
[0-9a-f]+ push 00000000
[0-9a-f]+ push 0000000c
[0-9a-f]+ push.r 00000007
[0-9a-f]+ push.s 00001234
[0-9a-f]+ push.s 00005678
[0-9a-f]+ push.s 0000000c
[0-9a-f]+ push.s 00000010
[0-9a-f]+ push.s fffffffc
[0-9a-f]+ push.r 00000008
[0-9a-f]+ push.adr 00001234
[0-9a-f]+ push.adr 00005678
[0-9a-f]+ push.adr 0000000c
[0-9a-f]+ push.adr 00000010
[0-9a-f]+ push.adr fffffffc
[0-9a-f]+ push.r 00000009
[0-9a-f]+ push.pri
[0-9a-f]+ const.pri 00001234
[0-9a-f]+ stor.pri 00000000
[0-9a-f]+ pop.pri
[0-9a-f]+ push.pri
[0-9a-f]+ const.pri 00005678
[0-9a-f]+ stor.pri 0000000c
[0-9a-f]+ pop.pri
[0-9a-f]+ push.r 0000000a
[0-9a-f]+ push.pri
[0-9a-f]+ const.pri 00005678
[0-9a-f]+ stor.s.pri fffffffc
[0-9a-f]+ pop.pri
[0-9a-f]+ push.r 0000000b
[0-9a-f]+ load.pri 00000000
[0-9a-f]+ load.alt 0000000c
[0-9a-f]+ push.r 0000000c
[0-9a-f]+ load.s.pri 0000000c
[0-9a-f]+ load.s.alt fffffffc
[0-9a-f]+ push.r 00000010
[0-9a-f]+ zero.pri
[0-9a-f]+ zero.alt
[0-9a-f]+ load.s.pri 0000000c
[0-9a-f]+ load.s.alt 0000000c
[0-9a-f]+ addr.pri fffffffc
[0-9a-f]+ addr.alt fffffffc
[0-9a-f]+ const.pri 0000000c
[0-9a-f]+ const.alt 0000000c
[0-9a-f]+ push.r 00000011
[0-9a-f]+ const.pri 00000004
[0-9a-f]+ const.alt 00000008
[0-9a-f]+ const.pri 00000010
[0-9a-f]+ const.alt 00000014
[0-9a-f]+ addr.pri fffffff4
[0-9a-f]+ addr.alt fffffff8
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000004
[0-9a-f]+ move.alt
[0-9a-f]+ push.r 00000012
[0-9a-f]+ const.pri 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ const.alt 00000005
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ const.pri 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ const.alt 00000011
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ addr.pri fffffff4
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ addr.alt fffffff5
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ push.r 00000013
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ inc.pri
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ inc.alt
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000002
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000002
[0-9a-f]+ move.alt
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ push.r 00000014
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ idxaddr
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ push.r 00000015
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ push.r 00000016
[0-9a-f]+ push.c 00000000
[0-9a-f]+ call [0-9a-f]+
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ push.c 00000000
[0-9a-f]+ call [0-9a-f]+
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ push.r 00000017
[0-9a-f]+ push.c 00000000
[0-9a-f]+ call [0-9a-f]+
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ push.c 00000000
[0-9a-f]+ call [0-9a-f]+
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ push.r 00000018
[0-9a-f]+ const.pri 00001234
[0-9a-f]+ load.pri 00000000
[0-9a-f]+ lref.s.pri 0000000c
[0-9a-f]+ const.pri 00005678
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.pri 0000000c
[0-9a-f]+ const.pri 00009abc
[0-9a-f]+ push.r 00000019
[0-9a-f]+ const.pri 000068ac
[0-9a-f]+ push.r 0000001a
[0-9a-f]+ load.pri 00000000
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ pop.alt
[0-9a-f]+ smul
[0-9a-f]+ move.alt
[0-9a-f]+ push.r 0000001b
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ load.i
[0-9a-f]+ push.r 00000020
[0-9a-f]+ stor.pri 00000000
[0-9a-f]+ stor.alt 00000000
[0-9a-f]+ sref.s.pri 0000000c
[0-9a-f]+ sref.s.alt 0000000c
[0-9a-f]+ stor.s.pri fffffffc
[0-9a-f]+ stor.s.alt fffffffc
[0-9a-f]+ stor.pri 0000000c
[0-9a-f]+ stor.alt 0000000c
[0-9a-f]+ push.r 00000021
[0-9a-f]+ stor.pri 00000004
[0-9a-f]+ stor.alt 00000008
[0-9a-f]+ stor.s.pri fffffff4
[0-9a-f]+ stor.s.alt fffffff8
[0-9a-f]+ sref.s.pri 00000010
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000004
[0-9a-f]+ xchg
[0-9a-f]+ stor.i
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000004
[0-9a-f]+ xchg
[0-9a-f]+ stor.i
[0-9a-f]+ push.r 00000022
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ move.pri
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ const.alt 00000005
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ move.pri
[0-9a-f]+ const.alt 00000005
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.r 00000023
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ move.pri
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ addr.alt fffffff5
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ move.pri
[0-9a-f]+ addr.alt fffffff5
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.r 00000024
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ move.pri
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ inc.alt
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ move.pri
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ inc.alt
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000002
[0-9a-f]+ xchg
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000002
[0-9a-f]+ xchg
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.r 00000025
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.r 00000026
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.alt
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ pop.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.r 00000028
[0-9a-f]+ push.c 00001234
[0-9a-f]+ push 00000000
[0-9a-f]+ lref.s.pri 0000000c
[0-9a-f]+ push.pri
[0-9a-f]+ push.c 00005678
[0-9a-f]+ push.s fffffffc
[0-9a-f]+ push 0000000c
[0-9a-f]+ push.c 00009abc
[0-9a-f]+ push.r 00000029
[0-9a-f]+ push.c 000068ac
[0-9a-f]+ push.r 0000002a
[0-9a-f]+ load.pri 00000000
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ pop.alt
[0-9a-f]+ smul
[0-9a-f]+ push.pri
[0-9a-f]+ push.r 0000002b
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ load.i
[0-9a-f]+ push.pri
[0-9a-f]+ push.r 00000030
[0-9a-f]+ push.c 00000000
[0-9a-f]+ push.c 0000000c
[0-9a-f]+ push.adr fffffffc
[0-9a-f]+ push.s 0000000c
[0-9a-f]+ push.r 00000031
[0-9a-f]+ push.c 00000004
[0-9a-f]+ push.c 00000008
[0-9a-f]+ push.c 00000010
[0-9a-f]+ push.c 00000014
[0-9a-f]+ push.adr fffffff4
[0-9a-f]+ push.adr fffffff8
[0-9a-f]+ push.s 00000010
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000004
[0-9a-f]+ push.pri
[0-9a-f]+ push.r 00000032
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ idxaddr
[0-9a-f]+ push.pri
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ push.pri
[0-9a-f]+ push.r 00000038
[0-9a-f]+ zero 00000000
[0-9a-f]+ zero 0000000c
[0-9a-f]+ zero.s fffffffc
[0-9a-f]+ zero.pri
[0-9a-f]+ sref.s.pri 0000000c
[0-9a-f]+ push.r 00000039
[0-9a-f]+ zero 00000004
[0-9a-f]+ zero 00000008
[0-9a-f]+ zero 00000010
[0-9a-f]+ zero 00000014
[0-9a-f]+ zero.s fffffff4
[0-9a-f]+ zero.s fffffff8
[0-9a-f]+ zero.pri
[0-9a-f]+ sref.s.pri 00000010
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000004
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.r 0000003a
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ const.alt 00000005
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ const.alt 00000010
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ const.alt 00000011
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ addr.alt fffffff5
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ inc.alt
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000002
[0-9a-f]+ move.alt
[0-9a-f]+ align.alt 00000001
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.r 0000003b
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ stor.i
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ stor.i
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ stor.i
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ stor.i
[0-9a-f]+ push.r 0000003c
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ zero.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.r 00000040
[0-9a-f]+ inc 00000000
[0-9a-f]+ inc 0000000c
[0-9a-f]+ inc.s fffffffc
[0-9a-f]+ load.s.pri 0000000c
[0-9a-f]+ inc.i
[0-9a-f]+ push.r 00000041
[0-9a-f]+ inc 00000004
[0-9a-f]+ inc 00000008
[0-9a-f]+ inc 00000010
[0-9a-f]+ inc 00000014
[0-9a-f]+ inc.s fffffff4
[0-9a-f]+ inc.s fffffff8
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ inc.i
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000004
[0-9a-f]+ inc.i
[0-9a-f]+ push.r 00000042
[0-9a-f]+ const.pri 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ const.pri 00000005
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ const.pri 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ const.pri 00000011
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ addr.pri fffffff4
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ addr.pri fffffff5
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ inc.pri
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri 00000010
[0-9a-f]+ add.c 00000002
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ push.r 00000043
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000004
[0-9a-f]+ idxaddr
[0-9a-f]+ inc.i
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ const.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ inc.i
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ idxaddr
[0-9a-f]+ inc.i
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ idxaddr
[0-9a-f]+ inc.i
[0-9a-f]+ push.r 00000044
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000004
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ add.c 00000010
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ addr.alt fffffff4
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ load.s.pri fffffffc
[0-9a-f]+ load.s.alt 00000010
[0-9a-f]+ add
[0-9a-f]+ align.pri 00000001
[0-9a-f]+ move.alt
[0-9a-f]+ lodb.i 00000001
[0-9a-f]+ inc.pri
[0-9a-f]+ strb.i 00000001
[0-9a-f]+ nop
"""
}

View File

@ -0,0 +1,345 @@
#include "__emit.inc"
// Use 'push.r' as a delimiter since the compiler doesn't generate this instruction
// and its argument might be used to identify the snippet in the disassembly.
#define DEF_SNIPPET(%0) emit push.r (%0)
const global_const_1 = 1;
const global_const_1234 = 0x1234;
stock test__pcode(&local_refvar, local_refarray[])
{
const local_const_1 = 1;
const local_const_5678 = 0x5678;
static local_static_var = 0;
static local_static_array[2];
new local_var = 0;
new local_array[2];
DEF_SNIPPET(0x0);
emit load.pri global_var; // load.pri 00000000
emit load.pri global_array; // load.pri 00000004
emit load.pri local_static_var; // load.pri 0000000c
DEF_SNIPPET(0x1);
emit load.s.pri global_const_1234; // load.s.pri 00001234
emit load.s.pri local_refvar; // load.s.pri 0000000c
emit load.s.pri local_refarray; // load.s.pri 00000010
emit load.s.pri local_const_5678; // load.s.pri 00005678
emit load.s.pri local_var; // load.s.pri fffffffc
emit load.s.pri 0xFEDC; // load.s.pri 0000fedc
DEF_SNIPPET(0x2);
emit call global_func; // call 00000008
emit sysreq.c global_native; // sysreq.c 00000000
emit sysreq.n global_native 0; // push.c 00000000 \ sysreq.c 00000000 \ stack 00000004
DEF_SNIPPET(0x3);
emit lodb.i global_const_1; // lodb.i 00000001
emit lodb.i local_const_1; // lodb.i 00000001
emit lodb.i 1; // lodb.i 00000001
emit lodb.i 2; // lodb.i 00000002
emit lodb.i 4; // lodb.i 00000004
emit lodb.i 0x1; // lodb.i 00000001
emit lodb.i 0x2; // lodb.i 00000002
emit lodb.i 0x4; // lodb.i 00000004
DEF_SNIPPET(0x4);
emit align.pri global_const_1; // align.pri 00000001
emit align.pri local_const_1; // align.pri 00000001
emit align.pri 0; // align.pri 00000000
emit align.pri 1; // align.pri 00000001
emit align.pri 2; // align.pri 00000002
emit align.pri 3; // align.pri 00000003
emit align.pri 0x0; // align.pri 00000000
emit align.pri 0x1; // align.pri 00000001
emit align.pri 0x2; // align.pri 00000002
emit align.pri 0x3; // align.pri 00000003
DEF_SNIPPET(0x5);
// push.c 00001234 \ push.c 00005678 \ push.c 00009abc
emit push3.c global_const_1234 local_const_5678 0x9ABC;
// push.c push.c 00000000 \ push.c 00000004 \ push.c 0000000c \ push.c 0000000c \ push.c fffffffc
emit push5.c global_var global_array local_static_var local_refvar local_var;
DEF_SNIPPET(0x6);
// push 00000000 \ push 0000000c
emit push2 global_var local_static_var;
DEF_SNIPPET(0x7);
// push.s 00001234 \ push.s 00005678 \ push.s 0000000c \ push.s 00000010 \ push.s fffffffc
emit push5.s global_const_1234 local_const_5678 local_refvar local_refarray local_var;
DEF_SNIPPET(0x8);
// push.adr 00001234 \ push.adr 00005678 \ push.adr 0000000c \ push.adr 00000010 \ push.adr fffffffc
emit push5.adr global_const_1234 local_const_5678 local_refvar local_refarray local_var;
DEF_SNIPPET(0x9);
// push.pri \ const.pri 00001234 \ stor.pri 00000000 \ pop.pri
emit const global_var global_const_1234;
// push.pri \ const.pri 00005678 \ stor.pri 0000000c \ pop.pri
emit const local_static_var local_const_5678;
DEF_SNIPPET(0xa);
// push.pri \ const.pri 00005678 \ stor.s.pri fffffffc \ pop.pri
emit const.s local_var local_const_5678;
DEF_SNIPPET(0xb);
// load.pri 00000000 \ load.alt 0000000c
emit load.both global_var local_static_var;
DEF_SNIPPET(0xc);
// load.pri 0000000c \ load.alt fffffffc
emit load.s.both local_refvar local_var;
DEF_SNIPPET(0x10);
emit addr.u.pri global_var; // zero.pri
emit addr.u.alt global_var; // zero.alt
emit addr.u.pri local_refvar; // load.s.pri 0000000c
emit addr.u.alt local_refvar; // load.s.alt 0000000c
emit addr.u.pri local_var; // addr.pri fffffffc
emit addr.u.alt local_var; // addr.alt fffffffc
emit addr.u.pri local_static_var; // const.pri 0000000c
emit addr.u.alt local_static_var; // const.alt 0000000c
DEF_SNIPPET(0x11);
emit addr.u.pri global_array[0]; // const.pri 00000004
emit addr.u.alt global_array[1]; // const.alt 00000008
emit addr.u.pri local_static_array[0]; // const.pri 00000010
emit addr.u.alt local_static_array[1]; // const.alt 00000014
emit addr.u.pri local_array[0]; // addr.pri fffffff4
emit addr.u.alt local_array[1]; // addr.alt fffffff8
emit addr.u.pri local_refarray[0]; // load.s.pri 00000010
emit addr.u.alt local_refarray[1]; // load.s.alt 00000014
DEF_SNIPPET(0x12);
emit addr.u.pri global_array{0}; // const.pri 00000004 \ align.pri 00000001
emit addr.u.alt global_array{1}; // const.alt 00000005 \ align.alt 00000001
emit addr.u.pri local_static_array{0}; // const.pri 00000010 \ align.pri 00000001
emit addr.u.alt local_static_array{1}; // const.alt 00000011 \ align.alt 00000001
emit addr.u.pri local_array{0}; // addr.pri fffffff4 \ align.pri 00000001
emit addr.u.alt local_array{1}; // addr.alt fffffff5 \ align.alt 00000001
DEF_SNIPPET(0x13);
emit addr.u.pri local_refarray{0}; // load.s.pri 00000010 \ align.pri 00000001
emit addr.u.alt local_refarray{0}; // load.s.alt 00000010 \ align.alt 00000001
emit addr.u.pri local_refarray{1}; // load.s.pri fffffff4 \ inc.pri \ align.pri 00000001
emit addr.u.alt local_refarray{1}; // load.s.alt fffffff4 \ inc.alt \ align.alt 00000001
emit addr.u.pri local_refarray{2}; // load.s.pri fffffff5 \ add.c 00000002 \ align.pri 00000001
emit addr.u.alt local_refarray{2}; // load.s.pri fffffff5 \ add.c 00000002 \ move.alt \ align.alt 00000001
DEF_SNIPPET(0x14);
emit addr.u.pri global_array[local_var]; // load.s.pri fffffffc \ const.alt 00000004 \ idxaddr
emit addr.u.alt global_array[local_var]; // load.s.pri fffffffc \ const.alt 00000004 \ idxaddr \ move.alt
emit addr.u.pri local_static_array[local_var]; // load.s.pri fffffffc \ const.alt 00000010 \ idxaddr
emit addr.u.alt local_static_array[local_var]; // load.s.pri fffffffc \ const.alt 00000010 \ idxaddr \ move.alt
emit addr.u.pri local_array[local_var]; // load.s.pri fffffffc \ addr.alt fffffff4 \ idxaddr
emit addr.u.alt local_array[local_var]; // load.s.pri fffffffc \ addr.alt fffffff4 \ idxaddr \ move.alt
emit addr.u.pri local_refarray[local_var]; // load.s.pri fffffffc \ load.s.alt 00000010 \ idxaddr
emit addr.u.alt local_refarray[local_var]; // load.s.pri fffffffc \ load.s.alt 00000010 \ idxaddr \ move.alt
DEF_SNIPPET(0x15);
emit addr.u.pri global_array{local_var}; // load.s.pri fffffffc \ add.c 00000004 \ align.pri 00000001
emit addr.u.alt global_array{local_var}; // load.s.pri fffffffc \ add.c 00000004 \ align.pri 00000001 \ move.alt
emit addr.u.pri local_static_array{local_var}; // load.s.pri fffffffc \ add.c 00000010 \ align.pri 00000001
emit addr.u.alt local_static_array{local_var}; // load.s.pri fffffffc \ add.c 00000010 \ align.pri 00000001 \ move.alt
emit addr.u.pri local_array{local_var}; // load.s.pri fffffffc \ addr.alt fffffff4 \ add \ align.pri 00000001
emit addr.u.alt local_array{local_var}; // load.s.pri fffffffc \ addr.alt fffffff4 \ add \ align.pri 00000001 \ move.alt
emit addr.u.pri local_refarray{local_var}; // load.s.pri fffffffc \ load.s.alt 00000010 \ add \ align.pri 00000001
emit addr.u.alt local_refarray{local_var}; // load.s.pri fffffffc \ load.s.alt 00000010 \ add \ align.pri 00000001 \ move.alt
DEF_SNIPPET(0x16);
emit addr.u.pri global_array[global_func()]; // push.c 0 \ call global_func \ const.alt 00000004 \ idxaddr
emit addr.u.alt global_array[global_func()]; // push.c 0 \ call global_func \ const.alt 00000004 \ idxaddr \ move.alt
DEF_SNIPPET(0x17);
emit addr.u.pri global_array{global_func()}; // push.c 0 \ call global_func \ add.c 00000004 \ align.pri 00000001
emit addr.u.alt global_array{global_func()}; // push.c 0 \ call global_func \ add.c 00000004 \ align.pri 00000001 \ move.alt
DEF_SNIPPET(0x18);
emit load.u.pri global_const_1234; // const.pri 00001234
emit load.u.pri global_var; // load.pri 00000000
emit load.u.pri local_refvar; // lref.s.pri 0000000c
emit load.u.pri local_const_5678; // const.pri 00005678
emit load.u.pri local_var; // load.s.pri fffffffc
emit load.u.pri local_static_var; // load.pri 0000000c
emit load.u.pri 0x9abc; // const.pri 00009abc
DEF_SNIPPET(0x19);
emit load.u.pri global_const_1234 + local_const_5678; // const.pri 000068ac
DEF_SNIPPET(0x1a);
emit load.u.alt global_var * local_var; // load.pri 00000000 \ push.pri \ load.s.pri fffffffc \ pop.alt \ smul \ move.alt
DEF_SNIPPET(0x1b);
emit load.u.pri local_refarray[0]; // load.s.pri 00000010 \ load.i
DEF_SNIPPET(0x20);
emit stor.u.pri global_var; // stor.pri 00000000
emit stor.u.alt global_var; // stor.alt 00000000
emit stor.u.pri local_refvar; // sref.s.pri 0000000c
emit stor.u.alt local_refvar; // sref.s.alt 0000000c
emit stor.u.pri local_var; // stor.s.pri fffffffc
emit stor.u.alt local_var; // stor.s.alt fffffffc
emit stor.u.pri local_static_var; // stor.pri 0000000c
emit stor.u.alt local_static_var; // stor.alt 0000000c
DEF_SNIPPET(0x21);
emit stor.u.pri global_array[0]; // stor.pri 00000004
emit stor.u.alt global_array[1]; // stor.alt 00000008
emit stor.u.pri local_array[0]; // stor.s.pri fffffff4
emit stor.u.alt local_array[1]; // stor.s.alt fffffff8
emit stor.u.pri local_refarray[0]; // sref.s.pri 00000010
emit stor.u.pri local_refarray[1]; // move.alt \ load.s.pri 00000010 \ add.c 00000004 \ xchg \ stor.i
emit stor.u.alt local_refarray[1]; // load.s.pri 00000010 \ add.c 00000004 \ xchg \ stor.i
DEF_SNIPPET(0x22);
emit stor.u.pri global_array{0}; // const.alt 00000004 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.alt global_array{0}; // move.pri \ const.alt 00000004 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.pri global_array{1}; // const.alt 00000005 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.alt global_array{1}; // move.pri \ const.alt 00000005 \ align.alt 00000001 \ strb.i 00000001
DEF_SNIPPET(0x23);
emit stor.u.pri local_array{0}; // addr.alt fffffff4 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.alt local_array{0}; // move.pri \ addr.alt fffffff4 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.pri local_array{1}; // addr.alt fffffff5 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.alt local_array{1}; // move.pri \ addr.alt fffffff5 \ align.alt 00000001 \ strb.i 00000001
DEF_SNIPPET(0x24);
emit stor.u.pri local_refarray{0}; // load.s.alt 00000010 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.alt local_refarray{0}; // move.pri \ load.s.alt 00000010 \ align.alt 00000001 \ strb.i 00000001
emit stor.u.pri local_refarray{1}; // load.s.alt 00000010 \ inc.alt \ align.alt 00000001 \ strb.i 00000001
emit stor.u.alt local_refarray{1}; // move.pri \ load.s.alt 00000010 \ inc.alt \ align.alt 00000001 \ strb.i 00000001
emit stor.u.pri local_refarray{2}; // move.alt \ load.s.pri 00000010 \ add.c 00000002 \ xchg \ align.alt 00000001 \ strb.i 00000001
emit stor.u.alt local_refarray{2}; // load.s.pri 00000010 \ add.c 00000002 \ xchg \ align.alt 00000001 \ strb.i 00000001
DEF_SNIPPET(0x25);
emit stor.u.pri global_array[local_var]; // push.pri \ load.s.pri fffffffc \ const.alt 00000004 \ idxaddr \ move.alt \ pop.pri \ stor.i
emit stor.u.alt global_array[local_var]; // push.alt \ load.s.pri fffffffc \ const.alt 00000004 \ idxaddr \ move.alt \ pop.pri \ stor.i
emit stor.u.pri local_array[local_var]; // push.pri \ load.s.pri fffffffc \ addr.alt fffffff4 \ idxaddr \ move.alt \ pop.pri \ stor.i
emit stor.u.alt local_array[local_var]; // push.alt \ load.s.pri fffffffc \ addr.alt fffffff4 \ idxaddr \ move.alt \ pop.pri \ stor.i
emit stor.u.pri local_refarray[local_var]; // push.pri \ load.s.pri fffffffc \ load.s.alt 00000010 \ idxaddr \ move.alt \ pop.pri \ stor.i
emit stor.u.alt local_refarray[local_var]; // push.alt \ load.s.pri fffffffc \ load.s.alt 00000010 \ idxaddr \ move.alt \ pop.pri \ stor.i
DEF_SNIPPET(0x26);
emit stor.u.pri global_array{local_var}; // push.pri \ load.s.pri fffffffc \ add.c 00000004 \ align.pri 00000001 \ move.alt \ pop.pri \ strb.i 00000001
emit stor.u.alt global_array{local_var}; // push.alt \ load.s.pri fffffffc \ add.c 00000004 \ align.pri 00000001 \ move.alt \ pop.pri \ strb.i 00000001
emit stor.u.pri local_array{local_var}; // push.pri \ load.s.pri fffffffc \ addr.alt fffffff4 \ add \ align.pri 00000001 \ move.alt \ pop.pri \ strb.i 00000001
emit stor.u.alt local_array{local_var}; // push.alt \ load.s.pri fffffffc \ addr.alt fffffff4 \ add \ align.pri 00000001 \ move.alt \ pop.pri \ strb.i 00000001
emit stor.u.pri local_refarray{local_var}; // push.pri \ load.s.pri fffffffc \ load.s.alt 00000010 \ add \ align.pri 00000001 \ move.alt \ pop.pri \ strb.i 00000001
emit stor.u.alt local_refarray{local_var}; // push.alt \ load.s.pri fffffffc \ load.s.alt 00000010 \ add \ align.pri 00000001 \ move.alt \ pop.pri \ strb.i 00000001
DEF_SNIPPET(0x28);
emit push.u global_const_1234; // push.c 00001234
emit push.u global_var; // push 00000000
emit push.u local_refvar; // lref.s.pri 0000000c \ push.pri
emit push.u local_const_5678; // push.c 00005678
emit push.u local_var; // push.s fffffffc
emit push.u local_static_var; // push 0000000c
emit push.u 0x9abc; // push.c 00009abc
DEF_SNIPPET(0x29);
emit push.u global_const_1234 + local_const_5678; // push.c 000068ac
DEF_SNIPPET(0x2a);
emit push.u global_var * local_var; // load.pri 00000000 \ push.pri \ load.s.pri fffffffc \ pop.alt \ smul \ push.pri
DEF_SNIPPET(0x2b);
emit push.u local_refarray[0]; // load.s.pri 00000010 \ load.i \ push.pri
DEF_SNIPPET(0x30);
emit push.u.adr global_var; // push.c 00000000
emit push.u.adr local_static_var; // push.c 0000000c
emit push.u.adr local_var; // push.adr fffffffc
emit push.u.adr local_refvar; // push.s 0000000c
DEF_SNIPPET(0x31);
emit push.u.adr global_array[0]; // push.c 00000004
emit push.u.adr global_array[1]; // push.c 00000008
emit push.u.adr local_static_array[0]; // push.c 00000010
emit push.u.adr local_static_array[1]; // push.c 00000014
emit push.u.adr local_array[0]; // push.adr fffffff4
emit push.u.adr local_array[1]; // push.adr fffffff8
emit push.u.adr local_refarray[0]; // push.s 00000010
emit push.u.adr local_refarray[1]; // load.s.pri 00000010 \ add.c 00000004 \ push.pri
DEF_SNIPPET(0x32);
emit push.u.adr global_array[local_var]; // load.s.pri fffffffc \ const.alt 00000004 \ idxaddr \ push.pri
emit push.u.adr local_static_array[local_var]; // load.s.pri fffffffc \ const.alt 00000010 \ idxaddr \ push.pri
emit push.u.adr local_array[local_var]; // load.s.pri fffffffc \ addr.alt fffffff4 \ idxaddr \ push.pri
emit push.u.adr local_refarray[local_var]; // load.s.pri fffffffc \ load.s.alt 00000010 \ idxaddr \ push.pri
// DEF_SNIPPET(0x33);
// emit push.u.adr global_array{0}; // const.pri 00000004 \ align.pri 00000001 \ push.pri
// emit push.u.adr global_array{1}; // const.pri 00000005 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_static_array{0}; // const.pri 00000010 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_static_array{1}; // const.pri 00000011 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_array{0}; // addr.pri fffffff4 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_array{1}; // addr.pri fffffff5 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_refarray{0}; // load.s.pri 00000010 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_refarray{1}; // load.s.pri 00000010 \ inc.pri \ align.pri 00000001 \ push.pri
// emit push.u.adr local_refarray{2}; // load.s.pri 00000010 \ add.c 00000002 \ align.pri 00000001 \ push.pri
// DEF_SNIPPET(0x34);
// emit push.u.adr global_array{local_var}; // load.s.pri fffffffc \ add.c 00000004 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_static_array{local_var}; // load.s.pri fffffffc \ add.c 00000010 \ align.pri 00000001 \ push.pri
// emit push.u.adr local_array{local_var}; // load.s.pri fffffffc \ addr.alt fffffff4 \ add \ align.pri 00000001 \ push.pri
// emit push.u.adr local_refarray{local_var}; // load.s.pri fffffffc \ load.s.alt 00000010 \ add \ align.pri 00000001 \ push.pri
DEF_SNIPPET(0x38);
emit zero.u global_var; // zero 00000000
emit zero.u local_static_var; // zero 0000000c
emit zero.u local_var; // zero.s fffffffc
emit zero.u local_refvar; // zero.pri \ sref.s.pri 0000000c
DEF_SNIPPET(0x39);
emit zero.u global_array[0]; // zero 00000004
emit zero.u global_array[1]; // zero 00000008
emit zero.u local_static_array[0]; // zero 00000010
emit zero.u local_static_array[1]; // zero 00000014
emit zero.u local_array[0]; // zero.s fffffff4
emit zero.u local_array[1]; // zero.s fffffff8
emit zero.u local_refarray[0]; // zero.pri \ sref.s.pri 00000010
emit zero.u local_refarray[1]; // load.s.pri 00000010 \ add.c 00000004 \ move.alt \ zero.pri \ stor.i
DEF_SNIPPET(0x3a);
emit zero.u global_array{0}; // const.alt 00000004 \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u global_array{1}; // const.alt 00000005 \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u local_static_array{0}; // const.alt 00000010 \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u local_static_array{1}; // const.alt 00000011 \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u local_array{0}; // addr.alt fffffff4 \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u local_array{1}; // addr.alt fffffff5 \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u local_refarray{0}; // load.s.alt 00000010 \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u local_refarray{1}; // load.s.alt 00000010 \ inc.alt \ align.alt 00000001 \ zero.pri \ strb.i 00000001
emit zero.u local_refarray{2}; // load.s.pri 00000010 \ add.c 00000002 \ move.alt \ align.alt 00000001 \ zero.pri \ strb.i 00000001
DEF_SNIPPET(0x3b);
emit zero.u global_array[local_var]; // load.s.pri fffffffc \ const.alt 00000004 \ idxaddr \ move.alt \ zero.pri \ stor.i
emit zero.u local_static_array[local_var]; // load.s.pri fffffffc \ const.alt 00000010 \ idxaddr \ move.alt \ zero.pri \ stor.i
emit zero.u local_array[local_var]; // load.s.pri fffffffc \ addr.alt fffffff4 \ idxaddr \ move.alt \ zero.pri \ stor.i
emit zero.u local_refarray[local_var]; // load.s.pri fffffffc \ load.s.alt 00000010 \ idxaddr \ move.alt \ zero.pri \ stor.i
DEF_SNIPPET(0x3c);
emit zero.u global_array{local_var}; // load.s.pri fffffffc \ add.c 00000004 \ align.pri 00000001 \ move.alt \ zero.pri \ strb.i 00000001
emit zero.u local_static_array{local_var}; // load.s.pri fffffffc \ add.c 00000010 \ align.pri 00000001 \ move.alt \ zero.pri \ strb.i 00000001
emit zero.u local_array{local_var}; // load.s.pri fffffffc \ addr.alt fffffff4 \ add \ align.pri 00000001 \ move.alt \ zero.pri \ strb.i 00000001
emit zero.u local_refarray{local_var}; // load.s.pri fffffffc \ load.s.alt 00000010 \ add \ align.pri 00000001 \ move.alt \ zero.pri \ strb.i 00000001
DEF_SNIPPET(0x40);
emit inc.u global_var; // inc 00000000
emit inc.u local_static_var; // inc 0000000c
emit inc.u local_var; // inc.s fffffffc
emit inc.u local_refvar; // load.s.pri 0000000c \ inc.i
DEF_SNIPPET(0x41);
emit inc.u global_array[0]; // inc 00000004
emit inc.u global_array[1]; // inc 00000008
emit inc.u local_static_array[0]; // inc 00000010
emit inc.u local_static_array[1]; // inc 00000014
emit inc.u local_array[0]; // inc.s fffffff4
emit inc.u local_array[1]; // inc.s fffffff8
emit inc.u local_refarray[0]; // load.s.pri 00000010 \ inc.i
emit inc.u local_refarray[1]; // load.s.pri 00000010 \ add.c 00000004 \ inc.i
DEF_SNIPPET(0x42);
emit inc.u global_array{0}; // const.pri 00000004 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u global_array{1}; // const.pri 00000005 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_static_array{0}; // const.pri 00000010 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_static_array{1}; // const.pri 00000011 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_array{0}; // addr.pri fffffff4 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_array{1}; // addr.pri fffffff5 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_refarray{0}; // load.s.pri 00000010 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_refarray{1}; // load.s.pri 00000010 \ inc.pri \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_refarray{2}; // load.s.pri 00000010 \ add.c 00000002 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
DEF_SNIPPET(0x43);
emit inc.u global_array[local_var]; // load.s.pri fffffffc \ const.alt 00000004 \ idxaddr \ inc.i
emit inc.u local_static_array[local_var]; // load.s.pri fffffffc \ const.alt 00000010 \ idxaddr \ inc.i
emit inc.u local_array[local_var]; // load.s.pri fffffffc \ addr.alt fffffff4 \ idxaddr \ inc.i
emit inc.u local_refarray[local_var]; // load.s.pri fffffffc \ load.s.alt 00000010 \ idxaddr \ inc.i
DEF_SNIPPET(0x44);
emit inc.u global_array{local_var}; // load.s.pri fffffffc \ add.c 00000004 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_static_array{local_var}; // load.s.pri fffffffc \ add.c 00000010 \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_array{local_var}; // load.s.pri fffffffc \ addr.alt fffffff4 \ add \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit inc.u local_refarray{local_var}; // load.s.pri fffffffc \ load.s.alt 00000010 \ add \ align.pri 00000001 \ move.alt \ lodb.i 00000001 \ inc.pri \ strb.i 00000001
emit nop; // end marker
}
main()
{
new t, a[2];
test__pcode(t, a);
}