IOS LLE: execute ARMv5TE enhanced DSP instructions (StarletOS phase 11 I1)

SMLAxy, SMLAWy, SMULWy, SMLALxy, SMULxy, QADD, QSUB, QDADD and QDSUB were
decoded as compare data processing that writes no register; the ARM926EJ-S
implements them. The interpreter now executes them with the Q flag and the
JIT leaves them to it. Adds ARMv5TEEnhancedDSPInstructions.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
Yaya48andClaude Opus 5.5 committed 2026-10-06 22:16:53 +02:00
1 parent ba5b6de0d0
commit 3d12571127
6 files changed
+209 -7

No files matched your search

+21
View File
@@ -212,3 +212,24 @@ the one it had just written, with no other Starlet store or device DMA seen.
- `ARMCore.cpp` keeps its CRLF bytes. 95 Starlet tests passed. Companion
smoke run (P11-H06D, 150 s): no DIFF, no AUDIT, 9 LDM with identical
virtual and physical addresses.
## ARMv5TE enhanced DSP instructions — 2026-10-06
Companion proposal I1 (approved). The companion's Revolution kernel computes
table addresses with `smlabb`; the ARM926EJ-S executes it, but
`ARMCore::ExecuteARM` had no case for the ARMv5TE enhanced DSP instructions,
so `smlabb` fell into data processing as `TST` (no destination written, flags
changed). The kernel then read the wrong RAM-layer entry and refused a
creation -106 ("system files corrupted" in the System Menu), in the fork only.
- `ARMCore::ExecuteEnhancedDSP`: SMLAxy, SMLAWy, SMULWy, SMLALxy, SMULxy,
QADD, QSUB, QDADD, QDSUB, with the sticky Q flag (ARM Architecture
Reference Manual semantics), decoded before the generic decoders.
- `CanEmitARMDataProcessing` excludes these encodings, so the JIT leaves them
to the interpreter.
- Test `StarletARMCore.ARMv5TEEnhancedDSPInstructions`: eleven encodings from
GNU as (`-march=armv5te`), interpreter and JIT, results, Q and NZCV
untouched. 96 selected Starlet tests passed.
- The companion's images use, besides these (16 `smlabb`, 4 `smulbb`), only
`blx`, `clz`, `ldrd`, `strd` among the ARMv5TE additions; those were
already handled.