[PATCH] target/loongarch/kvm: fpu save the vreg registers high 192bit

Song Gao posted 1 patch 1 year, 7 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20240514110752.989572-1-gaosong@loongson.cn
Maintainers: Song Gao <gaosong@loongson.cn>
target/loongarch/kvm/kvm.c | 6 ++++++
1 file changed, 6 insertions(+)
[PATCH] target/loongarch/kvm: fpu save the vreg registers high 192bit
Posted by Song Gao 1 year, 7 months ago
On kvm side, get_fpu/set_fpu save the vreg registers high 192bits,
but QEMU missing.

Signed-off-by: Song Gao <gaosong@loongson.cn>
---
 target/loongarch/kvm/kvm.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
index a9f9020071..0b5dbb7ed8 100644
--- a/target/loongarch/kvm/kvm.c
+++ b/target/loongarch/kvm/kvm.c
@@ -436,6 +436,9 @@ static int kvm_loongarch_get_regs_fp(CPUState *cs)
     env->fcsr0 = fpu.fcsr;
     for (i = 0; i < 32; i++) {
         env->fpr[i].vreg.UD[0] = fpu.fpr[i].val64[0];
+        env->fpr[i].vreg.UD[1] = fpu.fpr[i].val64[1];
+        env->fpr[i].vreg.UD[2] = fpu.fpr[i].val64[2];
+        env->fpr[i].vreg.UD[3] = fpu.fpr[i].val64[3];
     }
     for (i = 0; i < 8; i++) {
         env->cf[i] = fpu.fcc & 0xFF;
@@ -455,6 +458,9 @@ static int kvm_loongarch_put_regs_fp(CPUState *cs)
     fpu.fcc = 0;
     for (i = 0; i < 32; i++) {
         fpu.fpr[i].val64[0] = env->fpr[i].vreg.UD[0];
+        fpu.fpr[i].val64[1] = env->fpr[i].vreg.UD[1];
+        fpu.fpr[i].val64[2] = env->fpr[i].vreg.UD[2];
+        fpu.fpr[i].val64[3] = env->fpr[i].vreg.UD[3];
     }
 
     for (i = 0; i < 8; i++) {
-- 
2.25.1
Re: [PATCH] target/loongarch/kvm: fpu save the vreg registers high 192bit
Posted by maobibo 1 year, 7 months ago
Reviewed-by: Bibo Mao <maobibo@loongson.cn>

On 2024/5/14 下午7:07, Song Gao wrote:
> On kvm side, get_fpu/set_fpu save the vreg registers high 192bits,
> but QEMU missing.
> 
> Signed-off-by: Song Gao <gaosong@loongson.cn>
> ---
>   target/loongarch/kvm/kvm.c | 6 ++++++
>   1 file changed, 6 insertions(+)
> 
> diff --git a/target/loongarch/kvm/kvm.c b/target/loongarch/kvm/kvm.c
> index a9f9020071..0b5dbb7ed8 100644
> --- a/target/loongarch/kvm/kvm.c
> +++ b/target/loongarch/kvm/kvm.c
> @@ -436,6 +436,9 @@ static int kvm_loongarch_get_regs_fp(CPUState *cs)
>       env->fcsr0 = fpu.fcsr;
>       for (i = 0; i < 32; i++) {
>           env->fpr[i].vreg.UD[0] = fpu.fpr[i].val64[0];
> +        env->fpr[i].vreg.UD[1] = fpu.fpr[i].val64[1];
> +        env->fpr[i].vreg.UD[2] = fpu.fpr[i].val64[2];
> +        env->fpr[i].vreg.UD[3] = fpu.fpr[i].val64[3];
>       }
>       for (i = 0; i < 8; i++) {
>           env->cf[i] = fpu.fcc & 0xFF;
> @@ -455,6 +458,9 @@ static int kvm_loongarch_put_regs_fp(CPUState *cs)
>       fpu.fcc = 0;
>       for (i = 0; i < 32; i++) {
>           fpu.fpr[i].val64[0] = env->fpr[i].vreg.UD[0];
> +        fpu.fpr[i].val64[1] = env->fpr[i].vreg.UD[1];
> +        fpu.fpr[i].val64[2] = env->fpr[i].vreg.UD[2];
> +        fpu.fpr[i].val64[3] = env->fpr[i].vreg.UD[3];
>       }
>   
>       for (i = 0; i < 8; i++) {
>