xref: /aosp_15_r20/external/clang/test/CodeGen/rdrand-builtins.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +rdrnd -target-feature +rdseed -emit-llvm -o - %s | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // Don't include mm_malloc.h, it's system specific.
4*67e74705SXin Li #define __MM_MALLOC_H
5*67e74705SXin Li 
6*67e74705SXin Li #include <x86intrin.h>
7*67e74705SXin Li 
rdrand16(unsigned short * p)8*67e74705SXin Li int rdrand16(unsigned short *p) {
9*67e74705SXin Li   return _rdrand16_step(p);
10*67e74705SXin Li // CHECK: @rdrand16
11*67e74705SXin Li // CHECK: call { i16, i32 } @llvm.x86.rdrand.16
12*67e74705SXin Li // CHECK: store i16
13*67e74705SXin Li }
14*67e74705SXin Li 
rdrand32(unsigned * p)15*67e74705SXin Li int rdrand32(unsigned *p) {
16*67e74705SXin Li   return _rdrand32_step(p);
17*67e74705SXin Li // CHECK: @rdrand32
18*67e74705SXin Li // CHECK: call { i32, i32 } @llvm.x86.rdrand.32
19*67e74705SXin Li // CHECK: store i32
20*67e74705SXin Li }
21*67e74705SXin Li 
rdrand64(unsigned long long * p)22*67e74705SXin Li int rdrand64(unsigned long long *p) {
23*67e74705SXin Li   return _rdrand64_step(p);
24*67e74705SXin Li // CHECK: @rdrand64
25*67e74705SXin Li // CHECK: call { i64, i32 } @llvm.x86.rdrand.64
26*67e74705SXin Li // CHECK: store i64
27*67e74705SXin Li }
28*67e74705SXin Li 
rdseed16(unsigned short * p)29*67e74705SXin Li int rdseed16(unsigned short *p) {
30*67e74705SXin Li   return _rdseed16_step(p);
31*67e74705SXin Li // CHECK: @rdseed16
32*67e74705SXin Li // CHECK: call { i16, i32 } @llvm.x86.rdseed.16
33*67e74705SXin Li // CHECK: store i16
34*67e74705SXin Li }
35*67e74705SXin Li 
rdseed32(unsigned * p)36*67e74705SXin Li int rdseed32(unsigned *p) {
37*67e74705SXin Li   return _rdseed32_step(p);
38*67e74705SXin Li // CHECK: @rdseed32
39*67e74705SXin Li // CHECK: call { i32, i32 } @llvm.x86.rdseed.32
40*67e74705SXin Li // CHECK: store i32
41*67e74705SXin Li }
42*67e74705SXin Li 
rdseed64(unsigned long long * p)43*67e74705SXin Li int rdseed64(unsigned long long *p) {
44*67e74705SXin Li   return _rdseed64_step(p);
45*67e74705SXin Li // CHECK: @rdseed64
46*67e74705SXin Li // CHECK: call { i64, i32 } @llvm.x86.rdseed.64
47*67e74705SXin Li // CHECK: store i64
48*67e74705SXin Li }
49