Thanks! <div>Still, OMG! InterlockedExchange16 is present in the online docs, but not in the actual MSVC headers. </div><div><br><div class="gmail_quote">On Thu, Apr 5, 2012 at 10:16 AM, Timur Iskhodzhanov <span dir="ltr"><<a href="mailto:timurrrr@google.com">timurrrr@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: timurrrr<br>
Date: Thu Apr  5 12:16:32 2012<br>
New Revision: 154106<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=154106&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=154106&view=rev</a><br>
Log:<br>
[ASan/Win] Fix build by using inline assembly instead of an unavailable intrinsic function<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/asan/asan_win.cc<br>
<br>
Modified: compiler-rt/trunk/lib/asan/asan_win.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win.cc?rev=154106&r1=154105&r2=154106&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_win.cc?rev=154106&r1=154105&r2=154106&view=diff</a><br>

==============================================================================<br>
--- compiler-rt/trunk/lib/asan/asan_win.cc (original)<br>
+++ compiler-rt/trunk/lib/asan/asan_win.cc Thu Apr  5 12:16:32 2012<br>
@@ -235,7 +235,16 @@<br>
 }<br>
<br>
 uint16_t AtomicExchange(uint16_t *a, uint16_t new_val) {<br>
-  return InterlockedExchange16(a, new_val);<br>
+  // InterlockedExchange16 seems unavailable on some MSVS installations.<br>
+  // Everybody stand back, I pretend to know inline assembly!<br>
+  // FIXME: I assume VC is smart enough to save/restore eax/ecx?<br>
+  __asm {<br>
+    mov eax, a<br>
+    mov cx, new_val<br>
+    xchg [eax], cx<br>
+    mov new_val, cx<br>
+  }<br>
+  return new_val;<br>
 }<br>
<br>
 const char* AsanGetEnv(const char* name) {<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>