mbox series

[0/6] target/riscv: Support Zabha extension

Message ID 20240523124045.1964-1-zhiwei_liu@linux.alibaba.com
Headers show
Series target/riscv: Support Zabha extension | expand

Message

LIU Zhiwei May 23, 2024, 12:40 p.m. UTC
Zabha adds support AMO operations for byte and half word. If zacas has been implemented,
zabha also adds support amocas.b and amocas.h.

More details is on the specification here:
https://github.com/riscv/riscv-zabha

The implemenation of zabha follows the way of AMOs and zacas.

This patch set is based on these two patch set:
1. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00207.html
2. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00212.html


LIU Zhiwei (6):
  target/riscv: Move gen_amo before implement Zabha
  target/riscv: Add AMO instructions for Zabha
  target/riscv: Move gen_cmpxchg before adding amocas.[b|h]
  target/riscv: Add amocas.[b|h] for Zabha
  target/riscv: Enable zabha for max cpu
  disas/riscv: Support zabha disassemble

 disas/riscv.c                               |  60 ++++++++
 target/riscv/cpu.c                          |   2 +
 target/riscv/cpu_cfg.h                      |   1 +
 target/riscv/insn32.decode                  |  22 +++
 target/riscv/insn_trans/trans_rva.c.inc     |  21 ---
 target/riscv/insn_trans/trans_rvzabha.c.inc | 145 ++++++++++++++++++++
 target/riscv/insn_trans/trans_rvzacas.c.inc |  13 --
 target/riscv/translate.c                    |  36 +++++
 8 files changed, 266 insertions(+), 34 deletions(-)
 create mode 100644 target/riscv/insn_trans/trans_rvzabha.c.inc

Comments

Daniel Henrique Barboza May 24, 2024, 11:44 a.m. UTC | #1
Hi Zhiwei!



On 5/23/24 09:40, LIU Zhiwei wrote:
> Zabha adds support AMO operations for byte and half word. If zacas has been implemented,
> zabha also adds support amocas.b and amocas.h.
> 
> More details is on the specification here:
> https://github.com/riscv/riscv-zabha
> 
> The implemenation of zabha follows the way of AMOs and zacas.
> 
> This patch set is based on these two patch set:
> 1. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00207.html
> 2. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00212.html

These 2 series doesn't seem to apply on top of each other, doesn't matter which
order I try. Applying zimop/zcmop first, then zama16b:

$ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0613.eml
Applying: target/riscv: Support Zama16b extension
error: patch failed: target/riscv/cpu.c:1464
error: target/riscv/cpu.c: patch does not apply
Patch failed at 0001 target/riscv: Support Zama16b extension
hint: Use 'git am --show-current-patch=diff' to see the failed patch


Applying zama16b first, then zimop/zcmop:

$ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0613.eml
Applying: target/riscv: Support Zama16b extension
$
$ git am \[PATCH\ 1_4\]\ target_riscv\:\ Add\ zimop\ extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0329.eml \[PATCH\ 2_4\]\ disas_riscv\:\ Support\ zimop\ disassemble\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0329.eml
Applying: target/riscv: Add zimop extension
error: patch failed: target/riscv/cpu.c:1463
error: target/riscv/cpu.c: patch does not apply
Patch failed at 0001 target/riscv: Add zimop extension


If the series are dependent on each other perhaps it's easier to send everything
in a single 11 patches series.


Thanks,

Daniel

