qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] target/riscv/csr.c: Fix an access to VXSAT
@ 2024-09-25  9:35 Evgenii Prokopiev
  2024-09-25 13:35 ` Daniel Henrique Barboza
  0 siblings, 1 reply; 8+ messages in thread
From: Evgenii Prokopiev @ 2024-09-25  9:35 UTC (permalink / raw)
  To: palmer
  Cc: evgenii.prokopiev, alistair.francis, bmeng.cn, liwei1518,
	dbarboza, zhiwei_liu, qemu-riscv, qemu-devel

The register VXSAT should be RW only to the first bit.
The remaining bits should be 0.

The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture

The vxsat CSR has a single read-write least-significant bit (vxsat[0])
that indicates if a fixed-point instruction has had to saturate an output
value to fit into a destination format. Bits vxsat[XLEN-1:1]
should be written as zeros.

Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
---
 target/riscv/csr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index bd080f92b5..69c41212e9 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState *env, int csrno,
 static RISCVException read_vxsat(CPURISCVState *env, int csrno,
                                  target_ulong *val)
 {
-    *val = env->vxsat;
+    *val = env->vxsat & BIT(0);
     return RISCV_EXCP_NONE;
 }
 
@@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState *env, int csrno,
 #if !defined(CONFIG_USER_ONLY)
     env->mstatus |= MSTATUS_VS;
 #endif
-    env->vxsat = val;
+    env->vxsat = val & BIT(0);
     return RISCV_EXCP_NONE;
 }
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] target/riscv/csr.c: Fix an access to VXSAT
  2024-09-25  9:35 [PATCH] target/riscv/csr.c: Fix an access to VXSAT Evgenii Prokopiev
@ 2024-09-25 13:35 ` Daniel Henrique Barboza
  2024-09-26  8:39   ` [PATCH v2] " Evgenii Prokopiev
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Henrique Barboza @ 2024-09-25 13:35 UTC (permalink / raw)
  To: Evgenii Prokopiev, palmer
  Cc: alistair.francis, bmeng.cn, liwei1518, zhiwei_liu, qemu-riscv,
	qemu-devel



On 9/25/24 6:35 AM, Evgenii Prokopiev wrote:
> The register VXSAT should be RW only to the first bit.
> The remaining bits should be 0.
> 
> The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture
> 
> The vxsat CSR has a single read-write least-significant bit (vxsat[0])
> that indicates if a fixed-point instruction has had to saturate an output
> value to fit into a destination format. Bits vxsat[XLEN-1:1]
> should be written as zeros.
> 
> Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
> ---

Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>

>   target/riscv/csr.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> index bd080f92b5..69c41212e9 100644
> --- a/target/riscv/csr.c
> +++ b/target/riscv/csr.c
> @@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState *env, int csrno,
>   static RISCVException read_vxsat(CPURISCVState *env, int csrno,
>                                    target_ulong *val)
>   {
> -    *val = env->vxsat;
> +    *val = env->vxsat & BIT(0);
>       return RISCV_EXCP_NONE;
>   }
>   
> @@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState *env, int csrno,
>   #if !defined(CONFIG_USER_ONLY)
>       env->mstatus |= MSTATUS_VS;
>   #endif
> -    env->vxsat = val;
> +    env->vxsat = val & BIT(0);
>       return RISCV_EXCP_NONE;
>   }
>   


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2] target/riscv/csr.c: Fix an access to VXSAT
  2024-09-25 13:35 ` Daniel Henrique Barboza
@ 2024-09-26  8:39   ` Evgenii Prokopiev
  2024-10-02  5:45     ` Alistair Francis
  0 siblings, 1 reply; 8+ messages in thread
From: Evgenii Prokopiev @ 2024-09-26  8:39 UTC (permalink / raw)
  To: dbarboza
  Cc: alistair.francis, bmeng.cn, evgenii.prokopiev, liwei1518, palmer,
	qemu-devel, qemu-riscv, zhiwei_liu

The register VXSAT should be RW only to the first bit.
The remaining bits should be 0.

The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture

The vxsat CSR has a single read-write least-significant bit (vxsat[0])
that indicates if a fixed-point instruction has had to saturate an output
value to fit into a destination format. Bits vxsat[XLEN-1:1]
should be written as zeros.

Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
---
Changes since v1: 
	- Added reviewed-by tag
 target/riscv/csr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index bd080f92b5..69c41212e9 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState *env, int csrno,
 static RISCVException read_vxsat(CPURISCVState *env, int csrno,
                                  target_ulong *val)
 {
-    *val = env->vxsat;
+    *val = env->vxsat & BIT(0);
     return RISCV_EXCP_NONE;
 }
 
