On Wed, 2011-11-30 at 17:05 -0800, Richard Henderson wrote:
> Oh, for the record, I think we should probably be saving and restoring the fp
> state on all targets. If we restart a transaction, we're really saying that
> absolutely nothing happened. Something like
>
> double a, b, c;
> __transaction_atomic { a = b+c; }
>
> shouldn't erroneously set the overflow flag if the first iteration of the
> transaction generates an infinity but the final iteration doesn't. The x86
> port is currently wrong for this, as is the port I just posted for ARM, but I
> make the attempt here.
The ABI defines the pr_hasNoFloatUpdate and pr_hasNoVectorUpdate flags
for _ITM_beginTransaction but we don't handle these currently. I guess
we should do the save/restore unless those flags are set?
How difficult would it be to set these flags if there is no float/vector
update (I guess inter-procedural analysis could be sufficient as a first
step).
Torvald