On Mon, 13 Sept 2021 at 19:09, Luis Fernando Fujita Pires <luis.pi...@eldorado.org.br> wrote: > > > > value = extract64(value, 0, nr_bits); > > > value = ((target_long)value << (64 - nr_bits)) >> (64 - nr_bits); > > > > Oops, sorry. 64 might not be correct here. It would depend on the target > > being > > either 32 or 64. > > In fact, sextract already does the sign extension, so this should be all > that's needed, right? > value = sextract<32,64>(value, 0, nr_bits);
Indeed, sextract64() is the preferred way to do a sign extension. (The one thing to watch out for is that you mustn't try to extract a zero-width field; it will assert if you do. It also asserts if you specify a field whose start,length would put either end to the left of bit 63 or the right of bit 0, but that's less likely than the zero-width case.) -- PMM