1 /* 2 3 Copyright (C) 2014, The University of Texas at Austin 4 5 This file is part of libflame and is available under the 3-Clause 6 BSD license, which can be found in the LICENSE file at the top-level 7 directory, or at http://opensource.org/licenses/BSD-3-Clause 8 9 */ 10 11 #include "FLA_type_defs.h" 12 13 // --- Pointer-accessing FLAME macro definitions ------------------------------------ 14 15 #define FLA_CONSTANT_I_OFFSET 0 16 #define FLA_CONSTANT_S_OFFSET ( sizeof(double) ) 17 #define FLA_CONSTANT_D_OFFSET ( sizeof(double) + sizeof(double) ) 18 #define FLA_CONSTANT_C_OFFSET ( sizeof(double) + sizeof(double) + sizeof(double) ) 19 #define FLA_CONSTANT_Z_OFFSET ( sizeof(double) + sizeof(double) + sizeof(double) + sizeof( scomplex ) ) 20 #define FLA_CONSTANT_SIZE ( sizeof(double) + sizeof(double) + sizeof(double) + sizeof( scomplex ) + sizeof( dcomplex ) ) 21 22 #define FLA_INT_PTR( x ) \ 23 ( ((x).base)->datatype == FLA_CONSTANT ? \ 24 ( ( int * ) ( ( ( char * ) ((x).base)->buffer ) + FLA_CONSTANT_I_OFFSET ) ) : \ 25 ( ( ( int * ) ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \ 26 ( size_t ) (x).offm * ((x).base)->rs ) ) 27 28 #define FLA_FLOAT_PTR( x ) \ 29 ( ((x).base)->datatype == FLA_CONSTANT ? \ 30 ( ( float * ) ( ( ( char * ) ((x).base)->buffer ) + FLA_CONSTANT_S_OFFSET ) ) : \ 31 ( ( ( float * ) ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \ 32 ( size_t ) (x).offm * ((x).base)->rs ) ) 33 34 #define FLA_DOUBLE_PTR( x ) \ 35 ( ((x).base)->datatype == FLA_CONSTANT ? \ 36 ( ( double * ) ( ( ( char * ) ((x).base)->buffer ) + FLA_CONSTANT_D_OFFSET ) ) : \ 37 ( ( ( double * ) ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \ 38 ( size_t ) (x).offm * ((x).base)->rs ) ) 39 40 #define FLA_COMPLEX_PTR( x ) \ 41 ( ((x).base)->datatype == FLA_CONSTANT ? \ 42 ( ( scomplex * ) ( ( ( char * ) ((x).base)->buffer ) + FLA_CONSTANT_C_OFFSET ) ) : \ 43 ( ( ( scomplex * ) ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \ 44 ( size_t ) (x).offm * ((x).base)->rs ) ) 45 46 #define FLA_DOUBLE_COMPLEX_PTR( x ) \ 47 ( ((x).base)->datatype == FLA_CONSTANT ? \ 48 ( ( dcomplex * ) ( ( ( char * ) ((x).base)->buffer ) + FLA_CONSTANT_Z_OFFSET ) ) : \ 49 ( ( ( dcomplex * ) ((x).base)->buffer ) + ( size_t ) (x).offn * ((x).base)->cs + \ 50 ( size_t ) (x).offm * ((x).base)->rs ) ) 51 52