@@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState *env, int csrno,
 #if !defined(CONFIG_USER_ONLY)
     env->mstatus |= MSTATUS_VS;
 #endif
-    env->vxsat = val;
+    env->vxsat = val & BIT(0);
     return RISCV_EXCP_NONE;
 }
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] target/riscv/csr.c: Fix an access to VXSAT
  2024-09-26  8:39   ` [PATCH v2] " Evgenii Prokopiev
@ 2024-10-02  5:45     ` Alistair Francis
  2024-10-02  8:44       ` [PATCH v3] " Evgenii Prokopiev
  0 siblings, 1 reply; 8+ messages in thread
From: Alistair Francis @ 2024-10-02  5:45 UTC (permalink / raw)
  To: Evgenii Prokopiev
  Cc: dbarboza, alistair.francis, bmeng.cn, liwei1518, palmer,
	qemu-devel, qemu-riscv, zhiwei_liu

On Thu, Sep 26, 2024 at 6:41 PM Evgenii Prokopiev
<evgenii.prokopiev@syntacore.com> wrote:
>
> The register VXSAT should be RW only to the first bit.
> The remaining bits should be 0.
>
> The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture
>
> The vxsat CSR has a single read-write least-significant bit (vxsat[0])
> that indicates if a fixed-point instruction has had to saturate an output
> value to fit into a destination format. Bits vxsat[XLEN-1:1]
> should be written as zeros.
>
> Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>

Reviewed-by: Alistair Francis <alistair.francis@wdc.com>

Alistair

> ---
> Changes since v1:
>         - Added reviewed-by tag
>  target/riscv/csr.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> index bd080f92b5..69c41212e9 100644
> --- a/target/riscv/csr.c
> +++ b/target/riscv/csr.c
> @@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState *env, int csrno,
>  static RISCVException read_vxsat(CPURISCVState *env, int csrno,
>                                   target_ulong *val)
>  {
> -    *val = env->vxsat;
> +    *val = env->vxsat & BIT(0);
>      return RISCV_EXCP_NONE;
>  }
>
> @@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState *env, int csrno,
>  #if !defined(CONFIG_USER_ONLY)
>      env->mstatus |= MSTATUS_VS;
>  #endif
> -    env->vxsat = val;
> +    env->vxsat = val & BIT(0);
>      return RISCV_EXCP_NONE;
>  }
>
> --
> 2.34.1
>
>


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v3] target/riscv/csr.c: Fix an access to VXSAT
  2024-10-02  5:45     ` Alistair Francis
@ 2024-10-02  8:44       ` Evgenii Prokopiev
  2024-10-03 20:13         ` Richard Henderson
  0 siblings, 1 reply; 8+ messages in thread
From: Evgenii Prokopiev @ 2024-10-02  8:44 UTC (permalink / raw)
  To: alistair23
  Cc: alistair.francis, bmeng.cn, dbarboza, evgenii.prokopiev,
	liwei1518, palmer, qemu-devel, qemu-riscv, zhiwei_liu

The register VXSAT should be RW only to the first bit.
The remaining bits should be 0.

The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture

The vxsat CSR has a single read-write least-significant bit (vxsat[0])
that indicates if a fixed-point instruction has had to saturate an output
value to fit into a destination format. Bits vxsat[XLEN-1:1]
should be written as zeros.

Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
---
Changes since v2:
    - Added reviewed-by tag
 target/riscv/csr.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/target/riscv/csr.c b/target/riscv/csr.c
index bd080f92b5..69c41212e9 100644
--- a/target/riscv/csr.c
+++ b/target/riscv/csr.c
@@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState *env, int csrno,
 static RISCVException read_vxsat(CPURISCVState *env, int csrno,
                                  target_ulong *val)
 {
-    *val = env->vxsat;
+    *val = env->vxsat & BIT(0);
     return RISCV_EXCP_NONE;
 }
 
@@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState *env, int csrno,
 #if !defined(CONFIG_USER_ONLY)
     env->mstatus |= MSTATUS_VS;
 #endif
