Please note: We are aware of an issue affecting replies on the Arm Community forums, which may not be loading as expected.
We apologize for any inconvenience and appreciate your patience while we investigate and work to resolve the issue.
Thank you for your understanding.
I have to port some assembler code of a Cortex M4 to a Cortex M0+.
At the Cortex M4 this was used:
EOR R3,R3,R6,LSL #16
For the M0+ the arm architetcure reference v6m in chapter A6.7.23 says for the EOR:
Exclusive OR (register) performs a bitwise Exclusive OR of a register value and an optionally-shifted register value, and writes the result to the destination register
But at the description of the encoding this was written:
d = UInt(Rdn); n = UInt(Rdn); m = UInt(Rm); setflags = !InITBlock();(shift_t, shift_n) = (SRType_LSL, 0);
Which was interpreted from me as there was no optionally-shift. Because shift_n was declared as 0.
But in the pseudo-code-part "Operation" this was written:
if ConditionPassed() then EncodingSpecificOperations(); (shifted, carry) = Shift_C(R[m], shift_t, shift_n, APSR.C); result = R[n] EOR shifted; R[d] = result; if setflags then APSR.N = result<31>; APSR.Z = IsZeroBit(result); APSR.C = carry; // APSR.V unchanged
That seems as that a shift was supported.
I didn`t found a syntax which was accepted from my compiler. So my question was, ist the "optionally-shift" only a mistake in writing or has the EOR the possibility to shift?
Best regards
Volker