On Mon, Aug 02, 2021 at 04:18:58PM +1000, Michael Ellerman wrote: > > Go up to this point has only used the vdso function __kernel_clock_gettime; > > it > > is the only entry point which would need to explicitly avoid R30 for > > Go's sake. > > I thought about limiting the workaround to just that code, but it seemed > silly and likely to come back to bite us. Once the compilers decides to > spill a non-volatile there are plenty of other ones to choose from.
It can be cheaper to spill N..31 consecutively, using stmw for example. For 64-bit Power implementations it doesn't currently make any difference. Since none of this will be inlined it doesn't have any real impact. (This also happens with -m32 -fpic, which always sets GPR30 as fixed, it is the offset table register. With those flags -ffixed-r30 doesn't do anything btw (r30 already *is* a fixed function register), and this will not work with a Go that clobbers r30. But this is academic :-) ) Segher