I've never seen them change from GCC release to GCC release. Once they
are added, they appear to be written in stone. Changing them would
probably be a bad idea.
The defines will change as you move from one processor to another.
Xeon's seem to cause a lot of confusion. Folks will compile on one
Xeon model, and then experience a SIGILL on another one. The
difference between Xeon E5-2699v4 and Xeon E5-2699v3 is not very
obvious until you realize its Broadwell (E5-2699v4) vs Haswell (
E5-2699v3).
There are a few odd ones, like -mrdrnd and __RDRND__ for the rdrand
instruction. In contrast, rdseed uses all the vowels: -mrdseed and
__RDSEED__.