[aarch64-port-dev ] SPECjvm2008 derby gives SIGBUS with -XX:+TieredCompilation

Andrew Dinn adinn at redhat.com
Tue Jan 21 02:57:57 PST 2014


On 21/01/14 10:32, Edward Nevill wrote:

How about those stlxr + branch insns:

> --- +Tiered compilation (failing case) ----
>   . . .
>   0x0000007f712e98e8: ldaxr	w8, [x0]
>   0x0000007f712e98ec: cmp	w8, w2
>   0x0000007f712e98f0: cset	x8, ne
>   0x0000007f712e98f4: b.ne	0x0000007f712e9900
>   0x0000007f712e98f8: stlxr	w8, w9, [x0]
>   0x0000007f712e98fc: cbnz	x8, 0x0000007f712e98e8

> --- -TieredCompilation (success case) ---
>   . . .
>   0x0000007f8580a9b4: ldaxr	w8, [x10]
>   0x0000007f8580a9b8: cmp	w8, w14
>   0x0000007f8580a9bc: b.ne	0x0000007f8580a9d0
>   0x0000007f8580a9c0: stlxr	w8, w12, [x10]
>   0x0000007f8580a9c4: cmp	w8, wzr
>   0x0000007f8580a9c8: b.eq	0x0000007f8580a9d0

The first one uses a stlxr which sets w8 and then branches on x8

The second one uses a stlxr which sets w8, compares w8 against zr and
then branches on the resulting flag. So, will the first one not suffer a
spurious failure when the top half of x8 is non-zero? Whereas the second
one will always get the correct result?

regards,


Andrew Dinn
-----------



More information about the aarch64-port-dev mailing list