-    env->vxsat = val;
+    env->vxsat = val & BIT(0);
     return RISCV_EXCP_NONE;
 }
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] target/riscv/csr.c: Fix an access to VXSAT
  2024-10-02  8:44       ` [PATCH v3] " Evgenii Prokopiev
@ 2024-10-03 20:13         ` Richard Henderson
       [not found]           ` <ed5cf837-e397-44b8-b719-5c5b97646d10@syntacore.com>
  0 siblings, 1 reply; 8+ messages in thread
From: Richard Henderson @ 2024-10-03 20:13 UTC (permalink / raw)
  To: Evgenii Prokopiev, alistair23
  Cc: alistair.francis, bmeng.cn, dbarboza, liwei1518, palmer,
	qemu-devel, qemu-riscv, zhiwei_liu

On 10/2/24 01:44, Evgenii Prokopiev wrote:
> The register VXSAT should be RW only to the first bit.
> The remaining bits should be 0.
> 
> The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture
> 
> The vxsat CSR has a single read-write least-significant bit (vxsat[0])
> that indicates if a fixed-point instruction has had to saturate an output
> value to fit into a destination format. Bits vxsat[XLEN-1:1]
> should be written as zeros.
> 
> Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
> ---
> Changes since v2:
>      - Added reviewed-by tag
>   target/riscv/csr.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)

New versions should not be replies to previous versions.
No need to re-spin *only* to collect tags; tools can do that.

> 
> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> index bd080f92b5..69c41212e9 100644
> --- a/target/riscv/csr.c
> +++ b/target/riscv/csr.c
> @@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState *env, int csrno,
>   static RISCVException read_vxsat(CPURISCVState *env, int csrno,
>                                    target_ulong *val)
>   {
> -    *val = env->vxsat;
> +    *val = env->vxsat & BIT(0);
>       return RISCV_EXCP_NONE;
>   }

Nit: no need to mask on read...

>   
> @@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState *env, int csrno,
>   #if !defined(CONFIG_USER_ONLY)
>       env->mstatus |= MSTATUS_VS;
>   #endif
> -    env->vxsat = val;
> +    env->vxsat = val & BIT(0);
>       return RISCV_EXCP_NONE;
>   }

... because you know the value is already correct from the write.


r~


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] target/riscv/csr.c: Fix an access to VXSAT
       [not found]           ` <ed5cf837-e397-44b8-b719-5c5b97646d10@syntacore.com>
@ 2024-10-04 13:48             ` Evgenii Prokopiev
  2024-10-08  0:26               ` Alistair Francis
  0 siblings, 1 reply; 8+ messages in thread
From: Evgenii Prokopiev @ 2024-10-04 13:48 UTC (permalink / raw)
  To: Richard Henderson, alistair23
  Cc: alistair.francis, bmeng.cn, dbarboza, liwei1518, palmer,
	qemu-devel, qemu-riscv, zhiwei_liu



On 04.10.2024 16:38, Evgenii Prokopiev wrote:
> 
> 
> On 03.10.2024 23:13, Richard Henderson wrote:
>> On 10/2/24 01:44, Evgenii Prokopiev wrote:
>>> The register VXSAT should be RW only to the first bit.
>>> The remaining bits should be 0.
>>>
>>> The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture
>>>
>>> The vxsat CSR has a single read-write least-significant bit (vxsat[0])
>>> that indicates if a fixed-point instruction has had to saturate an 
>>> output
>>> value to fit into a destination format. Bits vxsat[XLEN-1:1]
>>> should be written as zeros.
>>>
>>> Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
>>> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
>>> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
>>> ---
>>> Changes since v2:
>>>      - Added reviewed-by tag
>>>   target/riscv/csr.c | 4 ++--
>>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> New versions should not be replies to previous versions.
>> No need to re-spin *only* to collect tags; tools can do that.
>>
> Hi!
> Thanks for your explanation.
>>>
>>> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
>>> index bd080f92b5..69c41212e9 100644
>>> --- a/target/riscv/csr.c
>>> +++ b/target/riscv/csr.c
>>> @@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState 
>>> *env, int csrno,
>>>   static RISCVException read_vxsat(CPURISCVState *env, int csrno,
>>>                                    target_ulong *val)
>>>   {
>>> -    *val = env->vxsat;
>>> +    *val = env->vxsat & BIT(0);
>>>       return RISCV_EXCP_NONE;
>>>   }
>>
>> Nit: no need to mask on read...
>>
>>> @@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState 
>>> *env, int csrno,
>>>   #if !defined(CONFIG_USER_ONLY)
>>>       env->mstatus |= MSTATUS_VS;
>>>   #endif
>>> -    env->vxsat = val;
>>> +    env->vxsat = val & BIT(0);
>>>       return RISCV_EXCP_NONE;
>>>   }
>>
>> ... because you know the value is already correct from the write.
>>
> Yes, we mask the value when we make a write. But this value could be
> changed in other places. So I added a mask when reading happens too.
> If additional verification is not required, I will delete it.
>>
>> r~

