示例#1
0
int tracevalue(void)
{
  if (critbit0_contains(&traced,&x)) return 1;
  if (!critbit0_insert(&totrace,0,&x)) return -1;

  for (;;) {
    switch(critbit0_firstprefixed(&totrace,0,&x,&empty)) {
      case 1: critbit0_delete(&totrace,0,&x); break;
      case 0: if (!str0_increment(&value,0)) return -1; return 1;
      default: return -1;
    }
    if (critbit0_contains(&blockvisible,&x))
      if (!critbit0_contains(&blocklive,&x))
	continue;
    if (!critbit0_contains(&traced,&x)) {
      if (!critbit0_insert(&traced,0,&x)) return -1;
      if (!str0_copy(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&value)) return -1;
      if (!critbit0_insert(&values,0,&key)) return -1;
      if (!str0_copy(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (critbit0_allprefixed(&assignusegraph,0,&y,&key,addtotrace) < 1) return -1;
    }
  }
}
示例#2
0
int printkill(void)
{
  if (!str0_concatc(&outputline,0,"kill>")) return -1;
  if (!str0_concat(&outputline,0,&v)) return -1;
  if (!str0_concatc(&outputline,0,":")) return -1;
  return 1;
}
示例#3
0
int preallocate2(void)
{
  switch(preallocate2_state) {
    case 0:
      if (!str0_copy(&key,0,&reglimitprefix)) return -1;
      if (!str0_concat(&key,0,&y)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      switch(critbit0_firstprefixed(&values,0,&v,&key)) {
        case 1: break;
	case 0: return 0;
	default: return -1;
      }
      preallocate2_state = 1; return 1;
    case 1:
      if (!str0_copy(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&y)) return -1;
      if (critbit0_contains(&avoidregs,&key)) return 0;
      switch(critbit0_insert(&allocated,0,&v)) {
        case 2: break;
        case 1: return 0;
        default: return -1;
      }
      if (!critbit0_insert(&allocations,0,&key)) return -1;
      if (!str0_copy(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_copy(&u,0,&y)) return -1;
      if (critbit0_allprefixed(&conflicts,0,&z,&key,followconflict) < 1) return -1;
      break;
  }
  return 0;
}
示例#4
0
int findvars2(void)
{
  switch(findvars2_state) {
    case 0:
      if (!str0_copy(&n,0,&inputfield)) return -1;
      findvars2_state = 1; return 1;
    case 1:
      if (str0_equalc(&inputfield,"label")) { findvars2_state = 10; return 1; }
      if (str0_equalc(&inputfield,"type")) { findvars2_state = 20; return 1; }
      break;
    case 10:
      if (!str0_copy(&key,0,&inputfield)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&n)) return -1;
      if (!critbit0_insert(&labels,0,&key)) return -1;
      break;
    case 20:
      if (!str0_copy(&key,0,&inputfield)) return -1;
      findvars2_state = 21; return 1;
    case 21:
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&inputfield)) return -1;
      if (!critbit0_insert(&vtypes,0,&key)) return -1;
      if (!critbit0_insert(&alltypes,0,&inputfield)) return -1;
      break;
  }
  return 0;
}
示例#5
0
int printlivevalues(void)
{
  if (!str0_concatc(&outputline,0,"<")) return -1;
  if (!str0_concat(&outputline,0,&v)) return -1;
  if (!str0_concatc(&outputline,0,":")) return -1;
  return 1;
}
示例#6
0
int str0_getline(str0 *s,limitmalloc_pool *pool)
{
  char c;
  int pos;

  if (!str0_copyc(s,pool,"")) return -1;

  pos = 0;
  for (;;) {
    if (scanf("%c",&c) < 1) {
      if (ferror(stdin)) return -2;
      buf[pos] = 0;
      if (!str0_concatc(s,pool,buf)) return -1;
      if (!str0_length(s)) return 0;
      return 1;
    }
    if (c == '\n') {
      buf[pos] = 0;
      if (!str0_concatc(s,pool,buf)) return -1;
      return 2;
    }
    if (c == 0) c = '\n';
    buf[pos++] = c;
    if (pos == 128) {
      buf[pos] = 0; /* redundant */
      if (!str0_concatc(s,pool,buf)) return -1;
      pos = 0;
    }
  }
}
示例#7
0
int recordconflict(void)
{
  if (!str0_copy(&key,0,&z)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&y)) return -1;
  if (!critbit0_insert(&conflicts,0,&key)) return -1;
  if (!str0_copy(&key,0,&y)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&z)) return -1;
  if (!critbit0_insert(&conflicts,0,&key)) return -1;
  return 1;
}
示例#8
0
int findentries2(void)
{
  switch(findentries2_state) {
    case 0:
      if (!str0_copy(&n,0,&inputfield)) return -1;
      if (!str0_copy(&next,0,&inputfield)) return -1;
      if (!str0_increment(&next,0)) return -1;
      findentries2_state = 1; return 1;
    case 1:
      if (str0_equalc(&inputfield,"leave")) { findentries2_state = 20; return 1; }
      if (str0_equalc(&inputfield,"goto")) { findentries2_state = 30; return 1; }
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&next)) return -1;
      if (!critbit0_insert(&nextinsn,0,&key)) return -1;
      if (str0_equalc(&inputfield,"maybegoto")) { findentries2_state = 30; return 1; }
      if (str0_equalc(&inputfield,"enter")) { findentries2_state = 10; return 1; }
      break;
    case 10:
      if (!critbit0_insert(&blockbegins,0,&n)) return -1;
      if (!critbit0_insert(&entries,0,&n)) return -1;
      if (critbit0_allprefixed(&inputregs,0,&v,&empty,findentries3) < 1) nomem();
      break;
    case 20:
      if (!critbit0_insert(&exits,0,&n)) return -1;
      if (critbit0_allprefixed(&outputregs,0,&v,&empty,findexits3) < 1) nomem();
      break;
    case 30:
      if (!critbit0_insert(&blockbegins,0,&next)) return -1;
      if (!str0_copy(&key,0,&inputfield)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      switch(critbit0_firstprefixed(&labels,0,&next,&key)) {
	case 1:
	  break;
	case 0:
	  if (!str0_copyc(&outputline,0,"error:unknown label ")) return -1;
	  if (!str0_concat(&outputline,0,&key)) return -1;
	  if (!str0_concat(&outputline,0,&inputline)) return -1;
	  str0_putline(&outputline);
	  return 0;
	default: 
	  return -1;
      }
      if (!critbit0_insert(&blockbegins,0,&next)) return -1;
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&next)) return -1;
      if (!critbit0_insert(&nextinsn,0,&key)) return -1;
  }
  return 0;
}
示例#9
0
int followconflict(void)
{
  if (!str0_concatc(&z,0,":")) return -1;
  if (!str0_concat(&z,0,&u)) return -1;
  if (!critbit0_insert(&avoidregs,0,&z)) return -1;
  return 1;
}
示例#10
0
int findexits3(void)
{
  if (!str0_copy(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,":<")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!critbit0_insert(&uses,0,&key)) return -1;
  if (!str0_copy(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (critbit0_firstprefixed(&outputregassignments,0,&y,&key) < 1) return -1;
  if (!str0_copy(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,"<")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&y)) return -1;
  if (!critbit0_insert(&reglimitok,0,&key)) return -1;
  return 1;
}
示例#11
0
int recordfloat80(void)
{
  if (!str0_copy(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!critbit0_insert(&float80after,0,&key)) return -1;
  return 1;
}
示例#12
0
int findblocks_write(void)
{
  if (!str0_copy(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,">")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!critbit0_insert(&assignments,0,&key)) return -1;

  if (findblocks_kill() < 0) return -1;
  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&n)) return -1;
  if (!critbit0_insert(&blockassigned,0,&key)) return -1;

  return 1;
}
示例#13
0
int connectblocks(void)
{
  if (critbit0_contains(&blockbegins,&y)) {
    if (!str0_copy(&key,0,&y)) return -1;
    if (!str0_concatc(&key,0,"=")) return -1;
    if (!str0_concat(&key,0,&tracevar)) return -1;
    if (!critbit0_insert(&totrace,0,&key)) return -1;

    if (!str0_copy(&key,0,&traceinsn)) return -1;
    if (!str0_concatc(&key,0,"=")) return -1;
    if (!str0_concat(&key,0,&tracevar)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (!str0_concat(&key,0,&y)) return -1;
    if (!str0_concatc(&key,0,"=")) return -1;
    if (!str0_concat(&key,0,&tracevar)) return -1;
    if (!critbit0_insert(&assignusegraph,0,&key)) return -1;

    if (!str0_copy(&key,0,&y)) return -1;
    if (!str0_concatc(&key,0,"=")) return -1;
    if (!str0_concat(&key,0,&tracevar)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (!str0_concat(&key,0,&traceinsn)) return -1;
    if (!str0_concatc(&key,0,"=")) return -1;
    if (!str0_concat(&key,0,&tracevar)) return -1;
    if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
  }
  return 1;
}
示例#14
0
int printreg(void)
{
  if (!str0_concatc(&outputline,0,printreg_write ? ">" : "live<")) return -1;
  if (!str0_concat(&outputline,0,&v)) return -1;
  if (!str0_copy(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,printreg_write ? ">" : "=")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  switch(critbit0_firstprefixed(&values,0,&x,&key)) {
    case 1: break;
    case 0: goto done;
    default: return -1;
  }
  if (!str0_concatc(&outputline,0,"#")) return -1;
  if (!str0_concat(&outputline,0,&x)) return -1;
  if (!str0_copy(&key,0,&x)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  switch(critbit0_firstprefixed(&allocations,0,&y,&key)) {
    case 1: break;
    case 0: goto done;
    default: return -1;
  }
  if (!str0_concatc(&outputline,0,"=")) return -1;
  if (!str0_concat(&outputline,0,&y)) return -1;
  done:
  if (!str0_concatc(&outputline,0,":")) return -1;
  return 1;
}
示例#15
0
int convert(void)
{
  switch(convert_state) {
    case 0:
      if (!str0_concat(&outputline,0,&inputfield)) return -1;
      convert_state = 1; return 1;
    case 1:
      if (!str0_concatc(&outputline,0,":")) return -1;
      if (!str0_concat(&outputline,0,&inputfield)) return -1;
      convert_state = 2; return 1;
    case 2:
      if (!str0_concatc(&outputline,0,":")) return -1;
      if (!str0_concat(&outputline,0,&inputfield)) return -1;
      convertword_state = 0;
      if (str0_word(&inputword,0,&inputfield,convertword) < 0) return -1;
      return 1;
  }
}
示例#16
0
int allocate_dead(void)
{
  if (!str0_copy(&key,0,&x)) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (critbit0_firstprefixed(&values,0,&y,&key) < 1) return -1;
  if (!critbit0_contains(&livevalues,&y)) return 1;
  if (!critbit0_delete(&livevalues,0,&y)) return -1;

  if (!str0_copy(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (critbit0_firstprefixed(&vtypes,0,&z,&key) < 1) return -1;
  if (!str0_copy(&key,0,&z)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&y)) return -1;
  if (!critbit0_delete(&livevaluetypes,0,&key)) return -1;

  if (allocate_state == 2) {
    if (!str0_copy(&key,0,&y)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (critbit0_firstprefixed(&allocations,0,&z,&key) == 1) { /* always true */
      critbit0_delete(&liveregs,0,&z);
      if (!str0_copy(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,"#")) return -1;
      if (!str0_concat(&key,0,&y)) return -1;
      if (!str0_concatc(&key,0,"=")) return -1;
      if (!str0_concat(&key,0,&z)) return -1;
      critbit0_delete(&livefloat80regs,0,&key);
    }
  }

  return 1;
}
示例#17
0
int findblocks_finallinks2(void)
{
  static str0 v;

  switch(findblocks_finallinks2_state) {
    case 0:
      if (!str0_copy(&v,0,&x)) return -1;
      findblocks_finallinks2_state = 1; return 1;
    case 1:
      if (!str0_copy(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,findblocks_finallinks_writing ? ">" : "<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,"=")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!critbit0_insert(&usegraph,0,&key)) return -1;
      if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,"=")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,findblocks_finallinks_writing ? ">" : "<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
  }
  return 0;
}
示例#18
0
int findblocks_kill(void)
{
  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,"=")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!critbit0_insert(&blockkilled,0,&key)) return -1;

  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  switch(critbit0_firstprefixed(&blockassigned,0,&x,&key)) {
    case 1:
      if (!str0_concat(&key,0,&x)) return -1;
      critbit0_delete(&blockassigned,0,&key);
      break;
    case 0:
      break;
    default:
      return -1;
  }

  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  switch(critbit0_firstprefixed(&blockread,0,&x,&key)) {
    case 1:
      if (!str0_concat(&key,0,&x)) return -1;
      critbit0_delete(&blockread,0,&key);
      break;
    case 0:
      break;
    default:
      return -1;
  }
  return 1;
}
示例#19
0
int finduses_reglimit(int alpha)
{
  switch(finduses_reglimit_state) {
    case 0:
      if (!str0_equalc(&inputword,"=")) return 0;
      finduses_reglimit_state = 1; return 1;
    case 1:
      if (!str0_copy(&type,0,&inputword)) return -1;
      finduses_reglimit_state = 2; return 1;
    case 2:
      if (!str0_equalc(&inputword,"#")) return 0;
      finduses_reglimit_state = 3; return 1;
    case 3:
      if (!str0_copy(&key,0,&reglimit)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&type)) return -1;
      if (!str0_concatc(&key,0,"#")) return -1;
      if (!str0_concat(&key,0,&inputword)) return -1;
      if (!critbit0_insert(&reglimitok,0,&key)) return -1;
      break;
  }
  return 0;
}
示例#20
0
int convertword(int alpha)
{
  switch(convertword_state) {
    case 0: case 2:
      if (str0_equalc(&inputword,"inplace")) { convertword_state = 2; return 1; }
      if (!str0_equalc(&inputword,">") && !str0_equalc(&inputword,"<")) return 0;
      if (!str0_copy(&key,0,&n)) return -1;
      if (convertword_state == 2) {
        if (!str0_concatc(&key,0,"<")) return -1;
      } else {
        if (!str0_concat(&key,0,&inputword)) return -1;
      }
      convertword_state = 10;
      return 1;
    case 10:
      if (!str0_concat(&key,0,&inputword)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      switch(critbit0_firstprefixed(&values,0,&x,&key)) {
	case 1: break;
	case 0: return 0;
	default: return -1;
      }
      if (!str0_copy(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      switch(critbit0_firstprefixed(&allocations,0,&y,&key)) {
	case 1: break;
	case 0: return 0;
	default: return -1;
      }
      if (!str0_concatc(&outputline,0,"#")) return -1;
      if (!str0_concat(&outputline,0,&x)) return -1;
      if (!str0_concatc(&outputline,0,"=")) return -1;
      if (!str0_concat(&outputline,0,&y)) return -1;
      return 0;
  }
}
示例#21
0
int str0_increment(str0 *s,limitmalloc_pool *pool)
{
    char *x = *s;
    int64 len = str0_length(s);
    int64 i;

    for (i = len - 1; i >= 0; --i) {
        if (x[i] >= '0' && x[i] <= '8') {
            ++x[i];
            return 1;
        }
        x[i] = '0';
    }
    if (!str0_concatc(s,pool,"0")) return 0;
    s[0][0]++;
    return 1;
}
示例#22
0
int main(int argc,char **argv)
{
  for (;;)
    switch(str0_getline(&inputline,0)) {
      case 1: case 2:
	if (!str0_uint64(&key,0,inputlinesnum)) nomem();
	if (!str0_concatc(&key,0,":")) nomem();
	if (!str0_concat(&key,0,&inputline)) nomem();
        if (!critbit0_insert(&inputlines,0,&key)) nomem();
	++inputlinesnum;
        break;
      case 0:
	doit();
	return 0;
      default:
	return 111; /* XXX: louder? */
    }
}
示例#23
0
int findblocks2(void)
{
  if (critbit0_contains(&blockbegins,&inputfield)) {
    if (!str0_copy(&n,0,&inputfield)) return -1;
    for (;;) {
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":<")) return -1;
      if (critbit0_allprefixed(&uses,0,&v,&key,findblocks_read) < 1) return -1;

      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":kill>")) return -1;
      if (critbit0_allprefixed(&uses,0,&v,&key,findblocks_kill) < 1) return -1;

      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":>")) return -1;
      if (critbit0_allprefixed(&uses,0,&v,&key,findblocks_write) < 1) return -1;

      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_copy(&next,0,&n)) return -1;
      if (!str0_increment(&next,0)) return -1;
      if (!str0_concat(&key,0,&next)) return -1;
      if (critbit0_contains(&blockbegins,&next)) break;
      if (!critbit0_contains(&nextinsn,&key)) break;
      if (!str0_copy(&n,0,&next)) return -1;
    }

    if (!critbit0_insert(&blockends,0,&n)) return -1;
    if (!str0_copy(&key,0,&inputfield)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (!str0_concat(&key,0,&n)) return -1;
    if (!critbit0_insert(&blockleaps,0,&key)) return -1;

    findblocks_finallinks_writing = 1;
    if (!str0_copy(&key,0,&inputfield)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (critbit0_allprefixed(&blockassigned,0,&v,&key,findblocks_finallinks) < 1) nomem();

    findblocks_finallinks_writing = 0;
    if (!str0_copy(&key,0,&inputfield)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (critbit0_allprefixed(&blockread,0,&v,&key,findblocks_finallinks) < 1) nomem();

    return 0;
  }
  return 0;
}
示例#24
0
int allocate_alive(void)
{
  if (!str0_copy(&key,0,&x)) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (critbit0_firstprefixed(&values,0,&y,&key) < 1) return -1;
  if (critbit0_contains(&livevalues,&y)) return 1;

  if (!str0_copy(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (critbit0_firstprefixed(&vtypes,0,&type,&key) < 1) return -1;

  if (str0_equalc(&type,"flags")) return 1; /* XXX */

  if (allocate_state == 1) {
    if (!str0_copy(&key,0,&type)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (critbit0_allprefixed(&livevaluetypes,0,&z,&key,recordconflict) < 1) return -1;
  }

  if (!critbit0_insert(&livevalues,0,&y)) return -1;

  if (!str0_copy(&key,0,&type)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&y)) return -1;
  if (!critbit0_insert(&livevaluetypes,0,&key)) return -1;

  if (allocate_state == 2) {
    switch(critbit0_insert(&allocated,0,&y)) {
      case 2:
	break;
      case 1:
	if (!str0_copy(&key,0,&y)) return -1;
	if (!str0_concatc(&key,0,":")) return -1;
	if (critbit0_firstprefixed(&allocations,0,&z,&key) < 1) return -1;
	if (critbit0_contains(&liveregs,&z)) {
	  if (!str0_copyc(&outputline,0,"error:internal register misassignment:")) return -1;
	  if (!str0_concat(&outputline,0,&z)) return -1;
	  str0_putline(&outputline);
	}
	if (!critbit0_insert(&liveregs,0,&z)) return -1;
	if (str0_equalc(&type,"float80")) {
	  if (!str0_copy(&key,0,&v)) return -1;
	  if (!str0_concatc(&key,0,"#")) return -1;
	  if (!str0_concat(&key,0,&y)) return -1;
	  if (!str0_concatc(&key,0,"=")) return -1;
	  if (!str0_concat(&key,0,&z)) return -1;
	  if (!critbit0_insert(&livefloat80regs,0,&key)) return -1;
	}
	return 1;
      default:
	return -1;
    }
    if (!str0_copyc(&r,0,"1")) return -1;
    for (;;) {
      if (!str0_copy(&key,0,&type)) return -1;
      if (!str0_concatc(&key,0,"#")) return -1;
      if (!str0_concat(&key,0,&r)) return -1;
      if (!critbit0_contains(&liveregs,&key)) {
        if (!str0_copy(&key,0,&y)) return -1;
        if (!str0_concatc(&key,0,":")) return -1;
        if (!str0_concat(&key,0,&type)) return -1;
        if (!str0_concatc(&key,0,"#")) return -1;
        if (!str0_concat(&key,0,&r)) return -1;
        if (!critbit0_contains(&avoidregs,&key)) break;
      }
      if (!str0_increment(&r,0)) return -1;
    }
    if (!str0_copy(&key,0,&type)) return -1;
    if (!str0_concatc(&key,0,"#")) return -1;
    if (!str0_concat(&key,0,&r)) return -1;
    if (!critbit0_insert(&liveregs,0,&key)) return -1;
    if (str0_equalc(&type,"float80")) {
      if (!str0_copy(&z,0,&v)) return -1;
      if (!str0_concatc(&z,0,"#")) return -1;
      if (!str0_concat(&z,0,&y)) return -1;
      if (!str0_concatc(&z,0,"=")) return -1;
      if (!str0_concat(&z,0,&key)) return -1;
      if (!critbit0_insert(&livefloat80regs,0,&z)) return -1;
    }
    if (!str0_copy(&key,0,&y)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (!str0_concat(&key,0,&type)) return -1;
    if (!str0_concatc(&key,0,"#")) return -1;
    if (!str0_concat(&key,0,&r)) return -1;
    if (!critbit0_insert(&allocations,0,&key)) return -1;
    if (!str0_copy(&key,0,&y)) return -1;
    if (!str0_concatc(&key,0,":")) return -1;
    if (!str0_copy(&u,0,&type)) return -1;
    if (!str0_concatc(&u,0,"#")) return -1;
    if (!str0_concat(&u,0,&r)) return -1;
    if (critbit0_allprefixed(&conflicts,0,&z,&key,followconflict) < 1) return -1;
    return 1;
  }

  return 1;
}
示例#25
0
int allocate(void)
{
  if (critbit0_contains(&traced,&n)) {
    if (!str0_copyc(&outputline,0,"error:falling through entry:")) return -1;
    if (!str0_concat(&outputline,0,&n)) return -1;
    str0_putline(&outputline);
    return 1;
  }

  for (;;) {
    if (!critbit0_contains(&traced,&n)) {
      if (!critbit0_insert(&traced,0,&n)) return -1;

      if (critbit0_contains(&blockbegins,&n)) {
	critbit0_clear(&livevalues,0);
	critbit0_clear(&livevaluetypes,0);
	critbit0_clear(&liveregs,0);
	critbit0_clear(&livefloat80regs,0);
      }

      if (!str0_copy(&x,0,&n)) return -1;
      if (!str0_concatc(&x,0,"=")) return -1;
      if (critbit0_allprefixed(&blocklive,0,&v,&x,allocate_alive) < 0) return -1;

      if (!str0_copy(&x,0,&n)) return -1;
      if (!str0_concatc(&x,0,"<")) return -1;
      if (critbit0_allprefixed(&reads,0,&v,&x,allocate_alive) < 0) return -1;

      if (!str0_copy(&x,0,&n)) return -1;
      if (!str0_concatc(&x,0,"<")) return -1;
      if (critbit0_allprefixed(&finalreads,0,&v,&x,allocate_dead) < 0) return -1;

      if (!str0_copy(&x,0,&n)) return -1;
      if (!str0_concatc(&x,0,">")) return -1;
      if (critbit0_allprefixed(&assignments,0,&v,&x,allocate_alive) < 0) return -1;

      if (critbit0_allprefixed(&livefloat80regs,0,&v,&empty,recordfloat80) < 0) return -1;

      if (!str0_copy(&next,0,&n)) return -1;
      if (!str0_increment(&next,0)) return -1;
  
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (critbit0_allprefixed(&nextinsn,0,&y,&key,addtotrace) < 0) return -1;
  
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&next)) return -1;
      if (critbit0_contains(&nextinsn,&key)) {
        if (!str0_copy(&n,0,&next)) return -1;
        continue;
      }
    }

    switch(critbit0_firstprefixed(&totrace,0,&n,&empty)) {
      case 1: break;
      case 0: return 1;
      default: return -1;
    }
    critbit0_delete(&totrace,0,&n);
  }
}
示例#26
0
int finduses2(void)
{
  switch(finduses2_state) {
    case 0:
      if (!str0_copy(&n,0,&inputfield)) return -1;
      finduses2_state = 1; return 1;
    case 1:
      if (str0_equalc(&inputfield,"inputreg")) { finduses2_state = 10; return 1; }
      if (str0_equalc(&inputfield,"outputreg")) { finduses2_state = 20; return 1; }
      if (str0_equalc(&inputfield,"kill")) { finduses2_state = 30; return 1; }
      if (str0_equalc(&inputfield,"reglimit")) { finduses2_state = 40; return 1; }
      if (str0_equalc(&inputfield,"op")) { finduses2_state = 50; return 1; }
      if (str0_equalc(&inputfield,"maybegoto")) { finduses2_state = 50; return 1; }
      break;
    case 10:
      if (!critbit0_insert(&inputregs,0,&inputfield)) return -1;
      if (!str0_copy(&key,0,&inputfield)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!critbit0_firstprefixed(&vtypes,0,&type,&key)) {
	if (!str0_copyc(&outputline,0,"error:unknown variable ")) return -1;
	if (!str0_concat(&outputline,0,&key)) return -1;
	if (!str0_concat(&outputline,0,&inputline)) return -1;
	str0_putline(&outputline);
	return 0;
      }
      finduses2_state = 11; return 1;
    case 11:
      if (!str0_copy(&x,0,&key)) return -1;
      if (!str0_concat(&x,0,&inputfield)) return -1;
      if (!critbit0_insert(&inputregassignments,0,&x)) return -1;
      break;
    case 20:
      if (!critbit0_insert(&outputregs,0,&inputfield)) return -1;
      if (!str0_copy(&key,0,&inputfield)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!critbit0_firstprefixed(&vtypes,0,&type,&key)) {
	if (!str0_copyc(&outputline,0,"error:unknown variable ")) return -1;
	if (!str0_concat(&outputline,0,&key)) return -1;
	if (!str0_concat(&outputline,0,&inputline)) return -1;
	str0_putline(&outputline);
	return 0;
      }
      finduses2_state = 21; return 1;
    case 21:
      if (!str0_copy(&x,0,&key)) return -1;
      if (!str0_concat(&x,0,&inputfield)) return -1;
      if (!critbit0_insert(&outputregassignments,0,&x)) return -1;
      break;
    case 30:
      if (!str0_copy(&key,0,&inputfield)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!critbit0_firstprefixed(&vtypes,0,&type,&key)) {
	if (!str0_copyc(&outputline,0,"error:unknown variable ")) return -1;
	if (!str0_concat(&outputline,0,&key)) return -1;
	if (!str0_concat(&outputline,0,&inputline)) return -1;
	str0_putline(&outputline);
      }
      break;
    case 40:
      if (!str0_copy(&key,0,&inputfield)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!critbit0_firstprefixed(&vtypes,0,&type,&key)) {
	if (!str0_copyc(&outputline,0,"error:unknown variable ")) return -1;
	if (!str0_concat(&outputline,0,&key)) return -1;
	if (!str0_concat(&outputline,0,&inputline)) return -1;
	str0_putline(&outputline);
	return 0;
      }
      if (!str0_copy(&reglimit,0,&n)) return -1;
      if (!str0_concatc(&reglimit,0,"<")) return -1;
      if (!str0_concat(&reglimit,0,&inputfield)) return -1;
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,":<")) return -1;
      if (!str0_concat(&key,0,&inputfield)) return -1;
      if (!critbit0_insert(&uses,0,&key)) return -1;
      finduses2_state = 41; return 1;
    case 41:
      finduses_reglimit_state = 0;
      if (str0_word(&inputword,0,&inputfield,finduses_reglimit) < 0) return -1;
      return 1;
    case 50:
      finduses2_state = 51; return 1;
    case 51:
      if (str0_length(&inputfield) > 0) {
        if (!str0_copy(&key,0,&n)) return -1;
        if (!str0_concatc(&key,0,":")) return -1;
        if (!str0_concat(&key,0,&inputfield)) return -1;
        if (!critbit0_insert(&uses,0,&key)) return -1;
      }
      return 1;
  }
  return 0;
}
示例#27
0
int traceassignment(void)
{
  int flagstarting;

  critbit0_clear(&traced,0);
  critbit0_clear(&totrace,0);
  if (!critbit0_insert(&totrace,0,&v)) return -1;

  for (flagstarting = 1;;flagstarting = 0) {
    switch(critbit0_firstprefixed(&totrace,0,&x,&empty)) {
      case 1:
	break;
      case 0:
	if (traceassignment_state == 1) {
	  if (!critbit0_insert(&finalreads,0,&v)) return -1;
	}
        return 1;
      default:
	return -1;
    }
    critbit0_delete(&totrace,0,&x);


    if (traceassignment_state == 1)
      if (!flagstarting)
        if (str0_equal(&v,&x))
	  return 1;

    switch(critbit0_insert(&traced,0,&x)) {
      case 2: break;
      case 1: continue;
      default: return -1;
    }

    traceword_state = 0;
    switch(str0_word(&y,0,&x,traceword)) {
      case 1:
	if (str0_equalc(&tracestatus,"<")) {
	  if (traceassignment_state == 2) {
	    if (!critbit0_insert(&blocklive,0,&v)) return -1;
	    return 1;
	  }
	  if (traceassignment_state == 1) {
	    if (!flagstarting) {
	      return 1;
	    }
	    break;
	  }
	  if (!str0_copy(&key,0,&v)) return -1;
	  if (!str0_concatc(&key,0,":")) return -1;
	  if (!str0_concat(&key,0,&x)) return -1;
	  if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
	  if (!str0_copy(&key,0,&x)) return -1;
	  if (!str0_concatc(&key,0,":")) return -1;
	  if (!str0_concat(&key,0,&v)) return -1;
	  if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
	} else if (str0_equalc(&tracestatus,"=")) {
	  if (critbit0_contains(&blockends,&traceinsn)) {
	    if (!str0_copy(&key,0,&traceinsn)) return -1;
	    if (!str0_concatc(&key,0,":")) return -1;
            if (critbit0_allprefixed(&nextinsn,0,&y,&key,connectblocks) < 1) return -1;
	  }
	  if (critbit0_contains(&blockbegins,&traceinsn)) {
	    if (!str0_copy(&key,0,&traceinsn)) return -1;
	    if (!str0_concatc(&key,0,":")) return -1;
	    if (!str0_concat(&key,0,&tracevar)) return -1;
	    if (!str0_copy(&key,0,&traceinsn)) return -1;
	    if (!str0_concatc(&key,0,"=")) return -1;
	    if (!str0_concat(&key,0,&tracevar)) return -1;
	    if (!critbit0_insert(&blockvisible,0,&key)) return -1;
	    if (!critbit0_contains(&blockkilled,&key)) {
	      if (!str0_copy(&key,0,&traceinsn)) return -1;
	      if (!str0_concatc(&key,0,":")) return -1;
	      switch(critbit0_firstprefixed(&blockleaps,0,&next,&key)) {
	        case 0:
		  break;
	        case 1:
	          if (!str0_copy(&key,0,&next)) return -1;
	          if (!str0_concatc(&key,0,"=")) return -1;
	          if (!str0_concat(&key,0,&tracevar)) return -1;
                  if (!critbit0_insert(&totrace,0,&key)) return -1;
	          if (!str0_copy(&key,0,&traceinsn)) return -1;
	          if (!str0_concatc(&key,0,"=")) return -1;
	          if (!str0_concat(&key,0,&tracevar)) return -1;
	          if (!str0_concatc(&key,0,":")) return -1;
	          if (!str0_concat(&key,0,&next)) return -1;
	          if (!str0_concatc(&key,0,"=")) return -1;
	          if (!str0_concat(&key,0,&tracevar)) return -1;
	          if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
	          if (!str0_copy(&key,0,&next)) return -1;
	          if (!str0_concatc(&key,0,"=")) return -1;
	          if (!str0_concat(&key,0,&tracevar)) return -1;
	          if (!str0_concatc(&key,0,":")) return -1;
	          if (!str0_concat(&key,0,&traceinsn)) return -1;
	          if (!str0_concatc(&key,0,"=")) return -1;
	          if (!str0_concat(&key,0,&tracevar)) return -1;
	          if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
		  break;
	        default:
		  return -1;
	      }
	    }
	  }
	}
	break;
      case 0:
	break;
      default:
	return -1;
    }

    if (!str0_concatc(&x,0,":")) return -1;
    if (critbit0_allprefixed(&usegraph,0,&y,&x,addtotrace) < 1) return -1;
  }
}
示例#28
0
void doit(void)
{
  int64 i;

  if (critbit0_allprefixed(&inputlines,0,&inputline,&empty,findvars) < 1) nomem();
  if (critbit0_allprefixed(&inputlines,0,&inputline,&empty,finduses) < 1) nomem();
  if (critbit0_allprefixed(&inputlines,0,&inputline,&empty,findentries) < 1) nomem();
  if (critbit0_allprefixed(&inputlines,0,&inputline,&empty,findblocks) < 1) nomem();
  traceassignment_state = 0;
  if (critbit0_allprefixed(&assignments,0,&v,&empty,traceassignment) < 1) nomem();
  traceassignment_state = 1;
  if (critbit0_allprefixed(&reads,0,&v,&empty,traceassignment) < 1) nomem();
  traceassignment_state = 2;
  if (critbit0_allprefixed(&blockvisible,0,&v,&empty,traceassignment) < 1) nomem();
  critbit0_clear(&traced,0);
  critbit0_clear(&totrace,0);
  if (!str0_copyc(&value,0,"0")) nomem();
  if (critbit0_allprefixed(&assignments,0,&x,&empty,tracevalue) < 1) nomem();
  if (critbit0_allprefixed(&reads,0,&x,&empty,tracevalue) < 1) nomem();
  if (critbit0_allprefixed(&blocklive,0,&x,&empty,tracevalue) < 1) nomem();

  allocate_state = 1;
  critbit0_clear(&traced,0);
  critbit0_clear(&totrace,0);
  if (critbit0_allprefixed(&entries,0,&n,&empty,allocate) < 1) nomem();

  for (i = 0;i < inputlinesnum;++i) {
    if (!str0_uint64(&reglimitprefix,0,i)) nomem();
    if (!str0_concatc(&reglimitprefix,0,"<")) nomem();
    if (critbit0_allprefixed(&reglimitok,0,&x,&reglimitprefix,preallocate) < 1) nomem();
    if (!str0_uint64(&reglimitprefix,0,i)) nomem();
    if (!str0_concatc(&reglimitprefix,0,">")) nomem();
    if (critbit0_allprefixed(&reglimitok,0,&x,&reglimitprefix,preallocate) < 1) nomem();
  }

  allocate_state = 2;
  critbit0_clear(&traced,0);
  critbit0_clear(&totrace,0);
  if (critbit0_allprefixed(&entries,0,&n,&empty,allocate) < 1) nomem();

  for (i = 0;i < inputlinesnum;++i) {
    if (!str0_uint64(&n,0,i)) nomem();
    if (!str0_copy(&key,0,&n)) nomem();
    if (!str0_concatc(&key,0,":")) nomem();
    if (critbit0_firstprefixed(&inputlines,0,&inputline,&key) < 1) nomem();
    str0_free(&outputline,0);
    convert_state = 0;
    if (str0_colon(&inputfield,0,&inputline,convert) < 1) nomem();
    printreg_write = 0;
    if (!str0_copy(&key,0,&n)) nomem();
    if (!str0_concatc(&key,0,"=")) nomem();
    if (critbit0_allprefixed(&blocklive,0,&v,&key,printreg) < 1) nomem();
    if (critbit0_contains(&entries,&n)) {
      printreg_write = 1;
      if (critbit0_allprefixed(&inputregs,0,&v,&empty,printreg) < 1) nomem();
    }
    if (!str0_copy(&key,0,&n)) nomem();
    if (!str0_concatc(&key,0,"<")) nomem();
    if (critbit0_allprefixed(&finalreads,0,&v,&key,printkill) < 1) nomem();
    str0_putline(&outputline);

    if (!str0_copyc(&outputline,0,"op:livefloat80:")) nomem();
    if (!str0_copy(&key,0,&n)) nomem();
    if (!str0_concatc(&key,0,":")) nomem();
    if (critbit0_allprefixed(&float80after,0,&v,&key,printlivevalues) < 1) nomem();
    str0_putline(&outputline);
  }
}
示例#29
0
int findblocks_read(void)
{
  if (!str0_copy(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,"<")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!critbit0_insert(&reads,0,&key)) return -1;

  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  switch(critbit0_firstprefixed(&blockread,0,&x,&key)) {
    case 1:
      if (!str0_concat(&key,0,&x)) return -1;
      critbit0_delete(&blockread,0,&key);
      if (!str0_copy(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,"<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,"<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!critbit0_insert(&usegraph,0,&key)) return -1;
      if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,"<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,"<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
      break;
    case 0:
      break;
    default:
      return -1;
  }
  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&n)) return -1;
  if (!critbit0_insert(&blockread,0,&key)) return -1;

  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  switch(critbit0_firstprefixed(&blockassigned,0,&x,&key)) {
    case 1:
      if (!str0_copy(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,">")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,"<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!critbit0_insert(&usegraph,0,&key)) return -1;
      if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
      if (!str0_copy(&key,0,&n)) return -1;
      if (!str0_concatc(&key,0,"<")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!str0_concatc(&key,0,":")) return -1;
      if (!str0_concat(&key,0,&x)) return -1;
      if (!str0_concatc(&key,0,">")) return -1;
      if (!str0_concat(&key,0,&v)) return -1;
      if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
      return 1;
    case 0:
      break;
    default:
      return -1;
  }

  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,"=")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (critbit0_contains(&blockkilled,&key)) {
    if (!str0_copyc(&outputline,0,"error:reading dead variable ")) return -1;
    if (!str0_concat(&outputline,0,&v)) return -1;
    if (!str0_concatc(&outputline,0,":")) return -1;
    if (!str0_concat(&outputline,0,&inputline)) return -1;
    str0_putline(&outputline);
    return 1;
  }

  if (!str0_copy(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,"=")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,"<")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!critbit0_insert(&usegraph,0,&key)) return -1;
  if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
  if (!str0_copy(&key,0,&n)) return -1;
  if (!str0_concatc(&key,0,"<")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!str0_concatc(&key,0,":")) return -1;
  if (!str0_concat(&key,0,&inputfield)) return -1;
  if (!str0_concatc(&key,0,"=")) return -1;
  if (!str0_concat(&key,0,&v)) return -1;
  if (!critbit0_insert(&assignusegraph,0,&key)) return -1;
  return 1;
}