qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH for-2.5 25/30] m68k: add abcd, sbcd, nbcd instru


From: Richard Henderson
Subject: Re: [Qemu-devel] [PATCH for-2.5 25/30] m68k: add abcd, sbcd, nbcd instructions
Date: Wed, 12 Aug 2015 10:57:02 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0

On 08/09/2015 01:13 PM, Laurent Vivier wrote:
> Signed-off-by: Laurent Vivier <address@hidden>
> ---
>  target-m68k/helper.c    | 91 
> +++++++++++++++++++++++++++++++++++++++++++++++++
>  target-m68k/helper.h    |  3 ++
>  target-m68k/translate.c | 82 ++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 176 insertions(+)
> 
> diff --git a/target-m68k/helper.c b/target-m68k/helper.c
> index 8c10fbc..f4be52b 100644
> --- a/target-m68k/helper.c
> +++ b/target-m68k/helper.c
> @@ -938,3 +938,94 @@ void HELPER(set_mac_extu)(CPUM68KState *env, uint32_t 
> val, uint32_t acc)
>      res |= (uint64_t)(val & 0xffff0000) << 16;
>      env->macc[acc + 1] = res;
>  }
> +
> +uint32_t HELPER(abcd_cc)(CPUM68KState *env, uint32_t src, uint32_t dest)
> +{
> +    uint16_t hi, lo;
> +    uint16_t res;
> +    uint32_t flags;
> +    int extend = 0;
> +
> +    flags = env->cc_dest;
> +    flags &= ~CCF_C;
> +
> +    lo = (src & 0x0f) + (dest & 0x0f);
> +    if (env->cc_x) {
> +        lo++;
> +    }

A nit: Since CC_X == 0 or 1, you can just add it.

> +uint32_t HELPER(sbcd_cc)(CPUM68KState *env, uint32_t src, uint32_t dest)
> +{
> +    uint16_t hi, lo;
> +    uint16_t res;
> +    uint32_t flags;
> +    int bcd = 0, carry = 0, extend = 0;
> +
> +    flags = env->cc_dest;
> +    flags &= CCF_C;
> +
> +    if (env->cc_x) {
> +        carry = 1;
> +    }

Likewise with subtracting it.  carry == env->cc_x.

> +DISAS_INSN(nbcd)
> +{
> +    TCGv dest;
> +    TCGv addr;
> +
> +    SRC_EA(env, dest, OS_BYTE, -1, &addr);
> +
> +    gen_flush_flags(s);
> +    gen_helper_sbcd_cc(dest, cpu_env, dest, tcg_const_i32(0));

Free the zero temp.

r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]