All of lore.kernel.org
 help / color / mirror / Atom feed
From: WANG Xuerui <git@xen0n.name>
To: qemu-devel@nongnu.org
Cc: "Peter Maydell" <peter.maydell@linaro.org>,
	"XiaoJuan Yang" <yangxiaojuan@loongson.cn>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Philippe Mathieu-Daudé" <f4bug@amsat.org>,
	"Laurent Vivier" <laurent@vivier.eu>,
	"WANG Xuerui" <git@xen0n.name>,
	"Alex Bennée" <alex.bennee@linaro.org>,
	"Song Gao" <gaosong@loongson.cn>
Subject: [PATCH v10 06/31] tcg/loongarch64: Define the operand constraints
Date: Wed, 15 Dec 2021 20:51:11 +0800	[thread overview]
Message-ID: <20211215125136.3449717-7-git@xen0n.name> (raw)
In-Reply-To: <20211215125136.3449717-1-git@xen0n.name>

Signed-off-by: WANG Xuerui <git@xen0n.name>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
 tcg/loongarch64/tcg-target-con-str.h | 28 +++++++++++++++
 tcg/loongarch64/tcg-target.c.inc     | 52 ++++++++++++++++++++++++++++
 2 files changed, 80 insertions(+)
 create mode 100644 tcg/loongarch64/tcg-target-con-str.h

diff --git a/tcg/loongarch64/tcg-target-con-str.h b/tcg/loongarch64/tcg-target-con-str.h
new file mode 100644
index 0000000000..c3986a4fd4
--- /dev/null
+++ b/tcg/loongarch64/tcg-target-con-str.h
@@ -0,0 +1,28 @@
+/* SPDX-License-Identifier: MIT */
+/*
+ * Define LoongArch target-specific operand constraints.
+ *
+ * Copyright (c) 2021 WANG Xuerui <git@xen0n.name>
+ *
+ * Based on tcg/riscv/tcg-target-con-str.h
+ *
+ * Copyright (c) 2021 Linaro
+ */
+
+/*
+ * Define constraint letters for register sets:
+ * REGS(letter, register_mask)
+ */
+REGS('r', ALL_GENERAL_REGS)
+REGS('L', ALL_GENERAL_REGS & ~SOFTMMU_RESERVE_REGS)
+
+/*
+ * Define constraint letters for constants:
+ * CONST(letter, TCG_CT_CONST_* bit set)
+ */
+CONST('I', TCG_CT_CONST_S12)
+CONST('N', TCG_CT_CONST_N12)
+CONST('U', TCG_CT_CONST_U12)
+CONST('Z', TCG_CT_CONST_ZERO)
+CONST('C', TCG_CT_CONST_C12)
+CONST('W', TCG_CT_CONST_WSZ)
diff --git a/tcg/loongarch64/tcg-target.c.inc b/tcg/loongarch64/tcg-target.c.inc
index 653ef0a4bb..1c1b798c06 100644
--- a/tcg/loongarch64/tcg-target.c.inc
+++ b/tcg/loongarch64/tcg-target.c.inc
@@ -116,3 +116,55 @@ static const int tcg_target_call_oarg_regs[] = {
     TCG_REG_A0,
     TCG_REG_A1,
 };
