diff --git a/Intrinsics_Reference/ch_biendian.xml b/Intrinsics_Reference/ch_biendian.xml index 24597e6..bbefa87 100644 --- a/Intrinsics_Reference/ch_biendian.xml +++ b/Intrinsics_Reference/ch_biendian.xml @@ -66,6 +66,13 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.biendian"> element order. + + + Much of the information in this chapter was formerly part of + Chapter 6 of the 64-Bit ELF V2 ABI Specification for POWER. + + +
Vector Data Types @@ -86,9 +93,9 @@ xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="VIPR.biendian"> Elements" should precede this one.] - For the Fortran language, [FIXME: link to table in later - section] gives a correspondence between Fortran and C/C++ - language types. + For the Fortran language, gives a correspondence + between Fortran and C/C++ language types. The assignment operator always performs a byte-by-byte data copy @@ -489,14 +496,6 @@ register vector double vd = vec_splats(*double_ptr); big-endian and little-endian vector layouts and vector element numberings. - - For internal consistency, in the ELF V2 ABI, the default vector - layout and vector element ordering in big-endian environments - shall be big endian, and the default vector layout and vector - element ordering in little-endian environments shall be little - endian. [FIXME: Here's a purported ABI requirement; should this - somehow remain part of the ABI document?] - This element numbering shall also be used by the [] accessor method to vector elements provided as an extension of @@ -725,9 +724,259 @@ register vector double vd = vec_splats(*double_ptr);
Language-Specific Vector Support for Other Languages - - filler - +
+ Fortran + + shows the + correspondence between the C/C++ types described in this + document and their Fortran equivalents. In Fortran, the + Boolean vector data types are represented by + VECTOR(UNSIGNED(n)). + + + Fortran Vector Data Types + + + + + + + + XL Fortran Vector Type + + + + + XL C/C++ Vector Type + + + + + + + + VECTOR(INTEGER(1)) + + + vector signed char + + + + + VECTOR(INTEGER(2)) + + + vector signed short + + + + + VECTOR(INTEGER(4)) + + + vector signed int + + + + + VECTOR(INTEGER(8)) + + + vector signed long long, vector signed long + The vector long types are deprecated due to their + ambiguity between 32-bit and 64-bit environments. The use + of the vector long long types is preferred. + + + + + + VECTOR(INTEGER(16)) + + + vector signed __int128 + + + + + VECTOR(UNSIGNED(1)) + + + vector unsigned char + + + + + VECTOR(UNSIGNED(2)) + + + vector unsigned short + + + + + VECTOR(UNSIGNED(4)) + + + vector unsigned int + + + + + VECTOR(UNSIGNED(8)) + + + vector unsigned long long, vector unsigned long + + + + + VECTOR(UNSIGNED(16)) + + + vector unsigned __int128 + + + + + VECTOR(REAL(4)) + + + vector float + + + + + VECTOR(REAL(8)) + + + vector double + + + + + VECTOR(PIXEL) + + + vector pixel + + + + +
+ + Because the Fortran language does not support pointers, vector + built-in functions that expect pointers to a base type take an + array element reference to indicate the address of a memory + location that is the subject of a memory access built-in + function. + + + Because the Fortran language does not support type casts, the + vec_convert and vec_concat built-in + functions shown in are + provided to perform bit-exact type conversions between vector + types. + + + Built-In Vector Conversion Functions + + + + + + + + Group + + + + + Description + + + + + + + + VEC_CONCAT (ARG1, ARG2)(Fortran) + + + + Purpose: + Concatenates two elements to form a vector. + Result value: + The resulting vector consists of the two scalar elements, + ARG1 and ARG2, assigned to elements 0 and 1 (using the + environment’s native endian numbering), respectively. + + + Note: This function corresponds to the C/C++ vector + constructor (vector type){a,b}. It is provided only for + languages without vector constructors. + + + + + + + + + + vector signed long long vec_concat (signed long long, + signed long long); + + + + + + + + vector unsigned long long vec_concat (unsigned long long, + unsigned long long); + + + + + + + + vector double vec_concat (double, double); + + + + + VEC_CONVERT(V, MOLD) + + + Purpose: + Converts a vector to a vector of a given type. + Class: + Pure function + Argument type and attributes: + + + V Must be an INTENT(IN) vector. + + + MOLD Must be an INTENT(IN) vector. If it is a + variable, it need not be defined. + + + Result type and attributes: + The result is a vector of the same type as MOLD. + Result value: + The result is as if it were on the left-hand side of an + intrinsic assignment with V on the right-hand side. + + + + +
+