> 
> 
> LIU Zhiwei (6):
>    target/riscv: Move gen_amo before implement Zabha
>    target/riscv: Add AMO instructions for Zabha
>    target/riscv: Move gen_cmpxchg before adding amocas.[b|h]
>    target/riscv: Add amocas.[b|h] for Zabha
>    target/riscv: Enable zabha for max cpu
>    disas/riscv: Support zabha disassemble
> 
>   disas/riscv.c                               |  60 ++++++++
>   target/riscv/cpu.c                          |   2 +
>   target/riscv/cpu_cfg.h                      |   1 +
>   target/riscv/insn32.decode                  |  22 +++
>   target/riscv/insn_trans/trans_rva.c.inc     |  21 ---
>   target/riscv/insn_trans/trans_rvzabha.c.inc | 145 ++++++++++++++++++++
>   target/riscv/insn_trans/trans_rvzacas.c.inc |  13 --
>   target/riscv/translate.c                    |  36 +++++
>   8 files changed, 266 insertions(+), 34 deletions(-)
>   create mode 100644 target/riscv/insn_trans/trans_rvzabha.c.inc
>
LIU Zhiwei May 26, 2024, 12:37 a.m. UTC | #2
On 2024/5/24 19:44, Daniel Henrique Barboza wrote:
> Hi Zhiwei!
>
>
>
> On 5/23/24 09:40, LIU Zhiwei wrote:
>> Zabha adds support AMO operations for byte and half word. If zacas 
>> has been implemented,
>> zabha also adds support amocas.b and amocas.h.
>>
>> More details is on the specification here:
>> https://github.com/riscv/riscv-zabha
>>
>> The implemenation of zabha follows the way of AMOs and zacas.
>>
>> This patch set is based on these two patch set:
>> 1. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00207.html
>> 2. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00212.html
>
> These 2 series doesn't seem to apply on top of each other, doesn't 
> matter which
> order I try. Applying zimop/zcmop first, then zama16b:
>
> $ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ extension\ 
> -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0613.eml
> Applying: target/riscv: Support Zama16b extension
> error: patch failed: target/riscv/cpu.c:1464
> error: target/riscv/cpu.c: patch does not apply
> Patch failed at 0001 target/riscv: Support Zama16b extension
> hint: Use 'git am --show-current-patch=diff' to see the failed patch
>
>
> Applying zama16b first, then zimop/zcmop:
>
> $ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ extension\ 
> -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0613.eml
> Applying: target/riscv: Support Zama16b extension
> $
> $ git am \[PATCH\ 1_4\]\ target_riscv\:\ Add\ zimop\ extension\ -\ 
> LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0329.eml 
> \[PATCH\ 2_4\]\ disas_riscv\:\ Support\ zimop\ disassemble\ -\ LIU\ 
> Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0329.eml
> Applying: target/riscv: Add zimop extension
> error: patch failed: target/riscv/cpu.c:1463
> error: target/riscv/cpu.c: patch does not apply
> Patch failed at 0001 target/riscv: Add zimop extension
>
>
> If the series are dependent on each other perhaps it's easier to send 
> everything
> in a single 11 patches series.

They don't have dependency on each other. But if we both rebase them to 
the master branch, they
couldn't be merged at the time, as them both modify cpu.h and cpu.c in 
the same place.


I will send them as a whole patch set(RVA23 patch set) after I fix other 
issues on implementing the RVA23 profile.

Thanks,

Zhiwei

>
>
> Thanks,
>
> Daniel
>
>>
>>
>> LIU Zhiwei (6):
>>    target/riscv: Move gen_amo before implement Zabha
>>    target/riscv: Add AMO instructions for Zabha
>>    target/riscv: Move gen_cmpxchg before adding amocas.[b|h]
>>    target/riscv: Add amocas.[b|h] for Zabha
>>    target/riscv: Enable zabha for max cpu
>>    disas/riscv: Support zabha disassemble
>>
>>   disas/riscv.c                               |  60 ++++++++
>>   target/riscv/cpu.c                          |   2 +
>>   target/riscv/cpu_cfg.h                      |   1 +
>>   target/riscv/insn32.decode                  |  22 +++
>>   target/riscv/insn_trans/trans_rva.c.inc     |  21 ---
>>   target/riscv/insn_trans/trans_rvzabha.c.inc | 145 ++++++++++++++++++++
>>   target/riscv/insn_trans/trans_rvzacas.c.inc |  13 --
>>   target/riscv/translate.c                    |  36 +++++
>>   8 files changed, 266 insertions(+), 34 deletions(-)
>>   create mode 100644 target/riscv/insn_trans/trans_rvzabha.c.inc
>>
Daniel Henrique Barboza May 26, 2024, 5:16 p.m. UTC | #3
On 5/25/24 21:37, LIU Zhiwei wrote:
> 
> On 2024/5/24 19:44, Daniel Henrique Barboza wrote:
>> Hi Zhiwei!
>>
>>
>>
>> On 5/23/24 09:40, LIU Zhiwei wrote:
>>> Zabha adds support AMO operations for byte and half word. If zacas has been implemented,
>>> zabha also adds support amocas.b and amocas.h.
>>>
>>> More details is on the specification here:
>>> https://github.com/riscv/riscv-zabha
>>>
>>> The implemenation of zabha follows the way of AMOs and zacas.
>>>
>>> This patch set is based on these two patch set:
>>> 1. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00207.html
>>> 2. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00212.html
>>
>> These 2 series doesn't seem to apply on top of each other, doesn't matter which
>> order I try. Applying zimop/zcmop first, then zama16b:
>>
>> $ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0613.eml
>> Applying: target/riscv: Support Zama16b extension
>> error: patch failed: target/riscv/cpu.c:1464
>> error: target/riscv/cpu.c: patch does not apply
>> Patch failed at 0001 target/riscv: Support Zama16b extension
>> hint: Use 'git am --show-current-patch=diff' to see the failed patch
>>
>>
>> Applying zama16b first, then zimop/zcmop:
>>
>> $ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0613.eml
>> Applying: target/riscv: Support Zama16b extension
>> $
>> $ git am \[PATCH\ 1_4\]\ target_riscv\:\ Add\ zimop\ extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0329.eml \[PATCH\ 2_4\]\ disas_riscv\:\ Support\ zimop\ disassemble\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 0329.eml
>> Applying: target/riscv: Add zimop extension
>> error: patch failed: target/riscv/cpu.c:1463
>> error: target/riscv/cpu.c: patch does not apply
>> Patch failed at 0001 target/riscv: Add zimop extension
>>
>>
>> If the series are dependent on each other perhaps it's easier to send everything
>> in a single 11 patches series.
> 
> They don't have dependency on each other. But if we both rebase them to the master branch, they
> couldn't be merged at the time, as them both modify cpu.h and cpu.c in the same place.
> 
> 
> I will send them as a whole patch set(RVA23 patch set) after I fix other issues on implementing the RVA23 profile.


