diff --git a/Intrinsics_Reference/ch_biendian.xml b/Intrinsics_Reference/ch_biendian.xml index ac088a9..dd368fc 100644 --- a/Intrinsics_Reference/ch_biendian.xml +++ b/Intrinsics_Reference/ch_biendian.xml @@ -188,7 +188,8 @@ vector unsigned __int128 x = { (((unsigned __int128)0x1020304050607080) << One vector type may be cast to another vector type without restriction. Such a cast is simply a reinterpretation of the - bits, and does not change the data. + bits, and does not change the data. There are no default + conversions for vector types. Compilers are expected to recognize and optimize multiple @@ -495,12 +496,14 @@ register vector double vd = vec_splats(*double_ptr); valid for pointers to vector types. - The traditional C/C++ operators are defined on vector types - for unary and binary +, - unary and binary –, binary *, binary - %, and binary / as well as the unary - and binary shift, logical and comparison operators, and the - ternary ?: operator. These operators perform their + The traditional C/C++ unary operators (+ + -, and ~), are defined on vector types. + The traditional C/C++ binary operators (+, + -, *, %, /, + shift, logical, and comparison) and the ternary operator + (?:) + are defined on like vector types. + Other than ?:, these operators perform their operations "elementwise" on the base elements of the operands, as follows. @@ -533,6 +536,27 @@ a = a + b; vector signed int a, b; a = vec_add (a, b); + + For the ternary operator (?:), the first operand must + be an integral type, used to select between the second and third + operands which must be of the same vector type. + The result of the ternary operator will also have that type. + For example, + +int test_value; +vector signed int a, b, r; +r = test_value ? a : b; + + produces the same result as + +int test_value; +vector signed int a, b, r; +if (test_value) + r = a; +else + r = b; + + Further, the array reference operator may be applied to vector data types, yielding an l-value corresponding to the specified