* opencl-lang.c (STRUCT_OCL_TYPE): Remove.

(struct builtin_opencl_type): Remove.
	(builtin_opencl_type): Change return type to "struct type **".
	(lookup_opencl_vector_type): Update caller.
	(opencl_language_arch_info): Copy primitive type vector from gdbarch.
	(build_opencl_types): Install plain array of "struct type *"
	instead of "struct builtin_opencl_type".
This commit is contained in:
Ulrich Weigand
2011-02-21 15:53:10 +00:00
parent e3039479e4
commit c9def01dfc
2 changed files with 61 additions and 133 deletions

View File

@@ -1,3 +1,13 @@
2011-02-21 Ulrich Weigand <uweigand@de.ibm.com>
* opencl-lang.c (STRUCT_OCL_TYPE): Remove.
(struct builtin_opencl_type): Remove.
(builtin_opencl_type): Change return type to "struct type **".
(lookup_opencl_vector_type): Update caller.
(opencl_language_arch_info): Copy primitive type vector from gdbarch.
(build_opencl_types): Install plain array of "struct type *"
instead of "struct builtin_opencl_type".
2011-02-21 Matthew Gretton-Dann <matthew.gretton-dann@arm.com> 2011-02-21 Matthew Gretton-Dann <matthew.gretton-dann@arm.com>
Ulrich Weigand <uweigand@de.ibm.com> Ulrich Weigand <uweigand@de.ibm.com>

View File

