What should a truncating store do?

For example, truncating store of an i32 to i6. My assumption was that this should write the low six bits of the i32 to somewhere in memory.

Should the top 24 bits of a corresponding 32 bit region of memory be unchanged, zero, undefined?

Should the two bits that would round the i6 up to a byte be preserved, zero, undefined?

I can’t write six bits directly so am trying to determine what set of bitwise ops to apply between a load and subsequent store to emulate the truncating store.

Thanks!

Jon

For example, truncating store of an i32 to i6. My assumption was that this should write the low six bits of the i32 to somewhere in memory.

Should the top 24 bits of a corresponding 32 bit region of memory be unchanged, zero, undefined?

Unchanged.

Should the two bits that would round the i6 up to a byte be preserved, zero, undefined?

Zero. Legalization will normally handle this for you, though, by transforming it to an i8 store.

-Eli

For example, truncating store of an i32 to i6. My assumption was that this should write the low six bits of the i32 to somewhere in memory.

Should the top 24 bits of a corresponding 32 bit region of memory be unchanged, zero, undefined?

Unchanged.

Should the two bits that would round the i6 up to a byte be preserved, zero, undefined?

Zero. Legalization will normally handle this for you, though, by transforming it to an i8 store.

Why is this Zero? The language ref says the value of those bits are
unspecified.

-Tom

Zero, because that makes it more convenient to lower the corresponding “load” instruction. Note the corresponding language for loads: " -Eli