Showing posts with label constant propagation. Show all posts
Showing posts with label constant propagation. Show all posts

2015-10-20

Super Mario 64 subroutine 2B3C, part 2: Constants

This entry will focus on a second subroutine in Super Mario 64, USA version, for the Nintendo 64. It's a MIPS III subroutine at offset 2B3C (hexadecimal) within the ROM.

Last time, we found that the programmer who wrote this C function didn't do so well, leading to the compiler determining that every use of a pointer in a global variable needed to reload its value from memory in order to store a new value through it.

Before writing this entry, I rewrote the subroutine as if the programmer had written a better version of the C function and fed it to the compiler.

Because some data probably exists around the global pointer variable, I chose to take a copy of the global pointer inside the function (struct state* local_state = global_state;) instead of using a non-pointer global variable (struct state global_state).