Re: [Qemu-devel] [PATCH] target-mips: Fix Loongson pandn instruction.

2016-10-13 Thread Yongbok Kim


On 13/10/2016 03:17, Heiher wrote:
> From: Heiher 
> 
> pandn FD, FS, FT
> Operation: FD = ((NOT FS) AND FT)
> 
> Signed-off-by: Heiher 
> Signed-off-by: Fuxin Zhang 
> ---
>  target-mips/translate.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/target-mips/translate.c b/target-mips/translate.c
> index 55c2ca0..ed67180 100644
> --- a/target-mips/translate.c
> +++ b/target-mips/translate.c
> @@ -3880,6 +3880,8 @@ static void gen_loongson_multimedia(DisasContext *ctx, 
> int rd, int rs, int rt)
>  case OPC_##UP: gen_helper_##LO(t0, t0); break
>  #define LMI_DIRECT(UP, LO, OP) \
>  case OPC_##UP: tcg_gen_##OP##_i64(t0, t0, t1); break
> +#define LMI_DIRECT_SWAP(UP, LO, OP) \
> +case OPC_##UP: tcg_gen_##OP##_i64(t0, t1, t0); break

It is used only once. No need to make it as a macro.

>  
>  switch (opc) {
>  LMI_HELPER(PADDSH, paddsh);
> @@ -3945,8 +3947,8 @@ static void gen_loongson_multimedia(DisasContext *ctx, 
> int rd, int rs, int rt)
>  LMI_DIRECT(XOR_CP2, xor, xor);
>  LMI_DIRECT(NOR_CP2, nor, nor);
>  LMI_DIRECT(AND_CP2, and, and);
> -LMI_DIRECT(PANDN, pandn, andc);
>  LMI_DIRECT(OR, or, or);
> +LMI_DIRECT_SWAP(PANDN, pandn, andc);

case OPC_PANDN: tcg_gen_andc_i64(t0, t1, t0); break;
Would it be sufficient?

>  
>  case OPC_PINSRH_0:
>  tcg_gen_deposit_i64(t0, t0, t1, 0, 16);
> 

Thanks for the fix.

Regards,
Yongbok



[Qemu-devel] [PATCH] target-mips: Fix Loongson pandn instruction.

2016-10-12 Thread Heiher
From: Heiher 

pandn FD, FS, FT
Operation: FD = ((NOT FS) AND FT)

Signed-off-by: Heiher 
Signed-off-by: Fuxin Zhang 
---
 target-mips/translate.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/target-mips/translate.c b/target-mips/translate.c
index 55c2ca0..ed67180 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -3880,6 +3880,8 @@ static void gen_loongson_multimedia(DisasContext *ctx, 
int rd, int rs, int rt)
 case OPC_##UP: gen_helper_##LO(t0, t0); break
 #define LMI_DIRECT(UP, LO, OP) \
 case OPC_##UP: tcg_gen_##OP##_i64(t0, t0, t1); break
+#define LMI_DIRECT_SWAP(UP, LO, OP) \
+case OPC_##UP: tcg_gen_##OP##_i64(t0, t1, t0); break
 
 switch (opc) {
 LMI_HELPER(PADDSH, paddsh);
@@ -3945,8 +3947,8 @@ static void gen_loongson_multimedia(DisasContext *ctx, 
int rd, int rs, int rt)
 LMI_DIRECT(XOR_CP2, xor, xor);
 LMI_DIRECT(NOR_CP2, nor, nor);
 LMI_DIRECT(AND_CP2, and, and);
-LMI_DIRECT(PANDN, pandn, andc);
 LMI_DIRECT(OR, or, or);
+LMI_DIRECT_SWAP(PANDN, pandn, andc);
 
 case OPC_PINSRH_0:
 tcg_gen_deposit_i64(t0, t0, t1, 0, 16);
-- 
2.10.0