From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 48039 invoked by alias); 12 May 2017 08:53:54 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 47991 invoked by uid 89); 12 May 2017 08:53:50 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.6 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=no version=3.3.2 spammy=Hx-languages-length:2787, alan X-HELO: mail-pg0-f66.google.com Received: from mail-pg0-f66.google.com (HELO mail-pg0-f66.google.com) (74.125.83.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 12 May 2017 08:53:49 +0000 Received: by mail-pg0-f66.google.com with SMTP id u187so6848940pgb.1 for ; Fri, 12 May 2017 01:53:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=5l2Sao8004uY8AFUaf6HsoirbrhRTDJiEsA9dFrPte0=; b=Xz0pSL04ntT6d8pnJsXZsWo2TpKad4Vx/1xaCDVh90g5kXmHF3XbxEbaaMMOWJ0Vsi rh0if9Z3NGA7sHphfuMrkjcPXOMX2yUMnNx2DR5CXfSsXY77WnS3lPzAUb5OlnJIWrh1 nuncLSeVVWP/RhahJiCS21X4TK33TrJZiVibrV1Ev6Fg3ADcedO3AHbHWwW+yip8E6ji Z18di+gYTXzZuOR003vd5oxqzveGTwtPnoKqmzEVxrRnoJ16kbsV98vXpNtamSrywRNf sZklVydcyL8QpHP9mhERTllQojgLYg/aItU8bqIRZlCBmmDk/zMPiF/GH8ZW2NO6s0o/ ff4Q== X-Gm-Message-State: AODbwcBKU6lIY+RRd3O4CuHia864jtrca55jxZfSYB5A84OwktHeWZx9 2Uoi88UL2sSeBQ== X-Received: by 10.99.53.207 with SMTP id c198mr3204016pga.182.1494579230713; Fri, 12 May 2017 01:53:50 -0700 (PDT) Received: from E107787-LIN (gcc1-power7.osuosl.org. [140.211.15.137]) by smtp.gmail.com with ESMTPSA id z5sm4438116pfd.76.2017.05.12.01.53.48 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Fri, 12 May 2017 01:53:50 -0700 (PDT) From: Yao Qi To: Alan Hayward Cc: "gdb-patches\@sourceware.org" , nd Subject: Re: [PATCH 3/11] Add MIPS_MAX_REGISTER_SIZE (2/4) References: <3C00280E-37C9-4C0A-9DA6-F3B9DB1A6E8F@arm.com> <86y3v7uf9j.fsf@gmail.com> <806B436F-EFA1-4200-AC54-9036D166C9B9@arm.com> Date: Fri, 12 May 2017 08:53:00 -0000 In-Reply-To: <806B436F-EFA1-4200-AC54-9036D166C9B9@arm.com> (Alan Hayward's message of "Fri, 5 May 2017 08:04:04 +0000") Message-ID: <867f1m8nhm.fsf@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2017-05/txt/msg00308.txt.bz2 Alan Hayward writes: > } > > +/* Supply register REGNUM, whose contents are stored in signed VAL, to > + REGCACHE. */ > + > +void > +regcache::raw_supply_signed (int regnum, LONGEST val) The unsigned version of this function is also needed, because I see such pattern also exists, store_unsigned_integer (buf, 8, byte_order, sp + offset); regcache_raw_supply (regcache, AMD64_RSP_REGNUM, buf); this leads me thinking we need to use function template to define functions for both LONGEST and ULONGEST. Secondly, this method can be named as raw_supply. > +{ > + enum bfd_endian byte_order =3D gdbarch_byte_order (m_descr->gdbarch); > + gdb_byte *regbuf; > + size_t size; > + > + gdb_assert (regnum >=3D 0 && regnum < m_descr->nr_raw_registers); > + gdb_assert (!m_readonly_p); > + > + regbuf =3D register_buffer (regnum); > + size =3D m_descr->sizeof_register[regnum]; > + > + store_signed_integer (regbuf, size, byte_order, val); > + m_register_status[regnum] =3D REG_VALID; > +} > + > /* Collect register REGNUM from REGCACHE and store its contents in BUF. = */ > > void > @@ -1251,6 +1271,23 @@ regcache::raw_collect (int regnum, void *buf) const > memcpy (buf, regbuf, size); > } > > +/* Collect register REGNUM from REGCACHE and extract its contents into a= signed This line is too long. > + LONGEST. */ > + > +LONGEST > +regcache::raw_collect_signed (int regnum) const We can define this method like this, template using LongType =3D typename std::enable_if<(std::is_same::value || std::is_same::value), T>::type; template LongType raw_collect (int regnum) const { .... if (std::is_signed::value) return extract_signed_integer (regbuf, size, byte_order); else return extract_unsigned_integer (regbuf, size, byte_order); } > +{ > + enum bfd_endian byte_order =3D gdbarch_byte_order (m_descr->gdbarch); > + const gdb_byte *regbuf; > + size_t size; > + > + gdb_assert (regnum >=3D 0 && regnum < m_descr->nr_raw_registers); > + > + regbuf =3D register_buffer (regnum); > + size =3D m_descr->sizeof_register[regnum]; > + return extract_signed_integer (regbuf, size, byte_order); > +} If you want, we can add a function template for extract_signed_integer and extract_unsigned_integer. template LongType extract_integer (const gdb_byte *addr, int len, enum bfd_endian byte_order) { T retval; ... if (std::is_signed::value) { ... } else { ... } return retval; } so, the raw_collect above becomes,=20 template LongType raw_collect (int regnum) const { .... return extract_integer (regbuf, size, byte_order); } and raw_read_{signed,unsigned}, cooked_read_{signed,unsigned} can be merged as function template too. --=20 Yao (=E9=BD=90=E5=B0=A7)