Optimised T0 generated code: when possible (at most 256 words), word calls are encoded over one byte, even in the 128..255 range.

This commit is contained in:
Thomas Pornin 2016-12-12 19:58:49 +01:00
parent e61ad42191
commit fb7052216d
8 changed files with 114 additions and 20 deletions

View file

@ -34,6 +34,7 @@ class CodeElementJump : CodeElement {
this.jumpType = jumpType;
}
/* obsolete
internal override int Length {
get {
int len = Encode7EUnsigned(jumpType, null);
@ -46,6 +47,19 @@ class CodeElementJump : CodeElement {
return len;
}
}
*/
internal override int GetLength(bool oneByteCode)
{
int len = oneByteCode ? 1 : Encode7EUnsigned(jumpType, null);
int joff = JumpOff;
if (joff == Int32.MinValue) {
len ++;
} else {
len += Encode7ESigned(joff, null);
}
return len;
}
internal override void SetJumpTarget(CodeElement target)
{
@ -63,12 +77,17 @@ class CodeElementJump : CodeElement {
}
}
internal override int Encode(BlobWriter bw)
internal override int Encode(BlobWriter bw, bool oneByteCode)
{
if (bw == null) {
return Length;
return GetLength(oneByteCode);
}
int len;
if (oneByteCode) {
len = EncodeOneByte(jumpType, bw);
} else {
len = Encode7EUnsigned(jumpType, bw);
}
int len = Encode7EUnsigned(jumpType, bw);
int joff = JumpOff;
if (joff == Int32.MinValue) {
throw new Exception("Unresolved addresses");