Exemple #1
0
int main () {
  carp_value val = 127;
  carp_value code[] = {CARP_I(LOADR), CARP_R0, val,

		       CARP_I(MOV), CARP_R1, CARP_R0,

		       CARP_I(MOV), CARP_R2, CARP_R0,
		       CARP_I(INCR), CARP_R2,

		       CARP_I(MOV), CARP_R3, CARP_R0,
		       CARP_I(DECR), CARP_R3,

		       CARP_I(HALT), EXIT_SUCCESS};

  carp_vm_init(&m, 1, 0);
  carp_vm_load(&m, code, sizeof(code)/sizeof(*code));
  carp_vm_run(&m);
  carp_vm_cleanup(&m);

  plan(NO_PLAN);

  ok(m.regs[CARP_R0] == val, "Set register successfully.");
  ok(m.regs[CARP_R1] == val, "Moved register successfully.");
  ok(m.regs[CARP_R2] == val + 1, "Incremented register successfully.");
  ok(m.regs[CARP_R3] == val - 1, "Decremented register successfully.");

  done_testing();
}
Exemple #2
0
int main (int argc, char **argv) {
  carp_value code[] = {
    CARP_INSTR_PUSH, 5,
    CARP_INSTR_PUSH, 6,
    CARP_INSTR_PREG,  CARP_SP,

    CARP_INSTR_DECR, CARP_SP,
    CARP_INSTR_POP, CARP_GBG,
    CARP_INSTR_PREG, CARP_GBG,

    CARP_INSTR_HALT, 1
  };

  carp_machine_state m;
  carp_vm_init(&m, 10, 0);
  carp_vm_load(&m, code, sizeof(code)/sizeof(*code));
  carp_value ecode = carp_vm_run(&m);
  carp_vm_cleanup(&m);
  return ecode;
}
Exemple #3
0
int main (int argc, char **argv) {
  long long code[] = {
    CARP_INSTR_GLOAD, -5, // 1st arg
    CARP_INSTR_GLOAD, -4, // 2nd arg
    CARP_INSTR_ADD,
    CARP_INSTR_RET,

    CARP_INSTR_PUSH, 7, // 1st arg
    CARP_INSTR_PUSH, 9, // 2nd arg
    CARP_INSTR_CALL, 0, 2,

    CARP_INSTR_PTOP,

    CARP_INSTR_HALT, 0
  };

  carp_machine_state m;
  carp_vm_init(&m, 1, 6);
  carp_vm_load(&m, code, sizeof(code));
  carp_vm_run(&m);
}