It is not necessary for this macro to come up with a legitimate address. The compiler has standard ways of doing so in all cases. In fact, it is safe for this macro to do nothing. But often a machine-dependent strategy can generate better code. Autoincrement and autodecrement addresses typically have mode-dependent effects because the amount of the increment or decrement is the size of the operand being addressed.
Some machines have other mode-dependent addresses.
Many RISC machines have no mode-dependent addresses. You may assume that addr is a valid address for the machine. A C expression that is nonzero if x is a legitimate constant for an immediate operand on the target machine.