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
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to