-- 
Sincerely,
Evgenii Prokopiev


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v3] target/riscv/csr.c: Fix an access to VXSAT
  2024-10-04 13:48             ` Evgenii Prokopiev
@ 2024-10-08  0:26               ` Alistair Francis
  0 siblings, 0 replies; 8+ messages in thread
From: Alistair Francis @ 2024-10-08  0:26 UTC (permalink / raw)
  To: Evgenii Prokopiev
  Cc: Richard Henderson, alistair.francis, bmeng.cn, dbarboza,
	liwei1518, palmer, qemu-devel, qemu-riscv, zhiwei_liu

On Fri, Oct 4, 2024 at 11:48 PM Evgenii Prokopiev
<evgenii.prokopiev@syntacore.com> wrote:
>
>
>
> On 04.10.2024 16:38, Evgenii Prokopiev wrote:
> >
> >
> > On 03.10.2024 23:13, Richard Henderson wrote:
> >> On 10/2/24 01:44, Evgenii Prokopiev wrote:
> >>> The register VXSAT should be RW only to the first bit.
> >>> The remaining bits should be 0.
> >>>
> >>> The RISC-V Instruction Set Manual Volume I: Unprivileged Architecture
> >>>
> >>> The vxsat CSR has a single read-write least-significant bit (vxsat[0])
> >>> that indicates if a fixed-point instruction has had to saturate an
> >>> output
> >>> value to fit into a destination format. Bits vxsat[XLEN-1:1]
> >>> should be written as zeros.
> >>>
> >>> Signed-off-by: Evgenii Prokopiev <evgenii.prokopiev@syntacore.com>
> >>> Reviewed-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
> >>> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
> >>> ---
> >>> Changes since v2:
> >>>      - Added reviewed-by tag
> >>>   target/riscv/csr.c | 4 ++--
> >>>   1 file changed, 2 insertions(+), 2 deletions(-)
> >>
> >> New versions should not be replies to previous versions.
> >> No need to re-spin *only* to collect tags; tools can do that.
> >>
> > Hi!
> > Thanks for your explanation.
> >>>
> >>> diff --git a/target/riscv/csr.c b/target/riscv/csr.c
> >>> index bd080f92b5..69c41212e9 100644
> >>> --- a/target/riscv/csr.c
> >>> +++ b/target/riscv/csr.c
> >>> @@ -717,7 +717,7 @@ static RISCVException write_vxrm(CPURISCVState
> >>> *env, int csrno,
> >>>   static RISCVException read_vxsat(CPURISCVState *env, int csrno,
> >>>                                    target_ulong *val)
> >>>   {
> >>> -    *val = env->vxsat;
> >>> +    *val = env->vxsat & BIT(0);
> >>>       return RISCV_EXCP_NONE;
> >>>   }
> >>
> >> Nit: no need to mask on read...
> >>
> >>> @@ -727,7 +727,7 @@ static RISCVException write_vxsat(CPURISCVState
> >>> *env, int csrno,
> >>>   #if !defined(CONFIG_USER_ONLY)
> >>>       env->mstatus |= MSTATUS_VS;
> >>>   #endif
> >>> -    env->vxsat = val;
> >>> +    env->vxsat = val & BIT(0);
> >>>       return RISCV_EXCP_NONE;
> >>>   }
> >>
> >> ... because you know the value is already correct from the write.
> >>
> > Yes, we mask the value when we make a write. But this value could be
> > changed in other places. So I added a mask when reading happens too.
> > If additional verification is not required, I will delete it.

When replying you don't want to add any > characters for your response.

It probably makes sense to not mask the read, if other code changes
the value in the future the guest will probably want to know.

This is fine as is though, in the future the mask can be removed if required

Thanks!

Applied to riscv-to-apply.next

Alistair

> >>
> >> r~
>
> --
> Sincerely,
> Evgenii Prokopiev


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-10-08  0:27 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-25  9:35 [PATCH] target/riscv/csr.c: Fix an access to VXSAT Evgenii Prokopiev
2024-09-25 13:35 ` Daniel Henrique Barboza
2024-09-26  8:39   ` [PATCH v2] " Evgenii Prokopiev
2024-10-02  5:45     ` Alistair Francis
2024-10-02  8:44       ` [PATCH v3] " Evgenii Prokopiev
2024-10-03 20:13         ` Richard Henderson
     [not found]           ` <ed5cf837-e397-44b8-b719-5c5b97646d10@syntacore.com>
2024-10-04 13:48             ` Evgenii Prokopiev
2024-10-08  0:26               ` Alistair Francis

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).