# PRET standards audit

Generated by `python3 tools/audit_pret_standards.py` from the mechanical
rules in `docs/PRET_STANDARDS.md`. Semantic names, const correctness,
structure accuracy, and whether a match is a fragile optimizer accident
still require human review.

Manifest ranges reviewed: **1771**
Errors: **125**
Warnings: **0**
Documented low-level exceptions: **0**

## Findings by rule

| Rule | Count |
| --- | ---: |
| `forced_register` | 16 |
| `inline_assembly` | 31 |
| `target_register_macro` | 78 |

## Details

| Severity | Rule | Location | Detail |
| --- | --- | --- | --- |
| error | `forced_register` | `src/mapping.c:984` | register s32 fixedIndex asm("r2"); |
| error | `forced_register` | `src/mapping.c:1001` | register u8 *destination asm("r1"); |
| error | `forced_register` | `src/resource_native.c:61` | register u8 *slot asm("r0"); |
| error | `forced_register` | `src/resource_native.c:106` | register u8 *base asm("r0"); |
| error | `forced_register` | `src/resource_native.c:107` | register u32 offset asm("r2"); |
| error | `forced_register` | `src/resource_native.c:130` | register const s16 *shortArgs asm("r1") = (const s16 *)args; |
| error | `forced_register` | `src/save.c:124` | register u32 localSize asm("r4"); |
| error | `forced_register` | `src/save.c:125` | register s32 *localCompletion asm("r3"); |
| error | `forced_register` | `src/sound_fade_create.c:33` | register void (*callback)(struct EngineTask *) asm("r10"); |
| error | `forced_register` | `src/sound_idle_wait.c:28` | register u32 status asm("r0"); |
| error | `forced_register` | `src/sound_idle_wait.c:30` | register u32 waitValue asm("r4"); |
| error | `forced_register` | `src/sound_idle_wait.c:31` | register void (*callback)(struct EngineTask *) asm("r5"); |
| error | `forced_register` | `src/sram.c:15` | register vu16 *waitcnt asm("r2") = WAITCNT_ADDRESS;                    \ |
| error | `forced_register` | `src/sram.c:16` | register u16 wait asm("r0") = *waitcnt;                                \ |
| error | `forced_register` | `src/sram.c:32` | register vu16 *waitcnt asm("r2") = WAITCNT_ADDRESS; |
| error | `forced_register` | `src/sram.c:33` | register u16 wait asm("r0") = *waitcnt; |
| error | `inline_assembly` | `src/mapping.c:984` | register s32 fixedIndex asm("r2"); |
| error | `inline_assembly` | `src/mapping.c:1001` | register u8 *destination asm("r1"); |
| error | `inline_assembly` | `src/resource_native.c:61` | register u8 *slot asm("r0"); |
| error | `inline_assembly` | `src/resource_native.c:106` | register u8 *base asm("r0"); |
| error | `inline_assembly` | `src/resource_native.c:107` | register u32 offset asm("r2"); |
| error | `inline_assembly` | `src/resource_native.c:130` | register const s16 *shortArgs asm("r1") = (const s16 *)args; |
| error | `inline_assembly` | `src/save.c:124` | register u32 localSize asm("r4"); |
| error | `inline_assembly` | `src/save.c:125` | register s32 *localCompletion asm("r3"); |
| error | `inline_assembly` | `src/sound_fade_create.c:33` | register void (*callback)(struct EngineTask *) asm("r10"); |
| error | `inline_assembly` | `src/sound_idle_wait.c:28` | register u32 status asm("r0"); |
| error | `inline_assembly` | `src/sound_idle_wait.c:30` | register u32 waitValue asm("r4"); |
| error | `inline_assembly` | `src/sound_idle_wait.c:31` | register void (*callback)(struct EngineTask *) asm("r5"); |
| error | `inline_assembly` | `src/sprite_affine_matrix.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `inline_assembly` | `src/sprite_affine_matrix.c:9` | #define MATCH_RW(value) asm volatile("" : "+r"(value)) |
| error | `inline_assembly` | `src/sprite_affine_matrix.c:10` | #define MATCH_OUT(value) asm volatile("" : "=r"(value)) |
| error | `inline_assembly` | `src/sprite_affine_matrix.c:11` | #define MATCH_RW3(a, b, c) asm volatile("" : "+r"(a), "+r"(b), "+r"(c)) |
| error | `inline_assembly` | `src/sprite_affine_matrix.c:12` | #define MATCH_IN3(a, b, c) asm volatile("" : : "r"(a), "r"(b), "r"(c)) |
| error | `inline_assembly` | `src/sprite_affine_slots.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `inline_assembly` | `src/sprite_affine_slots.c:89` | asm volatile("" : "+r"(available)); |
| error | `inline_assembly` | `src/sprite_engine_state.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `inline_assembly` | `src/sprite_interpolation.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `inline_assembly` | `src/sprite_interpolation.c:33` | asm("" : "+r"(output), "+r"(inputX), "+r"(inputY) : : "memory"); |
| error | `inline_assembly` | `src/sprite_math.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `inline_assembly` | `src/sprite_tile_allocator.c:9` | #define TARGET_REGISTER(name) asm(name) |
| error | `inline_assembly` | `src/sprite_transform.c:9` | #define TARGET_REGISTER(name) asm(name) |
| error | `inline_assembly` | `src/sprite_transform.c:302` | asm("" : "+r"(product)); |
| error | `inline_assembly` | `src/sprite_transform.c:346` | asm("" : "+r"(inverseX)); |
| error | `inline_assembly` | `src/sram.c:15` | register vu16 *waitcnt asm("r2") = WAITCNT_ADDRESS;                    \ |
| error | `inline_assembly` | `src/sram.c:16` | register u16 wait asm("r0") = *waitcnt;                                \ |
| error | `inline_assembly` | `src/sram.c:32` | register vu16 *waitcnt asm("r2") = WAITCNT_ADDRESS; |
| error | `inline_assembly` | `src/sram.c:33` | register u16 wait asm("r0") = *waitcnt; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:14` | #define TARGET_REGISTER(name) |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:42` | register s32 angle TARGET_REGISTER("r4") = angle0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:43` | register s32 scaleX TARGET_REGISTER("r5") = scaleX0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:44` | register s32 scaleY TARGET_REGISTER("r6") = scaleY0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:46` | register u32 mask TARGET_REGISTER("r1"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:48` | register s32 sine TARGET_REGISTER("r10"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:49` | register s32 sineTemp TARGET_REGISTER("r3"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:50` | register s32 tableHold TARGET_REGISTER("r7"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:51` | register s32 valueHold TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:52` | register s32 cosine TARGET_REGISTER("r9"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:53` | register s32 invX TARGET_REGISTER("r4"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:54` | register s32 invY TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:77` | register struct AffineOamColumns *base TARGET_REGISTER("r3") = entry; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:95` | register s32 angle TARGET_REGISTER("r4") = angle0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:96` | register s32 scaleX TARGET_REGISTER("r5") = scaleX0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:97` | register s32 scaleY TARGET_REGISTER("r6") = scaleY0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:99` | register u32 mask TARGET_REGISTER("r1"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:101` | register s32 sine TARGET_REGISTER("r10"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:102` | register s32 sineTemp TARGET_REGISTER("r3"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:103` | register s32 tableHold TARGET_REGISTER("r7"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:104` | register s32 valueHold TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:105` | register s32 cosine TARGET_REGISTER("r9"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:106` | register s32 invX TARGET_REGISTER("r4"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:107` | register s32 invY TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:130` | register struct AffineOamColumns *base TARGET_REGISTER("r3") = entry; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:149` | register s32 angle TARGET_REGISTER("r4") = angle0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:150` | register s32 scaleX TARGET_REGISTER("r5") = scaleX0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:151` | register s32 scaleY TARGET_REGISTER("r6") = scaleY0; |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:153` | register u32 mask TARGET_REGISTER("r1"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:155` | register s32 sine TARGET_REGISTER("r10"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:156` | register s32 sineTemp TARGET_REGISTER("r3"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:157` | register s32 tableHold TARGET_REGISTER("r7"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:158` | register s32 valueHold TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:159` | register s32 cosine TARGET_REGISTER("r9"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:160` | register s32 invX TARGET_REGISTER("r4"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:161` | register s32 invY TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_affine_matrix.c:184` | register struct AffineOamColumns *base TARGET_REGISTER("r3") = entry; |
| error | `target_register_macro` | `src/sprite_affine_slots.c:6` | #define TARGET_REGISTER(name) |
| error | `target_register_macro` | `src/sprite_affine_slots.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `target_register_macro` | `src/sprite_affine_slots.c:44` | register u32 entryOffset TARGET_REGISTER("r0") = slot << 3; |
| error | `target_register_macro` | `src/sprite_affine_slots.c:45` | register struct SpriteEngineState **globalReg TARGET_REGISTER("r2"); |
| error | `target_register_macro` | `src/sprite_affine_slots.c:47` | register struct SpriteAffineSlot *entry TARGET_REGISTER("r2"); |
| error | `target_register_macro` | `src/sprite_affine_slots.c:82` | register u32 transform TARGET_REGISTER("r4"); |
| error | `target_register_macro` | `src/sprite_affine_slots.c:84` | register struct SpriteEngineState *state TARGET_REGISTER("r0") = *global; |
| error | `target_register_macro` | `src/sprite_engine_state.c:6` | #define TARGET_REGISTER(name) |
| error | `target_register_macro` | `src/sprite_engine_state.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `target_register_macro` | `src/sprite_engine_state.c:325` | register u32 byteOffset TARGET_REGISTER("r0") = low << 4; |
| error | `target_register_macro` | `src/sprite_interpolation.c:6` | #define TARGET_REGISTER(name) |
| error | `target_register_macro` | `src/sprite_interpolation.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `target_register_macro` | `src/sprite_interpolation.c:20` | register s32 *output TARGET_REGISTER("r6"); |
| error | `target_register_macro` | `src/sprite_interpolation.c:24` | register s32 *outputX TARGET_REGISTER("r1"); |
| error | `target_register_macro` | `src/sprite_interpolation.c:26` | register s32 *outputY TARGET_REGISTER("r3") = output; |
| error | `target_register_macro` | `src/sprite_interpolation.c:27` | register u8 *afterX TARGET_REGISTER("r1"); |
| error | `target_register_macro` | `src/sprite_math.c:6` | #define TARGET_REGISTER(name) |
| error | `target_register_macro` | `src/sprite_math.c:8` | #define TARGET_REGISTER(name) asm(name) |
| error | `target_register_macro` | `src/sprite_math.c:119` | register s32 estimate TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_math.c:122` | register s32 one TARGET_REGISTER("r1") = 0x1000; |
| error | `target_register_macro` | `src/sprite_tile_allocator.c:7` | #define TARGET_REGISTER(name) |
| error | `target_register_macro` | `src/sprite_tile_allocator.c:9` | #define TARGET_REGISTER(name) asm(name) |
| error | `target_register_macro` | `src/sprite_tile_allocator.c:151` | register u32 previousSize TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_transform.c:7` | #define TARGET_REGISTER(name) |
| error | `target_register_macro` | `src/sprite_transform.c:9` | #define TARGET_REGISTER(name) asm(name) |
| error | `target_register_macro` | `src/sprite_transform.c:33` | register s32 value TARGET_REGISTER("r3"); |
| error | `target_register_macro` | `src/sprite_transform.c:95` | register s32 value TARGET_REGISTER("r3"); |
| error | `target_register_macro` | `src/sprite_transform.c:158` | register s32 value TARGET_REGISTER("r3"); |
| error | `target_register_macro` | `src/sprite_transform.c:216` | register s32 origin TARGET_REGISTER("r4") = *(s16 *)(state + 328); |
| error | `target_register_macro` | `src/sprite_transform.c:245` | register s32 packedX TARGET_REGISTER("r2"); |
| error | `target_register_macro` | `src/sprite_transform.c:247` | register s32 halfWidth TARGET_REGISTER("r4"); |
| error | `target_register_macro` | `src/sprite_transform.c:248` | register s32 halfHeight TARGET_REGISTER("r3"); |
| error | `target_register_macro` | `src/sprite_transform.c:249` | register s32 packedY TARGET_REGISTER("r5"); |
| error | `target_register_macro` | `src/sprite_transform.c:251` | register u32 highMask TARGET_REGISTER("r8"); |
| error | `target_register_macro` | `src/sprite_transform.c:278` | register u32 flags TARGET_REGISTER("r4") = state->packedXAndFlags; |
| error | `target_register_macro` | `src/sprite_transform.c:279` | register u32 preserve TARGET_REGISTER("r3") = 0xFFFFF000; |
| error | `target_register_macro` | `src/sprite_transform.c:324` | register u32 rawAngle TARGET_REGISTER("r1"); |
| error | `target_register_macro` | `src/sprite_transform.c:327` | register s32 inverseX TARGET_REGISTER("r4"); |
| error | `target_register_macro` | `src/sprite_transform.c:328` | register s32 inverseY TARGET_REGISTER("r0"); |
| error | `target_register_macro` | `src/sprite_transform.c:329` | register s32 index TARGET_REGISTER("r0"); |
