cl_intervals.h 3.32 KB
/*
+ * cl_intervals.h
 *
 *  Created on: 27/07/2016
 *      Author: pedro
 */

#if CL_D_TYPE == CL_INTERVAL

#ifndef SRC_KERNELS_CL_INTERVALS_H_
#define SRC_KERNELS_CL_INTERVALS_H_

#ifndef __OPENCL_VERSION__
#include "../utils/cl_syntax.h"
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(__CYGWIN__)
#include <stduint.h>
#endif
#endif

#include "../config.h"

// An interval is empty if second value is smaller than the first value

/*
 * Number of values that compose the domain of the received variable (s1-s0+1)
 * v - variable to get values in domain
 */
#define V_N_VALS(v) (((v).prop_d).s1 - ((v).prop_d).s0 + 1)

/*
 * Does nothing when using intervals
 * v - variable to decrement the number of values
 */
#define V_DEC_N_VALS(v)

/*
 * Return 1 if variable is empty and 0 if not
 * v - variable to check if empty
 */
#define V_IS_EMPTY(v) (((v).prop_d).s0 > ((v).prop_d).s1)

/*
 * Minimum value of the variable (v->prop_d.s0)
 * v - variable to get maximum value from
 */
#define V_MIN(v) (((v).prop_d).s0)

/*
 * Maximum value of the variable (from v->prop_d.s1)
 * v - variable to get maximum value from
 */
#define V_MAX(v) (((v).prop_d).s1)

#define NOTHING

#define SUFFIX _n
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 CL_MEMORY
#define M2 CL_MEMORY
#define SUFFIX _m
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 __global
#define M2 __global
#define SUFFIX _g
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M2 CL_MEMORY
#define SUFFIX _pm
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 CL_MEMORY
#define SUFFIX _mp
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 __global
#define M2 CL_MEMORY
#define SUFFIX _gm
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 CL_MEMORY
#define M2 __global
#define SUFFIX _mg
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 __global
#define M2 __constant
#define SUFFIX _gc
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 __global
#define SUFFIX _gp
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M3 __constant
#define SUFFIX _c
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M3 CL_VS_MEM
#define SUFFIX _vs
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 __global
#define M2 CL_VS_MEM
#define SUFFIX _gvs
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M1 CL_MEMORY
#define M2 CL_VS_MEM
#define SUFFIX _mvs
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M3 CL_MEMORY
#define M4 __global
#define SUFFIX _m3
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M2 __global
#define SUFFIX _pg
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#define M3 CL_VS_MEM
#define M4 __global
#define SUFFIX _vsg
#include "cl_intervals_src.h"
#undef M1
#undef M2
#undef M3
#undef M4
#undef SUFFIX

#endif /* SRC_KERNELS_CL_INTERVALS_H_ */

#endif