svn commit: r279937 - in head/sys/powerpc: include powerpc

Nathan Whitehorn nwhitehorn at freebsd.org
Fri Mar 13 18:13:25 UTC 2015


On 03/13/15 10:59, Konstantin Belousov wrote:
> On Fri, Mar 13, 2015 at 10:45:46AM -0700, Nathan Whitehorn wrote:
>> We'll need to hack the compiler in this case, since it assumes setjmp()
>> saves and restores the vector registers. I'm really not sure which
>> option is worse.
> Changing the compiler is arguably much worse than breaking ABI of the
> tier 2 platform, indeed.  We must maintain the situation where the stock
> build of the compilers work out of box.
>
> Still, how the compiler' assumptions are laid out ?  It could be argued
> that compilers on x86 also assume that FPU register file is restored by
> longjmp.  %st* and %xmm* are defined as not preserved across function
> calls, but I suspect that practical rule for setjmp() is that floating
> vars better not be used in the target frame.
>
> Hm, indeed f14-f31 and v20-v31 are marked as non-volatile for 64bit ABI.
>

The compiler assumes that f14-f31 and v20-v31 are preserved by setjmp() 
(and, e.g. glibc's setjmp() does in fact preserve them). It also tries 
not to use those registers too much, so the practical impact is limited, 
but it should actually be fixed.
-Nathan


More information about the svn-src-all mailing list