From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8256 invoked by alias); 2 Jun 2003 05:04:54 -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 8199 invoked from network); 2 Jun 2003 05:04:54 -0000 Received: from unknown (HELO are.twiddle.net) (64.81.246.98) by sources.redhat.com with SMTP; 2 Jun 2003 05:04:54 -0000 Received: from are.twiddle.net (localhost.localdomain [127.0.0.1]) by are.twiddle.net (8.12.8/8.12.8) with ESMTP id h5254rLH007468 for ; Sun, 1 Jun 2003 22:04:53 -0700 Received: (from rth@localhost) by are.twiddle.net (8.12.8/8.12.8/Submit) id h5254rog007466 for gdb-patches@sources.redhat.com; Sun, 1 Jun 2003 22:04:53 -0700 X-Authentication-Warning: are.twiddle.net: rth set sender to rth@twiddle.net using -f Date: Mon, 02 Jun 2003 05:04:00 -0000 From: Richard Henderson To: gdb-patches@sources.redhat.com Subject: [RFA] cleanup alpha convert_to_{raw,virtual} Message-ID: <20030602050453.GA7460@twiddle.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i X-SW-Source: 2003-06/txt/msg00055.txt.bz2 Ok? r~ * alpha-tdep.c (alpha_register_convert_to_virtual): Tidy use of deprecated interfaces; use ALPHA_REGISTER_SIZE instead of gdbarch macros where appropriate. (alpha_register_convert_to_raw): Similarly. Use unpack_long. (alpha_convert_flt_dbl, alpha_convert_dbl_flt): New. *** alpha-tdep.c.1 Sun Jun 1 21:40:43 2003 --- alpha-tdep.c Sun Jun 1 21:51:35 2003 *************** alpha_register_virtual_size (int regno) *** 160,183 **** registers is different. */ static void alpha_register_convert_to_virtual (int regnum, struct type *valtype, char *raw_buffer, char *virtual_buffer) { ! if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum)) { ! memcpy (virtual_buffer, raw_buffer, REGISTER_VIRTUAL_SIZE (regnum)); return; } if (TYPE_CODE (valtype) == TYPE_CODE_FLT) ! { ! double d = deprecated_extract_floating (raw_buffer, REGISTER_RAW_SIZE (regnum)); ! deprecated_store_floating (virtual_buffer, TYPE_LENGTH (valtype), d); ! } ! else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4) { ULONGEST l; ! l = extract_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum)); l = ((l >> 32) & 0xc0000000) | ((l >> 29) & 0x3fffffff); store_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype), l); } --- 160,196 ---- registers is different. */ static void + alpha_convert_flt_dbl (void *out, const void *in) + { + DOUBLEST d = extract_typed_floating (in, builtin_type_ieee_single_little); + store_typed_floating (out, builtin_type_ieee_double_little, d); + } + + static void + alpha_convert_dbl_flt (void *out, const void *in) + { + DOUBLEST d = extract_typed_floating (in, builtin_type_ieee_double_little); + store_typed_floating (out, builtin_type_ieee_single_little, d); + } + + static void alpha_register_convert_to_virtual (int regnum, struct type *valtype, char *raw_buffer, char *virtual_buffer) { ! if (TYPE_LENGTH (valtype) >= ALPHA_REGISTER_SIZE) { ! memcpy (virtual_buffer, raw_buffer, ALPHA_REGISTER_SIZE); return; } + /* Note that everything below is less than 8 bytes long. */ + if (TYPE_CODE (valtype) == TYPE_CODE_FLT) ! alpha_convert_dbl_flt (virtual_buffer, raw_buffer); ! else if (TYPE_CODE (valtype) == TYPE_CODE_INT) { ULONGEST l; ! l = extract_unsigned_integer (raw_buffer, ALPHA_REGISTER_SIZE); l = ((l >> 32) & 0xc0000000) | ((l >> 29) & 0x3fffffff); store_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype), l); } *************** static void *** 189,214 **** alpha_register_convert_to_raw (struct type *valtype, int regnum, char *virtual_buffer, char *raw_buffer) { ! if (TYPE_LENGTH (valtype) >= REGISTER_RAW_SIZE (regnum)) { ! memcpy (raw_buffer, virtual_buffer, REGISTER_RAW_SIZE (regnum)); return; } if (TYPE_CODE (valtype) == TYPE_CODE_FLT) { ! double d = deprecated_extract_floating (virtual_buffer, TYPE_LENGTH (valtype)); ! deprecated_store_floating (raw_buffer, REGISTER_RAW_SIZE (regnum), d); ! } ! else if (TYPE_CODE (valtype) == TYPE_CODE_INT && TYPE_LENGTH (valtype) <= 4) ! { ! ULONGEST l; ! if (TYPE_UNSIGNED (valtype)) ! l = extract_unsigned_integer (virtual_buffer, TYPE_LENGTH (valtype)); ! else ! l = extract_signed_integer (virtual_buffer, TYPE_LENGTH (valtype)); l = ((l & 0xc0000000) << 32) | ((l & 0x3fffffff) << 29); ! store_unsigned_integer (raw_buffer, REGISTER_RAW_SIZE (regnum), l); } else error ("Cannot store value in floating point register"); --- 202,222 ---- alpha_register_convert_to_raw (struct type *valtype, int regnum, char *virtual_buffer, char *raw_buffer) { ! if (TYPE_LENGTH (valtype) >= ALPHA_REGISTER_SIZE) { ! memcpy (raw_buffer, virtual_buffer, ALPHA_REGISTER_SIZE); return; } + /* Note that everything below is less than 8 bytes long. */ + if (TYPE_CODE (valtype) == TYPE_CODE_FLT) + alpha_convert_flt_dbl (raw_buffer, virtual_buffer); + else if (TYPE_CODE (valtype) == TYPE_CODE_INT) { ! ULONGEST l = unpack_long (valtype, virtual_buffer); l = ((l & 0xc0000000) << 32) | ((l & 0x3fffffff) << 29); ! store_unsigned_integer (raw_buffer, ALPHA_REGISTER_SIZE, l); } else error ("Cannot store value in floating point register");