From 08cf96df0ea3a5b8e3d60942c7ed61370900f9b6 Mon Sep 17 00:00:00 2001 From: Elena Zannoni Date: Tue, 15 Jan 2002 19:38:19 +0000 Subject: [PATCH] 2002-01-15 Elena Zannoni [Based on work by Jim Blandy] * gdbtypes.h (builtin_type_v16qi, builtin_type_v8hi): Export. (builtin_type_vec128): Export. * gdbtypes.c (builtin_type_v16qi, builtin_type_v8hi): New SIMD types. (builtin_type_vec128): New builtin type for 128 bit vector registers. (build_gdbtypes): Initialize builtin_type_v16qi and builtin_type_v8hi. Create the vec128 register builtin type structure. (build_builtin_type_vec128): New function. (_initialize_gdbtypes): Register builtin_type_v16qi and builtin_type_v8hi with gdbarch. Same for builtin_type_vec128. * rs6000-tdep.c (rs6000_register_virtual_type): Change type of AltiVec register to new builtin type. --- gdb/ChangeLog | 18 +++++++++++++++ gdb/gdbtypes.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++ gdb/gdbtypes.h | 5 ++++ gdb/rs6000-tdep.c | 2 +- 4 files changed, 82 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5347d1f50a5..6d05ed1b23d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,21 @@ +2002-01-15 Elena Zannoni + + [Based on work by Jim Blandy] + * gdbtypes.h (builtin_type_v16qi, builtin_type_v8hi): Export. + (builtin_type_vec128): Export. + * gdbtypes.c (builtin_type_v16qi, builtin_type_v8hi): New SIMD + types. + (builtin_type_vec128): New builtin type for 128 bit vector + registers. + (build_gdbtypes): Initialize builtin_type_v16qi and + builtin_type_v8hi. Create the vec128 register builtin type + structure. + (build_builtin_type_vec128): New function. + (_initialize_gdbtypes): Register builtin_type_v16qi and + builtin_type_v8hi with gdbarch. Same for builtin_type_vec128. + * rs6000-tdep.c (rs6000_register_virtual_type): Change type of + AltiVec register to new builtin type. + 2001-01-15 Daniel Jacobowitz * stabsread.c (read_type): Pass dbx_lookup_type (typenums) diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 1204a0c3abb..a0a61515808 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -73,9 +73,12 @@ struct type *builtin_type_uint128; struct type *builtin_type_bool; struct type *builtin_type_v4sf; struct type *builtin_type_v4si; +struct type *builtin_type_v16qi; struct type *builtin_type_v8qi; +struct type *builtin_type_v8hi; struct type *builtin_type_v4hi; struct type *builtin_type_v2si; +struct type *builtin_type_vec128; struct type *builtin_type_ieee_single_big; struct type *builtin_type_ieee_single_little; struct type *builtin_type_ieee_double_big; @@ -785,6 +788,50 @@ init_simd_type (char *name, return t; } +static struct type * +build_builtin_type_vec128 (void) +{ + /* Construct a type for the 128 bit registers. The type we're + building is this: */ +#if 0 + union __gdb_builtin_type_vec128 + { + struct __builtin_v16qi v16qi; + struct __builtin_v8hi v8hi; + struct __builtin_v4si v4si; + struct __builtin_v4sf v4sf; + uint128_t uint128; + }; +#endif + + struct type *t; + struct field *f; + + f = (struct field *) xcalloc (5, sizeof (*f)); + + FIELD_TYPE (f[0]) = builtin_type_int128; + FIELD_NAME (f[0]) = "uint128"; + + FIELD_TYPE (f[1]) = builtin_type_v4sf; + FIELD_NAME (f[1]) = "v4sf"; + + FIELD_TYPE (f[2]) = builtin_type_v4si; + FIELD_NAME (f[2]) = "v4si"; + + FIELD_TYPE (f[3]) = builtin_type_v8hi; + FIELD_NAME (f[3]) = "v8hi"; + + FIELD_TYPE (f[4]) = builtin_type_v16qi; + FIELD_NAME (f[4]) = "v16qi"; + + /* Build a union type with those fields. */ + t = init_type (TYPE_CODE_UNION, 16, 0, 0, 0); + TYPE_NFIELDS (t) = 5; + TYPE_FIELDS (t) = f; + TYPE_TAG_NAME (t) = "__gdb_builtin_type_vec128"; + + return t; +} /* Smash TYPE to be a type of members of DOMAIN with type TO_TYPE. A MEMBER is a wierd thing -- it amounts to a typed offset into @@ -3163,13 +3210,21 @@ build_gdbtypes (void) = init_simd_type ("__builtin_v4sf", builtin_type_float, "f", 4); builtin_type_v4si = init_simd_type ("__builtin_v4si", builtin_type_int32, "f", 4); + builtin_type_v16qi + = init_simd_type ("__builtin_v16qi", builtin_type_int8, "f", 16); builtin_type_v8qi = init_simd_type ("__builtin_v8qi", builtin_type_int8, "f", 8); + builtin_type_v8hi + = init_simd_type ("__builtin_v8hi", builtin_type_int16, "f", 8); builtin_type_v4hi = init_simd_type ("__builtin_v4hi", builtin_type_int16, "f", 4); builtin_type_v2si = init_simd_type ("__builtin_v2si", builtin_type_int32, "f", 2); + /* Vector types. */ + builtin_type_vec128 + = build_builtin_type_vec128 (); + /* Pointer/Address types. */ /* NOTE: on some targets, addresses and pointers are not necessarily @@ -3252,9 +3307,12 @@ _initialize_gdbtypes (void) register_gdbarch_swap (&builtin_type_uint128, sizeof (struct type *), NULL); register_gdbarch_swap (&builtin_type_v4sf, sizeof (struct type *), NULL); register_gdbarch_swap (&builtin_type_v4si, sizeof (struct type *), NULL); + register_gdbarch_swap (&builtin_type_v16qi, sizeof (struct type *), NULL); register_gdbarch_swap (&builtin_type_v8qi, sizeof (struct type *), NULL); + register_gdbarch_swap (&builtin_type_v8hi, sizeof (struct type *), NULL); register_gdbarch_swap (&builtin_type_v4hi, sizeof (struct type *), NULL); register_gdbarch_swap (&builtin_type_v2si, sizeof (struct type *), NULL); + register_gdbarch_swap (&builtin_type_vec128, sizeof (struct type *), NULL); REGISTER_GDBARCH_SWAP (builtin_type_void_data_ptr); REGISTER_GDBARCH_SWAP (builtin_type_void_func_ptr); REGISTER_GDBARCH_SWAP (builtin_type_CORE_ADDR); diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 25676457cb3..8ceed9d7940 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -946,10 +946,15 @@ extern struct type *builtin_type_uint128; /* SIMD types. We inherit these names from GCC. */ extern struct type *builtin_type_v4sf; extern struct type *builtin_type_v4si; +extern struct type *builtin_type_v16qi; extern struct type *builtin_type_v8qi; +extern struct type *builtin_type_v8hi; extern struct type *builtin_type_v4hi; extern struct type *builtin_type_v2si; +/* Type for 128 bit vectors. */ +extern struct type *builtin_type_vec128; + /* Explicit floating-point formats. See "floatformat.h". */ extern struct type *builtin_type_ieee_single_big; extern struct type *builtin_type_ieee_single_little; diff --git a/gdb/rs6000-tdep.c b/gdb/rs6000-tdep.c index 147524d1aac..29180c3606f 100644 --- a/gdb/rs6000-tdep.c +++ b/gdb/rs6000-tdep.c @@ -1550,7 +1550,7 @@ rs6000_register_virtual_type (int n) return builtin_type_int64; break; case 16: - return builtin_type_int128; + return builtin_type_vec128; break; default: return builtin_type_int32; -- 2.30.2