The XCASM compiler generates code that uses the W and FSR registers together with some RAM (for partial results) during the computation of results and array element addresses.

The use of decicated registers and RAM has implications on the re-entrentcy of the generated code and its suitability for use in interrupt service routines.

Furthermore some optimisation stratergies involve the generation of partial results in the destination location. This can have serious side effects if the destination location is also being monitored or otherwise used by an interrupt service routine.

The compiler can be forced to use alternate RAM for partial results by simply replacing the temporary RAM symbolic name with the name of an assembler variable and assigning the actual name of the new temporary RAM to the assembler variables. This is described in detail here