From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40230) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZPN88-0001lh-Li for qemu-devel@nongnu.org; Tue, 11 Aug 2015 23:55:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZPN84-0000RU-8p for qemu-devel@nongnu.org; Tue, 11 Aug 2015 23:55:08 -0400 Received: from mail-qk0-x230.google.com ([2607:f8b0:400d:c09::230]:36553) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZPN84-0000Qi-3d for qemu-devel@nongnu.org; Tue, 11 Aug 2015 23:55:04 -0400 Received: by qkdv3 with SMTP id v3so1724245qkd.3 for ; Tue, 11 Aug 2015 20:55:03 -0700 (PDT) Sender: Richard Henderson References: <1439151229-27747-1-git-send-email-laurent@vivier.eu> <1439151229-27747-4-git-send-email-laurent@vivier.eu> From: Richard Henderson Message-ID: <55CAC392.5050802@twiddle.net> Date: Tue, 11 Aug 2015 20:54:58 -0700 MIME-Version: 1.0 In-Reply-To: <1439151229-27747-4-git-send-email-laurent@vivier.eu> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH for-2.5 03/30] m68k: introduce read_imXX() functions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laurent Vivier , qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, peter.crosthwaite@xilinx.com, Andreas Schwab , gerg@uclinux.org On 08/09/2015 01:13 PM, Laurent Vivier wrote: > Read a 8, 16 or 32bit immediat constant. > > An Immediat constant is stored in the instruction opcode and > can be in one or two extension words. > > Signed-off-by: Laurent Vivier > --- > target-m68k/translate.c | 73 ++++++++++++++++++++++++------------------------- > 1 file changed, 35 insertions(+), 38 deletions(-) > > diff --git a/target-m68k/translate.c b/target-m68k/translate.c > index f190f19..3b87b0c 100644 > --- a/target-m68k/translate.c > +++ b/target-m68k/translate.c > @@ -260,16 +260,30 @@ static TCGv gen_ldst(DisasContext *s, int opsize, TCGv addr, TCGv val, > } > } > > -/* Read a 32-bit immediate constant. */ > -static inline uint32_t read_im32(CPUM68KState *env, DisasContext *s) > +/* Read an 8-bit immediate constant */ > +static inline uint32_t read_im8(CPUM68KState *env, DisasContext *s) > { > uint32_t im; > - im = ((uint32_t)cpu_lduw_code(env, s->pc)) << 16; > + im = cpu_ldsb_code(env, s->pc + 1); > s->pc += 2; > - im |= cpu_lduw_code(env, s->pc); > + return im; > +} > +/* Read a 16-bit immediate constant */ > +static inline uint32_t read_im16(CPUM68KState *env, DisasContext *s) > +{ > + uint32_t im; > + im = cpu_ldsw_code(env, s->pc); > s->pc += 2; > return im; > } > +/* Read a 32-bit immediate constant. */ > +static inline uint32_t read_im32(CPUM68KState *env, DisasContext *s) > +{ > + uint32_t im; > + im = read_im16(env, s) << 16; > + im |= 0xffff & read_im16(env, s); > + return im; > +} Watch the spacing between functions. It's probably better to have the return types match the function -- int8_t, int16_t, int32_t. Finally, read_im8 might as well call read_im16 and truncate the result via return type. r~