Open
Description
This would add two new instructions to cranelift, bextr
and bmak
. They provide a easy to optimize, and easy to generate mechanism for bitfield manipulation.
bextr
a = bextr target, size, offset
bextr will extract a n bit large field at the provided offset, and return it in a
, shifted so that the LSB of the field is also the LSB of a
.
a
's type is inferred from target
Visual example
offset = 4
size = 4
typeof target = i8
xxxx ****
\__/----V
0000 xxxx
bmak
a = bmak target, size, offset
bmak will fill a n bit large field at the provided offset with 1s, the rest with 0. The generated field will then be applied to target
using a bitwise AND, and the result will be returned in a
.
a
's type is inferred from target
bmak is designed so that you can simply use a bitwise or to combine the fields.
Visual Example
offset = 2
size = 4
typeof target = i8
xx0101xx
\__/
/ \
00010100