diff options
Diffstat (limited to 'test/CodeGen/ms-x86-intrinsics.c')
| -rw-r--r-- | test/CodeGen/ms-x86-intrinsics.c | 65 |
1 files changed, 62 insertions, 3 deletions
diff --git a/test/CodeGen/ms-x86-intrinsics.c b/test/CodeGen/ms-x86-intrinsics.c index e635220e8c13..51520d1f658b 100644 --- a/test/CodeGen/ms-x86-intrinsics.c +++ b/test/CodeGen/ms-x86-intrinsics.c @@ -6,15 +6,37 @@ // RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-X64 #if defined(__i386__) +char test__readfsbyte(unsigned long Offset) { + return __readfsbyte(Offset); +} +// CHECK-I386-LABEL: define signext i8 @test__readfsbyte(i32 %Offset) +// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i8 addrspace(257)* +// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i8, i8 addrspace(257)* [[PTR]], align 1 +// CHECK-I386: ret i8 [[VALUE:%[0-9]+]] + +short test__readfsword(unsigned long Offset) { + return __readfsword(Offset); +} +// CHECK-I386-LABEL: define signext i16 @test__readfsword(i32 %Offset) +// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i16 addrspace(257)* +// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i16, i16 addrspace(257)* [[PTR]], align 2 +// CHECK-I386: ret i16 [[VALUE:%[0-9]+]] + long test__readfsdword(unsigned long Offset) { return __readfsdword(Offset); } - -// CHECK-I386-LABEL: define i32 @test__readfsdword(i32 %Offset){{.*}}{ +// CHECK-I386-LABEL: define i32 @test__readfsdword(i32 %Offset) // CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i32 addrspace(257)* // CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i32, i32 addrspace(257)* [[PTR]], align 4 // CHECK-I386: ret i32 [[VALUE:%[0-9]+]] -// CHECK-I386: } + +long long test__readfsqword(unsigned long Offset) { + return __readfsqword(Offset); +} +// CHECK-I386-LABEL: define i64 @test__readfsqword(i32 %Offset) +// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %Offset to i64 addrspace(257)* +// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i64, i64 addrspace(257)* [[PTR]], align 8 +// CHECK-I386: ret i64 [[VALUE:%[0-9]+]] #endif __int64 test__emul(int a, int b) { @@ -36,6 +58,43 @@ unsigned __int64 test__emulu(unsigned int a, unsigned int b) { // CHECK: ret i64 [[RES]] #if defined(__x86_64__) + +char test__readgsbyte(unsigned long Offset) { + return __readgsbyte(Offset); +} +// CHECK-X64-LABEL: define i8 @test__readgsbyte(i32 %Offset) +// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64 +// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i8 addrspace(256)* +// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i8, i8 addrspace(256)* [[PTR]], align 1 +// CHECK-X64: ret i8 [[VALUE:%[0-9]+]] + +short test__readgsword(unsigned long Offset) { + return __readgsword(Offset); +} +// CHECK-X64-LABEL: define i16 @test__readgsword(i32 %Offset) +// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64 +// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i16 addrspace(256)* +// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i16, i16 addrspace(256)* [[PTR]], align 2 +// CHECK-X64: ret i16 [[VALUE:%[0-9]+]] + +long test__readgsdword(unsigned long Offset) { + return __readgsdword(Offset); +} +// CHECK-X64-LABEL: define i32 @test__readgsdword(i32 %Offset) +// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64 +// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i32 addrspace(256)* +// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i32, i32 addrspace(256)* [[PTR]], align 4 +// CHECK-X64: ret i32 [[VALUE:%[0-9]+]] + +long long test__readgsqword(unsigned long Offset) { + return __readgsqword(Offset); +} +// CHECK-X64-LABEL: define i64 @test__readgsqword(i32 %Offset) +// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %Offset to i64 +// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i64 addrspace(256)* +// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i64, i64 addrspace(256)* [[PTR]], align 8 +// CHECK-X64: ret i64 [[VALUE:%[0-9]+]] + __int64 test__mulh(__int64 a, __int64 b) { return __mulh(a, b); } |
