Chad Rosier | 148bab2 | 2013-04-02 20:03:29 +0000 | [diff] [blame] | 1 | // REQUIRES: x86-64-registered-target |
| 2 | // RUN: %clang_cc1 -x c++ %s -triple i386-apple-darwin10 -O0 -fasm-blocks -emit-llvm -o - | FileCheck %s |
| 3 | |
| 4 | struct Foo { |
| 5 | static int *ptr; |
| 6 | static int a, b; |
| 7 | struct Bar { |
| 8 | static int *ptr; |
| 9 | }; |
| 10 | }; |
| 11 | |
| 12 | void t1() { |
| 13 | Foo::ptr = (int *)0xDEADBEEF; |
| 14 | Foo::Bar::ptr = (int *)0xDEADBEEF; |
| 15 | __asm mov eax, Foo::ptr |
| 16 | __asm mov eax, Foo::Bar::ptr |
| 17 | __asm mov eax, [Foo::ptr] |
| 18 | __asm mov eax, dword ptr [Foo::ptr] |
| 19 | __asm mov eax, dword ptr [Foo::ptr] |
| 20 | // CHECK: @_Z2t1v |
| 21 | // CHECK: call void asm sideeffect inteldialect "mov eax, Foo::ptr", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 22 | // CHECK: call void asm sideeffect inteldialect "mov eax, Foo::Bar::ptr", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 0f9790b | 2013-04-11 21:49:48 +0000 | [diff] [blame] | 23 | // CHECK: call void asm sideeffect inteldialect "mov eax, Foo::ptr", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 24 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr Foo::ptr", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 25 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr Foo::ptr", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 148bab2 | 2013-04-02 20:03:29 +0000 | [diff] [blame] | 26 | } |
Chad Rosier | dbcfa8b | 2013-04-11 23:37:53 +0000 | [diff] [blame^] | 27 | |
| 28 | int gvar = 10; |
| 29 | void t2() { |
| 30 | int lvar = 10; |
| 31 | __asm mov eax, offset Foo::ptr |
| 32 | __asm mov eax, offset Foo::Bar::ptr |
| 33 | // CHECK: t2 |
| 34 | // CHECK: call void asm sideeffect inteldialect "mov eax, Foo::ptr", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 35 | // CHECK: call void asm sideeffect inteldialect "mov eax, Foo::Bar::ptr", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 36 | } |