diff options
Diffstat (limited to 'src/cmd/8l/span.c')
| -rw-r--r-- | src/cmd/8l/span.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/cmd/8l/span.c b/src/cmd/8l/span.c index d46f86ff6..f649777ec 100644 --- a/src/cmd/8l/span.c +++ b/src/cmd/8l/span.c @@ -73,8 +73,7 @@ start: if(debug['v']) Bprint(&bso, "%5.2f span %d\n", cputime(), n); Bflush(&bso); - if(n > 500) { - // TODO(rsc): figure out why nacl takes so long to converge. + if(n > 50) { print("span must be looping - %d\n", textsize); errorexit(); } @@ -1183,10 +1182,13 @@ found: q = p->pcond; if(q) { v = q->pc - p->pc - 2; - if(v >= -128 && v <= 127) { + if(q->pc == 0) + v = 0; + if(v >= -128 && v <= 127 && !p->bigjmp) { *andptr++ = op; *andptr++ = v; } else { + p->bigjmp = 1; v -= 6-2; *andptr++ = 0x0f; *andptr++ = o->op[z+1]; @@ -1230,10 +1232,13 @@ found: q = p->pcond; if(q) { v = q->pc - p->pc - 2; - if(v >= -128 && v <= 127) { + if(q->pc == 0) + v = 0; + if(v >= -128 && v <= 127 && !p->bigjmp) { *andptr++ = op; *andptr++ = v; } else { + p->bigjmp = 1; v -= 5-2; *andptr++ = o->op[z+1]; *andptr++ = v; |
