Literals do not get squashed across absolute or relative pads and
labels, now the tail call optimisations do not occur under the same
conditions. etc/asma-test.tal was identifying serious errors with
asma.rom, which uses "JSR2 &skip JMP2r" in @asma-macro-body.
| ... | ... |
@@ -299,24 +299,24 @@ parse(char *w, FILE *f) |
| 299 | 299 |
if(!sihx(w + 1)) |
| 300 | 300 |
return error("Invalid padding", w);
|
| 301 | 301 |
p.ptr = shex(w + 1); |
| 302 |
- litlast = 0; |
|
| 302 |
+ litlast = jsrlast = 0; |
|
| 303 | 303 |
break; |
| 304 | 304 |
case '$': /* pad-relative */ |
| 305 | 305 |
if(!sihx(w + 1)) |
| 306 | 306 |
return error("Invalid padding", w);
|
| 307 | 307 |
p.ptr += shex(w + 1); |
| 308 |
- litlast = 0; |
|
| 308 |
+ litlast = jsrlast = 0; |
|
| 309 | 309 |
break; |
| 310 | 310 |
case '@': /* label */ |
| 311 | 311 |
if(!makelabel(w + 1)) |
| 312 | 312 |
return error("Invalid label", w);
|
| 313 | 313 |
scpy(w + 1, p.scope, 0x40); |
| 314 |
- litlast = 0; |
|
| 314 |
+ litlast = jsrlast = 0; |
|
| 315 | 315 |
break; |
| 316 | 316 |
case '&': /* sublabel */ |
| 317 | 317 |
if(!makelabel(sublabel(subw, p.scope, w + 1))) |
| 318 | 318 |
return error("Invalid sublabel", w);
|
| 319 |
- litlast = 0; |
|
| 319 |
+ litlast = jsrlast = 0; |
|
| 320 | 320 |
break; |
| 321 | 321 |
case '#': /* literals hex */ |
| 322 | 322 |
if(!sihx(w + 1) || (slen(w) != 3 && slen(w) != 5)) |