+
+#define TCG_CT_CONST_ZERO  0x100
+#define TCG_CT_CONST_S12   0x200
+#define TCG_CT_CONST_N12   0x400
+#define TCG_CT_CONST_U12   0x800
+#define TCG_CT_CONST_C12   0x1000
+#define TCG_CT_CONST_WSZ   0x2000
+
+#define ALL_GENERAL_REGS      MAKE_64BIT_MASK(0, 32)
+/*
+ * For softmmu, we need to avoid conflicts with the first 5
+ * argument registers to call the helper.  Some of these are
+ * also used for the tlb lookup.
+ */
+#ifdef CONFIG_SOFTMMU
+#define SOFTMMU_RESERVE_REGS  MAKE_64BIT_MASK(TCG_REG_A0, 5)
+#else
+#define SOFTMMU_RESERVE_REGS  0
+#endif
+
+
+static inline tcg_target_long sextreg(tcg_target_long val, int pos, int len)
+{
+    return sextract64(val, pos, len);
+}
+
+/* test if a constant matches the constraint */
+static bool tcg_target_const_match(int64_t val, TCGType type, int ct)
+{
+    if (ct & TCG_CT_CONST) {
+        return true;
+    }
+    if ((ct & TCG_CT_CONST_ZERO) && val == 0) {
+        return true;
+    }
+    if ((ct & TCG_CT_CONST_S12) && val == sextreg(val, 0, 12)) {
+        return true;
+    }
+    if ((ct & TCG_CT_CONST_N12) && -val == sextreg(-val, 0, 12)) {
+        return true;
+    }
+    if ((ct & TCG_CT_CONST_U12) && val >= 0 && val <= 0xfff) {
+        return true;
+    }
+    if ((ct & TCG_CT_CONST_C12) && ~val >= 0 && ~val <= 0xfff) {
+        return true;
+    }
+    if ((ct & TCG_CT_CONST_WSZ) && val == (type == TCG_TYPE_I32 ? 32 : 64)) {
+        return true;
+    }
+    return false;
+}
-- 
2.34.0



  parent reply	other threads:[~2021-12-15 13:19 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-15 12:51 [PATCH v10 00/31] LoongArch64 port of QEMU TCG WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 01/31] elf: Add machine type value for LoongArch WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 02/31] MAINTAINERS: Add tcg/loongarch64 entry with myself as maintainer WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 03/31] tcg/loongarch64: Add the tcg-target.h file WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 04/31] tcg/loongarch64: Add generated instruction opcodes and encoding helpers WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 05/31] tcg/loongarch64: Add register names, allocation order and input/output sets WANG Xuerui
2021-12-15 12:51 ` WANG Xuerui [this message]
2021-12-15 12:51 ` [PATCH v10 07/31] tcg/loongarch64: Implement necessary relocation operations WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 08/31] tcg/loongarch64: Implement the memory barrier op WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 09/31] tcg/loongarch64: Implement tcg_out_mov and tcg_out_movi WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 10/31] tcg/loongarch64: Implement goto_ptr WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 11/31] tcg/loongarch64: Implement sign-/zero-extension ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 12/31] tcg/loongarch64: Implement not/and/or/xor/nor/andc/orc ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 13/31] tcg/loongarch64: Implement deposit/extract ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 14/31] tcg/loongarch64: Implement bswap{16,32,64} ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 15/31] tcg/loongarch64: Implement clz/ctz ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 16/31] tcg/loongarch64: Implement shl/shr/sar/rotl/rotr ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 17/31] tcg/loongarch64: Implement add/sub ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 18/31] tcg/loongarch64: Implement mul/mulsh/muluh/div/divu/rem/remu ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 19/31] tcg/loongarch64: Implement br/brcond ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 20/31] tcg/loongarch64: Implement setcond ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 21/31] tcg/loongarch64: Implement tcg_out_call WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 22/31] tcg/loongarch64: Implement simple load/store ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 23/31] tcg/loongarch64: Add softmmu load/store helpers, implement qemu_ld/qemu_st ops WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 24/31] tcg/loongarch64: Implement tcg_target_qemu_prologue WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 25/31] tcg/loongarch64: Implement exit_tb/goto_tb WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 26/31] tcg/loongarch64: Implement tcg_target_init WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 27/31] tcg/loongarch64: Register the JIT WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 28/31] common-user: Add safe syscall handling for loongarch64 hosts WANG Xuerui
2021-12-15 17:30   ` Richard Henderson
2021-12-15 12:51 ` [PATCH v10 29/31] linux-user: Implement CPU-specific signal handler " WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 30/31] configure, meson.build: Mark support " WANG Xuerui
2021-12-15 12:51 ` [PATCH v10 31/31] tests/docker: Add gentoo-loongarch64-cross image and run cross builds in GitLab 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=20211215125136.3449717-7-git@xen0n.name \
    --to=git@xen0n.name \
    --cc=alex.bennee@linaro.org \
    --cc=f4bug@amsat.org \
    --cc=gaosong@loongson.cn \
    --cc=laurent@vivier.eu \
    --cc=peter.maydell@linaro.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.