This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

ASR #32

In the SSAT instruction description it says:

ASR #32 Arithmetic right shift by 32 bits, permitted only for encoding A1.

Encoded as sh = 1, immsh = 0b00000.

What does that mean?

Isn't ASR #32 the same as ASR #31?

I understand that it shifts (with "sign extension") the whole 32-bit value out and leaves only the sign extension bits

that are "copies" of the highest bit of the original value.

What am I missing here?

Parents
  • That definitely qualifies for a cool trick. If you want to avoid branching, you could combine it with the sbcs instruction like SBCS r3,r3,r3 after a BMI.

    (or of course use conditional execution). Using it as a mask for a conditional AND would probably also be useful.

    ... MVNS r0,r1,asr#31 might also prove useful, if you need to invert the sign.

Reply
  • That definitely qualifies for a cool trick. If you want to avoid branching, you could combine it with the sbcs instruction like SBCS r3,r3,r3 after a BMI.

    (or of course use conditional execution). Using it as a mask for a conditional AND would probably also be useful.

    ... MVNS r0,r1,asr#31 might also prove useful, if you need to invert the sign.

Children
No data