Here's some good background on the specific extensions used. It's not really written from the perspective of "why?", but it should give you some good background on the reasons for choosing this approach:
https://developer.ibm.com/tutorials/l-gcc-hacks/