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