mclow.lists added a comment.

Getting really close.



================
Comment at: libcxx/include/experimental/simd:726
+#if defined(_LIBCPP_COMPILER_CLANG)
+#define _SPECIALIZE_VEC_EXT(_TYPE, _NUM_ELEMENT)                               
\
+  template <>                                                                  
\
----------------
timshen wrote:
> mclow.lists wrote:
> > When we define user-visible macros in libc++, we prepend them with _LIBCPP_ 
> > to avoid collisions.
> > Accordingly, `_SPECIALIZE_VEC_EXT` should be named 
> > `_LIBCPP_SPECIALIZE_VEC_EXT`
> > 
> Well _SPECIALIZE_VEC_EXT and _SPECIALIZE_VEC_EXT_32 are not user-visible, as 
> they are (1) '#undef'ed after all uses, and (2) they start with underscore, 
> so don't collide with existing user-defined macros.
I agree, but starting them with _LIBCPP means that people (like me) know that 
they come from libc++, and not (say) clang, or whatever C library we're sitting 
on top of.



================
Comment at: libcxx/include/experimental/simd:703
+public:
+  _Tp __get(size_t __index) const { return (&__storage_)[__index]; };
+  void __set(size_t __index, _Tp __val) { (&__storage_)[__index] = __val; }
----------------
Can these (`__get` and `__set`) be noexcept? Obviously, it depends on `_Tp`.


================
Comment at: libcxx/include/experimental/simd:811
+class __simd_reference {
+  static_assert(std::is_same<_Vp, _Tp>::value, "");
+
----------------
If `_Vp` and `_Tp` have to name the same type, why have two of them?
What is the difference, and when would you use each one internally?

    __simd_reference(__simd_storage<_Tp, _Abi>* __ptr, size_t __index);
vs.
    __simd_reference operator=(_Vp __value) &&;



https://reviews.llvm.org/D41376



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to