From: WANG Xuerui <i.qemu@xen0n.name>
To: Song Gao <gaosong@loongson.cn>, qemu-devel@nongnu.org
Cc: Xiaojuan Yang <yangxiaojuan@loongson.cn>,
Richard Henderson <richard.henderson@linaro.org>
Subject: Re: [PATCH v14 22/26] linux-user: Add LoongArch cpu_loop support
Date: Sun, 9 Jan 2022 17:25:36 +0800 [thread overview]
Message-ID: <d1d84204-10b8-519d-d835-00759230f6cc@xen0n.name> (raw)
In-Reply-To: <20220106094200.1801206-23-gaosong@loongson.cn>
On 1/6/22 17:41, Song Gao wrote:
> Signed-off-by: Song Gao<gaosong@loongson.cn>
> Signed-off-by: Xiaojuan Yang<yangxiaojuan@loongson.cn>
> Reviewed-by: Richard Henderson<richard.henderson@linaro.org>
> ---
> configure | 3 +
> linux-user/loongarch64/cpu_loop.c | 94 +++++++++++++++++++++++++++++
> linux-user/loongarch64/target_cpu.h | 34 +++++++++++
> 3 files changed, 131 insertions(+)
> create mode 100644 linux-user/loongarch64/cpu_loop.c
> create mode 100644 linux-user/loongarch64/target_cpu.h
>
> diff --git a/configure b/configure
> index 030728d11e..93c4e5bd92 100755
> --- a/configure
> +++ b/configure
> @@ -659,6 +659,9 @@ case "$cpu" in
> mips*)
> cpu="mips" ;;
>
> + loongarch)
> + cpu="loongarch64" ;;
> +
Do you really need this? Looking at the part above setting initial value
for $cpu, you can only get here if $cpu is given on command-line, or
returned by uname on a presumably LoongArch system not defining
__loongarch64. Either would be unlikely though, and we really don't want
to turn on 64-bit code for 32-bit hosts (that don't exist at the
moment), so this case seems useless.
> ppc)
> CPU_CFLAGS="-m32" ;;
> ppc64)
> diff --git a/linux-user/loongarch64/cpu_loop.c b/linux-user/loongarch64/cpu_loop.c
> new file mode 100644
> index 0000000000..6628d215ca
> --- /dev/null
> +++ b/linux-user/loongarch64/cpu_loop.c
> @@ -0,0 +1,94 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * QEMU LoongArch user cpu_loop.
> + *
> + * Copyright (c) 2021 Loongson Technology Corporation Limited
> + */
> +
> +#include "qemu/osdep.h"
> +#include "qemu.h"
> +#include "qemu-common.h"
> +#include "user-internals.h"
> +#include "cpu_loop-common.h"
> +#include "signal-common.h"
> +
> +void cpu_loop(CPULoongArchState *env)
> +{
> + CPUState *cs = env_cpu(env);
> + int trapnr, si_code;
> + abi_long ret;
> +
> + for (;;) {
> + cpu_exec_start(cs);
> + trapnr = cpu_exec(cs);
> + cpu_exec_end(cs);
> + process_queued_cpu_work(cs);
> +
> + switch (trapnr) {
> + case EXCP_INTERRUPT:
> + /* just indicate that signals should be handled asap */
> + break;
> + case EXCP_SYSCALL:
> + env->pc += 4;
> + ret = do_syscall(env, env->gpr[11],
> + env->gpr[4], env->gpr[5],
> + env->gpr[6], env->gpr[7],
> + env->gpr[8], env->gpr[9],
> + -1, -1);
> + if (ret == -QEMU_ERESTARTSYS) {
> + env->pc -= 4;
> + break;
> + }
> + if (ret == -QEMU_ESIGRETURN) {
> + /*
> + * Returning from a successful sigreturn syscall.
> + * Avoid clobbering register state.
> + */
> + break;
> + }
> + env->gpr[4] = ret;
> + break;
> + case EXCP_INE:
> + force_sig_fault(TARGET_SIGILL, 0, env->pc);
> + break;
> + case EXCP_FPE:
> + si_code = TARGET_FPE_FLTUNK;
> + if (GET_FP_CAUSE(env->fcsr0) & FP_INVALID) {
> + si_code = TARGET_FPE_FLTINV;
> + } else if (GET_FP_CAUSE(env->fcsr0) & FP_DIV0) {
> + si_code = TARGET_FPE_FLTDIV;
> + } else if (GET_FP_CAUSE(env->fcsr0) & FP_OVERFLOW) {
> + si_code = TARGET_FPE_FLTOVF;
> + } else if (GET_FP_CAUSE(env->fcsr0) & FP_UNDERFLOW) {
> + si_code = TARGET_FPE_FLTUND;
> + } else if (GET_FP_CAUSE(env->fcsr0) & FP_INEXACT) {
> + si_code = TARGET_FPE_FLTRES;
> + }
> + force_sig_fault(TARGET_SIGFPE, si_code, env->pc);
> + break;
> + case EXCP_DEBUG:
> + case EXCP_BREAK:
> + force_sig_fault(TARGET_SIGTRAP, TARGET_TRAP_BRKPT, env->pc);
> + break;
> + case EXCP_ATOMIC:
> + cpu_exec_step_atomic(cs);
> + break;
> + default:
> + EXCP_DUMP(env, "qemu: unhandled CPU exception 0x%x - aborting\n",
> + trapnr);
> + exit(EXIT_FAILURE);
> + }
> + process_pending_signals(env);
> + }
> +}
> +
> +void target_cpu_copy_regs(CPUArchState *env, struct target_pt_regs *regs)
> +{
> + int i;
> +
> + for (i = 0; i < 32; i++) {
> + env->gpr[i] = regs->regs[i];
> + }
> + env->pc = regs->csr.era;
> +
> +}
> diff --git a/linux-user/loongarch64/target_cpu.h b/linux-user/loongarch64/target_cpu.h
> new file mode 100644
> index 0000000000..a29af66156
> --- /dev/null
> +++ b/linux-user/loongarch64/target_cpu.h
> @@ -0,0 +1,34 @@
> +/* SPDX-License-Identifier: GPL-2.0-or-later */
> +/*
> + * LoongArch specific CPU ABI and functions for linux-user
> + *
> + * Copyright (c) 2021 Loongson Technology Corporation Limited
> + */
> +
> +#ifndef LOONGARCH_TARGET_CPU_H
> +#define LOONGARCH_TARGET_CPU_H
> +
> +static inline void cpu_clone_regs_child(CPULoongArchState *env,
> + target_ulong newsp, unsigned flags)
> +{
> + if (newsp) {
> + env->gpr[3] = newsp;
> + }
> + env->gpr[4] = 0;
> +}
> +
> +static inline void cpu_clone_regs_parent(CPULoongArchState *env,
> + unsigned flags)
> +{
> +}
> +
> +static inline void cpu_set_tls(CPULoongArchState *env, target_ulong newtls)
> +{
> + env->gpr[2] = newtls;
> +}
> +
> +static inline abi_ulong get_sp_from_cpustate(CPULoongArchState *state)
> +{
> + return state->gpr[3];
> +}
> +#endif
next prev parent reply other threads:[~2022-01-09 9:33 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-06 9:41 [PATCH v14 00/26] Add LoongArch linux-user emulation support Song Gao
2022-01-06 9:41 ` [PATCH v14 01/26] target/loongarch: Add README Song Gao
2022-01-09 9:24 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 02/26] target/loongarch: Add core definition Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-09 18:49 ` Richard Henderson
2022-01-10 12:34 ` gaosong
2022-01-10 15:20 ` WANG Xuerui
2022-01-10 13:00 ` gaosong
2022-01-10 15:11 ` WANG Xuerui
2022-01-12 9:28 ` gaosong
2022-01-12 10:17 ` gaosong
2022-01-12 10:26 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 03/26] target/loongarch: Add main translation routines Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 04/26] target/loongarch: Add fixed point arithmetic instruction translation Song Gao
2022-01-06 9:41 ` [PATCH v14 05/26] target/loongarch: Add fixed point shift " Song Gao
2022-01-06 9:41 ` [PATCH v14 06/26] target/loongarch: Add fixed point bit " Song Gao
2022-01-06 9:41 ` [PATCH v14 07/26] target/loongarch: Add fixed point load/store " Song Gao
2022-01-06 9:41 ` [PATCH v14 08/26] target/loongarch: Add fixed point atomic " Song Gao
2022-01-06 9:41 ` [PATCH v14 09/26] target/loongarch: Add fixed point extra " Song Gao
2022-01-06 9:41 ` [PATCH v14 10/26] target/loongarch: Add floating point arithmetic " Song Gao
2022-01-06 9:41 ` [PATCH v14 11/26] target/loongarch: Add floating point comparison " Song Gao
2022-01-06 9:41 ` [PATCH v14 12/26] target/loongarch: Add floating point conversion " Song Gao
2022-01-06 9:41 ` [PATCH v14 13/26] target/loongarch: Add floating point move " Song Gao
2022-01-06 9:41 ` [PATCH v14 14/26] target/loongarch: Add floating point load/store " Song Gao
2022-01-06 9:41 ` [PATCH v14 15/26] target/loongarch: Add branch " Song Gao
2022-01-06 9:41 ` [PATCH v14 16/26] target/loongarch: Add disassembler Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-09 18:51 ` Richard Henderson
2022-01-06 9:41 ` [PATCH v14 17/26] linux-user: Add LoongArch generic header files Song Gao
2022-01-06 9:41 ` [PATCH v14 18/26] linux-user: Add LoongArch specific structures Song Gao
2022-01-07 4:29 ` Richard Henderson
2022-01-06 9:41 ` [PATCH v14 19/26] linux-user: Add LoongArch signal support Song Gao
2022-01-07 4:58 ` Richard Henderson
2022-01-09 9:25 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 20/26] linux-user: Add LoongArch elf support Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 21/26] linux-user: Add LoongArch syscall support Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 22/26] linux-user: Add LoongArch cpu_loop support Song Gao
2022-01-09 9:25 ` WANG Xuerui [this message]
2022-01-06 9:41 ` [PATCH v14 23/26] default-configs: Add loongarch linux-user support Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 24/26] target/loongarch: Add target build suport Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-06 9:41 ` [PATCH v14 25/26] target/loongarch: 'make check-tcg' support Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-06 9:42 ` [PATCH v14 26/26] scripts: add loongarch64 binfmt config Song Gao
2022-01-09 9:25 ` WANG Xuerui
2022-01-07 5:01 ` [PATCH v14 00/26] Add LoongArch linux-user emulation support Richard Henderson
2022-01-07 7:59 ` gaosong
2022-01-09 5:09 ` WANG Xuerui
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d1d84204-10b8-519d-d835-00759230f6cc@xen0n.name \
--to=i.qemu@xen0n.name \
--cc=gaosong@loongson.cn \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=yangxiaojuan@loongson.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).