1 // RUN: %clang_cc1 %s -triple x86_64-apple-darwin10 -O0 -fms-extensions -fenable-experimental-ms-inline-asm -w -emit-llvm -o - | FileCheck %s 2 3 void t1() { 4 // CHECK: @t1 5 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 6 // CHECK: ret void 7 __asm {} 8 } 9 10 void t2() { 11 // CHECK: @t2 12 // CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind 13 // CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind 14 // CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() nounwind 15 // CHECK: ret void 16 __asm nop 17 __asm nop 18 __asm nop 19 } 20 21 void t3() { 22 // CHECK: @t3 23 // CHECK: call void asm sideeffect inteldialect "nop\0Anop\0Anop", "~{dirflag},~{fpsr},~{flags}"() nounwind 24 // CHECK: ret void 25 __asm nop __asm nop __asm nop 26 } 27 28 void t4(void) { 29 // CHECK: @t4 30 // CHECK: call void asm sideeffect inteldialect "mov ebx, eax", "~{ebx},~{dirflag},~{fpsr},~{flags}"() nounwind 31 // CHECK: call void asm sideeffect inteldialect "mov ecx, ebx", "~{ecx},~{dirflag},~{fpsr},~{flags}"() nounwind 32 // CHECK: ret void 33 __asm mov ebx, eax 34 __asm mov ecx, ebx 35 } 36 37 void t5(void) { 38 // CHECK: @t5 39 // CHECK: call void asm sideeffect inteldialect "mov ebx, eax\0Amov ecx, ebx", "~{ebx},~{ecx},~{dirflag},~{fpsr},~{flags}"() nounwind 40 // CHECK: ret void 41 __asm mov ebx, eax __asm mov ecx, ebx 42 } 43 44 void t6(void) { 45 __asm int 0x2c 46 // CHECK: t6 47 // CHECK: call void asm sideeffect inteldialect "int 0x2c", "~{dirflag},~{fpsr},~{flags}"() nounwind 48 } 49 50 void t7() { 51 __asm { 52 int 0x2c ; } asm comments are fun! }{ 53 } 54 __asm {} 55 // CHECK: t7 56 // CHECK: call void asm sideeffect inteldialect "int 0x2c", "~{dirflag},~{fpsr},~{flags}"() nounwind 57 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 58 } 59 int t8() { 60 __asm int 3 ; } comments for single-line asm 61 __asm {} 62 __asm int 4 63 return 10; 64 // CHECK: t8 65 // CHECK: call void asm sideeffect inteldialect "int 3", "~{dirflag},~{fpsr},~{flags}"() nounwind 66 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 67 // CHECK: call void asm sideeffect inteldialect "int 4", "~{dirflag},~{fpsr},~{flags}"() nounwind 68 // CHECK: ret i32 10 69 } 70 void t9() { 71 __asm { 72 push ebx 73 mov ebx, 0x07 74 pop ebx 75 } 76 // CHECK: t9 77 // CHECK: call void asm sideeffect inteldialect "push ebx\0Amov ebx, 0x07\0Apop ebx", "~{ebx},~{dirflag},~{fpsr},~{flags}"() nounwind 78 } 79 80 unsigned t10(void) { 81 unsigned i = 1, j; 82 __asm { 83 mov eax, i 84 mov j, eax 85 } 86 return j; 87 // CHECK: t10 88 // CHECK: [[I:%[a-zA-Z0-9]+]] = alloca i32, align 4 89 // CHECK: [[J:%[a-zA-Z0-9]+]] = alloca i32, align 4 90 // CHECK: store i32 1, i32* [[I]], align 4 91 // CHECK: call i32 asm sideeffect inteldialect "mov eax, $1\0Amov $0, eax", "=r,r,~{eax},~{dirflag},~{fpsr},~{flags}"(i32 %{{.*}}) nounwind 92 // CHECK: [[RET:%[a-zA-Z0-9]+]] = load i32* [[J]], align 4 93 // CHECK: ret i32 [[RET]] 94 } 95 96 void t11(void) { 97 __asm EVEN 98 __asm ALIGN 99 // CHECK: t11 100 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 101 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 102 } 103 104 void t12(void) { 105 __asm { 106 _emit 0x4A 107 _emit 0x43 108 _emit 0x4B 109 } 110 // CHECK: t12 111 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 112 } 113 114 void t13(void) { 115 unsigned arr[10]; 116 __asm LENGTH arr ; sizeof(arr)/sizeof(arr[0]) 117 __asm SIZE arr ; sizeof(arr) 118 __asm TYPE arr ; sizeof(arr[0]) 119 // CHECK: t13 120 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 121 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 122 // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() nounwind 123 } 124