#if !defined(COMMAND_NEW) #error #endif int main(void) { salis_init(); while (mvec_is_proc_owner(g_cores, g_cores->pvec->ip, g_cores->pcur)) { uint8_t inst = mvec_get_inst(g_cores, g_cores->pvec->ip); if (inst != pshn && inst != popn) { salis_step(1); continue; } uint64_t *reg = &g_cores->pvec->r0x; switch (mvec_get_inst(g_cores, g_cores->pvec->ip + 1)) { case nop0: reg = &g_cores->pvec->r0x; break; case nop1: reg = &g_cores->pvec->r1x; break; case nop2: reg = &g_cores->pvec->r2x; break; case nop3: reg = &g_cores->pvec->r3x; break; } uint64_t reg_val = *reg; uint64_t stack_val[8] = { g_cores->pvec->s0, g_cores->pvec->s1, g_cores->pvec->s2, g_cores->pvec->s3, g_cores->pvec->s4, g_cores->pvec->s5, g_cores->pvec->s6, g_cores->pvec->s7, }; salis_step(1); switch (inst) { case pshn: assert(*reg == reg_val); assert(g_cores->pvec->s0 == *reg); assert(g_cores->pvec->s1 == stack_val[0]); assert(g_cores->pvec->s2 == stack_val[1]); assert(g_cores->pvec->s3 == stack_val[2]); assert(g_cores->pvec->s4 == stack_val[3]); assert(g_cores->pvec->s5 == stack_val[4]); assert(g_cores->pvec->s6 == stack_val[5]); assert(g_cores->pvec->s7 == stack_val[6]); break; case popn: assert(*reg == stack_val[0]); assert(g_cores->pvec->s0 == stack_val[1]); assert(g_cores->pvec->s1 == stack_val[2]); assert(g_cores->pvec->s2 == stack_val[3]); assert(g_cores->pvec->s3 == stack_val[4]); assert(g_cores->pvec->s4 == stack_val[5]); assert(g_cores->pvec->s5 == stack_val[6]); assert(g_cores->pvec->s6 == stack_val[7]); assert(g_cores->pvec->s7 == 0); break; } } salis_free(); return 0; }