Applied in changeset commit:git|c61f52a012f0a390a869db4825143187ea468d21. ---------- [Feature #21785] Add LEB128 again (#16123) * Revert "Revert pack/unpack support for LEB128" This reverts commit 77c3a9e447ec477be39e00072e1ce3348d0f4...tenderlovemaking (Aaron Patterson)
* Revert "Revert pack/unpack support for LEB128" This reverts commit 77c3a9e447ec477be39e00072e1ce3348d0f4533. * Update specs for LEB128tenderlovemaking (Aaron Patterson)
* [Feature #21785] Add LEB128 pack / unpack * Are we OK to merge now? I think yes, but want to check * [Feature #21796] Add pack directive to return offset `^` * This would be useful with LEB128, as well as other directives that ...tenderlovemaking (Aaron Patterson)
Basic blocks in LIR should only ever end in control flow instructions such as jump or return. PadPatchPoint is not control flow, so we should not emit it at the end of blocks when lowering.tenderlovemaking (Aaron Patterson)
We would like to do type matching on the VRegId. Extracting the VRegID from a usize makes the code a bit easier to understand and refactor. MemBase uses a VReg, and there is also a VReg in Opnd. We should be sharing types between these...tenderlovemaking (Aaron Patterson)
We want to use [linear scan register allocation](https://bernsteinbear.com/blog/linear-scan/), but a prerequisite is having a CFG available. Previously LIR only had a linear block of instructions, this PR introduces a CFG to the LIR bac...tenderlovemaking (Aaron Patterson)
I really like this idea. @jhawthorn suggested `^` instead of `o` though, and I really like it. ```ruby bytes = "\x01\x02\x03" offset = 0 leb128_value1, offset = bytes.unpack("R^", offset: offset) #=> 1 leb128_value2, offset = byt...tenderlovemaking (Aaron Patterson)
Applied in changeset commit:git|d0b72429a93e54f1f956b4aedfc25c57dc7001aa. ---------- Add support for signed and unsigned LEB128 to pack/unpack. This commit adds a new pack format command `R` and `r` for unsigned and signed LEB128 encod...tenderlovemaking (Aaron Patterson)