This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [GAS][ARM]Generate unpredictable warning for pc used in data processing instructions with register-shifted register operand


On 11/10/16 14:06, Nick Clifton wrote:
> Hi Renlin,
> 
>> In ARMARM (ARMv7-A and ARMv7-R edition),
> 
> Ah - good we are using the same manual.
>  
>> if d == 15 || n == 15 || m == 15 || s == 15 then UNPREDICTABLE;
> 
> Right - thanks - I was looking at the wrong instruction - CMN (register)
> rather than CMN (register-shifted register). Doh!
> 
> It seems a little strange that the PC cannot be read by these type
> of instructions, but if that is what the ARMARM says, then so be it.
> 

Hysterical raisons.  In very early implementations of the ARM,
register-shifted registers needed an extra cycle which meant the PC
sometimes read +12 rather than the normal +8 from the current location.

Since the instructions are of little real use (why would you shift the
PC by a non-constant amount, or use the value in the PC to control the
shift?) it was easier to just make such uses unpredictable.

R.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]