From Jason Turner

[simd.traits]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpgmvzw2le/{from.md → to.md} +65 -0
tmp/tmpgmvzw2le/{from.md → to.md} RENAMED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Type traits <a id="simd.traits">[[simd.traits]]</a>
2
+
3
+ ``` cpp
4
+ template<class T, class U = typename T::value_type> struct alignment { see below };
5
+ ```
6
+
7
+ `alignment<T, U>` has a member `value` if and only if
8
+
9
+ - `T` is a specialization of `basic_mask` and `U` is `bool`, or
10
+ - `T` is a specialization of `basic_vec` and `U` is a vectorizable type.
11
+
12
+ If `value` is present, the type `alignment<T, U>` is a `BinaryTypeTrait`
13
+ with a base characteristic of `integral_constant<size_t, N>` for some
14
+ unspecified `N` [[simd.ctor]], [[simd.loadstore]].
15
+
16
+ [*Note 1*: `value` identifies the alignment restrictions on pointers
17
+ used for (converting) loads and stores for the given type `T` on arrays
18
+ of type `U`. — *end note*]
19
+
20
+ The behavior of a program that adds specializations for `alignment` is
21
+ undefined.
22
+
23
+ ``` cpp
24
+ template<class T, class V> struct rebind { using type = see below; };
25
+ ```
26
+
27
+ The member `type` is present if and only if
28
+
29
+ - `V` is a data-parallel type,
30
+ - `T` is a vectorizable type, and
31
+ - *`deduce-abi-t`*`<T, V::size()>` has a member type `type`.
32
+
33
+ If V is a specialization of `basic_vec`, let `Abi1` denote an ABI tag
34
+ such that `basic_vec<T, Abi1>::size()` equals `V::size()`. If V is a
35
+ specialization of `basic_mask`, let `Abi1` denote an ABI tag such that
36
+ `basic_mask<sizeof(T), Abi1>::size()` equals `V::size()`.
37
+
38
+ Where present, the member typedef `type` names `basic_vec<T, Abi1>` if V
39
+ is a specialization of `basic_vec` or `basic_mask<sizeof(T), Abi1>` if V
40
+ is a specialization of `basic_mask`.
41
+
42
+ ``` cpp
43
+ template<simd-size-type N, class V> struct resize { using type = see below; };
44
+ ```
45
+
46
+ Let `T` denote
47
+
48
+ - `typename V::value_type` if `V` is a specialization of `basic_vec`,
49
+ - otherwise *`integer-from`*`<`*`mask-element-size`*`<V>>` if `V` is a
50
+ specialization of `basic_mask`.
51
+
52
+ The member `type` is present if and only if
53
+
54
+ - `V` is a data-parallel type, and
55
+ - *`deduce-abi-t`*`<T, N>` has a member type `type`.
56
+
57
+ If V is a specialization of `basic_vec`, let `Abi1` denote an ABI tag
58
+ such that `basic_vec<T, Abi1>::size()` equals `N`. If V is a
59
+ specialization of `basic_mask`, let `Abi1` denote an ABI tag such that
60
+ `basic_mask<sizeof(T), Abi1>::size()` equals `N`.
61
+
62
+ Where present, the member typedef `type` names `basic_vec<T, Abi1>` if V
63
+ is a specialization of `basic_vec` or `basic_mask<sizeof(T), Abi1>` if V
64
+ is a specialization of `basic_mask`.
65
+