typedef void (*inst_t)(void **ip, long *sp, long, long, long, long);

//__attribute__((regcall))
void minus00(void **ip, long *sp, long s4, long s3, long s2, long TOS)
{
  sp[1] -= sp[0];
  sp++;
  inst_t next = *ip;
  ip++;
  /*__attribute__((musttail))*/ return next(ip,sp, s4, s3, s2, TOS);
}

void minus11(void **ip, long *sp, long s4, long s3, long s2, long TOS)
{
  TOS = sp[0]-TOS;
  sp++;
  inst_t next = *ip;
  ip++;
  /*__attribute__((musttail))*/ return next(ip,sp, s4, s3, s2, TOS);
}

void minus44(void **ip, long *sp, long s4, long s3, long s2, long TOS)
{
  TOS -= s2;
  s2 = s3;
  s3 = s4;
  s4 = sp[0];
  sp++;
  inst_t next = *ip;
  ip++;
  /*__attribute__((musttail))*/ return next(ip,sp, s4, s3, s2, TOS);
}

void minus01(void **ip, long *sp, long s4, long s3, long s2, long s1)
{
  s1 = sp[1]-sp[0];
  sp+=2;
  inst_t next = *ip;
  ip++;
  /*__attribute__((musttail))*/ return next(ip,sp, s4, s3, s2, s1);
}

void minus21(void **ip, long *sp, long s4, long s3, long s2, long s1)
{
  s1 = s1-s2;
  inst_t next = *ip;
  ip++;
  /*__attribute__((musttail))*/ return next(ip,sp, s4, s3, s2, s1);
}


