RKSimon added inline comments.
================ Comment at: clang/lib/Headers/immintrin.h:301 + unsigned long long tmp; + if (__builtin_ia32_rdrand32_step((unsigned int *)&tmp) & + __builtin_ia32_rdrand32_step(((unsigned int *)&tmp) + 1)) { ---------------- RKSimon wrote: > craig.topper wrote: > > craig.topper wrote: > > > Should `&` be `&&`? > > Can we avoid the pointer cast here? Use two unsigned ints and manually > > concatenate them to a 64-bit value. > +1 > ``` > unsigned int lo, hi; > if (__builtin_ia32_rdrand32_step(&lo) && > __builtin_ia32_rdrand32_step(&hi)) { > *p = ((unsigned long)hi << 32) | lo; > return 1; > } > ``` Are there any sideeffects that we might encounter by not always performing both __builtin_ia32_rdrand32_step calls? ``` unsigned int __lo, __hi; int __res_lo = __builtin_ia32_rdrand32_step(&__lo); int __res_hi = __builtin_ia32_rdrand32_step(&__hi); if (__res_lo && __res_hi) { *__p = ((unsigned long long)__hi << 32) | (unsigned long long)__lo; return 1; } else { *__p = 0; return 0; } ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D132141/new/ https://reviews.llvm.org/D132141 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits