This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC] Port libitm to powerpc



On 1 Dec 2011, at 20:20, Richard Henderson wrote:


On 12/01/2011 10:47 AM, Joseph S. Myers wrote:
As I previously noted in the ARM discussion, C specifically says that
setjmp/longjmp should *not* save/restore floating-point exceptions and
rounding modes. Think of the floating-point state as being a global
variable (well, thread-local).

Exactly.


If the fpscr _were_ a TLS variable, seen to be modified inside a transaction, we would log its initial value so that we could restore that original value on a transaction restart or transaction cancel.\

well, I saw ...


	mffs	f0
	stfd	f14,  0+OFS_FR+BASE(r1)

[snip]

stfd f0, OFS_FPSCR+BASE(r1)

in your posted code ... and wondered ..

So, as you say the ARM libc setjmp/longjmp implementation is wrong, but we do need that save and restore here.

now I'm slightly confused - do we need to preserve if across the call or not?


cheers
Iain


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]