Such simple compilation can be done by the parsing pass. No register management is needed. Most stack machines can copy stack entries to avoid memory access (which is much slower), but these are usually trivial. The same opcode that handles the frequent common case of an add, an indexed load, or a function call will also handle the general case involving complex subexpressions and nested calls. The compiler and the CPU do not need special cases for instructions that have separate calculation paths for addresses.