Alchemy
Loading...
Searching...
No Matches

Bugs, dead code and devices

Every note the source marks, with its line: BUG for a bug the original game has, kept with its fix behind BUGFIX; DEAD for code the cartridge keeps that cannot change the result; FAKEMATCH for a device that steers the compiler, by kind, with what it changes.

Untyped FAKEMATCH tags predate the kinds.

BUG (31)

Where Note
src/battle/battle/auto_battle.c:62 count - 2 passes at most, one short of a full sort; with two
src/battle/battle/background.c:304 zoom is uninitialized; reads entry r4 directly (lsls r0, r4, #16).
src/battle/battle/link.c:196 the original buffer is on the stack, gone once this returns.
src/battle/battle/objects.c:402 a failed create leaves record null, and its flags are still
src/battle/battle/target_exec.c:602 another id with summon-kind data leaves this uninitialized.
src/battle/battle/transition.c:387 unitIds is never read. A gap among party ids can make
src/effect/parts/target_motes.c:438 meant to bounce a sheep off the ground (y 92), tumbling faster,
src/field/field/map_animation.c:343 four queued cycles become zero here, so none advance.
src/field/field/script_commands.c:383 offset is never set, so the target is the position plus whatever
src/field/field/script_commands.c:600 the probe straight ahead is placed but never tested, so only the
src/game/game/levels.c:14 the bound is one past the table's 519 rows, so id 519 reads the
src/game/game/units.c:107 the table has 165 rows, but only rows past 249 are refused, so 165 to
src/graphics/credits/credits.c:1064 the end marker is checked after allocation, leaking one line
src/menu/menu/psynergy.c:972 clears scene flag 0x2ff instead of FLAG_MENU_INFO_KEPT, so a kept
src/object/object/events.c:52 a missing actor leaves entry NULL if the final table is absent.
src/object/psynergy_effects/actor_commands.c:929 the -1 sentinel becomes index 4095, beyond the event work. All
src/object/psynergy_effects/arcs.c:123 allocation failures above leave a missing arc or sprite here.
src/object/psynergy_effects/effect_slot.c:162 ResourceObject_CreateFar can return NULL, but this and the animation
src/object/psynergy_effects/messages.c:320 the native lookup discards its result and leaves pos unset.
src/object/psynergy_effects/retreat.c:291 failed allocations above leave a missing arc or sprite here.
src/object/psynergy_effects/weather.c:28 freezing a timer of 16 indexes past the 16-frame table. Which
src/object/psynergy_effects/world_map.c:38 the original reserves 32 bytes but writes and uploads 128. The bump
src/runtime/runtime/scheduler.c:56 the last pass, which would settle the first two tasks, never runs,
src/scene/lunpa_fortress.c:377 the third door's trigger and flag (OUTER_DOOR_FLAG + 2) ask for
src/scene/suhalla_desert.c:538 the native passes an actor id where the sprite helper needs a pointer.
src/scene/tolbi_spring.c:799 the original still dereferences actor here when lookup returned NULL.
src/scene/tolbi_spring.c:902 an exact center position leaves a zero divisor below.
src/scene/tolbi_spring.c:1164 coincident positions leave a zero divisor below.
src/scene/world_map.c:1703 site is NULL here; this branch reads its height through null.
src/shop/shop/item_picker.c:183 default code selects the error using selectionResult, still zero.
src/shop/shop_internal.h:73 the original item picker tests its selection result rather than the

DEAD (11)

Where Note
src/battle/battle/turn_end.c:685 *poison is nonzero here, so the hit's cue is always
src/effect/parts/gaia.c:295 always true, as slot is a remainder of a positive count; the
src/effect/parts/judgment.c:206 frame starts at 0 and only grows, so the sparks are never drawn;
src/effect/parts/judgment.c:877 never true, as the sweep's last frame is 319; the ROM keeps the
src/effect/parts/kirin.c:139 always true, as the loop ends at frame 120; the ROM keeps the test.
src/effect/parts/kirin.c:148 always true, as the loop ends at frame 120; the ROM keeps the test.
src/effect/parts/target_strike.c:207 runs once, for the first target only; the ROM keeps the loop.
src/effect/parts/target_strike.c:467 runs once, for the user only; the ROM keeps the loop.
src/field/lucky_dice.c:584 gKeysRepeat is read twice and discarded before the KEY_UP test;
src/field/lucky_dice.c:631 never true with DICE_COUNT 2; a third die would start
src/scene/sol_sanctum_statue.c:1492 SelectStoryExit returns only 1 or -1, so this branch cannot run.

FAKEMATCH (225)

Where Note
include/graphics/graphics.h:14 volatile makes every access to this cell a load or store of its
include/graphics/graphics.h:23 volatile makes every access to this cell a load or store of its
include/lib/call.h:10 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:16 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:22 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:28 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:35 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:42 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:50 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:56 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:62 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:68 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:74 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:80 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:87 forwarding through the pointer prevents GCC 2.96 from sharing
include/lib/call.h:94 forwarding through the pointer prevents GCC 2.96 from sharing
include/menu_list.h:70 the one-pass block keeps both attribute words ahead of the stores
include/oambuf.h:12 the OAM shadow words are volatile, the form the bytes prove in all
include/ram_buffer.h:30 Ram_WorkSlot stays gWorkSlot's linked address as a constant
include/ram_buffer.h:39 Ram_WorkSlot stays gWorkSlot's linked address as a constant
include/sound/audio_engine_types.h:394 volatile steers library C only: without it
include/system/callback_scheduler.h:39 volatile makes every access to this cell a load or store of its
include/system/mem.h:17 the inline call prevents size sharing, avoiding 12 extra fade
include/system/serial_runtime.h:134 volatile makes every access to this cell a load or store of its
src/battle/battle/sprites.c:164 below.
src/debug/level.c:438 an unread 32-byte text buffer, the native frame's 32 extra
src/debug/test.c:406 the benchmark's buffer, unused outside Japanese, keeps the
src/effect/parts/atalanta.c:102 the one-pass block keeps the table address after the second
src/effect/parts/atalanta.c:254 the named result pointer gives the 124-byte frame
src/effect/parts/blitter.c:322 one-pass blocks keep each writing step together and in list
src/effect/parts/blitter.c:329 a one-pass block, as PUT's tag explains; written as plain
src/effect/parts/blitter.c:352 a one-pass block, as PUT's tag explains; written as a plain
src/effect/parts/bolt.c:47 frame local: the unused second blitter word fills four bytes of
src/effect/parts/casting_impact.c:52 inline scope keeps each resource call's arguments local for
src/effect/parts/casting_impact.c:61 keep packing arguments within their own inline scope;
src/effect/parts/casting_impact.c:70 inline scope reloads each image address at its drawing
src/effect/parts/casting_impact.c:79 derive height inside the inline scope so the dimension stores
src/effect/parts/casting_impact.c:90 subtract the scrolled part inside the drawing scope;
src/effect/parts/casting_impact.c:100 forwarding inline; the cropped height stays inside its scope.
src/effect/parts/casting_impact.c:272 local dimensions preserve the packing argument order; as
src/effect/parts/casting_impact.c:388 retain each output pointer while preparing its call; as
src/effect/parts/casting_impact.c:482 restart the pointer's lifetime after gathering so the
src/effect/parts/casting_impact.c:1200 a zero offset known only after gcse keeps the origin copy
src/effect/parts/casting_impact.c:1211 the zero bias above; see there.
src/effect/parts/casting_impact.c:1250 calculate each center before the shared centered draw;
src/effect/parts/condemn.c:38 the unused second position gives the frame its native 76
src/effect/parts/condemn.c:49 the zero is held in sl through the setup calls.
src/effect/parts/condemn.c:170 i is 160 here, so this is 0: a literal 0
src/effect/parts/death_plunge.c:40 frame local: an unused second blitter word fills the frame's
src/effect/parts/death_plunge.c:410 the cancelling pointer updates retain work's allocation
src/effect/parts/death_plunge.c:504 cancelling frame updates preserve the allocation lifetimes;
src/effect/parts/death_plunge.c:548 never read: the native frame keeps 12 unused bytes at
src/effect/parts/djinn_heal.c:197 the size series A draws its sparks
src/effect/parts/eruption.c:51 only draw[0] is used; the unused second word fills four bytes
src/effect/parts/falling.c:119 the slot read through union HeapState keeps its load and
src/effect/parts/frost.c:59 the motes, columns, chips and puffs draw through a pointer
src/effect/parts/growth.c:121 the columns draw through a second pointer to the pair, whose
src/effect/parts/growth.c:249 the scan reuses length as its puff pointer; as a
src/effect/parts/judgment.c:171 the amplitude is a value the native hoists into sl; as 255
src/effect/parts/judgment.c:174 the velocities' zero is a value loop.c hoists into r8; as 0
src/effect/parts/judgment.c:194 the frame > 143 block calls through a pointer to the slot
src/effect/parts/judgment.c:398 the height is a value, so high / 2 is hoisted into fp; as
src/effect/parts/judgment.c:619 palette RAM through a volatile pointer: the native keeps
src/effect/parts/judgment.c:723 the size is a value, so 5 and 20 are hoisted into fp and sl;
src/effect/parts/judgment.c:759 a dead branch restores the label CSE and reload saw
src/effect/parts/judgment.c:800 a dead branch restores the label CSE and reload saw
src/effect/parts/judgment.c:972 forced temporary: the shake value through an s32 keeps the
src/effect/parts/lobbed_shells.c:203 restores the CSE block boundary after the hit block, so
src/effect/parts/lobbed_shells.c:235 the table address loads before the row; as
src/effect/parts/lobbed_shells.c:247 restores the CSE block boundary between group's
src/effect/parts/neptune.c:526 the mask set before the call that it masks; as
src/effect/parts/orbiting.c:130 only draw[0] is used: the second word fills
src/effect/parts/orbiting.c:159 a one-pass block sets the seed counter before its pointer; as
src/effect/parts/orbiting.c:186 pins rec to r0 so loop.c cannot hoist the point's address
src/effect/parts/orbiting.c:196 a one-pass block puts this store before the spark
src/effect/parts/particle_streams.c:159 test through direction so CSE retains the mode reload in this
src/effect/parts/particle_streams.c:302 count fixed in r2 keeps the division temp canonical in cse
src/effect/parts/particle_streams.c:306 work's copy in r0; else it and the 0x778c reload swap r0/r1.
src/effect/parts/particle_streams.c:315 count read and base passed through keep count's load apart
src/effect/parts/particle_streams.c:330 hold takes r7 across the call, so heat takes r4 and its
src/effect/parts/particle_streams.c:334 r6 is clobbered across the call.
src/effect/parts/particle_streams.c:338 hold's use after the call.
src/effect/parts/particle_streams.c:349 reuse blue for the biased signed quotient. A
src/effect/parts/particle_streams.c:353 level in r2; as an ordinary local, 42 of 1532
src/effect/parts/planet_diver.c:180 the mask set before the Random16() call it masks; as
src/effect/parts/plasma.c:355 this fill calls the fixed entry itself;
src/effect/parts/positions.c:119 the unused 12-byte vector preserves both stack
src/effect/parts/projectiles.c:707 cancelling updates under if (target) end CSE
src/effect/parts/projectiles.c:718 the same CSE block end keeps the opposite sign
src/effect/parts/ramses.c:269 the mask set before the Random16() call it masks; as
src/effect/parts/rushing_strike.c:77 the blitter and camera declarations and store order keep the
src/effect/parts/spider_web.c:44 only draw[0] is used: the second word fills
src/effect/parts/spider_web.c:155 pins the frame counter to r9, as native; plain, it takes sl and
src/effect/parts/spider_web.c:160 size and transparent first hold the slot table and blend
src/effect/parts/stars.c:34 only draw[0] is used; the unused second word fills four bytes
src/effect/parts/stars.c:216 only draw[0] is used; the unused second word fills four bytes
src/effect/parts/streaks.c:377 the mask set before the Random16() call it masks; as
src/effect/parts/target_motes.c:475 the family's blitter pair: this effect loads
src/effect/parts/thor.c:37 the mask set before the Random16() call it masks; as \
src/effect/parts/thor.c:83 frame local: the unused second blitter word fills four bytes of
src/effect/parts/thor.c:336 the barrier keeps fullWidth's 32 in this loop's
src/effect/parts/titan_blade.c:104 the mask is loaded into the magnitude before the random word
src/game/game/battle_calc.c:292 the psySeal, confusion and haunt reads go through state[offset]
src/game/game/levels.c:205 the slot offset index * 4 + 88 is recomputed each pass as the
src/game/game/units.c:81 a low-register use keeps mov r3, lr; without it, 1 of 28
src/game/game/units.c:204 the one-pass block keeps the defense load after the
src/graphics/credits/credits.c:1058 unused local; its 32 bytes are the native frame space no
src/graphics/title/intro.c:113 the OAM shadow it builds is struct OamShadow, volatile words
src/graphics/title/intro.c:626 needed to match: workIndex carries the decode destination
src/graphics/title/intro.c:795 the reversible XOR initialization of green folds late,
src/graphics/title/intro.c:804 needed to match: green is 8, so this pair changes no
src/runtime/runtime/fade.c:45 an explicit libgcc call clobbers memory, so the zero test
src/runtime/runtime/frame.c:10 the restart entry is called as returning s32, so its address is
src/runtime/runtime/frame.c:251 tying the old base to the hardware read keeps the 8-byte
src/runtime/runtime/frame.c:256 needed to match: the volatile reread keeps this saved-size
src/runtime/runtime/frame.c:264 complementary conditions, which emit nothing, end the
src/runtime/runtime/scheduler.c:48 the initializer repeats the first pass's assignment, so the
src/runtime/runtime/serial.c:34 IRQ_LOCK written out with the IME address set inside the save
src/runtime/runtime/serial.c:56 Dma_Fill32's fill word is volatile, so the zero is stored
src/runtime/runtime/serial.c:247 volatile keeps the second load of sr->sendBuffer[0], as the
src/runtime/runtime/serial.c:549 gSerialSendSize and gSerialBlockSequence are volatile
src/runtime/runtime/serial.c:556 the halfword record is a HImode 1 loaded from the pool into r8
src/runtime/runtime/transform.c:269 the normalization keeps its CSE block, so the third product
src/scene/altmiller_cave.c:1962 the three callbacks are stored as s32, so the entrance read
src/scene/colosseum_entrance.c:50 forwarded inline for Event_CrowdRecognizesIsaac's one call;
src/scene/colosso_log.c:718 the last place is set at the top as a forced temporary, so the
src/scene/colosso_log.c:1470 called through a cast to the s32 call type the bytes show,
src/scene/colosso_log.c:1802 called through a cast to the s32 call type the bytes show, its
src/scene/colosso_log.c:1813 called through the s32 cast, its result discarded, as in the
src/scene/colosso_log.c:1955 the void function is called as returning s32, which loads r1
src/scene/colosso_log.c:1961 called as returning s32, as in the first arm; by its
src/scene/colosso_river.c:496 base is 0 from the top of the function, so 0 - approach + 1 is
src/scene/colosso_river.c:965 called as returning a value, the call sets r0 after both
src/scene/colosso_river.c:1019 called through a cast to the s32 call type the bytes show, its
src/scene/colosso_river.c:1156 called through a cast to the s32 call type the bytes show, its
src/scene/colosso_river.c:1167 called through a cast to the s32 call type the bytes show, its
src/scene/colosso_river.c:1316 the void function is called as returning s32, the call the
src/scene/colosso_river.c:1322 the same call as returning s32; by its prototype, 2
src/scene/colosso_wall.c:709 resultBase, set to 2 at the top, keeps the sum unfolded; as
src/scene/colosso_wall.c:1057 called through a cast to the s32 call type the bytes show,
src/scene/colosso_wall.c:1115 called through a cast to the s32 call type the bytes show,
src/scene/colosso_wall.c:1390 called through a cast to the s32 call type the bytes show, its
src/scene/colosso_wall.c:1400 called through the s32 cast like the call above; as a direct
src/scene/colosso_wall.c:1547 called through a cast to the s32 call type the bytes show; as
src/scene/colosso_wall.c:1554 the same cast as above; as a call by its prototype, 2
src/scene/crossbone_isle.c:292 retain the scalar scene-slot address calculation; direct
src/scene/crossbone_isle_pillar_rooms.c:362 a one-pass block around the object and height issues the
src/scene/crossbone_isle_pillar_rooms.c:989 the u8 view keeps these flag updates out of the record's
src/scene/imil.c:149 retain row 10's talk-facing byte access (10 * 24 + 22);
src/scene/imil.c:538 called through a cast to the value-returning call the bytes
src/scene/imil.c:1292 retain the byte access to steeringFlags; as the direct field,
src/scene/imil_fuchin_falls.c:1126 needed to match: the shared zero/address-word lifetime avoids
src/scene/imil_fuchin_falls.c:1301 needed to match: copying three scripts keeps the 12-byte frame
src/scene/kalay_tolbi_docks.c:310 needed to match: one coin-label selector preserves its saved
src/scene/kolima_forest_bend.c:417 y is updated through an s32 lvalue, since the union's s16
src/scene/kolima_forest_bridge.c:1090 called through a cast to the call type the bytes show; called by
src/scene/lamakan_desert.c:453 pins the byte offset to r6, where the game keeps it with the
src/scene/lemurian_ship.c:206 volatile restores the form the bytes prove: blend lives at sp+18
src/scene/lemurian_ship.c:600 volatile restores the form the bytes prove: cnt lives at sp+6
src/scene/lemurian_ship.c:696 volatile restores the form the bytes prove: cnt lives at sp+2
src/scene/lunpa_fortress.c:3110 the three section attributes below place non-const tables in
src/scene/mccoy_palace.c:103 a byte view of placement rows 6 to 9 keeps the native
src/scene/mccoy_palace_garden.c:195 a value-returning cast loads the actor id after the two
src/scene/mccoy_palace_garden.c:199 the one-pass block keeps r0 last among the call above's
src/scene/mercury_lighthouse.c:564 width and height in locals, so loop.c hoists copyWidth's 2
src/scene/mercury_lighthouse.c:2477 called through an unprototyped cast, which loads r1 before
src/scene/mercury_lighthouse.c:2489 called through an unprototyped cast, which loads r1
src/scene/mercury_lighthouse_aerie.c:1722 the byte view keeps this store ahead of the beacon's reload; the
src/scene/sol_sanctum_elemental_star_room.c:536 the bit held in the loop counter itemSlot keeps the 1 in r5
src/scene/sol_sanctum_luna_sol_rooms.c:1174 the zero goes through the sprite variable, whose pseudo has
src/scene/sol_sanctum_luna_sol_rooms.c:1208 the mask temporary puts the flags in r2 and the motion
src/scene/tolbi_ship_deck.c:1396 the do/while sets r0 = 21 first, straight after the call; as a
src/scene/tolbi_ship_deck.c:1798 the work pointer read as a word may alias the facing stores, so
src/scene/tolbi_spring.c:570 keep message in r10 and label in r9; as whole marker ids, the
src/scene/tolbi_spring.c:575 keep the coin label in r9; otherwise the repeated marker takes
src/scene/tolbi_spring.c:709 the pointer pair recomputes the prize-weight base in r0
src/scene/tolbi_spring.c:715 keeps the slot in r1 and state + 1 in r0; as a plain
src/scene/tolbi_spring.c:726 keeps state + 1 in r0 as the native does.
src/scene/tolbi_spring.c:730 the native recomputes state + 1 after the call.
src/scene/tret_tree_interiors.c:845 the explicit libgcc call keeps the final count's reload in r3;
src/scene/tret_tree_interiors.c:880 the counter pointer is taken again here so it is dead across
src/scene/vale.c:1588 repairActor's dead zero initializer and the stoppedMotionFlags
src/scene/vale_home.c:84 forwarding inline for Event_DepartForQuest's three calls;
src/scene/vale_home.c:94 forwarding inline called as returning a value, its result
src/scene/vault.c:960 reuse the coordinate local for the direction mask. With the
src/scene/vault.c:988 preserve the sprite-flags address scheduling boundary. As
src/scene/vault_cave.c:165 DIRECTION_STEP reads the s16-pair table (x high, z low) as one
src/scene/vault_interiors.c:2984 the used-stop test reads the stopIndex through a volatile
src/scene/vault_interiors.c:3108 a dead store keeps this empty branch through the first jump
src/scene/venus_lighthouse.c:1794 forced temporary: the search counter's zero, set before the
src/scene/venus_lighthouse.c:2463 the empty asm gives the zero the refs that put it in r3
src/scene/venus_lighthouse.c:2467 needed to match: this CSE block keeps the blend
src/scene/venus_lighthouse.c:2526 a value-returning cast keeps this call from cross-jumping
src/scene/world_map.c:1727 a second clear through a byte pointer, removed after reload,
src/shop/shop/artifacts.c:348 only the copy read is volatile, so its lifetime stays
src/window/battle_command/command_row.c:128 vram, offset and mask keep the row loop's index
src/window/battle_command/command_row.c:135 tmp, set twice, is no giv, so the tile is
src/window/battle_command/command_row.c:168 as in mode 1: vram, offset and mask keep the tile
src/window/battle_command/command_row.c:174 needed to match: tmp, as in mode 1 (271 differ
src/window/battle_command/debug.c:448 the count-derived mask keeps the mask in r9 and work in fp; as
src/window/battle_command/debug.c:451 defining the offset before the loop keeps its load in r1;
src/window/battle_command/djinn_menu.c:160 the flag, zero on every continuation, keeps k an
src/window/battle_command/djinn_preview.c:143 this char store and the two typed stores below keep the
src/window/battle_command/djinn_preview.c:158 typed like the window pointer, the word store waits for the
src/window/battle_command/djinn_preview.c:163 a pointer-typed clear does not wait for the x and y stores
src/window/battle_command/icon_menu.c:103 needed to match: reading the y halfword through attr
src/window/battle_command/joined.c:34 the shared cursor union preserves pointer-store ordering; an
src/window/battle_command/party_commands.c:212 called through a cast as returning a doubleword, the call
src/window/battle_command/save.c:112 the signed cursor from the party tail keeps the native literal
src/window/battle_command/summon_menu.c:230 the cursor pushed through sprite, re-pointed at it here, keeps
src/window/battle_command/targets.c:81 this value-preserving null initializer keeps infoWin in r10;
src/window/battle_command/targets.c:192 the separate switch arms, which emit no branch, end CSE
src/window/glyph_arm.c:65 these records reserve the native frame's 64-byte unused area.
src/window/glyph_arm.c:119 needed to match: the row increment is written in both
src/window/window/decode.c:691 value counts the letters, compared unsigned, for the
src/window/window/frames.c:353 never read: the native frame keeps 8 bytes above the two
src/window/window/icons.c:191 three more names of the one table keep each case's own literal
src/window/window/options.c:312 the shared cursor union keeps pointer stores before window
src/window/window/selection.c:14 the helper takes the node's base field, so each row store forms
src/window/window/sprites.c:226 needed to match: the embedded OAM view preserves
src/window/window/sprites.c:250 this XOR pair folds away but keeps work and base as separate
src/window/window/sprites.c:292 needed to match: the embedded OAM view preserves
src/window/window/sprites.c:429 needed to match: the unsigned halfword read of the x cell; a
src/window/window/text_tiles.c:83 needed to match: an unread 32-byte reserve, the native frame's
src/window/window/windows.c:480 storing the new tail as a RenderOutput * keeps both stores in

FAKEMATCH(barrier) (9)

Where Note
src/battle/battle/transition.c:313 REG_DISPCNT reached from DMA3's address through an
src/field/field/map_layers.c:781 the same ip copy after the wait, which CSE's copy
src/menu/menu/djinn.c:1495 an empty asm keeps entry live past the owner's
src/window/battle_command/djinn_menu.c:478 an empty asm reading the row in a low register
src/window/battle_command/party_commands.c:364 counted as 4 bytes, the empty asm puts the pool
src/window/battle_command/party_commands.c:443 counted as 4 bytes, the empty asm puts the pool
src/window/battle_command/party_commands.c:634 counted as 4 bytes, the empty asm puts the pool
src/window/battle_command/status.c:301 an empty asm, so the move into sl comes between
src/window/battle_command/status.c:314 counted as 4 bytes, the empty asm puts gFrameCount's

FAKEMATCH(dead) (39)

Where Note
src/battle/battle/background.c:181 two updates that cancel, under a test that emits
src/battle/battle/encounter.c:73 result set to 0, a store no read sees, whose register
src/battle/battle/formation.c:31 an unused array for the frame's 28 bytes; without it, 2
src/battle/battle/link.c:260 an unused array for the twenty bytes of frame no
src/battle/battle/motion.c:315 an unused position for the frame's 12 bytes; without it,
src/battle/battle/plan.c:558 an unused array for the frame's 8 bytes below counts;
src/battle/battle/sprites.c:117 two updates that cancel, raising sprite's priority in
src/battle/battle/staging.c:476 plan cleared and restored under tests that emit
src/battle/battle/star_field.c:205 an unused Spark for the frame's 28 bytes; without it, 2
src/battle/battle/star_field.c:365 an unused array for the frame's 40 bytes; without it, 2
src/field/field/animation.c:612 a store of the byte it reloads keeps the -1 the native
src/field/field/map_layers.c:755 the updates that cancel out emit nothing but end CSE
src/field/field/object_camera.c:60 an unused local for the room the native frame keeps for
src/field/field/object_camera.c:222 an unused local for the room the native frame keeps for
src/field/field/player_control.c:827 an unused local for the 68 bytes of native frame no
src/field/field/script_commands.c:459 this dy, overwritten below, ranks y above the bounds
src/field/field/sprite_draw.c:403 two unused arrays for 24 bytes of the native 68-byte
src/field/lucky_dice.c:259 an unused local for the 32 bytes the native frame keeps
src/menu/clear.c:1091 a halfword copy of the quantity nothing reads,
src/menu/menu/icons.c:82 a test whose two arms both return -1, which emits
src/menu/menu/icons.c:116 a test whose two arms both return -1, which emits
src/menu/menu/psynergy.c:145 a redundant copy of -1 and an XOR test give -1 and 1
src/menu/menu/psynergy.c:169 menu cleared and restored under a false test, so
src/menu/menu/psynergy.c:851 each entry cleared twice through the byte-offset
src/menu/menu/use.c:77 a test that is never true (partyResultShown is still
src/object/object/fade_overlay.c:46 four frame bytes nothing reads or writes, which make the
src/object/psynergy_effects/climbing.c:136 a six-word probe, though only its first three words
src/object/psynergy_effects/climbing.c:216 a six-word probe, though only its first three words
src/scene/tolbi_spring.c:862 the unused vector keeps twelve frame bytes; without it,
src/window/battle_command/djinn_menu.c:124 cursorSprite set before the loop, which sets it again,
src/window/battle_command/djinn_menu.c:485 cursorSprite set again to the cursor it already points
src/window/battle_command/djinn_preview.c:169 advancing and restoring the captured pointer keeps
src/window/battle_command/item_menu.c:196 cursorSprite set again to the cursor each frame orders
src/window/battle_command/name_entry.c:431 no-op saves and restores keep destination,
src/window/battle_command/name_entry.c:728 no-op saves and restores keep destination,
src/window/battle_command/party_commands.c:233 twelve dead stores restore the native frame's spill
src/window/battle_command/psynergy_menu.c:199 a dead store keeps the test above from being
src/window/battle_command/targets.c:249 seventeen dead stores restore the native frame's spill
src/window/window/shortcuts.c:211 an unread flag, which forces fresh zeros for both

FAKEMATCH(one-pass) (41)

Where Note
include/menu_list.h:171 the do { } while (0) wrapper steers, so this is a device
include/system/irqlock.h:29 the wrapper; as *(ime) = (saved), 2 and 6 instructions
include/system/irqlock.h:47 the wrapper keeps the restore apart from the code
include/system/serial_runtime.h:151 the blocks preserve IME write order; the repeated
src/battle/battle/auto_battle.c:440 the five effects in a one-pass block, which places
src/battle/battle/background.c:48 the IME save in a one-pass block and a loop on a zero
src/battle/battle/encounter.c:125 the seed's store in a one-pass block, which keeps
src/battle/battle/link.c:146 the copy in a one-pass loop, a scheduling barrier
src/battle/battle/plan.c:642 the rolls in a one-pass block left by break, which
src/battle/battle/staging.c:1039 the block keeps the party loop's first test from
src/battle/battle/star_field.c:213 an empty one-pass loop, a scheduling barrier that
src/battle/battle/star_field.c:276 the zero and its stores in a one-pass block, which
src/battle/battle/targeting.c:67 a loop left by its closing break; without it, 14
src/field/field/script_commands.c:625 it ends cse2's block, so the division works on the
src/field/field/view.c:72 its loop notes keep gBgTileBuffer's address load ahead
src/field/field/world_map.c:179 its loop notes keep the 0x100 for BG2PD built just
src/menu/clear.c:808 the block makes each draw call rebuild the
src/menu/lobby.c:164 a loop left by break after its first pass, which
src/menu/lobby.c:505 the record's send in a one-pass block, which keeps
src/menu/lobby.c:523 the retry limit's test in a one-pass block,
src/menu/lobby.c:564 the recovery table's copy in a one-pass block, which
src/menu/lobby.c:621 result's zero in a one-pass block, which loads it
src/menu/menu/djinn.c:137 the do { } while (0) ends the selection store's
src/menu/menu/djinn_preview.c:265 the cursor's store in a one-pass block, which
src/menu/menu/djinn_preview.c:283 the cursor's store in a one-pass block, which
src/menu/menu/djinn_preview.c:298 the cursor's store in a one-pass block, which
src/menu/menu/djinn_preview.c:317 the cursor's store in a one-pass block, which
src/menu/menu/status.c:128 the slot's clearing in a one-pass block stores the
src/object/psynergy_effects/move.c:304 the call in a do { } while (0), which keeps the
src/sound/sound.c:146 the block keeps the state-address load after preset
src/window/battle_command/command_row.c:158 the exit test compares count instead of
src/window/battle_command/djinn_menu.c:148 a loop that runs once keeps the redraw reload
src/window/battle_command/djinn_menu.c:472 the x computed in a block of its own keeps the
src/window/battle_command/pictures.c:488 the handler's address set in a block of its own keeps
src/window/battle_command/save.c:214 a never-taken null arm's one-pass block ends CSE
src/window/battle_command/save.c:503 the blue shift in a block of its own stays after
src/window/battle_command/save.c:513 the store in a block of its own stays ahead of the
src/window/battle_command/summon_menu.c:74 the first scan's exit inside a block that runs once
src/window/window/decode.c:341 the size set in a block of its own, so the slot
src/window/window/decode.c:856 the size set in a block of its own, as in the
src/window/window/glyphs.c:112 an empty block keeps the spill of out ahead of the

FAKEMATCH(pin) (3)

Where Note
src/menu/menu/djinn_figures.c:109 rowY fixed in r2, where the row's second read goes;
src/window/battle_command/targets.c:45 the condition window in r9, where the native keeps it; as
src/window/window/selection.c:807 the zero in r0, live across the first loop as the

FAKEMATCH(temporary) (42)

Where Note
include/system/io_write_queue.h:55 count_ holds &q->count; as q->count, 15 linked
include/system/io_write_queue.h:80 count_ as in IO_WRITE_QUEUE_PUSH; as q->count, its
src/battle/battle/sprites.c:72 result cleared a halfword at a time, which keeps
src/battle/battle/staging.c:179 completed cleared a halfword at a time, which keeps
src/battle/battle/staging.c:839 the mask in a variable and the frame read into
src/battle/battle/star_field.c:372 one variable holds slot 12's address, the battle
src/field/field/map_layers.c:646 the chains of temporaries set the registers and the
src/field/field/map_layers.c:870 the copy chain through tmp2 to tmp17 sets
src/field/field/map_layers.c:952 the word and index temporaries set the registers and
src/field/field/sprite_viewer.c:65 only gKeysHeld and gKeysRepeat are held, in fp and
src/field/field/sprite_viewer.c:138 the native adds the flags offset to the sprite's
src/field/field/sprite_viewer.c:396 the bound in a local compares as cmp against
src/field/lucky_dice.c:78 the product built in its own variable from a copy
src/field/vertices.c:164 one variable holds the x sum and then u, both
src/menu/lobby.c:1305 score holds the tally's address, then the tally;
src/menu/lobby.c:1347 score holds the record's address, as in the
src/menu/menu/item.c:1483 the saved unit reuses owner (and buffer for
src/menu/menu/psynergy.c:332 byte offsets held in scalars keep partySlot in its
src/menu/menu/status.c:2044 y stored through a pointer to the field keeps the
src/object/object/actors.c:331 the condition read into a u16 local and then an
src/object/object/field_fx.c:427 the spawned marker reuses actor, so the
src/object/object/items.c:157 the answer kept in partyIndex, which ranks it
src/object/psynergy_effects/carry.c:77 the position reached through p everywhere but in
src/object/psynergy_effects/context.c:32 the view position read as two adjacent words
src/object/psynergy_effects/dispatch.c:278 a pointer local to gFrameCount, volatile as it is
src/object/psynergy_effects/effect_slot.c:154 1.0 in a local set before maxSpeed takes r2 beside
src/object/psynergy_effects/events.c:325 the slot copied to a block local loads before
src/object/psynergy_effects/move.c:416 1.0 in a block local set before the block's
src/object/psynergy_effects/ply.c:163 a redundant copy keeps object as a second
src/object/psynergy_effects/weather.c:112 words holds the fill's zero, the decode buffer and
src/object/psynergy_effects/weather.c:236 size reused for the cleared word keeps the zero in
src/object/psynergy_effects/weather.c:248 one integer cursor for the attribute stores and
src/object/psynergy_effects/weather.c:382 size reused for the fill word keeps the zero in r1,
src/object/psynergy_effects/weather.c:397 one integer cursor for the stores and the x keeps
src/scene/common/colosso_marker.h:209 the size bit (0x40000000) in a local puts the
src/scene/common/map_panel.h:37 end takes the bound where the loop tests it,
src/scene/vale_babi.c:379 the event record read into a block-local before
src/window/battle_command/debug.c:485 a word temporary for the slot keeps the
src/window/window/glyphs.c:153 pixel assigned in the argument computes pixels
src/window/window/glyphs.c:166 pixel assigned in the argument, as in the
src/window/window/selection.c:525 the tile pointer in a local, loaded early into r5;
src/window/window/shortcuts.c:136 the title message passed through slot; as the

FAKEMATCH(volatile) (28)

Where Note
include/frame.h:19 as plain u8, 88 of 438 instructions differ in tbs-en
include/frame.h:29 as plain u16, 33 of 628 instructions differ in tbs-en
include/frame.h:34 as plain u16, 119 of 403 instructions differ in tbs-en
include/frame.h:42 as plain u32, 27 functions differ in tbs-en, most
include/frame.h:50 as plain u8, 82 of 403 instructions differ in tbs-en
include/frame.h:54 as plain u8, 45 of 203 instructions differ in tbs-en
include/frame.h:58 as plain u8, 26 of 403 instructions differ in tbs-en
include/frame.h:67 as plain u16, 89 of 403 instructions differ in tbs-en
include/frame.h:71 as plain u16, 117 of 403 instructions differ in tbs-en
include/keystate.h:15 as plain u32, 18 functions differ in tbs-en, most
include/keystate.h:19 as plain u32, 41 functions differ in tbs-en, most
include/keystate.h:23 as plain u32, 54 functions differ in tbs-en, most
include/keystate.h:27 as plain u32, 70 of 121 instructions differ in tbs-en
include/keystate.h:32 as plain u32, 52 of 121 instructions differ in tbs-en
src/battle/battle/sprites.c:176 the entry read again through a volatile view,
src/battle/battle/transition.c:23 the four saved BGxCNT values kept on the stack, each
src/field/field/player_control.c:173 the volatile read puts gDebugMode's address in r5 here
src/field/field/world_map.c:125 the fill word is this function's own volatile local,
src/field/lucky_dice.c:263 four halfwords stored to sp+166..160 and each
src/field/lucky_dice.c:283 the OAM shadow it builds is struct OamShadow, whose
src/menu/lobby.c:318 gSerialReceivedSize is volatile (serial_runtime.h),
src/object/colorfx.c:352 struct OamShadow's volatile words (oambuf.h) keep
src/object/object/run_scene.c:310 gDebugMode read through a volatile pointer,
src/object/psynergy_effects/actor_commands.c:379 saved lives in a 4-byte frame, stored once and
src/object/psynergy_effects/weather.c:332 the unsigned long alias combines the size
src/scene/common/mercury_lighthouse_palette_cycle.h:22 cur lives at sp+2, stored with strh and loaded again
src/window/battle_command/command_row.c:303 the add of 0x44a stays apart from the store it
src/window/battle_command/pictures.c:56 gFrameTick read again for the second sprite, as the

FAKEMATCH(wrapper) (6)

Where Note
src/field/field/map_layers.c:341 these four copies call the fixed entry itself, past
src/menu/clear.c:827 the division written as a call to
src/menu/menu/item.c:178 the trade's unit copies call the routine through
src/object/object/items.c:177 called through a cast to the s32 function the
src/object/object/step.c:194 the party read through struct StepOwner, whose alias
src/object/psynergy_effects/view.c:51 the division written as a call to __divsi3, an