NAKAMURA Takumi | cc59e91 | 2012-09-27 14:55:08 +0000 | [diff] [blame] | 1 | // REQUIRES: x86-64-registered-target |
Chad Rosier | b2e2157 | 2013-01-22 19:38:32 +0000 | [diff] [blame] | 2 | // RUN: %clang_cc1 %s -triple i386-apple-darwin10 -O0 -fasm-blocks -emit-llvm -o - | FileCheck %s |
Chad Rosier | 25bc47e | 2012-10-19 20:38:09 +0000 | [diff] [blame] | 3 | |
Chad Rosier | b64f310 | 2012-08-08 20:37:31 +0000 | [diff] [blame] | 4 | void t1() { |
| 5 | // CHECK: @t1 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 6 | // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | b64f310 | 2012-08-08 20:37:31 +0000 | [diff] [blame] | 7 | // CHECK: ret void |
| 8 | __asm {} |
| 9 | } |
Chad Rosier | 265f538 | 2012-08-13 20:32:07 +0000 | [diff] [blame] | 10 | |
| 11 | void t2() { |
| 12 | // CHECK: @t2 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 13 | // CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() |
| 14 | // CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() |
| 15 | // CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 265f538 | 2012-08-13 20:32:07 +0000 | [diff] [blame] | 16 | // CHECK: ret void |
| 17 | __asm nop |
| 18 | __asm nop |
| 19 | __asm nop |
| 20 | } |
| 21 | |
| 22 | void t3() { |
| 23 | // CHECK: @t3 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 24 | // CHECK: call void asm sideeffect inteldialect "nop\0A\09nop\0A\09nop", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 265f538 | 2012-08-13 20:32:07 +0000 | [diff] [blame] | 25 | // CHECK: ret void |
| 26 | __asm nop __asm nop __asm nop |
| 27 | } |
| 28 | |
| 29 | void t4(void) { |
| 30 | // CHECK: @t4 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 31 | // CHECK: call void asm sideeffect inteldialect "mov ebx, eax", "~{ebx},~{dirflag},~{fpsr},~{flags}"() |
| 32 | // CHECK: call void asm sideeffect inteldialect "mov ecx, ebx", "~{ecx},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 265f538 | 2012-08-13 20:32:07 +0000 | [diff] [blame] | 33 | // CHECK: ret void |
| 34 | __asm mov ebx, eax |
| 35 | __asm mov ecx, ebx |
| 36 | } |
| 37 | |
| 38 | void t5(void) { |
| 39 | // CHECK: @t5 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 40 | // CHECK: call void asm sideeffect inteldialect "mov ebx, eax\0A\09mov ecx, ebx", "~{ebx},~{ecx},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 265f538 | 2012-08-13 20:32:07 +0000 | [diff] [blame] | 41 | // CHECK: ret void |
| 42 | __asm mov ebx, eax __asm mov ecx, ebx |
| 43 | } |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 44 | |
| 45 | void t6(void) { |
| 46 | __asm int 0x2c |
| 47 | // CHECK: t6 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 48 | // CHECK: call void asm sideeffect inteldialect "int $$0x2c", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 49 | } |
| 50 | |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 51 | void t7() { |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 52 | __asm { |
| 53 | int 0x2c ; } asm comments are fun! }{ |
| 54 | } |
| 55 | __asm {} |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 56 | // CHECK: t7 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 57 | // CHECK: call void asm sideeffect inteldialect "int $$0x2c", "~{dirflag},~{fpsr},~{flags}"() |
| 58 | // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 59 | } |
Chad Rosier | ac9289d | 2012-10-02 20:55:30 +0000 | [diff] [blame] | 60 | |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 61 | int t8() { |
Chad Rosier | d9b56ed | 2012-10-15 19:56:10 +0000 | [diff] [blame] | 62 | __asm int 4 ; } comments for single-line asm |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 63 | __asm {} |
| 64 | __asm int 4 |
| 65 | return 10; |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 66 | // CHECK: t8 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 67 | // CHECK: call void asm sideeffect inteldialect "int $$4", "~{dirflag},~{fpsr},~{flags}"() |
| 68 | // CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() |
| 69 | // CHECK: call void asm sideeffect inteldialect "int $$4", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 70 | // CHECK: ret i32 10 |
| 71 | } |
Chad Rosier | ac9289d | 2012-10-02 20:55:30 +0000 | [diff] [blame] | 72 | |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 73 | void t9() { |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 74 | __asm { |
| 75 | push ebx |
| 76 | mov ebx, 0x07 |
| 77 | pop ebx |
| 78 | } |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 79 | // CHECK: t9 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 80 | // CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, $$0x07\0A\09pop ebx", "~{ebx},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 27ef16b | 2012-08-14 23:48:41 +0000 | [diff] [blame] | 81 | } |
Chad Rosier | f64c118 | 2012-08-16 17:10:59 +0000 | [diff] [blame] | 82 | |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 83 | unsigned t10(void) { |
Chad Rosier | f64c118 | 2012-08-16 17:10:59 +0000 | [diff] [blame] | 84 | unsigned i = 1, j; |
| 85 | __asm { |
| 86 | mov eax, i |
| 87 | mov j, eax |
| 88 | } |
| 89 | return j; |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 90 | // CHECK: t10 |
Chad Rosier | f64c118 | 2012-08-16 17:10:59 +0000 | [diff] [blame] | 91 | // CHECK: [[I:%[a-zA-Z0-9]+]] = alloca i32, align 4 |
| 92 | // CHECK: [[J:%[a-zA-Z0-9]+]] = alloca i32, align 4 |
| 93 | // CHECK: store i32 1, i32* [[I]], align 4 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 94 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $1\0A\09mov dword ptr $0, eax", "=*m,*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}, i32* %{{.*}}) |
Chad Rosier | f64c118 | 2012-08-16 17:10:59 +0000 | [diff] [blame] | 95 | // CHECK: [[RET:%[a-zA-Z0-9]+]] = load i32* [[J]], align 4 |
| 96 | // CHECK: ret i32 [[RET]] |
| 97 | } |
Chad Rosier | 700ce64 | 2012-08-16 22:25:38 +0000 | [diff] [blame] | 98 | |
Chad Rosier | 7fcde17 | 2012-08-21 17:01:26 +0000 | [diff] [blame] | 99 | void t11(void) { |
Chad Rosier | 4de9716 | 2012-09-11 00:51:28 +0000 | [diff] [blame] | 100 | __asm mov eax, 1 |
Chad Rosier | fba3fb9 | 2012-10-12 21:37:00 +0000 | [diff] [blame] | 101 | // CHECK: t11 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 102 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 4de9716 | 2012-09-11 00:51:28 +0000 | [diff] [blame] | 103 | } |
Chad Rosier | 7f9678b | 2012-09-12 18:14:25 +0000 | [diff] [blame] | 104 | |
Chad Rosier | fba3fb9 | 2012-10-12 21:37:00 +0000 | [diff] [blame] | 105 | unsigned t12(void) { |
Chad Rosier | b55e602 | 2012-09-13 00:06:55 +0000 | [diff] [blame] | 106 | unsigned i = 1, j, l = 1, m; |
| 107 | __asm { |
| 108 | mov eax, i |
| 109 | mov j, eax |
| 110 | mov eax, l |
| 111 | mov m, eax |
| 112 | } |
| 113 | return j + m; |
Chad Rosier | fba3fb9 | 2012-10-12 21:37:00 +0000 | [diff] [blame] | 114 | // CHECK: t12 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 115 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $2\0A\09mov dword ptr $0, eax\0A\09mov eax, dword ptr $3\0A\09mov dword ptr $1, eax", "=*m,=*m,*m,*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}}, i32* %{{.*}}) |
Chad Rosier | 362b18c | 2012-10-19 20:57:37 +0000 | [diff] [blame] | 116 | } |
| 117 | |
| 118 | void t13() { |
| 119 | char i = 1; |
| 120 | short j = 2; |
| 121 | __asm movzx eax, i |
| 122 | __asm movzx eax, j |
| 123 | // CHECK: t13 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 124 | // CHECK: call void asm sideeffect inteldialect "movzx eax, byte ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i8* %{{.*}}) |
| 125 | // CHECK: call void asm sideeffect inteldialect "movzx eax, word ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i16* %{{.*}}) |
Chad Rosier | b55e602 | 2012-09-13 00:06:55 +0000 | [diff] [blame] | 126 | } |
Chad Rosier | b0850b3 | 2012-10-19 23:16:17 +0000 | [diff] [blame] | 127 | |
| 128 | void t14() { |
| 129 | unsigned i = 1, j = 2; |
| 130 | __asm { |
| 131 | .if 1 |
| 132 | mov eax, i |
| 133 | .else |
| 134 | mov ebx, j |
| 135 | .endif |
| 136 | } |
| 137 | // CHECK: t14 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 138 | // CHECK: call void asm sideeffect inteldialect ".if 1\0A\09mov eax, dword ptr $0\0A\09.else\0A\09mov ebx, j\0A\09.endif", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
Chad Rosier | b0850b3 | 2012-10-19 23:16:17 +0000 | [diff] [blame] | 139 | } |
Chad Rosier | 5a12aca | 2012-10-22 19:43:17 +0000 | [diff] [blame] | 140 | |
Chad Rosier | 6949ab1 | 2013-01-08 23:51:48 +0000 | [diff] [blame] | 141 | int gvar = 10; |
Chad Rosier | 5a12aca | 2012-10-22 19:43:17 +0000 | [diff] [blame] | 142 | void t15() { |
Chad Rosier | 6949ab1 | 2013-01-08 23:51:48 +0000 | [diff] [blame] | 143 | int lvar = 10; |
| 144 | __asm mov eax, lvar ; eax = 10 |
| 145 | __asm mov eax, offset lvar ; eax = address of lvar |
| 146 | __asm mov eax, offset gvar ; eax = address of gvar |
Chad Rosier | 5a12aca | 2012-10-22 19:43:17 +0000 | [diff] [blame] | 147 | // CHECK: t15 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 148 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 149 | // CHECK: call void asm sideeffect inteldialect "mov eax, $0", "r,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 150 | // CHECK: call void asm sideeffect inteldialect "mov eax, $0", "r,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* @{{.*}}) |
Chad Rosier | 5a12aca | 2012-10-22 19:43:17 +0000 | [diff] [blame] | 151 | } |
Chad Rosier | 4224255 | 2012-10-24 17:23:06 +0000 | [diff] [blame] | 152 | |
| 153 | void t16() { |
| 154 | int var = 10; |
| 155 | __asm mov [eax], offset var |
| 156 | // CHECK: t16 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 157 | // CHECK: call void asm sideeffect inteldialect "mov [eax], $0", "r,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
Chad Rosier | 4224255 | 2012-10-24 17:23:06 +0000 | [diff] [blame] | 158 | } |
Chad Rosier | 1bed9b7 | 2012-10-24 17:48:01 +0000 | [diff] [blame] | 159 | |
| 160 | void t17() { |
| 161 | __asm _emit 0x4A |
| 162 | __asm _emit 0x43 |
| 163 | __asm _emit 0x4B |
Chad Rosier | 7243b0f | 2013-02-12 21:34:14 +0000 | [diff] [blame] | 164 | __asm _EMIT 0x4B |
Chad Rosier | 1bed9b7 | 2012-10-24 17:48:01 +0000 | [diff] [blame] | 165 | // CHECK: t17 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 166 | // CHECK: call void asm sideeffect inteldialect ".byte 0x4A", "~{dirflag},~{fpsr},~{flags}"() |
| 167 | // CHECK: call void asm sideeffect inteldialect ".byte 0x43", "~{dirflag},~{fpsr},~{flags}"() |
| 168 | // CHECK: call void asm sideeffect inteldialect ".byte 0x4B", "~{dirflag},~{fpsr},~{flags}"() |
| 169 | // CHECK: call void asm sideeffect inteldialect ".byte 0x4B", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 1bed9b7 | 2012-10-24 17:48:01 +0000 | [diff] [blame] | 170 | } |
Chad Rosier | f742727 | 2012-10-24 22:22:12 +0000 | [diff] [blame] | 171 | |
Chad Rosier | da5c3b7 | 2012-10-26 18:04:45 +0000 | [diff] [blame] | 172 | void t20() { |
Chad Rosier | 205ecf0 | 2013-01-17 19:22:48 +0000 | [diff] [blame] | 173 | char bar; |
Chad Rosier | da5c3b7 | 2012-10-26 18:04:45 +0000 | [diff] [blame] | 174 | int foo; |
Chad Rosier | 205ecf0 | 2013-01-17 19:22:48 +0000 | [diff] [blame] | 175 | char _bar[2]; |
| 176 | int _foo[4]; |
| 177 | |
| 178 | __asm mov eax, LENGTH foo |
| 179 | __asm mov eax, LENGTH bar |
| 180 | __asm mov eax, LENGTH _foo |
| 181 | __asm mov eax, LENGTH _bar |
Chad Rosier | da5c3b7 | 2012-10-26 18:04:45 +0000 | [diff] [blame] | 182 | // CHECK: t20 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 183 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 184 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 185 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 186 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 205ecf0 | 2013-01-17 19:22:48 +0000 | [diff] [blame] | 187 | |
| 188 | __asm mov eax, TYPE foo |
| 189 | __asm mov eax, TYPE bar |
| 190 | __asm mov eax, TYPE _foo |
| 191 | __asm mov eax, TYPE _bar |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 192 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 193 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 194 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 195 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 205ecf0 | 2013-01-17 19:22:48 +0000 | [diff] [blame] | 196 | |
| 197 | __asm mov eax, SIZE foo |
| 198 | __asm mov eax, SIZE bar |
| 199 | __asm mov eax, SIZE _foo |
| 200 | __asm mov eax, SIZE _bar |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 201 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 202 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 203 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$16", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 204 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | da5c3b7 | 2012-10-26 18:04:45 +0000 | [diff] [blame] | 205 | } |
Chad Rosier | e0c0196 | 2012-12-05 19:52:05 +0000 | [diff] [blame] | 206 | |
Chad Rosier | e0c0196 | 2012-12-05 19:52:05 +0000 | [diff] [blame] | 207 | void t21() { |
| 208 | __asm { |
| 209 | __asm push ebx |
| 210 | __asm mov ebx, 0x07 |
| 211 | __asm pop ebx |
| 212 | } |
| 213 | // CHECK: t21 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 214 | // CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, $$0x07\0A\09pop ebx", "~{ebx},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | e0c0196 | 2012-12-05 19:52:05 +0000 | [diff] [blame] | 215 | } |
| 216 | |
| 217 | extern void t22_helper(int x); |
| 218 | void t22() { |
| 219 | int x = 0; |
| 220 | __asm { |
| 221 | __asm push ebx |
| 222 | __asm mov ebx, esp |
| 223 | } |
| 224 | t22_helper(x); |
| 225 | __asm { |
| 226 | __asm mov esp, ebx |
| 227 | __asm pop ebx |
| 228 | } |
| 229 | // CHECK: t22 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 230 | // CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, esp", "~{ebx},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | e0c0196 | 2012-12-05 19:52:05 +0000 | [diff] [blame] | 231 | // CHECK: call void @t22_helper |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 232 | // CHECK: call void asm sideeffect inteldialect "mov esp, ebx\0A\09pop ebx", "~{ebx},~{esp},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | e0c0196 | 2012-12-05 19:52:05 +0000 | [diff] [blame] | 233 | } |
Chad Rosier | 7520fca | 2013-01-07 20:34:40 +0000 | [diff] [blame] | 234 | |
| 235 | void t23() { |
| 236 | __asm { |
| 237 | the_label: |
| 238 | } |
| 239 | // CHECK: t23 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 240 | // CHECK: call void asm sideeffect inteldialect "the_label:", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 7520fca | 2013-01-07 20:34:40 +0000 | [diff] [blame] | 241 | } |
Chad Rosier | 3731a41 | 2013-01-10 22:11:28 +0000 | [diff] [blame] | 242 | |
| 243 | void t24_helper(void) {} |
| 244 | void t24() { |
| 245 | __asm call t24_helper |
| 246 | // CHECK: t24 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 247 | // CHECK: call void asm sideeffect inteldialect "call $0", "r,~{dirflag},~{fpsr},~{flags}"(void ()* @t24_helper) |
Chad Rosier | 3731a41 | 2013-01-10 22:11:28 +0000 | [diff] [blame] | 248 | } |
Chad Rosier | 8e70b00 | 2013-02-12 18:45:21 +0000 | [diff] [blame] | 249 | |
| 250 | void t25() { |
| 251 | __asm mov eax, 0ffffffffh |
| 252 | __asm mov eax, 0fh |
| 253 | __asm mov eax, 0a2h |
| 254 | __asm mov eax, 0xa2h |
| 255 | __asm mov eax, 0xa2 |
| 256 | // CHECK: t25 |
Chad Rosier | 7b4700c | 2013-04-17 00:12:09 +0000 | [diff] [blame] | 257 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967295", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 258 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$15", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 259 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$162", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 260 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$0xa2h", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 261 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$0xa2", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 8e70b00 | 2013-02-12 18:45:21 +0000 | [diff] [blame] | 262 | } |
| 263 | |
| 264 | void t26() { |
| 265 | __asm pushad |
| 266 | __asm mov eax, 0 |
| 267 | __asm __emit 0fh |
| 268 | __asm __emit 0a2h |
Chad Rosier | 7243b0f | 2013-02-12 21:34:14 +0000 | [diff] [blame] | 269 | __asm __EMIT 0a2h |
Chad Rosier | 8e70b00 | 2013-02-12 18:45:21 +0000 | [diff] [blame] | 270 | __asm popad |
| 271 | // CHECK: t26 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 272 | // CHECK: call void asm sideeffect inteldialect "pushad", "~{dirflag},~{fpsr},~{flags}"() |
| 273 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$0", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 274 | // CHECK: call void asm sideeffect inteldialect ".byte 0fh", "~{dirflag},~{fpsr},~{flags}"() |
| 275 | // CHECK: call void asm sideeffect inteldialect ".byte 0a2h", "~{dirflag},~{fpsr},~{flags}"() |
| 276 | // CHECK: call void asm sideeffect inteldialect ".byte 0a2h", "~{dirflag},~{fpsr},~{flags}"() |
| 277 | // CHECK: call void asm sideeffect inteldialect "popad", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 8e70b00 | 2013-02-12 18:45:21 +0000 | [diff] [blame] | 278 | } |
| 279 | |
| 280 | void t27() { |
| 281 | __asm mov eax, fs:[0h] |
| 282 | // CHECK: t27 |
Chad Rosier | b801837 | 2013-04-05 16:29:17 +0000 | [diff] [blame] | 283 | // CHECK: call void asm sideeffect inteldialect "mov eax, fs:[$$0h]", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 8e70b00 | 2013-02-12 18:45:21 +0000 | [diff] [blame] | 284 | } |
Chad Rosier | 7243b0f | 2013-02-12 21:34:14 +0000 | [diff] [blame] | 285 | |
| 286 | void t28() { |
| 287 | __asm align 8 |
| 288 | __asm align 16; |
| 289 | __asm align 128; |
| 290 | __asm ALIGN 256; |
| 291 | // CHECK: t28 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 292 | // CHECK: call void asm sideeffect inteldialect ".align 3", "~{dirflag},~{fpsr},~{flags}"() |
| 293 | // CHECK: call void asm sideeffect inteldialect ".align 4", "~{dirflag},~{fpsr},~{flags}"() |
| 294 | // CHECK: call void asm sideeffect inteldialect ".align 7", "~{dirflag},~{fpsr},~{flags}"() |
| 295 | // CHECK: call void asm sideeffect inteldialect ".align 8", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 7243b0f | 2013-02-12 21:34:14 +0000 | [diff] [blame] | 296 | } |
Chad Rosier | 74992c4 | 2013-02-13 01:06:08 +0000 | [diff] [blame] | 297 | |
| 298 | void t29() { |
| 299 | int arr[2] = {0, 0}; |
| 300 | int olen = 0, osize = 0, otype = 0; |
| 301 | __asm mov olen, LENGTH arr |
| 302 | __asm mov osize, SIZE arr |
| 303 | __asm mov otype, TYPE arr |
| 304 | // CHECK: t29 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 305 | // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$2", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 306 | // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$8", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 307 | // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$4", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
Chad Rosier | 74992c4 | 2013-02-13 01:06:08 +0000 | [diff] [blame] | 308 | } |
Chad Rosier | d8d7f5f | 2013-02-13 21:34:54 +0000 | [diff] [blame] | 309 | |
| 310 | int results[2] = {13, 37}; |
| 311 | int *t30() |
| 312 | { |
| 313 | int *res; |
| 314 | __asm lea edi, results |
| 315 | __asm mov res, edi |
| 316 | return res; |
| 317 | // CHECK: t30 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 318 | // CHECK: call void asm sideeffect inteldialect "lea edi, dword ptr $0", "*m,~{edi},~{dirflag},~{fpsr},~{flags}"([2 x i32]* @{{.*}}) |
| 319 | // CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, edi", "=*m,~{dirflag},~{fpsr},~{flags}"(i32** %{{.*}}) |
Chad Rosier | d8d7f5f | 2013-02-13 21:34:54 +0000 | [diff] [blame] | 320 | } |
Bill Wendling | 4e1125f | 2013-02-22 09:10:20 +0000 | [diff] [blame] | 321 | |
Chad Rosier | 59c9003 | 2013-02-25 19:13:23 +0000 | [diff] [blame] | 322 | void t31() { |
| 323 | __asm pushad |
| 324 | __asm popad |
| 325 | // CHECK: t31 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 326 | // CHECK: call void asm sideeffect inteldialect "pushad", "~{dirflag},~{fpsr},~{flags}"() |
| 327 | // CHECK: call void asm sideeffect inteldialect "popad", "~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 59c9003 | 2013-02-25 19:13:23 +0000 | [diff] [blame] | 328 | } |
| 329 | |
Chad Rosier | 2317dc8 | 2013-03-18 23:32:33 +0000 | [diff] [blame] | 330 | void t32() { |
| 331 | int i; |
| 332 | __asm mov eax, i |
| 333 | __asm mov eax, dword ptr i |
| 334 | __asm mov ax, word ptr i |
| 335 | __asm mov al, byte ptr i |
| 336 | // CHECK: t32 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 337 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 338 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 339 | // CHECK: call void asm sideeffect inteldialect "mov ax, word ptr $0", "*m,~{ax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 340 | // CHECK: call void asm sideeffect inteldialect "mov al, byte ptr $0", "*m,~{al},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
Chad Rosier | 2317dc8 | 2013-03-18 23:32:33 +0000 | [diff] [blame] | 341 | } |
| 342 | |
Chad Rosier | c7936c9 | 2013-03-19 21:12:57 +0000 | [diff] [blame] | 343 | void t33() { |
| 344 | int i; |
| 345 | __asm mov eax, [i] |
| 346 | __asm mov eax, dword ptr [i] |
| 347 | __asm mov ax, word ptr [i] |
| 348 | __asm mov al, byte ptr [i] |
| 349 | // CHECK: t33 |
Chad Rosier | 87d2a37 | 2013-03-27 21:54:09 +0000 | [diff] [blame] | 350 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 351 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 352 | // CHECK: call void asm sideeffect inteldialect "mov ax, word ptr $0", "*m,~{ax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
| 353 | // CHECK: call void asm sideeffect inteldialect "mov al, byte ptr $0", "*m,~{al},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) |
Chad Rosier | c7936c9 | 2013-03-19 21:12:57 +0000 | [diff] [blame] | 354 | } |
| 355 | |
Chad Rosier | 5e5ca1b | 2013-03-27 21:50:39 +0000 | [diff] [blame] | 356 | void t34() { |
| 357 | __asm prefetchnta 64[eax] |
| 358 | __asm mov eax, dword ptr 4[eax] |
| 359 | // CHECK: t34 |
| 360 | // CHECK: call void asm sideeffect inteldialect "prefetchnta $$64[eax]", "~{dirflag},~{fpsr},~{flags}"() |
| 361 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4[eax]", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 362 | } |
Chad Rosier | b801837 | 2013-04-05 16:29:17 +0000 | [diff] [blame] | 363 | |
| 364 | void t35() { |
| 365 | __asm prefetchnta [eax + (200*64)] |
| 366 | __asm mov eax, dword ptr [eax + (200*64)] |
| 367 | // CHECK: t35 |
| 368 | // CHECK: call void asm sideeffect inteldialect "prefetchnta [eax + ($$200*$$64)]", "~{dirflag},~{fpsr},~{flags}"() |
| 369 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr [eax + ($$200*$$64)]", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 370 | } |
Chad Rosier | 36ec9c2 | 2013-04-08 17:44:05 +0000 | [diff] [blame] | 371 | |
| 372 | void t36() { |
| 373 | int arr[4]; |
| 374 | __asm mov eax, 4[arr] |
Chad Rosier | 0c50a03 | 2013-04-12 19:52:07 +0000 | [diff] [blame] | 375 | __asm mov eax, 4[arr + 4] |
| 376 | __asm mov eax, 8[arr + 4 + 32*2 - 4] |
| 377 | __asm mov eax, 12[4 + arr] |
| 378 | __asm mov eax, 4[4 + arr + 4] |
| 379 | __asm mov eax, 4[64 + arr + (2*32)] |
| 380 | __asm mov eax, 4[64 + arr - 2*32] |
Chad Rosier | a5ceca9 | 2013-04-10 16:33:34 +0000 | [diff] [blame] | 381 | __asm mov eax, [arr + 4] |
Chad Rosier | 579d8d1 | 2013-04-12 18:54:40 +0000 | [diff] [blame] | 382 | __asm mov eax, [arr + 4 + 32*2 - 4] |
Chad Rosier | a5ceca9 | 2013-04-10 16:33:34 +0000 | [diff] [blame] | 383 | __asm mov eax, [4 + arr] |
| 384 | __asm mov eax, [4 + arr + 4] |
Chad Rosier | 333ac6e | 2013-04-12 18:22:08 +0000 | [diff] [blame] | 385 | __asm mov eax, [64 + arr + (2*32)] |
| 386 | __asm mov eax, [64 + arr - 2*32] |
Chad Rosier | 36ec9c2 | 2013-04-08 17:44:05 +0000 | [diff] [blame] | 387 | // CHECK: t36 |
Chad Rosier | 333ac6e | 2013-04-12 18:22:08 +0000 | [diff] [blame] | 388 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
Chad Rosier | 0c50a03 | 2013-04-12 19:52:07 +0000 | [diff] [blame] | 389 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 390 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$72$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 391 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$16$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 392 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$12$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 393 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$132$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 394 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
Chad Rosier | 579d8d1 | 2013-04-12 18:54:40 +0000 | [diff] [blame] | 395 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 396 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$64$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
Chad Rosier | 333ac6e | 2013-04-12 18:22:08 +0000 | [diff] [blame] | 397 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 398 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 399 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$128$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 400 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
Chad Rosier | 36ec9c2 | 2013-04-08 17:44:05 +0000 | [diff] [blame] | 401 | } |
Chad Rosier | 7b4700c | 2013-04-17 00:12:09 +0000 | [diff] [blame] | 402 | |
| 403 | void t37() { |
| 404 | __asm mov eax, 4 + 8 |
| 405 | __asm mov eax, 4 + 8 * 16 |
| 406 | __asm mov eax, -4 + 8 * 16 |
| 407 | __asm mov eax, (4 + 4) * 16 |
Chad Rosier | abee27b | 2013-04-17 21:02:39 +0000 | [diff] [blame] | 408 | __asm mov eax, 4 + 8 * -16 |
| 409 | __asm mov eax, 4 + 16 / -8 |
| 410 | __asm mov eax, (16 + 16) / -8 |
Chad Rosier | 7b4700c | 2013-04-17 00:12:09 +0000 | [diff] [blame] | 411 | // CHECK: t37 |
| 412 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$12", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 413 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$132", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 414 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$124", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 415 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$128", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | abee27b | 2013-04-17 21:02:39 +0000 | [diff] [blame] | 416 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967172", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 417 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
| 418 | // CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967292", "~{eax},~{dirflag},~{fpsr},~{flags}"() |
Chad Rosier | 7b4700c | 2013-04-17 00:12:09 +0000 | [diff] [blame] | 419 | } |
| 420 | |
| 421 | void t38() { |
| 422 | int arr[4]; |
| 423 | __asm mov eax, 4+4[arr] |
| 424 | __asm mov eax, (4+4)[arr + 4] |
| 425 | __asm mov eax, 8*2[arr + 4 + 32*2 - 4] |
| 426 | __asm mov eax, 12+20[4 + arr] |
| 427 | __asm mov eax, 4*16+4[4 + arr + 4] |
| 428 | __asm mov eax, 4*4[64 + arr + (2*32)] |
| 429 | __asm mov eax, 4*(4-2)[64 + arr - 2*32] |
| 430 | __asm mov eax, 32*(4-2)[arr - 2*32] |
| 431 | // CHECH: t38 |
| 432 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 433 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$12$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 434 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$80$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 435 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$36$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 436 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$76$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 437 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$144$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 438 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 439 | // CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$0$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) |
| 440 | } |