diff --git a/include/clang/Basic/BuiltinsARM.def b/include/clang/Basic/BuiltinsARM.def index 4982a6e137846d114cac32a2211a922687350d9f..4174c826dd4d1943e9548d6c002ae593b5923598 100644 --- a/include/clang/Basic/BuiltinsARM.def +++ b/include/clang/Basic/BuiltinsARM.def @@ -48,6 +48,16 @@ BUILTIN(__builtin_arm_vcvtr_f, "ffi", "nc") BUILTIN(__builtin_arm_vcvtr_d, "fdi", "nc") // Coprocessor +BUILTIN(__builtin_arm_ldc, "vUIiUIivC*", "") +BUILTIN(__builtin_arm_ldcl, "vUIiUIivC*", "") +BUILTIN(__builtin_arm_ldc2, "vUIiUIivC*", "") +BUILTIN(__builtin_arm_ldc2l, "vUIiUIivC*", "") + +BUILTIN(__builtin_arm_stc, "vUIiUIiv*", "") +BUILTIN(__builtin_arm_stcl, "vUIiUIiv*", "") +BUILTIN(__builtin_arm_stc2, "vUIiUIiv*", "") +BUILTIN(__builtin_arm_stc2l, "vUIiUIiv*", "") + BUILTIN(__builtin_arm_mcr, "vUIiUIiUiUIiUIiUIi", "") BUILTIN(__builtin_arm_mcr2, "vUIiUIiUiUIiUIiUIi", "") BUILTIN(__builtin_arm_mrc, "UiUIiUIiUIiUIiUIi", "") diff --git a/test/CodeGen/builtins-arm.c b/test/CodeGen/builtins-arm.c index e94f21eed51c47a554ddc72bea7747c1174de505..df53b9f4cf992b4779ba3cabb33ccdd0ed3941d7 100644 --- a/test/CodeGen/builtins-arm.c +++ b/test/CodeGen/builtins-arm.c @@ -84,6 +84,62 @@ void prefetch(int i) { // CHECK: call {{.*}} @llvm.prefetch(i8* %{{.*}}, i32 1, i32 3, i32 0) } +void ldc(const void *i) { + // CHECK: define void @ldc(i8* %i) + // CHECK: call void @llvm.arm.ldc(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_ldc(1, 2, i); +} + +void ldcl(const void *i) { + // CHECK: define void @ldcl(i8* %i) + // CHECK: call void @llvm.arm.ldcl(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_ldcl(1, 2, i); +} + +void ldc2(const void *i) { + // CHECK: define void @ldc2(i8* %i) + // CHECK: call void @llvm.arm.ldc2(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_ldc2(1, 2, i); +} + +void ldc2l(const void *i) { + // CHECK: define void @ldc2l(i8* %i) + // CHECK: call void @llvm.arm.ldc2l(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_ldc2l(1, 2, i); +} + +void stc(void *i) { + // CHECK: define void @stc(i8* %i) + // CHECK: call void @llvm.arm.stc(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_stc(1, 2, i); +} + +void stcl(void *i) { + // CHECK: define void @stcl(i8* %i) + // CHECK: call void @llvm.arm.stcl(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_stcl(1, 2, i); +} + +void stc2(void *i) { + // CHECK: define void @stc2(i8* %i) + // CHECK: call void @llvm.arm.stc2(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_stc2(1, 2, i); +} + +void stc2l(void *i) { + // CHECK: define void @stc2l(i8* %i) + // CHECK: call void @llvm.arm.stc2l(i32 1, i32 2, i8* %i) + // CHECK-NEXT: ret void + __builtin_arm_stc2l(1, 2, i); +} + void cdp() { // CHECK: define void @cdp() // CHECK: call void @llvm.arm.cdp(i32 1, i32 2, i32 3, i32 4, i32 5, i32 6) diff --git a/test/Sema/builtins-arm.c b/test/Sema/builtins-arm.c index 0423771245bdd073293b55fb7606c77e6493fec8..8a6d71773f42bd67fd0f2e32b549e81de4007791 100644 --- a/test/Sema/builtins-arm.c +++ b/test/Sema/builtins-arm.c @@ -48,6 +48,38 @@ void test5() { } void test6(int a, int b, int c) { + __builtin_arm_ldc(1, 2, &a); + __builtin_arm_ldc(a, 2, &a); // expected-error {{argument to '__builtin_arm_ldc' must be a constant integer}} + __builtin_arm_ldc(1, a, &a); // expected-error {{argument to '__builtin_arm_ldc' must be a constant integer}} + + __builtin_arm_ldcl(1, 2, &a); + __builtin_arm_ldcl(a, 2, &a); // expected-error {{argument to '__builtin_arm_ldcl' must be a constant integer}} + __builtin_arm_ldcl(1, a, &a); // expected-error {{argument to '__builtin_arm_ldcl' must be a constant integer}} + + __builtin_arm_ldc2(1, 2, &a); + __builtin_arm_ldc2(a, 2, &a); // expected-error {{argument to '__builtin_arm_ldc2' must be a constant integer}} + __builtin_arm_ldc2(1, a, &a); // expected-error {{argument to '__builtin_arm_ldc2' must be a constant integer}} + + __builtin_arm_ldc2l(1, 2, &a); + __builtin_arm_ldc2l(a, 2, &a); // expected-error {{argument to '__builtin_arm_ldc2l' must be a constant integer}} + __builtin_arm_ldc2l(1, a, &a); // expected-error {{argument to '__builtin_arm_ldc2l' must be a constant integer}} + + __builtin_arm_stc(1, 2, &a); + __builtin_arm_stc(a, 2, &a); // expected-error {{argument to '__builtin_arm_stc' must be a constant integer}} + __builtin_arm_stc(1, a, &a); // expected-error {{argument to '__builtin_arm_stc' must be a constant integer}} + + __builtin_arm_stcl(1, 2, &a); + __builtin_arm_stcl(a, 2, &a); // expected-error {{argument to '__builtin_arm_stcl' must be a constant integer}} + __builtin_arm_stcl(1, a, &a); // expected-error {{argument to '__builtin_arm_stcl' must be a constant integer}} + + __builtin_arm_stc2(1, 2, &a); + __builtin_arm_stc2(a, 2, &a); // expected-error {{argument to '__builtin_arm_stc2' must be a constant integer}} + __builtin_arm_stc2(1, a, &a); // expected-error {{argument to '__builtin_arm_stc2' must be a constant integer}} + + __builtin_arm_stc2l(1, 2, &a); + __builtin_arm_stc2l(a, 2, &a); // expected-error {{argument to '__builtin_arm_stc2l' must be a constant integer}} + __builtin_arm_stc2l(1, a, &a); // expected-error {{argument to '__builtin_arm_stc2l' must be a constant integer}} + __builtin_arm_cdp(a, 2, 3, 4, 5, 6); // expected-error {{argument to '__builtin_arm_cdp' must be a constant integer}} __builtin_arm_cdp(1, a, 3, 4, 5, 6); // expected-error {{argument to '__builtin_arm_cdp' must be a constant integer}} __builtin_arm_cdp(1, 2, a, 4, 5, 6); // expected-error {{argument to '__builtin_arm_cdp' must be a constant integer}}