We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi, I note that the Thumb quick reference states that LSLS,LSLR & ASR can shift by a 5-bit field within the register OR by bits 0-7 of a second register. Now forgive my ignorance, but if 31 is the maximum shift value, bits 0-4 would be appropriate. Has anyone else tried placing values >31 into the register holding the shift value as it does appear to return odd values.I'm not sure what is going on but if I find something unexpected, I try to find a way to use it.I discovered it by placing 6 x 5-bit shift values into a single register, shifting right the shift value by 5 bits to select the next shift value. I have a subroutine that needs a lot of shifts and using this trick allows me to pass 2 variables, not 7.
Again, you put your finger on some interesting points.On a CM7, lsls r0,r0,r1 or lsls r0,r1 with r0 = 1 and r1 = 0x40 => 0So you may only store 4 shifts.