http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58139
Bug ID: 58139 Summary: PowerPC volatile VSX register live across call Product: gcc Version: 4.9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: dje at gcc dot gnu.org void tightness3_intrinsics2(double* A, double* B, int N) { __vector double * vA = (__vector double*)A; __vector double * vB = (__vector double*)B; __vector double va0, va1; double b0, b1, b2, b3; va0 = vA[0]; va1 = vA[1]; b0 = log(vec_extract(va0, 0)); b1 = log(vec_extract(va0, 1)); b2 = log(vec_extract(va1, 0)); b3 = log(vec_extract(va1, 1)); __vector double vb0 = {b0, b1}; __vector double vb1 = {b2, b3}; vB[0] = vb0; vB[1] = vb1; } xxpermdi 1,63,63,2 xxpermdi 30,30,29,0 bl log nop addi 1,1,192 li 0,-80 stxvd2x 30,0,30 GCC should not expect VSX 30 to be preserved across the call to log().