<div dir="ltr">Thanks for notice.<div>Fixed at rev218376.</div></div><div class="gmail_extra"><br><div class="gmail_quote">2014-09-19 22:51 GMT+04:00 Pasi Parviainen <span dir="ltr"><<a href="mailto:pasi.parviainen@iki.fi" target="_blank">pasi.parviainen@iki.fi</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 19.9.2014 13:29, Robert Khasanov wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: rkhasanov<br>
Date: Fri Sep 19 05:29:22 2014<br>
New Revision: 218118<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=218118&view=rev" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project?rev=218118&view=rev</a><br>
Log:<br>
[x86] Add _addcarry_u{32|64} and _subborrow_u{32|64}.<br>
They are added to adxintrin.h but outside __ADX__ block.<br>
These intrinics generates adc and sbb correspondingly that were available before ADX<br>
<br>
<br>
Added:<br>
     cfe/trunk/test/CodeGen/adc-<u></u>builtins.c<br>
Modified:<br>
     cfe/trunk/include/clang/Basic/<u></u>BuiltinsX86.def<br>
     cfe/trunk/lib/Headers/<u></u>adxintrin.h<br>
<br>
Modified: cfe/trunk/include/clang/Basic/<u></u>BuiltinsX86.def<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=218118&r1=218117&r2=218118&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/cfe/trunk/include/<u></u>clang/Basic/BuiltinsX86.def?<u></u>rev=218118&r1=218117&r2=<u></u>218118&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- cfe/trunk/include/clang/Basic/<u></u>BuiltinsX86.def (original)<br>
+++ cfe/trunk/include/clang/Basic/<u></u>BuiltinsX86.def Fri Sep 19 05:29:22 2014<br>
@@ -628,6 +628,10 @@ BUILTIN(__builtin_ia32_<u></u>rdrand64_step, "U<br>
  // ADX<br>
  BUILTIN(__builtin_ia32_<u></u>addcarryx_u32, "UcUcUiUiUi*", "")<br>
  BUILTIN(__builtin_ia32_<u></u>addcarryx_u64, "UcUcULLiULLiULLi*", "")<br>
+BUILTIN(__builtin_ia32_<u></u>addcarry_u32, "UcUcUiUiUi*", "")<br>
+BUILTIN(__builtin_ia32_<u></u>addcarry_u64, "UcUcULLiULLiULLi*", "")<br>
+BUILTIN(__builtin_ia32_<u></u>subborrow_u32, "UcUcUiUiUi*", "")<br>
+BUILTIN(__builtin_ia32_<u></u>subborrow_u64, "UcUcULLiULLiULLi*", "")<br>
<br>
  // RDSEED<br>
  BUILTIN(__builtin_ia32_<u></u>rdseed16_step, "UiUs*", "")<br>
<br>
Modified: cfe/trunk/lib/Headers/<u></u>adxintrin.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/adxintrin.h?rev=218118&r1=218117&r2=218118&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/cfe/trunk/lib/Headers/<u></u>adxintrin.h?rev=218118&r1=<u></u>218117&r2=218118&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- cfe/trunk/lib/Headers/<u></u>adxintrin.h (original)<br>
+++ cfe/trunk/lib/Headers/<u></u>adxintrin.h Fri Sep 19 05:29:22 2014<br>
@@ -28,6 +28,7 @@<br>
  #ifndef __ADXINTRIN_H<br>
  #define __ADXINTRIN_H<br>
<br>
+/* Intrinsics that are available only if __ADX__ defined */<br>
  #ifdef __ADX__<br>
  static __inline unsigned char __attribute__((__always_<u></u>inline__, __nodebug__))<br>
  _addcarryx_u32(unsigned char __cf, unsigned int __x, unsigned int __y,<br>
@@ -46,4 +47,37 @@ _addcarryx_u64(unsigned char __cf, unsig<br>
  #endif<br>
  #endif<br>
<br>
+/* Intrinsics that are also available if __ADX__ undefined */<br>
+static __inline unsigned char __attribute__((__always_<u></u>inline__, __nodebug__))<br>
+_addcarry_u32(unsigned char __cf, unsigned int __x, unsigned int __y,<br>
+              unsigned int *__p)<br>
+{<br>
+  return __builtin_ia32_addcarry_u32(__<u></u>cf, __x, __y, __p);<br>
+}<br>
+<br>
+#ifdef __x86_64__<br>
+static __inline unsigned char __attribute__((__always_<u></u>inline__, __nodebug__))<br>
+_addcarry_u64(unsigned char __cf, unsigned long __x, unsigned long __y,<br>
+              unsigned long long  *__p)<br>
+{<br>
+  return __builtin_ia32_addcarry_u64(__<u></u>cf, __x, __y, __p);<br>
+}<br>
</blockquote>
<br></div></div>
Shouldn't the __x and __y arguments have type of unsigned long long instead of unsigned long? Otherwise this doesn't make sense with LLP64 model, and builtin is defined to take ULLi . Also same goes for _subborrow_u64 and for _addcarryx_u64 from r218117.<span class="HOEnZb"><font color="#888888"><br>
<br>
Pasi.</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+#endif<br>
+<br>
+static __inline unsigned char __attribute__((__always_<u></u>inline__, __nodebug__))<br>
+_subborrow_u32(unsigned char __cf, unsigned int __x, unsigned int __y,<br>
+              unsigned int *__p)<br>
+{<br>
+  return __builtin_ia32_subborrow_u32(_<u></u>_cf, __x, __y, __p);<br>
+}<br>
+<br>
+#ifdef __x86_64__<br>
+static __inline unsigned char __attribute__((__always_<u></u>inline__, __nodebug__))<br>
+_subborrow_u64(unsigned char __cf, unsigned long __x, unsigned long __y,<br>
+              unsigned long long  *__p)<br>
+{<br>
+  return __builtin_ia32_subborrow_u64(_<u></u>_cf, __x, __y, __p);<br>
+}<br>
+#endif<br>
+<br>
  #endif /* __ADXINTRIN_H */<br>
<br>
Added: cfe/trunk/test/CodeGen/adc-<u></u>builtins.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/adc-builtins.c?rev=218118&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/cfe/trunk/test/<u></u>CodeGen/adc-builtins.c?rev=<u></u>218118&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- cfe/trunk/test/CodeGen/adc-<u></u>builtins.c (added)<br>
+++ cfe/trunk/test/CodeGen/adc-<u></u>builtins.c Fri Sep 19 05:29:22 2014<br>
@@ -0,0 +1,31 @@<br>
+// RUN: %clang_cc1 -triple x86_64-unknown-unknown -ffreestanding -emit-llvm -o - %s | FileCheck %s<br>
+<br>
+#include <x86intrin.h><br>
+<br>
+unsigned char test_addcarry_u32(unsigned char __cf, unsigned int __x,<br>
+                                unsigned int __y, unsigned int *__p) {<br>
+// CHECK-LABEL: test_addcarry_u32<br>
+// CHECK: call i8 @llvm.x86.addcarry.u32<br>
+  return _addcarry_u32(__cf, __x, __y, __p);<br>
+}<br>
+<br>
+unsigned char test_addcarry_u64(unsigned char __cf, unsigned long __x,<br>
+                                unsigned long __y, unsigned long long *__p) {<br>
+// CHECK-LABEL: test_addcarry_u64<br>
+// CHECK: call i8 @llvm.x86.addcarry.u64<br>
+  return _addcarry_u64(__cf, __x, __y, __p);<br>
+}<br>
+<br>
+unsigned char test_subborrow_u32(unsigned char __cf, unsigned int __x,<br>
+                                unsigned int __y, unsigned int *__p) {<br>
+// CHECK-LABEL: test_subborrow_u32<br>
+// CHECK: call i8 @llvm.x86.subborrow.u32<br>
+  return _subborrow_u32(__cf, __x, __y, __p);<br>
+}<br>
+<br>
+unsigned char test_subborrow_u64(unsigned char __cf, unsigned long __x,<br>
+                                unsigned long __y, unsigned long long *__p) {<br>
+// CHECK-LABEL: test_subborrow_u64<br>
+// CHECK: call i8 @llvm.x86.subborrow.u64<br>
+  return _subborrow_u64(__cf, __x, __y, __p);<br>
+}<br>
<br>
<br>
______________________________<u></u>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu" target="_blank">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/<u></u>mailman/listinfo/cfe-commits</a><br>
<br>
</blockquote>
<br>
</div></div></blockquote></div><br></div>