Clang Project

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