yubing 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: > 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; > } > ``` however, if the first rdrand32 failed, then we don't need to execute the second one. 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