<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Apr 16, 2010, at 7:20 PM, John Thompson wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Oh, sorry, I forgot to hit the save button in the editor.  It's just one file:</div>
</blockquote><div><br></div><div>This isn't the right patch.  These constraints are all target specific, so it'll have to be sunk into a (probably new) hook in the PowerPC TargetInfo impl.  There is documentation of this stuff here:</div><div><br></div><div><a href="http://gcc.gnu.org/onlinedocs/gcc/Simple-Constraints.html#Simple-Constraints">http://gcc.gnu.org/onlinedocs/gcc/Simple-Constraints.html#Simple-Constraints</a></div><div><a href="http://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html#Machine-Constraints">http://gcc.gnu.org/onlinedocs/gcc/Machine-Constraints.html#Machine-Constraints</a> </div><div><br></div><div>FWIW, Z is apparently "<span class="Apple-style-span" style="font-family: Times; ">Memory operand that is an indexed or indirect from a register (it is usually better to use `<samp><span class="samp">m</span></samp>' or `<samp><span class="samp">es</span></samp>' in <code>asm</code> statements) "</span></div><div><br></div><div>-Chris</div><br><blockquote type="cite"><div> </div>
<div>Index: lib/Basic/TargetInfo.cpp<br>===================================================================<br>--- lib/Basic/TargetInfo.cpp (revision 101528)<br>+++ lib/Basic/TargetInfo.cpp (working copy)<br>@@ -280,6 +280,8 @@<br>
       Info.setAllowsRegister();<br>       Info.setAllowsMemory();<br>       break;<br>+    case 'Z': // wish I knew what Z was for...<br>+      break;<br>     }<br> <br>     Name++;<br>@@ -359,6 +361,14 @@<br>     case 'N':<br>
     case 'O':<br>     case 'P':<br>+    case 'Q':<br>+    case 'R':<br>+    case 'S':<br>+    case 'T':<br>+    case 'U':<br>+    case 'W':<br>+    case 'Y':<br>
+    case 'Z':<br>       break;<br>     case 'r': // general register.<br>       Info.setAllowsRegister();<br></div>
<div>I don't know if it's target-specific or not.  The gcc comment makes it seem generic (register indexed memory), but I couldn't find any docs that mentioned it.</div>
<div> </div>
<div>-John<br><br></div>
<div class="gmail_quote">On Fri, Apr 16, 2010 at 4:38 PM, Chris Lattner <span dir="ltr"><<a href="mailto:clattner@apple.com">clattner@apple.com</a>></span> wrote:<br>
<blockquote style="BORDER-LEFT: #ccc 1px solid; MARGIN: 0px 0px 0px 0.8ex; PADDING-LEFT: 1ex" class="gmail_quote">
<div>
<div></div>
<div class="h5"><br>On Apr 16, 2010, at 3:53 PM, John Thompson wrote:<br><br>> Using Clang to compile some PS3 headers, I ran into a problem with some inline assembly for some instrinsics macros with an unrecognized "Z" constraint.  Looking at the gcc sources, I see there are several other constraints not currently supported.  The enclosed macro lets them get through the parser, but at present I have no idea how to actually implement them, so before I look into it more, I thought I'd ask.  Can someone help me out?<br>
><br>> This from the gcc sources:<br>><br>> (define_memory_constraint "Z"<br>>   "Memory operand that is an indexed or indirect from a register (it is<br>> usually better to use @samp{m} or @samp{es} in @code{asm} statements)"<br>
>   (match_operand 0 "indexed_or_indirect_operand"))<br>> Is it okay to check in the patch as an intermediate step?<br>><br><br></div></div>it Z a target independent or target-specific constraint?  You have some unrelated changes in your diff.<br>
<font color="#888888"><br>-Chris<br><br></font></blockquote></div><br><br clear="all"><br>-- <br>John Thompson<br><a href="mailto:John.Thompson.JTSoftware@gmail.com">John.Thompson.JTSoftware@gmail.com</a><br><br>
</blockquote></div><br></body></html>