Hello,

About a week ago I have started a new discussion about adding comments to LLVM 
intrinsics headers. 
http://permalink.gmane.org/gmane.comp.compilers.clang.devel/42032

Here is the first small patch providing doxygen comments for all the intrinsics 
in ammintrin.h.
How does it look?

Katya.

http://reviews.llvm.org/D8762

Files:
  ammintrin.h

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: ammintrin.h
===================================================================
--- ammintrin.h
+++ ammintrin.h
@@ -30,10 +30,47 @@
 
 #include <pmmintrin.h>
 
+/// \brief Extracts the specified bits from the lower 64 bits of the 128-bit
+///    operand, using the length and bit index specified in the immediate
+///    bytes.
+///
+/// \headerfile <x86intrin.h>
+///
+/// \code 
+/// __m128i _mm_extracti_si64(__m128i x, const int len, const int idx);
+/// \endcode 
+///
+/// \code 
+/// This intrinsics corresponds to \c EXTRQ instruction.
+/// \endcode 
+///
+/// \param x
+///    The value from which bits are extracted.
+/// \param len
+///    Specifies the length at [5:0].
+/// \param idx
+///    Specifies the index of the least significant bit at [5:0].
+/// \returns The bits extracted from the operand.
 #define _mm_extracti_si64(x, len, idx) \
   ((__m128i)__builtin_ia32_extrqi((__v2di)(__m128i)(x), \
                                   (char)(len), (char)(idx)))
 
+/// \brief Extracts the specified bits from the lower 64 bits of the 128-bit
+///    integer vector operand.
+///
+/// \headerfile <x86intrin.h>
+///
+/// \code 
+/// This intrinsics corresponds to \c EXTRQ instruction.
+/// \endcode 
+///
+/// \param __x
+///    The value from which bits are extracted.
+/// \param __y
+///    Specifies the index of the least significant bit at [13:8],
+///    and the length at [5:0].
+/// \returns A 128-bit vector whose lower 64 bits contain the bits extracted 
+///    from the operand.
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
 _mm_extract_si64(__m128i __x, __m128i __y)
 {
@@ -40,11 +77,59 @@
   return (__m128i)__builtin_ia32_extrq((__v2di)__x, (__v16qi)__y);
 }
 
+/// \brief Inserts bits from the lower 64 bits of the source integer vector
+///    operand into the lower 64 bits of the destination integer vector
+///    operand, using the length and bit index specified in the immediate
+///    bytes. No other bits in the lower 64 bits of the destination are
+///    modified. The upper 64 bits of the destination are undefined.
+///
+/// \headerfile <x86intrin.h>
+///
+/// \code 
+/// __m128i _mm_inserti_si64(__m128i x, __m128i y, const int len,
+/// const int idx);
+/// \endcode 
+///
+/// \code 
+/// This intrinsics corresponds to \c INSERTQ instruction.
+/// \endcode 
+///
+/// \param x
+///    The operand containing the bits used for the destination.
+/// \param y
+///    The source operand.
+/// \param len
+///    Immediate specifying the length at [5:0].
+/// \param idx
+///    Immediate specifying the bit index at [5:0].
+/// \returns The result of inserting bits from operand y into
+///    operand x.
 #define _mm_inserti_si64(x, y, len, idx) \
   ((__m128i)__builtin_ia32_insertqi((__v2di)(__m128i)(x), \
                                     (__v2di)(__m128i)(y), \
                                     (char)(len), (char)(idx)))
 
+/// \brief Inserts bits from the lower 64 bits of the source integer vector
+///    operand into the lower 64 bits of the destination integer vector
+///    operand at the index specified by operand __y. No
+///    other bits in the lower 64 bits of the destination are modified. The
+///    upper 64 bits of the destination are undefined.
+///
+/// \headerfile <x86intrin.h>
+///
+/// \code 
+/// This intrinsics corresponds to \c INSERTQ instruction.
+/// \endcode 
+///
+/// \param __x
+///    The lower 64 bits of this operand are copied to the lower 64
+///    bits of the destination.
+/// \param __y
+///    The field beginning at bit 0 of this operand with length
+///    specified by bits [69:64] is inserted into the destination
+///    at the index specified by bits [77:72].
+/// \returns The result of inserting bits from operand __y into
+///    operand __x.
 static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
 _mm_insert_si64(__m128i __x, __m128i __y)
 {
@@ -51,6 +136,21 @@
   return (__m128i)__builtin_ia32_insertq((__v2di)__x, (__v2di)__y);
 }
 
+/// \brief Stores a 64-bit double-precision value in a 64-bit memory location. 
+///    To minimize caching, the data is flagged as non-temporal (unlikely to be
+///    used again soon).
+///
+/// \headerfile <x86intrin.h>
+///
+/// \code 
+/// This intrinsics corresponds to \c MOVNTSD instruction.
+/// \endcode 
+///
+/// \param __p
+///    The 64-bit memory location used to store the register value.
+/// \param __a
+///    The 64-bit double-precision floating-point register value to
+///    be stored.
 static __inline__ void __attribute__((__always_inline__, __nodebug__))
 _mm_stream_sd(double *__p, __m128d __a)
 {
@@ -57,6 +157,21 @@
   __builtin_ia32_movntsd(__p, (__v2df)__a);
 }
 
+/// \brief Stores a 32-bit single-precision floating-point value in a 32-bit
+///    memory location. To minimize caching, the data is flagged as
+///    non-temporal (unlikely to be used again soon).
+///
+/// \headerfile <x86intrin.h>
+///
+/// \code 
+/// This intrinsics corresponds to \c MOVNTSS instruction.
+/// \endcode 
+///
+/// \param __p
+///    The 32-bit memory location used to store the register value.
+/// \param __a
+///    The 32-bit single-precision floating-point register value to
+///    be stored.
 static __inline__ void __attribute__((__always_inline__, __nodebug__))
 _mm_stream_ss(float *__p, __m128 __a)
 {
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to