Microsoft on RSE (2002) https://web.archive.org/web/20021018050724/http://portals.de...
Smotherman's notes (2002) http://people.cs.clemson.edu/~mark/subroutines/itanium.html
USENIX presentation on Itanium (2005) https://www.usenix.org/legacy/events/usenix05/tech/general/g...
I could see how you wouldn't expect it coming from another ISA and they could be a bit more explicit. It was weird. It was documented, though, by different people building on Itanium. Different workloads use it in a different way for efficiency.
"This also has a side-effect on function pointers. Since function pointers are generally used at some distance from allocation, they might be used in a module with a different gp value. The compiler gets around this by not compiling a function pointer to a single pointer-sized value; it compiles to a pair of pointer-sized values, one representing the address of the first instruction (bundle on IA64) in the function, the other being the correct gp value to use."
http://mikedimmick.blogspot.com/2004/01/ia64s-global-pointer...
setjmp()/longjmp() are not guaranteed to work with local variables not marked volatile.