static void ocwrite(Octree *oc, RayFace *face, int quad, short x, short y, short z, float rtf[4][3]) { Branch *br; Node *no; short a, oc0, oc1, oc2, oc3, oc4, oc5; x<<=2; y<<=1; br= oc->adrbranch[0]; if(oc->ocres==512) { oc0= ((x & 1024)+(y & 512)+(z & 256))>>8; br= addbranch(oc, br, oc0); }
static block_t initblock(code_t *c, int leader, int *visit) { int i; block_t b; b.leader = leader; b.branch = NULL; b.nb = 0; b.ninst = 0; for(i=leader;i<nextinst(c);++i) { visit[i]++; b.ninst++; if(opcode(c,i) == eicreturn) break; else if(isgoto(c,i)) { /*printf("[%d:%d]\n",i,i+ivalcode(c,i));*/ addbranch(b.branch,b.nb,i+ivalcode(c,i)); if(opcode(c,i) != jmpu) { /*printf("[%d:%d]\n",i,i+1);*/ addbranch(b.branch,b.nb,i+1); } break; } else if(opcode(c,i) == jmptab) { struct {int n;val_t *loc;} *p; int j; p = pvalcode(c,i); addbranch(b.branch,b.nb,i + p->loc[0].ival); for(j =1;j<p->n;j+=2) addbranch(b.branch,b.nb,i + p->loc[j+1].ival); break; } } if(leader == nextinst(c)) visit[leader]++; return b; }