There are number of areas where compilation of branches in Inform could be improved.
Most of these would involve significant code generation modifications,
but there is one straightforward error in conditional jump assembly. Conditional jumps can take long or short forms.
Short forms can jump up to 63 bytes, but Inform only uses them for distances of up to 31 bytes.
Fixing this will shave a small amount off of your code size.
Apply this patch.
About Patches
Issue C62112
Conditional jump assembly is suboptimal
Submitted by: Kevin Bracey
Appeared in: Compiler 6.21 or before
Fixed in: Compiler 6.30
Problem
Solution
--- asm.c~ Wed Apr 28 21:14:08 1999
+++ asm.c Wed Nov 21 12:18:19 2001
@@ -898,7 +898,7 @@
if (asm_trace_level >= 4)
printf("To label %d, which is %d from here\n",
j, label_offsets[j]-pc);
- if ((label_offsets[j] >= pc+2) && (label_offsets[j] < pc+32))
+ if ((label_offsets[j] >= pc+2) && (label_offsets[j] < pc+64))
{ if (asm_trace_level >= 4) printf("Short form\n");
zcode_markers[i+1] = DELETED_MV;
}
@@ -956,7 +956,7 @@
zcode_holding_area[i+1] = addr%256;
}
else
- { if (addr >= 32)
+ { if (addr >= 64)
{ compiler_error("Label out of range for branch");
printf("Addr is %04x\n", addr);
}
Last updated 17 April 2013.
This site is no longer supported; information may be out of date.
Maintained as a historical archive by the Interactive Fiction Technology Foundation.
Copyright 1993-2018 IFTF, CC-BY-SA unless otherwise noted.
This page was originally managed by Roger Firth.