<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br></blockquote><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">+  case 'x':<br>
+  case 'f':<br>
+  case 't':<br>
+  case 'u':<br>
+    return Size <= 128;<br></blockquote><div><br></div><div><div>Hans pointed out that you'll have problems here with _m256 and wanting an avx register. There is, afaict, no separate constraint for "gimme an avx register" that's different from SSE registers. There is the 'v' constraint which works for avx 512 (evex encoded) registers.</div></div><div><br></div><div>-eric</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
+  }<br>
+<br>
+  return true;<br>
+}<br>
<br>
 std::string<br>
 X86TargetInfo::convertConstraint(const char *&Constraint) const {<br>
@@ -3109,14 +3127,21 @@ public:<br>
                          unsigned Size) const override {<br>
     switch (Constraint[0]) {<br>
     default: break;<br>
+    case 'R':<br>
+    case 'q':<br>
+    case 'Q':<br>
     case 'a':<br>
     case 'b':<br>
     case 'c':<br>
     case 'd':<br>
+    case 'S':<br>
+    case 'D':<br>
       return Size <= 32;<br>
+    case 'A':<br>
+      return Size <= 64;<br>
     }<br>
<br>
-    return true;<br>
+    return X86TargetInfo::validateInputSize(Constraint, Size);<br>
   }<br>
 };<br>
 } // end anonymous namespace<br>
<br>
Modified: cfe/trunk/test/CodeGen/x86_32-inline-asm.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_32-inline-asm.c?rev=217994&r1=217993&r2=217994&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/x86_32-inline-asm.c?rev=217994&r1=217993&r2=217994&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGen/x86_32-inline-asm.c (original)<br>
+++ cfe/trunk/test/CodeGen/x86_32-inline-asm.c Wed Sep 17 18:35:14 2014<br>
@@ -1,5 +1,8 @@<br>
 // RUN: %clang_cc1 -triple i386-apple-darwin9 -verify %s<br>
+<br>
 // <rdar://problem/12415959><br>
+// rdar://problem/11846140<br>
+// rdar://problem/17476970<br>
<br>
 typedef unsigned int u_int32_t;<br>
 typedef u_int32_t uint32_t;<br>
@@ -7,6 +10,12 @@ typedef u_int32_t uint32_t;<br>
 typedef unsigned long long u_int64_t;<br>
 typedef u_int64_t uint64_t;<br>
<br>
+typedef float __m128 __attribute__ ((vector_size (16)));<br>
+typedef float __m256 __attribute__ ((vector_size (32)));<br>
+<br>
+__m128 val128;<br>
+__m256 val256;<br>
+<br>
 int func1() {<br>
   // Error out if size is > 32-bits.<br>
   uint32_t msr = 0x8b;<br>
@@ -21,4 +30,17 @@ int func1() {<br>
   unsigned char data;<br>
   unsigned int port;<br>
   __asm__ volatile("outb %0, %w1" : : "a" (data), "Nd" (port)); // No error expected.<br>
+<br>
+  __asm__ volatile("outb %0, %w1" : : "R" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'R'}}<br>
+  __asm__ volatile("outb %0, %w1" : : "q" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'q'}}<br>
+  __asm__ volatile("outb %0, %w1" : : "Q" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'Q'}}<br>
+  __asm__ volatile("outb %0, %w1" : : "b" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'b'}}<br>
+  __asm__ volatile("outb %0, %w1" : : "c" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'c'}}<br>
+  __asm__ volatile("outb %0, %w1" : : "d" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'd'}}<br>
+  __asm__ volatile("outb %0, %w1" : : "S" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'S'}}<br>
+  __asm__ volatile("outb %0, %w1" : : "D" (val), "Nd" (port)); // expected-error {{invalid input size for constraint 'D'}}<br>
+  __asm__ volatile("foo1 %0" : : "A" (val128)); // expected-error {{invalid input size for constraint 'A'}}<br>
+  __asm__ volatile("foo1 %0" : : "f" (val256)); // expected-error {{invalid input size for constraint 'f'}}<br>
+  __asm__ volatile("foo1 %0" : : "t" (val256)); // expected-error {{invalid input size for constraint 't'}}<br>
+  __asm__ volatile("foo1 %0" : : "u" (val256)); // expected-error {{invalid input size for constraint 'u'}}<br>
 }<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>