168fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling// RUN: %clang_cc1 -triple i386-apple-darwin9 -verify %s
2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -triple i386-apple-darwin9 -target-feature +avx -verify %s
3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
468fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling// <rdar://problem/12415959>
5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// rdar://problem/11846140
6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// rdar://problem/17476970
768fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling
868fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendlingtypedef unsigned int u_int32_t;
968fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendlingtypedef u_int32_t uint32_t;
1068fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling
1168fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendlingtypedef unsigned long long u_int64_t;
1268fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendlingtypedef u_int64_t uint64_t;
1368fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling
14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef float __m128 __attribute__ ((vector_size (16)));
15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef float __m256 __attribute__ ((vector_size (32)));
16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef float __m512 __attribute__ ((vector_size (64)));
17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines__m128 val128;
19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines__m256 val256;
20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines__m512 val512;
21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
22984f2783ad8319aa0cbfca1c4a719688b1ecfd5eBill Wendlingint func1() {
23ba541d36f6891892efc3f17773ff2395bb97df44Bill Wendling  // Error out if size is > 32-bits.
2468fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling  uint32_t msr = 0x8b;
2568fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling  uint64_t val = 0;
2668fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling  __asm__ volatile("wrmsr"
2768fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling                   :
2868fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling                   : "c" (msr),
2968fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling                     "a" ((val & 0xFFFFFFFFUL)), // expected-error {{invalid input size for constraint 'a'}}
3068fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling                     "d" (((val >> 32) & 0xFFFFFFFFUL)));
31ba541d36f6891892efc3f17773ff2395bb97df44Bill Wendling
32ba541d36f6891892efc3f17773ff2395bb97df44Bill Wendling  // Don't error out if the size of the destination is <= 32 bits.
33ba541d36f6891892efc3f17773ff2395bb97df44Bill Wendling  unsigned char data;
34ba541d36f6891892efc3f17773ff2395bb97df44Bill Wendling  unsigned int port;
35ba541d36f6891892efc3f17773ff2395bb97df44Bill Wendling  __asm__ volatile("outb %0, %w1" : : "a" (data), "Nd" (port)); // No error expected.
36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "R" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'R'}}
38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "q" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'q'}}
39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "Q" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'Q'}}
40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "b" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'b'}}
41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "c" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'c'}}
42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "d" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'd'}}
43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "S" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'S'}}
44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("outb %0, %w1" : : "D" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'D'}}
45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : : "A" (val128)); // expected-error {{invalid input size for constraint 'A'}}
46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : : "f" (val256)); // expected-error {{invalid input size for constraint 'f'}}
47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : : "t" (val256)); // expected-error {{invalid input size for constraint 't'}}
48176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : : "u" (val256)); // expected-error {{invalid input size for constraint 'u'}}
49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : : "x" (val512)); // expected-error {{invalid input size for constraint 'x'}}
50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=R" (val)); // expected-error {{invalid output size for constraint '=R'}}
52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=q" (val)); // expected-error {{invalid output size for constraint '=q'}}
53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=Q" (val)); // expected-error {{invalid output size for constraint '=Q'}}
54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=a" (val)); // expected-error {{invalid output size for constraint '=a'}}
55176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=b" (val)); // expected-error {{invalid output size for constraint '=b'}}
56176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=c" (val)); // expected-error {{invalid output size for constraint '=c'}}
57176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=d" (val)); // expected-error {{invalid output size for constraint '=d'}}
58176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=S" (val)); // expected-error {{invalid output size for constraint '=S'}}
59176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=D" (val)); // expected-error {{invalid output size for constraint '=D'}}
60176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=A" (val128)); // expected-error {{invalid output size for constraint '=A'}}
61176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=t" (val256)); // expected-error {{invalid output size for constraint '=t'}}
62176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=u" (val256)); // expected-error {{invalid output size for constraint '=u'}}
63176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=x" (val512)); // expected-error {{invalid output size for constraint '=x'}}
64176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines
65176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#ifdef __AVX__
66176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : : "x" (val256)); // No error.
67176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=x" (val256));  // No error.
68176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#else
69176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : : "x" (val256)); // expected-error {{invalid input size for constraint 'x'}}
70176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines  __asm__ volatile("foo1 %0" : "=x" (val256)); // expected-error {{invalid output size for constraint '=x'}}
71176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines#endif
7268fd608c2c0866064e974c3d43778c47c1cbb080Bill Wendling}
73