Ticket #298 (Fixed)Sat Sep 24 10:43:29 UTC 2011
objasm 4.01 incorrectly warns about deprecated LDM/STM
Reported by: | Jeffrey Lee (213) | Severity: | Minor |
Part: | RISC OS: C/C++ toolchain | Release: | |
Milestone: | Status | Fixed |
Details by Jeffrey Lee (213):
In the ARMv7 ARM, an ARM LDM with the SP in the register list, or an LDM with both LR & PC in the register list, are marked as deprecated. objasm will correctly warn about this. However it will also warn about the same thing for the “exception return” and “user mode” versions of the instruction, despite the SP/LR/PC use not being deprecated in those variants of the instruction. The same seems to be true of STM, where SP/PC use is warned about in the “user mode” version of the instruction, despite the ARMv7 ARM not mentioning it as being deprecated.
Changelog:
Modified by Sprow (202) Sun, October 16 2011 - 12:05:37 GMT
And in the same category as this are the zillions of warnings about LDM/STM of one register being slow. This is different behaviour to armasm (in RealView 4) which silently swaps them for their LDR/STR behaviour.
I think that makes more sense, in the same way that MOV of a negative number is silently swapped for MVN. Better than spending hours fixing them all up by hand when the assembler can do that for you.
Modified by Jeffrey Lee (213) Sun, November 02 2014 - 14:14:18 GMT
- Status changed from Open to Fixed
LDM/STM deprecation warnings now fixed with objasm 4.2 (DDE 25), along with a case where the LDM/STM performance warning was being incorrectly generated (LDM^/STM^) – but no changes to perform automatic substitution with LDR/STR.