blob: 15414a334580e9455884a6db4e8bfc2c11af2771 [file] [log] [blame]
Michael Liao1bfc28c2013-03-29 05:17:55 +00001// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +rdrnd -target-feature +rdseed -emit-llvm -o - %s | FileCheck %s
Benjamin Kramer9a502492012-07-12 09:33:03 +00002
Benjamin Kramera1c387e2012-07-12 09:56:18 +00003// Don't include mm_malloc.h, it's system specific.
4#define __MM_MALLOC_H
5
Michael Liao1bfc28c2013-03-29 05:17:55 +00006#include <x86intrin.h>
NAKAMURA Takumi6fcac5d2012-07-12 10:36:27 +00007
Benjamin Kramer9a502492012-07-12 09:33:03 +00008int rdrand16(unsigned short *p) {
9 return _rdrand16_step(p);
10// CHECK: @rdrand16
11// CHECK: call { i16, i32 } @llvm.x86.rdrand.16
12// CHECK: store i16
13}
14
15int rdrand32(unsigned *p) {
16 return _rdrand32_step(p);
17// CHECK: @rdrand32
18// CHECK: call { i32, i32 } @llvm.x86.rdrand.32
19// CHECK: store i32
20}
21
22int rdrand64(unsigned long long *p) {
23 return _rdrand64_step(p);
24// CHECK: @rdrand64
25// CHECK: call { i64, i32 } @llvm.x86.rdrand.64
26// CHECK: store i64
27}
Michael Liao1bfc28c2013-03-29 05:17:55 +000028
29int rdseed16(unsigned short *p) {
30 return _rdseed16_step(p);
31// CHECK: @rdseed16
32// CHECK: call { i16, i32 } @llvm.x86.rdseed.16
33// CHECK: store i16
34}
35
36int rdseed32(unsigned *p) {
37 return _rdseed32_step(p);
38// CHECK: @rdseed32
39// CHECK: call { i32, i32 } @llvm.x86.rdseed.32
40// CHECK: store i32
41}
42
43int rdseed64(unsigned long long *p) {
44 return _rdseed64_step(p);
45// CHECK: @rdseed64
46// CHECK: call { i64, i32 } @llvm.x86.rdseed.64
47// CHECK: store i64
48}