[RFC 6/8] target/riscv: delete redundant check for zcd instructions in decode_opc

Weiwei Li posted 8 patches 3 years, 4 months ago
Maintainers: Palmer Dabbelt <palmer@dabbelt.com>, Alistair Francis <Alistair.Francis@wdc.com>, Bin Meng <bin.meng@windriver.com>
There is a newer version of this series
[RFC 6/8] target/riscv: delete redundant check for zcd instructions in decode_opc
Posted by Weiwei Li 3 years, 4 months ago
All the check for Zcd instructions have been done in their trans function

Signed-off-by: Weiwei Li <liweiwei@iscas.ac.cn>
Signed-off-by: Junqiang Wang <wangjunqiang@iscas.ac.cn>
---
 target/riscv/translate.c | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/target/riscv/translate.c b/target/riscv/translate.c
index 347bc913eb..a55b4a7849 100644
--- a/target/riscv/translate.c
+++ b/target/riscv/translate.c
@@ -1087,13 +1087,6 @@ static void decode_opc(CPURISCVState *env, DisasContext *ctx, uint16_t opcode)
              ((opcode & 0xe003) == 0xe000) ||
              ((opcode & 0xe003) == 0xe002))) {
             gen_exception_illegal(ctx);
-        } else if (!(has_ext(ctx, RVC) || ctx->cfg_ptr->ext_zcd ||
-                     ctx->cfg_ptr->ext_zcmp || ctx->cfg_ptr->ext_zcmt) &&
-                   (((opcode & 0xe003) == 0x2000) ||
-                    ((opcode & 0xe003) == 0x2002) ||
-                    ((opcode & 0xe003) == 0xa000) ||
-                    ((opcode & 0xe003) == 0xa002))) {
-            gen_exception_illegal(ctx);
         } else {
             ctx->opcode = opcode;
             ctx->pc_succ_insn = ctx->base.pc_next + 2;
-- 
2.25.1
Re: [RFC 6/8] target/riscv: delete redundant check for zcd instructions in decode_opc
Posted by Alistair Francis 3 years, 3 months ago
On Fri, Sep 30, 2022 at 11:28 AM Weiwei Li <liweiwei@iscas.ac.cn> wrote:
>
> All the check for Zcd instructions have been done in their trans function
>
> Signed-off-by: Weiwei Li <liweiwei@iscas.ac.cn>
> Signed-off-by: Junqiang Wang <wangjunqiang@iscas.ac.cn>
> ---
>  target/riscv/translate.c | 7 -------
>  1 file changed, 7 deletions(-)
>
> diff --git a/target/riscv/translate.c b/target/riscv/translate.c
> index 347bc913eb..a55b4a7849 100644
> --- a/target/riscv/translate.c
> +++ b/target/riscv/translate.c
> @@ -1087,13 +1087,6 @@ static void decode_opc(CPURISCVState *env, DisasContext *ctx, uint16_t opcode)
>               ((opcode & 0xe003) == 0xe000) ||
>               ((opcode & 0xe003) == 0xe002))) {
>              gen_exception_illegal(ctx);
> -        } else if (!(has_ext(ctx, RVC) || ctx->cfg_ptr->ext_zcd ||
> -                     ctx->cfg_ptr->ext_zcmp || ctx->cfg_ptr->ext_zcmt) &&
> -                   (((opcode & 0xe003) == 0x2000) ||
> -                    ((opcode & 0xe003) == 0x2002) ||
> -                    ((opcode & 0xe003) == 0xa000) ||
> -                    ((opcode & 0xe003) == 0xa002))) {
> -            gen_exception_illegal(ctx);

It's probably best to never add this in the first place.

Remember that the extension can't be enabled until the last patch, so
it's ok if we don't support it all in one go

Alistair

>          } else {
>              ctx->opcode = opcode;
>              ctx->pc_succ_insn = ctx->base.pc_next + 2;
> --
> 2.25.1
>
>
Re: [RFC 6/8] target/riscv: delete redundant check for zcd instructions in decode_opc
Posted by weiwei 3 years, 3 months ago
On 2022/10/25 11:39, Alistair Francis wrote:
> On Fri, Sep 30, 2022 at 11:28 AM Weiwei Li <liweiwei@iscas.ac.cn> wrote:
>> All the check for Zcd instructions have been done in their trans function
>>
>> Signed-off-by: Weiwei Li <liweiwei@iscas.ac.cn>
>> Signed-off-by: Junqiang Wang <wangjunqiang@iscas.ac.cn>
>> ---
>>   target/riscv/translate.c | 7 -------
>>   1 file changed, 7 deletions(-)
>>
>> diff --git a/target/riscv/translate.c b/target/riscv/translate.c
>> index 347bc913eb..a55b4a7849 100644
>> --- a/target/riscv/translate.c
>> +++ b/target/riscv/translate.c
>> @@ -1087,13 +1087,6 @@ static void decode_opc(CPURISCVState *env, DisasContext *ctx, uint16_t opcode)
>>                ((opcode & 0xe003) == 0xe000) ||
>>                ((opcode & 0xe003) == 0xe002))) {
>>               gen_exception_illegal(ctx);
>> -        } else if (!(has_ext(ctx, RVC) || ctx->cfg_ptr->ext_zcd ||
>> -                     ctx->cfg_ptr->ext_zcmp || ctx->cfg_ptr->ext_zcmt) &&
>> -                   (((opcode & 0xe003) == 0x2000) ||
>> -                    ((opcode & 0xe003) == 0x2002) ||
>> -                    ((opcode & 0xe003) == 0xa000) ||
>> -                    ((opcode & 0xe003) == 0xa002))) {
>> -            gen_exception_illegal(ctx);
> It's probably best to never add this in the first place.
>
> Remember that the extension can't be enabled until the last patch, so
> it's ok if we don't support it all in one go
>
> Alistair

OK.  I'll update it in next version.

Regards,

Weiwei Li

>
>>           } else {
>>               ctx->opcode = opcode;
>>               ctx->pc_succ_insn = ctx->base.pc_next + 2;
>> --
>> 2.25.1
>>
>>