1 | // REQUIRES: x86-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 |
9 | // CHECK-SAME: mov rax, $0 |
10 | // CHECK-SAME: "r,~{rax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
11 | } |
12 | |
13 | void t2() { |
14 | int var = 10; |
15 | __asm mov [eax], offset var |
16 | // CHECK: t2 |
17 | // CHECK: call void asm sideeffect inteldialect |
18 | // CHECK-SAME: mov [eax], $0 |
19 | // CHECK-SAME: "r,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
20 | } |
21 | |
22 | struct t3_type { int a, b; }; |
23 | |
24 | int t3() { |
25 | struct t3_type foo; |
26 | foo.a = 1; |
27 | foo.b = 2; |
28 | __asm { |
29 | lea ebx, foo |
30 | mov eax, [ebx].0 |
31 | mov [ebx].4, ecx |
32 | } |
33 | return foo.b; |
34 | // CHECK: t3 |
35 | // CHECK: call void asm sideeffect inteldialect |
36 | // CHECK-SAME: lea ebx, $0 |
37 | // CHECK-SAME: mov eax, [ebx] |
38 | // CHECK-SAME: mov [ebx + $$4], ecx |
39 | // CHECK-SAME: "*m,~{eax},~{ebx},~{dirflag},~{fpsr},~{flags}"(%struct.t3_type* %{{.*}}) |
40 | } |
41 | |
42 | int t4() { |
43 | struct t3_type foo; |
44 | foo.a = 1; |
45 | foo.b = 2; |
46 | __asm { |
47 | lea ebx, foo |
48 | { |
49 | mov eax, [ebx].foo.a |
50 | } |
51 | mov [ebx].foo.b, ecx |
52 | } |
53 | return foo.b; |
54 | // CHECK: t4 |
55 | // CHECK: call void asm sideeffect inteldialect |
56 | // CHECK-SAME: lea ebx, $0 |
57 | // CHECK-SAME: mov eax, [ebx] |
58 | // CHECK-SAME: mov [ebx + $$4], ecx |
59 | // CHECK-SAME: "*m,~{eax},~{ebx},~{dirflag},~{fpsr},~{flags}"(%struct.t3_type* %{{.*}}) |
60 | } |
61 | |