On 11/15/18 11:35 PM, Alistair Francis wrote: > +static int32_t encode_simm12(uint32_t imm) > +{ > + return ((imm << 20) >> 25) << 25 | ((imm << 27) >> 27) << 7; > +}
I'm not fond of triple shifts like this, as it makes me count. I'd be ok with a formulation like return ((imm & 0x1f) << 7) | ((imm & 0xfe) << (25 - 5)); but perhaps best as uint32_t ret = 0; ret = deposit32(ret, imm, 7, 5); ret = deposit32(ret, imm >> 5, 25, 7); Similarly with encode_sbimm12, encode_uimm20 (which is a simple &), encode_ujimm12. r~