<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Oct 27, 2015 at 10:32 AM, Reid Kleckner via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rnk<br>
Date: Tue Oct 27 12:32:48 2015<br>
New Revision: 251418<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=251418&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=251418&view=rev</a><br>
Log:<br>
[ms-inline-asm] Leave alignment in bytes if the native assembler uses bytes<br></blockquote><div><br></div><div>Test case?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
The existing behavior was correct on Darwin, which is probably the<br>
platform it was written for.<br>
<br>
Before this change, we would rewrite "align 8" to ".align 3" and then<br>
fail to make it through the integrated assembler because 3 is not a<br>
power of 2.<br>
<br>
Differential Revision: <a href="http://reviews.llvm.org/D14120" rel="noreferrer" target="_blank">http://reviews.llvm.org/D14120</a><br>
<br>
Modified:<br>
    llvm/trunk/lib/MC/MCParser/AsmParser.cpp<br>
<br>
Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=251418&r1=251417&r2=251418&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=251418&r1=251417&r2=251418&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)<br>
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Tue Oct 27 12:32:48 2015<br>
@@ -4792,10 +4792,16 @@ bool AsmParser::parseMSInlineAsm(<br>
       OS << ".byte";<br>
       break;<br>
     case AOK_Align: {<br>
-      unsigned Val = AR.Val;<br>
-      OS << ".align " << Val;<br>
+      // MS alignment directives are measured in bytes. If the native assembler<br>
+      // measures alignment in bytes, we can pass it straight through.<br>
+      OS << ".align";<br>
+      if (getContext().getAsmInfo()->getAlignmentIsInBytes())<br>
+        break;<br>
<br>
-      // Skip the original immediate.<br>
+      // Alignment is in log2 form, so print that instead and skip the original<br>
+      // immediate.<br>
+      unsigned Val = AR.Val;<br>
+      OS << ' ' << Val;<br>
       assert(Val < 10 && "Expected alignment less then 2^10.");<br>
       AdditionalSkip = (Val < 4) ? 2 : Val < 7 ? 3 : 4;<br>
       break;<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>