Be aware that we have some RVA23 extensions that are implemented in the ML
but not merged no master yet. E.g. sstvala ended up being implemented after some
changes I did w.r.t tval and EBREAK. These patches are on riscv-to-apply.next.

Also, I took another look at RVA23 mandatory exts and what we have. I think we're
not that far off after these extensions you're adding. What we really seems to be
missing is supm and ssnpm.


Thanks,

Daniel

> 
> Thanks,
> 
> Zhiwei
> 
>>
>>
>> Thanks,
>>
>> Daniel
>>
>>>
>>>
>>> LIU Zhiwei (6):
>>>    target/riscv: Move gen_amo before implement Zabha
>>>    target/riscv: Add AMO instructions for Zabha
>>>    target/riscv: Move gen_cmpxchg before adding amocas.[b|h]
>>>    target/riscv: Add amocas.[b|h] for Zabha
>>>    target/riscv: Enable zabha for max cpu
>>>    disas/riscv: Support zabha disassemble
>>>
>>>   disas/riscv.c                               |  60 ++++++++
>>>   target/riscv/cpu.c                          |   2 +
>>>   target/riscv/cpu_cfg.h                      |   1 +
>>>   target/riscv/insn32.decode                  |  22 +++
>>>   target/riscv/insn_trans/trans_rva.c.inc     |  21 ---
>>>   target/riscv/insn_trans/trans_rvzabha.c.inc | 145 ++++++++++++++++++++
>>>   target/riscv/insn_trans/trans_rvzacas.c.inc |  13 --
>>>   target/riscv/translate.c                    |  36 +++++
>>>   8 files changed, 266 insertions(+), 34 deletions(-)
>>>   create mode 100644 target/riscv/insn_trans/trans_rvzabha.c.inc
>>>
LIU Zhiwei May 27, 2024, 1:52 a.m. UTC | #4
On 2024/5/27 1:16, Daniel Henrique Barboza wrote:
>
>
> On 5/25/24 21:37, LIU Zhiwei wrote:
>>
>> On 2024/5/24 19:44, Daniel Henrique Barboza wrote:
>>> Hi Zhiwei!
>>>
>>>
>>>
>>> On 5/23/24 09:40, LIU Zhiwei wrote:
>>>> Zabha adds support AMO operations for byte and half word. If zacas 
>>>> has been implemented,
>>>> zabha also adds support amocas.b and amocas.h.
>>>>
>>>> More details is on the specification here:
>>>> https://github.com/riscv/riscv-zabha
>>>>
>>>> The implemenation of zabha follows the way of AMOs and zacas.
>>>>
>>>> This patch set is based on these two patch set:
>>>> 1. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00207.html
>>>> 2. https://mail.gnu.org/archive/html/qemu-riscv/2024-05/msg00212.html
>>>
>>> These 2 series doesn't seem to apply on top of each other, doesn't 
>>> matter which
>>> order I try. Applying zimop/zcmop first, then zama16b:
>>>
>>> $ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ 
>>> extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 
>>> 2024-05-22\ 0613.eml
>>> Applying: target/riscv: Support Zama16b extension
>>> error: patch failed: target/riscv/cpu.c:1464
>>> error: target/riscv/cpu.c: patch does not apply
>>> Patch failed at 0001 target/riscv: Support Zama16b extension
>>> hint: Use 'git am --show-current-patch=diff' to see the failed patch
>>>
>>>
>>> Applying zama16b first, then zimop/zcmop:
>>>
>>> $ git am \[PATCH\ 1_1\]\ target_riscv\:\ Support\ Zama16b\ 
>>> extension\ -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 
>>> 2024-05-22\ 0613.eml
>>> Applying: target/riscv: Support Zama16b extension
>>> $
>>> $ git am \[PATCH\ 1_4\]\ target_riscv\:\ Add\ zimop\ extension\ -\ 
>>> LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 
>>> 0329.eml \[PATCH\ 2_4\]\ disas_riscv\:\ Support\ zimop\ disassemble\ 
>>> -\ LIU\ Zhiwei\ \<zhiwei_liu@linux.alibaba.com\>\ -\ 2024-05-22\ 
>>> 0329.eml
>>> Applying: target/riscv: Add zimop extension
>>> error: patch failed: target/riscv/cpu.c:1463
>>> error: target/riscv/cpu.c: patch does not apply
>>> Patch failed at 0001 target/riscv: Add zimop extension
>>>
>>>
>>> If the series are dependent on each other perhaps it's easier to 
>>> send everything
>>> in a single 11 patches series.
>>
>> They don't have dependency on each other. But if we both rebase them 
>> to the master branch, they
>> couldn't be merged at the time, as them both modify cpu.h and cpu.c 
>> in the same place.
>>
>>
>> I will send them as a whole patch set(RVA23 patch set) after I fix 
>> other issues on implementing the RVA23 profile.
>
>
> Be aware that we have some RVA23 extensions that are implemented in 
> the ML
> but not merged no master yet. E.g. sstvala ended up being implemented 
> after some
> changes I did w.r.t tval and EBREAK. These patches are on 
> riscv-to-apply.next.
Yes. Besides these, there are some missing checks in Smstateen. And we 
also need add named features for Sh* extensions.
>
> Also, I took another look at RVA23 mandatory exts and what we have. I 
> think we're
> not that far off after these extensions you're adding. What we really 
> seems to be
> missing is supm and ssnpm.

