A. Yes. On page 25 of the verion 0.5 manual, it describes the constructmatch [succ] pc-expression to | ... endmatchThis will cause the toolkit to assign to succ the address of the first byte not matched. You can then subtract the starting PC to find the size of the instruction.
Q. I don't want to be limited to encoding one procedure at a time. What do I do?
A. The toolkit's relocatable blocks aren't restricted to procedures, segments, or any other unit of granularity. A relocatable block can represent anything you want it to represent (e.g., basic blocks).
Q. When the toolkit decodes instructions, it doesn't properly sign-extend my displacements. What's wrong?
A. If your displacements are relocatable addresses, things get tricky. (The whole business of non-field operands requires more thought than I have really given it.) If, for example, you writefields of op (8) reg 0:2 fields of imm8 (8) i8 0:7 relocatable d constructors Disp d![reg] is reg; i8 = dthere are two reasonable interpretations: d holds a signed value that should fit in 8 bits, or d holds an unsigned value that should fit in 8 bits. As it turns out, the latter interpretation is the default. To get a signed interpretation, writeconstructors Disp d![reg] is { i8! = d } reg; i8Your decoders should then sign-extend properly.