blob: c08e53b64e1793a83c30c435251685af80819f2c [file] [log] [blame]
Chad Rosier48a05b92012-08-08 21:15:52 +00001// RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -O0 -fms-extensions -fenable-experimental-ms-inline-asm -w -emit-llvm -o - | FileCheck %s
Chad Rosierb64f3102012-08-08 20:37:31 +00002
3void t1() {
4// CHECK: @t1
Chad Rosier74896e02012-08-10 00:00:34 +00005// CHECK: call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
Chad Rosierb64f3102012-08-08 20:37:31 +00006// CHECK: ret void
7 __asm {}
8}
Chad Rosier265f5382012-08-13 20:32:07 +00009
10void t2() {
11// CHECK: @t2
Chad Rosier21ef7112012-08-14 19:22:06 +000012// CHECK: call void asm sideeffect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
13// CHECK: call void asm sideeffect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
14// CHECK: call void asm sideeffect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
Chad Rosier265f5382012-08-13 20:32:07 +000015// CHECK: ret void
16 __asm nop
17 __asm nop
18 __asm nop
19}
20
21void t3() {
22// CHECK: @t3
Chad Rosier21ef7112012-08-14 19:22:06 +000023// CHECK: call void asm sideeffect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
24// CHECK: call void asm sideeffect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
25// CHECK: call void asm sideeffect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
Chad Rosier265f5382012-08-13 20:32:07 +000026// CHECK: ret void
27 __asm nop __asm nop __asm nop
28}
29
30void t4(void) {
31// CHECK: @t4
Eric Christopherdece8b32012-08-15 06:31:06 +000032// CHECK: call void asm sideeffect "mov ebx, eax", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
33// CHECK: call void asm sideeffect "mov ecx, ebx", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
Chad Rosier265f5382012-08-13 20:32:07 +000034// CHECK: ret void
35 __asm mov ebx, eax
36 __asm mov ecx, ebx
37}
38
39void t5(void) {
40// CHECK: @t5
Eric Christopherdece8b32012-08-15 06:31:06 +000041// CHECK: call void asm sideeffect "mov ebx, eax", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
42// CHECK: call void asm sideeffect "mov ecx, ebx", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
Chad Rosier265f5382012-08-13 20:32:07 +000043// CHECK: ret void
44 __asm mov ebx, eax __asm mov ecx, ebx
45}
Chad Rosier27ef16b2012-08-14 23:48:41 +000046
47void t6(void) {
48 __asm int 0x2c
49// CHECK: t6
50// CHECK: call void asm sideeffect "int 0x2c", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
51}
52
53void* t7(void) {
54 __asm mov eax, fs:[0x10]
55// CHECK: t7
56// CHECK: call void asm sideeffect "mov eax, fs:[0x10]", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
57}
58
59void t8() {
60 __asm {
61 int 0x2c ; } asm comments are fun! }{
62 }
63 __asm {}
64// CHECK: t8
65// CHECK: call void asm sideeffect "int 0x2c", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
66// CHECK: call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
67}
68int t9() {
69 __asm int 3 ; } comments for single-line asm
70 __asm {}
71 __asm int 4
72 return 10;
73// CHECK: t9
74// CHECK: call void asm sideeffect "int 3", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
75// CHECK: call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
76// CHECK: call void asm sideeffect "int 4", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
77// CHECK: ret i32 10
78}
79void t10() {
80 __asm {
81 push ebx
82 mov ebx, 0x07
83 pop ebx
84 }
85// CHECK: t10
Eric Christopherdece8b32012-08-15 06:31:06 +000086// CHECK: call void asm sideeffect "push ebx\0Amov ebx, 0x07\0Apop ebx", "~{dirflag},~{fpsr},~{flags}"() nounwind ia_nsdialect
Chad Rosier27ef16b2012-08-14 23:48:41 +000087}