1 // REQUIRES: x86-64-registered-target
2 // RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -fasm-blocks -emit-llvm -o - | FileCheck %s
3 
4 void t1() {
5   int var = 10;
6   __asm mov rax, offset var ; rax = address of myvar
7 // CHECK: t1
8 // CHECK: call void asm sideeffect inteldialect "mov rax, $0", "r,~{rax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
9 }
10 
11 void t2() {
12   int var = 10;
13   __asm mov [eax], offset var
14 // CHECK: t2
15 // CHECK: call void asm sideeffect inteldialect "mov [eax], $0", "r,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}})
16 }
17 
18 struct t3_type { int a, b; };
19 
20 int t3() {
21   struct t3_type foo;
22   foo.a = 1;
23   foo.b = 2;
24   __asm {
25      lea ebx, foo
26      mov eax, [ebx].0
27      mov [ebx].4, ecx
28   }
29   return foo.b;
30 // CHECK: t3
31 // CHECK: call void asm sideeffect inteldialect "lea ebx, qword ptr $0\0A\09mov eax, [ebx].0\0A\09mov [ebx].4, ecx", "*m,~{eax},~{ebx},~{dirflag},~{fpsr},~{flags}"(%struct.t3_type* %{{.*}})
32 }
33 
34 int t4() {
35   struct t3_type foo;
36   foo.a = 1;
37   foo.b = 2;
38   __asm {
39      lea ebx, foo
40      mov eax, [ebx].foo.a
41      mov [ebx].foo.b, ecx
42   }
43   return foo.b;
44 // CHECK: t4
45 // CHECK: call void asm sideeffect inteldialect "lea ebx, qword ptr $0\0A\09mov eax, [ebx].0\0A\09mov [ebx].4, ecx", "*m,~{eax},~{ebx},~{dirflag},~{fpsr},~{flags}"(%struct.t3_type* %{{.*}})
46 }
47