Alexey is working on this. I have some comments and let's wait for his 
next patch set.

Thanks,
Zhiwei

>
>
> Thanks,
>
> Daniel
>
>>
>> Thanks,
>>
>> Zhiwei
>>
>>>
>>>
>>> Thanks,
>>>
>>> Daniel
>>>
>>>>
>>>>
>>>> LIU Zhiwei (6):
>>>>    target/riscv: Move gen_amo before implement Zabha
>>>>    target/riscv: Add AMO instructions for Zabha
>>>>    target/riscv: Move gen_cmpxchg before adding amocas.[b|h]
>>>>    target/riscv: Add amocas.[b|h] for Zabha
>>>>    target/riscv: Enable zabha for max cpu
>>>>    disas/riscv: Support zabha disassemble
>>>>
>>>>   disas/riscv.c                               |  60 ++++++++
>>>>   target/riscv/cpu.c                          |   2 +
>>>>   target/riscv/cpu_cfg.h                      |   1 +
>>>>   target/riscv/insn32.decode                  |  22 +++
>>>>   target/riscv/insn_trans/trans_rva.c.inc     |  21 ---
>>>>   target/riscv/insn_trans/trans_rvzabha.c.inc | 145 
>>>> ++++++++++++++++++++
>>>>   target/riscv/insn_trans/trans_rvzacas.c.inc |  13 --
>>>>   target/riscv/translate.c                    |  36 +++++
>>>>   8 files changed, 266 insertions(+), 34 deletions(-)
>>>>   create mode 100644 target/riscv/insn_trans/trans_rvzabha.c.inc
>>>>