On Fri, Aug 11, 2017 at 1:39 PM, Alistair Francis <alistair.fran...@xilinx.com> wrote: > On Fri, Aug 11, 2017 at 1:38 PM, Richard Henderson > <richard.hender...@linaro.org> wrote: >> On 08/11/2017 01:29 PM, Alistair Francis wrote: >>> On Fri, Aug 11, 2017 at 1:24 PM, Richard Henderson >>> <richard.hender...@linaro.org> wrote: >>>> On 08/11/2017 01:13 PM, Alistair Francis wrote: >>>>>>> + tcg_gen_ext_i64(val, val, memop); >>>>>> >>>>>> What is this addition intended to accomplish? Because of the position >>>>>> within >>>>>> the code, you know that memop contains MO_64, so that this is a no-op. >>>>> >>>>> This is when size == 2 so it's a 32bit operation so memop contains MO_32. >>>> >>>> It's a paired 32-bit operation, so we're operating on a 64-bit quantity. >>>> So >>>> extending from 32-bits would be actively wrong. >>> >>> From what I can see though, the 32bit memop is carried into the >>> tcg_gen_atomic_cmpxchg_i64() call so the value returned to tmp is >>> masked by the 32bit operation. >>> >>> Is passing down MO_32 into tcg_gen_atomic_cmpxchg_i64() wrong then as >>> it ends up as a 64-bit operation? >> >> If we're passing MO_32 down to cmpxchg_i64 for this case, you have indeed >> found >> a bug. I'll investigate this further on Monday. > > Maybe that is why I'm seeing these failures. I'll have a look as well > to see if this fixes my problems.
That's it. That wrong mask was causing all my breakages. I'll send out a new series, thanks for your help. Thanks, Alistair > > Thanks, > Alistair > >> >> >> r~ >>