I've been using (for a shockingly large number of years!) the approach that Keith Moe and Charles Mills described. It has worked very well and caused no trouble for my product development and support teams. All of the products on which I've been a designer and developer have been nearly 100 percent OCO, so, in the main, we don't have to be concerned with code written by customers. When we ship assembler macros for customer use we have the tendency to use BRAS to branch around in-line constants when absolutely necessary (but we try very hard to avoid this). We also have a lot more usage of the machine instructions which have appropriate immediate operands (things like Load Logical Immediate).
Bob