1cc59e91a50dae1e0fdcbb0757a69a2941b2ba69cNAKAMURA Takumi// REQUIRES: x86-64-registered-target 2b2e2157f905b0b6e27f1d3f5e1f38778c6731813Chad Rosier// RUN: %clang_cc1 %s -triple i386-apple-darwin10 -O0 -fasm-blocks -emit-llvm -o - | FileCheck %s 325bc47ee5b7a5db8821c9ef5fddd2837c1301953Chad Rosier 4b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosiervoid t1() { 5b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier// CHECK: @t1 687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() 7b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier// CHECK: ret void 8b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier __asm {} 9b64f3101e65e6931a1b3b3479ca6357624b37667Chad Rosier} 10265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier 11265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t2() { 12265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t2 1387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() 1487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() 1587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop", "~{dirflag},~{fpsr},~{flags}"() 16265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void 17265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier __asm nop 18265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier __asm nop 19265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier __asm nop 20265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier} 21265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier 22265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t3() { 23265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t3 2487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "nop\0A\09nop\0A\09nop", "~{dirflag},~{fpsr},~{flags}"() 25265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void 26265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier __asm nop __asm nop __asm nop 27265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier} 28265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier 29265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t4(void) { 30265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t4 3187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ebx, eax", "~{ebx},~{dirflag},~{fpsr},~{flags}"() 3287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ecx, ebx", "~{ecx},~{dirflag},~{fpsr},~{flags}"() 33265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void 34265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier __asm mov ebx, eax 35265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier __asm mov ecx, ebx 36265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier} 37265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier 38265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosiervoid t5(void) { 39265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: @t5 4087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ebx, eax\0A\09mov ecx, ebx", "~{ebx},~{ecx},~{dirflag},~{fpsr},~{flags}"() 41265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier// CHECK: ret void 42265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier __asm mov ebx, eax __asm mov ecx, ebx 43265f538b2c8b9e19196ce8a78a3da78671eb6f2bChad Rosier} 4427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier 4527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosiervoid t6(void) { 4627ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier __asm int 0x2c 4727ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier// CHECK: t6 4887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$0x2c", "~{dirflag},~{fpsr},~{flags}"() 4927ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier} 5027ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier 517fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosiervoid t7() { 5227ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier __asm { 5327ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier int 0x2c ; } asm comments are fun! }{ 5427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier } 5527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier __asm {} 567fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t7 5787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$0x2c", "~{dirflag},~{fpsr},~{flags}"() 5887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() 5927ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier} 60ac9289deef6536e47b0da2c6d67d0a74e777b5a2Chad Rosier 617fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosierint t8() { 62d9b56edcf42232c5331f9ad79aae83ba31e852dfChad Rosier __asm int 4 ; } comments for single-line asm 6327ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier __asm {} 6427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier __asm int 4 6527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier return 10; 667fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t8 6787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$4", "~{dirflag},~{fpsr},~{flags}"() 6887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "", "~{dirflag},~{fpsr},~{flags}"() 6987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "int $$4", "~{dirflag},~{fpsr},~{flags}"() 7027ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier// CHECK: ret i32 10 7127ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier} 72ac9289deef6536e47b0da2c6d67d0a74e777b5a2Chad Rosier 737fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosiervoid t9() { 7427ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier __asm { 7527ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier push ebx 7627ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier mov ebx, 0x07 7727ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier pop ebx 7827ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier } 797fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t9 8087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, $$0x07\0A\09pop ebx", "~{ebx},~{dirflag},~{fpsr},~{flags}"() 8127ef16b326b9a9dd2440e5d1cc884e27f07e13a3Chad Rosier} 82f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier 837fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosierunsigned t10(void) { 84f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier unsigned i = 1, j; 85f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier __asm { 86f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier mov eax, i 87f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier mov j, eax 88f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier } 89f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier return j; 907fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosier// CHECK: t10 91f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: [[I:%[a-zA-Z0-9]+]] = alloca i32, align 4 92f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: [[J:%[a-zA-Z0-9]+]] = alloca i32, align 4 93f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: store i32 1, i32* [[I]], align 4 9487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// 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* %{{.*}}) 95f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: [[RET:%[a-zA-Z0-9]+]] = load i32* [[J]], align 4 96f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier// CHECK: ret i32 [[RET]] 97f64c11815e68f025737dc41d8d94e31e1426274dChad Rosier} 98700ce64db453624d2a3f2d34d25207c97b2b064fChad Rosier 997fcde17284f5b18b18d858bbbc81898f58f3c296Chad Rosiervoid t11(void) { 1004de971651ba09009d4a7cc6d2fbc978dd7092263Chad Rosier __asm mov eax, 1 101fba3fb9a14f2d729639e0fdb834e3eeb40a8a12aChad Rosier// CHECK: t11 10287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() 1034de971651ba09009d4a7cc6d2fbc978dd7092263Chad Rosier} 1047f9678b513f926dae27234858ed2586a6eb03b7bChad Rosier 105fba3fb9a14f2d729639e0fdb834e3eeb40a8a12aChad Rosierunsigned t12(void) { 106b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier unsigned i = 1, j, l = 1, m; 107b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier __asm { 108b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier mov eax, i 109b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier mov j, eax 110b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier mov eax, l 111b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier mov m, eax 112b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier } 113b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier return j + m; 114fba3fb9a14f2d729639e0fdb834e3eeb40a8a12aChad Rosier// CHECK: t12 11587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// 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* %{{.*}}) 116362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier} 117362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier 118362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosiervoid t13() { 119362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier char i = 1; 120362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier short j = 2; 121362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier __asm movzx eax, i 122362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier __asm movzx eax, j 123362b18c73c0096dd1d54778c049fbb2ec294399dChad Rosier// CHECK: t13 12487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "movzx eax, byte ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i8* %{{.*}}) 12587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "movzx eax, word ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i16* %{{.*}}) 126b55e602e1dc7952edc7545fab7bb7b15047378f3Chad Rosier} 127b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier 128b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosiervoid t14() { 129b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier unsigned i = 1, j = 2; 130b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier __asm { 131b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier .if 1 132b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier mov eax, i 133b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier .else 134b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier mov ebx, j 135b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier .endif 136b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier } 137b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier// CHECK: t14 13887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// 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* %{{.*}}) 139b0850b3f417feb9ab5c7bcfd4e531fd6eaa2928cChad Rosier} 1405a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosier 1416949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosierint gvar = 10; 1425a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosiervoid t15() { 1436949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier int lvar = 10; 1446949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier __asm mov eax, lvar ; eax = 10 1456949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier __asm mov eax, offset lvar ; eax = address of lvar 1466949ab1f5e81deccc8053dcb0eeeaa8498a91070Chad Rosier __asm mov eax, offset gvar ; eax = address of gvar 1475a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosier// CHECK: t15 14887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 14987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $0", "r,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 15087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $0", "r,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* @{{.*}}) 1515a12aca46db5477f7e35a70dbec8d3afe5549ac0Chad Rosier} 15242242552fe9769fba3c1a1f82e181688675908f0Chad Rosier 15342242552fe9769fba3c1a1f82e181688675908f0Chad Rosiervoid t16() { 15442242552fe9769fba3c1a1f82e181688675908f0Chad Rosier int var = 10; 15542242552fe9769fba3c1a1f82e181688675908f0Chad Rosier __asm mov [eax], offset var 15642242552fe9769fba3c1a1f82e181688675908f0Chad Rosier// CHECK: t16 15787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov [eax], $0", "r,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 15842242552fe9769fba3c1a1f82e181688675908f0Chad Rosier} 1591bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier 1601bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosiervoid t17() { 1611bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier __asm _emit 0x4A 1621bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier __asm _emit 0x43 1631bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier __asm _emit 0x4B 1647243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier __asm _EMIT 0x4B 1651bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier// CHECK: t17 16687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0x4A", "~{dirflag},~{fpsr},~{flags}"() 16787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0x43", "~{dirflag},~{fpsr},~{flags}"() 16887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0x4B", "~{dirflag},~{fpsr},~{flags}"() 16987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0x4B", "~{dirflag},~{fpsr},~{flags}"() 1701bed9b7678a9a7d91832926a69411e7fc5be2825Chad Rosier} 171f7427273d0aeed94d025629f98e3099112107628Chad Rosier 172da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosiervoid t20() { 173205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier char bar; 174da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosier int foo; 175205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier char _bar[2]; 176205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier int _foo[4]; 177205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier 178205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, LENGTH foo 179205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, LENGTH bar 180205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, LENGTH _foo 181205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, LENGTH _bar 182da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosier// CHECK: t20 18387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() 18487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() 18587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() 18687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"() 187205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier 188205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, TYPE foo 189205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, TYPE bar 190205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, TYPE _foo 191205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, TYPE _bar 19287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() 19387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() 19487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() 19587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() 196205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier 197205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, SIZE foo 198205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, SIZE bar 199205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, SIZE _foo 200205ecf01939d6e9c903f0e1d51455b2d882d076bChad Rosier __asm mov eax, SIZE _bar 20187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4", "~{eax},~{dirflag},~{fpsr},~{flags}"() 20287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$1", "~{eax},~{dirflag},~{fpsr},~{flags}"() 20387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$16", "~{eax},~{dirflag},~{fpsr},~{flags}"() 20487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"() 205da5c3b7fa13e35bdc6973ca2a314cbbfe26f71d1Chad Rosier} 206e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier 207e0c01963514ed158208cde1f3a0343a788156e27Chad Rosiervoid t21() { 208e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm { 209e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm push ebx 210e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm mov ebx, 0x07 211e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm pop ebx 212e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier } 213e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier// CHECK: t21 21487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, $$0x07\0A\09pop ebx", "~{ebx},~{dirflag},~{fpsr},~{flags}"() 215e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier} 216e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier 217e0c01963514ed158208cde1f3a0343a788156e27Chad Rosierextern void t22_helper(int x); 218e0c01963514ed158208cde1f3a0343a788156e27Chad Rosiervoid t22() { 219e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier int x = 0; 220e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm { 221e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm push ebx 222e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm mov ebx, esp 223e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier } 224e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier t22_helper(x); 225e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm { 226e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm mov esp, ebx 227e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier __asm pop ebx 228e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier } 229e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier// CHECK: t22 23087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "push ebx\0A\09mov ebx, esp", "~{ebx},~{dirflag},~{fpsr},~{flags}"() 231e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier// CHECK: call void @t22_helper 23287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov esp, ebx\0A\09pop ebx", "~{ebx},~{esp},~{dirflag},~{fpsr},~{flags}"() 233e0c01963514ed158208cde1f3a0343a788156e27Chad Rosier} 2347520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier 2357520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosiervoid t23() { 2367520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier __asm { 2377520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier the_label: 2387520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier } 2397520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier// CHECK: t23 24087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "the_label:", "~{dirflag},~{fpsr},~{flags}"() 2417520fcab8a7084729901c5edfd3ade79acfa2672Chad Rosier} 2423731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier 2433731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosiervoid t24_helper(void) {} 2443731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosiervoid t24() { 2453731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier __asm call t24_helper 2463731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier// CHECK: t24 24787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "call $0", "r,~{dirflag},~{fpsr},~{flags}"(void ()* @t24_helper) 2483731a41acbab938f03708f05b1bff7c34b4d3484Chad Rosier} 2498e70b00253f7c00814795ae287030efc2053ce8cChad Rosier 2508e70b00253f7c00814795ae287030efc2053ce8cChad Rosiervoid t25() { 2518e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm mov eax, 0ffffffffh 2528e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm mov eax, 0fh 2538e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm mov eax, 0a2h 2548e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm mov eax, 0xa2h 2558e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm mov eax, 0xa2 2568e70b00253f7c00814795ae287030efc2053ce8cChad Rosier// CHECK: t25 2577b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967295", "~{eax},~{dirflag},~{fpsr},~{flags}"() 2587b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$15", "~{eax},~{dirflag},~{fpsr},~{flags}"() 2597b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$162", "~{eax},~{dirflag},~{fpsr},~{flags}"() 26087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$0xa2h", "~{eax},~{dirflag},~{fpsr},~{flags}"() 26187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$0xa2", "~{eax},~{dirflag},~{fpsr},~{flags}"() 2628e70b00253f7c00814795ae287030efc2053ce8cChad Rosier} 2638e70b00253f7c00814795ae287030efc2053ce8cChad Rosier 2648e70b00253f7c00814795ae287030efc2053ce8cChad Rosiervoid t26() { 2658e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm pushad 2668e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm mov eax, 0 2678e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm __emit 0fh 2688e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm __emit 0a2h 2697243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier __asm __EMIT 0a2h 2708e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm popad 2718e70b00253f7c00814795ae287030efc2053ce8cChad Rosier// CHECK: t26 27287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "pushad", "~{dirflag},~{fpsr},~{flags}"() 27387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$0", "~{eax},~{dirflag},~{fpsr},~{flags}"() 27487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0fh", "~{dirflag},~{fpsr},~{flags}"() 27587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0a2h", "~{dirflag},~{fpsr},~{flags}"() 27687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".byte 0a2h", "~{dirflag},~{fpsr},~{flags}"() 27787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "popad", "~{dirflag},~{fpsr},~{flags}"() 2788e70b00253f7c00814795ae287030efc2053ce8cChad Rosier} 2798e70b00253f7c00814795ae287030efc2053ce8cChad Rosier 2808e70b00253f7c00814795ae287030efc2053ce8cChad Rosiervoid t27() { 2818e70b00253f7c00814795ae287030efc2053ce8cChad Rosier __asm mov eax, fs:[0h] 2828e70b00253f7c00814795ae287030efc2053ce8cChad Rosier// CHECK: t27 283b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, fs:[$$0h]", "~{eax},~{dirflag},~{fpsr},~{flags}"() 2848e70b00253f7c00814795ae287030efc2053ce8cChad Rosier} 2857243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier 2867243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosiervoid t28() { 2877243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier __asm align 8 2887243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier __asm align 16; 2897243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier __asm align 128; 2907243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier __asm ALIGN 256; 2917243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier// CHECK: t28 29287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 3", "~{dirflag},~{fpsr},~{flags}"() 29387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 4", "~{dirflag},~{fpsr},~{flags}"() 29487d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 7", "~{dirflag},~{fpsr},~{flags}"() 29587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect ".align 8", "~{dirflag},~{fpsr},~{flags}"() 2967243b0f000a68f089b91bf8414f26d4766ebac48Chad Rosier} 29774992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier 29874992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosiervoid t29() { 29974992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier int arr[2] = {0, 0}; 30074992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier int olen = 0, osize = 0, otype = 0; 30174992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier __asm mov olen, LENGTH arr 30274992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier __asm mov osize, SIZE arr 30374992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier __asm mov otype, TYPE arr 30474992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier// CHECK: t29 30587d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$2", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 30687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$8", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 30787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, $$4", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 30874992c495e4b2dd3669c103ffbd239dbd194f9e8Chad Rosier} 309d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier 310d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosierint results[2] = {13, 37}; 311d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosierint *t30() 312d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier{ 313d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier int *res; 314d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier __asm lea edi, results 315d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier __asm mov res, edi 316d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier return res; 317d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier// CHECK: t30 31887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "lea edi, dword ptr $0", "*m,~{edi},~{dirflag},~{fpsr},~{flags}"([2 x i32]* @{{.*}}) 31987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov dword ptr $0, edi", "=*m,~{dirflag},~{fpsr},~{flags}"(i32** %{{.*}}) 320d8d7f5fb36f1e3cc46347c60702eddabe8838cb4Chad Rosier} 3214e1125f630e75a52209b928e9d43b638abf39987Bill Wendling 32259c900304a390b11c4efcad2924bf6373979db73Chad Rosiervoid t31() { 32359c900304a390b11c4efcad2924bf6373979db73Chad Rosier __asm pushad 32459c900304a390b11c4efcad2924bf6373979db73Chad Rosier __asm popad 32559c900304a390b11c4efcad2924bf6373979db73Chad Rosier// CHECK: t31 32687d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "pushad", "~{dirflag},~{fpsr},~{flags}"() 32787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "popad", "~{dirflag},~{fpsr},~{flags}"() 32859c900304a390b11c4efcad2924bf6373979db73Chad Rosier} 32959c900304a390b11c4efcad2924bf6373979db73Chad Rosier 3302317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosiervoid t32() { 3312317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier int i; 3322317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier __asm mov eax, i 3332317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier __asm mov eax, dword ptr i 3342317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier __asm mov ax, word ptr i 3352317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier __asm mov al, byte ptr i 3362317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier// CHECK: t32 33787d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 33887d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 33987d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ax, word ptr $0", "*m,~{ax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 34087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov al, byte ptr $0", "*m,~{al},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 3412317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier} 3422317dc8842e7b5ad0dc56723ff45ab2cf73abb35Chad Rosier 343c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosiervoid t33() { 344c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier int i; 345c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier __asm mov eax, [i] 346c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier __asm mov eax, dword ptr [i] 347c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier __asm mov ax, word ptr [i] 348c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier __asm mov al, byte ptr [i] 349c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier// CHECK: t33 35087d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 35187d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 35287d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov ax, word ptr $0", "*m,~{ax},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 35387d2a37bde2890745a2d30d27985e354d91c2556Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov al, byte ptr $0", "*m,~{al},~{dirflag},~{fpsr},~{flags}"(i32* %{{.*}}) 354c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier} 355c7936c9b2b195d099ffbb7ab32f0211a89a3270bChad Rosier 3565e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosiervoid t34() { 3575e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier __asm prefetchnta 64[eax] 3585e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier __asm mov eax, dword ptr 4[eax] 3595e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier// CHECK: t34 3605e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier// CHECK: call void asm sideeffect inteldialect "prefetchnta $$64[eax]", "~{dirflag},~{fpsr},~{flags}"() 3615e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4[eax]", "~{eax},~{dirflag},~{fpsr},~{flags}"() 3625e5ca1b7ed21c48f03b8629f7dfa2dbba23fcc68Chad Rosier} 363b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier 364b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosiervoid t35() { 365b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier __asm prefetchnta [eax + (200*64)] 366b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier __asm mov eax, dword ptr [eax + (200*64)] 367b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: t35 368b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: call void asm sideeffect inteldialect "prefetchnta [eax + ($$200*$$64)]", "~{dirflag},~{fpsr},~{flags}"() 369b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr [eax + ($$200*$$64)]", "~{eax},~{dirflag},~{fpsr},~{flags}"() 370b801837f697326fb7bc5bb24263340e80a9b53b0Chad Rosier} 37136ec9c2160041efa41320c843882ae104f43350bChad Rosier 37236ec9c2160041efa41320c843882ae104f43350bChad Rosiervoid t36() { 37336ec9c2160041efa41320c843882ae104f43350bChad Rosier int arr[4]; 37436ec9c2160041efa41320c843882ae104f43350bChad Rosier __asm mov eax, 4[arr] 3750c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier __asm mov eax, 4[arr + 4] 3760c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier __asm mov eax, 8[arr + 4 + 32*2 - 4] 3770c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier __asm mov eax, 12[4 + arr] 3780c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier __asm mov eax, 4[4 + arr + 4] 3790c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier __asm mov eax, 4[64 + arr + (2*32)] 3800c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier __asm mov eax, 4[64 + arr - 2*32] 381a5ceca924c33bfa6e1d7b3e6e3cac7c24cbf3633Chad Rosier __asm mov eax, [arr + 4] 382579d8d1b77564bf5ce14245b8474066728f54e53Chad Rosier __asm mov eax, [arr + 4 + 32*2 - 4] 383a5ceca924c33bfa6e1d7b3e6e3cac7c24cbf3633Chad Rosier __asm mov eax, [4 + arr] 384a5ceca924c33bfa6e1d7b3e6e3cac7c24cbf3633Chad Rosier __asm mov eax, [4 + arr + 4] 385333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier __asm mov eax, [64 + arr + (2*32)] 386333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier __asm mov eax, [64 + arr - 2*32] 38736ec9c2160041efa41320c843882ae104f43350bChad Rosier// CHECK: t36 388333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 3890c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 3900c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$72$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 3910c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$16$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 3920c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$12$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 3930c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$132$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 3940c50a032f437544bd6e48e350f5e7b5056662551Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 395579d8d1b77564bf5ce14245b8474066728f54e53Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 396579d8d1b77564bf5ce14245b8474066728f54e53Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$64$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 397333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$4$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 398333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 399333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$128$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 400333ac6ed908bd70b879243a1d8541c27f142b40aChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 40136ec9c2160041efa41320c843882ae104f43350bChad Rosier} 4027b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier 4037b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosiervoid t37() { 4047b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 4 + 8 4057b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 4 + 8 * 16 4067b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, -4 + 8 * 16 4077b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, (4 + 4) * 16 408abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier __asm mov eax, 4 + 8 * -16 409abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier __asm mov eax, 4 + 16 / -8 410abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier __asm mov eax, (16 + 16) / -8 4117b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: t37 4127b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$12", "~{eax},~{dirflag},~{fpsr},~{flags}"() 4137b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$132", "~{eax},~{dirflag},~{fpsr},~{flags}"() 4147b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$124", "~{eax},~{dirflag},~{fpsr},~{flags}"() 4157b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$128", "~{eax},~{dirflag},~{fpsr},~{flags}"() 416abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967172", "~{eax},~{dirflag},~{fpsr},~{flags}"() 417abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$2", "~{eax},~{dirflag},~{fpsr},~{flags}"() 418abee27ba69494c142ee4acf9eca91dab7dea1b32Chad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, $$4294967292", "~{eax},~{dirflag},~{fpsr},~{flags}"() 4197b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier} 4207b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier 4217b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosiervoid t38() { 4227b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier int arr[4]; 4237b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 4+4[arr] 4247b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, (4+4)[arr + 4] 4257b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 8*2[arr + 4 + 32*2 - 4] 4267b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 12+20[4 + arr] 4277b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 4*16+4[4 + arr + 4] 4287b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 4*4[64 + arr + (2*32)] 4297b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 4*(4-2)[64 + arr - 2*32] 4307b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier __asm mov eax, 32*(4-2)[arr - 2*32] 43168ea1d26ff6cdd3b8bcd37dd88b24d430e71581aChad Rosier// CHECK: t38 4327b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4337b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$12$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4347b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$80$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4357b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$36$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4367b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$76$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4377b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$144$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4387b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$8$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4397b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier// CHECK: call void asm sideeffect inteldialect "mov eax, dword ptr $$0$0", "*m,~{eax},~{dirflag},~{fpsr},~{flags}"([4 x i32]* %{{.*}}) 4407b4700c783c2c1feb9b2e6e4108cfa596be4038bChad Rosier} 441