|
@@ -70,10 +70,11 @@ _GLOBAL(load_up_altivec)
|
|
|
MTMSRD(r5) /* enable use of AltiVec now */
|
|
|
isync
|
|
|
|
|
|
- /* Hack: if we get an altivec unavailable trap with VRSAVE
|
|
|
- * set to all zeros, we assume this is a broken application
|
|
|
- * that fails to set it properly, and thus we switch it to
|
|
|
- * all 1's
|
|
|
+ /*
|
|
|
+ * While userspace in general ignores VRSAVE, glibc uses it as a boolean
|
|
|
+ * to optimise userspace context save/restore. Whenever we take an
|
|
|
+ * altivec unavailable exception we must set VRSAVE to something non
|
|
|
+ * zero. Set it to all 1s. See also the programming note in the ISA.
|
|
|
*/
|
|
|
mfspr r4,SPRN_VRSAVE
|
|
|
cmpwi 0,r4,0
|