K 10 svn:author V 3 jhb K 8 svn:date V 27 2020-01-17T21:57:05.440631Z K 7 svn:log V 663 MFC 353931: Fix atomic_*cmpset32 on riscv64 with clang. The lr.w instruction used to read the value from memory sign-extends the value read from memory. GCC sign-extends the 32-bit comparison value passed in whereas clang currently does not. As a result, if the value being compared has the MSB set, the comparison fails for matching 32-bit values when compiled with clang. Use a cast to explicitly sign-extend the unsigned comparison value. This works with both GCC and clang. There is commentary in the RISC-V spec that suggests that GCC's approach is more correct, but it is not clear if the commentary in the RISC-V spec is binding. Sponsored by: DARPA END