@@ -66,44 +66,9 @@ enum opencl_primitive_types {
nr_opencl_primitive_types nr_opencl_primitive_types
}; };
/* This macro generates the type struct declarations from a given type. */
#define STRUCT_OCL_TYPE(TYPE)\
struct type *builtin_##TYPE;\
struct type *builtin_##TYPE##2;\
struct type *builtin_##TYPE##3;\
struct type *builtin_##TYPE##4;\
struct type *builtin_##TYPE##8;\
struct type *builtin_##TYPE##16
struct builtin_opencl_type
{
STRUCT_OCL_TYPE (char);
STRUCT_OCL_TYPE (uchar);
STRUCT_OCL_TYPE (short);
STRUCT_OCL_TYPE (ushort);
STRUCT_OCL_TYPE (int);
STRUCT_OCL_TYPE (uint);
STRUCT_OCL_TYPE (long);
STRUCT_OCL_TYPE (ulong);
STRUCT_OCL_TYPE (half);
STRUCT_OCL_TYPE (float);
STRUCT_OCL_TYPE (double);
struct type *builtin_bool;
struct type *builtin_unsigned_char;
struct type *builtin_unsigned_short;
struct type *builtin_unsigned_int;
struct type *builtin_unsigned_long;
struct type *builtin_size_t;
struct type *builtin_ptrdiff_t;
struct type *builtin_intptr_t;
struct type *builtin_uintptr_t;
struct type *builtin_void;
};
static struct gdbarch_data *opencl_type_data; static struct gdbarch_data *opencl_type_data;
const struct builtin_opencl_type * struct type **
builtin_opencl_type (struct gdbarch *gdbarch) builtin_opencl_type (struct gdbarch *gdbarch)
{ {
return gdbarch_data (gdbarch, opencl_type_data); return gdbarch_data (gdbarch, opencl_type_data);
@@ -121,7 +86,7 @@ lookup_opencl_vector_type (struct gdbarch *gdbarch, enum type_code code,
int i; int i;
unsigned int length; unsigned int length;
struct type *type = NULL; struct type *type = NULL;
struct type **types = (struct type **) builtin_opencl_type (gdbarch); struct type **types = builtin_opencl_type (gdbarch);
/* Check if n describes a valid OpenCL vector size (2, 3, 4, 8, 16). */ /* Check if n describes a valid OpenCL vector size (2, 3, 4, 8, 16). */
if (n != 2 && n != 3 && n != 4 && n != 8 && n != 16) if (n != 2 && n != 3 && n != 4 && n != 8 && n != 16)
@@ -997,67 +962,19 @@ Cannot perform conditional operation on vectors with different sizes"));
void void
opencl_language_arch_info (struct gdbarch *gdbarch, opencl_language_arch_info (struct gdbarch *gdbarch,
struct language_arch_info *lai) struct language_arch_info *lai)
{ {
const struct builtin_opencl_type *builtin = builtin_opencl_type (gdbarch); struct type **types = builtin_opencl_type (gdbarch);
lai->string_char_type = builtin->builtin_char; /* Copy primitive types vector from gdbarch. */
lai->primitive_type_vector lai->primitive_type_vector = types;
= GDBARCH_OBSTACK_CALLOC (gdbarch, nr_opencl_primitive_types + 1,
struct type *);
/* This macro fills the primitive_type_vector from a given type. */ /* Type of elements of strings. */
#define FILL_TYPE_VECTOR(LAI, TYPE)\ lai->string_char_type = types [opencl_primitive_type_char];
LAI->primitive_type_vector [opencl_primitive_type_##TYPE]\
= builtin->builtin_##TYPE;\
LAI->primitive_type_vector [opencl_primitive_type_##TYPE##2]\
= builtin->builtin_##TYPE##2;\
LAI->primitive_type_vector [opencl_primitive_type_##TYPE##3]\
= builtin->builtin_##TYPE##3;\
LAI->primitive_type_vector [opencl_primitive_type_##TYPE##4]\
= builtin->builtin_##TYPE##4;\
LAI->primitive_type_vector [opencl_primitive_type_##TYPE##8]\
= builtin->builtin_##TYPE##8;\
LAI->primitive_type_vector [opencl_primitive_type_##TYPE##16]\
= builtin->builtin_##TYPE##16
FILL_TYPE_VECTOR (lai, char);
FILL_TYPE_VECTOR (lai, uchar);
FILL_TYPE_VECTOR (lai, short);
FILL_TYPE_VECTOR (lai, ushort);
FILL_TYPE_VECTOR (lai, int);
FILL_TYPE_VECTOR (lai, uint);
FILL_TYPE_VECTOR (lai, long);
FILL_TYPE_VECTOR (lai, ulong);
FILL_TYPE_VECTOR (lai, half);
FILL_TYPE_VECTOR (lai, float);
FILL_TYPE_VECTOR (lai, double);
lai->primitive_type_vector [opencl_primitive_type_bool]
= builtin->builtin_bool;
lai->primitive_type_vector [opencl_primitive_type_unsigned_char]
= builtin->builtin_unsigned_char;
lai->primitive_type_vector [opencl_primitive_type_unsigned_short]
= builtin->builtin_unsigned_short;
lai->primitive_type_vector [opencl_primitive_type_unsigned_int]
= builtin->builtin_unsigned_int;
lai->primitive_type_vector [opencl_primitive_type_unsigned_long]
= builtin->builtin_unsigned_long;
lai->primitive_type_vector [opencl_primitive_type_half]
= builtin->builtin_half;
lai->primitive_type_vector [opencl_primitive_type_size_t]
= builtin->builtin_size_t;
lai->primitive_type_vector [opencl_primitive_type_ptrdiff_t]
= builtin->builtin_ptrdiff_t;
lai->primitive_type_vector [opencl_primitive_type_intptr_t]
= builtin->builtin_intptr_t;
lai->primitive_type_vector [opencl_primitive_type_uintptr_t]
= builtin->builtin_uintptr_t;
lai->primitive_type_vector [opencl_primitive_type_void]
= builtin->builtin_void;
/* Specifies the return type of logical and relational operations. */ /* Specifies the return type of logical and relational operations. */
lai->bool_type_symbol = "int"; lai->bool_type_symbol = "int";
lai->bool_type_default = builtin->builtin_int; lai->bool_type_default = types [opencl_primitive_type_int];
} }
const struct exp_descriptor exp_descriptor_opencl = const struct exp_descriptor exp_descriptor_opencl =
@@ -1112,87 +1029,88 @@ const struct language_defn opencl_language_defn =
static void * static void *
build_opencl_types (struct gdbarch *gdbarch) build_opencl_types (struct gdbarch *gdbarch)
{ {
struct builtin_opencl_type *builtin_opencl_type struct type **types
= GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_opencl_type); = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_opencl_primitive_types + 1,
struct type *);
/* Helper macro to create strings. */ /* Helper macro to create strings. */
#define OCL_STRING(S) #S #define OCL_STRING(S) #S
/* This macro allocates and assigns the type struct pointers /* This macro allocates and assigns the type struct pointers
for the vector types. */ for the vector types. */
#define BUILD_OCL_VTYPES(TYPE)\ #define BUILD_OCL_VTYPES(TYPE)\
builtin_opencl_type->builtin_##TYPE##2\ types[opencl_primitive_type_##TYPE##2] \
= init_vector_type (builtin_opencl_type->builtin_##TYPE, 2);\ = init_vector_type (types[opencl_primitive_type_##TYPE], 2); \
TYPE_NAME (builtin_opencl_type->builtin_##TYPE##2) = OCL_STRING(TYPE ## 2);\ TYPE_NAME (types[opencl_primitive_type_##TYPE##2]) = OCL_STRING(TYPE ## 2); \
builtin_opencl_type->builtin_##TYPE##3\ types[opencl_primitive_type_##TYPE##3] \
= init_vector_type (builtin_opencl_type->builtin_##TYPE, 3);\ = init_vector_type (types[opencl_primitive_type_##TYPE], 3); \
TYPE_NAME (builtin_opencl_type->builtin_##TYPE##3) = OCL_STRING(TYPE ## 3);\ TYPE_NAME (types[opencl_primitive_type_##TYPE##3]) = OCL_STRING(TYPE ## 3); \
TYPE_LENGTH (builtin_opencl_type->builtin_##TYPE##3)\ TYPE_LENGTH (types[opencl_primitive_type_##TYPE##3]) \
= 4 * TYPE_LENGTH (builtin_opencl_type->builtin_##TYPE);\ = 4 * TYPE_LENGTH (types[opencl_primitive_type_##TYPE]); \
builtin_opencl_type->builtin_##TYPE##4\ types[opencl_primitive_type_##TYPE##4] \
= init_vector_type (builtin_opencl_type->builtin_##TYPE, 4);\ = init_vector_type (types[opencl_primitive_type_##TYPE], 4); \
TYPE_NAME (builtin_opencl_type->builtin_##TYPE##4) = OCL_STRING(TYPE ## 4);\ TYPE_NAME (types[opencl_primitive_type_##TYPE##4]) = OCL_STRING(TYPE ## 4); \
builtin_opencl_type->builtin_##TYPE##8\ types[opencl_primitive_type_##TYPE##8] \
= init_vector_type (builtin_opencl_type->builtin_##TYPE, 8);\ = init_vector_type (types[opencl_primitive_type_##TYPE], 8); \
TYPE_NAME (builtin_opencl_type->builtin_##TYPE##8) = OCL_STRING(TYPE ## 8);\ TYPE_NAME (types[opencl_primitive_type_##TYPE##8]) = OCL_STRING(TYPE ## 8); \
builtin_opencl_type->builtin_##TYPE##16\ types[opencl_primitive_type_##TYPE##16] \
= init_vector_type (builtin_opencl_type->builtin_##TYPE, 16);\ = init_vector_type (types[opencl_primitive_type_##TYPE], 16); \
TYPE_NAME (builtin_opencl_type->builtin_##TYPE##16) = OCL_STRING(TYPE ## 16) TYPE_NAME (types[opencl_primitive_type_##TYPE##16]) = OCL_STRING(TYPE ## 16)
builtin_opencl_type->builtin_char types[opencl_primitive_type_char]
= arch_integer_type (gdbarch, 8, 0, "char"); = arch_integer_type (gdbarch, 8, 0, "char");
BUILD_OCL_VTYPES (char); BUILD_OCL_VTYPES (char);
builtin_opencl_type->builtin_uchar types[opencl_primitive_type_uchar]
= arch_integer_type (gdbarch, 8, 1, "uchar"); = arch_integer_type (gdbarch, 8, 1, "uchar");
BUILD_OCL_VTYPES (uchar); BUILD_OCL_VTYPES (uchar);
builtin_opencl_type->builtin_short types[opencl_primitive_type_short]
= arch_integer_type (gdbarch, 16, 0, "short"); = arch_integer_type (gdbarch, 16, 0, "short");
BUILD_OCL_VTYPES (short); BUILD_OCL_VTYPES (short);
builtin_opencl_type->builtin_ushort types[opencl_primitive_type_ushort]
= arch_integer_type (gdbarch, 16, 1, "ushort"); = arch_integer_type (gdbarch, 16, 1, "ushort");
BUILD_OCL_VTYPES (ushort); BUILD_OCL_VTYPES (ushort);
builtin_opencl_type->builtin_int types[opencl_primitive_type_int]
= arch_integer_type (gdbarch, 32, 0, "int"); = arch_integer_type (gdbarch, 32, 0, "int");
BUILD_OCL_VTYPES (int); BUILD_OCL_VTYPES (int);
builtin_opencl_type->builtin_uint types[opencl_primitive_type_uint]
= arch_integer_type (gdbarch, 32, 1, "uint"); = arch_integer_type (gdbarch, 32, 1, "uint");
BUILD_OCL_VTYPES (uint); BUILD_OCL_VTYPES (uint);
builtin_opencl_type->builtin_long types[opencl_primitive_type_long]
= arch_integer_type (gdbarch, 64, 0, "long"); = arch_integer_type (gdbarch, 64, 0, "long");
BUILD_OCL_VTYPES (long); BUILD_OCL_VTYPES (long);
builtin_opencl_type->builtin_ulong types[opencl_primitive_type_ulong]
= arch_integer_type (gdbarch, 64, 1, "ulong"); = arch_integer_type (gdbarch, 64, 1, "ulong");
BUILD_OCL_VTYPES (ulong); BUILD_OCL_VTYPES (ulong);
builtin_opencl_type->builtin_half types[opencl_primitive_type_half]
= arch_float_type (gdbarch, 16, "half", floatformats_ieee_half); = arch_float_type (gdbarch, 16, "half", floatformats_ieee_half);
BUILD_OCL_VTYPES (half); BUILD_OCL_VTYPES (half);
builtin_opencl_type->builtin_float types[opencl_primitive_type_float]
= arch_float_type (gdbarch, 32, "float", floatformats_ieee_single); = arch_float_type (gdbarch, 32, "float", floatformats_ieee_single);
BUILD_OCL_VTYPES (float); BUILD_OCL_VTYPES (float);
builtin_opencl_type->builtin_double types[opencl_primitive_type_double]
= arch_float_type (gdbarch, 64, "double", floatformats_ieee_double); = arch_float_type (gdbarch, 64, "double", floatformats_ieee_double);
BUILD_OCL_VTYPES (double); BUILD_OCL_VTYPES (double);
builtin_opencl_type->builtin_bool types[opencl_primitive_type_bool]
= arch_boolean_type (gdbarch, 8, 1, "bool"); = arch_boolean_type (gdbarch, 8, 1, "bool");
builtin_opencl_type->builtin_unsigned_char types[opencl_primitive_type_unsigned_char]
= arch_integer_type (gdbarch, 8, 1, "unsigned char"); = arch_integer_type (gdbarch, 8, 1, "unsigned char");
builtin_opencl_type->builtin_unsigned_short types[opencl_primitive_type_unsigned_short]
= arch_integer_type (gdbarch, 16, 1, "unsigned short"); = arch_integer_type (gdbarch, 16, 1, "unsigned short");
builtin_opencl_type->builtin_unsigned_int types[opencl_primitive_type_unsigned_int]
= arch_integer_type (gdbarch, 32, 1, "unsigned int"); = arch_integer_type (gdbarch, 32, 1, "unsigned int");
builtin_opencl_type->builtin_unsigned_long types[opencl_primitive_type_unsigned_long]
= arch_integer_type (gdbarch, 64, 1, "unsigned long"); = arch_integer_type (gdbarch, 64, 1, "unsigned long");
builtin_opencl_type->builtin_size_t types[opencl_primitive_type_size_t]
= arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 1, "size_t"); = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 1, "size_t");
builtin_opencl_type->builtin_ptrdiff_t types[opencl_primitive_type_ptrdiff_t]
= arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 0, "ptrdiff_t"); = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 0, "ptrdiff_t");
builtin_opencl_type->builtin_intptr_t types[opencl_primitive_type_intptr_t]
= arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 0, "intptr_t"); = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 0, "intptr_t");
builtin_opencl_type->builtin_uintptr_t types[opencl_primitive_type_uintptr_t]
= arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 1, "uintptr_t"); = arch_integer_type (gdbarch, gdbarch_ptr_bit (gdbarch), 1, "uintptr_t");
builtin_opencl_type->builtin_void types[opencl_primitive_type_void]
= arch_type (gdbarch, TYPE_CODE_VOID, 1, "void"); = arch_type (gdbarch, TYPE_CODE_VOID, 1, "void");
return builtin_opencl_type; return types;
} }
void void