1f79470583759d20c20268711e6111461aefa8461Jim Grosbach// REQUIRES: arm-registered-target
29bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner// RUN: %clang_cc1 -triple armv6-unknown-unknown -emit-llvm -o - %s | FileCheck %s
3c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar
4c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbarvoid test0(void) {
5c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar	asm volatile("mov r0, r0" :: );
6c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar}
7c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbarvoid test1(void) {
8c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar	asm volatile("mov r0, r0" :::
9c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar				 "cc", "memory" );
10c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar}
11c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbarvoid test2(void) {
12c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar	asm volatile("mov r0, r0" :::
13c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar				 "r0", "r1", "r2", "r3");
14c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar	asm volatile("mov r0, r0" :::
15c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar				 "r4", "r5", "r6", "r8");
16c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar}
17c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbarvoid test3(void) {
18c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar	asm volatile("mov r0, r0" :::
19c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar				 "a1", "a2", "a3", "a4");
20c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar	asm volatile("mov r0, r0" :::
21c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar				 "v1", "v2", "v3", "v5");
22c1f2cddb8cccbcc53ab4311672a53b18eb6dc55fDaniel Dunbar}
239bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner
249bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner
259bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner// {} should not be treated as asm variants.
269bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattnervoid test4(float *a, float *b) {
279bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner  // CHECK: @test4
289bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner  // CHECK: call void asm sideeffect "vld1.32 {d8[],d9[]},
299bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner  __asm__ volatile (
309bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner                    "vld1.32 {d8[],d9[]}, [%1,:32] \n\t"
319bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner                    "vst1.32 {q4},        [%0,:128] \n\t"
329bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner                    :: "r"(a), "r"(b));
339bffb0701d02a10e77e1ac0f196074eed6466ed0Chris Lattner}
341fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbar
351fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbar// {sp, lr, pc} are the canonical names for {r13, r14, r15}.
361fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbar//
371fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbar// CHECK: @test5
381fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbar// CHECK: call void asm sideeffect "", "~{sp},~{lr},~{pc},~{sp},~{lr},~{pc}"()
391fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbarvoid test5() {
401fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbar  __asm__("" : : : "r13", "r14", "r15", "sp", "lr", "pc");
411fd71718eee5f39f560f536f0ee9cf7c68876518Daniel Dunbar}
42bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar
43bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar// CHECK: @test6
44bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar// CHECK: call void asm sideeffect "", "
45bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar// CHECK: ~{s0},~{s1},~{s2},~{s3},~{s4},~{s5},~{s6},~{s7},
46bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar// CHECK: ~{s8},~{s9},~{s10},~{s11},~{s12},~{s13},~{s14},~{s15},
47bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar// CHECK: ~{s16},~{s17},~{s18},~{s19},~{s20},~{s21},~{s22},~{s23},
48bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar// CHECK: ~{s24},~{s25},~{s26},~{s27},~{s28},~{s29},~{s30},~{s31}"()
49bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbarvoid test6() {
50bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar  __asm__("" : : :
51bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar          "s0", "s1", "s2", "s3", "s4", "s5", "s6", "s7",
52bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar          "s8", "s9", "s10", "s11", "s12", "s13", "s14", "s15",
53bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar          "s16", "s17", "s18", "s19", "s20", "s21", "s22", "s23",
54bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar          "s24", "s25", "s26", "s27", "s28", "s29", "s30", "s31");
55bf3d55243a58bc8ffc80c1fc581275677e348760Daniel Dunbar}
56