faster loop when not yet seen PRED
This commit is contained in:
parent
89c19662d8
commit
07ae36e672
20
src/vm.c
20
src/vm.c
@ -267,20 +267,26 @@ Block* compileBlock(B block, Comp* comp, bool* bDone, u32* bc, usz bcIA, B allBl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
i32 bcStart = TSSIZE(newBC);
|
i32 bcStart = TSSIZE(newBC);
|
||||||
u32* c = bc+idx;
|
u32* c;
|
||||||
|
|
||||||
bool remapArgs = false;
|
bool remapArgs = false;
|
||||||
bool argUsed[6] = {0,0,0,0,0,0};
|
c = bc+idx;
|
||||||
while (true) {
|
while (*c!=RETN & *c!=RETD) {
|
||||||
if (*c==PRED) remapArgs = true;
|
if (*c==PRED) { remapArgs = true; break; }
|
||||||
if (*c==VARO | *c==VARM | *c==VARU) if (c[1]==0 && c[2]<argAm) argUsed[c[2]]++;
|
|
||||||
if (*c==RETN | *c==RETD) break;
|
|
||||||
c = nextBC(c);
|
c = nextBC(c);
|
||||||
}
|
}
|
||||||
if (remapArgs) for (i32 i = 0; i < 6; i++) if (argUsed[i]) {
|
if (remapArgs) {
|
||||||
|
c = bc+idx;
|
||||||
|
bool argUsed[6] = {0,0,0,0,0,0};
|
||||||
|
while (*c!=RETN & *c!=RETD) {
|
||||||
|
if (*c==VARO | *c==VARM | *c==VARU) if (c[1]==0 && c[2]<argAm) argUsed[c[2]]++;
|
||||||
|
c = nextBC(c);
|
||||||
|
}
|
||||||
|
for (i32 i = 0; i < 6; i++) if (argUsed[i]) {
|
||||||
TSADDA(newBC, ((u32[]){ VARO,0,i, VARM,0,vam+i, SETN, POPS }), 8);
|
TSADDA(newBC, ((u32[]){ VARO,0,i, VARM,0,vam+i, SETN, POPS }), 8);
|
||||||
TSADDA(mapBC, ((u32[]){ 0,0,0, 0,0,0, 0 , 0 }), 8);
|
TSADDA(mapBC, ((u32[]){ 0,0,0, 0,0,0, 0 , 0 }), 8);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
c = bc+idx;
|
c = bc+idx;
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user