/* * This file was created automatically from SUIF * on Mon Mar 16 14:45:31 1998. * * Created by: * s2c 5.138 (plus local changes) compiled Wed Aug 13 18:35:11 MET DST 1997 by muller on drogo * Based on SUIF distribution 1.1.2 * Linked with: * libsuif 5.228 compiled Thu Nov 7 14:46:16 MET 1996 by marlet on drogo * libuseful 1.243 compiled Thu Nov 7 14:51:28 MET 1996 by marlet on drogo */ struct inst { int opcode; int val; }; extern int mem[]; extern int stack[]; extern int top; extern int prg_size; extern struct inst prg[]; extern void interpret(struct inst *); extern int printf(); extern int exit(); extern void interpret(struct inst *prg) { int pc; int sp; pc = 0; sp = 0; if (pc < prg_size) { do { if (prg[pc].opcode == 0) { sp = sp + 1; stack[sp] = prg[pc].val; } else { if (prg[pc].opcode == 1) { sp = sp - 1; } else { if (prg[pc].opcode == 2) { stack[sp - 1] = stack[sp] + stack[sp - 1]; sp = sp - 1; } else { if (prg[pc].opcode == 3) { stack[sp - 1] = stack[sp - 1] - stack[sp]; sp = sp - 1; } else { if (prg[pc].opcode == 4) { stack[sp - 1] = stack[sp] * stack[sp - 1]; sp = sp - 1; } else { if (prg[pc].opcode == 5) { stack[sp] = mem[stack[sp]]; } else { if (prg[pc].opcode == 6) { mem[stack[sp]] = stack[sp - 1]; sp = sp - 2; } else { printf("\n Unrecognized instruction -> %d at %d\n", prg[pc].opcode, pc); exit(); } } } } } } } pc = pc + 1; } while (pc < prg_size); } return; }