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

Reply via email to