From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28730 invoked by alias); 19 Apr 2002 22:51:44 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 28642 invoked from network); 19 Apr 2002 22:51:41 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 19 Apr 2002 22:51:41 -0000 Received: from localhost.redhat.com (remus.sfbay.redhat.com [172.16.27.252]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id PAA23940 for ; Fri, 19 Apr 2002 15:51:40 -0700 (PDT) Received: by localhost.redhat.com (Postfix, from userid 469) id DECA011435; Fri, 19 Apr 2002 18:51:16 -0400 (EDT) From: Elena Zannoni MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <15552.40803.992918.193570@localhost.redhat.com> Date: Fri, 19 Apr 2002 15:51:00 -0000 To: gdb-patches@sources.redhat.com Subject: [RFA] gdbtypes.c: rewrite init_simd_type X-SW-Source: 2002-04/txt/msg00642.txt.bz2 I rewrote init_simd_type to use the new functions that Andrew introduced about a month ago in http://sources.redhat.com/ml/gdb-patches/2002-03/msg00267.html. I also rewrote the way the altivec vectors are built. And fixed a wrong calculation of the size of the composite type. Tested on powerpc w/altivec support and on Linux/i386. Elena 2002-04-19 Elena Zannoni * gdbtypes.c (init_simd_type): Rewrite using new functions. (build_builtin_type_vec128): Ditto. (append_composite_type_field): Fix calculation of type length in union case. Index: gdbtypes.c =================================================================== RCS file: /cvs/uberbaum/gdb/gdbtypes.c,v retrieving revision 1.42 diff -u -p -r1.42 gdbtypes.c --- gdbtypes.c 23 Mar 2002 01:24:54 -0000 1.42 +++ gdbtypes.c 19 Apr 2002 22:48:14 -0000 @@ -777,7 +777,6 @@ create_set_type (struct type *result_typ return (result_type); } - /* Construct and return a type of the form: struct NAME { ELT_TYPE ELT_NAME[N]; } We use these types for SIMD registers. For example, the type of @@ -793,25 +792,15 @@ init_simd_type (char *name, char *elt_name, int n) { - struct type *t; - struct field *f; - - /* Build the field structure. */ - f = xmalloc (sizeof (*f)); - memset (f, 0, sizeof (*f)); - f->loc.bitpos = 0; - f->type = create_array_type (0, elt_type, - create_range_type (0, builtin_type_int, - 0, n-1)); - f->name = elt_name; - - /* Build a struct type with that field. */ - t = init_type (TYPE_CODE_STRUCT, n * TYPE_LENGTH (elt_type), 0, 0, 0); - t->nfields = 1; - t->fields = f; - TYPE_TAG_NAME (t) = name; - - return t; + struct type *simd_type; + struct type *array_type; + + simd_type = init_composite_type (name, TYPE_CODE_STRUCT); + array_type = create_array_type (0, elt_type, + create_range_type (0, builtin_type_int, + 0, n-1)); + append_composite_type_field (simd_type, elt_name, array_type); + return simd_type; } static struct type * @@ -831,30 +820,13 @@ build_builtin_type_vec128 (void) #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"; + t = init_composite_type ("__gdb_builtin_type_vec128", TYPE_CODE_UNION); + append_composite_type_field (t, "uint128", builtin_type_int128); + append_composite_type_field (t, "v4sf", builtin_type_v4sf); + append_composite_type_field (t, "v4si", builtin_type_v4si); + append_composite_type_field (t, "v8hi", builtin_type_v8hi); + append_composite_type_field (t, "v16qi", builtin_type_v16qi); return t; } @@ -1781,7 +1753,7 @@ append_composite_type_field (struct type FIELD_NAME (f[0]) = name; if (TYPE_CODE (t) == TYPE_CODE_UNION) { - if (TYPE_LENGTH (t) > TYPE_LENGTH (field)) + if (TYPE_LENGTH (t) < TYPE_LENGTH (field)) TYPE_LENGTH (t) = TYPE_LENGTH (field); } else if (TYPE_CODE (t) == TYPE_CODE_STRUCT)