1
The following changes since commit 848a6caa88b9f082c89c9b41afa975761262981d:
1
The following changes since commit b0dd9a7d6dd15a6898e9c585b521e6bec79b25aa:
2
2
3
Merge tag 'migration-20230602-pull-request' of https://gitlab.com/juan.quintela/qemu into staging (2023-06-02 17:33:29 -0700)
3
Open 8.2 development tree (2023-08-22 07:14:07 -0700)
4
4
5
are available in the Git repository at:
5
are available in the Git repository at:
6
6
7
https://gitlab.com/gaosong/qemu.git tags/pull-loongarch-20230605
7
https://gitlab.com/gaosong/qemu.git tags/pull-loongarch-20230824
8
8
9
for you to fetch changes up to 8555ddc671203969b0e6eb651e538d02a9a79b3a:
9
for you to fetch changes up to 3f6bec4a9f7c159d32d49f6df5c2c3d587b953b9:
10
10
11
hw/intc/loongarch_ipi: Bring back all 4 IPI mailboxes (2023-06-05 11:08:55 +0800)
11
hw/loongarch: Fix ACPI processor id off-by-one error (2023-08-24 16:58:16 +0800)
12
12
13
----------------------------------------------------------------
13
----------------------------------------------------------------
14
Fixes Coverity CID: 1512452, 1512453
14
pull-loongarch-20230824
15
Fixes: 78464f023b54 ("hw/loongarch/virt: Modify ipi as percpu device")
15
16
* Add la32 & va32 support for loongarch64-softmmu;
17
* Cleanups in preparation of loongarch32 support;
18
* Add some checks before translating instructions;
19
* Split fcc register to fcc0-7 in gdbstub;
20
* Fix ACPI processor id off-by-one error;
21
* Implement get_arch_id callback;
22
* Fix edge triggered irq handling.
16
23
17
----------------------------------------------------------------
24
----------------------------------------------------------------
18
Jiaxun Yang (1):
25
Bibo Mao (2):
19
hw/intc/loongarch_ipi: Bring back all 4 IPI mailboxes
26
target/loongarch: cpu: Implement get_arch_id callback
27
hw/intc/loongarch_pch: fix edge triggered irq handling
20
28
21
hw/intc/loongarch_ipi.c | 6 +++---
29
Jiajie Chen (16):
22
include/hw/intc/loongarch_ipi.h | 4 +++-
30
target/loongarch: Add function to check current arch
23
2 files changed, 6 insertions(+), 4 deletions(-)
31
target/loongarch: Add new object class for loongarch32 cpus
32
target/loongarch: Add GDB support for loongarch32 mode
33
target/loongarch: Support LoongArch32 TLB entry
34
target/loongarch: Support LoongArch32 DMW
35
target/loongarch: Support LoongArch32 VPPN
36
target/loongarch: Add LA64 & VA32 to DisasContext
37
target/loongarch: Extract make_address_x() helper
38
target/loongarch: Extract make_address_i() helper
39
target/loongarch: Extract make_address_pc() helper
40
target/loongarch: Extract set_pc() helper
41
target/loongarch: Truncate high 32 bits of address in VA32 mode
42
target/loongarch: Sign extend results in VA32 mode
43
target/loongarch: Add LoongArch32 cpu la132
44
target/loongarch: Split fcc register to fcc0-7 in gdbstub
45
hw/loongarch: Fix ACPI processor id off-by-one error
46
47
Philippe Mathieu-Daudé (4):
48
target/loongarch: Log I/O write accesses to CSR registers
49
target/loongarch: Remove duplicated disas_set_info assignment
50
target/loongarch: Introduce abstract TYPE_LOONGARCH64_CPU
51
target/loongarch: Extract 64-bit specifics to loongarch64_cpu_class_init
52
53
Song Gao (9):
54
target/loongarch: Fix loongarch_la464_initfn() misses setting LSPW
55
target/loongarch: Add a check parameter to the TRANS macro
56
target/loongarch: Add avail_64 to check la64-only instructions
57
hw/loongarch: Remove restriction of la464 cores in the virt machine
58
target/loongarch: Add avail_FP/FP_SP/FP_DP to check fpu instructions
59
target/loongarch: Add avail_LSPW to check LSPW instructions
60
target/loongarch: Add avail_LAM to check atomic instructions
61
target/loongarch: Add avail_LSX to check LSX instructions
62
target/loongarch: Add avail_IOCSR to check iocsr instructions
63
64
configs/targets/loongarch64-softmmu.mak | 2 +-
65
gdb-xml/loongarch-base32.xml | 45 +
66
gdb-xml/loongarch-fpu.xml | 9 +-
67
hw/intc/loongarch_pch_pic.c | 7 +-
68
hw/loongarch/acpi-build.c | 2 +-
69
hw/loongarch/virt.c | 7 +-
70
target/loongarch/cpu-csr.h | 22 +-
71
target/loongarch/cpu.c | 110 +-
72
target/loongarch/cpu.h | 35 +
73
target/loongarch/gdbstub.c | 50 +-
74
target/loongarch/insn_trans/trans_arith.c.inc | 98 +-
75
target/loongarch/insn_trans/trans_atomic.c.inc | 85 +-
76
target/loongarch/insn_trans/trans_bit.c.inc | 56 +-
77
target/loongarch/insn_trans/trans_branch.c.inc | 27 +-
78
target/loongarch/insn_trans/trans_extra.c.inc | 24 +-
79
target/loongarch/insn_trans/trans_farith.c.inc | 96 +-
80
target/loongarch/insn_trans/trans_fcmp.c.inc | 8 +
81
target/loongarch/insn_trans/trans_fcnv.c.inc | 56 +-
82
target/loongarch/insn_trans/trans_fmemory.c.inc | 62 +-
83
target/loongarch/insn_trans/trans_fmov.c.inc | 52 +-
84
target/loongarch/insn_trans/trans_lsx.c.inc | 1520 +++++++++++---------
85
target/loongarch/insn_trans/trans_memory.c.inc | 118 +-
86
target/loongarch/insn_trans/trans_privileged.c.inc | 24 +-
87
target/loongarch/insn_trans/trans_shift.c.inc | 34 +-
88
target/loongarch/op_helper.c | 4 +-
89
target/loongarch/tlb_helper.c | 66 +-
90
target/loongarch/translate.c | 46 +
91
target/loongarch/translate.h | 19 +-
92
28 files changed, 1591 insertions(+), 1093 deletions(-)
93
create mode 100644 gdb-xml/loongarch-base32.xml
94
95
diff view generated by jsdifflib
New patch
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
1
2
3
Various CSR registers have Read/Write fields. We might
4
want to see guest trying to change such registers.
5
6
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
Reviewed-by: Song Gao <gaosong@loongson.cn>
8
Message-Id: <20230821125959.28666-2-philmd@linaro.org>
9
Signed-off-by: Song Gao <gaosong@loongson.cn>
10
---
11
target/loongarch/cpu.c | 2 ++
12
1 file changed, 2 insertions(+)
13
14
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
15
index XXXXXXX..XXXXXXX 100644
16
--- a/target/loongarch/cpu.c
17
+++ b/target/loongarch/cpu.c
18
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_realizefn(DeviceState *dev, Error **errp)
19
static void loongarch_qemu_write(void *opaque, hwaddr addr,
20
uint64_t val, unsigned size)
21
{
22
+ qemu_log_mask(LOG_UNIMP, "[%s]: Unimplemented reg 0x%" HWADDR_PRIx "\n",
23
+ __func__, addr);
24
}
25
26
static uint64_t loongarch_qemu_read(void *opaque, hwaddr addr, unsigned size)
27
--
28
2.39.1
29
30
diff view generated by jsdifflib
New patch
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
1
2
3
Commit 228021f05e ("target/loongarch: Add core definition") sets
4
disas_set_info to loongarch_cpu_disas_set_info. Probably due to
5
a failed git-rebase, commit ca61e75071 ("target/loongarch: Add gdb
6
support") also sets it to the same value. Remove the duplication.
7
8
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
9
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10
Reviewed-by: Song Gao <gaosong@loongson.cn>
11
Message-Id: <20230821125959.28666-3-philmd@linaro.org>
12
Signed-off-by: Song Gao <gaosong@loongson.cn>
13
---
14
target/loongarch/cpu.c | 1 -
15
1 file changed, 1 deletion(-)
16
17
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/loongarch/cpu.c
20
+++ b/target/loongarch/cpu.c
21
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_class_init(ObjectClass *c, void *data)
22
cc->disas_set_info = loongarch_cpu_disas_set_info;
23
cc->gdb_read_register = loongarch_cpu_gdb_read_register;
24
cc->gdb_write_register = loongarch_cpu_gdb_write_register;
25
- cc->disas_set_info = loongarch_cpu_disas_set_info;
26
cc->gdb_num_core_regs = 35;
27
cc->gdb_core_xml_file = "loongarch-base64.xml";
28
cc->gdb_stop_before_watchpoint = true;
29
--
30
2.39.1
31
32
diff view generated by jsdifflib
New patch
1
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
2
Signed-off-by: Song Gao <gaosong@loongson.cn>
3
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Message-ID: <20230817093121.1053890-11-gaosong@loongson.cn>
5
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
6
Message-Id: <20230821125959.28666-4-philmd@linaro.org>
7
---
8
target/loongarch/cpu.c | 1 +
9
1 file changed, 1 insertion(+)
1
10
11
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
12
index XXXXXXX..XXXXXXX 100644
13
--- a/target/loongarch/cpu.c
14
+++ b/target/loongarch/cpu.c
15
@@ -XXX,XX +XXX,XX @@ static void loongarch_la464_initfn(Object *obj)
16
data = FIELD_DP32(data, CPUCFG2, LSX, 1),
17
data = FIELD_DP32(data, CPUCFG2, LLFTP, 1);
18
data = FIELD_DP32(data, CPUCFG2, LLFTP_VER, 1);
19
+ data = FIELD_DP32(data, CPUCFG2, LSPW, 1);
20
data = FIELD_DP32(data, CPUCFG2, LAM, 1);
21
env->cpucfg[2] = data;
22
23
--
24
2.39.1
25
26
diff view generated by jsdifflib
New patch
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
1
2
3
In preparation of introducing TYPE_LOONGARCH32_CPU, introduce
4
an abstract TYPE_LOONGARCH64_CPU.
5
6
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
8
Message-Id: <20230821125959.28666-5-philmd@linaro.org>
9
Signed-off-by: Song Gao <gaosong@loongson.cn>
10
---
11
target/loongarch/cpu.c | 12 +++++++++---
12
target/loongarch/cpu.h | 1 +
13
2 files changed, 10 insertions(+), 3 deletions(-)
14
15
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
16
index XXXXXXX..XXXXXXX 100644
17
--- a/target/loongarch/cpu.c
18
+++ b/target/loongarch/cpu.c
19
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_class_init(ObjectClass *c, void *data)
20
#endif
21
}
22
23
-#define DEFINE_LOONGARCH_CPU_TYPE(model, initfn) \
24
+#define DEFINE_LOONGARCH_CPU_TYPE(size, model, initfn) \
25
{ \
26
- .parent = TYPE_LOONGARCH_CPU, \
27
+ .parent = TYPE_LOONGARCH##size##_CPU, \
28
.instance_init = initfn, \
29
.name = LOONGARCH_CPU_TYPE_NAME(model), \
30
}
31
@@ -XXX,XX +XXX,XX @@ static const TypeInfo loongarch_cpu_type_infos[] = {
32
.class_size = sizeof(LoongArchCPUClass),
33
.class_init = loongarch_cpu_class_init,
34
},
35
- DEFINE_LOONGARCH_CPU_TYPE("la464", loongarch_la464_initfn),
36
+ {
37
+ .name = TYPE_LOONGARCH64_CPU,
38
+ .parent = TYPE_LOONGARCH_CPU,
39
+
40
+ .abstract = true,
41
+ },
42
+ DEFINE_LOONGARCH_CPU_TYPE(64, "la464", loongarch_la464_initfn),
43
};
44
45
DEFINE_TYPES(loongarch_cpu_type_infos)
46
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
47
index XXXXXXX..XXXXXXX 100644
48
--- a/target/loongarch/cpu.h
49
+++ b/target/loongarch/cpu.h
50
@@ -XXX,XX +XXX,XX @@ struct ArchCPU {
51
};
52
53
#define TYPE_LOONGARCH_CPU "loongarch-cpu"
54
+#define TYPE_LOONGARCH64_CPU "loongarch64-cpu"
55
56
OBJECT_DECLARE_CPU_TYPE(LoongArchCPU, LoongArchCPUClass,
57
LOONGARCH_CPU)
58
--
59
2.39.1
60
61
diff view generated by jsdifflib
New patch
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
1
2
3
Extract loongarch64 specific code from loongarch_cpu_class_init()
4
to a new loongarch64_cpu_class_init().
5
6
In preparation of supporting loongarch32 cores, rename these
7
functions using the '64' suffix.
8
9
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Message-Id: <20230821125959.28666-6-philmd@linaro.org>
12
Signed-off-by: Song Gao <gaosong@loongson.cn>
13
---
14
target/loongarch/cpu.c | 23 +++++++++++++++--------
15
1 file changed, 15 insertions(+), 8 deletions(-)
16
17
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/loongarch/cpu.c
20
+++ b/target/loongarch/cpu.c
21
@@ -XXX,XX +XXX,XX @@ static const struct SysemuCPUOps loongarch_sysemu_ops = {
22
};
23
#endif
24
25
-static gchar *loongarch_gdb_arch_name(CPUState *cs)
26
-{
27
- return g_strdup("loongarch64");
28
-}
29
-
30
static void loongarch_cpu_class_init(ObjectClass *c, void *data)
31
{
32
LoongArchCPUClass *lacc = LOONGARCH_CPU_CLASS(c);
33
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_class_init(ObjectClass *c, void *data)
34
cc->disas_set_info = loongarch_cpu_disas_set_info;
35
cc->gdb_read_register = loongarch_cpu_gdb_read_register;
36
cc->gdb_write_register = loongarch_cpu_gdb_write_register;
37
- cc->gdb_num_core_regs = 35;
38
- cc->gdb_core_xml_file = "loongarch-base64.xml";
39
cc->gdb_stop_before_watchpoint = true;
40
- cc->gdb_arch_name = loongarch_gdb_arch_name;
41
42
#ifdef CONFIG_TCG
43
cc->tcg_ops = &loongarch_tcg_ops;
44
#endif
45
}
46
47
+static gchar *loongarch64_gdb_arch_name(CPUState *cs)
48
+{
49
+ return g_strdup("loongarch64");
50
+}
51
+
52
+static void loongarch64_cpu_class_init(ObjectClass *c, void *data)
53
+{
54
+ CPUClass *cc = CPU_CLASS(c);
55
+
56
+ cc->gdb_num_core_regs = 35;
57
+ cc->gdb_core_xml_file = "loongarch-base64.xml";
58
+ cc->gdb_arch_name = loongarch64_gdb_arch_name;
59
+}
60
+
61
#define DEFINE_LOONGARCH_CPU_TYPE(size, model, initfn) \
62
{ \
63
.parent = TYPE_LOONGARCH##size##_CPU, \
64
@@ -XXX,XX +XXX,XX @@ static const TypeInfo loongarch_cpu_type_infos[] = {
65
.parent = TYPE_LOONGARCH_CPU,
66
67
.abstract = true,
68
+ .class_init = loongarch64_cpu_class_init,
69
},
70
DEFINE_LOONGARCH_CPU_TYPE(64, "la464", loongarch_la464_initfn),
71
};
72
--
73
2.39.1
74
75
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
Add is_la64 function to check if the current cpucfg[1].arch equals to
4
2(LA64).
5
6
Signed-off-by: Jiajie Chen <c@jia.je>
7
Co-authored-by: Richard Henderson <richard.henderson@linaro.org>
8
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
Signed-off-by: Song Gao <gaosong@loongson.cn>
10
Message-ID: <20230817093121.1053890-2-gaosong@loongson.cn>
11
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
12
Message-Id: <20230821125959.28666-7-philmd@linaro.org>
13
---
14
target/loongarch/cpu.h | 10 ++++++++++
15
1 file changed, 10 insertions(+)
16
17
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/loongarch/cpu.h
20
+++ b/target/loongarch/cpu.h
21
@@ -XXX,XX +XXX,XX @@ FIELD(CPUCFG1, HP, 24, 1)
22
FIELD(CPUCFG1, IOCSR_BRD, 25, 1)
23
FIELD(CPUCFG1, MSG_INT, 26, 1)
24
25
+/* cpucfg[1].arch */
26
+#define CPUCFG1_ARCH_LA32R 0
27
+#define CPUCFG1_ARCH_LA32 1
28
+#define CPUCFG1_ARCH_LA64 2
29
+
30
/* cpucfg[2] bits */
31
FIELD(CPUCFG2, FP, 0, 1)
32
FIELD(CPUCFG2, FP_SP, 1, 1)
33
@@ -XXX,XX +XXX,XX @@ static inline int cpu_mmu_index(CPULoongArchState *env, bool ifetch)
34
#endif
35
}
36
37
+static inline bool is_la64(CPULoongArchState *env)
38
+{
39
+ return FIELD_EX32(env->cpucfg[1], CPUCFG1, ARCH) == CPUCFG1_ARCH_LA64;
40
+}
41
+
42
/*
43
* LoongArch CPUs hardware flags.
44
*/
45
--
46
2.39.1
47
48
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
Add object class stub for future loongarch32 cpus.
4
5
Signed-off-by: Jiajie Chen <c@jia.je>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Signed-off-by: Song Gao <gaosong@loongson.cn>
8
Message-ID: <20230817093121.1053890-3-gaosong@loongson.cn>
9
[Rebased on TYPE_LOONGARCH64_CPU introduction]
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Message-Id: <20230821125959.28666-8-philmd@linaro.org>
12
---
13
target/loongarch/cpu.c | 11 +++++++++++
14
target/loongarch/cpu.h | 1 +
15
2 files changed, 12 insertions(+)
16
17
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/loongarch/cpu.c
20
+++ b/target/loongarch/cpu.c
21
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_class_init(ObjectClass *c, void *data)
22
#endif
23
}
24
25
+static void loongarch32_cpu_class_init(ObjectClass *c, void *data)
26
+{
27
+}
28
+
29
static gchar *loongarch64_gdb_arch_name(CPUState *cs)
30
{
31
return g_strdup("loongarch64");
32
@@ -XXX,XX +XXX,XX @@ static const TypeInfo loongarch_cpu_type_infos[] = {
33
.class_size = sizeof(LoongArchCPUClass),
34
.class_init = loongarch_cpu_class_init,
35
},
36
+ {
37
+ .name = TYPE_LOONGARCH32_CPU,
38
+ .parent = TYPE_LOONGARCH_CPU,
39
+
40
+ .abstract = true,
41
+ .class_init = loongarch32_cpu_class_init,
42
+ },
43
{
44
.name = TYPE_LOONGARCH64_CPU,
45
.parent = TYPE_LOONGARCH_CPU,
46
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
47
index XXXXXXX..XXXXXXX 100644
48
--- a/target/loongarch/cpu.h
49
+++ b/target/loongarch/cpu.h
50
@@ -XXX,XX +XXX,XX @@ struct ArchCPU {
51
};
52
53
#define TYPE_LOONGARCH_CPU "loongarch-cpu"
54
+#define TYPE_LOONGARCH32_CPU "loongarch32-cpu"
55
#define TYPE_LOONGARCH64_CPU "loongarch64-cpu"
56
57
OBJECT_DECLARE_CPU_TYPE(LoongArchCPU, LoongArchCPUClass,
58
--
59
2.39.1
60
61
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
GPRs and PC are 32-bit wide in loongarch32 mode.
4
5
Signed-off-by: Jiajie Chen <c@jia.je>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Signed-off-by: Song Gao <gaosong@loongson.cn>
8
Message-ID: <20230817093121.1053890-4-gaosong@loongson.cn>
9
[PMD: Rebased, set gdb_num_core_regs]
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Message-Id: <20230821125959.28666-9-philmd@linaro.org>
12
---
13
configs/targets/loongarch64-softmmu.mak | 2 +-
14
gdb-xml/loongarch-base32.xml | 45 +++++++++++++++++++++++++
15
target/loongarch/cpu.c | 10 ++++++
16
target/loongarch/gdbstub.c | 32 ++++++++++++++----
17
4 files changed, 81 insertions(+), 8 deletions(-)
18
create mode 100644 gdb-xml/loongarch-base32.xml
19
20
diff --git a/configs/targets/loongarch64-softmmu.mak b/configs/targets/loongarch64-softmmu.mak
21
index XXXXXXX..XXXXXXX 100644
22
--- a/configs/targets/loongarch64-softmmu.mak
23
+++ b/configs/targets/loongarch64-softmmu.mak
24
@@ -XXX,XX +XXX,XX @@
25
TARGET_ARCH=loongarch64
26
TARGET_BASE_ARCH=loongarch
27
TARGET_SUPPORTS_MTTCG=y
28
-TARGET_XML_FILES= gdb-xml/loongarch-base64.xml gdb-xml/loongarch-fpu.xml
29
+TARGET_XML_FILES= gdb-xml/loongarch-base32.xml gdb-xml/loongarch-base64.xml gdb-xml/loongarch-fpu.xml
30
TARGET_NEED_FDT=y
31
diff --git a/gdb-xml/loongarch-base32.xml b/gdb-xml/loongarch-base32.xml
32
new file mode 100644
33
index XXXXXXX..XXXXXXX
34
--- /dev/null
35
+++ b/gdb-xml/loongarch-base32.xml
36
@@ -XXX,XX +XXX,XX @@
37
+<?xml version="1.0"?>
38
+<!-- Copyright (C) 2022 Free Software Foundation, Inc.
39
+
40
+ Copying and distribution of this file, with or without modification,
41
+ are permitted in any medium without royalty provided the copyright
42
+ notice and this notice are preserved. -->
43
+
44
+<!DOCTYPE feature SYSTEM "gdb-target.dtd">
45
+<feature name="org.gnu.gdb.loongarch.base">
46
+ <reg name="r0" bitsize="32" type="uint32" group="general"/>
47
+ <reg name="r1" bitsize="32" type="code_ptr" group="general"/>
48
+ <reg name="r2" bitsize="32" type="data_ptr" group="general"/>
49
+ <reg name="r3" bitsize="32" type="data_ptr" group="general"/>
50
+ <reg name="r4" bitsize="32" type="uint32" group="general"/>
51
+ <reg name="r5" bitsize="32" type="uint32" group="general"/>
52
+ <reg name="r6" bitsize="32" type="uint32" group="general"/>
53
+ <reg name="r7" bitsize="32" type="uint32" group="general"/>
54
+ <reg name="r8" bitsize="32" type="uint32" group="general"/>
55
+ <reg name="r9" bitsize="32" type="uint32" group="general"/>
56
+ <reg name="r10" bitsize="32" type="uint32" group="general"/>
57
+ <reg name="r11" bitsize="32" type="uint32" group="general"/>
58
+ <reg name="r12" bitsize="32" type="uint32" group="general"/>
59
+ <reg name="r13" bitsize="32" type="uint32" group="general"/>
60
+ <reg name="r14" bitsize="32" type="uint32" group="general"/>
61
+ <reg name="r15" bitsize="32" type="uint32" group="general"/>
62
+ <reg name="r16" bitsize="32" type="uint32" group="general"/>
63
+ <reg name="r17" bitsize="32" type="uint32" group="general"/>
64
+ <reg name="r18" bitsize="32" type="uint32" group="general"/>
65
+ <reg name="r19" bitsize="32" type="uint32" group="general"/>
66
+ <reg name="r20" bitsize="32" type="uint32" group="general"/>
67
+ <reg name="r21" bitsize="32" type="uint32" group="general"/>
68
+ <reg name="r22" bitsize="32" type="data_ptr" group="general"/>
69
+ <reg name="r23" bitsize="32" type="uint32" group="general"/>
70
+ <reg name="r24" bitsize="32" type="uint32" group="general"/>
71
+ <reg name="r25" bitsize="32" type="uint32" group="general"/>
72
+ <reg name="r26" bitsize="32" type="uint32" group="general"/>
73
+ <reg name="r27" bitsize="32" type="uint32" group="general"/>
74
+ <reg name="r28" bitsize="32" type="uint32" group="general"/>
75
+ <reg name="r29" bitsize="32" type="uint32" group="general"/>
76
+ <reg name="r30" bitsize="32" type="uint32" group="general"/>
77
+ <reg name="r31" bitsize="32" type="uint32" group="general"/>
78
+ <reg name="orig_a0" bitsize="32" type="uint32" group="general"/>
79
+ <reg name="pc" bitsize="32" type="code_ptr" group="general"/>
80
+ <reg name="badv" bitsize="32" type="code_ptr" group="general"/>
81
+</feature>
82
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
83
index XXXXXXX..XXXXXXX 100644
84
--- a/target/loongarch/cpu.c
85
+++ b/target/loongarch/cpu.c
86
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_class_init(ObjectClass *c, void *data)
87
#endif
88
}
89
90
+static gchar *loongarch32_gdb_arch_name(CPUState *cs)
91
+{
92
+ return g_strdup("loongarch32");
93
+}
94
+
95
static void loongarch32_cpu_class_init(ObjectClass *c, void *data)
96
{
97
+ CPUClass *cc = CPU_CLASS(c);
98
+
99
+ cc->gdb_num_core_regs = 35;
100
+ cc->gdb_core_xml_file = "loongarch-base32.xml";
101
+ cc->gdb_arch_name = loongarch32_gdb_arch_name;
102
}
103
104
static gchar *loongarch64_gdb_arch_name(CPUState *cs)
105
diff --git a/target/loongarch/gdbstub.c b/target/loongarch/gdbstub.c
106
index XXXXXXX..XXXXXXX 100644
107
--- a/target/loongarch/gdbstub.c
108
+++ b/target/loongarch/gdbstub.c
109
@@ -XXX,XX +XXX,XX @@ int loongarch_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n)
110
{
111
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
112
CPULoongArchState *env = &cpu->env;
113
+ uint64_t val;
114
115
if (0 <= n && n < 32) {
116
- return gdb_get_regl(mem_buf, env->gpr[n]);
117
+ val = env->gpr[n];
118
} else if (n == 32) {
119
/* orig_a0 */
120
- return gdb_get_regl(mem_buf, 0);
121
+ val = 0;
122
} else if (n == 33) {
123
- return gdb_get_regl(mem_buf, env->pc);
124
+ val = env->pc;
125
} else if (n == 34) {
126
- return gdb_get_regl(mem_buf, env->CSR_BADV);
127
+ val = env->CSR_BADV;
128
+ }
129
+
130
+ if (0 <= n && n <= 34) {
131
+ if (is_la64(env)) {
132
+ return gdb_get_reg64(mem_buf, val);
133
+ } else {
134
+ return gdb_get_reg32(mem_buf, val);
135
+ }
136
}
137
return 0;
138
}
139
@@ -XXX,XX +XXX,XX @@ int loongarch_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
140
{
141
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
142
CPULoongArchState *env = &cpu->env;
143
- target_ulong tmp = ldtul_p(mem_buf);
144
+ target_ulong tmp;
145
+ int read_length;
146
int length = 0;
147
148
+ if (is_la64(env)) {
149
+ tmp = ldq_p(mem_buf);
150
+ read_length = 8;
151
+ } else {
152
+ tmp = ldl_p(mem_buf);
153
+ read_length = 4;
154
+ }
155
+
156
if (0 <= n && n < 32) {
157
env->gpr[n] = tmp;
158
- length = sizeof(target_ulong);
159
+ length = read_length;
160
} else if (n == 33) {
161
env->pc = tmp;
162
- length = sizeof(target_ulong);
163
+ length = read_length;
164
}
165
return length;
166
}
167
--
168
2.39.1
169
170
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
The TLB entry of LA32 lacks NR, NX and RPLV and they are hardwired to
4
zero in LoongArch32.
5
6
Signed-off-by: Jiajie Chen <c@jia.je>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
8
Signed-off-by: Song Gao <gaosong@loongson.cn>
9
Message-ID: <20230822032724.1353391-2-gaosong@loongson.cn>
10
Message-Id: <20230822071405.35386-2-philmd@linaro.org>
11
---
12
target/loongarch/cpu-csr.h | 9 +++++----
13
target/loongarch/tlb_helper.c | 17 ++++++++++++-----
14
2 files changed, 17 insertions(+), 9 deletions(-)
15
16
diff --git a/target/loongarch/cpu-csr.h b/target/loongarch/cpu-csr.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/target/loongarch/cpu-csr.h
19
+++ b/target/loongarch/cpu-csr.h
20
@@ -XXX,XX +XXX,XX @@ FIELD(TLBENTRY, D, 1, 1)
21
FIELD(TLBENTRY, PLV, 2, 2)
22
FIELD(TLBENTRY, MAT, 4, 2)
23
FIELD(TLBENTRY, G, 6, 1)
24
-FIELD(TLBENTRY, PPN, 12, 36)
25
-FIELD(TLBENTRY, NR, 61, 1)
26
-FIELD(TLBENTRY, NX, 62, 1)
27
-FIELD(TLBENTRY, RPLV, 63, 1)
28
+FIELD(TLBENTRY_32, PPN, 8, 24)
29
+FIELD(TLBENTRY_64, PPN, 12, 36)
30
+FIELD(TLBENTRY_64, NR, 61, 1)
31
+FIELD(TLBENTRY_64, NX, 62, 1)
32
+FIELD(TLBENTRY_64, RPLV, 63, 1)
33
34
#define LOONGARCH_CSR_ASID 0x18 /* Address space identifier */
35
FIELD(CSR_ASID, ASID, 0, 10)
36
diff --git a/target/loongarch/tlb_helper.c b/target/loongarch/tlb_helper.c
37
index XXXXXXX..XXXXXXX 100644
38
--- a/target/loongarch/tlb_helper.c
39
+++ b/target/loongarch/tlb_helper.c
40
@@ -XXX,XX +XXX,XX @@ static int loongarch_map_tlb_entry(CPULoongArchState *env, hwaddr *physical,
41
tlb_v = FIELD_EX64(tlb_entry, TLBENTRY, V);
42
tlb_d = FIELD_EX64(tlb_entry, TLBENTRY, D);
43
tlb_plv = FIELD_EX64(tlb_entry, TLBENTRY, PLV);
44
- tlb_ppn = FIELD_EX64(tlb_entry, TLBENTRY, PPN);
45
- tlb_nx = FIELD_EX64(tlb_entry, TLBENTRY, NX);
46
- tlb_nr = FIELD_EX64(tlb_entry, TLBENTRY, NR);
47
- tlb_rplv = FIELD_EX64(tlb_entry, TLBENTRY, RPLV);
48
+ if (is_la64(env)) {
49
+ tlb_ppn = FIELD_EX64(tlb_entry, TLBENTRY_64, PPN);
50
+ tlb_nx = FIELD_EX64(tlb_entry, TLBENTRY_64, NX);
51
+ tlb_nr = FIELD_EX64(tlb_entry, TLBENTRY_64, NR);
52
+ tlb_rplv = FIELD_EX64(tlb_entry, TLBENTRY_64, RPLV);
53
+ } else {
54
+ tlb_ppn = FIELD_EX64(tlb_entry, TLBENTRY_32, PPN);
55
+ tlb_nx = 0;
56
+ tlb_nr = 0;
57
+ tlb_rplv = 0;
58
+ }
59
60
/* Check access rights */
61
if (!tlb_v) {
62
@@ -XXX,XX +XXX,XX @@ static int loongarch_map_tlb_entry(CPULoongArchState *env, hwaddr *physical,
63
* tlb_entry contains ppn[47:12] while 16KiB ppn is [47:15]
64
* need adjust.
65
*/
66
- *physical = (tlb_ppn << R_TLBENTRY_PPN_SHIFT) |
67
+ *physical = (tlb_ppn << R_TLBENTRY_64_PPN_SHIFT) |
68
(address & MAKE_64BIT_MASK(0, tlb_ps));
69
*prot = PAGE_READ;
70
if (tlb_d) {
71
--
72
2.39.1
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
LA32 uses a different encoding for CSR.DMW and a new direct mapping
4
mechanism.
5
6
Signed-off-by: Jiajie Chen <c@jia.je>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
8
Signed-off-by: Song Gao <gaosong@loongson.cn>
9
Message-ID: <20230822032724.1353391-3-gaosong@loongson.cn>
10
Message-Id: <20230822071405.35386-3-philmd@linaro.org>
11
---
12
target/loongarch/cpu-csr.h | 7 +++----
13
target/loongarch/tlb_helper.c | 26 +++++++++++++++++++++++---
14
2 files changed, 26 insertions(+), 7 deletions(-)
15
16
diff --git a/target/loongarch/cpu-csr.h b/target/loongarch/cpu-csr.h
17
index XXXXXXX..XXXXXXX 100644
18
--- a/target/loongarch/cpu-csr.h
19
+++ b/target/loongarch/cpu-csr.h
20
@@ -XXX,XX +XXX,XX @@ FIELD(CSR_DMW, PLV1, 1, 1)
21
FIELD(CSR_DMW, PLV2, 2, 1)
22
FIELD(CSR_DMW, PLV3, 3, 1)
23
FIELD(CSR_DMW, MAT, 4, 2)
24
-FIELD(CSR_DMW, VSEG, 60, 4)
25
-
26
-#define dmw_va2pa(va) \
27
- (va & MAKE_64BIT_MASK(0, TARGET_VIRT_ADDR_SPACE_BITS))
28
+FIELD(CSR_DMW_32, PSEG, 25, 3)
29
+FIELD(CSR_DMW_32, VSEG, 29, 3)
30
+FIELD(CSR_DMW_64, VSEG, 60, 4)
31
32
/* Debug CSRs */
33
#define LOONGARCH_CSR_DBG 0x500 /* debug config */
34
diff --git a/target/loongarch/tlb_helper.c b/target/loongarch/tlb_helper.c
35
index XXXXXXX..XXXXXXX 100644
36
--- a/target/loongarch/tlb_helper.c
37
+++ b/target/loongarch/tlb_helper.c
38
@@ -XXX,XX +XXX,XX @@ static int loongarch_map_address(CPULoongArchState *env, hwaddr *physical,
39
return TLBRET_NOMATCH;
40
}
41
42
+static hwaddr dmw_va2pa(CPULoongArchState *env, target_ulong va,
43
+ target_ulong dmw)
44
+{
45
+ if (is_la64(env)) {
46
+ return va & TARGET_VIRT_MASK;
47
+ } else {
48
+ uint32_t pseg = FIELD_EX32(dmw, CSR_DMW_32, PSEG);
49
+ return (va & MAKE_64BIT_MASK(0, R_CSR_DMW_32_VSEG_SHIFT)) | \
50
+ (pseg << R_CSR_DMW_32_VSEG_SHIFT);
51
+ }
52
+}
53
+
54
static int get_physical_address(CPULoongArchState *env, hwaddr *physical,
55
int *prot, target_ulong address,
56
MMUAccessType access_type, int mmu_idx)
57
@@ -XXX,XX +XXX,XX @@ static int get_physical_address(CPULoongArchState *env, hwaddr *physical,
58
}
59
60
plv = kernel_mode | (user_mode << R_CSR_DMW_PLV3_SHIFT);
61
- base_v = address >> R_CSR_DMW_VSEG_SHIFT;
62
+ if (is_la64(env)) {
63
+ base_v = address >> R_CSR_DMW_64_VSEG_SHIFT;
64
+ } else {
65
+ base_v = address >> R_CSR_DMW_32_VSEG_SHIFT;
66
+ }
67
/* Check direct map window */
68
for (int i = 0; i < 4; i++) {
69
- base_c = FIELD_EX64(env->CSR_DMW[i], CSR_DMW, VSEG);
70
+ if (is_la64(env)) {
71
+ base_c = FIELD_EX64(env->CSR_DMW[i], CSR_DMW_64, VSEG);
72
+ } else {
73
+ base_c = FIELD_EX64(env->CSR_DMW[i], CSR_DMW_32, VSEG);
74
+ }
75
if ((plv & env->CSR_DMW[i]) && (base_c == base_v)) {
76
- *physical = dmw_va2pa(address);
77
+ *physical = dmw_va2pa(env, address, env->CSR_DMW[i]);
78
*prot = PAGE_READ | PAGE_WRITE | PAGE_EXEC;
79
return TLBRET_MATCH;
80
}
81
--
82
2.39.1
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
VPPN of TLBEHI/TLBREHI is limited to 19 bits in LA32.
4
5
Signed-off-by: Jiajie Chen <c@jia.je>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Signed-off-by: Song Gao <gaosong@loongson.cn>
8
Message-ID: <20230822032724.1353391-4-gaosong@loongson.cn>
9
Message-Id: <20230822071405.35386-4-philmd@linaro.org>
10
---
11
target/loongarch/cpu-csr.h | 6 ++++--
12
target/loongarch/tlb_helper.c | 23 ++++++++++++++++++-----
13
2 files changed, 22 insertions(+), 7 deletions(-)
14
15
diff --git a/target/loongarch/cpu-csr.h b/target/loongarch/cpu-csr.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/target/loongarch/cpu-csr.h
18
+++ b/target/loongarch/cpu-csr.h
19
@@ -XXX,XX +XXX,XX @@ FIELD(CSR_TLBIDX, PS, 24, 6)
20
FIELD(CSR_TLBIDX, NE, 31, 1)
21
22
#define LOONGARCH_CSR_TLBEHI 0x11 /* TLB EntryHi */
23
-FIELD(CSR_TLBEHI, VPPN, 13, 35)
24
+FIELD(CSR_TLBEHI_32, VPPN, 13, 19)
25
+FIELD(CSR_TLBEHI_64, VPPN, 13, 35)
26
27
#define LOONGARCH_CSR_TLBELO0 0x12 /* TLB EntryLo0 */
28
#define LOONGARCH_CSR_TLBELO1 0x13 /* TLB EntryLo1 */
29
@@ -XXX,XX +XXX,XX @@ FIELD(CSR_TLBRERA, PC, 2, 62)
30
#define LOONGARCH_CSR_TLBRELO1 0x8d /* TLB refill entrylo1 */
31
#define LOONGARCH_CSR_TLBREHI 0x8e /* TLB refill entryhi */
32
FIELD(CSR_TLBREHI, PS, 0, 6)
33
-FIELD(CSR_TLBREHI, VPPN, 13, 35)
34
+FIELD(CSR_TLBREHI_32, VPPN, 13, 19)
35
+FIELD(CSR_TLBREHI_64, VPPN, 13, 35)
36
#define LOONGARCH_CSR_TLBRPRMD 0x8f /* TLB refill mode info */
37
FIELD(CSR_TLBRPRMD, PPLV, 0, 2)
38
FIELD(CSR_TLBRPRMD, PIE, 2, 1)
39
diff --git a/target/loongarch/tlb_helper.c b/target/loongarch/tlb_helper.c
40
index XXXXXXX..XXXXXXX 100644
41
--- a/target/loongarch/tlb_helper.c
42
+++ b/target/loongarch/tlb_helper.c
43
@@ -XXX,XX +XXX,XX @@ static void raise_mmu_exception(CPULoongArchState *env, target_ulong address,
44
45
if (tlb_error == TLBRET_NOMATCH) {
46
env->CSR_TLBRBADV = address;
47
- env->CSR_TLBREHI = FIELD_DP64(env->CSR_TLBREHI, CSR_TLBREHI, VPPN,
48
- extract64(address, 13, 35));
49
+ if (is_la64(env)) {
50
+ env->CSR_TLBREHI = FIELD_DP64(env->CSR_TLBREHI, CSR_TLBREHI_64,
51
+ VPPN, extract64(address, 13, 35));
52
+ } else {
53
+ env->CSR_TLBREHI = FIELD_DP64(env->CSR_TLBREHI, CSR_TLBREHI_32,
54
+ VPPN, extract64(address, 13, 19));
55
+ }
56
} else {
57
if (!FIELD_EX64(env->CSR_DBG, CSR_DBG, DST)) {
58
env->CSR_BADV = address;
59
@@ -XXX,XX +XXX,XX @@ static void fill_tlb_entry(CPULoongArchState *env, int index)
60
61
if (FIELD_EX64(env->CSR_TLBRERA, CSR_TLBRERA, ISTLBR)) {
62
csr_ps = FIELD_EX64(env->CSR_TLBREHI, CSR_TLBREHI, PS);
63
- csr_vppn = FIELD_EX64(env->CSR_TLBREHI, CSR_TLBREHI, VPPN);
64
+ if (is_la64(env)) {
65
+ csr_vppn = FIELD_EX64(env->CSR_TLBREHI, CSR_TLBREHI_64, VPPN);
66
+ } else {
67
+ csr_vppn = FIELD_EX64(env->CSR_TLBREHI, CSR_TLBREHI_32, VPPN);
68
+ }
69
lo0 = env->CSR_TLBRELO0;
70
lo1 = env->CSR_TLBRELO1;
71
} else {
72
csr_ps = FIELD_EX64(env->CSR_TLBIDX, CSR_TLBIDX, PS);
73
- csr_vppn = FIELD_EX64(env->CSR_TLBEHI, CSR_TLBEHI, VPPN);
74
+ if (is_la64(env)) {
75
+ csr_vppn = FIELD_EX64(env->CSR_TLBEHI, CSR_TLBEHI_64, VPPN);
76
+ } else {
77
+ csr_vppn = FIELD_EX64(env->CSR_TLBEHI, CSR_TLBEHI_32, VPPN);
78
+ }
79
lo0 = env->CSR_TLBELO0;
80
lo1 = env->CSR_TLBELO1;
81
}
82
@@ -XXX,XX +XXX,XX @@ void helper_tlbfill(CPULoongArchState *env)
83
84
if (pagesize == stlb_ps) {
85
/* Only write into STLB bits [47:13] */
86
- address = entryhi & ~MAKE_64BIT_MASK(0, R_CSR_TLBEHI_VPPN_SHIFT);
87
+ address = entryhi & ~MAKE_64BIT_MASK(0, R_CSR_TLBEHI_64_VPPN_SHIFT);
88
89
/* Choose one set ramdomly */
90
set = get_random_tlb(0, 7);
91
--
92
2.39.1
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
Add LA64 and VA32(32-bit Virtual Address) to DisasContext to allow the
4
translator to reject doubleword instructions in LA32 mode for example.
5
6
Signed-off-by: Jiajie Chen <c@jia.je>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
8
Signed-off-by: Song Gao <gaosong@loongson.cn>
9
Message-ID: <20230822032724.1353391-5-gaosong@loongson.cn>
10
Message-Id: <20230822071405.35386-5-philmd@linaro.org>
11
---
12
target/loongarch/cpu.h | 13 +++++++++++++
13
target/loongarch/translate.c | 3 +++
14
target/loongarch/translate.h | 2 ++
15
3 files changed, 18 insertions(+)
16
17
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/loongarch/cpu.h
20
+++ b/target/loongarch/cpu.h
21
@@ -XXX,XX +XXX,XX @@ static inline bool is_la64(CPULoongArchState *env)
22
return FIELD_EX32(env->cpucfg[1], CPUCFG1, ARCH) == CPUCFG1_ARCH_LA64;
23
}
24
25
+static inline bool is_va32(CPULoongArchState *env)
26
+{
27
+ /* VA32 if !LA64 or VA32L[1-3] */
28
+ bool va32 = !is_la64(env);
29
+ uint64_t plv = FIELD_EX64(env->CSR_CRMD, CSR_CRMD, PLV);
30
+ if (plv >= 1 && (FIELD_EX64(env->CSR_MISC, CSR_MISC, VA32) & (1 << plv))) {
31
+ va32 = true;
32
+ }
33
+ return va32;
34
+}
35
+
36
/*
37
* LoongArch CPUs hardware flags.
38
*/
39
@@ -XXX,XX +XXX,XX @@ static inline bool is_la64(CPULoongArchState *env)
40
#define HW_FLAGS_CRMD_PG R_CSR_CRMD_PG_MASK /* 0x10 */
41
#define HW_FLAGS_EUEN_FPE 0x04
42
#define HW_FLAGS_EUEN_SXE 0x08
43
+#define HW_FLAGS_VA32 0x20
44
45
static inline void cpu_get_tb_cpu_state(CPULoongArchState *env, vaddr *pc,
46
uint64_t *cs_base, uint32_t *flags)
47
@@ -XXX,XX +XXX,XX @@ static inline void cpu_get_tb_cpu_state(CPULoongArchState *env, vaddr *pc,
48
*flags = env->CSR_CRMD & (R_CSR_CRMD_PLV_MASK | R_CSR_CRMD_PG_MASK);
49
*flags |= FIELD_EX64(env->CSR_EUEN, CSR_EUEN, FPE) * HW_FLAGS_EUEN_FPE;
50
*flags |= FIELD_EX64(env->CSR_EUEN, CSR_EUEN, SXE) * HW_FLAGS_EUEN_SXE;
51
+ *flags |= is_va32(env) * HW_FLAGS_VA32;
52
}
53
54
void loongarch_cpu_list(void);
55
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
56
index XXXXXXX..XXXXXXX 100644
57
--- a/target/loongarch/translate.c
58
+++ b/target/loongarch/translate.c
59
@@ -XXX,XX +XXX,XX @@ static void loongarch_tr_init_disas_context(DisasContextBase *dcbase,
60
ctx->vl = LSX_LEN;
61
}
62
63
+ ctx->la64 = is_la64(env);
64
+ ctx->va32 = (ctx->base.tb->flags & HW_FLAGS_VA32) != 0;
65
+
66
ctx->zero = tcg_constant_tl(0);
67
}
68
69
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
70
index XXXXXXX..XXXXXXX 100644
71
--- a/target/loongarch/translate.h
72
+++ b/target/loongarch/translate.h
73
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
74
uint16_t plv;
75
int vl; /* Vector length */
76
TCGv zero;
77
+ bool la64; /* LoongArch64 mode */
78
+ bool va32; /* 32-bit virtual address */
79
} DisasContext;
80
81
void generate_exception(DisasContext *ctx, int excp);
82
--
83
2.39.1
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
Signed-off-by: Jiajie Chen <c@jia.je>
4
Co-authored-by: Richard Henderson <richard.henderson@linaro.org>
5
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Song Gao <gaosong@loongson.cn>
7
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
8
Message-ID: <20230822032724.1353391-6-gaosong@loongson.cn>
9
[PMD: Extract helper from bigger patch]
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Message-Id: <20230822071405.35386-6-philmd@linaro.org>
12
---
13
.../loongarch/insn_trans/trans_fmemory.c.inc | 18 ++++++------------
14
target/loongarch/insn_trans/trans_lsx.c.inc | 6 ++----
15
target/loongarch/insn_trans/trans_memory.c.inc | 6 ++----
16
target/loongarch/translate.c | 12 ++++++++++++
17
4 files changed, 22 insertions(+), 20 deletions(-)
18
19
diff --git a/target/loongarch/insn_trans/trans_fmemory.c.inc b/target/loongarch/insn_trans/trans_fmemory.c.inc
20
index XXXXXXX..XXXXXXX 100644
21
--- a/target/loongarch/insn_trans/trans_fmemory.c.inc
22
+++ b/target/loongarch/insn_trans/trans_fmemory.c.inc
23
@@ -XXX,XX +XXX,XX @@ static bool gen_floadx(DisasContext *ctx, arg_frr *a, MemOp mop)
24
25
CHECK_FPE;
26
27
- addr = tcg_temp_new();
28
- tcg_gen_add_tl(addr, src1, src2);
29
+ addr = make_address_x(ctx, src1, src2);
30
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
31
maybe_nanbox_load(dest, mop);
32
set_fpr(a->fd, dest);
33
@@ -XXX,XX +XXX,XX @@ static bool gen_fstorex(DisasContext *ctx, arg_frr *a, MemOp mop)
34
35
CHECK_FPE;
36
37
- addr = tcg_temp_new();
38
- tcg_gen_add_tl(addr, src1, src2);
39
+ addr = make_address_x(ctx, src1, src2);
40
tcg_gen_qemu_st_tl(src3, addr, ctx->mem_idx, mop);
41
42
return true;
43
@@ -XXX,XX +XXX,XX @@ static bool gen_fload_gt(DisasContext *ctx, arg_frr *a, MemOp mop)
44
45
CHECK_FPE;
46
47
- addr = tcg_temp_new();
48
gen_helper_asrtgt_d(cpu_env, src1, src2);
49
- tcg_gen_add_tl(addr, src1, src2);
50
+ addr = make_address_x(ctx, src1, src2);
51
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
52
maybe_nanbox_load(dest, mop);
53
set_fpr(a->fd, dest);
54
@@ -XXX,XX +XXX,XX @@ static bool gen_fstore_gt(DisasContext *ctx, arg_frr *a, MemOp mop)
55
56
CHECK_FPE;
57
58
- addr = tcg_temp_new();
59
gen_helper_asrtgt_d(cpu_env, src1, src2);
60
- tcg_gen_add_tl(addr, src1, src2);
61
+ addr = make_address_x(ctx, src1, src2);
62
tcg_gen_qemu_st_tl(src3, addr, ctx->mem_idx, mop);
63
64
return true;
65
@@ -XXX,XX +XXX,XX @@ static bool gen_fload_le(DisasContext *ctx, arg_frr *a, MemOp mop)
66
67
CHECK_FPE;
68
69
- addr = tcg_temp_new();
70
gen_helper_asrtle_d(cpu_env, src1, src2);
71
- tcg_gen_add_tl(addr, src1, src2);
72
+ addr = make_address_x(ctx, src1, src2);
73
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
74
maybe_nanbox_load(dest, mop);
75
set_fpr(a->fd, dest);
76
@@ -XXX,XX +XXX,XX @@ static bool gen_fstore_le(DisasContext *ctx, arg_frr *a, MemOp mop)
77
78
CHECK_FPE;
79
80
- addr = tcg_temp_new();
81
gen_helper_asrtle_d(cpu_env, src1, src2);
82
- tcg_gen_add_tl(addr, src1, src2);
83
+ addr = make_address_x(ctx, src1, src2);
84
tcg_gen_qemu_st_tl(src3, addr, ctx->mem_idx, mop);
85
86
return true;
87
diff --git a/target/loongarch/insn_trans/trans_lsx.c.inc b/target/loongarch/insn_trans/trans_lsx.c.inc
88
index XXXXXXX..XXXXXXX 100644
89
--- a/target/loongarch/insn_trans/trans_lsx.c.inc
90
+++ b/target/loongarch/insn_trans/trans_lsx.c.inc
91
@@ -XXX,XX +XXX,XX @@ static bool trans_vldx(DisasContext *ctx, arg_vrr *a)
92
93
CHECK_SXE;
94
95
- addr = tcg_temp_new();
96
src1 = gpr_src(ctx, a->rj, EXT_NONE);
97
src2 = gpr_src(ctx, a->rk, EXT_NONE);
98
val = tcg_temp_new_i128();
99
rl = tcg_temp_new_i64();
100
rh = tcg_temp_new_i64();
101
102
- tcg_gen_add_tl(addr, src1, src2);
103
+ addr = make_address_x(ctx, src1, src2);
104
tcg_gen_qemu_ld_i128(val, addr, ctx->mem_idx, MO_128 | MO_TE);
105
tcg_gen_extr_i128_i64(rl, rh, val);
106
set_vreg64(rh, a->vd, 1);
107
@@ -XXX,XX +XXX,XX @@ static bool trans_vstx(DisasContext *ctx, arg_vrr *a)
108
109
CHECK_SXE;
110
111
- addr = tcg_temp_new();
112
src1 = gpr_src(ctx, a->rj, EXT_NONE);
113
src2 = gpr_src(ctx, a->rk, EXT_NONE);
114
val = tcg_temp_new_i128();
115
ah = tcg_temp_new_i64();
116
al = tcg_temp_new_i64();
117
118
- tcg_gen_add_tl(addr, src1, src2);
119
+ addr = make_address_x(ctx, src1, src2);
120
get_vreg64(ah, a->vd, 1);
121
get_vreg64(al, a->vd, 0);
122
tcg_gen_concat_i64_i128(val, al, ah);
123
diff --git a/target/loongarch/insn_trans/trans_memory.c.inc b/target/loongarch/insn_trans/trans_memory.c.inc
124
index XXXXXXX..XXXXXXX 100644
125
--- a/target/loongarch/insn_trans/trans_memory.c.inc
126
+++ b/target/loongarch/insn_trans/trans_memory.c.inc
127
@@ -XXX,XX +XXX,XX @@ static bool gen_loadx(DisasContext *ctx, arg_rrr *a, MemOp mop)
128
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
129
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
130
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
131
- TCGv addr = tcg_temp_new();
132
+ TCGv addr = make_address_x(ctx, src1, src2);
133
134
- tcg_gen_add_tl(addr, src1, src2);
135
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
136
gen_set_gpr(a->rd, dest, EXT_NONE);
137
138
@@ -XXX,XX +XXX,XX @@ static bool gen_storex(DisasContext *ctx, arg_rrr *a, MemOp mop)
139
TCGv data = gpr_src(ctx, a->rd, EXT_NONE);
140
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
141
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
142
- TCGv addr = tcg_temp_new();
143
+ TCGv addr = make_address_x(ctx, src1, src2);
144
145
- tcg_gen_add_tl(addr, src1, src2);
146
tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, mop);
147
148
return true;
149
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
150
index XXXXXXX..XXXXXXX 100644
151
--- a/target/loongarch/translate.c
152
+++ b/target/loongarch/translate.c
153
@@ -XXX,XX +XXX,XX @@ static void set_fpr(int reg_num, TCGv val)
154
offsetof(CPULoongArchState, fpr[reg_num].vreg.D(0)));
155
}
156
157
+static TCGv make_address_x(DisasContext *ctx, TCGv base, TCGv addend)
158
+{
159
+ TCGv temp = NULL;
160
+
161
+ if (addend) {
162
+ temp = tcg_temp_new();
163
+ tcg_gen_add_tl(temp, base, addend);
164
+ base = temp;
165
+ }
166
+ return base;
167
+}
168
+
169
#include "decode-insns.c.inc"
170
#include "insn_trans/trans_arith.c.inc"
171
#include "insn_trans/trans_shift.c.inc"
172
--
173
2.39.1
174
175
diff view generated by jsdifflib
New patch
1
1
From: Jiajie Chen <c@jia.je>
2
3
Signed-off-by: Jiajie Chen <c@jia.je>
4
Co-authored-by: Richard Henderson <richard.henderson@linaro.org>
5
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Song Gao <gaosong@loongson.cn>
7
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
8
Message-ID: <20230822032724.1353391-6-gaosong@loongson.cn>
9
[PMD: Extract helper from bigger patch]
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Message-Id: <20230822071405.35386-7-philmd@linaro.org>
12
---
13
.../loongarch/insn_trans/trans_atomic.c.inc | 5 +--
14
.../loongarch/insn_trans/trans_branch.c.inc | 3 +-
15
.../loongarch/insn_trans/trans_fmemory.c.inc | 12 ++-----
16
target/loongarch/insn_trans/trans_lsx.c.inc | 32 +++++--------------
17
.../loongarch/insn_trans/trans_memory.c.inc | 28 +++++-----------
18
target/loongarch/translate.c | 6 ++++
19
6 files changed, 29 insertions(+), 57 deletions(-)
20
21
diff --git a/target/loongarch/insn_trans/trans_atomic.c.inc b/target/loongarch/insn_trans/trans_atomic.c.inc
22
index XXXXXXX..XXXXXXX 100644
23
--- a/target/loongarch/insn_trans/trans_atomic.c.inc
24
+++ b/target/loongarch/insn_trans/trans_atomic.c.inc
25
@@ -XXX,XX +XXX,XX @@ static bool gen_ll(DisasContext *ctx, arg_rr_i *a, MemOp mop)
26
{
27
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
28
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
29
- TCGv t0 = tcg_temp_new();
30
+ TCGv t0 = make_address_i(ctx, src1, a->imm);
31
32
- tcg_gen_addi_tl(t0, src1, a->imm);
33
tcg_gen_qemu_ld_i64(dest, t0, ctx->mem_idx, mop);
34
tcg_gen_st_tl(t0, cpu_env, offsetof(CPULoongArchState, lladdr));
35
tcg_gen_st_tl(dest, cpu_env, offsetof(CPULoongArchState, llval));
36
@@ -XXX,XX +XXX,XX @@ static bool gen_am(DisasContext *ctx, arg_rrr *a,
37
return false;
38
}
39
40
+ addr = make_address_i(ctx, addr, 0);
41
+
42
func(dest, addr, val, ctx->mem_idx, mop);
43
gen_set_gpr(a->rd, dest, EXT_NONE);
44
45
diff --git a/target/loongarch/insn_trans/trans_branch.c.inc b/target/loongarch/insn_trans/trans_branch.c.inc
46
index XXXXXXX..XXXXXXX 100644
47
--- a/target/loongarch/insn_trans/trans_branch.c.inc
48
+++ b/target/loongarch/insn_trans/trans_branch.c.inc
49
@@ -XXX,XX +XXX,XX @@ static bool trans_jirl(DisasContext *ctx, arg_jirl *a)
50
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
51
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
52
53
- tcg_gen_addi_tl(cpu_pc, src1, a->imm);
54
+ TCGv addr = make_address_i(ctx, src1, a->imm);
55
+ tcg_gen_mov_tl(cpu_pc, addr);
56
tcg_gen_movi_tl(dest, ctx->base.pc_next + 4);
57
gen_set_gpr(a->rd, dest, EXT_NONE);
58
tcg_gen_lookup_and_goto_ptr();
59
diff --git a/target/loongarch/insn_trans/trans_fmemory.c.inc b/target/loongarch/insn_trans/trans_fmemory.c.inc
60
index XXXXXXX..XXXXXXX 100644
61
--- a/target/loongarch/insn_trans/trans_fmemory.c.inc
62
+++ b/target/loongarch/insn_trans/trans_fmemory.c.inc
63
@@ -XXX,XX +XXX,XX @@ static bool gen_fload_i(DisasContext *ctx, arg_fr_i *a, MemOp mop)
64
65
CHECK_FPE;
66
67
- if (a->imm) {
68
- TCGv temp = tcg_temp_new();
69
- tcg_gen_addi_tl(temp, addr, a->imm);
70
- addr = temp;
71
- }
72
+ addr = make_address_i(ctx, addr, a->imm);
73
74
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
75
maybe_nanbox_load(dest, mop);
76
@@ -XXX,XX +XXX,XX @@ static bool gen_fstore_i(DisasContext *ctx, arg_fr_i *a, MemOp mop)
77
78
CHECK_FPE;
79
80
- if (a->imm) {
81
- TCGv temp = tcg_temp_new();
82
- tcg_gen_addi_tl(temp, addr, a->imm);
83
- addr = temp;
84
- }
85
+ addr = make_address_i(ctx, addr, a->imm);
86
87
tcg_gen_qemu_st_tl(src, addr, ctx->mem_idx, mop);
88
89
diff --git a/target/loongarch/insn_trans/trans_lsx.c.inc b/target/loongarch/insn_trans/trans_lsx.c.inc
90
index XXXXXXX..XXXXXXX 100644
91
--- a/target/loongarch/insn_trans/trans_lsx.c.inc
92
+++ b/target/loongarch/insn_trans/trans_lsx.c.inc
93
@@ -XXX,XX +XXX,XX @@ TRANS(vextrins_d, gen_vv_i, gen_helper_vextrins_d)
94
95
static bool trans_vld(DisasContext *ctx, arg_vr_i *a)
96
{
97
- TCGv addr, temp;
98
+ TCGv addr;
99
TCGv_i64 rl, rh;
100
TCGv_i128 val;
101
102
@@ -XXX,XX +XXX,XX @@ static bool trans_vld(DisasContext *ctx, arg_vr_i *a)
103
rl = tcg_temp_new_i64();
104
rh = tcg_temp_new_i64();
105
106
- if (a->imm) {
107
- temp = tcg_temp_new();
108
- tcg_gen_addi_tl(temp, addr, a->imm);
109
- addr = temp;
110
- }
111
+ addr = make_address_i(ctx, addr, a->imm);
112
113
tcg_gen_qemu_ld_i128(val, addr, ctx->mem_idx, MO_128 | MO_TE);
114
tcg_gen_extr_i128_i64(rl, rh, val);
115
@@ -XXX,XX +XXX,XX @@ static bool trans_vld(DisasContext *ctx, arg_vr_i *a)
116
117
static bool trans_vst(DisasContext *ctx, arg_vr_i *a)
118
{
119
- TCGv addr, temp;
120
+ TCGv addr;
121
TCGv_i128 val;
122
TCGv_i64 ah, al;
123
124
@@ -XXX,XX +XXX,XX @@ static bool trans_vst(DisasContext *ctx, arg_vr_i *a)
125
ah = tcg_temp_new_i64();
126
al = tcg_temp_new_i64();
127
128
- if (a->imm) {
129
- temp = tcg_temp_new();
130
- tcg_gen_addi_tl(temp, addr, a->imm);
131
- addr = temp;
132
- }
133
+ addr = make_address_i(ctx, addr, a->imm);
134
135
get_vreg64(ah, a->vd, 1);
136
get_vreg64(al, a->vd, 0);
137
@@ -XXX,XX +XXX,XX @@ static bool trans_vstx(DisasContext *ctx, arg_vrr *a)
138
#define VLDREPL(NAME, MO) \
139
static bool trans_## NAME (DisasContext *ctx, arg_vr_i *a) \
140
{ \
141
- TCGv addr, temp; \
142
+ TCGv addr; \
143
TCGv_i64 val; \
144
\
145
CHECK_SXE; \
146
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_vr_i *a) \
147
addr = gpr_src(ctx, a->rj, EXT_NONE); \
148
val = tcg_temp_new_i64(); \
149
\
150
- if (a->imm) { \
151
- temp = tcg_temp_new(); \
152
- tcg_gen_addi_tl(temp, addr, a->imm); \
153
- addr = temp; \
154
- } \
155
+ addr = make_address_i(ctx, addr, a->imm); \
156
\
157
tcg_gen_qemu_ld_i64(val, addr, ctx->mem_idx, MO); \
158
tcg_gen_gvec_dup_i64(MO, vec_full_offset(a->vd), 16, ctx->vl/8, val); \
159
@@ -XXX,XX +XXX,XX @@ VLDREPL(vldrepl_d, MO_64)
160
#define VSTELM(NAME, MO, E) \
161
static bool trans_## NAME (DisasContext *ctx, arg_vr_ii *a) \
162
{ \
163
- TCGv addr, temp; \
164
+ TCGv addr; \
165
TCGv_i64 val; \
166
\
167
CHECK_SXE; \
168
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_vr_ii *a) \
169
addr = gpr_src(ctx, a->rj, EXT_NONE); \
170
val = tcg_temp_new_i64(); \
171
\
172
- if (a->imm) { \
173
- temp = tcg_temp_new(); \
174
- tcg_gen_addi_tl(temp, addr, a->imm); \
175
- addr = temp; \
176
- } \
177
+ addr = make_address_i(ctx, addr, a->imm); \
178
\
179
tcg_gen_ld_i64(val, cpu_env, \
180
offsetof(CPULoongArchState, fpr[a->vd].vreg.E(a->imm2))); \
181
diff --git a/target/loongarch/insn_trans/trans_memory.c.inc b/target/loongarch/insn_trans/trans_memory.c.inc
182
index XXXXXXX..XXXXXXX 100644
183
--- a/target/loongarch/insn_trans/trans_memory.c.inc
184
+++ b/target/loongarch/insn_trans/trans_memory.c.inc
185
@@ -XXX,XX +XXX,XX @@ static bool gen_load(DisasContext *ctx, arg_rr_i *a, MemOp mop)
186
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
187
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
188
189
- if (a->imm) {
190
- TCGv temp = tcg_temp_new();
191
- tcg_gen_addi_tl(temp, addr, a->imm);
192
- addr = temp;
193
- }
194
+ addr = make_address_i(ctx, addr, a->imm);
195
196
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
197
gen_set_gpr(a->rd, dest, EXT_NONE);
198
@@ -XXX,XX +XXX,XX @@ static bool gen_store(DisasContext *ctx, arg_rr_i *a, MemOp mop)
199
TCGv data = gpr_src(ctx, a->rd, EXT_NONE);
200
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
201
202
- if (a->imm) {
203
- TCGv temp = tcg_temp_new();
204
- tcg_gen_addi_tl(temp, addr, a->imm);
205
- addr = temp;
206
- }
207
+ addr = make_address_i(ctx, addr, a->imm);
208
209
tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, mop);
210
return true;
211
@@ -XXX,XX +XXX,XX @@ static bool gen_load_gt(DisasContext *ctx, arg_rrr *a, MemOp mop)
212
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
213
214
gen_helper_asrtgt_d(cpu_env, src1, src2);
215
+ src1 = make_address_i(ctx, src1, 0);
216
tcg_gen_qemu_ld_tl(dest, src1, ctx->mem_idx, mop);
217
gen_set_gpr(a->rd, dest, EXT_NONE);
218
219
@@ -XXX,XX +XXX,XX @@ static bool gen_load_le(DisasContext *ctx, arg_rrr *a, MemOp mop)
220
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
221
222
gen_helper_asrtle_d(cpu_env, src1, src2);
223
+ src1 = make_address_i(ctx, src1, 0);
224
tcg_gen_qemu_ld_tl(dest, src1, ctx->mem_idx, mop);
225
gen_set_gpr(a->rd, dest, EXT_NONE);
226
227
@@ -XXX,XX +XXX,XX @@ static bool gen_store_gt(DisasContext *ctx, arg_rrr *a, MemOp mop)
228
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
229
230
gen_helper_asrtgt_d(cpu_env, src1, src2);
231
+ src1 = make_address_i(ctx, src1, 0);
232
tcg_gen_qemu_st_tl(data, src1, ctx->mem_idx, mop);
233
234
return true;
235
@@ -XXX,XX +XXX,XX @@ static bool gen_store_le(DisasContext *ctx, arg_rrr *a, MemOp mop)
236
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
237
238
gen_helper_asrtle_d(cpu_env, src1, src2);
239
+ src1 = make_address_i(ctx, src1, 0);
240
tcg_gen_qemu_st_tl(data, src1, ctx->mem_idx, mop);
241
242
return true;
243
@@ -XXX,XX +XXX,XX @@ static bool gen_ldptr(DisasContext *ctx, arg_rr_i *a, MemOp mop)
244
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
245
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
246
247
- if (a->imm) {
248
- TCGv temp = tcg_temp_new();
249
- tcg_gen_addi_tl(temp, addr, a->imm);
250
- addr = temp;
251
- }
252
+ addr = make_address_i(ctx, addr, a->imm);
253
254
tcg_gen_qemu_ld_tl(dest, addr, ctx->mem_idx, mop);
255
gen_set_gpr(a->rd, dest, EXT_NONE);
256
@@ -XXX,XX +XXX,XX @@ static bool gen_stptr(DisasContext *ctx, arg_rr_i *a, MemOp mop)
257
TCGv data = gpr_src(ctx, a->rd, EXT_NONE);
258
TCGv addr = gpr_src(ctx, a->rj, EXT_NONE);
259
260
- if (a->imm) {
261
- TCGv temp = tcg_temp_new();
262
- tcg_gen_addi_tl(temp, addr, a->imm);
263
- addr = temp;
264
- }
265
+ addr = make_address_i(ctx, addr, a->imm);
266
267
tcg_gen_qemu_st_tl(data, addr, ctx->mem_idx, mop);
268
return true;
269
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
270
index XXXXXXX..XXXXXXX 100644
271
--- a/target/loongarch/translate.c
272
+++ b/target/loongarch/translate.c
273
@@ -XXX,XX +XXX,XX @@ static TCGv make_address_x(DisasContext *ctx, TCGv base, TCGv addend)
274
return base;
275
}
276
277
+static TCGv make_address_i(DisasContext *ctx, TCGv base, target_long ofs)
278
+{
279
+ TCGv addend = ofs ? tcg_constant_tl(ofs) : NULL;
280
+ return make_address_x(ctx, base, addend);
281
+}
282
+
283
#include "decode-insns.c.inc"
284
#include "insn_trans/trans_arith.c.inc"
285
#include "insn_trans/trans_shift.c.inc"
286
--
287
2.39.1
288
289
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
Signed-off-by: Jiajie Chen <c@jia.je>
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
5
Signed-off-by: Song Gao <gaosong@loongson.cn>
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
Message-ID: <20230822032724.1353391-7-gaosong@loongson.cn>
8
[PMD: Extract helper from bigger patch]
9
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
10
Message-Id: <20230822071405.35386-8-philmd@linaro.org>
11
---
12
target/loongarch/insn_trans/trans_arith.c.inc | 2 +-
13
target/loongarch/insn_trans/trans_branch.c.inc | 4 ++--
14
target/loongarch/translate.c | 5 +++++
15
3 files changed, 8 insertions(+), 3 deletions(-)
16
17
diff --git a/target/loongarch/insn_trans/trans_arith.c.inc b/target/loongarch/insn_trans/trans_arith.c.inc
18
index XXXXXXX..XXXXXXX 100644
19
--- a/target/loongarch/insn_trans/trans_arith.c.inc
20
+++ b/target/loongarch/insn_trans/trans_arith.c.inc
21
@@ -XXX,XX +XXX,XX @@ static bool gen_pc(DisasContext *ctx, arg_r_i *a,
22
target_ulong (*func)(target_ulong, int))
23
{
24
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
25
- target_ulong addr = func(ctx->base.pc_next, a->imm);
26
+ target_ulong addr = make_address_pc(ctx, func(ctx->base.pc_next, a->imm));
27
28
tcg_gen_movi_tl(dest, addr);
29
gen_set_gpr(a->rd, dest, EXT_NONE);
30
diff --git a/target/loongarch/insn_trans/trans_branch.c.inc b/target/loongarch/insn_trans/trans_branch.c.inc
31
index XXXXXXX..XXXXXXX 100644
32
--- a/target/loongarch/insn_trans/trans_branch.c.inc
33
+++ b/target/loongarch/insn_trans/trans_branch.c.inc
34
@@ -XXX,XX +XXX,XX @@ static bool trans_b(DisasContext *ctx, arg_b *a)
35
36
static bool trans_bl(DisasContext *ctx, arg_bl *a)
37
{
38
- tcg_gen_movi_tl(cpu_gpr[1], ctx->base.pc_next + 4);
39
+ tcg_gen_movi_tl(cpu_gpr[1], make_address_pc(ctx, ctx->base.pc_next + 4));
40
gen_goto_tb(ctx, 0, ctx->base.pc_next + a->offs);
41
ctx->base.is_jmp = DISAS_NORETURN;
42
return true;
43
@@ -XXX,XX +XXX,XX @@ static bool trans_jirl(DisasContext *ctx, arg_jirl *a)
44
45
TCGv addr = make_address_i(ctx, src1, a->imm);
46
tcg_gen_mov_tl(cpu_pc, addr);
47
- tcg_gen_movi_tl(dest, ctx->base.pc_next + 4);
48
+ tcg_gen_movi_tl(dest, make_address_pc(ctx, ctx->base.pc_next + 4));
49
gen_set_gpr(a->rd, dest, EXT_NONE);
50
tcg_gen_lookup_and_goto_ptr();
51
ctx->base.is_jmp = DISAS_NORETURN;
52
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
53
index XXXXXXX..XXXXXXX 100644
54
--- a/target/loongarch/translate.c
55
+++ b/target/loongarch/translate.c
56
@@ -XXX,XX +XXX,XX @@ static TCGv make_address_i(DisasContext *ctx, TCGv base, target_long ofs)
57
return make_address_x(ctx, base, addend);
58
}
59
60
+static uint64_t make_address_pc(DisasContext *ctx, uint64_t addr)
61
+{
62
+ return addr;
63
+}
64
+
65
#include "decode-insns.c.inc"
66
#include "insn_trans/trans_arith.c.inc"
67
#include "insn_trans/trans_shift.c.inc"
68
--
69
2.39.1
70
71
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
Signed-off-by: Jiajie Chen <c@jia.je>
4
Co-authored-by: Richard Henderson <richard.henderson@linaro.org>
5
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
6
Signed-off-by: Song Gao <gaosong@loongson.cn>
7
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
8
Message-ID: <20230822032724.1353391-6-gaosong@loongson.cn>
9
[PMD: Extract helper from bigger patch]
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Message-Id: <20230822071405.35386-9-philmd@linaro.org>
12
---
13
target/loongarch/cpu.c | 16 ++++++++--------
14
target/loongarch/cpu.h | 5 +++++
15
target/loongarch/gdbstub.c | 2 +-
16
target/loongarch/op_helper.c | 4 ++--
17
4 files changed, 16 insertions(+), 11 deletions(-)
18
19
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
20
index XXXXXXX..XXXXXXX 100644
21
--- a/target/loongarch/cpu.c
22
+++ b/target/loongarch/cpu.c
23
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_set_pc(CPUState *cs, vaddr value)
24
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
25
CPULoongArchState *env = &cpu->env;
26
27
- env->pc = value;
28
+ set_pc(env, value);
29
}
30
31
static vaddr loongarch_cpu_get_pc(CPUState *cs)
32
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_do_interrupt(CPUState *cs)
33
set_DERA:
34
env->CSR_DERA = env->pc;
35
env->CSR_DBG = FIELD_DP64(env->CSR_DBG, CSR_DBG, DST, 1);
36
- env->pc = env->CSR_EENTRY + 0x480;
37
+ set_pc(env, env->CSR_EENTRY + 0x480);
38
break;
39
case EXCCODE_INT:
40
if (FIELD_EX64(env->CSR_DBG, CSR_DBG, DST)) {
41
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_do_interrupt(CPUState *cs)
42
43
/* Find the highest-priority interrupt. */
44
vector = 31 - clz32(pending);
45
- env->pc = env->CSR_EENTRY + (EXCCODE_EXTERNAL_INT + vector) * vec_size;
46
+ set_pc(env, env->CSR_EENTRY + \
47
+ (EXCCODE_EXTERNAL_INT + vector) * vec_size);
48
qemu_log_mask(CPU_LOG_INT,
49
"%s: PC " TARGET_FMT_lx " ERA " TARGET_FMT_lx
50
" cause %d\n" " A " TARGET_FMT_lx " D "
51
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_do_interrupt(CPUState *cs)
52
env->CSR_ECFG, env->CSR_ESTAT);
53
} else {
54
if (tlbfill) {
55
- env->pc = env->CSR_TLBRENTRY;
56
+ set_pc(env, env->CSR_TLBRENTRY);
57
} else {
58
- env->pc = env->CSR_EENTRY;
59
- env->pc += EXCODE_MCODE(cause) * vec_size;
60
+ set_pc(env, env->CSR_EENTRY + EXCODE_MCODE(cause) * vec_size);
61
}
62
qemu_log_mask(CPU_LOG_INT,
63
"%s: PC " TARGET_FMT_lx " ERA " TARGET_FMT_lx
64
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_synchronize_from_tb(CPUState *cs,
65
CPULoongArchState *env = &cpu->env;
66
67
tcg_debug_assert(!(cs->tcg_cflags & CF_PCREL));
68
- env->pc = tb->pc;
69
+ set_pc(env, tb->pc);
70
}
71
72
static void loongarch_restore_state_to_opc(CPUState *cs,
73
@@ -XXX,XX +XXX,XX @@ static void loongarch_restore_state_to_opc(CPUState *cs,
74
LoongArchCPU *cpu = LOONGARCH_CPU(cs);
75
CPULoongArchState *env = &cpu->env;
76
77
- env->pc = data[0];
78
+ set_pc(env, data[0]);
79
}
80
#endif /* CONFIG_TCG */
81
82
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
83
index XXXXXXX..XXXXXXX 100644
84
--- a/target/loongarch/cpu.h
85
+++ b/target/loongarch/cpu.h
86
@@ -XXX,XX +XXX,XX @@ static inline bool is_va32(CPULoongArchState *env)
87
return va32;
88
}
89
90
+static inline void set_pc(CPULoongArchState *env, uint64_t value)
91
+{
92
+ env->pc = value;
93
+}
94
+
95
/*
96
* LoongArch CPUs hardware flags.
97
*/
98
diff --git a/target/loongarch/gdbstub.c b/target/loongarch/gdbstub.c
99
index XXXXXXX..XXXXXXX 100644
100
--- a/target/loongarch/gdbstub.c
101
+++ b/target/loongarch/gdbstub.c
102
@@ -XXX,XX +XXX,XX @@ int loongarch_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
103
env->gpr[n] = tmp;
104
length = read_length;
105
} else if (n == 33) {
106
- env->pc = tmp;
107
+ set_pc(env, tmp);
108
length = read_length;
109
}
110
return length;
111
diff --git a/target/loongarch/op_helper.c b/target/loongarch/op_helper.c
112
index XXXXXXX..XXXXXXX 100644
113
--- a/target/loongarch/op_helper.c
114
+++ b/target/loongarch/op_helper.c
115
@@ -XXX,XX +XXX,XX @@ void helper_ertn(CPULoongArchState *env)
116
env->CSR_TLBRERA = FIELD_DP64(env->CSR_TLBRERA, CSR_TLBRERA, ISTLBR, 0);
117
env->CSR_CRMD = FIELD_DP64(env->CSR_CRMD, CSR_CRMD, DA, 0);
118
env->CSR_CRMD = FIELD_DP64(env->CSR_CRMD, CSR_CRMD, PG, 1);
119
- env->pc = env->CSR_TLBRERA;
120
+ set_pc(env, env->CSR_TLBRERA);
121
qemu_log_mask(CPU_LOG_INT, "%s: TLBRERA " TARGET_FMT_lx "\n",
122
__func__, env->CSR_TLBRERA);
123
} else {
124
csr_pplv = FIELD_EX64(env->CSR_PRMD, CSR_PRMD, PPLV);
125
csr_pie = FIELD_EX64(env->CSR_PRMD, CSR_PRMD, PIE);
126
127
- env->pc = env->CSR_ERA;
128
+ set_pc(env, env->CSR_ERA);
129
qemu_log_mask(CPU_LOG_INT, "%s: ERA " TARGET_FMT_lx "\n",
130
__func__, env->CSR_ERA);
131
}
132
--
133
2.39.1
134
135
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
When running in VA32 mode(!LA64 or VA32L[1-3] matching PLV), virtual
4
address is truncated to 32 bits before address mapping.
5
6
Signed-off-by: Jiajie Chen <c@jia.je>
7
Co-authored-by: Richard Henderson <richard.henderson@linaro.org>
8
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
9
Signed-off-by: Song Gao <gaosong@loongson.cn>
10
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Message-ID: <20230822032724.1353391-6-gaosong@loongson.cn>
12
Message-Id: <20230822071405.35386-10-philmd@linaro.org>
13
---
14
target/loongarch/cpu.h | 6 +++++-
15
target/loongarch/translate.c | 16 +++++++++++++++-
16
2 files changed, 20 insertions(+), 2 deletions(-)
17
18
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
19
index XXXXXXX..XXXXXXX 100644
20
--- a/target/loongarch/cpu.h
21
+++ b/target/loongarch/cpu.h
22
@@ -XXX,XX +XXX,XX @@ static inline bool is_va32(CPULoongArchState *env)
23
24
static inline void set_pc(CPULoongArchState *env, uint64_t value)
25
{
26
- env->pc = value;
27
+ if (is_va32(env)) {
28
+ env->pc = (uint32_t)value;
29
+ } else {
30
+ env->pc = value;
31
+ }
32
}
33
34
/*
35
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
36
index XXXXXXX..XXXXXXX 100644
37
--- a/target/loongarch/translate.c
38
+++ b/target/loongarch/translate.c
39
@@ -XXX,XX +XXX,XX @@ void generate_exception(DisasContext *ctx, int excp)
40
41
static inline void gen_goto_tb(DisasContext *ctx, int n, target_ulong dest)
42
{
43
+ if (ctx->va32) {
44
+ dest = (uint32_t) dest;
45
+ }
46
+
47
if (translator_use_goto_tb(&ctx->base, dest)) {
48
tcg_gen_goto_tb(n);
49
tcg_gen_movi_tl(cpu_pc, dest);
50
@@ -XXX,XX +XXX,XX @@ static TCGv make_address_x(DisasContext *ctx, TCGv base, TCGv addend)
51
{
52
TCGv temp = NULL;
53
54
- if (addend) {
55
+ if (addend || ctx->va32) {
56
temp = tcg_temp_new();
57
+ }
58
+ if (addend) {
59
tcg_gen_add_tl(temp, base, addend);
60
base = temp;
61
}
62
+ if (ctx->va32) {
63
+ tcg_gen_ext32u_tl(temp, base);
64
+ base = temp;
65
+ }
66
return base;
67
}
68
69
@@ -XXX,XX +XXX,XX @@ static void loongarch_tr_translate_insn(DisasContextBase *dcbase, CPUState *cs)
70
}
71
72
ctx->base.pc_next += 4;
73
+
74
+ if (ctx->va32) {
75
+ ctx->base.pc_next = (uint32_t)ctx->base.pc_next;
76
+ }
77
}
78
79
static void loongarch_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
80
--
81
2.39.1
82
83
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
In VA32 mode, BL, JIRL and PC* instructions should sign-extend the low
4
32 bit result to 64 bits.
5
6
Signed-off-by: Jiajie Chen <c@jia.je>
7
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
8
Signed-off-by: Song Gao <gaosong@loongson.cn>
9
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
10
Message-ID: <20230822032724.1353391-7-gaosong@loongson.cn>
11
Message-Id: <20230822071959.35620-1-philmd@linaro.org>
12
---
13
target/loongarch/translate.c | 3 +++
14
1 file changed, 3 insertions(+)
15
16
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
17
index XXXXXXX..XXXXXXX 100644
18
--- a/target/loongarch/translate.c
19
+++ b/target/loongarch/translate.c
20
@@ -XXX,XX +XXX,XX @@ static TCGv make_address_i(DisasContext *ctx, TCGv base, target_long ofs)
21
22
static uint64_t make_address_pc(DisasContext *ctx, uint64_t addr)
23
{
24
+ if (ctx->va32) {
25
+ addr = (int32_t)addr;
26
+ }
27
return addr;
28
}
29
30
--
31
2.39.1
32
33
diff view generated by jsdifflib
New patch
1
The default check parmeter is ALL.
1
2
3
Suggested-by: Richard Henderson <richard.henderson@linaro.org>
4
Signed-off-by: Song Gao <gaosong@loongson.cn>
5
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Message-ID: <20230822032724.1353391-8-gaosong@loongson.cn>
8
Message-Id: <20230822071959.35620-2-philmd@linaro.org>
9
---
10
target/loongarch/insn_trans/trans_arith.c.inc | 84 +-
11
.../loongarch/insn_trans/trans_atomic.c.inc | 80 +-
12
target/loongarch/insn_trans/trans_bit.c.inc | 56 +-
13
.../loongarch/insn_trans/trans_branch.c.inc | 20 +-
14
target/loongarch/insn_trans/trans_extra.c.inc | 16 +-
15
.../loongarch/insn_trans/trans_farith.c.inc | 72 +-
16
target/loongarch/insn_trans/trans_fcnv.c.inc | 56 +-
17
.../loongarch/insn_trans/trans_fmemory.c.inc | 32 +-
18
target/loongarch/insn_trans/trans_fmov.c.inc | 16 +-
19
target/loongarch/insn_trans/trans_lsx.c.inc | 1322 ++++++++---------
20
.../loongarch/insn_trans/trans_memory.c.inc | 84 +-
21
.../insn_trans/trans_privileged.c.inc | 16 +-
22
target/loongarch/insn_trans/trans_shift.c.inc | 30 +-
23
target/loongarch/translate.h | 6 +-
24
14 files changed, 946 insertions(+), 944 deletions(-)
25
26
diff --git a/target/loongarch/insn_trans/trans_arith.c.inc b/target/loongarch/insn_trans/trans_arith.c.inc
27
index XXXXXXX..XXXXXXX 100644
28
--- a/target/loongarch/insn_trans/trans_arith.c.inc
29
+++ b/target/loongarch/insn_trans/trans_arith.c.inc
30
@@ -XXX,XX +XXX,XX @@ static bool trans_addu16i_d(DisasContext *ctx, arg_addu16i_d *a)
31
return true;
32
}
33
34
-TRANS(add_w, gen_rrr, EXT_NONE, EXT_NONE, EXT_SIGN, tcg_gen_add_tl)
35
-TRANS(add_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_add_tl)
36
-TRANS(sub_w, gen_rrr, EXT_NONE, EXT_NONE, EXT_SIGN, tcg_gen_sub_tl)
37
-TRANS(sub_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_sub_tl)
38
-TRANS(and, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_and_tl)
39
-TRANS(or, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_or_tl)
40
-TRANS(xor, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_xor_tl)
41
-TRANS(nor, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_nor_tl)
42
-TRANS(andn, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_andc_tl)
43
-TRANS(orn, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_orc_tl)
44
-TRANS(slt, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_slt)
45
-TRANS(sltu, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sltu)
46
-TRANS(mul_w, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, tcg_gen_mul_tl)
47
-TRANS(mul_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_mul_tl)
48
-TRANS(mulh_w, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_NONE, gen_mulh_w)
49
-TRANS(mulh_wu, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_NONE, gen_mulh_w)
50
-TRANS(mulh_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_d)
51
-TRANS(mulh_du, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_du)
52
-TRANS(mulw_d_w, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_NONE, tcg_gen_mul_tl)
53
-TRANS(mulw_d_wu, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_NONE, tcg_gen_mul_tl)
54
-TRANS(div_w, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, gen_div_w)
55
-TRANS(mod_w, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, gen_rem_w)
56
-TRANS(div_wu, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_SIGN, gen_div_du)
57
-TRANS(mod_wu, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_SIGN, gen_rem_du)
58
-TRANS(div_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_d)
59
-TRANS(mod_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_d)
60
-TRANS(div_du, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_du)
61
-TRANS(mod_du, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_du)
62
-TRANS(slti, gen_rri_v, EXT_NONE, EXT_NONE, gen_slt)
63
-TRANS(sltui, gen_rri_v, EXT_NONE, EXT_NONE, gen_sltu)
64
-TRANS(addi_w, gen_rri_c, EXT_NONE, EXT_SIGN, tcg_gen_addi_tl)
65
-TRANS(addi_d, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_addi_tl)
66
-TRANS(alsl_w, gen_rrr_sa, EXT_NONE, EXT_SIGN, gen_alsl)
67
-TRANS(alsl_wu, gen_rrr_sa, EXT_NONE, EXT_ZERO, gen_alsl)
68
-TRANS(alsl_d, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_alsl)
69
-TRANS(pcaddi, gen_pc, gen_pcaddi)
70
-TRANS(pcalau12i, gen_pc, gen_pcalau12i)
71
-TRANS(pcaddu12i, gen_pc, gen_pcaddu12i)
72
-TRANS(pcaddu18i, gen_pc, gen_pcaddu18i)
73
-TRANS(andi, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_andi_tl)
74
-TRANS(ori, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_ori_tl)
75
-TRANS(xori, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_xori_tl)
76
+TRANS(add_w, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_SIGN, tcg_gen_add_tl)
77
+TRANS(add_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_add_tl)
78
+TRANS(sub_w, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_SIGN, tcg_gen_sub_tl)
79
+TRANS(sub_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_sub_tl)
80
+TRANS(and, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_and_tl)
81
+TRANS(or, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_or_tl)
82
+TRANS(xor, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_xor_tl)
83
+TRANS(nor, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_nor_tl)
84
+TRANS(andn, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_andc_tl)
85
+TRANS(orn, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_orc_tl)
86
+TRANS(slt, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_slt)
87
+TRANS(sltu, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sltu)
88
+TRANS(mul_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, tcg_gen_mul_tl)
89
+TRANS(mul_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_mul_tl)
90
+TRANS(mulh_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_NONE, gen_mulh_w)
91
+TRANS(mulh_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_NONE, gen_mulh_w)
92
+TRANS(mulh_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_d)
93
+TRANS(mulh_du, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_du)
94
+TRANS(mulw_d_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_NONE, tcg_gen_mul_tl)
95
+TRANS(mulw_d_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_NONE, tcg_gen_mul_tl)
96
+TRANS(div_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, gen_div_w)
97
+TRANS(mod_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, gen_rem_w)
98
+TRANS(div_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_SIGN, gen_div_du)
99
+TRANS(mod_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_SIGN, gen_rem_du)
100
+TRANS(div_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_d)
101
+TRANS(mod_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_d)
102
+TRANS(div_du, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_du)
103
+TRANS(mod_du, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_du)
104
+TRANS(slti, ALL, gen_rri_v, EXT_NONE, EXT_NONE, gen_slt)
105
+TRANS(sltui, ALL, gen_rri_v, EXT_NONE, EXT_NONE, gen_sltu)
106
+TRANS(addi_w, ALL, gen_rri_c, EXT_NONE, EXT_SIGN, tcg_gen_addi_tl)
107
+TRANS(addi_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_addi_tl)
108
+TRANS(alsl_w, ALL, gen_rrr_sa, EXT_NONE, EXT_SIGN, gen_alsl)
109
+TRANS(alsl_wu, ALL, gen_rrr_sa, EXT_NONE, EXT_ZERO, gen_alsl)
110
+TRANS(alsl_d, ALL, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_alsl)
111
+TRANS(pcaddi, ALL, gen_pc, gen_pcaddi)
112
+TRANS(pcalau12i, ALL, gen_pc, gen_pcalau12i)
113
+TRANS(pcaddu12i, ALL, gen_pc, gen_pcaddu12i)
114
+TRANS(pcaddu18i, ALL, gen_pc, gen_pcaddu18i)
115
+TRANS(andi, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_andi_tl)
116
+TRANS(ori, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_ori_tl)
117
+TRANS(xori, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_xori_tl)
118
diff --git a/target/loongarch/insn_trans/trans_atomic.c.inc b/target/loongarch/insn_trans/trans_atomic.c.inc
119
index XXXXXXX..XXXXXXX 100644
120
--- a/target/loongarch/insn_trans/trans_atomic.c.inc
121
+++ b/target/loongarch/insn_trans/trans_atomic.c.inc
122
@@ -XXX,XX +XXX,XX @@ static bool gen_am(DisasContext *ctx, arg_rrr *a,
123
return true;
124
}
125
126
-TRANS(ll_w, gen_ll, MO_TESL)
127
-TRANS(sc_w, gen_sc, MO_TESL)
128
-TRANS(ll_d, gen_ll, MO_TEUQ)
129
-TRANS(sc_d, gen_sc, MO_TEUQ)
130
-TRANS(amswap_w, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
131
-TRANS(amswap_d, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
132
-TRANS(amadd_w, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
133
-TRANS(amadd_d, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
134
-TRANS(amand_w, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
135
-TRANS(amand_d, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
136
-TRANS(amor_w, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
137
-TRANS(amor_d, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
138
-TRANS(amxor_w, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
139
-TRANS(amxor_d, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
140
-TRANS(ammax_w, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
141
-TRANS(ammax_d, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
142
-TRANS(ammin_w, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
143
-TRANS(ammin_d, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
144
-TRANS(ammax_wu, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
145
-TRANS(ammax_du, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
146
-TRANS(ammin_wu, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
147
-TRANS(ammin_du, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
148
-TRANS(amswap_db_w, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
149
-TRANS(amswap_db_d, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
150
-TRANS(amadd_db_w, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
151
-TRANS(amadd_db_d, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
152
-TRANS(amand_db_w, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
153
-TRANS(amand_db_d, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
154
-TRANS(amor_db_w, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
155
-TRANS(amor_db_d, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
156
-TRANS(amxor_db_w, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
157
-TRANS(amxor_db_d, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
158
-TRANS(ammax_db_w, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
159
-TRANS(ammax_db_d, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
160
-TRANS(ammin_db_w, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
161
-TRANS(ammin_db_d, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
162
-TRANS(ammax_db_wu, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
163
-TRANS(ammax_db_du, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
164
-TRANS(ammin_db_wu, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
165
-TRANS(ammin_db_du, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
166
+TRANS(ll_w, ALL, gen_ll, MO_TESL)
167
+TRANS(sc_w, ALL, gen_sc, MO_TESL)
168
+TRANS(ll_d, ALL, gen_ll, MO_TEUQ)
169
+TRANS(sc_d, ALL, gen_sc, MO_TEUQ)
170
+TRANS(amswap_w, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
171
+TRANS(amswap_d, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
172
+TRANS(amadd_w, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
173
+TRANS(amadd_d, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
174
+TRANS(amand_w, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
175
+TRANS(amand_d, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
176
+TRANS(amor_w, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
177
+TRANS(amor_d, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
178
+TRANS(amxor_w, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
179
+TRANS(amxor_d, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
180
+TRANS(ammax_w, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
181
+TRANS(ammax_d, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
182
+TRANS(ammin_w, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
183
+TRANS(ammin_d, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
184
+TRANS(ammax_wu, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
185
+TRANS(ammax_du, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
186
+TRANS(ammin_wu, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
187
+TRANS(ammin_du, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
188
+TRANS(amswap_db_w, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
189
+TRANS(amswap_db_d, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
190
+TRANS(amadd_db_w, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
191
+TRANS(amadd_db_d, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
192
+TRANS(amand_db_w, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
193
+TRANS(amand_db_d, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
194
+TRANS(amor_db_w, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
195
+TRANS(amor_db_d, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
196
+TRANS(amxor_db_w, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
197
+TRANS(amxor_db_d, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
198
+TRANS(ammax_db_w, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
199
+TRANS(ammax_db_d, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
200
+TRANS(ammin_db_w, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
201
+TRANS(ammin_db_d, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
202
+TRANS(ammax_db_wu, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
203
+TRANS(ammax_db_du, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
204
+TRANS(ammin_db_wu, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
205
+TRANS(ammin_db_du, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
206
diff --git a/target/loongarch/insn_trans/trans_bit.c.inc b/target/loongarch/insn_trans/trans_bit.c.inc
207
index XXXXXXX..XXXXXXX 100644
208
--- a/target/loongarch/insn_trans/trans_bit.c.inc
209
+++ b/target/loongarch/insn_trans/trans_bit.c.inc
210
@@ -XXX,XX +XXX,XX @@ static void gen_masknez(TCGv dest, TCGv src1, TCGv src2)
211
tcg_gen_movcond_tl(TCG_COND_NE, dest, src2, zero, zero, src1);
212
}
213
214
-TRANS(ext_w_h, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_ext16s_tl)
215
-TRANS(ext_w_b, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_ext8s_tl)
216
-TRANS(clo_w, gen_rr, EXT_NONE, EXT_NONE, gen_clo_w)
217
-TRANS(clz_w, gen_rr, EXT_ZERO, EXT_NONE, gen_clz_w)
218
-TRANS(cto_w, gen_rr, EXT_NONE, EXT_NONE, gen_cto_w)
219
-TRANS(ctz_w, gen_rr, EXT_NONE, EXT_NONE, gen_ctz_w)
220
-TRANS(clo_d, gen_rr, EXT_NONE, EXT_NONE, gen_clo_d)
221
-TRANS(clz_d, gen_rr, EXT_NONE, EXT_NONE, gen_clz_d)
222
-TRANS(cto_d, gen_rr, EXT_NONE, EXT_NONE, gen_cto_d)
223
-TRANS(ctz_d, gen_rr, EXT_NONE, EXT_NONE, gen_ctz_d)
224
-TRANS(revb_2h, gen_rr, EXT_NONE, EXT_SIGN, gen_revb_2h)
225
-TRANS(revb_4h, gen_rr, EXT_NONE, EXT_NONE, gen_revb_4h)
226
-TRANS(revb_2w, gen_rr, EXT_NONE, EXT_NONE, gen_revb_2w)
227
-TRANS(revb_d, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_bswap64_i64)
228
-TRANS(revh_2w, gen_rr, EXT_NONE, EXT_NONE, gen_revh_2w)
229
-TRANS(revh_d, gen_rr, EXT_NONE, EXT_NONE, gen_revh_d)
230
-TRANS(bitrev_4b, gen_rr, EXT_ZERO, EXT_SIGN, gen_helper_bitswap)
231
-TRANS(bitrev_8b, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitswap)
232
-TRANS(bitrev_w, gen_rr, EXT_NONE, EXT_SIGN, gen_helper_bitrev_w)
233
-TRANS(bitrev_d, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitrev_d)
234
-TRANS(maskeqz, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_maskeqz)
235
-TRANS(masknez, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_masknez)
236
-TRANS(bytepick_w, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_bytepick_w)
237
-TRANS(bytepick_d, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_bytepick_d)
238
-TRANS(bstrins_w, gen_bstrins, EXT_SIGN)
239
-TRANS(bstrins_d, gen_bstrins, EXT_NONE)
240
-TRANS(bstrpick_w, gen_bstrpick, EXT_SIGN)
241
-TRANS(bstrpick_d, gen_bstrpick, EXT_NONE)
242
+TRANS(ext_w_h, ALL, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_ext16s_tl)
243
+TRANS(ext_w_b, ALL, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_ext8s_tl)
244
+TRANS(clo_w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_clo_w)
245
+TRANS(clz_w, ALL, gen_rr, EXT_ZERO, EXT_NONE, gen_clz_w)
246
+TRANS(cto_w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_cto_w)
247
+TRANS(ctz_w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_ctz_w)
248
+TRANS(clo_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_clo_d)
249
+TRANS(clz_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_clz_d)
250
+TRANS(cto_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_cto_d)
251
+TRANS(ctz_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_ctz_d)
252
+TRANS(revb_2h, ALL, gen_rr, EXT_NONE, EXT_SIGN, gen_revb_2h)
253
+TRANS(revb_4h, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revb_4h)
254
+TRANS(revb_2w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revb_2w)
255
+TRANS(revb_d, ALL, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_bswap64_i64)
256
+TRANS(revh_2w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revh_2w)
257
+TRANS(revh_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revh_d)
258
+TRANS(bitrev_4b, ALL, gen_rr, EXT_ZERO, EXT_SIGN, gen_helper_bitswap)
259
+TRANS(bitrev_8b, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitswap)
260
+TRANS(bitrev_w, ALL, gen_rr, EXT_NONE, EXT_SIGN, gen_helper_bitrev_w)
261
+TRANS(bitrev_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitrev_d)
262
+TRANS(maskeqz, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_maskeqz)
263
+TRANS(masknez, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_masknez)
264
+TRANS(bytepick_w, ALL, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_bytepick_w)
265
+TRANS(bytepick_d, ALL, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_bytepick_d)
266
+TRANS(bstrins_w, ALL, gen_bstrins, EXT_SIGN)
267
+TRANS(bstrins_d, ALL, gen_bstrins, EXT_NONE)
268
+TRANS(bstrpick_w, ALL, gen_bstrpick, EXT_SIGN)
269
+TRANS(bstrpick_d, ALL, gen_bstrpick, EXT_NONE)
270
diff --git a/target/loongarch/insn_trans/trans_branch.c.inc b/target/loongarch/insn_trans/trans_branch.c.inc
271
index XXXXXXX..XXXXXXX 100644
272
--- a/target/loongarch/insn_trans/trans_branch.c.inc
273
+++ b/target/loongarch/insn_trans/trans_branch.c.inc
274
@@ -XXX,XX +XXX,XX @@ static bool gen_cz_bc(DisasContext *ctx, arg_c_offs *a, TCGCond cond)
275
return true;
276
}
277
278
-TRANS(beq, gen_rr_bc, TCG_COND_EQ)
279
-TRANS(bne, gen_rr_bc, TCG_COND_NE)
280
-TRANS(blt, gen_rr_bc, TCG_COND_LT)
281
-TRANS(bge, gen_rr_bc, TCG_COND_GE)
282
-TRANS(bltu, gen_rr_bc, TCG_COND_LTU)
283
-TRANS(bgeu, gen_rr_bc, TCG_COND_GEU)
284
-TRANS(beqz, gen_rz_bc, TCG_COND_EQ)
285
-TRANS(bnez, gen_rz_bc, TCG_COND_NE)
286
-TRANS(bceqz, gen_cz_bc, TCG_COND_EQ)
287
-TRANS(bcnez, gen_cz_bc, TCG_COND_NE)
288
+TRANS(beq, ALL, gen_rr_bc, TCG_COND_EQ)
289
+TRANS(bne, ALL, gen_rr_bc, TCG_COND_NE)
290
+TRANS(blt, ALL, gen_rr_bc, TCG_COND_LT)
291
+TRANS(bge, ALL, gen_rr_bc, TCG_COND_GE)
292
+TRANS(bltu, ALL, gen_rr_bc, TCG_COND_LTU)
293
+TRANS(bgeu, ALL, gen_rr_bc, TCG_COND_GEU)
294
+TRANS(beqz, ALL, gen_rz_bc, TCG_COND_EQ)
295
+TRANS(bnez, ALL, gen_rz_bc, TCG_COND_NE)
296
+TRANS(bceqz, ALL, gen_cz_bc, TCG_COND_EQ)
297
+TRANS(bcnez, ALL, gen_cz_bc, TCG_COND_NE)
298
diff --git a/target/loongarch/insn_trans/trans_extra.c.inc b/target/loongarch/insn_trans/trans_extra.c.inc
299
index XXXXXXX..XXXXXXX 100644
300
--- a/target/loongarch/insn_trans/trans_extra.c.inc
301
+++ b/target/loongarch/insn_trans/trans_extra.c.inc
302
@@ -XXX,XX +XXX,XX @@ static bool gen_crc(DisasContext *ctx, arg_rrr *a,
303
return true;
304
}
305
306
-TRANS(crc_w_b_w, gen_crc, gen_helper_crc32, tcg_constant_tl(1))
307
-TRANS(crc_w_h_w, gen_crc, gen_helper_crc32, tcg_constant_tl(2))
308
-TRANS(crc_w_w_w, gen_crc, gen_helper_crc32, tcg_constant_tl(4))
309
-TRANS(crc_w_d_w, gen_crc, gen_helper_crc32, tcg_constant_tl(8))
310
-TRANS(crcc_w_b_w, gen_crc, gen_helper_crc32c, tcg_constant_tl(1))
311
-TRANS(crcc_w_h_w, gen_crc, gen_helper_crc32c, tcg_constant_tl(2))
312
-TRANS(crcc_w_w_w, gen_crc, gen_helper_crc32c, tcg_constant_tl(4))
313
-TRANS(crcc_w_d_w, gen_crc, gen_helper_crc32c, tcg_constant_tl(8))
314
+TRANS(crc_w_b_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(1))
315
+TRANS(crc_w_h_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(2))
316
+TRANS(crc_w_w_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(4))
317
+TRANS(crc_w_d_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(8))
318
+TRANS(crcc_w_b_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(1))
319
+TRANS(crcc_w_h_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(2))
320
+TRANS(crcc_w_w_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(4))
321
+TRANS(crcc_w_d_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(8))
322
diff --git a/target/loongarch/insn_trans/trans_farith.c.inc b/target/loongarch/insn_trans/trans_farith.c.inc
323
index XXXXXXX..XXXXXXX 100644
324
--- a/target/loongarch/insn_trans/trans_farith.c.inc
325
+++ b/target/loongarch/insn_trans/trans_farith.c.inc
326
@@ -XXX,XX +XXX,XX @@ static bool trans_fneg_d(DisasContext *ctx, arg_fneg_d *a)
327
return true;
328
}
329
330
-TRANS(fadd_s, gen_fff, gen_helper_fadd_s)
331
-TRANS(fadd_d, gen_fff, gen_helper_fadd_d)
332
-TRANS(fsub_s, gen_fff, gen_helper_fsub_s)
333
-TRANS(fsub_d, gen_fff, gen_helper_fsub_d)
334
-TRANS(fmul_s, gen_fff, gen_helper_fmul_s)
335
-TRANS(fmul_d, gen_fff, gen_helper_fmul_d)
336
-TRANS(fdiv_s, gen_fff, gen_helper_fdiv_s)
337
-TRANS(fdiv_d, gen_fff, gen_helper_fdiv_d)
338
-TRANS(fmax_s, gen_fff, gen_helper_fmax_s)
339
-TRANS(fmax_d, gen_fff, gen_helper_fmax_d)
340
-TRANS(fmin_s, gen_fff, gen_helper_fmin_s)
341
-TRANS(fmin_d, gen_fff, gen_helper_fmin_d)
342
-TRANS(fmaxa_s, gen_fff, gen_helper_fmaxa_s)
343
-TRANS(fmaxa_d, gen_fff, gen_helper_fmaxa_d)
344
-TRANS(fmina_s, gen_fff, gen_helper_fmina_s)
345
-TRANS(fmina_d, gen_fff, gen_helper_fmina_d)
346
-TRANS(fscaleb_s, gen_fff, gen_helper_fscaleb_s)
347
-TRANS(fscaleb_d, gen_fff, gen_helper_fscaleb_d)
348
-TRANS(fsqrt_s, gen_ff, gen_helper_fsqrt_s)
349
-TRANS(fsqrt_d, gen_ff, gen_helper_fsqrt_d)
350
-TRANS(frecip_s, gen_ff, gen_helper_frecip_s)
351
-TRANS(frecip_d, gen_ff, gen_helper_frecip_d)
352
-TRANS(frsqrt_s, gen_ff, gen_helper_frsqrt_s)
353
-TRANS(frsqrt_d, gen_ff, gen_helper_frsqrt_d)
354
-TRANS(flogb_s, gen_ff, gen_helper_flogb_s)
355
-TRANS(flogb_d, gen_ff, gen_helper_flogb_d)
356
-TRANS(fclass_s, gen_ff, gen_helper_fclass_s)
357
-TRANS(fclass_d, gen_ff, gen_helper_fclass_d)
358
-TRANS(fmadd_s, gen_muladd, gen_helper_fmuladd_s, 0)
359
-TRANS(fmadd_d, gen_muladd, gen_helper_fmuladd_d, 0)
360
-TRANS(fmsub_s, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_c)
361
-TRANS(fmsub_d, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_c)
362
-TRANS(fnmadd_s, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_result)
363
-TRANS(fnmadd_d, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_result)
364
-TRANS(fnmsub_s, gen_muladd, gen_helper_fmuladd_s,
365
+TRANS(fadd_s, ALL, gen_fff, gen_helper_fadd_s)
366
+TRANS(fadd_d, ALL, gen_fff, gen_helper_fadd_d)
367
+TRANS(fsub_s, ALL, gen_fff, gen_helper_fsub_s)
368
+TRANS(fsub_d, ALL, gen_fff, gen_helper_fsub_d)
369
+TRANS(fmul_s, ALL, gen_fff, gen_helper_fmul_s)
370
+TRANS(fmul_d, ALL, gen_fff, gen_helper_fmul_d)
371
+TRANS(fdiv_s, ALL, gen_fff, gen_helper_fdiv_s)
372
+TRANS(fdiv_d, ALL, gen_fff, gen_helper_fdiv_d)
373
+TRANS(fmax_s, ALL, gen_fff, gen_helper_fmax_s)
374
+TRANS(fmax_d, ALL, gen_fff, gen_helper_fmax_d)
375
+TRANS(fmin_s, ALL, gen_fff, gen_helper_fmin_s)
376
+TRANS(fmin_d, ALL, gen_fff, gen_helper_fmin_d)
377
+TRANS(fmaxa_s, ALL, gen_fff, gen_helper_fmaxa_s)
378
+TRANS(fmaxa_d, ALL, gen_fff, gen_helper_fmaxa_d)
379
+TRANS(fmina_s, ALL, gen_fff, gen_helper_fmina_s)
380
+TRANS(fmina_d, ALL, gen_fff, gen_helper_fmina_d)
381
+TRANS(fscaleb_s, ALL, gen_fff, gen_helper_fscaleb_s)
382
+TRANS(fscaleb_d, ALL, gen_fff, gen_helper_fscaleb_d)
383
+TRANS(fsqrt_s, ALL, gen_ff, gen_helper_fsqrt_s)
384
+TRANS(fsqrt_d, ALL, gen_ff, gen_helper_fsqrt_d)
385
+TRANS(frecip_s, ALL, gen_ff, gen_helper_frecip_s)
386
+TRANS(frecip_d, ALL, gen_ff, gen_helper_frecip_d)
387
+TRANS(frsqrt_s, ALL, gen_ff, gen_helper_frsqrt_s)
388
+TRANS(frsqrt_d, ALL, gen_ff, gen_helper_frsqrt_d)
389
+TRANS(flogb_s, ALL, gen_ff, gen_helper_flogb_s)
390
+TRANS(flogb_d, ALL, gen_ff, gen_helper_flogb_d)
391
+TRANS(fclass_s, ALL, gen_ff, gen_helper_fclass_s)
392
+TRANS(fclass_d, ALL, gen_ff, gen_helper_fclass_d)
393
+TRANS(fmadd_s, ALL, gen_muladd, gen_helper_fmuladd_s, 0)
394
+TRANS(fmadd_d, ALL, gen_muladd, gen_helper_fmuladd_d, 0)
395
+TRANS(fmsub_s, ALL, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_c)
396
+TRANS(fmsub_d, ALL, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_c)
397
+TRANS(fnmadd_s, ALL, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_result)
398
+TRANS(fnmadd_d, ALL, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_result)
399
+TRANS(fnmsub_s, ALL, gen_muladd, gen_helper_fmuladd_s,
400
float_muladd_negate_c | float_muladd_negate_result)
401
-TRANS(fnmsub_d, gen_muladd, gen_helper_fmuladd_d,
402
+TRANS(fnmsub_d, ALL, gen_muladd, gen_helper_fmuladd_d,
403
float_muladd_negate_c | float_muladd_negate_result)
404
diff --git a/target/loongarch/insn_trans/trans_fcnv.c.inc b/target/loongarch/insn_trans/trans_fcnv.c.inc
405
index XXXXXXX..XXXXXXX 100644
406
--- a/target/loongarch/insn_trans/trans_fcnv.c.inc
407
+++ b/target/loongarch/insn_trans/trans_fcnv.c.inc
408
@@ -XXX,XX +XXX,XX @@
409
* Copyright (c) 2021 Loongson Technology Corporation Limited
410
*/
411
412
-TRANS(fcvt_s_d, gen_ff, gen_helper_fcvt_s_d)
413
-TRANS(fcvt_d_s, gen_ff, gen_helper_fcvt_d_s)
414
-TRANS(ftintrm_w_s, gen_ff, gen_helper_ftintrm_w_s)
415
-TRANS(ftintrm_w_d, gen_ff, gen_helper_ftintrm_w_d)
416
-TRANS(ftintrm_l_s, gen_ff, gen_helper_ftintrm_l_s)
417
-TRANS(ftintrm_l_d, gen_ff, gen_helper_ftintrm_l_d)
418
-TRANS(ftintrp_w_s, gen_ff, gen_helper_ftintrp_w_s)
419
-TRANS(ftintrp_w_d, gen_ff, gen_helper_ftintrp_w_d)
420
-TRANS(ftintrp_l_s, gen_ff, gen_helper_ftintrp_l_s)
421
-TRANS(ftintrp_l_d, gen_ff, gen_helper_ftintrp_l_d)
422
-TRANS(ftintrz_w_s, gen_ff, gen_helper_ftintrz_w_s)
423
-TRANS(ftintrz_w_d, gen_ff, gen_helper_ftintrz_w_d)
424
-TRANS(ftintrz_l_s, gen_ff, gen_helper_ftintrz_l_s)
425
-TRANS(ftintrz_l_d, gen_ff, gen_helper_ftintrz_l_d)
426
-TRANS(ftintrne_w_s, gen_ff, gen_helper_ftintrne_w_s)
427
-TRANS(ftintrne_w_d, gen_ff, gen_helper_ftintrne_w_d)
428
-TRANS(ftintrne_l_s, gen_ff, gen_helper_ftintrne_l_s)
429
-TRANS(ftintrne_l_d, gen_ff, gen_helper_ftintrne_l_d)
430
-TRANS(ftint_w_s, gen_ff, gen_helper_ftint_w_s)
431
-TRANS(ftint_w_d, gen_ff, gen_helper_ftint_w_d)
432
-TRANS(ftint_l_s, gen_ff, gen_helper_ftint_l_s)
433
-TRANS(ftint_l_d, gen_ff, gen_helper_ftint_l_d)
434
-TRANS(ffint_s_w, gen_ff, gen_helper_ffint_s_w)
435
-TRANS(ffint_s_l, gen_ff, gen_helper_ffint_s_l)
436
-TRANS(ffint_d_w, gen_ff, gen_helper_ffint_d_w)
437
-TRANS(ffint_d_l, gen_ff, gen_helper_ffint_d_l)
438
-TRANS(frint_s, gen_ff, gen_helper_frint_s)
439
-TRANS(frint_d, gen_ff, gen_helper_frint_d)
440
+TRANS(fcvt_s_d, ALL, gen_ff, gen_helper_fcvt_s_d)
441
+TRANS(fcvt_d_s, ALL, gen_ff, gen_helper_fcvt_d_s)
442
+TRANS(ftintrm_w_s, ALL, gen_ff, gen_helper_ftintrm_w_s)
443
+TRANS(ftintrm_w_d, ALL, gen_ff, gen_helper_ftintrm_w_d)
444
+TRANS(ftintrm_l_s, ALL, gen_ff, gen_helper_ftintrm_l_s)
445
+TRANS(ftintrm_l_d, ALL, gen_ff, gen_helper_ftintrm_l_d)
446
+TRANS(ftintrp_w_s, ALL, gen_ff, gen_helper_ftintrp_w_s)
447
+TRANS(ftintrp_w_d, ALL, gen_ff, gen_helper_ftintrp_w_d)
448
+TRANS(ftintrp_l_s, ALL, gen_ff, gen_helper_ftintrp_l_s)
449
+TRANS(ftintrp_l_d, ALL, gen_ff, gen_helper_ftintrp_l_d)
450
+TRANS(ftintrz_w_s, ALL, gen_ff, gen_helper_ftintrz_w_s)
451
+TRANS(ftintrz_w_d, ALL, gen_ff, gen_helper_ftintrz_w_d)
452
+TRANS(ftintrz_l_s, ALL, gen_ff, gen_helper_ftintrz_l_s)
453
+TRANS(ftintrz_l_d, ALL, gen_ff, gen_helper_ftintrz_l_d)
454
+TRANS(ftintrne_w_s, ALL, gen_ff, gen_helper_ftintrne_w_s)
455
+TRANS(ftintrne_w_d, ALL, gen_ff, gen_helper_ftintrne_w_d)
456
+TRANS(ftintrne_l_s, ALL, gen_ff, gen_helper_ftintrne_l_s)
457
+TRANS(ftintrne_l_d, ALL, gen_ff, gen_helper_ftintrne_l_d)
458
+TRANS(ftint_w_s, ALL, gen_ff, gen_helper_ftint_w_s)
459
+TRANS(ftint_w_d, ALL, gen_ff, gen_helper_ftint_w_d)
460
+TRANS(ftint_l_s, ALL, gen_ff, gen_helper_ftint_l_s)
461
+TRANS(ftint_l_d, ALL, gen_ff, gen_helper_ftint_l_d)
462
+TRANS(ffint_s_w, ALL, gen_ff, gen_helper_ffint_s_w)
463
+TRANS(ffint_s_l, ALL, gen_ff, gen_helper_ffint_s_l)
464
+TRANS(ffint_d_w, ALL, gen_ff, gen_helper_ffint_d_w)
465
+TRANS(ffint_d_l, ALL, gen_ff, gen_helper_ffint_d_l)
466
+TRANS(frint_s, ALL, gen_ff, gen_helper_frint_s)
467
+TRANS(frint_d, ALL, gen_ff, gen_helper_frint_d)
468
diff --git a/target/loongarch/insn_trans/trans_fmemory.c.inc b/target/loongarch/insn_trans/trans_fmemory.c.inc
469
index XXXXXXX..XXXXXXX 100644
470
--- a/target/loongarch/insn_trans/trans_fmemory.c.inc
471
+++ b/target/loongarch/insn_trans/trans_fmemory.c.inc
472
@@ -XXX,XX +XXX,XX @@ static bool gen_fstore_le(DisasContext *ctx, arg_frr *a, MemOp mop)
473
return true;
474
}
475
476
-TRANS(fld_s, gen_fload_i, MO_TEUL)
477
-TRANS(fst_s, gen_fstore_i, MO_TEUL)
478
-TRANS(fld_d, gen_fload_i, MO_TEUQ)
479
-TRANS(fst_d, gen_fstore_i, MO_TEUQ)
480
-TRANS(fldx_s, gen_floadx, MO_TEUL)
481
-TRANS(fldx_d, gen_floadx, MO_TEUQ)
482
-TRANS(fstx_s, gen_fstorex, MO_TEUL)
483
-TRANS(fstx_d, gen_fstorex, MO_TEUQ)
484
-TRANS(fldgt_s, gen_fload_gt, MO_TEUL)
485
-TRANS(fldgt_d, gen_fload_gt, MO_TEUQ)
486
-TRANS(fldle_s, gen_fload_le, MO_TEUL)
487
-TRANS(fldle_d, gen_fload_le, MO_TEUQ)
488
-TRANS(fstgt_s, gen_fstore_gt, MO_TEUL)
489
-TRANS(fstgt_d, gen_fstore_gt, MO_TEUQ)
490
-TRANS(fstle_s, gen_fstore_le, MO_TEUL)
491
-TRANS(fstle_d, gen_fstore_le, MO_TEUQ)
492
+TRANS(fld_s, ALL, gen_fload_i, MO_TEUL)
493
+TRANS(fst_s, ALL, gen_fstore_i, MO_TEUL)
494
+TRANS(fld_d, ALL, gen_fload_i, MO_TEUQ)
495
+TRANS(fst_d, ALL, gen_fstore_i, MO_TEUQ)
496
+TRANS(fldx_s, ALL, gen_floadx, MO_TEUL)
497
+TRANS(fldx_d, ALL, gen_floadx, MO_TEUQ)
498
+TRANS(fstx_s, ALL, gen_fstorex, MO_TEUL)
499
+TRANS(fstx_d, ALL, gen_fstorex, MO_TEUQ)
500
+TRANS(fldgt_s, ALL, gen_fload_gt, MO_TEUL)
501
+TRANS(fldgt_d, ALL, gen_fload_gt, MO_TEUQ)
502
+TRANS(fldle_s, ALL, gen_fload_le, MO_TEUL)
503
+TRANS(fldle_d, ALL, gen_fload_le, MO_TEUQ)
504
+TRANS(fstgt_s, ALL, gen_fstore_gt, MO_TEUL)
505
+TRANS(fstgt_d, ALL, gen_fstore_gt, MO_TEUQ)
506
+TRANS(fstle_s, ALL, gen_fstore_le, MO_TEUL)
507
+TRANS(fstle_d, ALL, gen_fstore_le, MO_TEUQ)
508
diff --git a/target/loongarch/insn_trans/trans_fmov.c.inc b/target/loongarch/insn_trans/trans_fmov.c.inc
509
index XXXXXXX..XXXXXXX 100644
510
--- a/target/loongarch/insn_trans/trans_fmov.c.inc
511
+++ b/target/loongarch/insn_trans/trans_fmov.c.inc
512
@@ -XXX,XX +XXX,XX @@ static bool trans_movcf2gr(DisasContext *ctx, arg_movcf2gr *a)
513
return true;
514
}
515
516
-TRANS(fmov_s, gen_f2f, tcg_gen_mov_tl, true)
517
-TRANS(fmov_d, gen_f2f, tcg_gen_mov_tl, false)
518
-TRANS(movgr2fr_w, gen_r2f, gen_movgr2fr_w)
519
-TRANS(movgr2fr_d, gen_r2f, tcg_gen_mov_tl)
520
-TRANS(movgr2frh_w, gen_r2f, gen_movgr2frh_w)
521
-TRANS(movfr2gr_s, gen_f2r, tcg_gen_ext32s_tl)
522
-TRANS(movfr2gr_d, gen_f2r, tcg_gen_mov_tl)
523
-TRANS(movfrh2gr_s, gen_f2r, gen_movfrh2gr_s)
524
+TRANS(fmov_s, ALL, gen_f2f, tcg_gen_mov_tl, true)
525
+TRANS(fmov_d, ALL, gen_f2f, tcg_gen_mov_tl, false)
526
+TRANS(movgr2fr_w, ALL, gen_r2f, gen_movgr2fr_w)
527
+TRANS(movgr2fr_d, ALL, gen_r2f, tcg_gen_mov_tl)
528
+TRANS(movgr2frh_w, ALL, gen_r2f, gen_movgr2frh_w)
529
+TRANS(movfr2gr_s, ALL, gen_f2r, tcg_gen_ext32s_tl)
530
+TRANS(movfr2gr_d, ALL, gen_f2r, tcg_gen_mov_tl)
531
+TRANS(movfrh2gr_s, ALL, gen_f2r, gen_movfrh2gr_s)
532
diff --git a/target/loongarch/insn_trans/trans_lsx.c.inc b/target/loongarch/insn_trans/trans_lsx.c.inc
533
index XXXXXXX..XXXXXXX 100644
534
--- a/target/loongarch/insn_trans/trans_lsx.c.inc
535
+++ b/target/loongarch/insn_trans/trans_lsx.c.inc
536
@@ -XXX,XX +XXX,XX @@ static bool gvec_subi(DisasContext *ctx, arg_vv_i *a, MemOp mop)
537
return true;
538
}
539
540
-TRANS(vadd_b, gvec_vvv, MO_8, tcg_gen_gvec_add)
541
-TRANS(vadd_h, gvec_vvv, MO_16, tcg_gen_gvec_add)
542
-TRANS(vadd_w, gvec_vvv, MO_32, tcg_gen_gvec_add)
543
-TRANS(vadd_d, gvec_vvv, MO_64, tcg_gen_gvec_add)
544
+TRANS(vadd_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_add)
545
+TRANS(vadd_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_add)
546
+TRANS(vadd_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_add)
547
+TRANS(vadd_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_add)
548
549
#define VADDSUB_Q(NAME) \
550
static bool trans_v## NAME ##_q(DisasContext *ctx, arg_vvv *a) \
551
@@ -XXX,XX +XXX,XX @@ static bool trans_v## NAME ##_q(DisasContext *ctx, arg_vvv *a) \
552
VADDSUB_Q(add)
553
VADDSUB_Q(sub)
554
555
-TRANS(vsub_b, gvec_vvv, MO_8, tcg_gen_gvec_sub)
556
-TRANS(vsub_h, gvec_vvv, MO_16, tcg_gen_gvec_sub)
557
-TRANS(vsub_w, gvec_vvv, MO_32, tcg_gen_gvec_sub)
558
-TRANS(vsub_d, gvec_vvv, MO_64, tcg_gen_gvec_sub)
559
-
560
-TRANS(vaddi_bu, gvec_vv_i, MO_8, tcg_gen_gvec_addi)
561
-TRANS(vaddi_hu, gvec_vv_i, MO_16, tcg_gen_gvec_addi)
562
-TRANS(vaddi_wu, gvec_vv_i, MO_32, tcg_gen_gvec_addi)
563
-TRANS(vaddi_du, gvec_vv_i, MO_64, tcg_gen_gvec_addi)
564
-TRANS(vsubi_bu, gvec_subi, MO_8)
565
-TRANS(vsubi_hu, gvec_subi, MO_16)
566
-TRANS(vsubi_wu, gvec_subi, MO_32)
567
-TRANS(vsubi_du, gvec_subi, MO_64)
568
-
569
-TRANS(vneg_b, gvec_vv, MO_8, tcg_gen_gvec_neg)
570
-TRANS(vneg_h, gvec_vv, MO_16, tcg_gen_gvec_neg)
571
-TRANS(vneg_w, gvec_vv, MO_32, tcg_gen_gvec_neg)
572
-TRANS(vneg_d, gvec_vv, MO_64, tcg_gen_gvec_neg)
573
-
574
-TRANS(vsadd_b, gvec_vvv, MO_8, tcg_gen_gvec_ssadd)
575
-TRANS(vsadd_h, gvec_vvv, MO_16, tcg_gen_gvec_ssadd)
576
-TRANS(vsadd_w, gvec_vvv, MO_32, tcg_gen_gvec_ssadd)
577
-TRANS(vsadd_d, gvec_vvv, MO_64, tcg_gen_gvec_ssadd)
578
-TRANS(vsadd_bu, gvec_vvv, MO_8, tcg_gen_gvec_usadd)
579
-TRANS(vsadd_hu, gvec_vvv, MO_16, tcg_gen_gvec_usadd)
580
-TRANS(vsadd_wu, gvec_vvv, MO_32, tcg_gen_gvec_usadd)
581
-TRANS(vsadd_du, gvec_vvv, MO_64, tcg_gen_gvec_usadd)
582
-TRANS(vssub_b, gvec_vvv, MO_8, tcg_gen_gvec_sssub)
583
-TRANS(vssub_h, gvec_vvv, MO_16, tcg_gen_gvec_sssub)
584
-TRANS(vssub_w, gvec_vvv, MO_32, tcg_gen_gvec_sssub)
585
-TRANS(vssub_d, gvec_vvv, MO_64, tcg_gen_gvec_sssub)
586
-TRANS(vssub_bu, gvec_vvv, MO_8, tcg_gen_gvec_ussub)
587
-TRANS(vssub_hu, gvec_vvv, MO_16, tcg_gen_gvec_ussub)
588
-TRANS(vssub_wu, gvec_vvv, MO_32, tcg_gen_gvec_ussub)
589
-TRANS(vssub_du, gvec_vvv, MO_64, tcg_gen_gvec_ussub)
590
-
591
-TRANS(vhaddw_h_b, gen_vvv, gen_helper_vhaddw_h_b)
592
-TRANS(vhaddw_w_h, gen_vvv, gen_helper_vhaddw_w_h)
593
-TRANS(vhaddw_d_w, gen_vvv, gen_helper_vhaddw_d_w)
594
-TRANS(vhaddw_q_d, gen_vvv, gen_helper_vhaddw_q_d)
595
-TRANS(vhaddw_hu_bu, gen_vvv, gen_helper_vhaddw_hu_bu)
596
-TRANS(vhaddw_wu_hu, gen_vvv, gen_helper_vhaddw_wu_hu)
597
-TRANS(vhaddw_du_wu, gen_vvv, gen_helper_vhaddw_du_wu)
598
-TRANS(vhaddw_qu_du, gen_vvv, gen_helper_vhaddw_qu_du)
599
-TRANS(vhsubw_h_b, gen_vvv, gen_helper_vhsubw_h_b)
600
-TRANS(vhsubw_w_h, gen_vvv, gen_helper_vhsubw_w_h)
601
-TRANS(vhsubw_d_w, gen_vvv, gen_helper_vhsubw_d_w)
602
-TRANS(vhsubw_q_d, gen_vvv, gen_helper_vhsubw_q_d)
603
-TRANS(vhsubw_hu_bu, gen_vvv, gen_helper_vhsubw_hu_bu)
604
-TRANS(vhsubw_wu_hu, gen_vvv, gen_helper_vhsubw_wu_hu)
605
-TRANS(vhsubw_du_wu, gen_vvv, gen_helper_vhsubw_du_wu)
606
-TRANS(vhsubw_qu_du, gen_vvv, gen_helper_vhsubw_qu_du)
607
+TRANS(vsub_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_sub)
608
+TRANS(vsub_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_sub)
609
+TRANS(vsub_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_sub)
610
+TRANS(vsub_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_sub)
611
+
612
+TRANS(vaddi_bu, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_addi)
613
+TRANS(vaddi_hu, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_addi)
614
+TRANS(vaddi_wu, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_addi)
615
+TRANS(vaddi_du, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_addi)
616
+TRANS(vsubi_bu, ALL, gvec_subi, MO_8)
617
+TRANS(vsubi_hu, ALL, gvec_subi, MO_16)
618
+TRANS(vsubi_wu, ALL, gvec_subi, MO_32)
619
+TRANS(vsubi_du, ALL, gvec_subi, MO_64)
620
+
621
+TRANS(vneg_b, ALL, gvec_vv, MO_8, tcg_gen_gvec_neg)
622
+TRANS(vneg_h, ALL, gvec_vv, MO_16, tcg_gen_gvec_neg)
623
+TRANS(vneg_w, ALL, gvec_vv, MO_32, tcg_gen_gvec_neg)
624
+TRANS(vneg_d, ALL, gvec_vv, MO_64, tcg_gen_gvec_neg)
625
+
626
+TRANS(vsadd_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_ssadd)
627
+TRANS(vsadd_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_ssadd)
628
+TRANS(vsadd_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_ssadd)
629
+TRANS(vsadd_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_ssadd)
630
+TRANS(vsadd_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_usadd)
631
+TRANS(vsadd_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_usadd)
632
+TRANS(vsadd_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_usadd)
633
+TRANS(vsadd_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_usadd)
634
+TRANS(vssub_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_sssub)
635
+TRANS(vssub_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_sssub)
636
+TRANS(vssub_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_sssub)
637
+TRANS(vssub_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_sssub)
638
+TRANS(vssub_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_ussub)
639
+TRANS(vssub_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_ussub)
640
+TRANS(vssub_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_ussub)
641
+TRANS(vssub_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_ussub)
642
+
643
+TRANS(vhaddw_h_b, ALL, gen_vvv, gen_helper_vhaddw_h_b)
644
+TRANS(vhaddw_w_h, ALL, gen_vvv, gen_helper_vhaddw_w_h)
645
+TRANS(vhaddw_d_w, ALL, gen_vvv, gen_helper_vhaddw_d_w)
646
+TRANS(vhaddw_q_d, ALL, gen_vvv, gen_helper_vhaddw_q_d)
647
+TRANS(vhaddw_hu_bu, ALL, gen_vvv, gen_helper_vhaddw_hu_bu)
648
+TRANS(vhaddw_wu_hu, ALL, gen_vvv, gen_helper_vhaddw_wu_hu)
649
+TRANS(vhaddw_du_wu, ALL, gen_vvv, gen_helper_vhaddw_du_wu)
650
+TRANS(vhaddw_qu_du, ALL, gen_vvv, gen_helper_vhaddw_qu_du)
651
+TRANS(vhsubw_h_b, ALL, gen_vvv, gen_helper_vhsubw_h_b)
652
+TRANS(vhsubw_w_h, ALL, gen_vvv, gen_helper_vhsubw_w_h)
653
+TRANS(vhsubw_d_w, ALL, gen_vvv, gen_helper_vhsubw_d_w)
654
+TRANS(vhsubw_q_d, ALL, gen_vvv, gen_helper_vhsubw_q_d)
655
+TRANS(vhsubw_hu_bu, ALL, gen_vvv, gen_helper_vhsubw_hu_bu)
656
+TRANS(vhsubw_wu_hu, ALL, gen_vvv, gen_helper_vhsubw_wu_hu)
657
+TRANS(vhsubw_du_wu, ALL, gen_vvv, gen_helper_vhsubw_du_wu)
658
+TRANS(vhsubw_qu_du, ALL, gen_vvv, gen_helper_vhsubw_qu_du)
659
660
static void gen_vaddwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
661
{
662
@@ -XXX,XX +XXX,XX @@ static void do_vaddwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
663
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
664
}
665
666
-TRANS(vaddwev_h_b, gvec_vvv, MO_8, do_vaddwev_s)
667
-TRANS(vaddwev_w_h, gvec_vvv, MO_16, do_vaddwev_s)
668
-TRANS(vaddwev_d_w, gvec_vvv, MO_32, do_vaddwev_s)
669
-TRANS(vaddwev_q_d, gvec_vvv, MO_64, do_vaddwev_s)
670
+TRANS(vaddwev_h_b, ALL, gvec_vvv, MO_8, do_vaddwev_s)
671
+TRANS(vaddwev_w_h, ALL, gvec_vvv, MO_16, do_vaddwev_s)
672
+TRANS(vaddwev_d_w, ALL, gvec_vvv, MO_32, do_vaddwev_s)
673
+TRANS(vaddwev_q_d, ALL, gvec_vvv, MO_64, do_vaddwev_s)
674
675
static void gen_vaddwod_w_h(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
676
{
677
@@ -XXX,XX +XXX,XX @@ static void do_vaddwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
678
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
679
}
680
681
-TRANS(vaddwod_h_b, gvec_vvv, MO_8, do_vaddwod_s)
682
-TRANS(vaddwod_w_h, gvec_vvv, MO_16, do_vaddwod_s)
683
-TRANS(vaddwod_d_w, gvec_vvv, MO_32, do_vaddwod_s)
684
-TRANS(vaddwod_q_d, gvec_vvv, MO_64, do_vaddwod_s)
685
+TRANS(vaddwod_h_b, ALL, gvec_vvv, MO_8, do_vaddwod_s)
686
+TRANS(vaddwod_w_h, ALL, gvec_vvv, MO_16, do_vaddwod_s)
687
+TRANS(vaddwod_d_w, ALL, gvec_vvv, MO_32, do_vaddwod_s)
688
+TRANS(vaddwod_q_d, ALL, gvec_vvv, MO_64, do_vaddwod_s)
689
690
static void gen_vsubwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
691
{
692
@@ -XXX,XX +XXX,XX @@ static void do_vsubwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
693
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
694
}
695
696
-TRANS(vsubwev_h_b, gvec_vvv, MO_8, do_vsubwev_s)
697
-TRANS(vsubwev_w_h, gvec_vvv, MO_16, do_vsubwev_s)
698
-TRANS(vsubwev_d_w, gvec_vvv, MO_32, do_vsubwev_s)
699
-TRANS(vsubwev_q_d, gvec_vvv, MO_64, do_vsubwev_s)
700
+TRANS(vsubwev_h_b, ALL, gvec_vvv, MO_8, do_vsubwev_s)
701
+TRANS(vsubwev_w_h, ALL, gvec_vvv, MO_16, do_vsubwev_s)
702
+TRANS(vsubwev_d_w, ALL, gvec_vvv, MO_32, do_vsubwev_s)
703
+TRANS(vsubwev_q_d, ALL, gvec_vvv, MO_64, do_vsubwev_s)
704
705
static void gen_vsubwod_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
706
{
707
@@ -XXX,XX +XXX,XX @@ static void do_vsubwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
708
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
709
}
710
711
-TRANS(vsubwod_h_b, gvec_vvv, MO_8, do_vsubwod_s)
712
-TRANS(vsubwod_w_h, gvec_vvv, MO_16, do_vsubwod_s)
713
-TRANS(vsubwod_d_w, gvec_vvv, MO_32, do_vsubwod_s)
714
-TRANS(vsubwod_q_d, gvec_vvv, MO_64, do_vsubwod_s)
715
+TRANS(vsubwod_h_b, ALL, gvec_vvv, MO_8, do_vsubwod_s)
716
+TRANS(vsubwod_w_h, ALL, gvec_vvv, MO_16, do_vsubwod_s)
717
+TRANS(vsubwod_d_w, ALL, gvec_vvv, MO_32, do_vsubwod_s)
718
+TRANS(vsubwod_q_d, ALL, gvec_vvv, MO_64, do_vsubwod_s)
719
720
static void gen_vaddwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
721
{
722
@@ -XXX,XX +XXX,XX @@ static void do_vaddwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
723
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
724
}
725
726
-TRANS(vaddwev_h_bu, gvec_vvv, MO_8, do_vaddwev_u)
727
-TRANS(vaddwev_w_hu, gvec_vvv, MO_16, do_vaddwev_u)
728
-TRANS(vaddwev_d_wu, gvec_vvv, MO_32, do_vaddwev_u)
729
-TRANS(vaddwev_q_du, gvec_vvv, MO_64, do_vaddwev_u)
730
+TRANS(vaddwev_h_bu, ALL, gvec_vvv, MO_8, do_vaddwev_u)
731
+TRANS(vaddwev_w_hu, ALL, gvec_vvv, MO_16, do_vaddwev_u)
732
+TRANS(vaddwev_d_wu, ALL, gvec_vvv, MO_32, do_vaddwev_u)
733
+TRANS(vaddwev_q_du, ALL, gvec_vvv, MO_64, do_vaddwev_u)
734
735
static void gen_vaddwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
736
{
737
@@ -XXX,XX +XXX,XX @@ static void do_vaddwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
738
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
739
}
740
741
-TRANS(vaddwod_h_bu, gvec_vvv, MO_8, do_vaddwod_u)
742
-TRANS(vaddwod_w_hu, gvec_vvv, MO_16, do_vaddwod_u)
743
-TRANS(vaddwod_d_wu, gvec_vvv, MO_32, do_vaddwod_u)
744
-TRANS(vaddwod_q_du, gvec_vvv, MO_64, do_vaddwod_u)
745
+TRANS(vaddwod_h_bu, ALL, gvec_vvv, MO_8, do_vaddwod_u)
746
+TRANS(vaddwod_w_hu, ALL, gvec_vvv, MO_16, do_vaddwod_u)
747
+TRANS(vaddwod_d_wu, ALL, gvec_vvv, MO_32, do_vaddwod_u)
748
+TRANS(vaddwod_q_du, ALL, gvec_vvv, MO_64, do_vaddwod_u)
749
750
static void gen_vsubwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
751
{
752
@@ -XXX,XX +XXX,XX @@ static void do_vsubwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
753
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
754
}
755
756
-TRANS(vsubwev_h_bu, gvec_vvv, MO_8, do_vsubwev_u)
757
-TRANS(vsubwev_w_hu, gvec_vvv, MO_16, do_vsubwev_u)
758
-TRANS(vsubwev_d_wu, gvec_vvv, MO_32, do_vsubwev_u)
759
-TRANS(vsubwev_q_du, gvec_vvv, MO_64, do_vsubwev_u)
760
+TRANS(vsubwev_h_bu, ALL, gvec_vvv, MO_8, do_vsubwev_u)
761
+TRANS(vsubwev_w_hu, ALL, gvec_vvv, MO_16, do_vsubwev_u)
762
+TRANS(vsubwev_d_wu, ALL, gvec_vvv, MO_32, do_vsubwev_u)
763
+TRANS(vsubwev_q_du, ALL, gvec_vvv, MO_64, do_vsubwev_u)
764
765
static void gen_vsubwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
766
{
767
@@ -XXX,XX +XXX,XX @@ static void do_vsubwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
768
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
769
}
770
771
-TRANS(vsubwod_h_bu, gvec_vvv, MO_8, do_vsubwod_u)
772
-TRANS(vsubwod_w_hu, gvec_vvv, MO_16, do_vsubwod_u)
773
-TRANS(vsubwod_d_wu, gvec_vvv, MO_32, do_vsubwod_u)
774
-TRANS(vsubwod_q_du, gvec_vvv, MO_64, do_vsubwod_u)
775
+TRANS(vsubwod_h_bu, ALL, gvec_vvv, MO_8, do_vsubwod_u)
776
+TRANS(vsubwod_w_hu, ALL, gvec_vvv, MO_16, do_vsubwod_u)
777
+TRANS(vsubwod_d_wu, ALL, gvec_vvv, MO_32, do_vsubwod_u)
778
+TRANS(vsubwod_q_du, ALL, gvec_vvv, MO_64, do_vsubwod_u)
779
780
static void gen_vaddwev_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
781
{
782
@@ -XXX,XX +XXX,XX @@ static void do_vaddwev_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
783
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
784
}
785
786
-TRANS(vaddwev_h_bu_b, gvec_vvv, MO_8, do_vaddwev_u_s)
787
-TRANS(vaddwev_w_hu_h, gvec_vvv, MO_16, do_vaddwev_u_s)
788
-TRANS(vaddwev_d_wu_w, gvec_vvv, MO_32, do_vaddwev_u_s)
789
-TRANS(vaddwev_q_du_d, gvec_vvv, MO_64, do_vaddwev_u_s)
790
+TRANS(vaddwev_h_bu_b, ALL, gvec_vvv, MO_8, do_vaddwev_u_s)
791
+TRANS(vaddwev_w_hu_h, ALL, gvec_vvv, MO_16, do_vaddwev_u_s)
792
+TRANS(vaddwev_d_wu_w, ALL, gvec_vvv, MO_32, do_vaddwev_u_s)
793
+TRANS(vaddwev_q_du_d, ALL, gvec_vvv, MO_64, do_vaddwev_u_s)
794
795
static void gen_vaddwod_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
796
{
797
@@ -XXX,XX +XXX,XX @@ static void do_vaddwod_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
798
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
799
}
800
801
-TRANS(vaddwod_h_bu_b, gvec_vvv, MO_8, do_vaddwod_u_s)
802
-TRANS(vaddwod_w_hu_h, gvec_vvv, MO_16, do_vaddwod_u_s)
803
-TRANS(vaddwod_d_wu_w, gvec_vvv, MO_32, do_vaddwod_u_s)
804
-TRANS(vaddwod_q_du_d, gvec_vvv, MO_64, do_vaddwod_u_s)
805
+TRANS(vaddwod_h_bu_b, ALL, gvec_vvv, MO_8, do_vaddwod_u_s)
806
+TRANS(vaddwod_w_hu_h, ALL, gvec_vvv, MO_16, do_vaddwod_u_s)
807
+TRANS(vaddwod_d_wu_w, ALL, gvec_vvv, MO_32, do_vaddwod_u_s)
808
+TRANS(vaddwod_q_du_d, ALL, gvec_vvv, MO_64, do_vaddwod_u_s)
809
810
static void do_vavg(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
811
void (*gen_shr_vec)(unsigned, TCGv_vec,
812
@@ -XXX,XX +XXX,XX @@ static void do_vavg_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
813
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
814
}
815
816
-TRANS(vavg_b, gvec_vvv, MO_8, do_vavg_s)
817
-TRANS(vavg_h, gvec_vvv, MO_16, do_vavg_s)
818
-TRANS(vavg_w, gvec_vvv, MO_32, do_vavg_s)
819
-TRANS(vavg_d, gvec_vvv, MO_64, do_vavg_s)
820
-TRANS(vavg_bu, gvec_vvv, MO_8, do_vavg_u)
821
-TRANS(vavg_hu, gvec_vvv, MO_16, do_vavg_u)
822
-TRANS(vavg_wu, gvec_vvv, MO_32, do_vavg_u)
823
-TRANS(vavg_du, gvec_vvv, MO_64, do_vavg_u)
824
+TRANS(vavg_b, ALL, gvec_vvv, MO_8, do_vavg_s)
825
+TRANS(vavg_h, ALL, gvec_vvv, MO_16, do_vavg_s)
826
+TRANS(vavg_w, ALL, gvec_vvv, MO_32, do_vavg_s)
827
+TRANS(vavg_d, ALL, gvec_vvv, MO_64, do_vavg_s)
828
+TRANS(vavg_bu, ALL, gvec_vvv, MO_8, do_vavg_u)
829
+TRANS(vavg_hu, ALL, gvec_vvv, MO_16, do_vavg_u)
830
+TRANS(vavg_wu, ALL, gvec_vvv, MO_32, do_vavg_u)
831
+TRANS(vavg_du, ALL, gvec_vvv, MO_64, do_vavg_u)
832
833
static void do_vavgr_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
834
uint32_t vk_ofs, uint32_t oprsz, uint32_t maxsz)
835
@@ -XXX,XX +XXX,XX @@ static void do_vavgr_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
836
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
837
}
838
839
-TRANS(vavgr_b, gvec_vvv, MO_8, do_vavgr_s)
840
-TRANS(vavgr_h, gvec_vvv, MO_16, do_vavgr_s)
841
-TRANS(vavgr_w, gvec_vvv, MO_32, do_vavgr_s)
842
-TRANS(vavgr_d, gvec_vvv, MO_64, do_vavgr_s)
843
-TRANS(vavgr_bu, gvec_vvv, MO_8, do_vavgr_u)
844
-TRANS(vavgr_hu, gvec_vvv, MO_16, do_vavgr_u)
845
-TRANS(vavgr_wu, gvec_vvv, MO_32, do_vavgr_u)
846
-TRANS(vavgr_du, gvec_vvv, MO_64, do_vavgr_u)
847
+TRANS(vavgr_b, ALL, gvec_vvv, MO_8, do_vavgr_s)
848
+TRANS(vavgr_h, ALL, gvec_vvv, MO_16, do_vavgr_s)
849
+TRANS(vavgr_w, ALL, gvec_vvv, MO_32, do_vavgr_s)
850
+TRANS(vavgr_d, ALL, gvec_vvv, MO_64, do_vavgr_s)
851
+TRANS(vavgr_bu, ALL, gvec_vvv, MO_8, do_vavgr_u)
852
+TRANS(vavgr_hu, ALL, gvec_vvv, MO_16, do_vavgr_u)
853
+TRANS(vavgr_wu, ALL, gvec_vvv, MO_32, do_vavgr_u)
854
+TRANS(vavgr_du, ALL, gvec_vvv, MO_64, do_vavgr_u)
855
856
static void gen_vabsd_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
857
{
858
@@ -XXX,XX +XXX,XX @@ static void do_vabsd_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
859
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
860
}
861
862
-TRANS(vabsd_b, gvec_vvv, MO_8, do_vabsd_s)
863
-TRANS(vabsd_h, gvec_vvv, MO_16, do_vabsd_s)
864
-TRANS(vabsd_w, gvec_vvv, MO_32, do_vabsd_s)
865
-TRANS(vabsd_d, gvec_vvv, MO_64, do_vabsd_s)
866
-TRANS(vabsd_bu, gvec_vvv, MO_8, do_vabsd_u)
867
-TRANS(vabsd_hu, gvec_vvv, MO_16, do_vabsd_u)
868
-TRANS(vabsd_wu, gvec_vvv, MO_32, do_vabsd_u)
869
-TRANS(vabsd_du, gvec_vvv, MO_64, do_vabsd_u)
870
+TRANS(vabsd_b, ALL, gvec_vvv, MO_8, do_vabsd_s)
871
+TRANS(vabsd_h, ALL, gvec_vvv, MO_16, do_vabsd_s)
872
+TRANS(vabsd_w, ALL, gvec_vvv, MO_32, do_vabsd_s)
873
+TRANS(vabsd_d, ALL, gvec_vvv, MO_64, do_vabsd_s)
874
+TRANS(vabsd_bu, ALL, gvec_vvv, MO_8, do_vabsd_u)
875
+TRANS(vabsd_hu, ALL, gvec_vvv, MO_16, do_vabsd_u)
876
+TRANS(vabsd_wu, ALL, gvec_vvv, MO_32, do_vabsd_u)
877
+TRANS(vabsd_du, ALL, gvec_vvv, MO_64, do_vabsd_u)
878
879
static void gen_vadda(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
880
{
881
@@ -XXX,XX +XXX,XX @@ static void do_vadda(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
882
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
883
}
884
885
-TRANS(vadda_b, gvec_vvv, MO_8, do_vadda)
886
-TRANS(vadda_h, gvec_vvv, MO_16, do_vadda)
887
-TRANS(vadda_w, gvec_vvv, MO_32, do_vadda)
888
-TRANS(vadda_d, gvec_vvv, MO_64, do_vadda)
889
-
890
-TRANS(vmax_b, gvec_vvv, MO_8, tcg_gen_gvec_smax)
891
-TRANS(vmax_h, gvec_vvv, MO_16, tcg_gen_gvec_smax)
892
-TRANS(vmax_w, gvec_vvv, MO_32, tcg_gen_gvec_smax)
893
-TRANS(vmax_d, gvec_vvv, MO_64, tcg_gen_gvec_smax)
894
-TRANS(vmax_bu, gvec_vvv, MO_8, tcg_gen_gvec_umax)
895
-TRANS(vmax_hu, gvec_vvv, MO_16, tcg_gen_gvec_umax)
896
-TRANS(vmax_wu, gvec_vvv, MO_32, tcg_gen_gvec_umax)
897
-TRANS(vmax_du, gvec_vvv, MO_64, tcg_gen_gvec_umax)
898
-
899
-TRANS(vmin_b, gvec_vvv, MO_8, tcg_gen_gvec_smin)
900
-TRANS(vmin_h, gvec_vvv, MO_16, tcg_gen_gvec_smin)
901
-TRANS(vmin_w, gvec_vvv, MO_32, tcg_gen_gvec_smin)
902
-TRANS(vmin_d, gvec_vvv, MO_64, tcg_gen_gvec_smin)
903
-TRANS(vmin_bu, gvec_vvv, MO_8, tcg_gen_gvec_umin)
904
-TRANS(vmin_hu, gvec_vvv, MO_16, tcg_gen_gvec_umin)
905
-TRANS(vmin_wu, gvec_vvv, MO_32, tcg_gen_gvec_umin)
906
-TRANS(vmin_du, gvec_vvv, MO_64, tcg_gen_gvec_umin)
907
+TRANS(vadda_b, ALL, gvec_vvv, MO_8, do_vadda)
908
+TRANS(vadda_h, ALL, gvec_vvv, MO_16, do_vadda)
909
+TRANS(vadda_w, ALL, gvec_vvv, MO_32, do_vadda)
910
+TRANS(vadda_d, ALL, gvec_vvv, MO_64, do_vadda)
911
+
912
+TRANS(vmax_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_smax)
913
+TRANS(vmax_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_smax)
914
+TRANS(vmax_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_smax)
915
+TRANS(vmax_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_smax)
916
+TRANS(vmax_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_umax)
917
+TRANS(vmax_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_umax)
918
+TRANS(vmax_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_umax)
919
+TRANS(vmax_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_umax)
920
+
921
+TRANS(vmin_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_smin)
922
+TRANS(vmin_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_smin)
923
+TRANS(vmin_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_smin)
924
+TRANS(vmin_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_smin)
925
+TRANS(vmin_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_umin)
926
+TRANS(vmin_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_umin)
927
+TRANS(vmin_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_umin)
928
+TRANS(vmin_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_umin)
929
930
static void gen_vmini_s(unsigned vece, TCGv_vec t, TCGv_vec a, int64_t imm)
931
{
932
@@ -XXX,XX +XXX,XX @@ static void do_vmini_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
933
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
934
}
935
936
-TRANS(vmini_b, gvec_vv_i, MO_8, do_vmini_s)
937
-TRANS(vmini_h, gvec_vv_i, MO_16, do_vmini_s)
938
-TRANS(vmini_w, gvec_vv_i, MO_32, do_vmini_s)
939
-TRANS(vmini_d, gvec_vv_i, MO_64, do_vmini_s)
940
-TRANS(vmini_bu, gvec_vv_i, MO_8, do_vmini_u)
941
-TRANS(vmini_hu, gvec_vv_i, MO_16, do_vmini_u)
942
-TRANS(vmini_wu, gvec_vv_i, MO_32, do_vmini_u)
943
-TRANS(vmini_du, gvec_vv_i, MO_64, do_vmini_u)
944
+TRANS(vmini_b, ALL, gvec_vv_i, MO_8, do_vmini_s)
945
+TRANS(vmini_h, ALL, gvec_vv_i, MO_16, do_vmini_s)
946
+TRANS(vmini_w, ALL, gvec_vv_i, MO_32, do_vmini_s)
947
+TRANS(vmini_d, ALL, gvec_vv_i, MO_64, do_vmini_s)
948
+TRANS(vmini_bu, ALL, gvec_vv_i, MO_8, do_vmini_u)
949
+TRANS(vmini_hu, ALL, gvec_vv_i, MO_16, do_vmini_u)
950
+TRANS(vmini_wu, ALL, gvec_vv_i, MO_32, do_vmini_u)
951
+TRANS(vmini_du, ALL, gvec_vv_i, MO_64, do_vmini_u)
952
953
static void do_vmaxi_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
954
int64_t imm, uint32_t oprsz, uint32_t maxsz)
955
@@ -XXX,XX +XXX,XX @@ static void do_vmaxi_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
956
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
957
}
958
959
-TRANS(vmaxi_b, gvec_vv_i, MO_8, do_vmaxi_s)
960
-TRANS(vmaxi_h, gvec_vv_i, MO_16, do_vmaxi_s)
961
-TRANS(vmaxi_w, gvec_vv_i, MO_32, do_vmaxi_s)
962
-TRANS(vmaxi_d, gvec_vv_i, MO_64, do_vmaxi_s)
963
-TRANS(vmaxi_bu, gvec_vv_i, MO_8, do_vmaxi_u)
964
-TRANS(vmaxi_hu, gvec_vv_i, MO_16, do_vmaxi_u)
965
-TRANS(vmaxi_wu, gvec_vv_i, MO_32, do_vmaxi_u)
966
-TRANS(vmaxi_du, gvec_vv_i, MO_64, do_vmaxi_u)
967
+TRANS(vmaxi_b, ALL, gvec_vv_i, MO_8, do_vmaxi_s)
968
+TRANS(vmaxi_h, ALL, gvec_vv_i, MO_16, do_vmaxi_s)
969
+TRANS(vmaxi_w, ALL, gvec_vv_i, MO_32, do_vmaxi_s)
970
+TRANS(vmaxi_d, ALL, gvec_vv_i, MO_64, do_vmaxi_s)
971
+TRANS(vmaxi_bu, ALL, gvec_vv_i, MO_8, do_vmaxi_u)
972
+TRANS(vmaxi_hu, ALL, gvec_vv_i, MO_16, do_vmaxi_u)
973
+TRANS(vmaxi_wu, ALL, gvec_vv_i, MO_32, do_vmaxi_u)
974
+TRANS(vmaxi_du, ALL, gvec_vv_i, MO_64, do_vmaxi_u)
975
976
-TRANS(vmul_b, gvec_vvv, MO_8, tcg_gen_gvec_mul)
977
-TRANS(vmul_h, gvec_vvv, MO_16, tcg_gen_gvec_mul)
978
-TRANS(vmul_w, gvec_vvv, MO_32, tcg_gen_gvec_mul)
979
-TRANS(vmul_d, gvec_vvv, MO_64, tcg_gen_gvec_mul)
980
+TRANS(vmul_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_mul)
981
+TRANS(vmul_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_mul)
982
+TRANS(vmul_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_mul)
983
+TRANS(vmul_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_mul)
984
985
static void gen_vmuh_w(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
986
{
987
@@ -XXX,XX +XXX,XX @@ static void do_vmuh_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
988
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
989
}
990
991
-TRANS(vmuh_b, gvec_vvv, MO_8, do_vmuh_s)
992
-TRANS(vmuh_h, gvec_vvv, MO_16, do_vmuh_s)
993
-TRANS(vmuh_w, gvec_vvv, MO_32, do_vmuh_s)
994
-TRANS(vmuh_d, gvec_vvv, MO_64, do_vmuh_s)
995
+TRANS(vmuh_b, ALL, gvec_vvv, MO_8, do_vmuh_s)
996
+TRANS(vmuh_h, ALL, gvec_vvv, MO_16, do_vmuh_s)
997
+TRANS(vmuh_w, ALL, gvec_vvv, MO_32, do_vmuh_s)
998
+TRANS(vmuh_d, ALL, gvec_vvv, MO_64, do_vmuh_s)
999
1000
static void gen_vmuh_wu(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
1001
{
1002
@@ -XXX,XX +XXX,XX @@ static void do_vmuh_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1003
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1004
}
1005
1006
-TRANS(vmuh_bu, gvec_vvv, MO_8, do_vmuh_u)
1007
-TRANS(vmuh_hu, gvec_vvv, MO_16, do_vmuh_u)
1008
-TRANS(vmuh_wu, gvec_vvv, MO_32, do_vmuh_u)
1009
-TRANS(vmuh_du, gvec_vvv, MO_64, do_vmuh_u)
1010
+TRANS(vmuh_bu, ALL, gvec_vvv, MO_8, do_vmuh_u)
1011
+TRANS(vmuh_hu, ALL, gvec_vvv, MO_16, do_vmuh_u)
1012
+TRANS(vmuh_wu, ALL, gvec_vvv, MO_32, do_vmuh_u)
1013
+TRANS(vmuh_du, ALL, gvec_vvv, MO_64, do_vmuh_u)
1014
1015
static void gen_vmulwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1016
{
1017
@@ -XXX,XX +XXX,XX @@ static void do_vmulwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1018
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1019
}
1020
1021
-TRANS(vmulwev_h_b, gvec_vvv, MO_8, do_vmulwev_s)
1022
-TRANS(vmulwev_w_h, gvec_vvv, MO_16, do_vmulwev_s)
1023
-TRANS(vmulwev_d_w, gvec_vvv, MO_32, do_vmulwev_s)
1024
+TRANS(vmulwev_h_b, ALL, gvec_vvv, MO_8, do_vmulwev_s)
1025
+TRANS(vmulwev_w_h, ALL, gvec_vvv, MO_16, do_vmulwev_s)
1026
+TRANS(vmulwev_d_w, ALL, gvec_vvv, MO_32, do_vmulwev_s)
1027
1028
static void tcg_gen_mulus2_i64(TCGv_i64 rl, TCGv_i64 rh,
1029
TCGv_i64 arg1, TCGv_i64 arg2)
1030
@@ -XXX,XX +XXX,XX @@ static void do_vmulwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1031
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1032
}
1033
1034
-TRANS(vmulwod_h_b, gvec_vvv, MO_8, do_vmulwod_s)
1035
-TRANS(vmulwod_w_h, gvec_vvv, MO_16, do_vmulwod_s)
1036
-TRANS(vmulwod_d_w, gvec_vvv, MO_32, do_vmulwod_s)
1037
+TRANS(vmulwod_h_b, ALL, gvec_vvv, MO_8, do_vmulwod_s)
1038
+TRANS(vmulwod_w_h, ALL, gvec_vvv, MO_16, do_vmulwod_s)
1039
+TRANS(vmulwod_d_w, ALL, gvec_vvv, MO_32, do_vmulwod_s)
1040
1041
static void gen_vmulwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1042
{
1043
@@ -XXX,XX +XXX,XX @@ static void do_vmulwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1044
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1045
}
1046
1047
-TRANS(vmulwev_h_bu, gvec_vvv, MO_8, do_vmulwev_u)
1048
-TRANS(vmulwev_w_hu, gvec_vvv, MO_16, do_vmulwev_u)
1049
-TRANS(vmulwev_d_wu, gvec_vvv, MO_32, do_vmulwev_u)
1050
+TRANS(vmulwev_h_bu, ALL, gvec_vvv, MO_8, do_vmulwev_u)
1051
+TRANS(vmulwev_w_hu, ALL, gvec_vvv, MO_16, do_vmulwev_u)
1052
+TRANS(vmulwev_d_wu, ALL, gvec_vvv, MO_32, do_vmulwev_u)
1053
1054
static void gen_vmulwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1055
{
1056
@@ -XXX,XX +XXX,XX @@ static void do_vmulwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1057
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1058
}
1059
1060
-TRANS(vmulwod_h_bu, gvec_vvv, MO_8, do_vmulwod_u)
1061
-TRANS(vmulwod_w_hu, gvec_vvv, MO_16, do_vmulwod_u)
1062
-TRANS(vmulwod_d_wu, gvec_vvv, MO_32, do_vmulwod_u)
1063
+TRANS(vmulwod_h_bu, ALL, gvec_vvv, MO_8, do_vmulwod_u)
1064
+TRANS(vmulwod_w_hu, ALL, gvec_vvv, MO_16, do_vmulwod_u)
1065
+TRANS(vmulwod_d_wu, ALL, gvec_vvv, MO_32, do_vmulwod_u)
1066
1067
static void gen_vmulwev_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1068
{
1069
@@ -XXX,XX +XXX,XX @@ static void do_vmulwev_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1070
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1071
}
1072
1073
-TRANS(vmulwev_h_bu_b, gvec_vvv, MO_8, do_vmulwev_u_s)
1074
-TRANS(vmulwev_w_hu_h, gvec_vvv, MO_16, do_vmulwev_u_s)
1075
-TRANS(vmulwev_d_wu_w, gvec_vvv, MO_32, do_vmulwev_u_s)
1076
+TRANS(vmulwev_h_bu_b, ALL, gvec_vvv, MO_8, do_vmulwev_u_s)
1077
+TRANS(vmulwev_w_hu_h, ALL, gvec_vvv, MO_16, do_vmulwev_u_s)
1078
+TRANS(vmulwev_d_wu_w, ALL, gvec_vvv, MO_32, do_vmulwev_u_s)
1079
1080
static void gen_vmulwod_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1081
{
1082
@@ -XXX,XX +XXX,XX @@ static void do_vmulwod_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1083
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1084
}
1085
1086
-TRANS(vmulwod_h_bu_b, gvec_vvv, MO_8, do_vmulwod_u_s)
1087
-TRANS(vmulwod_w_hu_h, gvec_vvv, MO_16, do_vmulwod_u_s)
1088
-TRANS(vmulwod_d_wu_w, gvec_vvv, MO_32, do_vmulwod_u_s)
1089
+TRANS(vmulwod_h_bu_b, ALL, gvec_vvv, MO_8, do_vmulwod_u_s)
1090
+TRANS(vmulwod_w_hu_h, ALL, gvec_vvv, MO_16, do_vmulwod_u_s)
1091
+TRANS(vmulwod_d_wu_w, ALL, gvec_vvv, MO_32, do_vmulwod_u_s)
1092
1093
static void gen_vmadd(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1094
{
1095
@@ -XXX,XX +XXX,XX @@ static void do_vmadd(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1096
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1097
}
1098
1099
-TRANS(vmadd_b, gvec_vvv, MO_8, do_vmadd)
1100
-TRANS(vmadd_h, gvec_vvv, MO_16, do_vmadd)
1101
-TRANS(vmadd_w, gvec_vvv, MO_32, do_vmadd)
1102
-TRANS(vmadd_d, gvec_vvv, MO_64, do_vmadd)
1103
+TRANS(vmadd_b, ALL, gvec_vvv, MO_8, do_vmadd)
1104
+TRANS(vmadd_h, ALL, gvec_vvv, MO_16, do_vmadd)
1105
+TRANS(vmadd_w, ALL, gvec_vvv, MO_32, do_vmadd)
1106
+TRANS(vmadd_d, ALL, gvec_vvv, MO_64, do_vmadd)
1107
1108
static void gen_vmsub(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1109
{
1110
@@ -XXX,XX +XXX,XX @@ static void do_vmsub(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1111
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1112
}
1113
1114
-TRANS(vmsub_b, gvec_vvv, MO_8, do_vmsub)
1115
-TRANS(vmsub_h, gvec_vvv, MO_16, do_vmsub)
1116
-TRANS(vmsub_w, gvec_vvv, MO_32, do_vmsub)
1117
-TRANS(vmsub_d, gvec_vvv, MO_64, do_vmsub)
1118
+TRANS(vmsub_b, ALL, gvec_vvv, MO_8, do_vmsub)
1119
+TRANS(vmsub_h, ALL, gvec_vvv, MO_16, do_vmsub)
1120
+TRANS(vmsub_w, ALL, gvec_vvv, MO_32, do_vmsub)
1121
+TRANS(vmsub_d, ALL, gvec_vvv, MO_64, do_vmsub)
1122
1123
static void gen_vmaddwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1124
{
1125
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1126
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1127
}
1128
1129
-TRANS(vmaddwev_h_b, gvec_vvv, MO_8, do_vmaddwev_s)
1130
-TRANS(vmaddwev_w_h, gvec_vvv, MO_16, do_vmaddwev_s)
1131
-TRANS(vmaddwev_d_w, gvec_vvv, MO_32, do_vmaddwev_s)
1132
+TRANS(vmaddwev_h_b, ALL, gvec_vvv, MO_8, do_vmaddwev_s)
1133
+TRANS(vmaddwev_w_h, ALL, gvec_vvv, MO_16, do_vmaddwev_s)
1134
+TRANS(vmaddwev_d_w, ALL, gvec_vvv, MO_32, do_vmaddwev_s)
1135
1136
#define VMADD_Q(NAME, FN, idx1, idx2) \
1137
static bool trans_## NAME (DisasContext *ctx, arg_vvv *a) \
1138
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1139
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1140
}
1141
1142
-TRANS(vmaddwod_h_b, gvec_vvv, MO_8, do_vmaddwod_s)
1143
-TRANS(vmaddwod_w_h, gvec_vvv, MO_16, do_vmaddwod_s)
1144
-TRANS(vmaddwod_d_w, gvec_vvv, MO_32, do_vmaddwod_s)
1145
+TRANS(vmaddwod_h_b, ALL, gvec_vvv, MO_8, do_vmaddwod_s)
1146
+TRANS(vmaddwod_w_h, ALL, gvec_vvv, MO_16, do_vmaddwod_s)
1147
+TRANS(vmaddwod_d_w, ALL, gvec_vvv, MO_32, do_vmaddwod_s)
1148
1149
static void gen_vmaddwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1150
{
1151
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1152
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1153
}
1154
1155
-TRANS(vmaddwev_h_bu, gvec_vvv, MO_8, do_vmaddwev_u)
1156
-TRANS(vmaddwev_w_hu, gvec_vvv, MO_16, do_vmaddwev_u)
1157
-TRANS(vmaddwev_d_wu, gvec_vvv, MO_32, do_vmaddwev_u)
1158
+TRANS(vmaddwev_h_bu, ALL, gvec_vvv, MO_8, do_vmaddwev_u)
1159
+TRANS(vmaddwev_w_hu, ALL, gvec_vvv, MO_16, do_vmaddwev_u)
1160
+TRANS(vmaddwev_d_wu, ALL, gvec_vvv, MO_32, do_vmaddwev_u)
1161
1162
static void gen_vmaddwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1163
{
1164
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1165
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1166
}
1167
1168
-TRANS(vmaddwod_h_bu, gvec_vvv, MO_8, do_vmaddwod_u)
1169
-TRANS(vmaddwod_w_hu, gvec_vvv, MO_16, do_vmaddwod_u)
1170
-TRANS(vmaddwod_d_wu, gvec_vvv, MO_32, do_vmaddwod_u)
1171
+TRANS(vmaddwod_h_bu, ALL, gvec_vvv, MO_8, do_vmaddwod_u)
1172
+TRANS(vmaddwod_w_hu, ALL, gvec_vvv, MO_16, do_vmaddwod_u)
1173
+TRANS(vmaddwod_d_wu, ALL, gvec_vvv, MO_32, do_vmaddwod_u)
1174
1175
static void gen_vmaddwev_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1176
{
1177
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwev_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1178
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1179
}
1180
1181
-TRANS(vmaddwev_h_bu_b, gvec_vvv, MO_8, do_vmaddwev_u_s)
1182
-TRANS(vmaddwev_w_hu_h, gvec_vvv, MO_16, do_vmaddwev_u_s)
1183
-TRANS(vmaddwev_d_wu_w, gvec_vvv, MO_32, do_vmaddwev_u_s)
1184
+TRANS(vmaddwev_h_bu_b, ALL, gvec_vvv, MO_8, do_vmaddwev_u_s)
1185
+TRANS(vmaddwev_w_hu_h, ALL, gvec_vvv, MO_16, do_vmaddwev_u_s)
1186
+TRANS(vmaddwev_d_wu_w, ALL, gvec_vvv, MO_32, do_vmaddwev_u_s)
1187
1188
static void gen_vmaddwod_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1189
{
1190
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwod_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1191
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1192
}
1193
1194
-TRANS(vmaddwod_h_bu_b, gvec_vvv, MO_8, do_vmaddwod_u_s)
1195
-TRANS(vmaddwod_w_hu_h, gvec_vvv, MO_16, do_vmaddwod_u_s)
1196
-TRANS(vmaddwod_d_wu_w, gvec_vvv, MO_32, do_vmaddwod_u_s)
1197
-
1198
-TRANS(vdiv_b, gen_vvv, gen_helper_vdiv_b)
1199
-TRANS(vdiv_h, gen_vvv, gen_helper_vdiv_h)
1200
-TRANS(vdiv_w, gen_vvv, gen_helper_vdiv_w)
1201
-TRANS(vdiv_d, gen_vvv, gen_helper_vdiv_d)
1202
-TRANS(vdiv_bu, gen_vvv, gen_helper_vdiv_bu)
1203
-TRANS(vdiv_hu, gen_vvv, gen_helper_vdiv_hu)
1204
-TRANS(vdiv_wu, gen_vvv, gen_helper_vdiv_wu)
1205
-TRANS(vdiv_du, gen_vvv, gen_helper_vdiv_du)
1206
-TRANS(vmod_b, gen_vvv, gen_helper_vmod_b)
1207
-TRANS(vmod_h, gen_vvv, gen_helper_vmod_h)
1208
-TRANS(vmod_w, gen_vvv, gen_helper_vmod_w)
1209
-TRANS(vmod_d, gen_vvv, gen_helper_vmod_d)
1210
-TRANS(vmod_bu, gen_vvv, gen_helper_vmod_bu)
1211
-TRANS(vmod_hu, gen_vvv, gen_helper_vmod_hu)
1212
-TRANS(vmod_wu, gen_vvv, gen_helper_vmod_wu)
1213
-TRANS(vmod_du, gen_vvv, gen_helper_vmod_du)
1214
+TRANS(vmaddwod_h_bu_b, ALL, gvec_vvv, MO_8, do_vmaddwod_u_s)
1215
+TRANS(vmaddwod_w_hu_h, ALL, gvec_vvv, MO_16, do_vmaddwod_u_s)
1216
+TRANS(vmaddwod_d_wu_w, ALL, gvec_vvv, MO_32, do_vmaddwod_u_s)
1217
+
1218
+TRANS(vdiv_b, ALL, gen_vvv, gen_helper_vdiv_b)
1219
+TRANS(vdiv_h, ALL, gen_vvv, gen_helper_vdiv_h)
1220
+TRANS(vdiv_w, ALL, gen_vvv, gen_helper_vdiv_w)
1221
+TRANS(vdiv_d, ALL, gen_vvv, gen_helper_vdiv_d)
1222
+TRANS(vdiv_bu, ALL, gen_vvv, gen_helper_vdiv_bu)
1223
+TRANS(vdiv_hu, ALL, gen_vvv, gen_helper_vdiv_hu)
1224
+TRANS(vdiv_wu, ALL, gen_vvv, gen_helper_vdiv_wu)
1225
+TRANS(vdiv_du, ALL, gen_vvv, gen_helper_vdiv_du)
1226
+TRANS(vmod_b, ALL, gen_vvv, gen_helper_vmod_b)
1227
+TRANS(vmod_h, ALL, gen_vvv, gen_helper_vmod_h)
1228
+TRANS(vmod_w, ALL, gen_vvv, gen_helper_vmod_w)
1229
+TRANS(vmod_d, ALL, gen_vvv, gen_helper_vmod_d)
1230
+TRANS(vmod_bu, ALL, gen_vvv, gen_helper_vmod_bu)
1231
+TRANS(vmod_hu, ALL, gen_vvv, gen_helper_vmod_hu)
1232
+TRANS(vmod_wu, ALL, gen_vvv, gen_helper_vmod_wu)
1233
+TRANS(vmod_du, ALL, gen_vvv, gen_helper_vmod_du)
1234
1235
static void gen_vsat_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec max)
1236
{
1237
@@ -XXX,XX +XXX,XX @@ static void do_vsat_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1238
tcg_constant_i64((1ll<< imm) -1), &op[vece]);
1239
}
1240
1241
-TRANS(vsat_b, gvec_vv_i, MO_8, do_vsat_s)
1242
-TRANS(vsat_h, gvec_vv_i, MO_16, do_vsat_s)
1243
-TRANS(vsat_w, gvec_vv_i, MO_32, do_vsat_s)
1244
-TRANS(vsat_d, gvec_vv_i, MO_64, do_vsat_s)
1245
+TRANS(vsat_b, ALL, gvec_vv_i, MO_8, do_vsat_s)
1246
+TRANS(vsat_h, ALL, gvec_vv_i, MO_16, do_vsat_s)
1247
+TRANS(vsat_w, ALL, gvec_vv_i, MO_32, do_vsat_s)
1248
+TRANS(vsat_d, ALL, gvec_vv_i, MO_64, do_vsat_s)
1249
1250
static void gen_vsat_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec max)
1251
{
1252
@@ -XXX,XX +XXX,XX @@ static void do_vsat_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1253
tcg_constant_i64(max), &op[vece]);
1254
}
1255
1256
-TRANS(vsat_bu, gvec_vv_i, MO_8, do_vsat_u)
1257
-TRANS(vsat_hu, gvec_vv_i, MO_16, do_vsat_u)
1258
-TRANS(vsat_wu, gvec_vv_i, MO_32, do_vsat_u)
1259
-TRANS(vsat_du, gvec_vv_i, MO_64, do_vsat_u)
1260
+TRANS(vsat_bu, ALL, gvec_vv_i, MO_8, do_vsat_u)
1261
+TRANS(vsat_hu, ALL, gvec_vv_i, MO_16, do_vsat_u)
1262
+TRANS(vsat_wu, ALL, gvec_vv_i, MO_32, do_vsat_u)
1263
+TRANS(vsat_du, ALL, gvec_vv_i, MO_64, do_vsat_u)
1264
1265
-TRANS(vexth_h_b, gen_vv, gen_helper_vexth_h_b)
1266
-TRANS(vexth_w_h, gen_vv, gen_helper_vexth_w_h)
1267
-TRANS(vexth_d_w, gen_vv, gen_helper_vexth_d_w)
1268
-TRANS(vexth_q_d, gen_vv, gen_helper_vexth_q_d)
1269
-TRANS(vexth_hu_bu, gen_vv, gen_helper_vexth_hu_bu)
1270
-TRANS(vexth_wu_hu, gen_vv, gen_helper_vexth_wu_hu)
1271
-TRANS(vexth_du_wu, gen_vv, gen_helper_vexth_du_wu)
1272
-TRANS(vexth_qu_du, gen_vv, gen_helper_vexth_qu_du)
1273
+TRANS(vexth_h_b, ALL, gen_vv, gen_helper_vexth_h_b)
1274
+TRANS(vexth_w_h, ALL, gen_vv, gen_helper_vexth_w_h)
1275
+TRANS(vexth_d_w, ALL, gen_vv, gen_helper_vexth_d_w)
1276
+TRANS(vexth_q_d, ALL, gen_vv, gen_helper_vexth_q_d)
1277
+TRANS(vexth_hu_bu, ALL, gen_vv, gen_helper_vexth_hu_bu)
1278
+TRANS(vexth_wu_hu, ALL, gen_vv, gen_helper_vexth_wu_hu)
1279
+TRANS(vexth_du_wu, ALL, gen_vv, gen_helper_vexth_du_wu)
1280
+TRANS(vexth_qu_du, ALL, gen_vv, gen_helper_vexth_qu_du)
1281
1282
static void gen_vsigncov(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
1283
{
1284
@@ -XXX,XX +XXX,XX @@ static void do_vsigncov(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1285
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1286
}
1287
1288
-TRANS(vsigncov_b, gvec_vvv, MO_8, do_vsigncov)
1289
-TRANS(vsigncov_h, gvec_vvv, MO_16, do_vsigncov)
1290
-TRANS(vsigncov_w, gvec_vvv, MO_32, do_vsigncov)
1291
-TRANS(vsigncov_d, gvec_vvv, MO_64, do_vsigncov)
1292
+TRANS(vsigncov_b, ALL, gvec_vvv, MO_8, do_vsigncov)
1293
+TRANS(vsigncov_h, ALL, gvec_vvv, MO_16, do_vsigncov)
1294
+TRANS(vsigncov_w, ALL, gvec_vvv, MO_32, do_vsigncov)
1295
+TRANS(vsigncov_d, ALL, gvec_vvv, MO_64, do_vsigncov)
1296
1297
-TRANS(vmskltz_b, gen_vv, gen_helper_vmskltz_b)
1298
-TRANS(vmskltz_h, gen_vv, gen_helper_vmskltz_h)
1299
-TRANS(vmskltz_w, gen_vv, gen_helper_vmskltz_w)
1300
-TRANS(vmskltz_d, gen_vv, gen_helper_vmskltz_d)
1301
-TRANS(vmskgez_b, gen_vv, gen_helper_vmskgez_b)
1302
-TRANS(vmsknz_b, gen_vv, gen_helper_vmsknz_b)
1303
+TRANS(vmskltz_b, ALL, gen_vv, gen_helper_vmskltz_b)
1304
+TRANS(vmskltz_h, ALL, gen_vv, gen_helper_vmskltz_h)
1305
+TRANS(vmskltz_w, ALL, gen_vv, gen_helper_vmskltz_w)
1306
+TRANS(vmskltz_d, ALL, gen_vv, gen_helper_vmskltz_d)
1307
+TRANS(vmskgez_b, ALL, gen_vv, gen_helper_vmskgez_b)
1308
+TRANS(vmsknz_b, ALL, gen_vv, gen_helper_vmsknz_b)
1309
1310
#define EXPAND_BYTE(bit) ((uint64_t)(bit ? 0xff : 0))
1311
1312
@@ -XXX,XX +XXX,XX @@ static bool trans_vldi(DisasContext *ctx, arg_vldi *a)
1313
return true;
1314
}
1315
1316
-TRANS(vand_v, gvec_vvv, MO_64, tcg_gen_gvec_and)
1317
-TRANS(vor_v, gvec_vvv, MO_64, tcg_gen_gvec_or)
1318
-TRANS(vxor_v, gvec_vvv, MO_64, tcg_gen_gvec_xor)
1319
-TRANS(vnor_v, gvec_vvv, MO_64, tcg_gen_gvec_nor)
1320
+TRANS(vand_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_and)
1321
+TRANS(vor_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_or)
1322
+TRANS(vxor_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_xor)
1323
+TRANS(vnor_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_nor)
1324
1325
static bool trans_vandn_v(DisasContext *ctx, arg_vvv *a)
1326
{
1327
@@ -XXX,XX +XXX,XX @@ static bool trans_vandn_v(DisasContext *ctx, arg_vvv *a)
1328
tcg_gen_gvec_andc(MO_64, vd_ofs, vk_ofs, vj_ofs, 16, ctx->vl/8);
1329
return true;
1330
}
1331
-TRANS(vorn_v, gvec_vvv, MO_64, tcg_gen_gvec_orc)
1332
-TRANS(vandi_b, gvec_vv_i, MO_8, tcg_gen_gvec_andi)
1333
-TRANS(vori_b, gvec_vv_i, MO_8, tcg_gen_gvec_ori)
1334
-TRANS(vxori_b, gvec_vv_i, MO_8, tcg_gen_gvec_xori)
1335
+TRANS(vorn_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_orc)
1336
+TRANS(vandi_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_andi)
1337
+TRANS(vori_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_ori)
1338
+TRANS(vxori_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_xori)
1339
1340
static void gen_vnori(unsigned vece, TCGv_vec t, TCGv_vec a, int64_t imm)
1341
{
1342
@@ -XXX,XX +XXX,XX @@ static void do_vnori_b(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1343
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op);
1344
}
1345
1346
-TRANS(vnori_b, gvec_vv_i, MO_8, do_vnori_b)
1347
-
1348
-TRANS(vsll_b, gvec_vvv, MO_8, tcg_gen_gvec_shlv)
1349
-TRANS(vsll_h, gvec_vvv, MO_16, tcg_gen_gvec_shlv)
1350
-TRANS(vsll_w, gvec_vvv, MO_32, tcg_gen_gvec_shlv)
1351
-TRANS(vsll_d, gvec_vvv, MO_64, tcg_gen_gvec_shlv)
1352
-TRANS(vslli_b, gvec_vv_i, MO_8, tcg_gen_gvec_shli)
1353
-TRANS(vslli_h, gvec_vv_i, MO_16, tcg_gen_gvec_shli)
1354
-TRANS(vslli_w, gvec_vv_i, MO_32, tcg_gen_gvec_shli)
1355
-TRANS(vslli_d, gvec_vv_i, MO_64, tcg_gen_gvec_shli)
1356
-
1357
-TRANS(vsrl_b, gvec_vvv, MO_8, tcg_gen_gvec_shrv)
1358
-TRANS(vsrl_h, gvec_vvv, MO_16, tcg_gen_gvec_shrv)
1359
-TRANS(vsrl_w, gvec_vvv, MO_32, tcg_gen_gvec_shrv)
1360
-TRANS(vsrl_d, gvec_vvv, MO_64, tcg_gen_gvec_shrv)
1361
-TRANS(vsrli_b, gvec_vv_i, MO_8, tcg_gen_gvec_shri)
1362
-TRANS(vsrli_h, gvec_vv_i, MO_16, tcg_gen_gvec_shri)
1363
-TRANS(vsrli_w, gvec_vv_i, MO_32, tcg_gen_gvec_shri)
1364
-TRANS(vsrli_d, gvec_vv_i, MO_64, tcg_gen_gvec_shri)
1365
-
1366
-TRANS(vsra_b, gvec_vvv, MO_8, tcg_gen_gvec_sarv)
1367
-TRANS(vsra_h, gvec_vvv, MO_16, tcg_gen_gvec_sarv)
1368
-TRANS(vsra_w, gvec_vvv, MO_32, tcg_gen_gvec_sarv)
1369
-TRANS(vsra_d, gvec_vvv, MO_64, tcg_gen_gvec_sarv)
1370
-TRANS(vsrai_b, gvec_vv_i, MO_8, tcg_gen_gvec_sari)
1371
-TRANS(vsrai_h, gvec_vv_i, MO_16, tcg_gen_gvec_sari)
1372
-TRANS(vsrai_w, gvec_vv_i, MO_32, tcg_gen_gvec_sari)
1373
-TRANS(vsrai_d, gvec_vv_i, MO_64, tcg_gen_gvec_sari)
1374
-
1375
-TRANS(vrotr_b, gvec_vvv, MO_8, tcg_gen_gvec_rotrv)
1376
-TRANS(vrotr_h, gvec_vvv, MO_16, tcg_gen_gvec_rotrv)
1377
-TRANS(vrotr_w, gvec_vvv, MO_32, tcg_gen_gvec_rotrv)
1378
-TRANS(vrotr_d, gvec_vvv, MO_64, tcg_gen_gvec_rotrv)
1379
-TRANS(vrotri_b, gvec_vv_i, MO_8, tcg_gen_gvec_rotri)
1380
-TRANS(vrotri_h, gvec_vv_i, MO_16, tcg_gen_gvec_rotri)
1381
-TRANS(vrotri_w, gvec_vv_i, MO_32, tcg_gen_gvec_rotri)
1382
-TRANS(vrotri_d, gvec_vv_i, MO_64, tcg_gen_gvec_rotri)
1383
-
1384
-TRANS(vsllwil_h_b, gen_vv_i, gen_helper_vsllwil_h_b)
1385
-TRANS(vsllwil_w_h, gen_vv_i, gen_helper_vsllwil_w_h)
1386
-TRANS(vsllwil_d_w, gen_vv_i, gen_helper_vsllwil_d_w)
1387
-TRANS(vextl_q_d, gen_vv, gen_helper_vextl_q_d)
1388
-TRANS(vsllwil_hu_bu, gen_vv_i, gen_helper_vsllwil_hu_bu)
1389
-TRANS(vsllwil_wu_hu, gen_vv_i, gen_helper_vsllwil_wu_hu)
1390
-TRANS(vsllwil_du_wu, gen_vv_i, gen_helper_vsllwil_du_wu)
1391
-TRANS(vextl_qu_du, gen_vv, gen_helper_vextl_qu_du)
1392
-
1393
-TRANS(vsrlr_b, gen_vvv, gen_helper_vsrlr_b)
1394
-TRANS(vsrlr_h, gen_vvv, gen_helper_vsrlr_h)
1395
-TRANS(vsrlr_w, gen_vvv, gen_helper_vsrlr_w)
1396
-TRANS(vsrlr_d, gen_vvv, gen_helper_vsrlr_d)
1397
-TRANS(vsrlri_b, gen_vv_i, gen_helper_vsrlri_b)
1398
-TRANS(vsrlri_h, gen_vv_i, gen_helper_vsrlri_h)
1399
-TRANS(vsrlri_w, gen_vv_i, gen_helper_vsrlri_w)
1400
-TRANS(vsrlri_d, gen_vv_i, gen_helper_vsrlri_d)
1401
-
1402
-TRANS(vsrar_b, gen_vvv, gen_helper_vsrar_b)
1403
-TRANS(vsrar_h, gen_vvv, gen_helper_vsrar_h)
1404
-TRANS(vsrar_w, gen_vvv, gen_helper_vsrar_w)
1405
-TRANS(vsrar_d, gen_vvv, gen_helper_vsrar_d)
1406
-TRANS(vsrari_b, gen_vv_i, gen_helper_vsrari_b)
1407
-TRANS(vsrari_h, gen_vv_i, gen_helper_vsrari_h)
1408
-TRANS(vsrari_w, gen_vv_i, gen_helper_vsrari_w)
1409
-TRANS(vsrari_d, gen_vv_i, gen_helper_vsrari_d)
1410
-
1411
-TRANS(vsrln_b_h, gen_vvv, gen_helper_vsrln_b_h)
1412
-TRANS(vsrln_h_w, gen_vvv, gen_helper_vsrln_h_w)
1413
-TRANS(vsrln_w_d, gen_vvv, gen_helper_vsrln_w_d)
1414
-TRANS(vsran_b_h, gen_vvv, gen_helper_vsran_b_h)
1415
-TRANS(vsran_h_w, gen_vvv, gen_helper_vsran_h_w)
1416
-TRANS(vsran_w_d, gen_vvv, gen_helper_vsran_w_d)
1417
-
1418
-TRANS(vsrlni_b_h, gen_vv_i, gen_helper_vsrlni_b_h)
1419
-TRANS(vsrlni_h_w, gen_vv_i, gen_helper_vsrlni_h_w)
1420
-TRANS(vsrlni_w_d, gen_vv_i, gen_helper_vsrlni_w_d)
1421
-TRANS(vsrlni_d_q, gen_vv_i, gen_helper_vsrlni_d_q)
1422
-TRANS(vsrani_b_h, gen_vv_i, gen_helper_vsrani_b_h)
1423
-TRANS(vsrani_h_w, gen_vv_i, gen_helper_vsrani_h_w)
1424
-TRANS(vsrani_w_d, gen_vv_i, gen_helper_vsrani_w_d)
1425
-TRANS(vsrani_d_q, gen_vv_i, gen_helper_vsrani_d_q)
1426
-
1427
-TRANS(vsrlrn_b_h, gen_vvv, gen_helper_vsrlrn_b_h)
1428
-TRANS(vsrlrn_h_w, gen_vvv, gen_helper_vsrlrn_h_w)
1429
-TRANS(vsrlrn_w_d, gen_vvv, gen_helper_vsrlrn_w_d)
1430
-TRANS(vsrarn_b_h, gen_vvv, gen_helper_vsrarn_b_h)
1431
-TRANS(vsrarn_h_w, gen_vvv, gen_helper_vsrarn_h_w)
1432
-TRANS(vsrarn_w_d, gen_vvv, gen_helper_vsrarn_w_d)
1433
-
1434
-TRANS(vsrlrni_b_h, gen_vv_i, gen_helper_vsrlrni_b_h)
1435
-TRANS(vsrlrni_h_w, gen_vv_i, gen_helper_vsrlrni_h_w)
1436
-TRANS(vsrlrni_w_d, gen_vv_i, gen_helper_vsrlrni_w_d)
1437
-TRANS(vsrlrni_d_q, gen_vv_i, gen_helper_vsrlrni_d_q)
1438
-TRANS(vsrarni_b_h, gen_vv_i, gen_helper_vsrarni_b_h)
1439
-TRANS(vsrarni_h_w, gen_vv_i, gen_helper_vsrarni_h_w)
1440
-TRANS(vsrarni_w_d, gen_vv_i, gen_helper_vsrarni_w_d)
1441
-TRANS(vsrarni_d_q, gen_vv_i, gen_helper_vsrarni_d_q)
1442
-
1443
-TRANS(vssrln_b_h, gen_vvv, gen_helper_vssrln_b_h)
1444
-TRANS(vssrln_h_w, gen_vvv, gen_helper_vssrln_h_w)
1445
-TRANS(vssrln_w_d, gen_vvv, gen_helper_vssrln_w_d)
1446
-TRANS(vssran_b_h, gen_vvv, gen_helper_vssran_b_h)
1447
-TRANS(vssran_h_w, gen_vvv, gen_helper_vssran_h_w)
1448
-TRANS(vssran_w_d, gen_vvv, gen_helper_vssran_w_d)
1449
-TRANS(vssrln_bu_h, gen_vvv, gen_helper_vssrln_bu_h)
1450
-TRANS(vssrln_hu_w, gen_vvv, gen_helper_vssrln_hu_w)
1451
-TRANS(vssrln_wu_d, gen_vvv, gen_helper_vssrln_wu_d)
1452
-TRANS(vssran_bu_h, gen_vvv, gen_helper_vssran_bu_h)
1453
-TRANS(vssran_hu_w, gen_vvv, gen_helper_vssran_hu_w)
1454
-TRANS(vssran_wu_d, gen_vvv, gen_helper_vssran_wu_d)
1455
-
1456
-TRANS(vssrlni_b_h, gen_vv_i, gen_helper_vssrlni_b_h)
1457
-TRANS(vssrlni_h_w, gen_vv_i, gen_helper_vssrlni_h_w)
1458
-TRANS(vssrlni_w_d, gen_vv_i, gen_helper_vssrlni_w_d)
1459
-TRANS(vssrlni_d_q, gen_vv_i, gen_helper_vssrlni_d_q)
1460
-TRANS(vssrani_b_h, gen_vv_i, gen_helper_vssrani_b_h)
1461
-TRANS(vssrani_h_w, gen_vv_i, gen_helper_vssrani_h_w)
1462
-TRANS(vssrani_w_d, gen_vv_i, gen_helper_vssrani_w_d)
1463
-TRANS(vssrani_d_q, gen_vv_i, gen_helper_vssrani_d_q)
1464
-TRANS(vssrlni_bu_h, gen_vv_i, gen_helper_vssrlni_bu_h)
1465
-TRANS(vssrlni_hu_w, gen_vv_i, gen_helper_vssrlni_hu_w)
1466
-TRANS(vssrlni_wu_d, gen_vv_i, gen_helper_vssrlni_wu_d)
1467
-TRANS(vssrlni_du_q, gen_vv_i, gen_helper_vssrlni_du_q)
1468
-TRANS(vssrani_bu_h, gen_vv_i, gen_helper_vssrani_bu_h)
1469
-TRANS(vssrani_hu_w, gen_vv_i, gen_helper_vssrani_hu_w)
1470
-TRANS(vssrani_wu_d, gen_vv_i, gen_helper_vssrani_wu_d)
1471
-TRANS(vssrani_du_q, gen_vv_i, gen_helper_vssrani_du_q)
1472
-
1473
-TRANS(vssrlrn_b_h, gen_vvv, gen_helper_vssrlrn_b_h)
1474
-TRANS(vssrlrn_h_w, gen_vvv, gen_helper_vssrlrn_h_w)
1475
-TRANS(vssrlrn_w_d, gen_vvv, gen_helper_vssrlrn_w_d)
1476
-TRANS(vssrarn_b_h, gen_vvv, gen_helper_vssrarn_b_h)
1477
-TRANS(vssrarn_h_w, gen_vvv, gen_helper_vssrarn_h_w)
1478
-TRANS(vssrarn_w_d, gen_vvv, gen_helper_vssrarn_w_d)
1479
-TRANS(vssrlrn_bu_h, gen_vvv, gen_helper_vssrlrn_bu_h)
1480
-TRANS(vssrlrn_hu_w, gen_vvv, gen_helper_vssrlrn_hu_w)
1481
-TRANS(vssrlrn_wu_d, gen_vvv, gen_helper_vssrlrn_wu_d)
1482
-TRANS(vssrarn_bu_h, gen_vvv, gen_helper_vssrarn_bu_h)
1483
-TRANS(vssrarn_hu_w, gen_vvv, gen_helper_vssrarn_hu_w)
1484
-TRANS(vssrarn_wu_d, gen_vvv, gen_helper_vssrarn_wu_d)
1485
-
1486
-TRANS(vssrlrni_b_h, gen_vv_i, gen_helper_vssrlrni_b_h)
1487
-TRANS(vssrlrni_h_w, gen_vv_i, gen_helper_vssrlrni_h_w)
1488
-TRANS(vssrlrni_w_d, gen_vv_i, gen_helper_vssrlrni_w_d)
1489
-TRANS(vssrlrni_d_q, gen_vv_i, gen_helper_vssrlrni_d_q)
1490
-TRANS(vssrarni_b_h, gen_vv_i, gen_helper_vssrarni_b_h)
1491
-TRANS(vssrarni_h_w, gen_vv_i, gen_helper_vssrarni_h_w)
1492
-TRANS(vssrarni_w_d, gen_vv_i, gen_helper_vssrarni_w_d)
1493
-TRANS(vssrarni_d_q, gen_vv_i, gen_helper_vssrarni_d_q)
1494
-TRANS(vssrlrni_bu_h, gen_vv_i, gen_helper_vssrlrni_bu_h)
1495
-TRANS(vssrlrni_hu_w, gen_vv_i, gen_helper_vssrlrni_hu_w)
1496
-TRANS(vssrlrni_wu_d, gen_vv_i, gen_helper_vssrlrni_wu_d)
1497
-TRANS(vssrlrni_du_q, gen_vv_i, gen_helper_vssrlrni_du_q)
1498
-TRANS(vssrarni_bu_h, gen_vv_i, gen_helper_vssrarni_bu_h)
1499
-TRANS(vssrarni_hu_w, gen_vv_i, gen_helper_vssrarni_hu_w)
1500
-TRANS(vssrarni_wu_d, gen_vv_i, gen_helper_vssrarni_wu_d)
1501
-TRANS(vssrarni_du_q, gen_vv_i, gen_helper_vssrarni_du_q)
1502
-
1503
-TRANS(vclo_b, gen_vv, gen_helper_vclo_b)
1504
-TRANS(vclo_h, gen_vv, gen_helper_vclo_h)
1505
-TRANS(vclo_w, gen_vv, gen_helper_vclo_w)
1506
-TRANS(vclo_d, gen_vv, gen_helper_vclo_d)
1507
-TRANS(vclz_b, gen_vv, gen_helper_vclz_b)
1508
-TRANS(vclz_h, gen_vv, gen_helper_vclz_h)
1509
-TRANS(vclz_w, gen_vv, gen_helper_vclz_w)
1510
-TRANS(vclz_d, gen_vv, gen_helper_vclz_d)
1511
-
1512
-TRANS(vpcnt_b, gen_vv, gen_helper_vpcnt_b)
1513
-TRANS(vpcnt_h, gen_vv, gen_helper_vpcnt_h)
1514
-TRANS(vpcnt_w, gen_vv, gen_helper_vpcnt_w)
1515
-TRANS(vpcnt_d, gen_vv, gen_helper_vpcnt_d)
1516
+TRANS(vnori_b, ALL, gvec_vv_i, MO_8, do_vnori_b)
1517
+
1518
+TRANS(vsll_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_shlv)
1519
+TRANS(vsll_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_shlv)
1520
+TRANS(vsll_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_shlv)
1521
+TRANS(vsll_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_shlv)
1522
+TRANS(vslli_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_shli)
1523
+TRANS(vslli_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_shli)
1524
+TRANS(vslli_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_shli)
1525
+TRANS(vslli_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_shli)
1526
+
1527
+TRANS(vsrl_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_shrv)
1528
+TRANS(vsrl_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_shrv)
1529
+TRANS(vsrl_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_shrv)
1530
+TRANS(vsrl_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_shrv)
1531
+TRANS(vsrli_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_shri)
1532
+TRANS(vsrli_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_shri)
1533
+TRANS(vsrli_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_shri)
1534
+TRANS(vsrli_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_shri)
1535
+
1536
+TRANS(vsra_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_sarv)
1537
+TRANS(vsra_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_sarv)
1538
+TRANS(vsra_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_sarv)
1539
+TRANS(vsra_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_sarv)
1540
+TRANS(vsrai_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_sari)
1541
+TRANS(vsrai_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_sari)
1542
+TRANS(vsrai_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_sari)
1543
+TRANS(vsrai_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_sari)
1544
+
1545
+TRANS(vrotr_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_rotrv)
1546
+TRANS(vrotr_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_rotrv)
1547
+TRANS(vrotr_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_rotrv)
1548
+TRANS(vrotr_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_rotrv)
1549
+TRANS(vrotri_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_rotri)
1550
+TRANS(vrotri_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_rotri)
1551
+TRANS(vrotri_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_rotri)
1552
+TRANS(vrotri_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_rotri)
1553
+
1554
+TRANS(vsllwil_h_b, ALL, gen_vv_i, gen_helper_vsllwil_h_b)
1555
+TRANS(vsllwil_w_h, ALL, gen_vv_i, gen_helper_vsllwil_w_h)
1556
+TRANS(vsllwil_d_w, ALL, gen_vv_i, gen_helper_vsllwil_d_w)
1557
+TRANS(vextl_q_d, ALL, gen_vv, gen_helper_vextl_q_d)
1558
+TRANS(vsllwil_hu_bu, ALL, gen_vv_i, gen_helper_vsllwil_hu_bu)
1559
+TRANS(vsllwil_wu_hu, ALL, gen_vv_i, gen_helper_vsllwil_wu_hu)
1560
+TRANS(vsllwil_du_wu, ALL, gen_vv_i, gen_helper_vsllwil_du_wu)
1561
+TRANS(vextl_qu_du, ALL, gen_vv, gen_helper_vextl_qu_du)
1562
+
1563
+TRANS(vsrlr_b, ALL, gen_vvv, gen_helper_vsrlr_b)
1564
+TRANS(vsrlr_h, ALL, gen_vvv, gen_helper_vsrlr_h)
1565
+TRANS(vsrlr_w, ALL, gen_vvv, gen_helper_vsrlr_w)
1566
+TRANS(vsrlr_d, ALL, gen_vvv, gen_helper_vsrlr_d)
1567
+TRANS(vsrlri_b, ALL, gen_vv_i, gen_helper_vsrlri_b)
1568
+TRANS(vsrlri_h, ALL, gen_vv_i, gen_helper_vsrlri_h)
1569
+TRANS(vsrlri_w, ALL, gen_vv_i, gen_helper_vsrlri_w)
1570
+TRANS(vsrlri_d, ALL, gen_vv_i, gen_helper_vsrlri_d)
1571
+
1572
+TRANS(vsrar_b, ALL, gen_vvv, gen_helper_vsrar_b)
1573
+TRANS(vsrar_h, ALL, gen_vvv, gen_helper_vsrar_h)
1574
+TRANS(vsrar_w, ALL, gen_vvv, gen_helper_vsrar_w)
1575
+TRANS(vsrar_d, ALL, gen_vvv, gen_helper_vsrar_d)
1576
+TRANS(vsrari_b, ALL, gen_vv_i, gen_helper_vsrari_b)
1577
+TRANS(vsrari_h, ALL, gen_vv_i, gen_helper_vsrari_h)
1578
+TRANS(vsrari_w, ALL, gen_vv_i, gen_helper_vsrari_w)
1579
+TRANS(vsrari_d, ALL, gen_vv_i, gen_helper_vsrari_d)
1580
+
1581
+TRANS(vsrln_b_h, ALL, gen_vvv, gen_helper_vsrln_b_h)
1582
+TRANS(vsrln_h_w, ALL, gen_vvv, gen_helper_vsrln_h_w)
1583
+TRANS(vsrln_w_d, ALL, gen_vvv, gen_helper_vsrln_w_d)
1584
+TRANS(vsran_b_h, ALL, gen_vvv, gen_helper_vsran_b_h)
1585
+TRANS(vsran_h_w, ALL, gen_vvv, gen_helper_vsran_h_w)
1586
+TRANS(vsran_w_d, ALL, gen_vvv, gen_helper_vsran_w_d)
1587
+
1588
+TRANS(vsrlni_b_h, ALL, gen_vv_i, gen_helper_vsrlni_b_h)
1589
+TRANS(vsrlni_h_w, ALL, gen_vv_i, gen_helper_vsrlni_h_w)
1590
+TRANS(vsrlni_w_d, ALL, gen_vv_i, gen_helper_vsrlni_w_d)
1591
+TRANS(vsrlni_d_q, ALL, gen_vv_i, gen_helper_vsrlni_d_q)
1592
+TRANS(vsrani_b_h, ALL, gen_vv_i, gen_helper_vsrani_b_h)
1593
+TRANS(vsrani_h_w, ALL, gen_vv_i, gen_helper_vsrani_h_w)
1594
+TRANS(vsrani_w_d, ALL, gen_vv_i, gen_helper_vsrani_w_d)
1595
+TRANS(vsrani_d_q, ALL, gen_vv_i, gen_helper_vsrani_d_q)
1596
+
1597
+TRANS(vsrlrn_b_h, ALL, gen_vvv, gen_helper_vsrlrn_b_h)
1598
+TRANS(vsrlrn_h_w, ALL, gen_vvv, gen_helper_vsrlrn_h_w)
1599
+TRANS(vsrlrn_w_d, ALL, gen_vvv, gen_helper_vsrlrn_w_d)
1600
+TRANS(vsrarn_b_h, ALL, gen_vvv, gen_helper_vsrarn_b_h)
1601
+TRANS(vsrarn_h_w, ALL, gen_vvv, gen_helper_vsrarn_h_w)
1602
+TRANS(vsrarn_w_d, ALL, gen_vvv, gen_helper_vsrarn_w_d)
1603
+
1604
+TRANS(vsrlrni_b_h, ALL, gen_vv_i, gen_helper_vsrlrni_b_h)
1605
+TRANS(vsrlrni_h_w, ALL, gen_vv_i, gen_helper_vsrlrni_h_w)
1606
+TRANS(vsrlrni_w_d, ALL, gen_vv_i, gen_helper_vsrlrni_w_d)
1607
+TRANS(vsrlrni_d_q, ALL, gen_vv_i, gen_helper_vsrlrni_d_q)
1608
+TRANS(vsrarni_b_h, ALL, gen_vv_i, gen_helper_vsrarni_b_h)
1609
+TRANS(vsrarni_h_w, ALL, gen_vv_i, gen_helper_vsrarni_h_w)
1610
+TRANS(vsrarni_w_d, ALL, gen_vv_i, gen_helper_vsrarni_w_d)
1611
+TRANS(vsrarni_d_q, ALL, gen_vv_i, gen_helper_vsrarni_d_q)
1612
+
1613
+TRANS(vssrln_b_h, ALL, gen_vvv, gen_helper_vssrln_b_h)
1614
+TRANS(vssrln_h_w, ALL, gen_vvv, gen_helper_vssrln_h_w)
1615
+TRANS(vssrln_w_d, ALL, gen_vvv, gen_helper_vssrln_w_d)
1616
+TRANS(vssran_b_h, ALL, gen_vvv, gen_helper_vssran_b_h)
1617
+TRANS(vssran_h_w, ALL, gen_vvv, gen_helper_vssran_h_w)
1618
+TRANS(vssran_w_d, ALL, gen_vvv, gen_helper_vssran_w_d)
1619
+TRANS(vssrln_bu_h, ALL, gen_vvv, gen_helper_vssrln_bu_h)
1620
+TRANS(vssrln_hu_w, ALL, gen_vvv, gen_helper_vssrln_hu_w)
1621
+TRANS(vssrln_wu_d, ALL, gen_vvv, gen_helper_vssrln_wu_d)
1622
+TRANS(vssran_bu_h, ALL, gen_vvv, gen_helper_vssran_bu_h)
1623
+TRANS(vssran_hu_w, ALL, gen_vvv, gen_helper_vssran_hu_w)
1624
+TRANS(vssran_wu_d, ALL, gen_vvv, gen_helper_vssran_wu_d)
1625
+
1626
+TRANS(vssrlni_b_h, ALL, gen_vv_i, gen_helper_vssrlni_b_h)
1627
+TRANS(vssrlni_h_w, ALL, gen_vv_i, gen_helper_vssrlni_h_w)
1628
+TRANS(vssrlni_w_d, ALL, gen_vv_i, gen_helper_vssrlni_w_d)
1629
+TRANS(vssrlni_d_q, ALL, gen_vv_i, gen_helper_vssrlni_d_q)
1630
+TRANS(vssrani_b_h, ALL, gen_vv_i, gen_helper_vssrani_b_h)
1631
+TRANS(vssrani_h_w, ALL, gen_vv_i, gen_helper_vssrani_h_w)
1632
+TRANS(vssrani_w_d, ALL, gen_vv_i, gen_helper_vssrani_w_d)
1633
+TRANS(vssrani_d_q, ALL, gen_vv_i, gen_helper_vssrani_d_q)
1634
+TRANS(vssrlni_bu_h, ALL, gen_vv_i, gen_helper_vssrlni_bu_h)
1635
+TRANS(vssrlni_hu_w, ALL, gen_vv_i, gen_helper_vssrlni_hu_w)
1636
+TRANS(vssrlni_wu_d, ALL, gen_vv_i, gen_helper_vssrlni_wu_d)
1637
+TRANS(vssrlni_du_q, ALL, gen_vv_i, gen_helper_vssrlni_du_q)
1638
+TRANS(vssrani_bu_h, ALL, gen_vv_i, gen_helper_vssrani_bu_h)
1639
+TRANS(vssrani_hu_w, ALL, gen_vv_i, gen_helper_vssrani_hu_w)
1640
+TRANS(vssrani_wu_d, ALL, gen_vv_i, gen_helper_vssrani_wu_d)
1641
+TRANS(vssrani_du_q, ALL, gen_vv_i, gen_helper_vssrani_du_q)
1642
+
1643
+TRANS(vssrlrn_b_h, ALL, gen_vvv, gen_helper_vssrlrn_b_h)
1644
+TRANS(vssrlrn_h_w, ALL, gen_vvv, gen_helper_vssrlrn_h_w)
1645
+TRANS(vssrlrn_w_d, ALL, gen_vvv, gen_helper_vssrlrn_w_d)
1646
+TRANS(vssrarn_b_h, ALL, gen_vvv, gen_helper_vssrarn_b_h)
1647
+TRANS(vssrarn_h_w, ALL, gen_vvv, gen_helper_vssrarn_h_w)
1648
+TRANS(vssrarn_w_d, ALL, gen_vvv, gen_helper_vssrarn_w_d)
1649
+TRANS(vssrlrn_bu_h, ALL, gen_vvv, gen_helper_vssrlrn_bu_h)
1650
+TRANS(vssrlrn_hu_w, ALL, gen_vvv, gen_helper_vssrlrn_hu_w)
1651
+TRANS(vssrlrn_wu_d, ALL, gen_vvv, gen_helper_vssrlrn_wu_d)
1652
+TRANS(vssrarn_bu_h, ALL, gen_vvv, gen_helper_vssrarn_bu_h)
1653
+TRANS(vssrarn_hu_w, ALL, gen_vvv, gen_helper_vssrarn_hu_w)
1654
+TRANS(vssrarn_wu_d, ALL, gen_vvv, gen_helper_vssrarn_wu_d)
1655
+
1656
+TRANS(vssrlrni_b_h, ALL, gen_vv_i, gen_helper_vssrlrni_b_h)
1657
+TRANS(vssrlrni_h_w, ALL, gen_vv_i, gen_helper_vssrlrni_h_w)
1658
+TRANS(vssrlrni_w_d, ALL, gen_vv_i, gen_helper_vssrlrni_w_d)
1659
+TRANS(vssrlrni_d_q, ALL, gen_vv_i, gen_helper_vssrlrni_d_q)
1660
+TRANS(vssrarni_b_h, ALL, gen_vv_i, gen_helper_vssrarni_b_h)
1661
+TRANS(vssrarni_h_w, ALL, gen_vv_i, gen_helper_vssrarni_h_w)
1662
+TRANS(vssrarni_w_d, ALL, gen_vv_i, gen_helper_vssrarni_w_d)
1663
+TRANS(vssrarni_d_q, ALL, gen_vv_i, gen_helper_vssrarni_d_q)
1664
+TRANS(vssrlrni_bu_h, ALL, gen_vv_i, gen_helper_vssrlrni_bu_h)
1665
+TRANS(vssrlrni_hu_w, ALL, gen_vv_i, gen_helper_vssrlrni_hu_w)
1666
+TRANS(vssrlrni_wu_d, ALL, gen_vv_i, gen_helper_vssrlrni_wu_d)
1667
+TRANS(vssrlrni_du_q, ALL, gen_vv_i, gen_helper_vssrlrni_du_q)
1668
+TRANS(vssrarni_bu_h, ALL, gen_vv_i, gen_helper_vssrarni_bu_h)
1669
+TRANS(vssrarni_hu_w, ALL, gen_vv_i, gen_helper_vssrarni_hu_w)
1670
+TRANS(vssrarni_wu_d, ALL, gen_vv_i, gen_helper_vssrarni_wu_d)
1671
+TRANS(vssrarni_du_q, ALL, gen_vv_i, gen_helper_vssrarni_du_q)
1672
+
1673
+TRANS(vclo_b, ALL, gen_vv, gen_helper_vclo_b)
1674
+TRANS(vclo_h, ALL, gen_vv, gen_helper_vclo_h)
1675
+TRANS(vclo_w, ALL, gen_vv, gen_helper_vclo_w)
1676
+TRANS(vclo_d, ALL, gen_vv, gen_helper_vclo_d)
1677
+TRANS(vclz_b, ALL, gen_vv, gen_helper_vclz_b)
1678
+TRANS(vclz_h, ALL, gen_vv, gen_helper_vclz_h)
1679
+TRANS(vclz_w, ALL, gen_vv, gen_helper_vclz_w)
1680
+TRANS(vclz_d, ALL, gen_vv, gen_helper_vclz_d)
1681
+
1682
+TRANS(vpcnt_b, ALL, gen_vv, gen_helper_vpcnt_b)
1683
+TRANS(vpcnt_h, ALL, gen_vv, gen_helper_vpcnt_h)
1684
+TRANS(vpcnt_w, ALL, gen_vv, gen_helper_vpcnt_w)
1685
+TRANS(vpcnt_d, ALL, gen_vv, gen_helper_vpcnt_d)
1686
1687
static void do_vbit(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
1688
void (*func)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec))
1689
@@ -XXX,XX +XXX,XX @@ static void do_vbitclr(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1690
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1691
}
1692
1693
-TRANS(vbitclr_b, gvec_vvv, MO_8, do_vbitclr)
1694
-TRANS(vbitclr_h, gvec_vvv, MO_16, do_vbitclr)
1695
-TRANS(vbitclr_w, gvec_vvv, MO_32, do_vbitclr)
1696
-TRANS(vbitclr_d, gvec_vvv, MO_64, do_vbitclr)
1697
+TRANS(vbitclr_b, ALL, gvec_vvv, MO_8, do_vbitclr)
1698
+TRANS(vbitclr_h, ALL, gvec_vvv, MO_16, do_vbitclr)
1699
+TRANS(vbitclr_w, ALL, gvec_vvv, MO_32, do_vbitclr)
1700
+TRANS(vbitclr_d, ALL, gvec_vvv, MO_64, do_vbitclr)
1701
1702
static void do_vbiti(unsigned vece, TCGv_vec t, TCGv_vec a, int64_t imm,
1703
void (*func)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec))
1704
@@ -XXX,XX +XXX,XX @@ static void do_vbitclri(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1705
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
1706
}
1707
1708
-TRANS(vbitclri_b, gvec_vv_i, MO_8, do_vbitclri)
1709
-TRANS(vbitclri_h, gvec_vv_i, MO_16, do_vbitclri)
1710
-TRANS(vbitclri_w, gvec_vv_i, MO_32, do_vbitclri)
1711
-TRANS(vbitclri_d, gvec_vv_i, MO_64, do_vbitclri)
1712
+TRANS(vbitclri_b, ALL, gvec_vv_i, MO_8, do_vbitclri)
1713
+TRANS(vbitclri_h, ALL, gvec_vv_i, MO_16, do_vbitclri)
1714
+TRANS(vbitclri_w, ALL, gvec_vv_i, MO_32, do_vbitclri)
1715
+TRANS(vbitclri_d, ALL, gvec_vv_i, MO_64, do_vbitclri)
1716
1717
static void do_vbitset(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1718
uint32_t vk_ofs, uint32_t oprsz, uint32_t maxsz)
1719
@@ -XXX,XX +XXX,XX @@ static void do_vbitset(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1720
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1721
}
1722
1723
-TRANS(vbitset_b, gvec_vvv, MO_8, do_vbitset)
1724
-TRANS(vbitset_h, gvec_vvv, MO_16, do_vbitset)
1725
-TRANS(vbitset_w, gvec_vvv, MO_32, do_vbitset)
1726
-TRANS(vbitset_d, gvec_vvv, MO_64, do_vbitset)
1727
+TRANS(vbitset_b, ALL, gvec_vvv, MO_8, do_vbitset)
1728
+TRANS(vbitset_h, ALL, gvec_vvv, MO_16, do_vbitset)
1729
+TRANS(vbitset_w, ALL, gvec_vvv, MO_32, do_vbitset)
1730
+TRANS(vbitset_d, ALL, gvec_vvv, MO_64, do_vbitset)
1731
1732
static void do_vbitseti(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1733
int64_t imm, uint32_t oprsz, uint32_t maxsz)
1734
@@ -XXX,XX +XXX,XX @@ static void do_vbitseti(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1735
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
1736
}
1737
1738
-TRANS(vbitseti_b, gvec_vv_i, MO_8, do_vbitseti)
1739
-TRANS(vbitseti_h, gvec_vv_i, MO_16, do_vbitseti)
1740
-TRANS(vbitseti_w, gvec_vv_i, MO_32, do_vbitseti)
1741
-TRANS(vbitseti_d, gvec_vv_i, MO_64, do_vbitseti)
1742
+TRANS(vbitseti_b, ALL, gvec_vv_i, MO_8, do_vbitseti)
1743
+TRANS(vbitseti_h, ALL, gvec_vv_i, MO_16, do_vbitseti)
1744
+TRANS(vbitseti_w, ALL, gvec_vv_i, MO_32, do_vbitseti)
1745
+TRANS(vbitseti_d, ALL, gvec_vv_i, MO_64, do_vbitseti)
1746
1747
static void do_vbitrev(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1748
uint32_t vk_ofs, uint32_t oprsz, uint32_t maxsz)
1749
@@ -XXX,XX +XXX,XX @@ static void do_vbitrev(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1750
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1751
}
1752
1753
-TRANS(vbitrev_b, gvec_vvv, MO_8, do_vbitrev)
1754
-TRANS(vbitrev_h, gvec_vvv, MO_16, do_vbitrev)
1755
-TRANS(vbitrev_w, gvec_vvv, MO_32, do_vbitrev)
1756
-TRANS(vbitrev_d, gvec_vvv, MO_64, do_vbitrev)
1757
+TRANS(vbitrev_b, ALL, gvec_vvv, MO_8, do_vbitrev)
1758
+TRANS(vbitrev_h, ALL, gvec_vvv, MO_16, do_vbitrev)
1759
+TRANS(vbitrev_w, ALL, gvec_vvv, MO_32, do_vbitrev)
1760
+TRANS(vbitrev_d, ALL, gvec_vvv, MO_64, do_vbitrev)
1761
1762
static void do_vbitrevi(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1763
int64_t imm, uint32_t oprsz, uint32_t maxsz)
1764
@@ -XXX,XX +XXX,XX @@ static void do_vbitrevi(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1765
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
1766
}
1767
1768
-TRANS(vbitrevi_b, gvec_vv_i, MO_8, do_vbitrevi)
1769
-TRANS(vbitrevi_h, gvec_vv_i, MO_16, do_vbitrevi)
1770
-TRANS(vbitrevi_w, gvec_vv_i, MO_32, do_vbitrevi)
1771
-TRANS(vbitrevi_d, gvec_vv_i, MO_64, do_vbitrevi)
1772
-
1773
-TRANS(vfrstp_b, gen_vvv, gen_helper_vfrstp_b)
1774
-TRANS(vfrstp_h, gen_vvv, gen_helper_vfrstp_h)
1775
-TRANS(vfrstpi_b, gen_vv_i, gen_helper_vfrstpi_b)
1776
-TRANS(vfrstpi_h, gen_vv_i, gen_helper_vfrstpi_h)
1777
-
1778
-TRANS(vfadd_s, gen_vvv, gen_helper_vfadd_s)
1779
-TRANS(vfadd_d, gen_vvv, gen_helper_vfadd_d)
1780
-TRANS(vfsub_s, gen_vvv, gen_helper_vfsub_s)
1781
-TRANS(vfsub_d, gen_vvv, gen_helper_vfsub_d)
1782
-TRANS(vfmul_s, gen_vvv, gen_helper_vfmul_s)
1783
-TRANS(vfmul_d, gen_vvv, gen_helper_vfmul_d)
1784
-TRANS(vfdiv_s, gen_vvv, gen_helper_vfdiv_s)
1785
-TRANS(vfdiv_d, gen_vvv, gen_helper_vfdiv_d)
1786
-
1787
-TRANS(vfmadd_s, gen_vvvv, gen_helper_vfmadd_s)
1788
-TRANS(vfmadd_d, gen_vvvv, gen_helper_vfmadd_d)
1789
-TRANS(vfmsub_s, gen_vvvv, gen_helper_vfmsub_s)
1790
-TRANS(vfmsub_d, gen_vvvv, gen_helper_vfmsub_d)
1791
-TRANS(vfnmadd_s, gen_vvvv, gen_helper_vfnmadd_s)
1792
-TRANS(vfnmadd_d, gen_vvvv, gen_helper_vfnmadd_d)
1793
-TRANS(vfnmsub_s, gen_vvvv, gen_helper_vfnmsub_s)
1794
-TRANS(vfnmsub_d, gen_vvvv, gen_helper_vfnmsub_d)
1795
-
1796
-TRANS(vfmax_s, gen_vvv, gen_helper_vfmax_s)
1797
-TRANS(vfmax_d, gen_vvv, gen_helper_vfmax_d)
1798
-TRANS(vfmin_s, gen_vvv, gen_helper_vfmin_s)
1799
-TRANS(vfmin_d, gen_vvv, gen_helper_vfmin_d)
1800
-
1801
-TRANS(vfmaxa_s, gen_vvv, gen_helper_vfmaxa_s)
1802
-TRANS(vfmaxa_d, gen_vvv, gen_helper_vfmaxa_d)
1803
-TRANS(vfmina_s, gen_vvv, gen_helper_vfmina_s)
1804
-TRANS(vfmina_d, gen_vvv, gen_helper_vfmina_d)
1805
-
1806
-TRANS(vflogb_s, gen_vv, gen_helper_vflogb_s)
1807
-TRANS(vflogb_d, gen_vv, gen_helper_vflogb_d)
1808
-
1809
-TRANS(vfclass_s, gen_vv, gen_helper_vfclass_s)
1810
-TRANS(vfclass_d, gen_vv, gen_helper_vfclass_d)
1811
-
1812
-TRANS(vfsqrt_s, gen_vv, gen_helper_vfsqrt_s)
1813
-TRANS(vfsqrt_d, gen_vv, gen_helper_vfsqrt_d)
1814
-TRANS(vfrecip_s, gen_vv, gen_helper_vfrecip_s)
1815
-TRANS(vfrecip_d, gen_vv, gen_helper_vfrecip_d)
1816
-TRANS(vfrsqrt_s, gen_vv, gen_helper_vfrsqrt_s)
1817
-TRANS(vfrsqrt_d, gen_vv, gen_helper_vfrsqrt_d)
1818
-
1819
-TRANS(vfcvtl_s_h, gen_vv, gen_helper_vfcvtl_s_h)
1820
-TRANS(vfcvth_s_h, gen_vv, gen_helper_vfcvth_s_h)
1821
-TRANS(vfcvtl_d_s, gen_vv, gen_helper_vfcvtl_d_s)
1822
-TRANS(vfcvth_d_s, gen_vv, gen_helper_vfcvth_d_s)
1823
-TRANS(vfcvt_h_s, gen_vvv, gen_helper_vfcvt_h_s)
1824
-TRANS(vfcvt_s_d, gen_vvv, gen_helper_vfcvt_s_d)
1825
-
1826
-TRANS(vfrintrne_s, gen_vv, gen_helper_vfrintrne_s)
1827
-TRANS(vfrintrne_d, gen_vv, gen_helper_vfrintrne_d)
1828
-TRANS(vfrintrz_s, gen_vv, gen_helper_vfrintrz_s)
1829
-TRANS(vfrintrz_d, gen_vv, gen_helper_vfrintrz_d)
1830
-TRANS(vfrintrp_s, gen_vv, gen_helper_vfrintrp_s)
1831
-TRANS(vfrintrp_d, gen_vv, gen_helper_vfrintrp_d)
1832
-TRANS(vfrintrm_s, gen_vv, gen_helper_vfrintrm_s)
1833
-TRANS(vfrintrm_d, gen_vv, gen_helper_vfrintrm_d)
1834
-TRANS(vfrint_s, gen_vv, gen_helper_vfrint_s)
1835
-TRANS(vfrint_d, gen_vv, gen_helper_vfrint_d)
1836
-
1837
-TRANS(vftintrne_w_s, gen_vv, gen_helper_vftintrne_w_s)
1838
-TRANS(vftintrne_l_d, gen_vv, gen_helper_vftintrne_l_d)
1839
-TRANS(vftintrz_w_s, gen_vv, gen_helper_vftintrz_w_s)
1840
-TRANS(vftintrz_l_d, gen_vv, gen_helper_vftintrz_l_d)
1841
-TRANS(vftintrp_w_s, gen_vv, gen_helper_vftintrp_w_s)
1842
-TRANS(vftintrp_l_d, gen_vv, gen_helper_vftintrp_l_d)
1843
-TRANS(vftintrm_w_s, gen_vv, gen_helper_vftintrm_w_s)
1844
-TRANS(vftintrm_l_d, gen_vv, gen_helper_vftintrm_l_d)
1845
-TRANS(vftint_w_s, gen_vv, gen_helper_vftint_w_s)
1846
-TRANS(vftint_l_d, gen_vv, gen_helper_vftint_l_d)
1847
-TRANS(vftintrz_wu_s, gen_vv, gen_helper_vftintrz_wu_s)
1848
-TRANS(vftintrz_lu_d, gen_vv, gen_helper_vftintrz_lu_d)
1849
-TRANS(vftint_wu_s, gen_vv, gen_helper_vftint_wu_s)
1850
-TRANS(vftint_lu_d, gen_vv, gen_helper_vftint_lu_d)
1851
-TRANS(vftintrne_w_d, gen_vvv, gen_helper_vftintrne_w_d)
1852
-TRANS(vftintrz_w_d, gen_vvv, gen_helper_vftintrz_w_d)
1853
-TRANS(vftintrp_w_d, gen_vvv, gen_helper_vftintrp_w_d)
1854
-TRANS(vftintrm_w_d, gen_vvv, gen_helper_vftintrm_w_d)
1855
-TRANS(vftint_w_d, gen_vvv, gen_helper_vftint_w_d)
1856
-TRANS(vftintrnel_l_s, gen_vv, gen_helper_vftintrnel_l_s)
1857
-TRANS(vftintrneh_l_s, gen_vv, gen_helper_vftintrneh_l_s)
1858
-TRANS(vftintrzl_l_s, gen_vv, gen_helper_vftintrzl_l_s)
1859
-TRANS(vftintrzh_l_s, gen_vv, gen_helper_vftintrzh_l_s)
1860
-TRANS(vftintrpl_l_s, gen_vv, gen_helper_vftintrpl_l_s)
1861
-TRANS(vftintrph_l_s, gen_vv, gen_helper_vftintrph_l_s)
1862
-TRANS(vftintrml_l_s, gen_vv, gen_helper_vftintrml_l_s)
1863
-TRANS(vftintrmh_l_s, gen_vv, gen_helper_vftintrmh_l_s)
1864
-TRANS(vftintl_l_s, gen_vv, gen_helper_vftintl_l_s)
1865
-TRANS(vftinth_l_s, gen_vv, gen_helper_vftinth_l_s)
1866
-
1867
-TRANS(vffint_s_w, gen_vv, gen_helper_vffint_s_w)
1868
-TRANS(vffint_d_l, gen_vv, gen_helper_vffint_d_l)
1869
-TRANS(vffint_s_wu, gen_vv, gen_helper_vffint_s_wu)
1870
-TRANS(vffint_d_lu, gen_vv, gen_helper_vffint_d_lu)
1871
-TRANS(vffintl_d_w, gen_vv, gen_helper_vffintl_d_w)
1872
-TRANS(vffinth_d_w, gen_vv, gen_helper_vffinth_d_w)
1873
-TRANS(vffint_s_l, gen_vvv, gen_helper_vffint_s_l)
1874
+TRANS(vbitrevi_b, ALL, gvec_vv_i, MO_8, do_vbitrevi)
1875
+TRANS(vbitrevi_h, ALL, gvec_vv_i, MO_16, do_vbitrevi)
1876
+TRANS(vbitrevi_w, ALL, gvec_vv_i, MO_32, do_vbitrevi)
1877
+TRANS(vbitrevi_d, ALL, gvec_vv_i, MO_64, do_vbitrevi)
1878
+
1879
+TRANS(vfrstp_b, ALL, gen_vvv, gen_helper_vfrstp_b)
1880
+TRANS(vfrstp_h, ALL, gen_vvv, gen_helper_vfrstp_h)
1881
+TRANS(vfrstpi_b, ALL, gen_vv_i, gen_helper_vfrstpi_b)
1882
+TRANS(vfrstpi_h, ALL, gen_vv_i, gen_helper_vfrstpi_h)
1883
+
1884
+TRANS(vfadd_s, ALL, gen_vvv, gen_helper_vfadd_s)
1885
+TRANS(vfadd_d, ALL, gen_vvv, gen_helper_vfadd_d)
1886
+TRANS(vfsub_s, ALL, gen_vvv, gen_helper_vfsub_s)
1887
+TRANS(vfsub_d, ALL, gen_vvv, gen_helper_vfsub_d)
1888
+TRANS(vfmul_s, ALL, gen_vvv, gen_helper_vfmul_s)
1889
+TRANS(vfmul_d, ALL, gen_vvv, gen_helper_vfmul_d)
1890
+TRANS(vfdiv_s, ALL, gen_vvv, gen_helper_vfdiv_s)
1891
+TRANS(vfdiv_d, ALL, gen_vvv, gen_helper_vfdiv_d)
1892
+
1893
+TRANS(vfmadd_s, ALL, gen_vvvv, gen_helper_vfmadd_s)
1894
+TRANS(vfmadd_d, ALL, gen_vvvv, gen_helper_vfmadd_d)
1895
+TRANS(vfmsub_s, ALL, gen_vvvv, gen_helper_vfmsub_s)
1896
+TRANS(vfmsub_d, ALL, gen_vvvv, gen_helper_vfmsub_d)
1897
+TRANS(vfnmadd_s, ALL, gen_vvvv, gen_helper_vfnmadd_s)
1898
+TRANS(vfnmadd_d, ALL, gen_vvvv, gen_helper_vfnmadd_d)
1899
+TRANS(vfnmsub_s, ALL, gen_vvvv, gen_helper_vfnmsub_s)
1900
+TRANS(vfnmsub_d, ALL, gen_vvvv, gen_helper_vfnmsub_d)
1901
+
1902
+TRANS(vfmax_s, ALL, gen_vvv, gen_helper_vfmax_s)
1903
+TRANS(vfmax_d, ALL, gen_vvv, gen_helper_vfmax_d)
1904
+TRANS(vfmin_s, ALL, gen_vvv, gen_helper_vfmin_s)
1905
+TRANS(vfmin_d, ALL, gen_vvv, gen_helper_vfmin_d)
1906
+
1907
+TRANS(vfmaxa_s, ALL, gen_vvv, gen_helper_vfmaxa_s)
1908
+TRANS(vfmaxa_d, ALL, gen_vvv, gen_helper_vfmaxa_d)
1909
+TRANS(vfmina_s, ALL, gen_vvv, gen_helper_vfmina_s)
1910
+TRANS(vfmina_d, ALL, gen_vvv, gen_helper_vfmina_d)
1911
+
1912
+TRANS(vflogb_s, ALL, gen_vv, gen_helper_vflogb_s)
1913
+TRANS(vflogb_d, ALL, gen_vv, gen_helper_vflogb_d)
1914
+
1915
+TRANS(vfclass_s, ALL, gen_vv, gen_helper_vfclass_s)
1916
+TRANS(vfclass_d, ALL, gen_vv, gen_helper_vfclass_d)
1917
+
1918
+TRANS(vfsqrt_s, ALL, gen_vv, gen_helper_vfsqrt_s)
1919
+TRANS(vfsqrt_d, ALL, gen_vv, gen_helper_vfsqrt_d)
1920
+TRANS(vfrecip_s, ALL, gen_vv, gen_helper_vfrecip_s)
1921
+TRANS(vfrecip_d, ALL, gen_vv, gen_helper_vfrecip_d)
1922
+TRANS(vfrsqrt_s, ALL, gen_vv, gen_helper_vfrsqrt_s)
1923
+TRANS(vfrsqrt_d, ALL, gen_vv, gen_helper_vfrsqrt_d)
1924
+
1925
+TRANS(vfcvtl_s_h, ALL, gen_vv, gen_helper_vfcvtl_s_h)
1926
+TRANS(vfcvth_s_h, ALL, gen_vv, gen_helper_vfcvth_s_h)
1927
+TRANS(vfcvtl_d_s, ALL, gen_vv, gen_helper_vfcvtl_d_s)
1928
+TRANS(vfcvth_d_s, ALL, gen_vv, gen_helper_vfcvth_d_s)
1929
+TRANS(vfcvt_h_s, ALL, gen_vvv, gen_helper_vfcvt_h_s)
1930
+TRANS(vfcvt_s_d, ALL, gen_vvv, gen_helper_vfcvt_s_d)
1931
+
1932
+TRANS(vfrintrne_s, ALL, gen_vv, gen_helper_vfrintrne_s)
1933
+TRANS(vfrintrne_d, ALL, gen_vv, gen_helper_vfrintrne_d)
1934
+TRANS(vfrintrz_s, ALL, gen_vv, gen_helper_vfrintrz_s)
1935
+TRANS(vfrintrz_d, ALL, gen_vv, gen_helper_vfrintrz_d)
1936
+TRANS(vfrintrp_s, ALL, gen_vv, gen_helper_vfrintrp_s)
1937
+TRANS(vfrintrp_d, ALL, gen_vv, gen_helper_vfrintrp_d)
1938
+TRANS(vfrintrm_s, ALL, gen_vv, gen_helper_vfrintrm_s)
1939
+TRANS(vfrintrm_d, ALL, gen_vv, gen_helper_vfrintrm_d)
1940
+TRANS(vfrint_s, ALL, gen_vv, gen_helper_vfrint_s)
1941
+TRANS(vfrint_d, ALL, gen_vv, gen_helper_vfrint_d)
1942
+
1943
+TRANS(vftintrne_w_s, ALL, gen_vv, gen_helper_vftintrne_w_s)
1944
+TRANS(vftintrne_l_d, ALL, gen_vv, gen_helper_vftintrne_l_d)
1945
+TRANS(vftintrz_w_s, ALL, gen_vv, gen_helper_vftintrz_w_s)
1946
+TRANS(vftintrz_l_d, ALL, gen_vv, gen_helper_vftintrz_l_d)
1947
+TRANS(vftintrp_w_s, ALL, gen_vv, gen_helper_vftintrp_w_s)
1948
+TRANS(vftintrp_l_d, ALL, gen_vv, gen_helper_vftintrp_l_d)
1949
+TRANS(vftintrm_w_s, ALL, gen_vv, gen_helper_vftintrm_w_s)
1950
+TRANS(vftintrm_l_d, ALL, gen_vv, gen_helper_vftintrm_l_d)
1951
+TRANS(vftint_w_s, ALL, gen_vv, gen_helper_vftint_w_s)
1952
+TRANS(vftint_l_d, ALL, gen_vv, gen_helper_vftint_l_d)
1953
+TRANS(vftintrz_wu_s, ALL, gen_vv, gen_helper_vftintrz_wu_s)
1954
+TRANS(vftintrz_lu_d, ALL, gen_vv, gen_helper_vftintrz_lu_d)
1955
+TRANS(vftint_wu_s, ALL, gen_vv, gen_helper_vftint_wu_s)
1956
+TRANS(vftint_lu_d, ALL, gen_vv, gen_helper_vftint_lu_d)
1957
+TRANS(vftintrne_w_d, ALL, gen_vvv, gen_helper_vftintrne_w_d)
1958
+TRANS(vftintrz_w_d, ALL, gen_vvv, gen_helper_vftintrz_w_d)
1959
+TRANS(vftintrp_w_d, ALL, gen_vvv, gen_helper_vftintrp_w_d)
1960
+TRANS(vftintrm_w_d, ALL, gen_vvv, gen_helper_vftintrm_w_d)
1961
+TRANS(vftint_w_d, ALL, gen_vvv, gen_helper_vftint_w_d)
1962
+TRANS(vftintrnel_l_s, ALL, gen_vv, gen_helper_vftintrnel_l_s)
1963
+TRANS(vftintrneh_l_s, ALL, gen_vv, gen_helper_vftintrneh_l_s)
1964
+TRANS(vftintrzl_l_s, ALL, gen_vv, gen_helper_vftintrzl_l_s)
1965
+TRANS(vftintrzh_l_s, ALL, gen_vv, gen_helper_vftintrzh_l_s)
1966
+TRANS(vftintrpl_l_s, ALL, gen_vv, gen_helper_vftintrpl_l_s)
1967
+TRANS(vftintrph_l_s, ALL, gen_vv, gen_helper_vftintrph_l_s)
1968
+TRANS(vftintrml_l_s, ALL, gen_vv, gen_helper_vftintrml_l_s)
1969
+TRANS(vftintrmh_l_s, ALL, gen_vv, gen_helper_vftintrmh_l_s)
1970
+TRANS(vftintl_l_s, ALL, gen_vv, gen_helper_vftintl_l_s)
1971
+TRANS(vftinth_l_s, ALL, gen_vv, gen_helper_vftinth_l_s)
1972
+
1973
+TRANS(vffint_s_w, ALL, gen_vv, gen_helper_vffint_s_w)
1974
+TRANS(vffint_d_l, ALL, gen_vv, gen_helper_vffint_d_l)
1975
+TRANS(vffint_s_wu, ALL, gen_vv, gen_helper_vffint_s_wu)
1976
+TRANS(vffint_d_lu, ALL, gen_vv, gen_helper_vffint_d_lu)
1977
+TRANS(vffintl_d_w, ALL, gen_vv, gen_helper_vffintl_d_w)
1978
+TRANS(vffinth_d_w, ALL, gen_vv, gen_helper_vffinth_d_w)
1979
+TRANS(vffint_s_l, ALL, gen_vvv, gen_helper_vffint_s_l)
1980
1981
static bool do_cmp(DisasContext *ctx, arg_vvv *a, MemOp mop, TCGCond cond)
1982
{
1983
@@ -XXX,XX +XXX,XX @@ static bool do_## NAME ##_u(DisasContext *ctx, arg_vv_i *a, MemOp mop) \
1984
DO_CMPI_U(vslei)
1985
DO_CMPI_U(vslti)
1986
1987
-TRANS(vseq_b, do_cmp, MO_8, TCG_COND_EQ)
1988
-TRANS(vseq_h, do_cmp, MO_16, TCG_COND_EQ)
1989
-TRANS(vseq_w, do_cmp, MO_32, TCG_COND_EQ)
1990
-TRANS(vseq_d, do_cmp, MO_64, TCG_COND_EQ)
1991
-TRANS(vseqi_b, do_vseqi_s, MO_8)
1992
-TRANS(vseqi_h, do_vseqi_s, MO_16)
1993
-TRANS(vseqi_w, do_vseqi_s, MO_32)
1994
-TRANS(vseqi_d, do_vseqi_s, MO_64)
1995
-
1996
-TRANS(vsle_b, do_cmp, MO_8, TCG_COND_LE)
1997
-TRANS(vsle_h, do_cmp, MO_16, TCG_COND_LE)
1998
-TRANS(vsle_w, do_cmp, MO_32, TCG_COND_LE)
1999
-TRANS(vsle_d, do_cmp, MO_64, TCG_COND_LE)
2000
-TRANS(vslei_b, do_vslei_s, MO_8)
2001
-TRANS(vslei_h, do_vslei_s, MO_16)
2002
-TRANS(vslei_w, do_vslei_s, MO_32)
2003
-TRANS(vslei_d, do_vslei_s, MO_64)
2004
-TRANS(vsle_bu, do_cmp, MO_8, TCG_COND_LEU)
2005
-TRANS(vsle_hu, do_cmp, MO_16, TCG_COND_LEU)
2006
-TRANS(vsle_wu, do_cmp, MO_32, TCG_COND_LEU)
2007
-TRANS(vsle_du, do_cmp, MO_64, TCG_COND_LEU)
2008
-TRANS(vslei_bu, do_vslei_u, MO_8)
2009
-TRANS(vslei_hu, do_vslei_u, MO_16)
2010
-TRANS(vslei_wu, do_vslei_u, MO_32)
2011
-TRANS(vslei_du, do_vslei_u, MO_64)
2012
-
2013
-TRANS(vslt_b, do_cmp, MO_8, TCG_COND_LT)
2014
-TRANS(vslt_h, do_cmp, MO_16, TCG_COND_LT)
2015
-TRANS(vslt_w, do_cmp, MO_32, TCG_COND_LT)
2016
-TRANS(vslt_d, do_cmp, MO_64, TCG_COND_LT)
2017
-TRANS(vslti_b, do_vslti_s, MO_8)
2018
-TRANS(vslti_h, do_vslti_s, MO_16)
2019
-TRANS(vslti_w, do_vslti_s, MO_32)
2020
-TRANS(vslti_d, do_vslti_s, MO_64)
2021
-TRANS(vslt_bu, do_cmp, MO_8, TCG_COND_LTU)
2022
-TRANS(vslt_hu, do_cmp, MO_16, TCG_COND_LTU)
2023
-TRANS(vslt_wu, do_cmp, MO_32, TCG_COND_LTU)
2024
-TRANS(vslt_du, do_cmp, MO_64, TCG_COND_LTU)
2025
-TRANS(vslti_bu, do_vslti_u, MO_8)
2026
-TRANS(vslti_hu, do_vslti_u, MO_16)
2027
-TRANS(vslti_wu, do_vslti_u, MO_32)
2028
-TRANS(vslti_du, do_vslti_u, MO_64)
2029
+TRANS(vseq_b, ALL, do_cmp, MO_8, TCG_COND_EQ)
2030
+TRANS(vseq_h, ALL, do_cmp, MO_16, TCG_COND_EQ)
2031
+TRANS(vseq_w, ALL, do_cmp, MO_32, TCG_COND_EQ)
2032
+TRANS(vseq_d, ALL, do_cmp, MO_64, TCG_COND_EQ)
2033
+TRANS(vseqi_b, ALL, do_vseqi_s, MO_8)
2034
+TRANS(vseqi_h, ALL, do_vseqi_s, MO_16)
2035
+TRANS(vseqi_w, ALL, do_vseqi_s, MO_32)
2036
+TRANS(vseqi_d, ALL, do_vseqi_s, MO_64)
2037
+
2038
+TRANS(vsle_b, ALL, do_cmp, MO_8, TCG_COND_LE)
2039
+TRANS(vsle_h, ALL, do_cmp, MO_16, TCG_COND_LE)
2040
+TRANS(vsle_w, ALL, do_cmp, MO_32, TCG_COND_LE)
2041
+TRANS(vsle_d, ALL, do_cmp, MO_64, TCG_COND_LE)
2042
+TRANS(vslei_b, ALL, do_vslei_s, MO_8)
2043
+TRANS(vslei_h, ALL, do_vslei_s, MO_16)
2044
+TRANS(vslei_w, ALL, do_vslei_s, MO_32)
2045
+TRANS(vslei_d, ALL, do_vslei_s, MO_64)
2046
+TRANS(vsle_bu, ALL, do_cmp, MO_8, TCG_COND_LEU)
2047
+TRANS(vsle_hu, ALL, do_cmp, MO_16, TCG_COND_LEU)
2048
+TRANS(vsle_wu, ALL, do_cmp, MO_32, TCG_COND_LEU)
2049
+TRANS(vsle_du, ALL, do_cmp, MO_64, TCG_COND_LEU)
2050
+TRANS(vslei_bu, ALL, do_vslei_u, MO_8)
2051
+TRANS(vslei_hu, ALL, do_vslei_u, MO_16)
2052
+TRANS(vslei_wu, ALL, do_vslei_u, MO_32)
2053
+TRANS(vslei_du, ALL, do_vslei_u, MO_64)
2054
+
2055
+TRANS(vslt_b, ALL, do_cmp, MO_8, TCG_COND_LT)
2056
+TRANS(vslt_h, ALL, do_cmp, MO_16, TCG_COND_LT)
2057
+TRANS(vslt_w, ALL, do_cmp, MO_32, TCG_COND_LT)
2058
+TRANS(vslt_d, ALL, do_cmp, MO_64, TCG_COND_LT)
2059
+TRANS(vslti_b, ALL, do_vslti_s, MO_8)
2060
+TRANS(vslti_h, ALL, do_vslti_s, MO_16)
2061
+TRANS(vslti_w, ALL, do_vslti_s, MO_32)
2062
+TRANS(vslti_d, ALL, do_vslti_s, MO_64)
2063
+TRANS(vslt_bu, ALL, do_cmp, MO_8, TCG_COND_LTU)
2064
+TRANS(vslt_hu, ALL, do_cmp, MO_16, TCG_COND_LTU)
2065
+TRANS(vslt_wu, ALL, do_cmp, MO_32, TCG_COND_LTU)
2066
+TRANS(vslt_du, ALL, do_cmp, MO_64, TCG_COND_LTU)
2067
+TRANS(vslti_bu, ALL, do_vslti_u, MO_8)
2068
+TRANS(vslti_hu, ALL, do_vslti_u, MO_16)
2069
+TRANS(vslti_wu, ALL, do_vslti_u, MO_32)
2070
+TRANS(vslti_du, ALL, do_vslti_u, MO_64)
2071
2072
static bool trans_vfcmp_cond_s(DisasContext *ctx, arg_vvv_fcond *a)
2073
{
2074
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_cv *a) \
2075
VSET(vseteqz_v, TCG_COND_EQ)
2076
VSET(vsetnez_v, TCG_COND_NE)
2077
2078
-TRANS(vsetanyeqz_b, gen_cv, gen_helper_vsetanyeqz_b)
2079
-TRANS(vsetanyeqz_h, gen_cv, gen_helper_vsetanyeqz_h)
2080
-TRANS(vsetanyeqz_w, gen_cv, gen_helper_vsetanyeqz_w)
2081
-TRANS(vsetanyeqz_d, gen_cv, gen_helper_vsetanyeqz_d)
2082
-TRANS(vsetallnez_b, gen_cv, gen_helper_vsetallnez_b)
2083
-TRANS(vsetallnez_h, gen_cv, gen_helper_vsetallnez_h)
2084
-TRANS(vsetallnez_w, gen_cv, gen_helper_vsetallnez_w)
2085
-TRANS(vsetallnez_d, gen_cv, gen_helper_vsetallnez_d)
2086
+TRANS(vsetanyeqz_b, ALL, gen_cv, gen_helper_vsetanyeqz_b)
2087
+TRANS(vsetanyeqz_h, ALL, gen_cv, gen_helper_vsetanyeqz_h)
2088
+TRANS(vsetanyeqz_w, ALL, gen_cv, gen_helper_vsetanyeqz_w)
2089
+TRANS(vsetanyeqz_d, ALL, gen_cv, gen_helper_vsetanyeqz_d)
2090
+TRANS(vsetallnez_b, ALL, gen_cv, gen_helper_vsetallnez_b)
2091
+TRANS(vsetallnez_h, ALL, gen_cv, gen_helper_vsetallnez_h)
2092
+TRANS(vsetallnez_w, ALL, gen_cv, gen_helper_vsetallnez_w)
2093
+TRANS(vsetallnez_d, ALL, gen_cv, gen_helper_vsetallnez_d)
2094
2095
static bool trans_vinsgr2vr_b(DisasContext *ctx, arg_vr_i *a)
2096
{
2097
@@ -XXX,XX +XXX,XX @@ static bool gvec_dup(DisasContext *ctx, arg_vr *a, MemOp mop)
2098
return true;
2099
}
2100
2101
-TRANS(vreplgr2vr_b, gvec_dup, MO_8)
2102
-TRANS(vreplgr2vr_h, gvec_dup, MO_16)
2103
-TRANS(vreplgr2vr_w, gvec_dup, MO_32)
2104
-TRANS(vreplgr2vr_d, gvec_dup, MO_64)
2105
+TRANS(vreplgr2vr_b, ALL, gvec_dup, MO_8)
2106
+TRANS(vreplgr2vr_h, ALL, gvec_dup, MO_16)
2107
+TRANS(vreplgr2vr_w, ALL, gvec_dup, MO_32)
2108
+TRANS(vreplgr2vr_d, ALL, gvec_dup, MO_64)
2109
2110
static bool trans_vreplvei_b(DisasContext *ctx, arg_vv_i *a)
2111
{
2112
@@ -XXX,XX +XXX,XX @@ static bool gen_vreplve(DisasContext *ctx, arg_vvr *a, int vece, int bit,
2113
return true;
2114
}
2115
2116
-TRANS(vreplve_b, gen_vreplve, MO_8, 8, tcg_gen_ld8u_i64)
2117
-TRANS(vreplve_h, gen_vreplve, MO_16, 16, tcg_gen_ld16u_i64)
2118
-TRANS(vreplve_w, gen_vreplve, MO_32, 32, tcg_gen_ld32u_i64)
2119
-TRANS(vreplve_d, gen_vreplve, MO_64, 64, tcg_gen_ld_i64)
2120
+TRANS(vreplve_b, ALL, gen_vreplve, MO_8, 8, tcg_gen_ld8u_i64)
2121
+TRANS(vreplve_h, ALL, gen_vreplve, MO_16, 16, tcg_gen_ld16u_i64)
2122
+TRANS(vreplve_w, ALL, gen_vreplve, MO_32, 32, tcg_gen_ld32u_i64)
2123
+TRANS(vreplve_d, ALL, gen_vreplve, MO_64, 64, tcg_gen_ld_i64)
2124
2125
static bool trans_vbsll_v(DisasContext *ctx, arg_vv_i *a)
2126
{
2127
@@ -XXX,XX +XXX,XX @@ static bool trans_vbsrl_v(DisasContext *ctx, arg_vv_i *a)
2128
return true;
2129
}
2130
2131
-TRANS(vpackev_b, gen_vvv, gen_helper_vpackev_b)
2132
-TRANS(vpackev_h, gen_vvv, gen_helper_vpackev_h)
2133
-TRANS(vpackev_w, gen_vvv, gen_helper_vpackev_w)
2134
-TRANS(vpackev_d, gen_vvv, gen_helper_vpackev_d)
2135
-TRANS(vpackod_b, gen_vvv, gen_helper_vpackod_b)
2136
-TRANS(vpackod_h, gen_vvv, gen_helper_vpackod_h)
2137
-TRANS(vpackod_w, gen_vvv, gen_helper_vpackod_w)
2138
-TRANS(vpackod_d, gen_vvv, gen_helper_vpackod_d)
2139
-
2140
-TRANS(vpickev_b, gen_vvv, gen_helper_vpickev_b)
2141
-TRANS(vpickev_h, gen_vvv, gen_helper_vpickev_h)
2142
-TRANS(vpickev_w, gen_vvv, gen_helper_vpickev_w)
2143
-TRANS(vpickev_d, gen_vvv, gen_helper_vpickev_d)
2144
-TRANS(vpickod_b, gen_vvv, gen_helper_vpickod_b)
2145
-TRANS(vpickod_h, gen_vvv, gen_helper_vpickod_h)
2146
-TRANS(vpickod_w, gen_vvv, gen_helper_vpickod_w)
2147
-TRANS(vpickod_d, gen_vvv, gen_helper_vpickod_d)
2148
-
2149
-TRANS(vilvl_b, gen_vvv, gen_helper_vilvl_b)
2150
-TRANS(vilvl_h, gen_vvv, gen_helper_vilvl_h)
2151
-TRANS(vilvl_w, gen_vvv, gen_helper_vilvl_w)
2152
-TRANS(vilvl_d, gen_vvv, gen_helper_vilvl_d)
2153
-TRANS(vilvh_b, gen_vvv, gen_helper_vilvh_b)
2154
-TRANS(vilvh_h, gen_vvv, gen_helper_vilvh_h)
2155
-TRANS(vilvh_w, gen_vvv, gen_helper_vilvh_w)
2156
-TRANS(vilvh_d, gen_vvv, gen_helper_vilvh_d)
2157
-
2158
-TRANS(vshuf_b, gen_vvvv, gen_helper_vshuf_b)
2159
-TRANS(vshuf_h, gen_vvv, gen_helper_vshuf_h)
2160
-TRANS(vshuf_w, gen_vvv, gen_helper_vshuf_w)
2161
-TRANS(vshuf_d, gen_vvv, gen_helper_vshuf_d)
2162
-TRANS(vshuf4i_b, gen_vv_i, gen_helper_vshuf4i_b)
2163
-TRANS(vshuf4i_h, gen_vv_i, gen_helper_vshuf4i_h)
2164
-TRANS(vshuf4i_w, gen_vv_i, gen_helper_vshuf4i_w)
2165
-TRANS(vshuf4i_d, gen_vv_i, gen_helper_vshuf4i_d)
2166
-
2167
-TRANS(vpermi_w, gen_vv_i, gen_helper_vpermi_w)
2168
-
2169
-TRANS(vextrins_b, gen_vv_i, gen_helper_vextrins_b)
2170
-TRANS(vextrins_h, gen_vv_i, gen_helper_vextrins_h)
2171
-TRANS(vextrins_w, gen_vv_i, gen_helper_vextrins_w)
2172
-TRANS(vextrins_d, gen_vv_i, gen_helper_vextrins_d)
2173
+TRANS(vpackev_b, ALL, gen_vvv, gen_helper_vpackev_b)
2174
+TRANS(vpackev_h, ALL, gen_vvv, gen_helper_vpackev_h)
2175
+TRANS(vpackev_w, ALL, gen_vvv, gen_helper_vpackev_w)
2176
+TRANS(vpackev_d, ALL, gen_vvv, gen_helper_vpackev_d)
2177
+TRANS(vpackod_b, ALL, gen_vvv, gen_helper_vpackod_b)
2178
+TRANS(vpackod_h, ALL, gen_vvv, gen_helper_vpackod_h)
2179
+TRANS(vpackod_w, ALL, gen_vvv, gen_helper_vpackod_w)
2180
+TRANS(vpackod_d, ALL, gen_vvv, gen_helper_vpackod_d)
2181
+
2182
+TRANS(vpickev_b, ALL, gen_vvv, gen_helper_vpickev_b)
2183
+TRANS(vpickev_h, ALL, gen_vvv, gen_helper_vpickev_h)
2184
+TRANS(vpickev_w, ALL, gen_vvv, gen_helper_vpickev_w)
2185
+TRANS(vpickev_d, ALL, gen_vvv, gen_helper_vpickev_d)
2186
+TRANS(vpickod_b, ALL, gen_vvv, gen_helper_vpickod_b)
2187
+TRANS(vpickod_h, ALL, gen_vvv, gen_helper_vpickod_h)
2188
+TRANS(vpickod_w, ALL, gen_vvv, gen_helper_vpickod_w)
2189
+TRANS(vpickod_d, ALL, gen_vvv, gen_helper_vpickod_d)
2190
+
2191
+TRANS(vilvl_b, ALL, gen_vvv, gen_helper_vilvl_b)
2192
+TRANS(vilvl_h, ALL, gen_vvv, gen_helper_vilvl_h)
2193
+TRANS(vilvl_w, ALL, gen_vvv, gen_helper_vilvl_w)
2194
+TRANS(vilvl_d, ALL, gen_vvv, gen_helper_vilvl_d)
2195
+TRANS(vilvh_b, ALL, gen_vvv, gen_helper_vilvh_b)
2196
+TRANS(vilvh_h, ALL, gen_vvv, gen_helper_vilvh_h)
2197
+TRANS(vilvh_w, ALL, gen_vvv, gen_helper_vilvh_w)
2198
+TRANS(vilvh_d, ALL, gen_vvv, gen_helper_vilvh_d)
2199
+
2200
+TRANS(vshuf_b, ALL, gen_vvvv, gen_helper_vshuf_b)
2201
+TRANS(vshuf_h, ALL, gen_vvv, gen_helper_vshuf_h)
2202
+TRANS(vshuf_w, ALL, gen_vvv, gen_helper_vshuf_w)
2203
+TRANS(vshuf_d, ALL, gen_vvv, gen_helper_vshuf_d)
2204
+TRANS(vshuf4i_b, ALL, gen_vv_i, gen_helper_vshuf4i_b)
2205
+TRANS(vshuf4i_h, ALL, gen_vv_i, gen_helper_vshuf4i_h)
2206
+TRANS(vshuf4i_w, ALL, gen_vv_i, gen_helper_vshuf4i_w)
2207
+TRANS(vshuf4i_d, ALL, gen_vv_i, gen_helper_vshuf4i_d)
2208
+
2209
+TRANS(vpermi_w, ALL, gen_vv_i, gen_helper_vpermi_w)
2210
+
2211
+TRANS(vextrins_b, ALL, gen_vv_i, gen_helper_vextrins_b)
2212
+TRANS(vextrins_h, ALL, gen_vv_i, gen_helper_vextrins_h)
2213
+TRANS(vextrins_w, ALL, gen_vv_i, gen_helper_vextrins_w)
2214
+TRANS(vextrins_d, ALL, gen_vv_i, gen_helper_vextrins_d)
2215
2216
static bool trans_vld(DisasContext *ctx, arg_vr_i *a)
2217
{
2218
diff --git a/target/loongarch/insn_trans/trans_memory.c.inc b/target/loongarch/insn_trans/trans_memory.c.inc
2219
index XXXXXXX..XXXXXXX 100644
2220
--- a/target/loongarch/insn_trans/trans_memory.c.inc
2221
+++ b/target/loongarch/insn_trans/trans_memory.c.inc
2222
@@ -XXX,XX +XXX,XX @@ static bool gen_stptr(DisasContext *ctx, arg_rr_i *a, MemOp mop)
2223
return true;
2224
}
2225
2226
-TRANS(ld_b, gen_load, MO_SB)
2227
-TRANS(ld_h, gen_load, MO_TESW)
2228
-TRANS(ld_w, gen_load, MO_TESL)
2229
-TRANS(ld_d, gen_load, MO_TEUQ)
2230
-TRANS(st_b, gen_store, MO_UB)
2231
-TRANS(st_h, gen_store, MO_TEUW)
2232
-TRANS(st_w, gen_store, MO_TEUL)
2233
-TRANS(st_d, gen_store, MO_TEUQ)
2234
-TRANS(ld_bu, gen_load, MO_UB)
2235
-TRANS(ld_hu, gen_load, MO_TEUW)
2236
-TRANS(ld_wu, gen_load, MO_TEUL)
2237
-TRANS(ldx_b, gen_loadx, MO_SB)
2238
-TRANS(ldx_h, gen_loadx, MO_TESW)
2239
-TRANS(ldx_w, gen_loadx, MO_TESL)
2240
-TRANS(ldx_d, gen_loadx, MO_TEUQ)
2241
-TRANS(stx_b, gen_storex, MO_UB)
2242
-TRANS(stx_h, gen_storex, MO_TEUW)
2243
-TRANS(stx_w, gen_storex, MO_TEUL)
2244
-TRANS(stx_d, gen_storex, MO_TEUQ)
2245
-TRANS(ldx_bu, gen_loadx, MO_UB)
2246
-TRANS(ldx_hu, gen_loadx, MO_TEUW)
2247
-TRANS(ldx_wu, gen_loadx, MO_TEUL)
2248
-TRANS(ldptr_w, gen_ldptr, MO_TESL)
2249
-TRANS(stptr_w, gen_stptr, MO_TEUL)
2250
-TRANS(ldptr_d, gen_ldptr, MO_TEUQ)
2251
-TRANS(stptr_d, gen_stptr, MO_TEUQ)
2252
-TRANS(ldgt_b, gen_load_gt, MO_SB)
2253
-TRANS(ldgt_h, gen_load_gt, MO_TESW)
2254
-TRANS(ldgt_w, gen_load_gt, MO_TESL)
2255
-TRANS(ldgt_d, gen_load_gt, MO_TEUQ)
2256
-TRANS(ldle_b, gen_load_le, MO_SB)
2257
-TRANS(ldle_h, gen_load_le, MO_TESW)
2258
-TRANS(ldle_w, gen_load_le, MO_TESL)
2259
-TRANS(ldle_d, gen_load_le, MO_TEUQ)
2260
-TRANS(stgt_b, gen_store_gt, MO_UB)
2261
-TRANS(stgt_h, gen_store_gt, MO_TEUW)
2262
-TRANS(stgt_w, gen_store_gt, MO_TEUL)
2263
-TRANS(stgt_d, gen_store_gt, MO_TEUQ)
2264
-TRANS(stle_b, gen_store_le, MO_UB)
2265
-TRANS(stle_h, gen_store_le, MO_TEUW)
2266
-TRANS(stle_w, gen_store_le, MO_TEUL)
2267
-TRANS(stle_d, gen_store_le, MO_TEUQ)
2268
+TRANS(ld_b, ALL, gen_load, MO_SB)
2269
+TRANS(ld_h, ALL, gen_load, MO_TESW)
2270
+TRANS(ld_w, ALL, gen_load, MO_TESL)
2271
+TRANS(ld_d, ALL, gen_load, MO_TEUQ)
2272
+TRANS(st_b, ALL, gen_store, MO_UB)
2273
+TRANS(st_h, ALL, gen_store, MO_TEUW)
2274
+TRANS(st_w, ALL, gen_store, MO_TEUL)
2275
+TRANS(st_d, ALL, gen_store, MO_TEUQ)
2276
+TRANS(ld_bu, ALL, gen_load, MO_UB)
2277
+TRANS(ld_hu, ALL, gen_load, MO_TEUW)
2278
+TRANS(ld_wu, ALL, gen_load, MO_TEUL)
2279
+TRANS(ldx_b, ALL, gen_loadx, MO_SB)
2280
+TRANS(ldx_h, ALL, gen_loadx, MO_TESW)
2281
+TRANS(ldx_w, ALL, gen_loadx, MO_TESL)
2282
+TRANS(ldx_d, ALL, gen_loadx, MO_TEUQ)
2283
+TRANS(stx_b, ALL, gen_storex, MO_UB)
2284
+TRANS(stx_h, ALL, gen_storex, MO_TEUW)
2285
+TRANS(stx_w, ALL, gen_storex, MO_TEUL)
2286
+TRANS(stx_d, ALL, gen_storex, MO_TEUQ)
2287
+TRANS(ldx_bu, ALL, gen_loadx, MO_UB)
2288
+TRANS(ldx_hu, ALL, gen_loadx, MO_TEUW)
2289
+TRANS(ldx_wu, ALL, gen_loadx, MO_TEUL)
2290
+TRANS(ldptr_w, ALL, gen_ldptr, MO_TESL)
2291
+TRANS(stptr_w, ALL, gen_stptr, MO_TEUL)
2292
+TRANS(ldptr_d, ALL, gen_ldptr, MO_TEUQ)
2293
+TRANS(stptr_d, ALL, gen_stptr, MO_TEUQ)
2294
+TRANS(ldgt_b, ALL, gen_load_gt, MO_SB)
2295
+TRANS(ldgt_h, ALL, gen_load_gt, MO_TESW)
2296
+TRANS(ldgt_w, ALL, gen_load_gt, MO_TESL)
2297
+TRANS(ldgt_d, ALL, gen_load_gt, MO_TEUQ)
2298
+TRANS(ldle_b, ALL, gen_load_le, MO_SB)
2299
+TRANS(ldle_h, ALL, gen_load_le, MO_TESW)
2300
+TRANS(ldle_w, ALL, gen_load_le, MO_TESL)
2301
+TRANS(ldle_d, ALL, gen_load_le, MO_TEUQ)
2302
+TRANS(stgt_b, ALL, gen_store_gt, MO_UB)
2303
+TRANS(stgt_h, ALL, gen_store_gt, MO_TEUW)
2304
+TRANS(stgt_w, ALL, gen_store_gt, MO_TEUL)
2305
+TRANS(stgt_d, ALL, gen_store_gt, MO_TEUQ)
2306
+TRANS(stle_b, ALL, gen_store_le, MO_UB)
2307
+TRANS(stle_h, ALL, gen_store_le, MO_TEUW)
2308
+TRANS(stle_w, ALL, gen_store_le, MO_TEUL)
2309
+TRANS(stle_d, ALL, gen_store_le, MO_TEUQ)
2310
diff --git a/target/loongarch/insn_trans/trans_privileged.c.inc b/target/loongarch/insn_trans/trans_privileged.c.inc
2311
index XXXXXXX..XXXXXXX 100644
2312
--- a/target/loongarch/insn_trans/trans_privileged.c.inc
2313
+++ b/target/loongarch/insn_trans/trans_privileged.c.inc
2314
@@ -XXX,XX +XXX,XX @@ static bool gen_iocsrwr(DisasContext *ctx, arg_rr *a,
2315
return true;
2316
}
2317
2318
-TRANS(iocsrrd_b, gen_iocsrrd, gen_helper_iocsrrd_b)
2319
-TRANS(iocsrrd_h, gen_iocsrrd, gen_helper_iocsrrd_h)
2320
-TRANS(iocsrrd_w, gen_iocsrrd, gen_helper_iocsrrd_w)
2321
-TRANS(iocsrrd_d, gen_iocsrrd, gen_helper_iocsrrd_d)
2322
-TRANS(iocsrwr_b, gen_iocsrwr, gen_helper_iocsrwr_b)
2323
-TRANS(iocsrwr_h, gen_iocsrwr, gen_helper_iocsrwr_h)
2324
-TRANS(iocsrwr_w, gen_iocsrwr, gen_helper_iocsrwr_w)
2325
-TRANS(iocsrwr_d, gen_iocsrwr, gen_helper_iocsrwr_d)
2326
+TRANS(iocsrrd_b, ALL, gen_iocsrrd, gen_helper_iocsrrd_b)
2327
+TRANS(iocsrrd_h, ALL, gen_iocsrrd, gen_helper_iocsrrd_h)
2328
+TRANS(iocsrrd_w, ALL, gen_iocsrrd, gen_helper_iocsrrd_w)
2329
+TRANS(iocsrrd_d, ALL, gen_iocsrrd, gen_helper_iocsrrd_d)
2330
+TRANS(iocsrwr_b, ALL, gen_iocsrwr, gen_helper_iocsrwr_b)
2331
+TRANS(iocsrwr_h, ALL, gen_iocsrwr, gen_helper_iocsrwr_h)
2332
+TRANS(iocsrwr_w, ALL, gen_iocsrwr, gen_helper_iocsrwr_w)
2333
+TRANS(iocsrwr_d, ALL, gen_iocsrwr, gen_helper_iocsrwr_d)
2334
2335
static void check_mmu_idx(DisasContext *ctx)
2336
{
2337
diff --git a/target/loongarch/insn_trans/trans_shift.c.inc b/target/loongarch/insn_trans/trans_shift.c.inc
2338
index XXXXXXX..XXXXXXX 100644
2339
--- a/target/loongarch/insn_trans/trans_shift.c.inc
2340
+++ b/target/loongarch/insn_trans/trans_shift.c.inc
2341
@@ -XXX,XX +XXX,XX @@ static bool trans_srai_w(DisasContext *ctx, arg_srai_w *a)
2342
return true;
2343
}
2344
2345
-TRANS(sll_w, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_sll_w)
2346
-TRANS(srl_w, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_srl_w)
2347
-TRANS(sra_w, gen_rrr, EXT_SIGN, EXT_NONE, EXT_SIGN, gen_sra_w)
2348
-TRANS(sll_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sll_d)
2349
-TRANS(srl_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_srl_d)
2350
-TRANS(sra_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sra_d)
2351
-TRANS(rotr_w, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_rotr_w)
2352
-TRANS(rotr_d, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rotr_d)
2353
-TRANS(slli_w, gen_rri_c, EXT_NONE, EXT_SIGN, tcg_gen_shli_tl)
2354
-TRANS(slli_d, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shli_tl)
2355
-TRANS(srli_w, gen_rri_c, EXT_ZERO, EXT_SIGN, tcg_gen_shri_tl)
2356
-TRANS(srli_d, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shri_tl)
2357
-TRANS(srai_d, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_sari_tl)
2358
-TRANS(rotri_w, gen_rri_v, EXT_NONE, EXT_NONE, gen_rotr_w)
2359
-TRANS(rotri_d, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_rotri_tl)
2360
+TRANS(sll_w, ALL, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_sll_w)
2361
+TRANS(srl_w, ALL, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_srl_w)
2362
+TRANS(sra_w, ALL, gen_rrr, EXT_SIGN, EXT_NONE, EXT_SIGN, gen_sra_w)
2363
+TRANS(sll_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sll_d)
2364
+TRANS(srl_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_srl_d)
2365
+TRANS(sra_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sra_d)
2366
+TRANS(rotr_w, ALL, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_rotr_w)
2367
+TRANS(rotr_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rotr_d)
2368
+TRANS(slli_w, ALL, gen_rri_c, EXT_NONE, EXT_SIGN, tcg_gen_shli_tl)
2369
+TRANS(slli_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shli_tl)
2370
+TRANS(srli_w, ALL, gen_rri_c, EXT_ZERO, EXT_SIGN, tcg_gen_shri_tl)
2371
+TRANS(srli_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shri_tl)
2372
+TRANS(srai_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_sari_tl)
2373
+TRANS(rotri_w, ALL, gen_rri_v, EXT_NONE, EXT_NONE, gen_rotr_w)
2374
+TRANS(rotri_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_rotri_tl)
2375
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
2376
index XXXXXXX..XXXXXXX 100644
2377
--- a/target/loongarch/translate.h
2378
+++ b/target/loongarch/translate.h
2379
@@ -XXX,XX +XXX,XX @@
2380
2381
#include "exec/translator.h"
2382
2383
-#define TRANS(NAME, FUNC, ...) \
2384
+#define TRANS(NAME, AVAIL, FUNC, ...) \
2385
static bool trans_##NAME(DisasContext *ctx, arg_##NAME * a) \
2386
- { return FUNC(ctx, a, __VA_ARGS__); }
2387
+ { return avail_##AVAIL(ctx) && FUNC(ctx, a, __VA_ARGS__); }
2388
+
2389
+#define avail_ALL(C) true
2390
2391
/*
2392
* If an operation is being performed on less than TARGET_LONG_BITS,
2393
--
2394
2.39.1
2395
2396
diff view generated by jsdifflib
New patch
1
The la32 instructions listed in Table 2 at
2
https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#overview-of-basic-integer-instructions
1
3
4
Co-authored-by: Jiajie Chen <c@jia.je>
5
Signed-off-by: Song Gao <gaosong@loongson.cn>
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
7
Message-ID: <20230822032724.1353391-9-gaosong@loongson.cn>
8
Message-Id: <20230822071959.35620-3-philmd@linaro.org>
9
---
10
target/loongarch/insn_trans/trans_arith.c.inc | 42 ++++++----
11
.../loongarch/insn_trans/trans_atomic.c.inc | 76 +++++++++----------
12
target/loongarch/insn_trans/trans_bit.c.inc | 28 +++----
13
.../loongarch/insn_trans/trans_branch.c.inc | 4 +-
14
target/loongarch/insn_trans/trans_extra.c.inc | 24 ++++--
15
target/loongarch/insn_trans/trans_fmov.c.inc | 4 +-
16
.../loongarch/insn_trans/trans_memory.c.inc | 68 ++++++++---------
17
target/loongarch/insn_trans/trans_shift.c.inc | 24 +++---
18
target/loongarch/translate.c | 2 +
19
target/loongarch/translate.h | 3 +
20
10 files changed, 152 insertions(+), 123 deletions(-)
21
22
diff --git a/target/loongarch/insn_trans/trans_arith.c.inc b/target/loongarch/insn_trans/trans_arith.c.inc
23
index XXXXXXX..XXXXXXX 100644
24
--- a/target/loongarch/insn_trans/trans_arith.c.inc
25
+++ b/target/loongarch/insn_trans/trans_arith.c.inc
26
@@ -XXX,XX +XXX,XX @@ static bool trans_lu32i_d(DisasContext *ctx, arg_lu32i_d *a)
27
TCGv src1 = gpr_src(ctx, a->rd, EXT_NONE);
28
TCGv src2 = tcg_constant_tl(a->imm);
29
30
+ if (!avail_64(ctx)) {
31
+ return false;
32
+ }
33
+
34
tcg_gen_deposit_tl(dest, src1, src2, 32, 32);
35
gen_set_gpr(a->rd, dest, EXT_NONE);
36
37
@@ -XXX,XX +XXX,XX @@ static bool trans_lu52i_d(DisasContext *ctx, arg_lu52i_d *a)
38
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
39
TCGv src2 = tcg_constant_tl(a->imm);
40
41
+ if (!avail_64(ctx)) {
42
+ return false;
43
+ }
44
+
45
tcg_gen_deposit_tl(dest, src1, src2, 52, 12);
46
gen_set_gpr(a->rd, dest, EXT_NONE);
47
48
@@ -XXX,XX +XXX,XX @@ static bool trans_addu16i_d(DisasContext *ctx, arg_addu16i_d *a)
49
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
50
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
51
52
+ if (!avail_64(ctx)) {
53
+ return false;
54
+ }
55
+
56
tcg_gen_addi_tl(dest, src1, a->imm << 16);
57
gen_set_gpr(a->rd, dest, EXT_NONE);
58
59
@@ -XXX,XX +XXX,XX @@ static bool trans_addu16i_d(DisasContext *ctx, arg_addu16i_d *a)
60
}
61
62
TRANS(add_w, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_SIGN, tcg_gen_add_tl)
63
-TRANS(add_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_add_tl)
64
+TRANS(add_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_add_tl)
65
TRANS(sub_w, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_SIGN, tcg_gen_sub_tl)
66
-TRANS(sub_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_sub_tl)
67
+TRANS(sub_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_sub_tl)
68
TRANS(and, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_and_tl)
69
TRANS(or, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_or_tl)
70
TRANS(xor, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_xor_tl)
71
@@ -XXX,XX +XXX,XX @@ TRANS(orn, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_orc_tl)
72
TRANS(slt, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_slt)
73
TRANS(sltu, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sltu)
74
TRANS(mul_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, tcg_gen_mul_tl)
75
-TRANS(mul_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_mul_tl)
76
+TRANS(mul_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, tcg_gen_mul_tl)
77
TRANS(mulh_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_NONE, gen_mulh_w)
78
TRANS(mulh_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_NONE, gen_mulh_w)
79
-TRANS(mulh_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_d)
80
-TRANS(mulh_du, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_du)
81
-TRANS(mulw_d_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_NONE, tcg_gen_mul_tl)
82
-TRANS(mulw_d_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_NONE, tcg_gen_mul_tl)
83
+TRANS(mulh_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_d)
84
+TRANS(mulh_du, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_mulh_du)
85
+TRANS(mulw_d_w, 64, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_NONE, tcg_gen_mul_tl)
86
+TRANS(mulw_d_wu, 64, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_NONE, tcg_gen_mul_tl)
87
TRANS(div_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, gen_div_w)
88
TRANS(mod_w, ALL, gen_rrr, EXT_SIGN, EXT_SIGN, EXT_SIGN, gen_rem_w)
89
TRANS(div_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_SIGN, gen_div_du)
90
TRANS(mod_wu, ALL, gen_rrr, EXT_ZERO, EXT_ZERO, EXT_SIGN, gen_rem_du)
91
-TRANS(div_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_d)
92
-TRANS(mod_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_d)
93
-TRANS(div_du, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_du)
94
-TRANS(mod_du, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_du)
95
+TRANS(div_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_d)
96
+TRANS(mod_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_d)
97
+TRANS(div_du, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_div_du)
98
+TRANS(mod_du, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rem_du)
99
TRANS(slti, ALL, gen_rri_v, EXT_NONE, EXT_NONE, gen_slt)
100
TRANS(sltui, ALL, gen_rri_v, EXT_NONE, EXT_NONE, gen_sltu)
101
TRANS(addi_w, ALL, gen_rri_c, EXT_NONE, EXT_SIGN, tcg_gen_addi_tl)
102
-TRANS(addi_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_addi_tl)
103
+TRANS(addi_d, 64, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_addi_tl)
104
TRANS(alsl_w, ALL, gen_rrr_sa, EXT_NONE, EXT_SIGN, gen_alsl)
105
-TRANS(alsl_wu, ALL, gen_rrr_sa, EXT_NONE, EXT_ZERO, gen_alsl)
106
-TRANS(alsl_d, ALL, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_alsl)
107
+TRANS(alsl_wu, 64, gen_rrr_sa, EXT_NONE, EXT_ZERO, gen_alsl)
108
+TRANS(alsl_d, 64, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_alsl)
109
TRANS(pcaddi, ALL, gen_pc, gen_pcaddi)
110
TRANS(pcalau12i, ALL, gen_pc, gen_pcalau12i)
111
TRANS(pcaddu12i, ALL, gen_pc, gen_pcaddu12i)
112
-TRANS(pcaddu18i, ALL, gen_pc, gen_pcaddu18i)
113
+TRANS(pcaddu18i, 64, gen_pc, gen_pcaddu18i)
114
TRANS(andi, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_andi_tl)
115
TRANS(ori, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_ori_tl)
116
TRANS(xori, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_xori_tl)
117
diff --git a/target/loongarch/insn_trans/trans_atomic.c.inc b/target/loongarch/insn_trans/trans_atomic.c.inc
118
index XXXXXXX..XXXXXXX 100644
119
--- a/target/loongarch/insn_trans/trans_atomic.c.inc
120
+++ b/target/loongarch/insn_trans/trans_atomic.c.inc
121
@@ -XXX,XX +XXX,XX @@ static bool gen_am(DisasContext *ctx, arg_rrr *a,
122
123
TRANS(ll_w, ALL, gen_ll, MO_TESL)
124
TRANS(sc_w, ALL, gen_sc, MO_TESL)
125
-TRANS(ll_d, ALL, gen_ll, MO_TEUQ)
126
-TRANS(sc_d, ALL, gen_sc, MO_TEUQ)
127
-TRANS(amswap_w, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
128
-TRANS(amswap_d, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
129
-TRANS(amadd_w, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
130
-TRANS(amadd_d, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
131
-TRANS(amand_w, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
132
-TRANS(amand_d, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
133
-TRANS(amor_w, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
134
-TRANS(amor_d, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
135
-TRANS(amxor_w, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
136
-TRANS(amxor_d, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
137
-TRANS(ammax_w, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
138
-TRANS(ammax_d, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
139
-TRANS(ammin_w, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
140
-TRANS(ammin_d, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
141
-TRANS(ammax_wu, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
142
-TRANS(ammax_du, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
143
-TRANS(ammin_wu, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
144
-TRANS(ammin_du, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
145
-TRANS(amswap_db_w, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
146
-TRANS(amswap_db_d, ALL, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
147
-TRANS(amadd_db_w, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
148
-TRANS(amadd_db_d, ALL, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
149
-TRANS(amand_db_w, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
150
-TRANS(amand_db_d, ALL, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
151
-TRANS(amor_db_w, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
152
-TRANS(amor_db_d, ALL, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
153
-TRANS(amxor_db_w, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
154
-TRANS(amxor_db_d, ALL, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
155
-TRANS(ammax_db_w, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
156
-TRANS(ammax_db_d, ALL, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
157
-TRANS(ammin_db_w, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
158
-TRANS(ammin_db_d, ALL, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
159
-TRANS(ammax_db_wu, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
160
-TRANS(ammax_db_du, ALL, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
161
-TRANS(ammin_db_wu, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
162
-TRANS(ammin_db_du, ALL, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
163
+TRANS(ll_d, 64, gen_ll, MO_TEUQ)
164
+TRANS(sc_d, 64, gen_sc, MO_TEUQ)
165
+TRANS(amswap_w, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
166
+TRANS(amswap_d, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
167
+TRANS(amadd_w, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
168
+TRANS(amadd_d, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
169
+TRANS(amand_w, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
170
+TRANS(amand_d, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
171
+TRANS(amor_w, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
172
+TRANS(amor_d, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
173
+TRANS(amxor_w, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
174
+TRANS(amxor_d, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
175
+TRANS(ammax_w, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
176
+TRANS(ammax_d, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
177
+TRANS(ammin_w, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
178
+TRANS(ammin_d, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
179
+TRANS(ammax_wu, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
180
+TRANS(ammax_du, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
181
+TRANS(ammin_wu, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
182
+TRANS(ammin_du, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
183
+TRANS(amswap_db_w, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
184
+TRANS(amswap_db_d, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
185
+TRANS(amadd_db_w, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
186
+TRANS(amadd_db_d, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
187
+TRANS(amand_db_w, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
188
+TRANS(amand_db_d, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
189
+TRANS(amor_db_w, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
190
+TRANS(amor_db_d, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
191
+TRANS(amxor_db_w, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
192
+TRANS(amxor_db_d, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
193
+TRANS(ammax_db_w, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
194
+TRANS(ammax_db_d, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
195
+TRANS(ammin_db_w, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
196
+TRANS(ammin_db_d, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
197
+TRANS(ammax_db_wu, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
198
+TRANS(ammax_db_du, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
199
+TRANS(ammin_db_wu, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
200
+TRANS(ammin_db_du, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
201
diff --git a/target/loongarch/insn_trans/trans_bit.c.inc b/target/loongarch/insn_trans/trans_bit.c.inc
202
index XXXXXXX..XXXXXXX 100644
203
--- a/target/loongarch/insn_trans/trans_bit.c.inc
204
+++ b/target/loongarch/insn_trans/trans_bit.c.inc
205
@@ -XXX,XX +XXX,XX @@ TRANS(clo_w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_clo_w)
206
TRANS(clz_w, ALL, gen_rr, EXT_ZERO, EXT_NONE, gen_clz_w)
207
TRANS(cto_w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_cto_w)
208
TRANS(ctz_w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_ctz_w)
209
-TRANS(clo_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_clo_d)
210
-TRANS(clz_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_clz_d)
211
-TRANS(cto_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_cto_d)
212
-TRANS(ctz_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_ctz_d)
213
+TRANS(clo_d, 64, gen_rr, EXT_NONE, EXT_NONE, gen_clo_d)
214
+TRANS(clz_d, 64, gen_rr, EXT_NONE, EXT_NONE, gen_clz_d)
215
+TRANS(cto_d, 64, gen_rr, EXT_NONE, EXT_NONE, gen_cto_d)
216
+TRANS(ctz_d, 64, gen_rr, EXT_NONE, EXT_NONE, gen_ctz_d)
217
TRANS(revb_2h, ALL, gen_rr, EXT_NONE, EXT_SIGN, gen_revb_2h)
218
-TRANS(revb_4h, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revb_4h)
219
-TRANS(revb_2w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revb_2w)
220
-TRANS(revb_d, ALL, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_bswap64_i64)
221
-TRANS(revh_2w, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revh_2w)
222
-TRANS(revh_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_revh_d)
223
+TRANS(revb_4h, 64, gen_rr, EXT_NONE, EXT_NONE, gen_revb_4h)
224
+TRANS(revb_2w, 64, gen_rr, EXT_NONE, EXT_NONE, gen_revb_2w)
225
+TRANS(revb_d, 64, gen_rr, EXT_NONE, EXT_NONE, tcg_gen_bswap64_i64)
226
+TRANS(revh_2w, 64, gen_rr, EXT_NONE, EXT_NONE, gen_revh_2w)
227
+TRANS(revh_d, 64, gen_rr, EXT_NONE, EXT_NONE, gen_revh_d)
228
TRANS(bitrev_4b, ALL, gen_rr, EXT_ZERO, EXT_SIGN, gen_helper_bitswap)
229
-TRANS(bitrev_8b, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitswap)
230
+TRANS(bitrev_8b, 64, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitswap)
231
TRANS(bitrev_w, ALL, gen_rr, EXT_NONE, EXT_SIGN, gen_helper_bitrev_w)
232
-TRANS(bitrev_d, ALL, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitrev_d)
233
+TRANS(bitrev_d, 64, gen_rr, EXT_NONE, EXT_NONE, gen_helper_bitrev_d)
234
TRANS(maskeqz, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_maskeqz)
235
TRANS(masknez, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_masknez)
236
TRANS(bytepick_w, ALL, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_bytepick_w)
237
-TRANS(bytepick_d, ALL, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_bytepick_d)
238
+TRANS(bytepick_d, 64, gen_rrr_sa, EXT_NONE, EXT_NONE, gen_bytepick_d)
239
TRANS(bstrins_w, ALL, gen_bstrins, EXT_SIGN)
240
-TRANS(bstrins_d, ALL, gen_bstrins, EXT_NONE)
241
+TRANS(bstrins_d, 64, gen_bstrins, EXT_NONE)
242
TRANS(bstrpick_w, ALL, gen_bstrpick, EXT_SIGN)
243
-TRANS(bstrpick_d, ALL, gen_bstrpick, EXT_NONE)
244
+TRANS(bstrpick_d, 64, gen_bstrpick, EXT_NONE)
245
diff --git a/target/loongarch/insn_trans/trans_branch.c.inc b/target/loongarch/insn_trans/trans_branch.c.inc
246
index XXXXXXX..XXXXXXX 100644
247
--- a/target/loongarch/insn_trans/trans_branch.c.inc
248
+++ b/target/loongarch/insn_trans/trans_branch.c.inc
249
@@ -XXX,XX +XXX,XX @@ TRANS(bltu, ALL, gen_rr_bc, TCG_COND_LTU)
250
TRANS(bgeu, ALL, gen_rr_bc, TCG_COND_GEU)
251
TRANS(beqz, ALL, gen_rz_bc, TCG_COND_EQ)
252
TRANS(bnez, ALL, gen_rz_bc, TCG_COND_NE)
253
-TRANS(bceqz, ALL, gen_cz_bc, TCG_COND_EQ)
254
-TRANS(bcnez, ALL, gen_cz_bc, TCG_COND_NE)
255
+TRANS(bceqz, 64, gen_cz_bc, TCG_COND_EQ)
256
+TRANS(bcnez, 64, gen_cz_bc, TCG_COND_NE)
257
diff --git a/target/loongarch/insn_trans/trans_extra.c.inc b/target/loongarch/insn_trans/trans_extra.c.inc
258
index XXXXXXX..XXXXXXX 100644
259
--- a/target/loongarch/insn_trans/trans_extra.c.inc
260
+++ b/target/loongarch/insn_trans/trans_extra.c.inc
261
@@ -XXX,XX +XXX,XX @@ static bool trans_asrtle_d(DisasContext *ctx, arg_asrtle_d * a)
262
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
263
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
264
265
+ if (!avail_64(ctx)) {
266
+ return false;
267
+ }
268
+
269
gen_helper_asrtle_d(cpu_env, src1, src2);
270
return true;
271
}
272
@@ -XXX,XX +XXX,XX @@ static bool trans_asrtgt_d(DisasContext *ctx, arg_asrtgt_d * a)
273
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
274
TCGv src2 = gpr_src(ctx, a->rk, EXT_NONE);
275
276
+ if (!avail_64(ctx)) {
277
+ return false;
278
+ }
279
+
280
gen_helper_asrtgt_d(cpu_env, src1, src2);
281
return true;
282
}
283
@@ -XXX,XX +XXX,XX @@ static bool gen_crc(DisasContext *ctx, arg_rrr *a,
284
return true;
285
}
286
287
-TRANS(crc_w_b_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(1))
288
-TRANS(crc_w_h_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(2))
289
-TRANS(crc_w_w_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(4))
290
-TRANS(crc_w_d_w, ALL, gen_crc, gen_helper_crc32, tcg_constant_tl(8))
291
-TRANS(crcc_w_b_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(1))
292
-TRANS(crcc_w_h_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(2))
293
-TRANS(crcc_w_w_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(4))
294
-TRANS(crcc_w_d_w, ALL, gen_crc, gen_helper_crc32c, tcg_constant_tl(8))
295
+TRANS(crc_w_b_w, 64, gen_crc, gen_helper_crc32, tcg_constant_tl(1))
296
+TRANS(crc_w_h_w, 64, gen_crc, gen_helper_crc32, tcg_constant_tl(2))
297
+TRANS(crc_w_w_w, 64, gen_crc, gen_helper_crc32, tcg_constant_tl(4))
298
+TRANS(crc_w_d_w, 64, gen_crc, gen_helper_crc32, tcg_constant_tl(8))
299
+TRANS(crcc_w_b_w, 64, gen_crc, gen_helper_crc32c, tcg_constant_tl(1))
300
+TRANS(crcc_w_h_w, 64, gen_crc, gen_helper_crc32c, tcg_constant_tl(2))
301
+TRANS(crcc_w_w_w, 64, gen_crc, gen_helper_crc32c, tcg_constant_tl(4))
302
+TRANS(crcc_w_d_w, 64, gen_crc, gen_helper_crc32c, tcg_constant_tl(8))
303
diff --git a/target/loongarch/insn_trans/trans_fmov.c.inc b/target/loongarch/insn_trans/trans_fmov.c.inc
304
index XXXXXXX..XXXXXXX 100644
305
--- a/target/loongarch/insn_trans/trans_fmov.c.inc
306
+++ b/target/loongarch/insn_trans/trans_fmov.c.inc
307
@@ -XXX,XX +XXX,XX @@ static bool trans_movcf2gr(DisasContext *ctx, arg_movcf2gr *a)
308
TRANS(fmov_s, ALL, gen_f2f, tcg_gen_mov_tl, true)
309
TRANS(fmov_d, ALL, gen_f2f, tcg_gen_mov_tl, false)
310
TRANS(movgr2fr_w, ALL, gen_r2f, gen_movgr2fr_w)
311
-TRANS(movgr2fr_d, ALL, gen_r2f, tcg_gen_mov_tl)
312
+TRANS(movgr2fr_d, 64, gen_r2f, tcg_gen_mov_tl)
313
TRANS(movgr2frh_w, ALL, gen_r2f, gen_movgr2frh_w)
314
TRANS(movfr2gr_s, ALL, gen_f2r, tcg_gen_ext32s_tl)
315
-TRANS(movfr2gr_d, ALL, gen_f2r, tcg_gen_mov_tl)
316
+TRANS(movfr2gr_d, 64, gen_f2r, tcg_gen_mov_tl)
317
TRANS(movfrh2gr_s, ALL, gen_f2r, gen_movfrh2gr_s)
318
diff --git a/target/loongarch/insn_trans/trans_memory.c.inc b/target/loongarch/insn_trans/trans_memory.c.inc
319
index XXXXXXX..XXXXXXX 100644
320
--- a/target/loongarch/insn_trans/trans_memory.c.inc
321
+++ b/target/loongarch/insn_trans/trans_memory.c.inc
322
@@ -XXX,XX +XXX,XX @@ static bool gen_stptr(DisasContext *ctx, arg_rr_i *a, MemOp mop)
323
TRANS(ld_b, ALL, gen_load, MO_SB)
324
TRANS(ld_h, ALL, gen_load, MO_TESW)
325
TRANS(ld_w, ALL, gen_load, MO_TESL)
326
-TRANS(ld_d, ALL, gen_load, MO_TEUQ)
327
+TRANS(ld_d, 64, gen_load, MO_TEUQ)
328
TRANS(st_b, ALL, gen_store, MO_UB)
329
TRANS(st_h, ALL, gen_store, MO_TEUW)
330
TRANS(st_w, ALL, gen_store, MO_TEUL)
331
-TRANS(st_d, ALL, gen_store, MO_TEUQ)
332
+TRANS(st_d, 64, gen_store, MO_TEUQ)
333
TRANS(ld_bu, ALL, gen_load, MO_UB)
334
TRANS(ld_hu, ALL, gen_load, MO_TEUW)
335
-TRANS(ld_wu, ALL, gen_load, MO_TEUL)
336
-TRANS(ldx_b, ALL, gen_loadx, MO_SB)
337
-TRANS(ldx_h, ALL, gen_loadx, MO_TESW)
338
-TRANS(ldx_w, ALL, gen_loadx, MO_TESL)
339
-TRANS(ldx_d, ALL, gen_loadx, MO_TEUQ)
340
-TRANS(stx_b, ALL, gen_storex, MO_UB)
341
-TRANS(stx_h, ALL, gen_storex, MO_TEUW)
342
-TRANS(stx_w, ALL, gen_storex, MO_TEUL)
343
-TRANS(stx_d, ALL, gen_storex, MO_TEUQ)
344
-TRANS(ldx_bu, ALL, gen_loadx, MO_UB)
345
-TRANS(ldx_hu, ALL, gen_loadx, MO_TEUW)
346
-TRANS(ldx_wu, ALL, gen_loadx, MO_TEUL)
347
-TRANS(ldptr_w, ALL, gen_ldptr, MO_TESL)
348
-TRANS(stptr_w, ALL, gen_stptr, MO_TEUL)
349
-TRANS(ldptr_d, ALL, gen_ldptr, MO_TEUQ)
350
-TRANS(stptr_d, ALL, gen_stptr, MO_TEUQ)
351
-TRANS(ldgt_b, ALL, gen_load_gt, MO_SB)
352
-TRANS(ldgt_h, ALL, gen_load_gt, MO_TESW)
353
-TRANS(ldgt_w, ALL, gen_load_gt, MO_TESL)
354
-TRANS(ldgt_d, ALL, gen_load_gt, MO_TEUQ)
355
-TRANS(ldle_b, ALL, gen_load_le, MO_SB)
356
-TRANS(ldle_h, ALL, gen_load_le, MO_TESW)
357
-TRANS(ldle_w, ALL, gen_load_le, MO_TESL)
358
-TRANS(ldle_d, ALL, gen_load_le, MO_TEUQ)
359
-TRANS(stgt_b, ALL, gen_store_gt, MO_UB)
360
-TRANS(stgt_h, ALL, gen_store_gt, MO_TEUW)
361
-TRANS(stgt_w, ALL, gen_store_gt, MO_TEUL)
362
-TRANS(stgt_d, ALL, gen_store_gt, MO_TEUQ)
363
-TRANS(stle_b, ALL, gen_store_le, MO_UB)
364
-TRANS(stle_h, ALL, gen_store_le, MO_TEUW)
365
-TRANS(stle_w, ALL, gen_store_le, MO_TEUL)
366
-TRANS(stle_d, ALL, gen_store_le, MO_TEUQ)
367
+TRANS(ld_wu, 64, gen_load, MO_TEUL)
368
+TRANS(ldx_b, 64, gen_loadx, MO_SB)
369
+TRANS(ldx_h, 64, gen_loadx, MO_TESW)
370
+TRANS(ldx_w, 64, gen_loadx, MO_TESL)
371
+TRANS(ldx_d, 64, gen_loadx, MO_TEUQ)
372
+TRANS(stx_b, 64, gen_storex, MO_UB)
373
+TRANS(stx_h, 64, gen_storex, MO_TEUW)
374
+TRANS(stx_w, 64, gen_storex, MO_TEUL)
375
+TRANS(stx_d, 64, gen_storex, MO_TEUQ)
376
+TRANS(ldx_bu, 64, gen_loadx, MO_UB)
377
+TRANS(ldx_hu, 64, gen_loadx, MO_TEUW)
378
+TRANS(ldx_wu, 64, gen_loadx, MO_TEUL)
379
+TRANS(ldptr_w, 64, gen_ldptr, MO_TESL)
380
+TRANS(stptr_w, 64, gen_stptr, MO_TEUL)
381
+TRANS(ldptr_d, 64, gen_ldptr, MO_TEUQ)
382
+TRANS(stptr_d, 64, gen_stptr, MO_TEUQ)
383
+TRANS(ldgt_b, 64, gen_load_gt, MO_SB)
384
+TRANS(ldgt_h, 64, gen_load_gt, MO_TESW)
385
+TRANS(ldgt_w, 64, gen_load_gt, MO_TESL)
386
+TRANS(ldgt_d, 64, gen_load_gt, MO_TEUQ)
387
+TRANS(ldle_b, 64, gen_load_le, MO_SB)
388
+TRANS(ldle_h, 64, gen_load_le, MO_TESW)
389
+TRANS(ldle_w, 64, gen_load_le, MO_TESL)
390
+TRANS(ldle_d, 64, gen_load_le, MO_TEUQ)
391
+TRANS(stgt_b, 64, gen_store_gt, MO_UB)
392
+TRANS(stgt_h, 64, gen_store_gt, MO_TEUW)
393
+TRANS(stgt_w, 64, gen_store_gt, MO_TEUL)
394
+TRANS(stgt_d, 64, gen_store_gt, MO_TEUQ)
395
+TRANS(stle_b, 64, gen_store_le, MO_UB)
396
+TRANS(stle_h, 64, gen_store_le, MO_TEUW)
397
+TRANS(stle_w, 64, gen_store_le, MO_TEUL)
398
+TRANS(stle_d, 64, gen_store_le, MO_TEUQ)
399
diff --git a/target/loongarch/insn_trans/trans_shift.c.inc b/target/loongarch/insn_trans/trans_shift.c.inc
400
index XXXXXXX..XXXXXXX 100644
401
--- a/target/loongarch/insn_trans/trans_shift.c.inc
402
+++ b/target/loongarch/insn_trans/trans_shift.c.inc
403
@@ -XXX,XX +XXX,XX @@ static bool trans_srai_w(DisasContext *ctx, arg_srai_w *a)
404
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
405
TCGv src1 = gpr_src(ctx, a->rj, EXT_ZERO);
406
407
+ if (!avail_64(ctx)) {
408
+ return false;
409
+ }
410
+
411
tcg_gen_sextract_tl(dest, src1, a->imm, 32 - a->imm);
412
gen_set_gpr(a->rd, dest, EXT_NONE);
413
414
@@ -XXX,XX +XXX,XX @@ static bool trans_srai_w(DisasContext *ctx, arg_srai_w *a)
415
TRANS(sll_w, ALL, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_sll_w)
416
TRANS(srl_w, ALL, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_srl_w)
417
TRANS(sra_w, ALL, gen_rrr, EXT_SIGN, EXT_NONE, EXT_SIGN, gen_sra_w)
418
-TRANS(sll_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sll_d)
419
-TRANS(srl_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_srl_d)
420
-TRANS(sra_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sra_d)
421
-TRANS(rotr_w, ALL, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_rotr_w)
422
-TRANS(rotr_d, ALL, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rotr_d)
423
+TRANS(sll_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sll_d)
424
+TRANS(srl_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_srl_d)
425
+TRANS(sra_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_sra_d)
426
+TRANS(rotr_w, 64, gen_rrr, EXT_ZERO, EXT_NONE, EXT_SIGN, gen_rotr_w)
427
+TRANS(rotr_d, 64, gen_rrr, EXT_NONE, EXT_NONE, EXT_NONE, gen_rotr_d)
428
TRANS(slli_w, ALL, gen_rri_c, EXT_NONE, EXT_SIGN, tcg_gen_shli_tl)
429
-TRANS(slli_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shli_tl)
430
+TRANS(slli_d, 64, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shli_tl)
431
TRANS(srli_w, ALL, gen_rri_c, EXT_ZERO, EXT_SIGN, tcg_gen_shri_tl)
432
-TRANS(srli_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shri_tl)
433
-TRANS(srai_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_sari_tl)
434
-TRANS(rotri_w, ALL, gen_rri_v, EXT_NONE, EXT_NONE, gen_rotr_w)
435
-TRANS(rotri_d, ALL, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_rotri_tl)
436
+TRANS(srli_d, 64, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_shri_tl)
437
+TRANS(srai_d, 64, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_sari_tl)
438
+TRANS(rotri_w, 64, gen_rri_v, EXT_NONE, EXT_NONE, gen_rotr_w)
439
+TRANS(rotri_d, 64, gen_rri_c, EXT_NONE, EXT_NONE, tcg_gen_rotri_tl)
440
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
441
index XXXXXXX..XXXXXXX 100644
442
--- a/target/loongarch/translate.c
443
+++ b/target/loongarch/translate.c
444
@@ -XXX,XX +XXX,XX @@ static void loongarch_tr_init_disas_context(DisasContextBase *dcbase,
445
ctx->va32 = (ctx->base.tb->flags & HW_FLAGS_VA32) != 0;
446
447
ctx->zero = tcg_constant_tl(0);
448
+
449
+ ctx->cpucfg1 = env->cpucfg[1];
450
}
451
452
static void loongarch_tr_tb_start(DisasContextBase *dcbase, CPUState *cs)
453
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
454
index XXXXXXX..XXXXXXX 100644
455
--- a/target/loongarch/translate.h
456
+++ b/target/loongarch/translate.h
457
@@ -XXX,XX +XXX,XX @@
458
{ return avail_##AVAIL(ctx) && FUNC(ctx, a, __VA_ARGS__); }
459
460
#define avail_ALL(C) true
461
+#define avail_64(C) (FIELD_EX32((C)->cpucfg1, CPUCFG1, ARCH) == \
462
+ CPUCFG1_ARCH_LA64)
463
464
/*
465
* If an operation is being performed on less than TARGET_LONG_BITS,
466
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
467
TCGv zero;
468
bool la64; /* LoongArch64 mode */
469
bool va32; /* 32-bit virtual address */
470
+ uint32_t cpucfg1;
471
} DisasContext;
472
473
void generate_exception(DisasContext *ctx, int excp);
474
--
475
2.39.1
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
Add LoongArch32 cpu la132.
4
5
Due to lack of public documentation of la132, it is currently a
6
synthetic LoongArch32 cpu model. Details need to be added in the future.
7
8
Signed-off-by: Jiajie Chen <c@jia.je>
9
Signed-off-by: Song Gao <gaosong@loongson.cn>
10
Acked-by: Richard Henderson <richard.henderson@linaro.org>
11
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
12
Message-ID: <20230822032724.1353391-10-gaosong@loongson.cn>
13
Message-Id: <20230822071959.35620-4-philmd@linaro.org>
14
---
15
target/loongarch/cpu.c | 30 ++++++++++++++++++++++++++++++
16
1 file changed, 30 insertions(+)
17
18
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
19
index XXXXXXX..XXXXXXX 100644
20
--- a/target/loongarch/cpu.c
21
+++ b/target/loongarch/cpu.c
22
@@ -XXX,XX +XXX,XX @@ static void loongarch_la464_initfn(Object *obj)
23
env->CSR_ASID = FIELD_DP64(0, CSR_ASID, ASIDBITS, 0xa);
24
}
25
26
+static void loongarch_la132_initfn(Object *obj)
27
+{
28
+ LoongArchCPU *cpu = LOONGARCH_CPU(obj);
29
+ CPULoongArchState *env = &cpu->env;
30
+
31
+ int i;
32
+
33
+ for (i = 0; i < 21; i++) {
34
+ env->cpucfg[i] = 0x0;
35
+ }
36
+
37
+ cpu->dtb_compatible = "loongarch,Loongson-1C103";
38
+ env->cpucfg[0] = 0x148042; /* PRID */
39
+
40
+ uint32_t data = 0;
41
+ data = FIELD_DP32(data, CPUCFG1, ARCH, 1); /* LA32 */
42
+ data = FIELD_DP32(data, CPUCFG1, PGMMU, 1);
43
+ data = FIELD_DP32(data, CPUCFG1, IOCSR, 1);
44
+ data = FIELD_DP32(data, CPUCFG1, PALEN, 0x1f); /* 32 bits */
45
+ data = FIELD_DP32(data, CPUCFG1, VALEN, 0x1f); /* 32 bits */
46
+ data = FIELD_DP32(data, CPUCFG1, UAL, 1);
47
+ data = FIELD_DP32(data, CPUCFG1, RI, 0);
48
+ data = FIELD_DP32(data, CPUCFG1, EP, 0);
49
+ data = FIELD_DP32(data, CPUCFG1, RPLV, 0);
50
+ data = FIELD_DP32(data, CPUCFG1, HP, 1);
51
+ data = FIELD_DP32(data, CPUCFG1, IOCSR_BRD, 1);
52
+ env->cpucfg[1] = data;
53
+}
54
+
55
static void loongarch_cpu_list_entry(gpointer data, gpointer user_data)
56
{
57
const char *typename = object_class_get_name(OBJECT_CLASS(data));
58
@@ -XXX,XX +XXX,XX @@ static const TypeInfo loongarch_cpu_type_infos[] = {
59
.class_init = loongarch64_cpu_class_init,
60
},
61
DEFINE_LOONGARCH_CPU_TYPE(64, "la464", loongarch_la464_initfn),
62
+ DEFINE_LOONGARCH_CPU_TYPE(32, "la132", loongarch_la132_initfn),
63
};
64
65
DEFINE_TYPES(loongarch_cpu_type_infos)
66
--
67
2.39.1
68
69
diff view generated by jsdifflib
New patch
1
Allow virt machine to be used with la132 instead of la464.
1
2
3
Co-authored-by: Jiajie Chen <c@jia.je>
4
Signed-off-by: Song Gao <gaosong@loongson.cn>
5
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
6
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
Message-ID: <20230822032724.1353391-11-gaosong@loongson.cn>
8
Message-Id: <20230822071959.35620-5-philmd@linaro.org>
9
---
10
hw/loongarch/virt.c | 5 -----
11
1 file changed, 5 deletions(-)
12
13
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
14
index XXXXXXX..XXXXXXX 100644
15
--- a/hw/loongarch/virt.c
16
+++ b/hw/loongarch/virt.c
17
@@ -XXX,XX +XXX,XX @@ static void loongarch_init(MachineState *machine)
18
cpu_model = LOONGARCH_CPU_TYPE_NAME("la464");
19
}
20
21
- if (!strstr(cpu_model, "la464")) {
22
- error_report("LoongArch/TCG needs cpu type la464");
23
- exit(1);
24
- }
25
-
26
if (ram_size < 1 * GiB) {
27
error_report("ram_size must be greater than 1G.");
28
exit(1);
29
--
30
2.39.1
31
32
diff view generated by jsdifflib
New patch
1
Signed-off-by: Song Gao <gaosong@loongson.cn>
2
Acked-by: Richard Henderson <richard.henderson@linaro.org>
3
Message-ID: <20230822032724.1353391-12-gaosong@loongson.cn>
4
Message-Id: <20230822071959.35620-6-philmd@linaro.org>
5
---
6
.../loongarch/insn_trans/trans_farith.c.inc | 96 ++++++++++++-------
7
target/loongarch/insn_trans/trans_fcmp.c.inc | 8 ++
8
target/loongarch/insn_trans/trans_fcnv.c.inc | 56 +++++------
9
.../loongarch/insn_trans/trans_fmemory.c.inc | 32 +++----
10
target/loongarch/insn_trans/trans_fmov.c.inc | 48 ++++++++--
11
target/loongarch/translate.c | 1 +
12
target/loongarch/translate.h | 4 +
13
7 files changed, 159 insertions(+), 86 deletions(-)
1
14
15
diff --git a/target/loongarch/insn_trans/trans_farith.c.inc b/target/loongarch/insn_trans/trans_farith.c.inc
16
index XXXXXXX..XXXXXXX 100644
17
--- a/target/loongarch/insn_trans/trans_farith.c.inc
18
+++ b/target/loongarch/insn_trans/trans_farith.c.inc
19
@@ -XXX,XX +XXX,XX @@ static bool trans_fcopysign_s(DisasContext *ctx, arg_fcopysign_s *a)
20
TCGv src1 = get_fpr(ctx, a->fk);
21
TCGv src2 = get_fpr(ctx, a->fj);
22
23
+ if (!avail_FP_SP(ctx)) {
24
+ return false;
25
+ }
26
+
27
CHECK_FPE;
28
29
tcg_gen_deposit_i64(dest, src1, src2, 0, 31);
30
@@ -XXX,XX +XXX,XX @@ static bool trans_fcopysign_d(DisasContext *ctx, arg_fcopysign_d *a)
31
TCGv src1 = get_fpr(ctx, a->fk);
32
TCGv src2 = get_fpr(ctx, a->fj);
33
34
+ if (!avail_FP_DP(ctx)) {
35
+ return false;
36
+ }
37
+
38
CHECK_FPE;
39
40
tcg_gen_deposit_i64(dest, src1, src2, 0, 63);
41
@@ -XXX,XX +XXX,XX @@ static bool trans_fabs_s(DisasContext *ctx, arg_fabs_s *a)
42
TCGv dest = get_fpr(ctx, a->fd);
43
TCGv src = get_fpr(ctx, a->fj);
44
45
+ if (!avail_FP_SP(ctx)) {
46
+ return false;
47
+ }
48
+
49
CHECK_FPE;
50
51
tcg_gen_andi_i64(dest, src, MAKE_64BIT_MASK(0, 31));
52
@@ -XXX,XX +XXX,XX @@ static bool trans_fabs_d(DisasContext *ctx, arg_fabs_d *a)
53
TCGv dest = get_fpr(ctx, a->fd);
54
TCGv src = get_fpr(ctx, a->fj);
55
56
+ if (!avail_FP_DP(ctx)) {
57
+ return false;
58
+ }
59
+
60
CHECK_FPE;
61
62
tcg_gen_andi_i64(dest, src, MAKE_64BIT_MASK(0, 63));
63
@@ -XXX,XX +XXX,XX @@ static bool trans_fneg_s(DisasContext *ctx, arg_fneg_s *a)
64
TCGv dest = get_fpr(ctx, a->fd);
65
TCGv src = get_fpr(ctx, a->fj);
66
67
+ if (!avail_FP_SP(ctx)) {
68
+ return false;
69
+ }
70
+
71
CHECK_FPE;
72
73
tcg_gen_xori_i64(dest, src, 0x80000000);
74
@@ -XXX,XX +XXX,XX @@ static bool trans_fneg_d(DisasContext *ctx, arg_fneg_d *a)
75
TCGv dest = get_fpr(ctx, a->fd);
76
TCGv src = get_fpr(ctx, a->fj);
77
78
+ if (!avail_FP_DP(ctx)) {
79
+ return false;
80
+ }
81
+
82
CHECK_FPE;
83
84
tcg_gen_xori_i64(dest, src, 0x8000000000000000LL);
85
@@ -XXX,XX +XXX,XX @@ static bool trans_fneg_d(DisasContext *ctx, arg_fneg_d *a)
86
return true;
87
}
88
89
-TRANS(fadd_s, ALL, gen_fff, gen_helper_fadd_s)
90
-TRANS(fadd_d, ALL, gen_fff, gen_helper_fadd_d)
91
-TRANS(fsub_s, ALL, gen_fff, gen_helper_fsub_s)
92
-TRANS(fsub_d, ALL, gen_fff, gen_helper_fsub_d)
93
-TRANS(fmul_s, ALL, gen_fff, gen_helper_fmul_s)
94
-TRANS(fmul_d, ALL, gen_fff, gen_helper_fmul_d)
95
-TRANS(fdiv_s, ALL, gen_fff, gen_helper_fdiv_s)
96
-TRANS(fdiv_d, ALL, gen_fff, gen_helper_fdiv_d)
97
-TRANS(fmax_s, ALL, gen_fff, gen_helper_fmax_s)
98
-TRANS(fmax_d, ALL, gen_fff, gen_helper_fmax_d)
99
-TRANS(fmin_s, ALL, gen_fff, gen_helper_fmin_s)
100
-TRANS(fmin_d, ALL, gen_fff, gen_helper_fmin_d)
101
-TRANS(fmaxa_s, ALL, gen_fff, gen_helper_fmaxa_s)
102
-TRANS(fmaxa_d, ALL, gen_fff, gen_helper_fmaxa_d)
103
-TRANS(fmina_s, ALL, gen_fff, gen_helper_fmina_s)
104
-TRANS(fmina_d, ALL, gen_fff, gen_helper_fmina_d)
105
-TRANS(fscaleb_s, ALL, gen_fff, gen_helper_fscaleb_s)
106
-TRANS(fscaleb_d, ALL, gen_fff, gen_helper_fscaleb_d)
107
-TRANS(fsqrt_s, ALL, gen_ff, gen_helper_fsqrt_s)
108
-TRANS(fsqrt_d, ALL, gen_ff, gen_helper_fsqrt_d)
109
-TRANS(frecip_s, ALL, gen_ff, gen_helper_frecip_s)
110
-TRANS(frecip_d, ALL, gen_ff, gen_helper_frecip_d)
111
-TRANS(frsqrt_s, ALL, gen_ff, gen_helper_frsqrt_s)
112
-TRANS(frsqrt_d, ALL, gen_ff, gen_helper_frsqrt_d)
113
-TRANS(flogb_s, ALL, gen_ff, gen_helper_flogb_s)
114
-TRANS(flogb_d, ALL, gen_ff, gen_helper_flogb_d)
115
-TRANS(fclass_s, ALL, gen_ff, gen_helper_fclass_s)
116
-TRANS(fclass_d, ALL, gen_ff, gen_helper_fclass_d)
117
-TRANS(fmadd_s, ALL, gen_muladd, gen_helper_fmuladd_s, 0)
118
-TRANS(fmadd_d, ALL, gen_muladd, gen_helper_fmuladd_d, 0)
119
-TRANS(fmsub_s, ALL, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_c)
120
-TRANS(fmsub_d, ALL, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_c)
121
-TRANS(fnmadd_s, ALL, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_result)
122
-TRANS(fnmadd_d, ALL, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_result)
123
-TRANS(fnmsub_s, ALL, gen_muladd, gen_helper_fmuladd_s,
124
+TRANS(fadd_s, FP_SP, gen_fff, gen_helper_fadd_s)
125
+TRANS(fadd_d, FP_DP, gen_fff, gen_helper_fadd_d)
126
+TRANS(fsub_s, FP_SP, gen_fff, gen_helper_fsub_s)
127
+TRANS(fsub_d, FP_DP, gen_fff, gen_helper_fsub_d)
128
+TRANS(fmul_s, FP_SP, gen_fff, gen_helper_fmul_s)
129
+TRANS(fmul_d, FP_DP, gen_fff, gen_helper_fmul_d)
130
+TRANS(fdiv_s, FP_SP, gen_fff, gen_helper_fdiv_s)
131
+TRANS(fdiv_d, FP_DP, gen_fff, gen_helper_fdiv_d)
132
+TRANS(fmax_s, FP_SP, gen_fff, gen_helper_fmax_s)
133
+TRANS(fmax_d, FP_DP, gen_fff, gen_helper_fmax_d)
134
+TRANS(fmin_s, FP_SP, gen_fff, gen_helper_fmin_s)
135
+TRANS(fmin_d, FP_DP, gen_fff, gen_helper_fmin_d)
136
+TRANS(fmaxa_s, FP_SP, gen_fff, gen_helper_fmaxa_s)
137
+TRANS(fmaxa_d, FP_DP, gen_fff, gen_helper_fmaxa_d)
138
+TRANS(fmina_s, FP_SP, gen_fff, gen_helper_fmina_s)
139
+TRANS(fmina_d, FP_DP, gen_fff, gen_helper_fmina_d)
140
+TRANS(fscaleb_s, FP_SP, gen_fff, gen_helper_fscaleb_s)
141
+TRANS(fscaleb_d, FP_DP, gen_fff, gen_helper_fscaleb_d)
142
+TRANS(fsqrt_s, FP_SP, gen_ff, gen_helper_fsqrt_s)
143
+TRANS(fsqrt_d, FP_DP, gen_ff, gen_helper_fsqrt_d)
144
+TRANS(frecip_s, FP_SP, gen_ff, gen_helper_frecip_s)
145
+TRANS(frecip_d, FP_DP, gen_ff, gen_helper_frecip_d)
146
+TRANS(frsqrt_s, FP_SP, gen_ff, gen_helper_frsqrt_s)
147
+TRANS(frsqrt_d, FP_DP, gen_ff, gen_helper_frsqrt_d)
148
+TRANS(flogb_s, FP_SP, gen_ff, gen_helper_flogb_s)
149
+TRANS(flogb_d, FP_DP, gen_ff, gen_helper_flogb_d)
150
+TRANS(fclass_s, FP_SP, gen_ff, gen_helper_fclass_s)
151
+TRANS(fclass_d, FP_DP, gen_ff, gen_helper_fclass_d)
152
+TRANS(fmadd_s, FP_SP, gen_muladd, gen_helper_fmuladd_s, 0)
153
+TRANS(fmadd_d, FP_DP, gen_muladd, gen_helper_fmuladd_d, 0)
154
+TRANS(fmsub_s, FP_SP, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_c)
155
+TRANS(fmsub_d, FP_DP, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_c)
156
+TRANS(fnmadd_s, FP_SP, gen_muladd, gen_helper_fmuladd_s, float_muladd_negate_result)
157
+TRANS(fnmadd_d, FP_DP, gen_muladd, gen_helper_fmuladd_d, float_muladd_negate_result)
158
+TRANS(fnmsub_s, FP_SP, gen_muladd, gen_helper_fmuladd_s,
159
float_muladd_negate_c | float_muladd_negate_result)
160
-TRANS(fnmsub_d, ALL, gen_muladd, gen_helper_fmuladd_d,
161
+TRANS(fnmsub_d, FP_DP, gen_muladd, gen_helper_fmuladd_d,
162
float_muladd_negate_c | float_muladd_negate_result)
163
diff --git a/target/loongarch/insn_trans/trans_fcmp.c.inc b/target/loongarch/insn_trans/trans_fcmp.c.inc
164
index XXXXXXX..XXXXXXX 100644
165
--- a/target/loongarch/insn_trans/trans_fcmp.c.inc
166
+++ b/target/loongarch/insn_trans/trans_fcmp.c.inc
167
@@ -XXX,XX +XXX,XX @@ static bool trans_fcmp_cond_s(DisasContext *ctx, arg_fcmp_cond_s *a)
168
uint32_t flags;
169
void (*fn)(TCGv, TCGv_env, TCGv, TCGv, TCGv_i32);
170
171
+ if (!avail_FP_SP(ctx)) {
172
+ return false;
173
+ }
174
+
175
CHECK_FPE;
176
177
var = tcg_temp_new();
178
@@ -XXX,XX +XXX,XX @@ static bool trans_fcmp_cond_d(DisasContext *ctx, arg_fcmp_cond_d *a)
179
uint32_t flags;
180
void (*fn)(TCGv, TCGv_env, TCGv, TCGv, TCGv_i32);
181
182
+ if (!avail_FP_DP(ctx)) {
183
+ return false;
184
+ }
185
+
186
CHECK_FPE;
187
188
var = tcg_temp_new();
189
diff --git a/target/loongarch/insn_trans/trans_fcnv.c.inc b/target/loongarch/insn_trans/trans_fcnv.c.inc
190
index XXXXXXX..XXXXXXX 100644
191
--- a/target/loongarch/insn_trans/trans_fcnv.c.inc
192
+++ b/target/loongarch/insn_trans/trans_fcnv.c.inc
193
@@ -XXX,XX +XXX,XX @@
194
* Copyright (c) 2021 Loongson Technology Corporation Limited
195
*/
196
197
-TRANS(fcvt_s_d, ALL, gen_ff, gen_helper_fcvt_s_d)
198
-TRANS(fcvt_d_s, ALL, gen_ff, gen_helper_fcvt_d_s)
199
-TRANS(ftintrm_w_s, ALL, gen_ff, gen_helper_ftintrm_w_s)
200
-TRANS(ftintrm_w_d, ALL, gen_ff, gen_helper_ftintrm_w_d)
201
-TRANS(ftintrm_l_s, ALL, gen_ff, gen_helper_ftintrm_l_s)
202
-TRANS(ftintrm_l_d, ALL, gen_ff, gen_helper_ftintrm_l_d)
203
-TRANS(ftintrp_w_s, ALL, gen_ff, gen_helper_ftintrp_w_s)
204
-TRANS(ftintrp_w_d, ALL, gen_ff, gen_helper_ftintrp_w_d)
205
-TRANS(ftintrp_l_s, ALL, gen_ff, gen_helper_ftintrp_l_s)
206
-TRANS(ftintrp_l_d, ALL, gen_ff, gen_helper_ftintrp_l_d)
207
-TRANS(ftintrz_w_s, ALL, gen_ff, gen_helper_ftintrz_w_s)
208
-TRANS(ftintrz_w_d, ALL, gen_ff, gen_helper_ftintrz_w_d)
209
-TRANS(ftintrz_l_s, ALL, gen_ff, gen_helper_ftintrz_l_s)
210
-TRANS(ftintrz_l_d, ALL, gen_ff, gen_helper_ftintrz_l_d)
211
-TRANS(ftintrne_w_s, ALL, gen_ff, gen_helper_ftintrne_w_s)
212
-TRANS(ftintrne_w_d, ALL, gen_ff, gen_helper_ftintrne_w_d)
213
-TRANS(ftintrne_l_s, ALL, gen_ff, gen_helper_ftintrne_l_s)
214
-TRANS(ftintrne_l_d, ALL, gen_ff, gen_helper_ftintrne_l_d)
215
-TRANS(ftint_w_s, ALL, gen_ff, gen_helper_ftint_w_s)
216
-TRANS(ftint_w_d, ALL, gen_ff, gen_helper_ftint_w_d)
217
-TRANS(ftint_l_s, ALL, gen_ff, gen_helper_ftint_l_s)
218
-TRANS(ftint_l_d, ALL, gen_ff, gen_helper_ftint_l_d)
219
-TRANS(ffint_s_w, ALL, gen_ff, gen_helper_ffint_s_w)
220
-TRANS(ffint_s_l, ALL, gen_ff, gen_helper_ffint_s_l)
221
-TRANS(ffint_d_w, ALL, gen_ff, gen_helper_ffint_d_w)
222
-TRANS(ffint_d_l, ALL, gen_ff, gen_helper_ffint_d_l)
223
-TRANS(frint_s, ALL, gen_ff, gen_helper_frint_s)
224
-TRANS(frint_d, ALL, gen_ff, gen_helper_frint_d)
225
+TRANS(fcvt_s_d, FP_DP, gen_ff, gen_helper_fcvt_s_d)
226
+TRANS(fcvt_d_s, FP_DP, gen_ff, gen_helper_fcvt_d_s)
227
+TRANS(ftintrm_w_s, FP_SP, gen_ff, gen_helper_ftintrm_w_s)
228
+TRANS(ftintrm_w_d, FP_DP, gen_ff, gen_helper_ftintrm_w_d)
229
+TRANS(ftintrm_l_s, FP_SP, gen_ff, gen_helper_ftintrm_l_s)
230
+TRANS(ftintrm_l_d, FP_DP, gen_ff, gen_helper_ftintrm_l_d)
231
+TRANS(ftintrp_w_s, FP_SP, gen_ff, gen_helper_ftintrp_w_s)
232
+TRANS(ftintrp_w_d, FP_DP, gen_ff, gen_helper_ftintrp_w_d)
233
+TRANS(ftintrp_l_s, FP_SP, gen_ff, gen_helper_ftintrp_l_s)
234
+TRANS(ftintrp_l_d, FP_DP, gen_ff, gen_helper_ftintrp_l_d)
235
+TRANS(ftintrz_w_s, FP_SP, gen_ff, gen_helper_ftintrz_w_s)
236
+TRANS(ftintrz_w_d, FP_DP, gen_ff, gen_helper_ftintrz_w_d)
237
+TRANS(ftintrz_l_s, FP_SP, gen_ff, gen_helper_ftintrz_l_s)
238
+TRANS(ftintrz_l_d, FP_DP, gen_ff, gen_helper_ftintrz_l_d)
239
+TRANS(ftintrne_w_s, FP_SP, gen_ff, gen_helper_ftintrne_w_s)
240
+TRANS(ftintrne_w_d, FP_DP, gen_ff, gen_helper_ftintrne_w_d)
241
+TRANS(ftintrne_l_s, FP_SP, gen_ff, gen_helper_ftintrne_l_s)
242
+TRANS(ftintrne_l_d, FP_DP, gen_ff, gen_helper_ftintrne_l_d)
243
+TRANS(ftint_w_s, FP_SP, gen_ff, gen_helper_ftint_w_s)
244
+TRANS(ftint_w_d, FP_DP, gen_ff, gen_helper_ftint_w_d)
245
+TRANS(ftint_l_s, FP_SP, gen_ff, gen_helper_ftint_l_s)
246
+TRANS(ftint_l_d, FP_DP, gen_ff, gen_helper_ftint_l_d)
247
+TRANS(ffint_s_w, FP_SP, gen_ff, gen_helper_ffint_s_w)
248
+TRANS(ffint_s_l, FP_SP, gen_ff, gen_helper_ffint_s_l)
249
+TRANS(ffint_d_w, FP_DP, gen_ff, gen_helper_ffint_d_w)
250
+TRANS(ffint_d_l, FP_DP, gen_ff, gen_helper_ffint_d_l)
251
+TRANS(frint_s, FP_SP, gen_ff, gen_helper_frint_s)
252
+TRANS(frint_d, FP_DP, gen_ff, gen_helper_frint_d)
253
diff --git a/target/loongarch/insn_trans/trans_fmemory.c.inc b/target/loongarch/insn_trans/trans_fmemory.c.inc
254
index XXXXXXX..XXXXXXX 100644
255
--- a/target/loongarch/insn_trans/trans_fmemory.c.inc
256
+++ b/target/loongarch/insn_trans/trans_fmemory.c.inc
257
@@ -XXX,XX +XXX,XX @@ static bool gen_fstore_le(DisasContext *ctx, arg_frr *a, MemOp mop)
258
return true;
259
}
260
261
-TRANS(fld_s, ALL, gen_fload_i, MO_TEUL)
262
-TRANS(fst_s, ALL, gen_fstore_i, MO_TEUL)
263
-TRANS(fld_d, ALL, gen_fload_i, MO_TEUQ)
264
-TRANS(fst_d, ALL, gen_fstore_i, MO_TEUQ)
265
-TRANS(fldx_s, ALL, gen_floadx, MO_TEUL)
266
-TRANS(fldx_d, ALL, gen_floadx, MO_TEUQ)
267
-TRANS(fstx_s, ALL, gen_fstorex, MO_TEUL)
268
-TRANS(fstx_d, ALL, gen_fstorex, MO_TEUQ)
269
-TRANS(fldgt_s, ALL, gen_fload_gt, MO_TEUL)
270
-TRANS(fldgt_d, ALL, gen_fload_gt, MO_TEUQ)
271
-TRANS(fldle_s, ALL, gen_fload_le, MO_TEUL)
272
-TRANS(fldle_d, ALL, gen_fload_le, MO_TEUQ)
273
-TRANS(fstgt_s, ALL, gen_fstore_gt, MO_TEUL)
274
-TRANS(fstgt_d, ALL, gen_fstore_gt, MO_TEUQ)
275
-TRANS(fstle_s, ALL, gen_fstore_le, MO_TEUL)
276
-TRANS(fstle_d, ALL, gen_fstore_le, MO_TEUQ)
277
+TRANS(fld_s, FP_SP, gen_fload_i, MO_TEUL)
278
+TRANS(fst_s, FP_SP, gen_fstore_i, MO_TEUL)
279
+TRANS(fld_d, FP_DP, gen_fload_i, MO_TEUQ)
280
+TRANS(fst_d, FP_DP, gen_fstore_i, MO_TEUQ)
281
+TRANS(fldx_s, FP_SP, gen_floadx, MO_TEUL)
282
+TRANS(fldx_d, FP_DP, gen_floadx, MO_TEUQ)
283
+TRANS(fstx_s, FP_SP, gen_fstorex, MO_TEUL)
284
+TRANS(fstx_d, FP_DP, gen_fstorex, MO_TEUQ)
285
+TRANS(fldgt_s, FP_SP, gen_fload_gt, MO_TEUL)
286
+TRANS(fldgt_d, FP_DP, gen_fload_gt, MO_TEUQ)
287
+TRANS(fldle_s, FP_SP, gen_fload_le, MO_TEUL)
288
+TRANS(fldle_d, FP_DP, gen_fload_le, MO_TEUQ)
289
+TRANS(fstgt_s, FP_SP, gen_fstore_gt, MO_TEUL)
290
+TRANS(fstgt_d, FP_DP, gen_fstore_gt, MO_TEUQ)
291
+TRANS(fstle_s, FP_SP, gen_fstore_le, MO_TEUL)
292
+TRANS(fstle_d, FP_DP, gen_fstore_le, MO_TEUQ)
293
diff --git a/target/loongarch/insn_trans/trans_fmov.c.inc b/target/loongarch/insn_trans/trans_fmov.c.inc
294
index XXXXXXX..XXXXXXX 100644
295
--- a/target/loongarch/insn_trans/trans_fmov.c.inc
296
+++ b/target/loongarch/insn_trans/trans_fmov.c.inc
297
@@ -XXX,XX +XXX,XX @@ static bool trans_fsel(DisasContext *ctx, arg_fsel *a)
298
TCGv src2 = get_fpr(ctx, a->fk);
299
TCGv cond;
300
301
+ if (!avail_FP(ctx)) {
302
+ return false;
303
+ }
304
+
305
CHECK_FPE;
306
307
cond = tcg_temp_new();
308
@@ -XXX,XX +XXX,XX @@ static bool gen_r2f(DisasContext *ctx, arg_fr *a,
309
TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
310
TCGv dest = get_fpr(ctx, a->fd);
311
312
+ if (!avail_FP(ctx)) {
313
+ return false;
314
+ }
315
+
316
CHECK_FPE;
317
318
func(dest, src);
319
@@ -XXX,XX +XXX,XX @@ static bool gen_f2r(DisasContext *ctx, arg_rf *a,
320
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
321
TCGv src = get_fpr(ctx, a->fj);
322
323
+ if (!avail_FP(ctx)) {
324
+ return false;
325
+ }
326
+
327
CHECK_FPE;
328
329
func(dest, src);
330
@@ -XXX,XX +XXX,XX @@ static bool trans_movgr2fcsr(DisasContext *ctx, arg_movgr2fcsr *a)
331
uint32_t mask = fcsr_mask[a->fcsrd];
332
TCGv Rj = gpr_src(ctx, a->rj, EXT_NONE);
333
334
+ if (!avail_FP(ctx)) {
335
+ return false;
336
+ }
337
+
338
CHECK_FPE;
339
340
if (mask == UINT32_MAX) {
341
@@ -XXX,XX +XXX,XX @@ static bool trans_movfcsr2gr(DisasContext *ctx, arg_movfcsr2gr *a)
342
{
343
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
344
345
+ if (!avail_FP(ctx)) {
346
+ return false;
347
+ }
348
+
349
CHECK_FPE;
350
351
tcg_gen_ld32u_i64(dest, cpu_env, offsetof(CPULoongArchState, fcsr0));
352
@@ -XXX,XX +XXX,XX @@ static bool trans_movfr2cf(DisasContext *ctx, arg_movfr2cf *a)
353
TCGv t0;
354
TCGv src = get_fpr(ctx, a->fj);
355
356
+ if (!avail_FP(ctx)) {
357
+ return false;
358
+ }
359
+
360
CHECK_FPE;
361
362
t0 = tcg_temp_new();
363
@@ -XXX,XX +XXX,XX @@ static bool trans_movcf2fr(DisasContext *ctx, arg_movcf2fr *a)
364
{
365
TCGv dest = get_fpr(ctx, a->fd);
366
367
+ if (!avail_FP(ctx)) {
368
+ return false;
369
+ }
370
+
371
CHECK_FPE;
372
373
tcg_gen_ld8u_tl(dest, cpu_env,
374
@@ -XXX,XX +XXX,XX @@ static bool trans_movgr2cf(DisasContext *ctx, arg_movgr2cf *a)
375
{
376
TCGv t0;
377
378
+ if (!avail_FP(ctx)) {
379
+ return false;
380
+ }
381
+
382
CHECK_FPE;
383
384
t0 = tcg_temp_new();
385
@@ -XXX,XX +XXX,XX @@ static bool trans_movgr2cf(DisasContext *ctx, arg_movgr2cf *a)
386
387
static bool trans_movcf2gr(DisasContext *ctx, arg_movcf2gr *a)
388
{
389
+ if (!avail_FP(ctx)) {
390
+ return false;
391
+ }
392
+
393
CHECK_FPE;
394
395
tcg_gen_ld8u_tl(gpr_dst(ctx, a->rd, EXT_NONE), cpu_env,
396
@@ -XXX,XX +XXX,XX @@ static bool trans_movcf2gr(DisasContext *ctx, arg_movcf2gr *a)
397
return true;
398
}
399
400
-TRANS(fmov_s, ALL, gen_f2f, tcg_gen_mov_tl, true)
401
-TRANS(fmov_d, ALL, gen_f2f, tcg_gen_mov_tl, false)
402
-TRANS(movgr2fr_w, ALL, gen_r2f, gen_movgr2fr_w)
403
+TRANS(fmov_s, FP_SP, gen_f2f, tcg_gen_mov_tl, true)
404
+TRANS(fmov_d, FP_DP, gen_f2f, tcg_gen_mov_tl, false)
405
+TRANS(movgr2fr_w, FP_SP, gen_r2f, gen_movgr2fr_w)
406
TRANS(movgr2fr_d, 64, gen_r2f, tcg_gen_mov_tl)
407
-TRANS(movgr2frh_w, ALL, gen_r2f, gen_movgr2frh_w)
408
-TRANS(movfr2gr_s, ALL, gen_f2r, tcg_gen_ext32s_tl)
409
+TRANS(movgr2frh_w, FP_DP, gen_r2f, gen_movgr2frh_w)
410
+TRANS(movfr2gr_s, FP_SP, gen_f2r, tcg_gen_ext32s_tl)
411
TRANS(movfr2gr_d, 64, gen_f2r, tcg_gen_mov_tl)
412
-TRANS(movfrh2gr_s, ALL, gen_f2r, gen_movfrh2gr_s)
413
+TRANS(movfrh2gr_s, FP_DP, gen_f2r, gen_movfrh2gr_s)
414
diff --git a/target/loongarch/translate.c b/target/loongarch/translate.c
415
index XXXXXXX..XXXXXXX 100644
416
--- a/target/loongarch/translate.c
417
+++ b/target/loongarch/translate.c
418
@@ -XXX,XX +XXX,XX @@ static void loongarch_tr_init_disas_context(DisasContextBase *dcbase,
419
ctx->zero = tcg_constant_tl(0);
420
421
ctx->cpucfg1 = env->cpucfg[1];
422
+ ctx->cpucfg2 = env->cpucfg[2];
423
}
424
425
static void loongarch_tr_tb_start(DisasContextBase *dcbase, CPUState *cs)
426
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
427
index XXXXXXX..XXXXXXX 100644
428
--- a/target/loongarch/translate.h
429
+++ b/target/loongarch/translate.h
430
@@ -XXX,XX +XXX,XX @@
431
#define avail_ALL(C) true
432
#define avail_64(C) (FIELD_EX32((C)->cpucfg1, CPUCFG1, ARCH) == \
433
CPUCFG1_ARCH_LA64)
434
+#define avail_FP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP))
435
+#define avail_FP_SP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP_SP))
436
+#define avail_FP_DP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP_DP))
437
438
/*
439
* If an operation is being performed on less than TARGET_LONG_BITS,
440
@@ -XXX,XX +XXX,XX @@ typedef struct DisasContext {
441
bool la64; /* LoongArch64 mode */
442
bool va32; /* 32-bit virtual address */
443
uint32_t cpucfg1;
444
+ uint32_t cpucfg2;
445
} DisasContext;
446
447
void generate_exception(DisasContext *ctx, int excp);
448
--
449
2.39.1
diff view generated by jsdifflib
New patch
1
Signed-off-by: Song Gao <gaosong@loongson.cn>
2
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
3
Message-ID: <20230822032724.1353391-13-gaosong@loongson.cn>
4
Message-Id: <20230822071959.35620-7-philmd@linaro.org>
5
---
6
target/loongarch/insn_trans/trans_privileged.c.inc | 8 ++++++++
7
target/loongarch/translate.h | 1 +
8
2 files changed, 9 insertions(+)
1
9
10
diff --git a/target/loongarch/insn_trans/trans_privileged.c.inc b/target/loongarch/insn_trans/trans_privileged.c.inc
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/loongarch/insn_trans/trans_privileged.c.inc
13
+++ b/target/loongarch/insn_trans/trans_privileged.c.inc
14
@@ -XXX,XX +XXX,XX @@ static bool trans_ldpte(DisasContext *ctx, arg_ldpte *a)
15
TCGv_i32 mem_idx = tcg_constant_i32(ctx->mem_idx);
16
TCGv src1 = gpr_src(ctx, a->rj, EXT_NONE);
17
18
+ if (!avail_LSPW(ctx)) {
19
+ return true;
20
+ }
21
+
22
if (check_plv(ctx)) {
23
return false;
24
}
25
@@ -XXX,XX +XXX,XX @@ static bool trans_lddir(DisasContext *ctx, arg_lddir *a)
26
TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
27
TCGv dest = gpr_dst(ctx, a->rd, EXT_NONE);
28
29
+ if (!avail_LSPW(ctx)) {
30
+ return true;
31
+ }
32
+
33
if (check_plv(ctx)) {
34
return false;
35
}
36
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
37
index XXXXXXX..XXXXXXX 100644
38
--- a/target/loongarch/translate.h
39
+++ b/target/loongarch/translate.h
40
@@ -XXX,XX +XXX,XX @@
41
#define avail_FP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP))
42
#define avail_FP_SP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP_SP))
43
#define avail_FP_DP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP_DP))
44
+#define avail_LSPW(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LSPW))
45
46
/*
47
* If an operation is being performed on less than TARGET_LONG_BITS,
48
--
49
2.39.1
diff view generated by jsdifflib
New patch
1
Signed-off-by: Song Gao <gaosong@loongson.cn>
2
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
3
Message-ID: <20230822032724.1353391-14-gaosong@loongson.cn>
4
Message-Id: <20230822071959.35620-8-philmd@linaro.org>
5
---
6
.../loongarch/insn_trans/trans_atomic.c.inc | 72 +++++++++----------
7
target/loongarch/translate.h | 1 +
8
2 files changed, 37 insertions(+), 36 deletions(-)
1
9
10
diff --git a/target/loongarch/insn_trans/trans_atomic.c.inc b/target/loongarch/insn_trans/trans_atomic.c.inc
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/loongarch/insn_trans/trans_atomic.c.inc
13
+++ b/target/loongarch/insn_trans/trans_atomic.c.inc
14
@@ -XXX,XX +XXX,XX @@ TRANS(ll_w, ALL, gen_ll, MO_TESL)
15
TRANS(sc_w, ALL, gen_sc, MO_TESL)
16
TRANS(ll_d, 64, gen_ll, MO_TEUQ)
17
TRANS(sc_d, 64, gen_sc, MO_TEUQ)
18
-TRANS(amswap_w, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
19
-TRANS(amswap_d, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
20
-TRANS(amadd_w, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
21
-TRANS(amadd_d, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
22
-TRANS(amand_w, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
23
-TRANS(amand_d, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
24
-TRANS(amor_w, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
25
-TRANS(amor_d, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
26
-TRANS(amxor_w, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
27
-TRANS(amxor_d, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
28
-TRANS(ammax_w, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
29
-TRANS(ammax_d, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
30
-TRANS(ammin_w, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
31
-TRANS(ammin_d, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
32
-TRANS(ammax_wu, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
33
-TRANS(ammax_du, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
34
-TRANS(ammin_wu, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
35
-TRANS(ammin_du, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
36
-TRANS(amswap_db_w, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
37
-TRANS(amswap_db_d, 64, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
38
-TRANS(amadd_db_w, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
39
-TRANS(amadd_db_d, 64, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
40
-TRANS(amand_db_w, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
41
-TRANS(amand_db_d, 64, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
42
-TRANS(amor_db_w, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
43
-TRANS(amor_db_d, 64, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
44
-TRANS(amxor_db_w, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
45
-TRANS(amxor_db_d, 64, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
46
-TRANS(ammax_db_w, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
47
-TRANS(ammax_db_d, 64, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
48
-TRANS(ammin_db_w, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
49
-TRANS(ammin_db_d, 64, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
50
-TRANS(ammax_db_wu, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
51
-TRANS(ammax_db_du, 64, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
52
-TRANS(ammin_db_wu, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
53
-TRANS(ammin_db_du, 64, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
54
+TRANS(amswap_w, LAM, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
55
+TRANS(amswap_d, LAM, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
56
+TRANS(amadd_w, LAM, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
57
+TRANS(amadd_d, LAM, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
58
+TRANS(amand_w, LAM, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
59
+TRANS(amand_d, LAM, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
60
+TRANS(amor_w, LAM, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
61
+TRANS(amor_d, LAM, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
62
+TRANS(amxor_w, LAM, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
63
+TRANS(amxor_d, LAM, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
64
+TRANS(ammax_w, LAM, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
65
+TRANS(ammax_d, LAM, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
66
+TRANS(ammin_w, LAM, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
67
+TRANS(ammin_d, LAM, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
68
+TRANS(ammax_wu, LAM, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
69
+TRANS(ammax_du, LAM, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
70
+TRANS(ammin_wu, LAM, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
71
+TRANS(ammin_du, LAM, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
72
+TRANS(amswap_db_w, LAM, gen_am, tcg_gen_atomic_xchg_tl, MO_TESL)
73
+TRANS(amswap_db_d, LAM, gen_am, tcg_gen_atomic_xchg_tl, MO_TEUQ)
74
+TRANS(amadd_db_w, LAM, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TESL)
75
+TRANS(amadd_db_d, LAM, gen_am, tcg_gen_atomic_fetch_add_tl, MO_TEUQ)
76
+TRANS(amand_db_w, LAM, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TESL)
77
+TRANS(amand_db_d, LAM, gen_am, tcg_gen_atomic_fetch_and_tl, MO_TEUQ)
78
+TRANS(amor_db_w, LAM, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TESL)
79
+TRANS(amor_db_d, LAM, gen_am, tcg_gen_atomic_fetch_or_tl, MO_TEUQ)
80
+TRANS(amxor_db_w, LAM, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TESL)
81
+TRANS(amxor_db_d, LAM, gen_am, tcg_gen_atomic_fetch_xor_tl, MO_TEUQ)
82
+TRANS(ammax_db_w, LAM, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TESL)
83
+TRANS(ammax_db_d, LAM, gen_am, tcg_gen_atomic_fetch_smax_tl, MO_TEUQ)
84
+TRANS(ammin_db_w, LAM, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TESL)
85
+TRANS(ammin_db_d, LAM, gen_am, tcg_gen_atomic_fetch_smin_tl, MO_TEUQ)
86
+TRANS(ammax_db_wu, LAM, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TESL)
87
+TRANS(ammax_db_du, LAM, gen_am, tcg_gen_atomic_fetch_umax_tl, MO_TEUQ)
88
+TRANS(ammin_db_wu, LAM, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TESL)
89
+TRANS(ammin_db_du, LAM, gen_am, tcg_gen_atomic_fetch_umin_tl, MO_TEUQ)
90
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
91
index XXXXXXX..XXXXXXX 100644
92
--- a/target/loongarch/translate.h
93
+++ b/target/loongarch/translate.h
94
@@ -XXX,XX +XXX,XX @@
95
#define avail_FP_SP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP_SP))
96
#define avail_FP_DP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP_DP))
97
#define avail_LSPW(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LSPW))
98
+#define avail_LAM(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LAM))
99
100
/*
101
* If an operation is being performed on less than TARGET_LONG_BITS,
102
--
103
2.39.1
diff view generated by jsdifflib
New patch
1
Signed-off-by: Song Gao <gaosong@loongson.cn>
2
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
3
Message-ID: <20230822032724.1353391-15-gaosong@loongson.cn>
4
Message-Id: <20230822073026.35776-1-philmd@linaro.org>
5
---
6
target/loongarch/insn_trans/trans_lsx.c.inc | 1482 ++++++++++---------
7
target/loongarch/translate.h | 2 +
8
2 files changed, 823 insertions(+), 661 deletions(-)
1
9
10
diff --git a/target/loongarch/insn_trans/trans_lsx.c.inc b/target/loongarch/insn_trans/trans_lsx.c.inc
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/loongarch/insn_trans/trans_lsx.c.inc
13
+++ b/target/loongarch/insn_trans/trans_lsx.c.inc
14
@@ -XXX,XX +XXX,XX @@ static bool gvec_subi(DisasContext *ctx, arg_vv_i *a, MemOp mop)
15
return true;
16
}
17
18
-TRANS(vadd_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_add)
19
-TRANS(vadd_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_add)
20
-TRANS(vadd_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_add)
21
-TRANS(vadd_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_add)
22
+TRANS(vadd_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_add)
23
+TRANS(vadd_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_add)
24
+TRANS(vadd_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_add)
25
+TRANS(vadd_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_add)
26
27
#define VADDSUB_Q(NAME) \
28
static bool trans_v## NAME ##_q(DisasContext *ctx, arg_vvv *a) \
29
{ \
30
TCGv_i64 rh, rl, ah, al, bh, bl; \
31
\
32
+ if (!avail_LSX(ctx)) { \
33
+ return false; \
34
+ } \
35
+ \
36
CHECK_SXE; \
37
\
38
rh = tcg_temp_new_i64(); \
39
@@ -XXX,XX +XXX,XX @@ static bool trans_v## NAME ##_q(DisasContext *ctx, arg_vvv *a) \
40
VADDSUB_Q(add)
41
VADDSUB_Q(sub)
42
43
-TRANS(vsub_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_sub)
44
-TRANS(vsub_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_sub)
45
-TRANS(vsub_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_sub)
46
-TRANS(vsub_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_sub)
47
-
48
-TRANS(vaddi_bu, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_addi)
49
-TRANS(vaddi_hu, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_addi)
50
-TRANS(vaddi_wu, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_addi)
51
-TRANS(vaddi_du, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_addi)
52
-TRANS(vsubi_bu, ALL, gvec_subi, MO_8)
53
-TRANS(vsubi_hu, ALL, gvec_subi, MO_16)
54
-TRANS(vsubi_wu, ALL, gvec_subi, MO_32)
55
-TRANS(vsubi_du, ALL, gvec_subi, MO_64)
56
-
57
-TRANS(vneg_b, ALL, gvec_vv, MO_8, tcg_gen_gvec_neg)
58
-TRANS(vneg_h, ALL, gvec_vv, MO_16, tcg_gen_gvec_neg)
59
-TRANS(vneg_w, ALL, gvec_vv, MO_32, tcg_gen_gvec_neg)
60
-TRANS(vneg_d, ALL, gvec_vv, MO_64, tcg_gen_gvec_neg)
61
-
62
-TRANS(vsadd_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_ssadd)
63
-TRANS(vsadd_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_ssadd)
64
-TRANS(vsadd_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_ssadd)
65
-TRANS(vsadd_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_ssadd)
66
-TRANS(vsadd_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_usadd)
67
-TRANS(vsadd_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_usadd)
68
-TRANS(vsadd_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_usadd)
69
-TRANS(vsadd_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_usadd)
70
-TRANS(vssub_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_sssub)
71
-TRANS(vssub_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_sssub)
72
-TRANS(vssub_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_sssub)
73
-TRANS(vssub_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_sssub)
74
-TRANS(vssub_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_ussub)
75
-TRANS(vssub_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_ussub)
76
-TRANS(vssub_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_ussub)
77
-TRANS(vssub_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_ussub)
78
-
79
-TRANS(vhaddw_h_b, ALL, gen_vvv, gen_helper_vhaddw_h_b)
80
-TRANS(vhaddw_w_h, ALL, gen_vvv, gen_helper_vhaddw_w_h)
81
-TRANS(vhaddw_d_w, ALL, gen_vvv, gen_helper_vhaddw_d_w)
82
-TRANS(vhaddw_q_d, ALL, gen_vvv, gen_helper_vhaddw_q_d)
83
-TRANS(vhaddw_hu_bu, ALL, gen_vvv, gen_helper_vhaddw_hu_bu)
84
-TRANS(vhaddw_wu_hu, ALL, gen_vvv, gen_helper_vhaddw_wu_hu)
85
-TRANS(vhaddw_du_wu, ALL, gen_vvv, gen_helper_vhaddw_du_wu)
86
-TRANS(vhaddw_qu_du, ALL, gen_vvv, gen_helper_vhaddw_qu_du)
87
-TRANS(vhsubw_h_b, ALL, gen_vvv, gen_helper_vhsubw_h_b)
88
-TRANS(vhsubw_w_h, ALL, gen_vvv, gen_helper_vhsubw_w_h)
89
-TRANS(vhsubw_d_w, ALL, gen_vvv, gen_helper_vhsubw_d_w)
90
-TRANS(vhsubw_q_d, ALL, gen_vvv, gen_helper_vhsubw_q_d)
91
-TRANS(vhsubw_hu_bu, ALL, gen_vvv, gen_helper_vhsubw_hu_bu)
92
-TRANS(vhsubw_wu_hu, ALL, gen_vvv, gen_helper_vhsubw_wu_hu)
93
-TRANS(vhsubw_du_wu, ALL, gen_vvv, gen_helper_vhsubw_du_wu)
94
-TRANS(vhsubw_qu_du, ALL, gen_vvv, gen_helper_vhsubw_qu_du)
95
+TRANS(vsub_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_sub)
96
+TRANS(vsub_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_sub)
97
+TRANS(vsub_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_sub)
98
+TRANS(vsub_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_sub)
99
+
100
+TRANS(vaddi_bu, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_addi)
101
+TRANS(vaddi_hu, LSX, gvec_vv_i, MO_16, tcg_gen_gvec_addi)
102
+TRANS(vaddi_wu, LSX, gvec_vv_i, MO_32, tcg_gen_gvec_addi)
103
+TRANS(vaddi_du, LSX, gvec_vv_i, MO_64, tcg_gen_gvec_addi)
104
+TRANS(vsubi_bu, LSX, gvec_subi, MO_8)
105
+TRANS(vsubi_hu, LSX, gvec_subi, MO_16)
106
+TRANS(vsubi_wu, LSX, gvec_subi, MO_32)
107
+TRANS(vsubi_du, LSX, gvec_subi, MO_64)
108
+
109
+TRANS(vneg_b, LSX, gvec_vv, MO_8, tcg_gen_gvec_neg)
110
+TRANS(vneg_h, LSX, gvec_vv, MO_16, tcg_gen_gvec_neg)
111
+TRANS(vneg_w, LSX, gvec_vv, MO_32, tcg_gen_gvec_neg)
112
+TRANS(vneg_d, LSX, gvec_vv, MO_64, tcg_gen_gvec_neg)
113
+
114
+TRANS(vsadd_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_ssadd)
115
+TRANS(vsadd_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_ssadd)
116
+TRANS(vsadd_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_ssadd)
117
+TRANS(vsadd_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_ssadd)
118
+TRANS(vsadd_bu, LSX, gvec_vvv, MO_8, tcg_gen_gvec_usadd)
119
+TRANS(vsadd_hu, LSX, gvec_vvv, MO_16, tcg_gen_gvec_usadd)
120
+TRANS(vsadd_wu, LSX, gvec_vvv, MO_32, tcg_gen_gvec_usadd)
121
+TRANS(vsadd_du, LSX, gvec_vvv, MO_64, tcg_gen_gvec_usadd)
122
+TRANS(vssub_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_sssub)
123
+TRANS(vssub_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_sssub)
124
+TRANS(vssub_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_sssub)
125
+TRANS(vssub_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_sssub)
126
+TRANS(vssub_bu, LSX, gvec_vvv, MO_8, tcg_gen_gvec_ussub)
127
+TRANS(vssub_hu, LSX, gvec_vvv, MO_16, tcg_gen_gvec_ussub)
128
+TRANS(vssub_wu, LSX, gvec_vvv, MO_32, tcg_gen_gvec_ussub)
129
+TRANS(vssub_du, LSX, gvec_vvv, MO_64, tcg_gen_gvec_ussub)
130
+
131
+TRANS(vhaddw_h_b, LSX, gen_vvv, gen_helper_vhaddw_h_b)
132
+TRANS(vhaddw_w_h, LSX, gen_vvv, gen_helper_vhaddw_w_h)
133
+TRANS(vhaddw_d_w, LSX, gen_vvv, gen_helper_vhaddw_d_w)
134
+TRANS(vhaddw_q_d, LSX, gen_vvv, gen_helper_vhaddw_q_d)
135
+TRANS(vhaddw_hu_bu, LSX, gen_vvv, gen_helper_vhaddw_hu_bu)
136
+TRANS(vhaddw_wu_hu, LSX, gen_vvv, gen_helper_vhaddw_wu_hu)
137
+TRANS(vhaddw_du_wu, LSX, gen_vvv, gen_helper_vhaddw_du_wu)
138
+TRANS(vhaddw_qu_du, LSX, gen_vvv, gen_helper_vhaddw_qu_du)
139
+TRANS(vhsubw_h_b, LSX, gen_vvv, gen_helper_vhsubw_h_b)
140
+TRANS(vhsubw_w_h, LSX, gen_vvv, gen_helper_vhsubw_w_h)
141
+TRANS(vhsubw_d_w, LSX, gen_vvv, gen_helper_vhsubw_d_w)
142
+TRANS(vhsubw_q_d, LSX, gen_vvv, gen_helper_vhsubw_q_d)
143
+TRANS(vhsubw_hu_bu, LSX, gen_vvv, gen_helper_vhsubw_hu_bu)
144
+TRANS(vhsubw_wu_hu, LSX, gen_vvv, gen_helper_vhsubw_wu_hu)
145
+TRANS(vhsubw_du_wu, LSX, gen_vvv, gen_helper_vhsubw_du_wu)
146
+TRANS(vhsubw_qu_du, LSX, gen_vvv, gen_helper_vhsubw_qu_du)
147
148
static void gen_vaddwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
149
{
150
@@ -XXX,XX +XXX,XX @@ static void do_vaddwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
151
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
152
}
153
154
-TRANS(vaddwev_h_b, ALL, gvec_vvv, MO_8, do_vaddwev_s)
155
-TRANS(vaddwev_w_h, ALL, gvec_vvv, MO_16, do_vaddwev_s)
156
-TRANS(vaddwev_d_w, ALL, gvec_vvv, MO_32, do_vaddwev_s)
157
-TRANS(vaddwev_q_d, ALL, gvec_vvv, MO_64, do_vaddwev_s)
158
+TRANS(vaddwev_h_b, LSX, gvec_vvv, MO_8, do_vaddwev_s)
159
+TRANS(vaddwev_w_h, LSX, gvec_vvv, MO_16, do_vaddwev_s)
160
+TRANS(vaddwev_d_w, LSX, gvec_vvv, MO_32, do_vaddwev_s)
161
+TRANS(vaddwev_q_d, LSX, gvec_vvv, MO_64, do_vaddwev_s)
162
163
static void gen_vaddwod_w_h(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
164
{
165
@@ -XXX,XX +XXX,XX @@ static void do_vaddwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
166
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
167
}
168
169
-TRANS(vaddwod_h_b, ALL, gvec_vvv, MO_8, do_vaddwod_s)
170
-TRANS(vaddwod_w_h, ALL, gvec_vvv, MO_16, do_vaddwod_s)
171
-TRANS(vaddwod_d_w, ALL, gvec_vvv, MO_32, do_vaddwod_s)
172
-TRANS(vaddwod_q_d, ALL, gvec_vvv, MO_64, do_vaddwod_s)
173
+TRANS(vaddwod_h_b, LSX, gvec_vvv, MO_8, do_vaddwod_s)
174
+TRANS(vaddwod_w_h, LSX, gvec_vvv, MO_16, do_vaddwod_s)
175
+TRANS(vaddwod_d_w, LSX, gvec_vvv, MO_32, do_vaddwod_s)
176
+TRANS(vaddwod_q_d, LSX, gvec_vvv, MO_64, do_vaddwod_s)
177
178
static void gen_vsubwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
179
{
180
@@ -XXX,XX +XXX,XX @@ static void do_vsubwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
181
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
182
}
183
184
-TRANS(vsubwev_h_b, ALL, gvec_vvv, MO_8, do_vsubwev_s)
185
-TRANS(vsubwev_w_h, ALL, gvec_vvv, MO_16, do_vsubwev_s)
186
-TRANS(vsubwev_d_w, ALL, gvec_vvv, MO_32, do_vsubwev_s)
187
-TRANS(vsubwev_q_d, ALL, gvec_vvv, MO_64, do_vsubwev_s)
188
+TRANS(vsubwev_h_b, LSX, gvec_vvv, MO_8, do_vsubwev_s)
189
+TRANS(vsubwev_w_h, LSX, gvec_vvv, MO_16, do_vsubwev_s)
190
+TRANS(vsubwev_d_w, LSX, gvec_vvv, MO_32, do_vsubwev_s)
191
+TRANS(vsubwev_q_d, LSX, gvec_vvv, MO_64, do_vsubwev_s)
192
193
static void gen_vsubwod_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
194
{
195
@@ -XXX,XX +XXX,XX @@ static void do_vsubwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
196
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
197
}
198
199
-TRANS(vsubwod_h_b, ALL, gvec_vvv, MO_8, do_vsubwod_s)
200
-TRANS(vsubwod_w_h, ALL, gvec_vvv, MO_16, do_vsubwod_s)
201
-TRANS(vsubwod_d_w, ALL, gvec_vvv, MO_32, do_vsubwod_s)
202
-TRANS(vsubwod_q_d, ALL, gvec_vvv, MO_64, do_vsubwod_s)
203
+TRANS(vsubwod_h_b, LSX, gvec_vvv, MO_8, do_vsubwod_s)
204
+TRANS(vsubwod_w_h, LSX, gvec_vvv, MO_16, do_vsubwod_s)
205
+TRANS(vsubwod_d_w, LSX, gvec_vvv, MO_32, do_vsubwod_s)
206
+TRANS(vsubwod_q_d, LSX, gvec_vvv, MO_64, do_vsubwod_s)
207
208
static void gen_vaddwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
209
{
210
@@ -XXX,XX +XXX,XX @@ static void do_vaddwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
211
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
212
}
213
214
-TRANS(vaddwev_h_bu, ALL, gvec_vvv, MO_8, do_vaddwev_u)
215
-TRANS(vaddwev_w_hu, ALL, gvec_vvv, MO_16, do_vaddwev_u)
216
-TRANS(vaddwev_d_wu, ALL, gvec_vvv, MO_32, do_vaddwev_u)
217
-TRANS(vaddwev_q_du, ALL, gvec_vvv, MO_64, do_vaddwev_u)
218
+TRANS(vaddwev_h_bu, LSX, gvec_vvv, MO_8, do_vaddwev_u)
219
+TRANS(vaddwev_w_hu, LSX, gvec_vvv, MO_16, do_vaddwev_u)
220
+TRANS(vaddwev_d_wu, LSX, gvec_vvv, MO_32, do_vaddwev_u)
221
+TRANS(vaddwev_q_du, LSX, gvec_vvv, MO_64, do_vaddwev_u)
222
223
static void gen_vaddwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
224
{
225
@@ -XXX,XX +XXX,XX @@ static void do_vaddwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
226
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
227
}
228
229
-TRANS(vaddwod_h_bu, ALL, gvec_vvv, MO_8, do_vaddwod_u)
230
-TRANS(vaddwod_w_hu, ALL, gvec_vvv, MO_16, do_vaddwod_u)
231
-TRANS(vaddwod_d_wu, ALL, gvec_vvv, MO_32, do_vaddwod_u)
232
-TRANS(vaddwod_q_du, ALL, gvec_vvv, MO_64, do_vaddwod_u)
233
+TRANS(vaddwod_h_bu, LSX, gvec_vvv, MO_8, do_vaddwod_u)
234
+TRANS(vaddwod_w_hu, LSX, gvec_vvv, MO_16, do_vaddwod_u)
235
+TRANS(vaddwod_d_wu, LSX, gvec_vvv, MO_32, do_vaddwod_u)
236
+TRANS(vaddwod_q_du, LSX, gvec_vvv, MO_64, do_vaddwod_u)
237
238
static void gen_vsubwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
239
{
240
@@ -XXX,XX +XXX,XX @@ static void do_vsubwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
241
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
242
}
243
244
-TRANS(vsubwev_h_bu, ALL, gvec_vvv, MO_8, do_vsubwev_u)
245
-TRANS(vsubwev_w_hu, ALL, gvec_vvv, MO_16, do_vsubwev_u)
246
-TRANS(vsubwev_d_wu, ALL, gvec_vvv, MO_32, do_vsubwev_u)
247
-TRANS(vsubwev_q_du, ALL, gvec_vvv, MO_64, do_vsubwev_u)
248
+TRANS(vsubwev_h_bu, LSX, gvec_vvv, MO_8, do_vsubwev_u)
249
+TRANS(vsubwev_w_hu, LSX, gvec_vvv, MO_16, do_vsubwev_u)
250
+TRANS(vsubwev_d_wu, LSX, gvec_vvv, MO_32, do_vsubwev_u)
251
+TRANS(vsubwev_q_du, LSX, gvec_vvv, MO_64, do_vsubwev_u)
252
253
static void gen_vsubwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
254
{
255
@@ -XXX,XX +XXX,XX @@ static void do_vsubwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
256
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
257
}
258
259
-TRANS(vsubwod_h_bu, ALL, gvec_vvv, MO_8, do_vsubwod_u)
260
-TRANS(vsubwod_w_hu, ALL, gvec_vvv, MO_16, do_vsubwod_u)
261
-TRANS(vsubwod_d_wu, ALL, gvec_vvv, MO_32, do_vsubwod_u)
262
-TRANS(vsubwod_q_du, ALL, gvec_vvv, MO_64, do_vsubwod_u)
263
+TRANS(vsubwod_h_bu, LSX, gvec_vvv, MO_8, do_vsubwod_u)
264
+TRANS(vsubwod_w_hu, LSX, gvec_vvv, MO_16, do_vsubwod_u)
265
+TRANS(vsubwod_d_wu, LSX, gvec_vvv, MO_32, do_vsubwod_u)
266
+TRANS(vsubwod_q_du, LSX, gvec_vvv, MO_64, do_vsubwod_u)
267
268
static void gen_vaddwev_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
269
{
270
@@ -XXX,XX +XXX,XX @@ static void do_vaddwev_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
271
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
272
}
273
274
-TRANS(vaddwev_h_bu_b, ALL, gvec_vvv, MO_8, do_vaddwev_u_s)
275
-TRANS(vaddwev_w_hu_h, ALL, gvec_vvv, MO_16, do_vaddwev_u_s)
276
-TRANS(vaddwev_d_wu_w, ALL, gvec_vvv, MO_32, do_vaddwev_u_s)
277
-TRANS(vaddwev_q_du_d, ALL, gvec_vvv, MO_64, do_vaddwev_u_s)
278
+TRANS(vaddwev_h_bu_b, LSX, gvec_vvv, MO_8, do_vaddwev_u_s)
279
+TRANS(vaddwev_w_hu_h, LSX, gvec_vvv, MO_16, do_vaddwev_u_s)
280
+TRANS(vaddwev_d_wu_w, LSX, gvec_vvv, MO_32, do_vaddwev_u_s)
281
+TRANS(vaddwev_q_du_d, LSX, gvec_vvv, MO_64, do_vaddwev_u_s)
282
283
static void gen_vaddwod_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
284
{
285
@@ -XXX,XX +XXX,XX @@ static void do_vaddwod_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
286
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
287
}
288
289
-TRANS(vaddwod_h_bu_b, ALL, gvec_vvv, MO_8, do_vaddwod_u_s)
290
-TRANS(vaddwod_w_hu_h, ALL, gvec_vvv, MO_16, do_vaddwod_u_s)
291
-TRANS(vaddwod_d_wu_w, ALL, gvec_vvv, MO_32, do_vaddwod_u_s)
292
-TRANS(vaddwod_q_du_d, ALL, gvec_vvv, MO_64, do_vaddwod_u_s)
293
+TRANS(vaddwod_h_bu_b, LSX, gvec_vvv, MO_8, do_vaddwod_u_s)
294
+TRANS(vaddwod_w_hu_h, LSX, gvec_vvv, MO_16, do_vaddwod_u_s)
295
+TRANS(vaddwod_d_wu_w, LSX, gvec_vvv, MO_32, do_vaddwod_u_s)
296
+TRANS(vaddwod_q_du_d, LSX, gvec_vvv, MO_64, do_vaddwod_u_s)
297
298
static void do_vavg(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
299
void (*gen_shr_vec)(unsigned, TCGv_vec,
300
@@ -XXX,XX +XXX,XX @@ static void do_vavg_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
301
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
302
}
303
304
-TRANS(vavg_b, ALL, gvec_vvv, MO_8, do_vavg_s)
305
-TRANS(vavg_h, ALL, gvec_vvv, MO_16, do_vavg_s)
306
-TRANS(vavg_w, ALL, gvec_vvv, MO_32, do_vavg_s)
307
-TRANS(vavg_d, ALL, gvec_vvv, MO_64, do_vavg_s)
308
-TRANS(vavg_bu, ALL, gvec_vvv, MO_8, do_vavg_u)
309
-TRANS(vavg_hu, ALL, gvec_vvv, MO_16, do_vavg_u)
310
-TRANS(vavg_wu, ALL, gvec_vvv, MO_32, do_vavg_u)
311
-TRANS(vavg_du, ALL, gvec_vvv, MO_64, do_vavg_u)
312
+TRANS(vavg_b, LSX, gvec_vvv, MO_8, do_vavg_s)
313
+TRANS(vavg_h, LSX, gvec_vvv, MO_16, do_vavg_s)
314
+TRANS(vavg_w, LSX, gvec_vvv, MO_32, do_vavg_s)
315
+TRANS(vavg_d, LSX, gvec_vvv, MO_64, do_vavg_s)
316
+TRANS(vavg_bu, LSX, gvec_vvv, MO_8, do_vavg_u)
317
+TRANS(vavg_hu, LSX, gvec_vvv, MO_16, do_vavg_u)
318
+TRANS(vavg_wu, LSX, gvec_vvv, MO_32, do_vavg_u)
319
+TRANS(vavg_du, LSX, gvec_vvv, MO_64, do_vavg_u)
320
321
static void do_vavgr_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
322
uint32_t vk_ofs, uint32_t oprsz, uint32_t maxsz)
323
@@ -XXX,XX +XXX,XX @@ static void do_vavgr_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
324
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
325
}
326
327
-TRANS(vavgr_b, ALL, gvec_vvv, MO_8, do_vavgr_s)
328
-TRANS(vavgr_h, ALL, gvec_vvv, MO_16, do_vavgr_s)
329
-TRANS(vavgr_w, ALL, gvec_vvv, MO_32, do_vavgr_s)
330
-TRANS(vavgr_d, ALL, gvec_vvv, MO_64, do_vavgr_s)
331
-TRANS(vavgr_bu, ALL, gvec_vvv, MO_8, do_vavgr_u)
332
-TRANS(vavgr_hu, ALL, gvec_vvv, MO_16, do_vavgr_u)
333
-TRANS(vavgr_wu, ALL, gvec_vvv, MO_32, do_vavgr_u)
334
-TRANS(vavgr_du, ALL, gvec_vvv, MO_64, do_vavgr_u)
335
+TRANS(vavgr_b, LSX, gvec_vvv, MO_8, do_vavgr_s)
336
+TRANS(vavgr_h, LSX, gvec_vvv, MO_16, do_vavgr_s)
337
+TRANS(vavgr_w, LSX, gvec_vvv, MO_32, do_vavgr_s)
338
+TRANS(vavgr_d, LSX, gvec_vvv, MO_64, do_vavgr_s)
339
+TRANS(vavgr_bu, LSX, gvec_vvv, MO_8, do_vavgr_u)
340
+TRANS(vavgr_hu, LSX, gvec_vvv, MO_16, do_vavgr_u)
341
+TRANS(vavgr_wu, LSX, gvec_vvv, MO_32, do_vavgr_u)
342
+TRANS(vavgr_du, LSX, gvec_vvv, MO_64, do_vavgr_u)
343
344
static void gen_vabsd_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
345
{
346
@@ -XXX,XX +XXX,XX @@ static void do_vabsd_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
347
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
348
}
349
350
-TRANS(vabsd_b, ALL, gvec_vvv, MO_8, do_vabsd_s)
351
-TRANS(vabsd_h, ALL, gvec_vvv, MO_16, do_vabsd_s)
352
-TRANS(vabsd_w, ALL, gvec_vvv, MO_32, do_vabsd_s)
353
-TRANS(vabsd_d, ALL, gvec_vvv, MO_64, do_vabsd_s)
354
-TRANS(vabsd_bu, ALL, gvec_vvv, MO_8, do_vabsd_u)
355
-TRANS(vabsd_hu, ALL, gvec_vvv, MO_16, do_vabsd_u)
356
-TRANS(vabsd_wu, ALL, gvec_vvv, MO_32, do_vabsd_u)
357
-TRANS(vabsd_du, ALL, gvec_vvv, MO_64, do_vabsd_u)
358
+TRANS(vabsd_b, LSX, gvec_vvv, MO_8, do_vabsd_s)
359
+TRANS(vabsd_h, LSX, gvec_vvv, MO_16, do_vabsd_s)
360
+TRANS(vabsd_w, LSX, gvec_vvv, MO_32, do_vabsd_s)
361
+TRANS(vabsd_d, LSX, gvec_vvv, MO_64, do_vabsd_s)
362
+TRANS(vabsd_bu, LSX, gvec_vvv, MO_8, do_vabsd_u)
363
+TRANS(vabsd_hu, LSX, gvec_vvv, MO_16, do_vabsd_u)
364
+TRANS(vabsd_wu, LSX, gvec_vvv, MO_32, do_vabsd_u)
365
+TRANS(vabsd_du, LSX, gvec_vvv, MO_64, do_vabsd_u)
366
367
static void gen_vadda(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
368
{
369
@@ -XXX,XX +XXX,XX @@ static void do_vadda(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
370
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
371
}
372
373
-TRANS(vadda_b, ALL, gvec_vvv, MO_8, do_vadda)
374
-TRANS(vadda_h, ALL, gvec_vvv, MO_16, do_vadda)
375
-TRANS(vadda_w, ALL, gvec_vvv, MO_32, do_vadda)
376
-TRANS(vadda_d, ALL, gvec_vvv, MO_64, do_vadda)
377
-
378
-TRANS(vmax_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_smax)
379
-TRANS(vmax_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_smax)
380
-TRANS(vmax_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_smax)
381
-TRANS(vmax_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_smax)
382
-TRANS(vmax_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_umax)
383
-TRANS(vmax_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_umax)
384
-TRANS(vmax_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_umax)
385
-TRANS(vmax_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_umax)
386
-
387
-TRANS(vmin_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_smin)
388
-TRANS(vmin_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_smin)
389
-TRANS(vmin_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_smin)
390
-TRANS(vmin_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_smin)
391
-TRANS(vmin_bu, ALL, gvec_vvv, MO_8, tcg_gen_gvec_umin)
392
-TRANS(vmin_hu, ALL, gvec_vvv, MO_16, tcg_gen_gvec_umin)
393
-TRANS(vmin_wu, ALL, gvec_vvv, MO_32, tcg_gen_gvec_umin)
394
-TRANS(vmin_du, ALL, gvec_vvv, MO_64, tcg_gen_gvec_umin)
395
+TRANS(vadda_b, LSX, gvec_vvv, MO_8, do_vadda)
396
+TRANS(vadda_h, LSX, gvec_vvv, MO_16, do_vadda)
397
+TRANS(vadda_w, LSX, gvec_vvv, MO_32, do_vadda)
398
+TRANS(vadda_d, LSX, gvec_vvv, MO_64, do_vadda)
399
+
400
+TRANS(vmax_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_smax)
401
+TRANS(vmax_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_smax)
402
+TRANS(vmax_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_smax)
403
+TRANS(vmax_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_smax)
404
+TRANS(vmax_bu, LSX, gvec_vvv, MO_8, tcg_gen_gvec_umax)
405
+TRANS(vmax_hu, LSX, gvec_vvv, MO_16, tcg_gen_gvec_umax)
406
+TRANS(vmax_wu, LSX, gvec_vvv, MO_32, tcg_gen_gvec_umax)
407
+TRANS(vmax_du, LSX, gvec_vvv, MO_64, tcg_gen_gvec_umax)
408
+
409
+TRANS(vmin_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_smin)
410
+TRANS(vmin_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_smin)
411
+TRANS(vmin_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_smin)
412
+TRANS(vmin_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_smin)
413
+TRANS(vmin_bu, LSX, gvec_vvv, MO_8, tcg_gen_gvec_umin)
414
+TRANS(vmin_hu, LSX, gvec_vvv, MO_16, tcg_gen_gvec_umin)
415
+TRANS(vmin_wu, LSX, gvec_vvv, MO_32, tcg_gen_gvec_umin)
416
+TRANS(vmin_du, LSX, gvec_vvv, MO_64, tcg_gen_gvec_umin)
417
418
static void gen_vmini_s(unsigned vece, TCGv_vec t, TCGv_vec a, int64_t imm)
419
{
420
@@ -XXX,XX +XXX,XX @@ static void do_vmini_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
421
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
422
}
423
424
-TRANS(vmini_b, ALL, gvec_vv_i, MO_8, do_vmini_s)
425
-TRANS(vmini_h, ALL, gvec_vv_i, MO_16, do_vmini_s)
426
-TRANS(vmini_w, ALL, gvec_vv_i, MO_32, do_vmini_s)
427
-TRANS(vmini_d, ALL, gvec_vv_i, MO_64, do_vmini_s)
428
-TRANS(vmini_bu, ALL, gvec_vv_i, MO_8, do_vmini_u)
429
-TRANS(vmini_hu, ALL, gvec_vv_i, MO_16, do_vmini_u)
430
-TRANS(vmini_wu, ALL, gvec_vv_i, MO_32, do_vmini_u)
431
-TRANS(vmini_du, ALL, gvec_vv_i, MO_64, do_vmini_u)
432
+TRANS(vmini_b, LSX, gvec_vv_i, MO_8, do_vmini_s)
433
+TRANS(vmini_h, LSX, gvec_vv_i, MO_16, do_vmini_s)
434
+TRANS(vmini_w, LSX, gvec_vv_i, MO_32, do_vmini_s)
435
+TRANS(vmini_d, LSX, gvec_vv_i, MO_64, do_vmini_s)
436
+TRANS(vmini_bu, LSX, gvec_vv_i, MO_8, do_vmini_u)
437
+TRANS(vmini_hu, LSX, gvec_vv_i, MO_16, do_vmini_u)
438
+TRANS(vmini_wu, LSX, gvec_vv_i, MO_32, do_vmini_u)
439
+TRANS(vmini_du, LSX, gvec_vv_i, MO_64, do_vmini_u)
440
441
static void do_vmaxi_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
442
int64_t imm, uint32_t oprsz, uint32_t maxsz)
443
@@ -XXX,XX +XXX,XX @@ static void do_vmaxi_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
444
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
445
}
446
447
-TRANS(vmaxi_b, ALL, gvec_vv_i, MO_8, do_vmaxi_s)
448
-TRANS(vmaxi_h, ALL, gvec_vv_i, MO_16, do_vmaxi_s)
449
-TRANS(vmaxi_w, ALL, gvec_vv_i, MO_32, do_vmaxi_s)
450
-TRANS(vmaxi_d, ALL, gvec_vv_i, MO_64, do_vmaxi_s)
451
-TRANS(vmaxi_bu, ALL, gvec_vv_i, MO_8, do_vmaxi_u)
452
-TRANS(vmaxi_hu, ALL, gvec_vv_i, MO_16, do_vmaxi_u)
453
-TRANS(vmaxi_wu, ALL, gvec_vv_i, MO_32, do_vmaxi_u)
454
-TRANS(vmaxi_du, ALL, gvec_vv_i, MO_64, do_vmaxi_u)
455
+TRANS(vmaxi_b, LSX, gvec_vv_i, MO_8, do_vmaxi_s)
456
+TRANS(vmaxi_h, LSX, gvec_vv_i, MO_16, do_vmaxi_s)
457
+TRANS(vmaxi_w, LSX, gvec_vv_i, MO_32, do_vmaxi_s)
458
+TRANS(vmaxi_d, LSX, gvec_vv_i, MO_64, do_vmaxi_s)
459
+TRANS(vmaxi_bu, LSX, gvec_vv_i, MO_8, do_vmaxi_u)
460
+TRANS(vmaxi_hu, LSX, gvec_vv_i, MO_16, do_vmaxi_u)
461
+TRANS(vmaxi_wu, LSX, gvec_vv_i, MO_32, do_vmaxi_u)
462
+TRANS(vmaxi_du, LSX, gvec_vv_i, MO_64, do_vmaxi_u)
463
464
-TRANS(vmul_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_mul)
465
-TRANS(vmul_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_mul)
466
-TRANS(vmul_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_mul)
467
-TRANS(vmul_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_mul)
468
+TRANS(vmul_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_mul)
469
+TRANS(vmul_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_mul)
470
+TRANS(vmul_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_mul)
471
+TRANS(vmul_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_mul)
472
473
static void gen_vmuh_w(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
474
{
475
@@ -XXX,XX +XXX,XX @@ static void do_vmuh_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
476
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
477
}
478
479
-TRANS(vmuh_b, ALL, gvec_vvv, MO_8, do_vmuh_s)
480
-TRANS(vmuh_h, ALL, gvec_vvv, MO_16, do_vmuh_s)
481
-TRANS(vmuh_w, ALL, gvec_vvv, MO_32, do_vmuh_s)
482
-TRANS(vmuh_d, ALL, gvec_vvv, MO_64, do_vmuh_s)
483
+TRANS(vmuh_b, LSX, gvec_vvv, MO_8, do_vmuh_s)
484
+TRANS(vmuh_h, LSX, gvec_vvv, MO_16, do_vmuh_s)
485
+TRANS(vmuh_w, LSX, gvec_vvv, MO_32, do_vmuh_s)
486
+TRANS(vmuh_d, LSX, gvec_vvv, MO_64, do_vmuh_s)
487
488
static void gen_vmuh_wu(TCGv_i32 t, TCGv_i32 a, TCGv_i32 b)
489
{
490
@@ -XXX,XX +XXX,XX @@ static void do_vmuh_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
491
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
492
}
493
494
-TRANS(vmuh_bu, ALL, gvec_vvv, MO_8, do_vmuh_u)
495
-TRANS(vmuh_hu, ALL, gvec_vvv, MO_16, do_vmuh_u)
496
-TRANS(vmuh_wu, ALL, gvec_vvv, MO_32, do_vmuh_u)
497
-TRANS(vmuh_du, ALL, gvec_vvv, MO_64, do_vmuh_u)
498
+TRANS(vmuh_bu, LSX, gvec_vvv, MO_8, do_vmuh_u)
499
+TRANS(vmuh_hu, LSX, gvec_vvv, MO_16, do_vmuh_u)
500
+TRANS(vmuh_wu, LSX, gvec_vvv, MO_32, do_vmuh_u)
501
+TRANS(vmuh_du, LSX, gvec_vvv, MO_64, do_vmuh_u)
502
503
static void gen_vmulwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
504
{
505
@@ -XXX,XX +XXX,XX @@ static void do_vmulwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
506
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
507
}
508
509
-TRANS(vmulwev_h_b, ALL, gvec_vvv, MO_8, do_vmulwev_s)
510
-TRANS(vmulwev_w_h, ALL, gvec_vvv, MO_16, do_vmulwev_s)
511
-TRANS(vmulwev_d_w, ALL, gvec_vvv, MO_32, do_vmulwev_s)
512
+TRANS(vmulwev_h_b, LSX, gvec_vvv, MO_8, do_vmulwev_s)
513
+TRANS(vmulwev_w_h, LSX, gvec_vvv, MO_16, do_vmulwev_s)
514
+TRANS(vmulwev_d_w, LSX, gvec_vvv, MO_32, do_vmulwev_s)
515
516
static void tcg_gen_mulus2_i64(TCGv_i64 rl, TCGv_i64 rh,
517
TCGv_i64 arg1, TCGv_i64 arg2)
518
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_vvv *a) \
519
{ \
520
TCGv_i64 rh, rl, arg1, arg2; \
521
\
522
+ if (!avail_LSX(ctx)) { \
523
+ return false; \
524
+ } \
525
+ \
526
rh = tcg_temp_new_i64(); \
527
rl = tcg_temp_new_i64(); \
528
arg1 = tcg_temp_new_i64(); \
529
@@ -XXX,XX +XXX,XX @@ static void do_vmulwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
530
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
531
}
532
533
-TRANS(vmulwod_h_b, ALL, gvec_vvv, MO_8, do_vmulwod_s)
534
-TRANS(vmulwod_w_h, ALL, gvec_vvv, MO_16, do_vmulwod_s)
535
-TRANS(vmulwod_d_w, ALL, gvec_vvv, MO_32, do_vmulwod_s)
536
+TRANS(vmulwod_h_b, LSX, gvec_vvv, MO_8, do_vmulwod_s)
537
+TRANS(vmulwod_w_h, LSX, gvec_vvv, MO_16, do_vmulwod_s)
538
+TRANS(vmulwod_d_w, LSX, gvec_vvv, MO_32, do_vmulwod_s)
539
540
static void gen_vmulwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
541
{
542
@@ -XXX,XX +XXX,XX @@ static void do_vmulwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
543
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
544
}
545
546
-TRANS(vmulwev_h_bu, ALL, gvec_vvv, MO_8, do_vmulwev_u)
547
-TRANS(vmulwev_w_hu, ALL, gvec_vvv, MO_16, do_vmulwev_u)
548
-TRANS(vmulwev_d_wu, ALL, gvec_vvv, MO_32, do_vmulwev_u)
549
+TRANS(vmulwev_h_bu, LSX, gvec_vvv, MO_8, do_vmulwev_u)
550
+TRANS(vmulwev_w_hu, LSX, gvec_vvv, MO_16, do_vmulwev_u)
551
+TRANS(vmulwev_d_wu, LSX, gvec_vvv, MO_32, do_vmulwev_u)
552
553
static void gen_vmulwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
554
{
555
@@ -XXX,XX +XXX,XX @@ static void do_vmulwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
556
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
557
}
558
559
-TRANS(vmulwod_h_bu, ALL, gvec_vvv, MO_8, do_vmulwod_u)
560
-TRANS(vmulwod_w_hu, ALL, gvec_vvv, MO_16, do_vmulwod_u)
561
-TRANS(vmulwod_d_wu, ALL, gvec_vvv, MO_32, do_vmulwod_u)
562
+TRANS(vmulwod_h_bu, LSX, gvec_vvv, MO_8, do_vmulwod_u)
563
+TRANS(vmulwod_w_hu, LSX, gvec_vvv, MO_16, do_vmulwod_u)
564
+TRANS(vmulwod_d_wu, LSX, gvec_vvv, MO_32, do_vmulwod_u)
565
566
static void gen_vmulwev_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
567
{
568
@@ -XXX,XX +XXX,XX @@ static void do_vmulwev_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
569
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
570
}
571
572
-TRANS(vmulwev_h_bu_b, ALL, gvec_vvv, MO_8, do_vmulwev_u_s)
573
-TRANS(vmulwev_w_hu_h, ALL, gvec_vvv, MO_16, do_vmulwev_u_s)
574
-TRANS(vmulwev_d_wu_w, ALL, gvec_vvv, MO_32, do_vmulwev_u_s)
575
+TRANS(vmulwev_h_bu_b, LSX, gvec_vvv, MO_8, do_vmulwev_u_s)
576
+TRANS(vmulwev_w_hu_h, LSX, gvec_vvv, MO_16, do_vmulwev_u_s)
577
+TRANS(vmulwev_d_wu_w, LSX, gvec_vvv, MO_32, do_vmulwev_u_s)
578
579
static void gen_vmulwod_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
580
{
581
@@ -XXX,XX +XXX,XX @@ static void do_vmulwod_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
582
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
583
}
584
585
-TRANS(vmulwod_h_bu_b, ALL, gvec_vvv, MO_8, do_vmulwod_u_s)
586
-TRANS(vmulwod_w_hu_h, ALL, gvec_vvv, MO_16, do_vmulwod_u_s)
587
-TRANS(vmulwod_d_wu_w, ALL, gvec_vvv, MO_32, do_vmulwod_u_s)
588
+TRANS(vmulwod_h_bu_b, LSX, gvec_vvv, MO_8, do_vmulwod_u_s)
589
+TRANS(vmulwod_w_hu_h, LSX, gvec_vvv, MO_16, do_vmulwod_u_s)
590
+TRANS(vmulwod_d_wu_w, LSX, gvec_vvv, MO_32, do_vmulwod_u_s)
591
592
static void gen_vmadd(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
593
{
594
@@ -XXX,XX +XXX,XX @@ static void do_vmadd(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
595
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
596
}
597
598
-TRANS(vmadd_b, ALL, gvec_vvv, MO_8, do_vmadd)
599
-TRANS(vmadd_h, ALL, gvec_vvv, MO_16, do_vmadd)
600
-TRANS(vmadd_w, ALL, gvec_vvv, MO_32, do_vmadd)
601
-TRANS(vmadd_d, ALL, gvec_vvv, MO_64, do_vmadd)
602
+TRANS(vmadd_b, LSX, gvec_vvv, MO_8, do_vmadd)
603
+TRANS(vmadd_h, LSX, gvec_vvv, MO_16, do_vmadd)
604
+TRANS(vmadd_w, LSX, gvec_vvv, MO_32, do_vmadd)
605
+TRANS(vmadd_d, LSX, gvec_vvv, MO_64, do_vmadd)
606
607
static void gen_vmsub(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
608
{
609
@@ -XXX,XX +XXX,XX @@ static void do_vmsub(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
610
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
611
}
612
613
-TRANS(vmsub_b, ALL, gvec_vvv, MO_8, do_vmsub)
614
-TRANS(vmsub_h, ALL, gvec_vvv, MO_16, do_vmsub)
615
-TRANS(vmsub_w, ALL, gvec_vvv, MO_32, do_vmsub)
616
-TRANS(vmsub_d, ALL, gvec_vvv, MO_64, do_vmsub)
617
+TRANS(vmsub_b, LSX, gvec_vvv, MO_8, do_vmsub)
618
+TRANS(vmsub_h, LSX, gvec_vvv, MO_16, do_vmsub)
619
+TRANS(vmsub_w, LSX, gvec_vvv, MO_32, do_vmsub)
620
+TRANS(vmsub_d, LSX, gvec_vvv, MO_64, do_vmsub)
621
622
static void gen_vmaddwev_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
623
{
624
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwev_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
625
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
626
}
627
628
-TRANS(vmaddwev_h_b, ALL, gvec_vvv, MO_8, do_vmaddwev_s)
629
-TRANS(vmaddwev_w_h, ALL, gvec_vvv, MO_16, do_vmaddwev_s)
630
-TRANS(vmaddwev_d_w, ALL, gvec_vvv, MO_32, do_vmaddwev_s)
631
+TRANS(vmaddwev_h_b, LSX, gvec_vvv, MO_8, do_vmaddwev_s)
632
+TRANS(vmaddwev_w_h, LSX, gvec_vvv, MO_16, do_vmaddwev_s)
633
+TRANS(vmaddwev_d_w, LSX, gvec_vvv, MO_32, do_vmaddwev_s)
634
635
#define VMADD_Q(NAME, FN, idx1, idx2) \
636
static bool trans_## NAME (DisasContext *ctx, arg_vvv *a) \
637
{ \
638
TCGv_i64 rh, rl, arg1, arg2, th, tl; \
639
\
640
+ if (!avail_LSX(ctx)) { \
641
+ return false; \
642
+ } \
643
+ \
644
rh = tcg_temp_new_i64(); \
645
rl = tcg_temp_new_i64(); \
646
arg1 = tcg_temp_new_i64(); \
647
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwod_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
648
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
649
}
650
651
-TRANS(vmaddwod_h_b, ALL, gvec_vvv, MO_8, do_vmaddwod_s)
652
-TRANS(vmaddwod_w_h, ALL, gvec_vvv, MO_16, do_vmaddwod_s)
653
-TRANS(vmaddwod_d_w, ALL, gvec_vvv, MO_32, do_vmaddwod_s)
654
+TRANS(vmaddwod_h_b, LSX, gvec_vvv, MO_8, do_vmaddwod_s)
655
+TRANS(vmaddwod_w_h, LSX, gvec_vvv, MO_16, do_vmaddwod_s)
656
+TRANS(vmaddwod_d_w, LSX, gvec_vvv, MO_32, do_vmaddwod_s)
657
658
static void gen_vmaddwev_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
659
{
660
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwev_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
661
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
662
}
663
664
-TRANS(vmaddwev_h_bu, ALL, gvec_vvv, MO_8, do_vmaddwev_u)
665
-TRANS(vmaddwev_w_hu, ALL, gvec_vvv, MO_16, do_vmaddwev_u)
666
-TRANS(vmaddwev_d_wu, ALL, gvec_vvv, MO_32, do_vmaddwev_u)
667
+TRANS(vmaddwev_h_bu, LSX, gvec_vvv, MO_8, do_vmaddwev_u)
668
+TRANS(vmaddwev_w_hu, LSX, gvec_vvv, MO_16, do_vmaddwev_u)
669
+TRANS(vmaddwev_d_wu, LSX, gvec_vvv, MO_32, do_vmaddwev_u)
670
671
static void gen_vmaddwod_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
672
{
673
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwod_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
674
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
675
}
676
677
-TRANS(vmaddwod_h_bu, ALL, gvec_vvv, MO_8, do_vmaddwod_u)
678
-TRANS(vmaddwod_w_hu, ALL, gvec_vvv, MO_16, do_vmaddwod_u)
679
-TRANS(vmaddwod_d_wu, ALL, gvec_vvv, MO_32, do_vmaddwod_u)
680
+TRANS(vmaddwod_h_bu, LSX, gvec_vvv, MO_8, do_vmaddwod_u)
681
+TRANS(vmaddwod_w_hu, LSX, gvec_vvv, MO_16, do_vmaddwod_u)
682
+TRANS(vmaddwod_d_wu, LSX, gvec_vvv, MO_32, do_vmaddwod_u)
683
684
static void gen_vmaddwev_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
685
{
686
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwev_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
687
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
688
}
689
690
-TRANS(vmaddwev_h_bu_b, ALL, gvec_vvv, MO_8, do_vmaddwev_u_s)
691
-TRANS(vmaddwev_w_hu_h, ALL, gvec_vvv, MO_16, do_vmaddwev_u_s)
692
-TRANS(vmaddwev_d_wu_w, ALL, gvec_vvv, MO_32, do_vmaddwev_u_s)
693
+TRANS(vmaddwev_h_bu_b, LSX, gvec_vvv, MO_8, do_vmaddwev_u_s)
694
+TRANS(vmaddwev_w_hu_h, LSX, gvec_vvv, MO_16, do_vmaddwev_u_s)
695
+TRANS(vmaddwev_d_wu_w, LSX, gvec_vvv, MO_32, do_vmaddwev_u_s)
696
697
static void gen_vmaddwod_u_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
698
{
699
@@ -XXX,XX +XXX,XX @@ static void do_vmaddwod_u_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
700
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
701
}
702
703
-TRANS(vmaddwod_h_bu_b, ALL, gvec_vvv, MO_8, do_vmaddwod_u_s)
704
-TRANS(vmaddwod_w_hu_h, ALL, gvec_vvv, MO_16, do_vmaddwod_u_s)
705
-TRANS(vmaddwod_d_wu_w, ALL, gvec_vvv, MO_32, do_vmaddwod_u_s)
706
-
707
-TRANS(vdiv_b, ALL, gen_vvv, gen_helper_vdiv_b)
708
-TRANS(vdiv_h, ALL, gen_vvv, gen_helper_vdiv_h)
709
-TRANS(vdiv_w, ALL, gen_vvv, gen_helper_vdiv_w)
710
-TRANS(vdiv_d, ALL, gen_vvv, gen_helper_vdiv_d)
711
-TRANS(vdiv_bu, ALL, gen_vvv, gen_helper_vdiv_bu)
712
-TRANS(vdiv_hu, ALL, gen_vvv, gen_helper_vdiv_hu)
713
-TRANS(vdiv_wu, ALL, gen_vvv, gen_helper_vdiv_wu)
714
-TRANS(vdiv_du, ALL, gen_vvv, gen_helper_vdiv_du)
715
-TRANS(vmod_b, ALL, gen_vvv, gen_helper_vmod_b)
716
-TRANS(vmod_h, ALL, gen_vvv, gen_helper_vmod_h)
717
-TRANS(vmod_w, ALL, gen_vvv, gen_helper_vmod_w)
718
-TRANS(vmod_d, ALL, gen_vvv, gen_helper_vmod_d)
719
-TRANS(vmod_bu, ALL, gen_vvv, gen_helper_vmod_bu)
720
-TRANS(vmod_hu, ALL, gen_vvv, gen_helper_vmod_hu)
721
-TRANS(vmod_wu, ALL, gen_vvv, gen_helper_vmod_wu)
722
-TRANS(vmod_du, ALL, gen_vvv, gen_helper_vmod_du)
723
+TRANS(vmaddwod_h_bu_b, LSX, gvec_vvv, MO_8, do_vmaddwod_u_s)
724
+TRANS(vmaddwod_w_hu_h, LSX, gvec_vvv, MO_16, do_vmaddwod_u_s)
725
+TRANS(vmaddwod_d_wu_w, LSX, gvec_vvv, MO_32, do_vmaddwod_u_s)
726
+
727
+TRANS(vdiv_b, LSX, gen_vvv, gen_helper_vdiv_b)
728
+TRANS(vdiv_h, LSX, gen_vvv, gen_helper_vdiv_h)
729
+TRANS(vdiv_w, LSX, gen_vvv, gen_helper_vdiv_w)
730
+TRANS(vdiv_d, LSX, gen_vvv, gen_helper_vdiv_d)
731
+TRANS(vdiv_bu, LSX, gen_vvv, gen_helper_vdiv_bu)
732
+TRANS(vdiv_hu, LSX, gen_vvv, gen_helper_vdiv_hu)
733
+TRANS(vdiv_wu, LSX, gen_vvv, gen_helper_vdiv_wu)
734
+TRANS(vdiv_du, LSX, gen_vvv, gen_helper_vdiv_du)
735
+TRANS(vmod_b, LSX, gen_vvv, gen_helper_vmod_b)
736
+TRANS(vmod_h, LSX, gen_vvv, gen_helper_vmod_h)
737
+TRANS(vmod_w, LSX, gen_vvv, gen_helper_vmod_w)
738
+TRANS(vmod_d, LSX, gen_vvv, gen_helper_vmod_d)
739
+TRANS(vmod_bu, LSX, gen_vvv, gen_helper_vmod_bu)
740
+TRANS(vmod_hu, LSX, gen_vvv, gen_helper_vmod_hu)
741
+TRANS(vmod_wu, LSX, gen_vvv, gen_helper_vmod_wu)
742
+TRANS(vmod_du, LSX, gen_vvv, gen_helper_vmod_du)
743
744
static void gen_vsat_s(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec max)
745
{
746
@@ -XXX,XX +XXX,XX @@ static void do_vsat_s(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
747
tcg_constant_i64((1ll<< imm) -1), &op[vece]);
748
}
749
750
-TRANS(vsat_b, ALL, gvec_vv_i, MO_8, do_vsat_s)
751
-TRANS(vsat_h, ALL, gvec_vv_i, MO_16, do_vsat_s)
752
-TRANS(vsat_w, ALL, gvec_vv_i, MO_32, do_vsat_s)
753
-TRANS(vsat_d, ALL, gvec_vv_i, MO_64, do_vsat_s)
754
+TRANS(vsat_b, LSX, gvec_vv_i, MO_8, do_vsat_s)
755
+TRANS(vsat_h, LSX, gvec_vv_i, MO_16, do_vsat_s)
756
+TRANS(vsat_w, LSX, gvec_vv_i, MO_32, do_vsat_s)
757
+TRANS(vsat_d, LSX, gvec_vv_i, MO_64, do_vsat_s)
758
759
static void gen_vsat_u(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec max)
760
{
761
@@ -XXX,XX +XXX,XX @@ static void do_vsat_u(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
762
tcg_constant_i64(max), &op[vece]);
763
}
764
765
-TRANS(vsat_bu, ALL, gvec_vv_i, MO_8, do_vsat_u)
766
-TRANS(vsat_hu, ALL, gvec_vv_i, MO_16, do_vsat_u)
767
-TRANS(vsat_wu, ALL, gvec_vv_i, MO_32, do_vsat_u)
768
-TRANS(vsat_du, ALL, gvec_vv_i, MO_64, do_vsat_u)
769
+TRANS(vsat_bu, LSX, gvec_vv_i, MO_8, do_vsat_u)
770
+TRANS(vsat_hu, LSX, gvec_vv_i, MO_16, do_vsat_u)
771
+TRANS(vsat_wu, LSX, gvec_vv_i, MO_32, do_vsat_u)
772
+TRANS(vsat_du, LSX, gvec_vv_i, MO_64, do_vsat_u)
773
774
-TRANS(vexth_h_b, ALL, gen_vv, gen_helper_vexth_h_b)
775
-TRANS(vexth_w_h, ALL, gen_vv, gen_helper_vexth_w_h)
776
-TRANS(vexth_d_w, ALL, gen_vv, gen_helper_vexth_d_w)
777
-TRANS(vexth_q_d, ALL, gen_vv, gen_helper_vexth_q_d)
778
-TRANS(vexth_hu_bu, ALL, gen_vv, gen_helper_vexth_hu_bu)
779
-TRANS(vexth_wu_hu, ALL, gen_vv, gen_helper_vexth_wu_hu)
780
-TRANS(vexth_du_wu, ALL, gen_vv, gen_helper_vexth_du_wu)
781
-TRANS(vexth_qu_du, ALL, gen_vv, gen_helper_vexth_qu_du)
782
+TRANS(vexth_h_b, LSX, gen_vv, gen_helper_vexth_h_b)
783
+TRANS(vexth_w_h, LSX, gen_vv, gen_helper_vexth_w_h)
784
+TRANS(vexth_d_w, LSX, gen_vv, gen_helper_vexth_d_w)
785
+TRANS(vexth_q_d, LSX, gen_vv, gen_helper_vexth_q_d)
786
+TRANS(vexth_hu_bu, LSX, gen_vv, gen_helper_vexth_hu_bu)
787
+TRANS(vexth_wu_hu, LSX, gen_vv, gen_helper_vexth_wu_hu)
788
+TRANS(vexth_du_wu, LSX, gen_vv, gen_helper_vexth_du_wu)
789
+TRANS(vexth_qu_du, LSX, gen_vv, gen_helper_vexth_qu_du)
790
791
static void gen_vsigncov(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b)
792
{
793
@@ -XXX,XX +XXX,XX @@ static void do_vsigncov(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
794
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
795
}
796
797
-TRANS(vsigncov_b, ALL, gvec_vvv, MO_8, do_vsigncov)
798
-TRANS(vsigncov_h, ALL, gvec_vvv, MO_16, do_vsigncov)
799
-TRANS(vsigncov_w, ALL, gvec_vvv, MO_32, do_vsigncov)
800
-TRANS(vsigncov_d, ALL, gvec_vvv, MO_64, do_vsigncov)
801
+TRANS(vsigncov_b, LSX, gvec_vvv, MO_8, do_vsigncov)
802
+TRANS(vsigncov_h, LSX, gvec_vvv, MO_16, do_vsigncov)
803
+TRANS(vsigncov_w, LSX, gvec_vvv, MO_32, do_vsigncov)
804
+TRANS(vsigncov_d, LSX, gvec_vvv, MO_64, do_vsigncov)
805
806
-TRANS(vmskltz_b, ALL, gen_vv, gen_helper_vmskltz_b)
807
-TRANS(vmskltz_h, ALL, gen_vv, gen_helper_vmskltz_h)
808
-TRANS(vmskltz_w, ALL, gen_vv, gen_helper_vmskltz_w)
809
-TRANS(vmskltz_d, ALL, gen_vv, gen_helper_vmskltz_d)
810
-TRANS(vmskgez_b, ALL, gen_vv, gen_helper_vmskgez_b)
811
-TRANS(vmsknz_b, ALL, gen_vv, gen_helper_vmsknz_b)
812
+TRANS(vmskltz_b, LSX, gen_vv, gen_helper_vmskltz_b)
813
+TRANS(vmskltz_h, LSX, gen_vv, gen_helper_vmskltz_h)
814
+TRANS(vmskltz_w, LSX, gen_vv, gen_helper_vmskltz_w)
815
+TRANS(vmskltz_d, LSX, gen_vv, gen_helper_vmskltz_d)
816
+TRANS(vmskgez_b, LSX, gen_vv, gen_helper_vmskgez_b)
817
+TRANS(vmsknz_b, LSX, gen_vv, gen_helper_vmsknz_b)
818
819
#define EXPAND_BYTE(bit) ((uint64_t)(bit ? 0xff : 0))
820
821
@@ -XXX,XX +XXX,XX @@ static bool trans_vldi(DisasContext *ctx, arg_vldi *a)
822
{
823
int sel, vece;
824
uint64_t value;
825
+
826
+ if (!avail_LSX(ctx)) {
827
+ return false;
828
+ }
829
+
830
CHECK_SXE;
831
832
sel = (a->imm >> 12) & 0x1;
833
@@ -XXX,XX +XXX,XX @@ static bool trans_vldi(DisasContext *ctx, arg_vldi *a)
834
return true;
835
}
836
837
-TRANS(vand_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_and)
838
-TRANS(vor_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_or)
839
-TRANS(vxor_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_xor)
840
-TRANS(vnor_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_nor)
841
+TRANS(vand_v, LSX, gvec_vvv, MO_64, tcg_gen_gvec_and)
842
+TRANS(vor_v, LSX, gvec_vvv, MO_64, tcg_gen_gvec_or)
843
+TRANS(vxor_v, LSX, gvec_vvv, MO_64, tcg_gen_gvec_xor)
844
+TRANS(vnor_v, LSX, gvec_vvv, MO_64, tcg_gen_gvec_nor)
845
846
static bool trans_vandn_v(DisasContext *ctx, arg_vvv *a)
847
{
848
uint32_t vd_ofs, vj_ofs, vk_ofs;
849
850
+ if (!avail_LSX(ctx)) {
851
+ return false;
852
+ }
853
+
854
CHECK_SXE;
855
856
vd_ofs = vec_full_offset(a->vd);
857
@@ -XXX,XX +XXX,XX @@ static bool trans_vandn_v(DisasContext *ctx, arg_vvv *a)
858
tcg_gen_gvec_andc(MO_64, vd_ofs, vk_ofs, vj_ofs, 16, ctx->vl/8);
859
return true;
860
}
861
-TRANS(vorn_v, ALL, gvec_vvv, MO_64, tcg_gen_gvec_orc)
862
-TRANS(vandi_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_andi)
863
-TRANS(vori_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_ori)
864
-TRANS(vxori_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_xori)
865
+TRANS(vorn_v, LSX, gvec_vvv, MO_64, tcg_gen_gvec_orc)
866
+TRANS(vandi_b, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_andi)
867
+TRANS(vori_b, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_ori)
868
+TRANS(vxori_b, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_xori)
869
870
static void gen_vnori(unsigned vece, TCGv_vec t, TCGv_vec a, int64_t imm)
871
{
872
@@ -XXX,XX +XXX,XX @@ static void do_vnori_b(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
873
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op);
874
}
875
876
-TRANS(vnori_b, ALL, gvec_vv_i, MO_8, do_vnori_b)
877
-
878
-TRANS(vsll_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_shlv)
879
-TRANS(vsll_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_shlv)
880
-TRANS(vsll_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_shlv)
881
-TRANS(vsll_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_shlv)
882
-TRANS(vslli_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_shli)
883
-TRANS(vslli_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_shli)
884
-TRANS(vslli_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_shli)
885
-TRANS(vslli_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_shli)
886
-
887
-TRANS(vsrl_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_shrv)
888
-TRANS(vsrl_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_shrv)
889
-TRANS(vsrl_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_shrv)
890
-TRANS(vsrl_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_shrv)
891
-TRANS(vsrli_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_shri)
892
-TRANS(vsrli_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_shri)
893
-TRANS(vsrli_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_shri)
894
-TRANS(vsrli_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_shri)
895
-
896
-TRANS(vsra_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_sarv)
897
-TRANS(vsra_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_sarv)
898
-TRANS(vsra_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_sarv)
899
-TRANS(vsra_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_sarv)
900
-TRANS(vsrai_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_sari)
901
-TRANS(vsrai_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_sari)
902
-TRANS(vsrai_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_sari)
903
-TRANS(vsrai_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_sari)
904
-
905
-TRANS(vrotr_b, ALL, gvec_vvv, MO_8, tcg_gen_gvec_rotrv)
906
-TRANS(vrotr_h, ALL, gvec_vvv, MO_16, tcg_gen_gvec_rotrv)
907
-TRANS(vrotr_w, ALL, gvec_vvv, MO_32, tcg_gen_gvec_rotrv)
908
-TRANS(vrotr_d, ALL, gvec_vvv, MO_64, tcg_gen_gvec_rotrv)
909
-TRANS(vrotri_b, ALL, gvec_vv_i, MO_8, tcg_gen_gvec_rotri)
910
-TRANS(vrotri_h, ALL, gvec_vv_i, MO_16, tcg_gen_gvec_rotri)
911
-TRANS(vrotri_w, ALL, gvec_vv_i, MO_32, tcg_gen_gvec_rotri)
912
-TRANS(vrotri_d, ALL, gvec_vv_i, MO_64, tcg_gen_gvec_rotri)
913
-
914
-TRANS(vsllwil_h_b, ALL, gen_vv_i, gen_helper_vsllwil_h_b)
915
-TRANS(vsllwil_w_h, ALL, gen_vv_i, gen_helper_vsllwil_w_h)
916
-TRANS(vsllwil_d_w, ALL, gen_vv_i, gen_helper_vsllwil_d_w)
917
-TRANS(vextl_q_d, ALL, gen_vv, gen_helper_vextl_q_d)
918
-TRANS(vsllwil_hu_bu, ALL, gen_vv_i, gen_helper_vsllwil_hu_bu)
919
-TRANS(vsllwil_wu_hu, ALL, gen_vv_i, gen_helper_vsllwil_wu_hu)
920
-TRANS(vsllwil_du_wu, ALL, gen_vv_i, gen_helper_vsllwil_du_wu)
921
-TRANS(vextl_qu_du, ALL, gen_vv, gen_helper_vextl_qu_du)
922
-
923
-TRANS(vsrlr_b, ALL, gen_vvv, gen_helper_vsrlr_b)
924
-TRANS(vsrlr_h, ALL, gen_vvv, gen_helper_vsrlr_h)
925
-TRANS(vsrlr_w, ALL, gen_vvv, gen_helper_vsrlr_w)
926
-TRANS(vsrlr_d, ALL, gen_vvv, gen_helper_vsrlr_d)
927
-TRANS(vsrlri_b, ALL, gen_vv_i, gen_helper_vsrlri_b)
928
-TRANS(vsrlri_h, ALL, gen_vv_i, gen_helper_vsrlri_h)
929
-TRANS(vsrlri_w, ALL, gen_vv_i, gen_helper_vsrlri_w)
930
-TRANS(vsrlri_d, ALL, gen_vv_i, gen_helper_vsrlri_d)
931
-
932
-TRANS(vsrar_b, ALL, gen_vvv, gen_helper_vsrar_b)
933
-TRANS(vsrar_h, ALL, gen_vvv, gen_helper_vsrar_h)
934
-TRANS(vsrar_w, ALL, gen_vvv, gen_helper_vsrar_w)
935
-TRANS(vsrar_d, ALL, gen_vvv, gen_helper_vsrar_d)
936
-TRANS(vsrari_b, ALL, gen_vv_i, gen_helper_vsrari_b)
937
-TRANS(vsrari_h, ALL, gen_vv_i, gen_helper_vsrari_h)
938
-TRANS(vsrari_w, ALL, gen_vv_i, gen_helper_vsrari_w)
939
-TRANS(vsrari_d, ALL, gen_vv_i, gen_helper_vsrari_d)
940
-
941
-TRANS(vsrln_b_h, ALL, gen_vvv, gen_helper_vsrln_b_h)
942
-TRANS(vsrln_h_w, ALL, gen_vvv, gen_helper_vsrln_h_w)
943
-TRANS(vsrln_w_d, ALL, gen_vvv, gen_helper_vsrln_w_d)
944
-TRANS(vsran_b_h, ALL, gen_vvv, gen_helper_vsran_b_h)
945
-TRANS(vsran_h_w, ALL, gen_vvv, gen_helper_vsran_h_w)
946
-TRANS(vsran_w_d, ALL, gen_vvv, gen_helper_vsran_w_d)
947
-
948
-TRANS(vsrlni_b_h, ALL, gen_vv_i, gen_helper_vsrlni_b_h)
949
-TRANS(vsrlni_h_w, ALL, gen_vv_i, gen_helper_vsrlni_h_w)
950
-TRANS(vsrlni_w_d, ALL, gen_vv_i, gen_helper_vsrlni_w_d)
951
-TRANS(vsrlni_d_q, ALL, gen_vv_i, gen_helper_vsrlni_d_q)
952
-TRANS(vsrani_b_h, ALL, gen_vv_i, gen_helper_vsrani_b_h)
953
-TRANS(vsrani_h_w, ALL, gen_vv_i, gen_helper_vsrani_h_w)
954
-TRANS(vsrani_w_d, ALL, gen_vv_i, gen_helper_vsrani_w_d)
955
-TRANS(vsrani_d_q, ALL, gen_vv_i, gen_helper_vsrani_d_q)
956
-
957
-TRANS(vsrlrn_b_h, ALL, gen_vvv, gen_helper_vsrlrn_b_h)
958
-TRANS(vsrlrn_h_w, ALL, gen_vvv, gen_helper_vsrlrn_h_w)
959
-TRANS(vsrlrn_w_d, ALL, gen_vvv, gen_helper_vsrlrn_w_d)
960
-TRANS(vsrarn_b_h, ALL, gen_vvv, gen_helper_vsrarn_b_h)
961
-TRANS(vsrarn_h_w, ALL, gen_vvv, gen_helper_vsrarn_h_w)
962
-TRANS(vsrarn_w_d, ALL, gen_vvv, gen_helper_vsrarn_w_d)
963
-
964
-TRANS(vsrlrni_b_h, ALL, gen_vv_i, gen_helper_vsrlrni_b_h)
965
-TRANS(vsrlrni_h_w, ALL, gen_vv_i, gen_helper_vsrlrni_h_w)
966
-TRANS(vsrlrni_w_d, ALL, gen_vv_i, gen_helper_vsrlrni_w_d)
967
-TRANS(vsrlrni_d_q, ALL, gen_vv_i, gen_helper_vsrlrni_d_q)
968
-TRANS(vsrarni_b_h, ALL, gen_vv_i, gen_helper_vsrarni_b_h)
969
-TRANS(vsrarni_h_w, ALL, gen_vv_i, gen_helper_vsrarni_h_w)
970
-TRANS(vsrarni_w_d, ALL, gen_vv_i, gen_helper_vsrarni_w_d)
971
-TRANS(vsrarni_d_q, ALL, gen_vv_i, gen_helper_vsrarni_d_q)
972
-
973
-TRANS(vssrln_b_h, ALL, gen_vvv, gen_helper_vssrln_b_h)
974
-TRANS(vssrln_h_w, ALL, gen_vvv, gen_helper_vssrln_h_w)
975
-TRANS(vssrln_w_d, ALL, gen_vvv, gen_helper_vssrln_w_d)
976
-TRANS(vssran_b_h, ALL, gen_vvv, gen_helper_vssran_b_h)
977
-TRANS(vssran_h_w, ALL, gen_vvv, gen_helper_vssran_h_w)
978
-TRANS(vssran_w_d, ALL, gen_vvv, gen_helper_vssran_w_d)
979
-TRANS(vssrln_bu_h, ALL, gen_vvv, gen_helper_vssrln_bu_h)
980
-TRANS(vssrln_hu_w, ALL, gen_vvv, gen_helper_vssrln_hu_w)
981
-TRANS(vssrln_wu_d, ALL, gen_vvv, gen_helper_vssrln_wu_d)
982
-TRANS(vssran_bu_h, ALL, gen_vvv, gen_helper_vssran_bu_h)
983
-TRANS(vssran_hu_w, ALL, gen_vvv, gen_helper_vssran_hu_w)
984
-TRANS(vssran_wu_d, ALL, gen_vvv, gen_helper_vssran_wu_d)
985
-
986
-TRANS(vssrlni_b_h, ALL, gen_vv_i, gen_helper_vssrlni_b_h)
987
-TRANS(vssrlni_h_w, ALL, gen_vv_i, gen_helper_vssrlni_h_w)
988
-TRANS(vssrlni_w_d, ALL, gen_vv_i, gen_helper_vssrlni_w_d)
989
-TRANS(vssrlni_d_q, ALL, gen_vv_i, gen_helper_vssrlni_d_q)
990
-TRANS(vssrani_b_h, ALL, gen_vv_i, gen_helper_vssrani_b_h)
991
-TRANS(vssrani_h_w, ALL, gen_vv_i, gen_helper_vssrani_h_w)
992
-TRANS(vssrani_w_d, ALL, gen_vv_i, gen_helper_vssrani_w_d)
993
-TRANS(vssrani_d_q, ALL, gen_vv_i, gen_helper_vssrani_d_q)
994
-TRANS(vssrlni_bu_h, ALL, gen_vv_i, gen_helper_vssrlni_bu_h)
995
-TRANS(vssrlni_hu_w, ALL, gen_vv_i, gen_helper_vssrlni_hu_w)
996
-TRANS(vssrlni_wu_d, ALL, gen_vv_i, gen_helper_vssrlni_wu_d)
997
-TRANS(vssrlni_du_q, ALL, gen_vv_i, gen_helper_vssrlni_du_q)
998
-TRANS(vssrani_bu_h, ALL, gen_vv_i, gen_helper_vssrani_bu_h)
999
-TRANS(vssrani_hu_w, ALL, gen_vv_i, gen_helper_vssrani_hu_w)
1000
-TRANS(vssrani_wu_d, ALL, gen_vv_i, gen_helper_vssrani_wu_d)
1001
-TRANS(vssrani_du_q, ALL, gen_vv_i, gen_helper_vssrani_du_q)
1002
-
1003
-TRANS(vssrlrn_b_h, ALL, gen_vvv, gen_helper_vssrlrn_b_h)
1004
-TRANS(vssrlrn_h_w, ALL, gen_vvv, gen_helper_vssrlrn_h_w)
1005
-TRANS(vssrlrn_w_d, ALL, gen_vvv, gen_helper_vssrlrn_w_d)
1006
-TRANS(vssrarn_b_h, ALL, gen_vvv, gen_helper_vssrarn_b_h)
1007
-TRANS(vssrarn_h_w, ALL, gen_vvv, gen_helper_vssrarn_h_w)
1008
-TRANS(vssrarn_w_d, ALL, gen_vvv, gen_helper_vssrarn_w_d)
1009
-TRANS(vssrlrn_bu_h, ALL, gen_vvv, gen_helper_vssrlrn_bu_h)
1010
-TRANS(vssrlrn_hu_w, ALL, gen_vvv, gen_helper_vssrlrn_hu_w)
1011
-TRANS(vssrlrn_wu_d, ALL, gen_vvv, gen_helper_vssrlrn_wu_d)
1012
-TRANS(vssrarn_bu_h, ALL, gen_vvv, gen_helper_vssrarn_bu_h)
1013
-TRANS(vssrarn_hu_w, ALL, gen_vvv, gen_helper_vssrarn_hu_w)
1014
-TRANS(vssrarn_wu_d, ALL, gen_vvv, gen_helper_vssrarn_wu_d)
1015
-
1016
-TRANS(vssrlrni_b_h, ALL, gen_vv_i, gen_helper_vssrlrni_b_h)
1017
-TRANS(vssrlrni_h_w, ALL, gen_vv_i, gen_helper_vssrlrni_h_w)
1018
-TRANS(vssrlrni_w_d, ALL, gen_vv_i, gen_helper_vssrlrni_w_d)
1019
-TRANS(vssrlrni_d_q, ALL, gen_vv_i, gen_helper_vssrlrni_d_q)
1020
-TRANS(vssrarni_b_h, ALL, gen_vv_i, gen_helper_vssrarni_b_h)
1021
-TRANS(vssrarni_h_w, ALL, gen_vv_i, gen_helper_vssrarni_h_w)
1022
-TRANS(vssrarni_w_d, ALL, gen_vv_i, gen_helper_vssrarni_w_d)
1023
-TRANS(vssrarni_d_q, ALL, gen_vv_i, gen_helper_vssrarni_d_q)
1024
-TRANS(vssrlrni_bu_h, ALL, gen_vv_i, gen_helper_vssrlrni_bu_h)
1025
-TRANS(vssrlrni_hu_w, ALL, gen_vv_i, gen_helper_vssrlrni_hu_w)
1026
-TRANS(vssrlrni_wu_d, ALL, gen_vv_i, gen_helper_vssrlrni_wu_d)
1027
-TRANS(vssrlrni_du_q, ALL, gen_vv_i, gen_helper_vssrlrni_du_q)
1028
-TRANS(vssrarni_bu_h, ALL, gen_vv_i, gen_helper_vssrarni_bu_h)
1029
-TRANS(vssrarni_hu_w, ALL, gen_vv_i, gen_helper_vssrarni_hu_w)
1030
-TRANS(vssrarni_wu_d, ALL, gen_vv_i, gen_helper_vssrarni_wu_d)
1031
-TRANS(vssrarni_du_q, ALL, gen_vv_i, gen_helper_vssrarni_du_q)
1032
-
1033
-TRANS(vclo_b, ALL, gen_vv, gen_helper_vclo_b)
1034
-TRANS(vclo_h, ALL, gen_vv, gen_helper_vclo_h)
1035
-TRANS(vclo_w, ALL, gen_vv, gen_helper_vclo_w)
1036
-TRANS(vclo_d, ALL, gen_vv, gen_helper_vclo_d)
1037
-TRANS(vclz_b, ALL, gen_vv, gen_helper_vclz_b)
1038
-TRANS(vclz_h, ALL, gen_vv, gen_helper_vclz_h)
1039
-TRANS(vclz_w, ALL, gen_vv, gen_helper_vclz_w)
1040
-TRANS(vclz_d, ALL, gen_vv, gen_helper_vclz_d)
1041
-
1042
-TRANS(vpcnt_b, ALL, gen_vv, gen_helper_vpcnt_b)
1043
-TRANS(vpcnt_h, ALL, gen_vv, gen_helper_vpcnt_h)
1044
-TRANS(vpcnt_w, ALL, gen_vv, gen_helper_vpcnt_w)
1045
-TRANS(vpcnt_d, ALL, gen_vv, gen_helper_vpcnt_d)
1046
+TRANS(vnori_b, LSX, gvec_vv_i, MO_8, do_vnori_b)
1047
+
1048
+TRANS(vsll_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_shlv)
1049
+TRANS(vsll_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_shlv)
1050
+TRANS(vsll_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_shlv)
1051
+TRANS(vsll_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_shlv)
1052
+TRANS(vslli_b, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_shli)
1053
+TRANS(vslli_h, LSX, gvec_vv_i, MO_16, tcg_gen_gvec_shli)
1054
+TRANS(vslli_w, LSX, gvec_vv_i, MO_32, tcg_gen_gvec_shli)
1055
+TRANS(vslli_d, LSX, gvec_vv_i, MO_64, tcg_gen_gvec_shli)
1056
+
1057
+TRANS(vsrl_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_shrv)
1058
+TRANS(vsrl_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_shrv)
1059
+TRANS(vsrl_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_shrv)
1060
+TRANS(vsrl_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_shrv)
1061
+TRANS(vsrli_b, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_shri)
1062
+TRANS(vsrli_h, LSX, gvec_vv_i, MO_16, tcg_gen_gvec_shri)
1063
+TRANS(vsrli_w, LSX, gvec_vv_i, MO_32, tcg_gen_gvec_shri)
1064
+TRANS(vsrli_d, LSX, gvec_vv_i, MO_64, tcg_gen_gvec_shri)
1065
+
1066
+TRANS(vsra_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_sarv)
1067
+TRANS(vsra_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_sarv)
1068
+TRANS(vsra_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_sarv)
1069
+TRANS(vsra_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_sarv)
1070
+TRANS(vsrai_b, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_sari)
1071
+TRANS(vsrai_h, LSX, gvec_vv_i, MO_16, tcg_gen_gvec_sari)
1072
+TRANS(vsrai_w, LSX, gvec_vv_i, MO_32, tcg_gen_gvec_sari)
1073
+TRANS(vsrai_d, LSX, gvec_vv_i, MO_64, tcg_gen_gvec_sari)
1074
+
1075
+TRANS(vrotr_b, LSX, gvec_vvv, MO_8, tcg_gen_gvec_rotrv)
1076
+TRANS(vrotr_h, LSX, gvec_vvv, MO_16, tcg_gen_gvec_rotrv)
1077
+TRANS(vrotr_w, LSX, gvec_vvv, MO_32, tcg_gen_gvec_rotrv)
1078
+TRANS(vrotr_d, LSX, gvec_vvv, MO_64, tcg_gen_gvec_rotrv)
1079
+TRANS(vrotri_b, LSX, gvec_vv_i, MO_8, tcg_gen_gvec_rotri)
1080
+TRANS(vrotri_h, LSX, gvec_vv_i, MO_16, tcg_gen_gvec_rotri)
1081
+TRANS(vrotri_w, LSX, gvec_vv_i, MO_32, tcg_gen_gvec_rotri)
1082
+TRANS(vrotri_d, LSX, gvec_vv_i, MO_64, tcg_gen_gvec_rotri)
1083
+
1084
+TRANS(vsllwil_h_b, LSX, gen_vv_i, gen_helper_vsllwil_h_b)
1085
+TRANS(vsllwil_w_h, LSX, gen_vv_i, gen_helper_vsllwil_w_h)
1086
+TRANS(vsllwil_d_w, LSX, gen_vv_i, gen_helper_vsllwil_d_w)
1087
+TRANS(vextl_q_d, LSX, gen_vv, gen_helper_vextl_q_d)
1088
+TRANS(vsllwil_hu_bu, LSX, gen_vv_i, gen_helper_vsllwil_hu_bu)
1089
+TRANS(vsllwil_wu_hu, LSX, gen_vv_i, gen_helper_vsllwil_wu_hu)
1090
+TRANS(vsllwil_du_wu, LSX, gen_vv_i, gen_helper_vsllwil_du_wu)
1091
+TRANS(vextl_qu_du, LSX, gen_vv, gen_helper_vextl_qu_du)
1092
+
1093
+TRANS(vsrlr_b, LSX, gen_vvv, gen_helper_vsrlr_b)
1094
+TRANS(vsrlr_h, LSX, gen_vvv, gen_helper_vsrlr_h)
1095
+TRANS(vsrlr_w, LSX, gen_vvv, gen_helper_vsrlr_w)
1096
+TRANS(vsrlr_d, LSX, gen_vvv, gen_helper_vsrlr_d)
1097
+TRANS(vsrlri_b, LSX, gen_vv_i, gen_helper_vsrlri_b)
1098
+TRANS(vsrlri_h, LSX, gen_vv_i, gen_helper_vsrlri_h)
1099
+TRANS(vsrlri_w, LSX, gen_vv_i, gen_helper_vsrlri_w)
1100
+TRANS(vsrlri_d, LSX, gen_vv_i, gen_helper_vsrlri_d)
1101
+
1102
+TRANS(vsrar_b, LSX, gen_vvv, gen_helper_vsrar_b)
1103
+TRANS(vsrar_h, LSX, gen_vvv, gen_helper_vsrar_h)
1104
+TRANS(vsrar_w, LSX, gen_vvv, gen_helper_vsrar_w)
1105
+TRANS(vsrar_d, LSX, gen_vvv, gen_helper_vsrar_d)
1106
+TRANS(vsrari_b, LSX, gen_vv_i, gen_helper_vsrari_b)
1107
+TRANS(vsrari_h, LSX, gen_vv_i, gen_helper_vsrari_h)
1108
+TRANS(vsrari_w, LSX, gen_vv_i, gen_helper_vsrari_w)
1109
+TRANS(vsrari_d, LSX, gen_vv_i, gen_helper_vsrari_d)
1110
+
1111
+TRANS(vsrln_b_h, LSX, gen_vvv, gen_helper_vsrln_b_h)
1112
+TRANS(vsrln_h_w, LSX, gen_vvv, gen_helper_vsrln_h_w)
1113
+TRANS(vsrln_w_d, LSX, gen_vvv, gen_helper_vsrln_w_d)
1114
+TRANS(vsran_b_h, LSX, gen_vvv, gen_helper_vsran_b_h)
1115
+TRANS(vsran_h_w, LSX, gen_vvv, gen_helper_vsran_h_w)
1116
+TRANS(vsran_w_d, LSX, gen_vvv, gen_helper_vsran_w_d)
1117
+
1118
+TRANS(vsrlni_b_h, LSX, gen_vv_i, gen_helper_vsrlni_b_h)
1119
+TRANS(vsrlni_h_w, LSX, gen_vv_i, gen_helper_vsrlni_h_w)
1120
+TRANS(vsrlni_w_d, LSX, gen_vv_i, gen_helper_vsrlni_w_d)
1121
+TRANS(vsrlni_d_q, LSX, gen_vv_i, gen_helper_vsrlni_d_q)
1122
+TRANS(vsrani_b_h, LSX, gen_vv_i, gen_helper_vsrani_b_h)
1123
+TRANS(vsrani_h_w, LSX, gen_vv_i, gen_helper_vsrani_h_w)
1124
+TRANS(vsrani_w_d, LSX, gen_vv_i, gen_helper_vsrani_w_d)
1125
+TRANS(vsrani_d_q, LSX, gen_vv_i, gen_helper_vsrani_d_q)
1126
+
1127
+TRANS(vsrlrn_b_h, LSX, gen_vvv, gen_helper_vsrlrn_b_h)
1128
+TRANS(vsrlrn_h_w, LSX, gen_vvv, gen_helper_vsrlrn_h_w)
1129
+TRANS(vsrlrn_w_d, LSX, gen_vvv, gen_helper_vsrlrn_w_d)
1130
+TRANS(vsrarn_b_h, LSX, gen_vvv, gen_helper_vsrarn_b_h)
1131
+TRANS(vsrarn_h_w, LSX, gen_vvv, gen_helper_vsrarn_h_w)
1132
+TRANS(vsrarn_w_d, LSX, gen_vvv, gen_helper_vsrarn_w_d)
1133
+
1134
+TRANS(vsrlrni_b_h, LSX, gen_vv_i, gen_helper_vsrlrni_b_h)
1135
+TRANS(vsrlrni_h_w, LSX, gen_vv_i, gen_helper_vsrlrni_h_w)
1136
+TRANS(vsrlrni_w_d, LSX, gen_vv_i, gen_helper_vsrlrni_w_d)
1137
+TRANS(vsrlrni_d_q, LSX, gen_vv_i, gen_helper_vsrlrni_d_q)
1138
+TRANS(vsrarni_b_h, LSX, gen_vv_i, gen_helper_vsrarni_b_h)
1139
+TRANS(vsrarni_h_w, LSX, gen_vv_i, gen_helper_vsrarni_h_w)
1140
+TRANS(vsrarni_w_d, LSX, gen_vv_i, gen_helper_vsrarni_w_d)
1141
+TRANS(vsrarni_d_q, LSX, gen_vv_i, gen_helper_vsrarni_d_q)
1142
+
1143
+TRANS(vssrln_b_h, LSX, gen_vvv, gen_helper_vssrln_b_h)
1144
+TRANS(vssrln_h_w, LSX, gen_vvv, gen_helper_vssrln_h_w)
1145
+TRANS(vssrln_w_d, LSX, gen_vvv, gen_helper_vssrln_w_d)
1146
+TRANS(vssran_b_h, LSX, gen_vvv, gen_helper_vssran_b_h)
1147
+TRANS(vssran_h_w, LSX, gen_vvv, gen_helper_vssran_h_w)
1148
+TRANS(vssran_w_d, LSX, gen_vvv, gen_helper_vssran_w_d)
1149
+TRANS(vssrln_bu_h, LSX, gen_vvv, gen_helper_vssrln_bu_h)
1150
+TRANS(vssrln_hu_w, LSX, gen_vvv, gen_helper_vssrln_hu_w)
1151
+TRANS(vssrln_wu_d, LSX, gen_vvv, gen_helper_vssrln_wu_d)
1152
+TRANS(vssran_bu_h, LSX, gen_vvv, gen_helper_vssran_bu_h)
1153
+TRANS(vssran_hu_w, LSX, gen_vvv, gen_helper_vssran_hu_w)
1154
+TRANS(vssran_wu_d, LSX, gen_vvv, gen_helper_vssran_wu_d)
1155
+
1156
+TRANS(vssrlni_b_h, LSX, gen_vv_i, gen_helper_vssrlni_b_h)
1157
+TRANS(vssrlni_h_w, LSX, gen_vv_i, gen_helper_vssrlni_h_w)
1158
+TRANS(vssrlni_w_d, LSX, gen_vv_i, gen_helper_vssrlni_w_d)
1159
+TRANS(vssrlni_d_q, LSX, gen_vv_i, gen_helper_vssrlni_d_q)
1160
+TRANS(vssrani_b_h, LSX, gen_vv_i, gen_helper_vssrani_b_h)
1161
+TRANS(vssrani_h_w, LSX, gen_vv_i, gen_helper_vssrani_h_w)
1162
+TRANS(vssrani_w_d, LSX, gen_vv_i, gen_helper_vssrani_w_d)
1163
+TRANS(vssrani_d_q, LSX, gen_vv_i, gen_helper_vssrani_d_q)
1164
+TRANS(vssrlni_bu_h, LSX, gen_vv_i, gen_helper_vssrlni_bu_h)
1165
+TRANS(vssrlni_hu_w, LSX, gen_vv_i, gen_helper_vssrlni_hu_w)
1166
+TRANS(vssrlni_wu_d, LSX, gen_vv_i, gen_helper_vssrlni_wu_d)
1167
+TRANS(vssrlni_du_q, LSX, gen_vv_i, gen_helper_vssrlni_du_q)
1168
+TRANS(vssrani_bu_h, LSX, gen_vv_i, gen_helper_vssrani_bu_h)
1169
+TRANS(vssrani_hu_w, LSX, gen_vv_i, gen_helper_vssrani_hu_w)
1170
+TRANS(vssrani_wu_d, LSX, gen_vv_i, gen_helper_vssrani_wu_d)
1171
+TRANS(vssrani_du_q, LSX, gen_vv_i, gen_helper_vssrani_du_q)
1172
+
1173
+TRANS(vssrlrn_b_h, LSX, gen_vvv, gen_helper_vssrlrn_b_h)
1174
+TRANS(vssrlrn_h_w, LSX, gen_vvv, gen_helper_vssrlrn_h_w)
1175
+TRANS(vssrlrn_w_d, LSX, gen_vvv, gen_helper_vssrlrn_w_d)
1176
+TRANS(vssrarn_b_h, LSX, gen_vvv, gen_helper_vssrarn_b_h)
1177
+TRANS(vssrarn_h_w, LSX, gen_vvv, gen_helper_vssrarn_h_w)
1178
+TRANS(vssrarn_w_d, LSX, gen_vvv, gen_helper_vssrarn_w_d)
1179
+TRANS(vssrlrn_bu_h, LSX, gen_vvv, gen_helper_vssrlrn_bu_h)
1180
+TRANS(vssrlrn_hu_w, LSX, gen_vvv, gen_helper_vssrlrn_hu_w)
1181
+TRANS(vssrlrn_wu_d, LSX, gen_vvv, gen_helper_vssrlrn_wu_d)
1182
+TRANS(vssrarn_bu_h, LSX, gen_vvv, gen_helper_vssrarn_bu_h)
1183
+TRANS(vssrarn_hu_w, LSX, gen_vvv, gen_helper_vssrarn_hu_w)
1184
+TRANS(vssrarn_wu_d, LSX, gen_vvv, gen_helper_vssrarn_wu_d)
1185
+
1186
+TRANS(vssrlrni_b_h, LSX, gen_vv_i, gen_helper_vssrlrni_b_h)
1187
+TRANS(vssrlrni_h_w, LSX, gen_vv_i, gen_helper_vssrlrni_h_w)
1188
+TRANS(vssrlrni_w_d, LSX, gen_vv_i, gen_helper_vssrlrni_w_d)
1189
+TRANS(vssrlrni_d_q, LSX, gen_vv_i, gen_helper_vssrlrni_d_q)
1190
+TRANS(vssrarni_b_h, LSX, gen_vv_i, gen_helper_vssrarni_b_h)
1191
+TRANS(vssrarni_h_w, LSX, gen_vv_i, gen_helper_vssrarni_h_w)
1192
+TRANS(vssrarni_w_d, LSX, gen_vv_i, gen_helper_vssrarni_w_d)
1193
+TRANS(vssrarni_d_q, LSX, gen_vv_i, gen_helper_vssrarni_d_q)
1194
+TRANS(vssrlrni_bu_h, LSX, gen_vv_i, gen_helper_vssrlrni_bu_h)
1195
+TRANS(vssrlrni_hu_w, LSX, gen_vv_i, gen_helper_vssrlrni_hu_w)
1196
+TRANS(vssrlrni_wu_d, LSX, gen_vv_i, gen_helper_vssrlrni_wu_d)
1197
+TRANS(vssrlrni_du_q, LSX, gen_vv_i, gen_helper_vssrlrni_du_q)
1198
+TRANS(vssrarni_bu_h, LSX, gen_vv_i, gen_helper_vssrarni_bu_h)
1199
+TRANS(vssrarni_hu_w, LSX, gen_vv_i, gen_helper_vssrarni_hu_w)
1200
+TRANS(vssrarni_wu_d, LSX, gen_vv_i, gen_helper_vssrarni_wu_d)
1201
+TRANS(vssrarni_du_q, LSX, gen_vv_i, gen_helper_vssrarni_du_q)
1202
+
1203
+TRANS(vclo_b, LSX, gen_vv, gen_helper_vclo_b)
1204
+TRANS(vclo_h, LSX, gen_vv, gen_helper_vclo_h)
1205
+TRANS(vclo_w, LSX, gen_vv, gen_helper_vclo_w)
1206
+TRANS(vclo_d, LSX, gen_vv, gen_helper_vclo_d)
1207
+TRANS(vclz_b, LSX, gen_vv, gen_helper_vclz_b)
1208
+TRANS(vclz_h, LSX, gen_vv, gen_helper_vclz_h)
1209
+TRANS(vclz_w, LSX, gen_vv, gen_helper_vclz_w)
1210
+TRANS(vclz_d, LSX, gen_vv, gen_helper_vclz_d)
1211
+
1212
+TRANS(vpcnt_b, LSX, gen_vv, gen_helper_vpcnt_b)
1213
+TRANS(vpcnt_h, LSX, gen_vv, gen_helper_vpcnt_h)
1214
+TRANS(vpcnt_w, LSX, gen_vv, gen_helper_vpcnt_w)
1215
+TRANS(vpcnt_d, LSX, gen_vv, gen_helper_vpcnt_d)
1216
1217
static void do_vbit(unsigned vece, TCGv_vec t, TCGv_vec a, TCGv_vec b,
1218
void (*func)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec))
1219
@@ -XXX,XX +XXX,XX @@ static void do_vbitclr(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1220
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1221
}
1222
1223
-TRANS(vbitclr_b, ALL, gvec_vvv, MO_8, do_vbitclr)
1224
-TRANS(vbitclr_h, ALL, gvec_vvv, MO_16, do_vbitclr)
1225
-TRANS(vbitclr_w, ALL, gvec_vvv, MO_32, do_vbitclr)
1226
-TRANS(vbitclr_d, ALL, gvec_vvv, MO_64, do_vbitclr)
1227
+TRANS(vbitclr_b, LSX, gvec_vvv, MO_8, do_vbitclr)
1228
+TRANS(vbitclr_h, LSX, gvec_vvv, MO_16, do_vbitclr)
1229
+TRANS(vbitclr_w, LSX, gvec_vvv, MO_32, do_vbitclr)
1230
+TRANS(vbitclr_d, LSX, gvec_vvv, MO_64, do_vbitclr)
1231
1232
static void do_vbiti(unsigned vece, TCGv_vec t, TCGv_vec a, int64_t imm,
1233
void (*func)(unsigned, TCGv_vec, TCGv_vec, TCGv_vec))
1234
@@ -XXX,XX +XXX,XX @@ static void do_vbitclri(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1235
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
1236
}
1237
1238
-TRANS(vbitclri_b, ALL, gvec_vv_i, MO_8, do_vbitclri)
1239
-TRANS(vbitclri_h, ALL, gvec_vv_i, MO_16, do_vbitclri)
1240
-TRANS(vbitclri_w, ALL, gvec_vv_i, MO_32, do_vbitclri)
1241
-TRANS(vbitclri_d, ALL, gvec_vv_i, MO_64, do_vbitclri)
1242
+TRANS(vbitclri_b, LSX, gvec_vv_i, MO_8, do_vbitclri)
1243
+TRANS(vbitclri_h, LSX, gvec_vv_i, MO_16, do_vbitclri)
1244
+TRANS(vbitclri_w, LSX, gvec_vv_i, MO_32, do_vbitclri)
1245
+TRANS(vbitclri_d, LSX, gvec_vv_i, MO_64, do_vbitclri)
1246
1247
static void do_vbitset(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1248
uint32_t vk_ofs, uint32_t oprsz, uint32_t maxsz)
1249
@@ -XXX,XX +XXX,XX @@ static void do_vbitset(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1250
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1251
}
1252
1253
-TRANS(vbitset_b, ALL, gvec_vvv, MO_8, do_vbitset)
1254
-TRANS(vbitset_h, ALL, gvec_vvv, MO_16, do_vbitset)
1255
-TRANS(vbitset_w, ALL, gvec_vvv, MO_32, do_vbitset)
1256
-TRANS(vbitset_d, ALL, gvec_vvv, MO_64, do_vbitset)
1257
+TRANS(vbitset_b, LSX, gvec_vvv, MO_8, do_vbitset)
1258
+TRANS(vbitset_h, LSX, gvec_vvv, MO_16, do_vbitset)
1259
+TRANS(vbitset_w, LSX, gvec_vvv, MO_32, do_vbitset)
1260
+TRANS(vbitset_d, LSX, gvec_vvv, MO_64, do_vbitset)
1261
1262
static void do_vbitseti(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1263
int64_t imm, uint32_t oprsz, uint32_t maxsz)
1264
@@ -XXX,XX +XXX,XX @@ static void do_vbitseti(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1265
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
1266
}
1267
1268
-TRANS(vbitseti_b, ALL, gvec_vv_i, MO_8, do_vbitseti)
1269
-TRANS(vbitseti_h, ALL, gvec_vv_i, MO_16, do_vbitseti)
1270
-TRANS(vbitseti_w, ALL, gvec_vv_i, MO_32, do_vbitseti)
1271
-TRANS(vbitseti_d, ALL, gvec_vv_i, MO_64, do_vbitseti)
1272
+TRANS(vbitseti_b, LSX, gvec_vv_i, MO_8, do_vbitseti)
1273
+TRANS(vbitseti_h, LSX, gvec_vv_i, MO_16, do_vbitseti)
1274
+TRANS(vbitseti_w, LSX, gvec_vv_i, MO_32, do_vbitseti)
1275
+TRANS(vbitseti_d, LSX, gvec_vv_i, MO_64, do_vbitseti)
1276
1277
static void do_vbitrev(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1278
uint32_t vk_ofs, uint32_t oprsz, uint32_t maxsz)
1279
@@ -XXX,XX +XXX,XX @@ static void do_vbitrev(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1280
tcg_gen_gvec_3(vd_ofs, vj_ofs, vk_ofs, oprsz, maxsz, &op[vece]);
1281
}
1282
1283
-TRANS(vbitrev_b, ALL, gvec_vvv, MO_8, do_vbitrev)
1284
-TRANS(vbitrev_h, ALL, gvec_vvv, MO_16, do_vbitrev)
1285
-TRANS(vbitrev_w, ALL, gvec_vvv, MO_32, do_vbitrev)
1286
-TRANS(vbitrev_d, ALL, gvec_vvv, MO_64, do_vbitrev)
1287
+TRANS(vbitrev_b, LSX, gvec_vvv, MO_8, do_vbitrev)
1288
+TRANS(vbitrev_h, LSX, gvec_vvv, MO_16, do_vbitrev)
1289
+TRANS(vbitrev_w, LSX, gvec_vvv, MO_32, do_vbitrev)
1290
+TRANS(vbitrev_d, LSX, gvec_vvv, MO_64, do_vbitrev)
1291
1292
static void do_vbitrevi(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1293
int64_t imm, uint32_t oprsz, uint32_t maxsz)
1294
@@ -XXX,XX +XXX,XX @@ static void do_vbitrevi(unsigned vece, uint32_t vd_ofs, uint32_t vj_ofs,
1295
tcg_gen_gvec_2i(vd_ofs, vj_ofs, oprsz, maxsz, imm, &op[vece]);
1296
}
1297
1298
-TRANS(vbitrevi_b, ALL, gvec_vv_i, MO_8, do_vbitrevi)
1299
-TRANS(vbitrevi_h, ALL, gvec_vv_i, MO_16, do_vbitrevi)
1300
-TRANS(vbitrevi_w, ALL, gvec_vv_i, MO_32, do_vbitrevi)
1301
-TRANS(vbitrevi_d, ALL, gvec_vv_i, MO_64, do_vbitrevi)
1302
-
1303
-TRANS(vfrstp_b, ALL, gen_vvv, gen_helper_vfrstp_b)
1304
-TRANS(vfrstp_h, ALL, gen_vvv, gen_helper_vfrstp_h)
1305
-TRANS(vfrstpi_b, ALL, gen_vv_i, gen_helper_vfrstpi_b)
1306
-TRANS(vfrstpi_h, ALL, gen_vv_i, gen_helper_vfrstpi_h)
1307
-
1308
-TRANS(vfadd_s, ALL, gen_vvv, gen_helper_vfadd_s)
1309
-TRANS(vfadd_d, ALL, gen_vvv, gen_helper_vfadd_d)
1310
-TRANS(vfsub_s, ALL, gen_vvv, gen_helper_vfsub_s)
1311
-TRANS(vfsub_d, ALL, gen_vvv, gen_helper_vfsub_d)
1312
-TRANS(vfmul_s, ALL, gen_vvv, gen_helper_vfmul_s)
1313
-TRANS(vfmul_d, ALL, gen_vvv, gen_helper_vfmul_d)
1314
-TRANS(vfdiv_s, ALL, gen_vvv, gen_helper_vfdiv_s)
1315
-TRANS(vfdiv_d, ALL, gen_vvv, gen_helper_vfdiv_d)
1316
-
1317
-TRANS(vfmadd_s, ALL, gen_vvvv, gen_helper_vfmadd_s)
1318
-TRANS(vfmadd_d, ALL, gen_vvvv, gen_helper_vfmadd_d)
1319
-TRANS(vfmsub_s, ALL, gen_vvvv, gen_helper_vfmsub_s)
1320
-TRANS(vfmsub_d, ALL, gen_vvvv, gen_helper_vfmsub_d)
1321
-TRANS(vfnmadd_s, ALL, gen_vvvv, gen_helper_vfnmadd_s)
1322
-TRANS(vfnmadd_d, ALL, gen_vvvv, gen_helper_vfnmadd_d)
1323
-TRANS(vfnmsub_s, ALL, gen_vvvv, gen_helper_vfnmsub_s)
1324
-TRANS(vfnmsub_d, ALL, gen_vvvv, gen_helper_vfnmsub_d)
1325
-
1326
-TRANS(vfmax_s, ALL, gen_vvv, gen_helper_vfmax_s)
1327
-TRANS(vfmax_d, ALL, gen_vvv, gen_helper_vfmax_d)
1328
-TRANS(vfmin_s, ALL, gen_vvv, gen_helper_vfmin_s)
1329
-TRANS(vfmin_d, ALL, gen_vvv, gen_helper_vfmin_d)
1330
-
1331
-TRANS(vfmaxa_s, ALL, gen_vvv, gen_helper_vfmaxa_s)
1332
-TRANS(vfmaxa_d, ALL, gen_vvv, gen_helper_vfmaxa_d)
1333
-TRANS(vfmina_s, ALL, gen_vvv, gen_helper_vfmina_s)
1334
-TRANS(vfmina_d, ALL, gen_vvv, gen_helper_vfmina_d)
1335
-
1336
-TRANS(vflogb_s, ALL, gen_vv, gen_helper_vflogb_s)
1337
-TRANS(vflogb_d, ALL, gen_vv, gen_helper_vflogb_d)
1338
-
1339
-TRANS(vfclass_s, ALL, gen_vv, gen_helper_vfclass_s)
1340
-TRANS(vfclass_d, ALL, gen_vv, gen_helper_vfclass_d)
1341
-
1342
-TRANS(vfsqrt_s, ALL, gen_vv, gen_helper_vfsqrt_s)
1343
-TRANS(vfsqrt_d, ALL, gen_vv, gen_helper_vfsqrt_d)
1344
-TRANS(vfrecip_s, ALL, gen_vv, gen_helper_vfrecip_s)
1345
-TRANS(vfrecip_d, ALL, gen_vv, gen_helper_vfrecip_d)
1346
-TRANS(vfrsqrt_s, ALL, gen_vv, gen_helper_vfrsqrt_s)
1347
-TRANS(vfrsqrt_d, ALL, gen_vv, gen_helper_vfrsqrt_d)
1348
-
1349
-TRANS(vfcvtl_s_h, ALL, gen_vv, gen_helper_vfcvtl_s_h)
1350
-TRANS(vfcvth_s_h, ALL, gen_vv, gen_helper_vfcvth_s_h)
1351
-TRANS(vfcvtl_d_s, ALL, gen_vv, gen_helper_vfcvtl_d_s)
1352
-TRANS(vfcvth_d_s, ALL, gen_vv, gen_helper_vfcvth_d_s)
1353
-TRANS(vfcvt_h_s, ALL, gen_vvv, gen_helper_vfcvt_h_s)
1354
-TRANS(vfcvt_s_d, ALL, gen_vvv, gen_helper_vfcvt_s_d)
1355
-
1356
-TRANS(vfrintrne_s, ALL, gen_vv, gen_helper_vfrintrne_s)
1357
-TRANS(vfrintrne_d, ALL, gen_vv, gen_helper_vfrintrne_d)
1358
-TRANS(vfrintrz_s, ALL, gen_vv, gen_helper_vfrintrz_s)
1359
-TRANS(vfrintrz_d, ALL, gen_vv, gen_helper_vfrintrz_d)
1360
-TRANS(vfrintrp_s, ALL, gen_vv, gen_helper_vfrintrp_s)
1361
-TRANS(vfrintrp_d, ALL, gen_vv, gen_helper_vfrintrp_d)
1362
-TRANS(vfrintrm_s, ALL, gen_vv, gen_helper_vfrintrm_s)
1363
-TRANS(vfrintrm_d, ALL, gen_vv, gen_helper_vfrintrm_d)
1364
-TRANS(vfrint_s, ALL, gen_vv, gen_helper_vfrint_s)
1365
-TRANS(vfrint_d, ALL, gen_vv, gen_helper_vfrint_d)
1366
-
1367
-TRANS(vftintrne_w_s, ALL, gen_vv, gen_helper_vftintrne_w_s)
1368
-TRANS(vftintrne_l_d, ALL, gen_vv, gen_helper_vftintrne_l_d)
1369
-TRANS(vftintrz_w_s, ALL, gen_vv, gen_helper_vftintrz_w_s)
1370
-TRANS(vftintrz_l_d, ALL, gen_vv, gen_helper_vftintrz_l_d)
1371
-TRANS(vftintrp_w_s, ALL, gen_vv, gen_helper_vftintrp_w_s)
1372
-TRANS(vftintrp_l_d, ALL, gen_vv, gen_helper_vftintrp_l_d)
1373
-TRANS(vftintrm_w_s, ALL, gen_vv, gen_helper_vftintrm_w_s)
1374
-TRANS(vftintrm_l_d, ALL, gen_vv, gen_helper_vftintrm_l_d)
1375
-TRANS(vftint_w_s, ALL, gen_vv, gen_helper_vftint_w_s)
1376
-TRANS(vftint_l_d, ALL, gen_vv, gen_helper_vftint_l_d)
1377
-TRANS(vftintrz_wu_s, ALL, gen_vv, gen_helper_vftintrz_wu_s)
1378
-TRANS(vftintrz_lu_d, ALL, gen_vv, gen_helper_vftintrz_lu_d)
1379
-TRANS(vftint_wu_s, ALL, gen_vv, gen_helper_vftint_wu_s)
1380
-TRANS(vftint_lu_d, ALL, gen_vv, gen_helper_vftint_lu_d)
1381
-TRANS(vftintrne_w_d, ALL, gen_vvv, gen_helper_vftintrne_w_d)
1382
-TRANS(vftintrz_w_d, ALL, gen_vvv, gen_helper_vftintrz_w_d)
1383
-TRANS(vftintrp_w_d, ALL, gen_vvv, gen_helper_vftintrp_w_d)
1384
-TRANS(vftintrm_w_d, ALL, gen_vvv, gen_helper_vftintrm_w_d)
1385
-TRANS(vftint_w_d, ALL, gen_vvv, gen_helper_vftint_w_d)
1386
-TRANS(vftintrnel_l_s, ALL, gen_vv, gen_helper_vftintrnel_l_s)
1387
-TRANS(vftintrneh_l_s, ALL, gen_vv, gen_helper_vftintrneh_l_s)
1388
-TRANS(vftintrzl_l_s, ALL, gen_vv, gen_helper_vftintrzl_l_s)
1389
-TRANS(vftintrzh_l_s, ALL, gen_vv, gen_helper_vftintrzh_l_s)
1390
-TRANS(vftintrpl_l_s, ALL, gen_vv, gen_helper_vftintrpl_l_s)
1391
-TRANS(vftintrph_l_s, ALL, gen_vv, gen_helper_vftintrph_l_s)
1392
-TRANS(vftintrml_l_s, ALL, gen_vv, gen_helper_vftintrml_l_s)
1393
-TRANS(vftintrmh_l_s, ALL, gen_vv, gen_helper_vftintrmh_l_s)
1394
-TRANS(vftintl_l_s, ALL, gen_vv, gen_helper_vftintl_l_s)
1395
-TRANS(vftinth_l_s, ALL, gen_vv, gen_helper_vftinth_l_s)
1396
-
1397
-TRANS(vffint_s_w, ALL, gen_vv, gen_helper_vffint_s_w)
1398
-TRANS(vffint_d_l, ALL, gen_vv, gen_helper_vffint_d_l)
1399
-TRANS(vffint_s_wu, ALL, gen_vv, gen_helper_vffint_s_wu)
1400
-TRANS(vffint_d_lu, ALL, gen_vv, gen_helper_vffint_d_lu)
1401
-TRANS(vffintl_d_w, ALL, gen_vv, gen_helper_vffintl_d_w)
1402
-TRANS(vffinth_d_w, ALL, gen_vv, gen_helper_vffinth_d_w)
1403
-TRANS(vffint_s_l, ALL, gen_vvv, gen_helper_vffint_s_l)
1404
+TRANS(vbitrevi_b, LSX, gvec_vv_i, MO_8, do_vbitrevi)
1405
+TRANS(vbitrevi_h, LSX, gvec_vv_i, MO_16, do_vbitrevi)
1406
+TRANS(vbitrevi_w, LSX, gvec_vv_i, MO_32, do_vbitrevi)
1407
+TRANS(vbitrevi_d, LSX, gvec_vv_i, MO_64, do_vbitrevi)
1408
+
1409
+TRANS(vfrstp_b, LSX, gen_vvv, gen_helper_vfrstp_b)
1410
+TRANS(vfrstp_h, LSX, gen_vvv, gen_helper_vfrstp_h)
1411
+TRANS(vfrstpi_b, LSX, gen_vv_i, gen_helper_vfrstpi_b)
1412
+TRANS(vfrstpi_h, LSX, gen_vv_i, gen_helper_vfrstpi_h)
1413
+
1414
+TRANS(vfadd_s, LSX, gen_vvv, gen_helper_vfadd_s)
1415
+TRANS(vfadd_d, LSX, gen_vvv, gen_helper_vfadd_d)
1416
+TRANS(vfsub_s, LSX, gen_vvv, gen_helper_vfsub_s)
1417
+TRANS(vfsub_d, LSX, gen_vvv, gen_helper_vfsub_d)
1418
+TRANS(vfmul_s, LSX, gen_vvv, gen_helper_vfmul_s)
1419
+TRANS(vfmul_d, LSX, gen_vvv, gen_helper_vfmul_d)
1420
+TRANS(vfdiv_s, LSX, gen_vvv, gen_helper_vfdiv_s)
1421
+TRANS(vfdiv_d, LSX, gen_vvv, gen_helper_vfdiv_d)
1422
+
1423
+TRANS(vfmadd_s, LSX, gen_vvvv, gen_helper_vfmadd_s)
1424
+TRANS(vfmadd_d, LSX, gen_vvvv, gen_helper_vfmadd_d)
1425
+TRANS(vfmsub_s, LSX, gen_vvvv, gen_helper_vfmsub_s)
1426
+TRANS(vfmsub_d, LSX, gen_vvvv, gen_helper_vfmsub_d)
1427
+TRANS(vfnmadd_s, LSX, gen_vvvv, gen_helper_vfnmadd_s)
1428
+TRANS(vfnmadd_d, LSX, gen_vvvv, gen_helper_vfnmadd_d)
1429
+TRANS(vfnmsub_s, LSX, gen_vvvv, gen_helper_vfnmsub_s)
1430
+TRANS(vfnmsub_d, LSX, gen_vvvv, gen_helper_vfnmsub_d)
1431
+
1432
+TRANS(vfmax_s, LSX, gen_vvv, gen_helper_vfmax_s)
1433
+TRANS(vfmax_d, LSX, gen_vvv, gen_helper_vfmax_d)
1434
+TRANS(vfmin_s, LSX, gen_vvv, gen_helper_vfmin_s)
1435
+TRANS(vfmin_d, LSX, gen_vvv, gen_helper_vfmin_d)
1436
+
1437
+TRANS(vfmaxa_s, LSX, gen_vvv, gen_helper_vfmaxa_s)
1438
+TRANS(vfmaxa_d, LSX, gen_vvv, gen_helper_vfmaxa_d)
1439
+TRANS(vfmina_s, LSX, gen_vvv, gen_helper_vfmina_s)
1440
+TRANS(vfmina_d, LSX, gen_vvv, gen_helper_vfmina_d)
1441
+
1442
+TRANS(vflogb_s, LSX, gen_vv, gen_helper_vflogb_s)
1443
+TRANS(vflogb_d, LSX, gen_vv, gen_helper_vflogb_d)
1444
+
1445
+TRANS(vfclass_s, LSX, gen_vv, gen_helper_vfclass_s)
1446
+TRANS(vfclass_d, LSX, gen_vv, gen_helper_vfclass_d)
1447
+
1448
+TRANS(vfsqrt_s, LSX, gen_vv, gen_helper_vfsqrt_s)
1449
+TRANS(vfsqrt_d, LSX, gen_vv, gen_helper_vfsqrt_d)
1450
+TRANS(vfrecip_s, LSX, gen_vv, gen_helper_vfrecip_s)
1451
+TRANS(vfrecip_d, LSX, gen_vv, gen_helper_vfrecip_d)
1452
+TRANS(vfrsqrt_s, LSX, gen_vv, gen_helper_vfrsqrt_s)
1453
+TRANS(vfrsqrt_d, LSX, gen_vv, gen_helper_vfrsqrt_d)
1454
+
1455
+TRANS(vfcvtl_s_h, LSX, gen_vv, gen_helper_vfcvtl_s_h)
1456
+TRANS(vfcvth_s_h, LSX, gen_vv, gen_helper_vfcvth_s_h)
1457
+TRANS(vfcvtl_d_s, LSX, gen_vv, gen_helper_vfcvtl_d_s)
1458
+TRANS(vfcvth_d_s, LSX, gen_vv, gen_helper_vfcvth_d_s)
1459
+TRANS(vfcvt_h_s, LSX, gen_vvv, gen_helper_vfcvt_h_s)
1460
+TRANS(vfcvt_s_d, LSX, gen_vvv, gen_helper_vfcvt_s_d)
1461
+
1462
+TRANS(vfrintrne_s, LSX, gen_vv, gen_helper_vfrintrne_s)
1463
+TRANS(vfrintrne_d, LSX, gen_vv, gen_helper_vfrintrne_d)
1464
+TRANS(vfrintrz_s, LSX, gen_vv, gen_helper_vfrintrz_s)
1465
+TRANS(vfrintrz_d, LSX, gen_vv, gen_helper_vfrintrz_d)
1466
+TRANS(vfrintrp_s, LSX, gen_vv, gen_helper_vfrintrp_s)
1467
+TRANS(vfrintrp_d, LSX, gen_vv, gen_helper_vfrintrp_d)
1468
+TRANS(vfrintrm_s, LSX, gen_vv, gen_helper_vfrintrm_s)
1469
+TRANS(vfrintrm_d, LSX, gen_vv, gen_helper_vfrintrm_d)
1470
+TRANS(vfrint_s, LSX, gen_vv, gen_helper_vfrint_s)
1471
+TRANS(vfrint_d, LSX, gen_vv, gen_helper_vfrint_d)
1472
+
1473
+TRANS(vftintrne_w_s, LSX, gen_vv, gen_helper_vftintrne_w_s)
1474
+TRANS(vftintrne_l_d, LSX, gen_vv, gen_helper_vftintrne_l_d)
1475
+TRANS(vftintrz_w_s, LSX, gen_vv, gen_helper_vftintrz_w_s)
1476
+TRANS(vftintrz_l_d, LSX, gen_vv, gen_helper_vftintrz_l_d)
1477
+TRANS(vftintrp_w_s, LSX, gen_vv, gen_helper_vftintrp_w_s)
1478
+TRANS(vftintrp_l_d, LSX, gen_vv, gen_helper_vftintrp_l_d)
1479
+TRANS(vftintrm_w_s, LSX, gen_vv, gen_helper_vftintrm_w_s)
1480
+TRANS(vftintrm_l_d, LSX, gen_vv, gen_helper_vftintrm_l_d)
1481
+TRANS(vftint_w_s, LSX, gen_vv, gen_helper_vftint_w_s)
1482
+TRANS(vftint_l_d, LSX, gen_vv, gen_helper_vftint_l_d)
1483
+TRANS(vftintrz_wu_s, LSX, gen_vv, gen_helper_vftintrz_wu_s)
1484
+TRANS(vftintrz_lu_d, LSX, gen_vv, gen_helper_vftintrz_lu_d)
1485
+TRANS(vftint_wu_s, LSX, gen_vv, gen_helper_vftint_wu_s)
1486
+TRANS(vftint_lu_d, LSX, gen_vv, gen_helper_vftint_lu_d)
1487
+TRANS(vftintrne_w_d, LSX, gen_vvv, gen_helper_vftintrne_w_d)
1488
+TRANS(vftintrz_w_d, LSX, gen_vvv, gen_helper_vftintrz_w_d)
1489
+TRANS(vftintrp_w_d, LSX, gen_vvv, gen_helper_vftintrp_w_d)
1490
+TRANS(vftintrm_w_d, LSX, gen_vvv, gen_helper_vftintrm_w_d)
1491
+TRANS(vftint_w_d, LSX, gen_vvv, gen_helper_vftint_w_d)
1492
+TRANS(vftintrnel_l_s, LSX, gen_vv, gen_helper_vftintrnel_l_s)
1493
+TRANS(vftintrneh_l_s, LSX, gen_vv, gen_helper_vftintrneh_l_s)
1494
+TRANS(vftintrzl_l_s, LSX, gen_vv, gen_helper_vftintrzl_l_s)
1495
+TRANS(vftintrzh_l_s, LSX, gen_vv, gen_helper_vftintrzh_l_s)
1496
+TRANS(vftintrpl_l_s, LSX, gen_vv, gen_helper_vftintrpl_l_s)
1497
+TRANS(vftintrph_l_s, LSX, gen_vv, gen_helper_vftintrph_l_s)
1498
+TRANS(vftintrml_l_s, LSX, gen_vv, gen_helper_vftintrml_l_s)
1499
+TRANS(vftintrmh_l_s, LSX, gen_vv, gen_helper_vftintrmh_l_s)
1500
+TRANS(vftintl_l_s, LSX, gen_vv, gen_helper_vftintl_l_s)
1501
+TRANS(vftinth_l_s, LSX, gen_vv, gen_helper_vftinth_l_s)
1502
+
1503
+TRANS(vffint_s_w, LSX, gen_vv, gen_helper_vffint_s_w)
1504
+TRANS(vffint_d_l, LSX, gen_vv, gen_helper_vffint_d_l)
1505
+TRANS(vffint_s_wu, LSX, gen_vv, gen_helper_vffint_s_wu)
1506
+TRANS(vffint_d_lu, LSX, gen_vv, gen_helper_vffint_d_lu)
1507
+TRANS(vffintl_d_w, LSX, gen_vv, gen_helper_vffintl_d_w)
1508
+TRANS(vffinth_d_w, LSX, gen_vv, gen_helper_vffinth_d_w)
1509
+TRANS(vffint_s_l, LSX, gen_vvv, gen_helper_vffint_s_l)
1510
1511
static bool do_cmp(DisasContext *ctx, arg_vvv *a, MemOp mop, TCGCond cond)
1512
{
1513
@@ -XXX,XX +XXX,XX @@ static bool do_## NAME ##_u(DisasContext *ctx, arg_vv_i *a, MemOp mop) \
1514
DO_CMPI_U(vslei)
1515
DO_CMPI_U(vslti)
1516
1517
-TRANS(vseq_b, ALL, do_cmp, MO_8, TCG_COND_EQ)
1518
-TRANS(vseq_h, ALL, do_cmp, MO_16, TCG_COND_EQ)
1519
-TRANS(vseq_w, ALL, do_cmp, MO_32, TCG_COND_EQ)
1520
-TRANS(vseq_d, ALL, do_cmp, MO_64, TCG_COND_EQ)
1521
-TRANS(vseqi_b, ALL, do_vseqi_s, MO_8)
1522
-TRANS(vseqi_h, ALL, do_vseqi_s, MO_16)
1523
-TRANS(vseqi_w, ALL, do_vseqi_s, MO_32)
1524
-TRANS(vseqi_d, ALL, do_vseqi_s, MO_64)
1525
-
1526
-TRANS(vsle_b, ALL, do_cmp, MO_8, TCG_COND_LE)
1527
-TRANS(vsle_h, ALL, do_cmp, MO_16, TCG_COND_LE)
1528
-TRANS(vsle_w, ALL, do_cmp, MO_32, TCG_COND_LE)
1529
-TRANS(vsle_d, ALL, do_cmp, MO_64, TCG_COND_LE)
1530
-TRANS(vslei_b, ALL, do_vslei_s, MO_8)
1531
-TRANS(vslei_h, ALL, do_vslei_s, MO_16)
1532
-TRANS(vslei_w, ALL, do_vslei_s, MO_32)
1533
-TRANS(vslei_d, ALL, do_vslei_s, MO_64)
1534
-TRANS(vsle_bu, ALL, do_cmp, MO_8, TCG_COND_LEU)
1535
-TRANS(vsle_hu, ALL, do_cmp, MO_16, TCG_COND_LEU)
1536
-TRANS(vsle_wu, ALL, do_cmp, MO_32, TCG_COND_LEU)
1537
-TRANS(vsle_du, ALL, do_cmp, MO_64, TCG_COND_LEU)
1538
-TRANS(vslei_bu, ALL, do_vslei_u, MO_8)
1539
-TRANS(vslei_hu, ALL, do_vslei_u, MO_16)
1540
-TRANS(vslei_wu, ALL, do_vslei_u, MO_32)
1541
-TRANS(vslei_du, ALL, do_vslei_u, MO_64)
1542
-
1543
-TRANS(vslt_b, ALL, do_cmp, MO_8, TCG_COND_LT)
1544
-TRANS(vslt_h, ALL, do_cmp, MO_16, TCG_COND_LT)
1545
-TRANS(vslt_w, ALL, do_cmp, MO_32, TCG_COND_LT)
1546
-TRANS(vslt_d, ALL, do_cmp, MO_64, TCG_COND_LT)
1547
-TRANS(vslti_b, ALL, do_vslti_s, MO_8)
1548
-TRANS(vslti_h, ALL, do_vslti_s, MO_16)
1549
-TRANS(vslti_w, ALL, do_vslti_s, MO_32)
1550
-TRANS(vslti_d, ALL, do_vslti_s, MO_64)
1551
-TRANS(vslt_bu, ALL, do_cmp, MO_8, TCG_COND_LTU)
1552
-TRANS(vslt_hu, ALL, do_cmp, MO_16, TCG_COND_LTU)
1553
-TRANS(vslt_wu, ALL, do_cmp, MO_32, TCG_COND_LTU)
1554
-TRANS(vslt_du, ALL, do_cmp, MO_64, TCG_COND_LTU)
1555
-TRANS(vslti_bu, ALL, do_vslti_u, MO_8)
1556
-TRANS(vslti_hu, ALL, do_vslti_u, MO_16)
1557
-TRANS(vslti_wu, ALL, do_vslti_u, MO_32)
1558
-TRANS(vslti_du, ALL, do_vslti_u, MO_64)
1559
+TRANS(vseq_b, LSX, do_cmp, MO_8, TCG_COND_EQ)
1560
+TRANS(vseq_h, LSX, do_cmp, MO_16, TCG_COND_EQ)
1561
+TRANS(vseq_w, LSX, do_cmp, MO_32, TCG_COND_EQ)
1562
+TRANS(vseq_d, LSX, do_cmp, MO_64, TCG_COND_EQ)
1563
+TRANS(vseqi_b, LSX, do_vseqi_s, MO_8)
1564
+TRANS(vseqi_h, LSX, do_vseqi_s, MO_16)
1565
+TRANS(vseqi_w, LSX, do_vseqi_s, MO_32)
1566
+TRANS(vseqi_d, LSX, do_vseqi_s, MO_64)
1567
+
1568
+TRANS(vsle_b, LSX, do_cmp, MO_8, TCG_COND_LE)
1569
+TRANS(vsle_h, LSX, do_cmp, MO_16, TCG_COND_LE)
1570
+TRANS(vsle_w, LSX, do_cmp, MO_32, TCG_COND_LE)
1571
+TRANS(vsle_d, LSX, do_cmp, MO_64, TCG_COND_LE)
1572
+TRANS(vslei_b, LSX, do_vslei_s, MO_8)
1573
+TRANS(vslei_h, LSX, do_vslei_s, MO_16)
1574
+TRANS(vslei_w, LSX, do_vslei_s, MO_32)
1575
+TRANS(vslei_d, LSX, do_vslei_s, MO_64)
1576
+TRANS(vsle_bu, LSX, do_cmp, MO_8, TCG_COND_LEU)
1577
+TRANS(vsle_hu, LSX, do_cmp, MO_16, TCG_COND_LEU)
1578
+TRANS(vsle_wu, LSX, do_cmp, MO_32, TCG_COND_LEU)
1579
+TRANS(vsle_du, LSX, do_cmp, MO_64, TCG_COND_LEU)
1580
+TRANS(vslei_bu, LSX, do_vslei_u, MO_8)
1581
+TRANS(vslei_hu, LSX, do_vslei_u, MO_16)
1582
+TRANS(vslei_wu, LSX, do_vslei_u, MO_32)
1583
+TRANS(vslei_du, LSX, do_vslei_u, MO_64)
1584
+
1585
+TRANS(vslt_b, LSX, do_cmp, MO_8, TCG_COND_LT)
1586
+TRANS(vslt_h, LSX, do_cmp, MO_16, TCG_COND_LT)
1587
+TRANS(vslt_w, LSX, do_cmp, MO_32, TCG_COND_LT)
1588
+TRANS(vslt_d, LSX, do_cmp, MO_64, TCG_COND_LT)
1589
+TRANS(vslti_b, LSX, do_vslti_s, MO_8)
1590
+TRANS(vslti_h, LSX, do_vslti_s, MO_16)
1591
+TRANS(vslti_w, LSX, do_vslti_s, MO_32)
1592
+TRANS(vslti_d, LSX, do_vslti_s, MO_64)
1593
+TRANS(vslt_bu, LSX, do_cmp, MO_8, TCG_COND_LTU)
1594
+TRANS(vslt_hu, LSX, do_cmp, MO_16, TCG_COND_LTU)
1595
+TRANS(vslt_wu, LSX, do_cmp, MO_32, TCG_COND_LTU)
1596
+TRANS(vslt_du, LSX, do_cmp, MO_64, TCG_COND_LTU)
1597
+TRANS(vslti_bu, LSX, do_vslti_u, MO_8)
1598
+TRANS(vslti_hu, LSX, do_vslti_u, MO_16)
1599
+TRANS(vslti_wu, LSX, do_vslti_u, MO_32)
1600
+TRANS(vslti_du, LSX, do_vslti_u, MO_64)
1601
1602
static bool trans_vfcmp_cond_s(DisasContext *ctx, arg_vvv_fcond *a)
1603
{
1604
@@ -XXX,XX +XXX,XX @@ static bool trans_vfcmp_cond_s(DisasContext *ctx, arg_vvv_fcond *a)
1605
TCGv_i32 vj = tcg_constant_i32(a->vj);
1606
TCGv_i32 vk = tcg_constant_i32(a->vk);
1607
1608
+ if (!avail_LSX(ctx)) {
1609
+ return false;
1610
+ }
1611
+
1612
CHECK_SXE;
1613
1614
fn = (a->fcond & 1 ? gen_helper_vfcmp_s_s : gen_helper_vfcmp_c_s);
1615
@@ -XXX,XX +XXX,XX @@ static bool trans_vfcmp_cond_d(DisasContext *ctx, arg_vvv_fcond *a)
1616
TCGv_i32 vj = tcg_constant_i32(a->vj);
1617
TCGv_i32 vk = tcg_constant_i32(a->vk);
1618
1619
+ if (!avail_LSX(ctx)) {
1620
+ return false;
1621
+ }
1622
+
1623
+ CHECK_SXE;
1624
+
1625
fn = (a->fcond & 1 ? gen_helper_vfcmp_s_d : gen_helper_vfcmp_c_d);
1626
flags = get_fcmp_flags(a->fcond >> 1);
1627
fn(cpu_env, vd, vj, vk, tcg_constant_i32(flags));
1628
@@ -XXX,XX +XXX,XX @@ static bool trans_vfcmp_cond_d(DisasContext *ctx, arg_vvv_fcond *a)
1629
1630
static bool trans_vbitsel_v(DisasContext *ctx, arg_vvvv *a)
1631
{
1632
+ if (!avail_LSX(ctx)) {
1633
+ return false;
1634
+ }
1635
+
1636
CHECK_SXE;
1637
1638
tcg_gen_gvec_bitsel(MO_64, vec_full_offset(a->vd), vec_full_offset(a->va),
1639
@@ -XXX,XX +XXX,XX @@ static bool trans_vbitseli_b(DisasContext *ctx, arg_vv_i *a)
1640
.load_dest = true
1641
};
1642
1643
+ if (!avail_LSX(ctx)) {
1644
+ return false;
1645
+ }
1646
+
1647
CHECK_SXE;
1648
1649
tcg_gen_gvec_2i(vec_full_offset(a->vd), vec_full_offset(a->vj),
1650
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_cv *a) \
1651
get_vreg64(ah, a->vj, 1); \
1652
get_vreg64(al, a->vj, 0); \
1653
\
1654
+ if (!avail_LSX(ctx)) { \
1655
+ return false; \
1656
+ } \
1657
+ \
1658
CHECK_SXE; \
1659
tcg_gen_or_i64(t1, al, ah); \
1660
tcg_gen_setcondi_i64(COND, t1, t1, 0); \
1661
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_cv *a) \
1662
VSET(vseteqz_v, TCG_COND_EQ)
1663
VSET(vsetnez_v, TCG_COND_NE)
1664
1665
-TRANS(vsetanyeqz_b, ALL, gen_cv, gen_helper_vsetanyeqz_b)
1666
-TRANS(vsetanyeqz_h, ALL, gen_cv, gen_helper_vsetanyeqz_h)
1667
-TRANS(vsetanyeqz_w, ALL, gen_cv, gen_helper_vsetanyeqz_w)
1668
-TRANS(vsetanyeqz_d, ALL, gen_cv, gen_helper_vsetanyeqz_d)
1669
-TRANS(vsetallnez_b, ALL, gen_cv, gen_helper_vsetallnez_b)
1670
-TRANS(vsetallnez_h, ALL, gen_cv, gen_helper_vsetallnez_h)
1671
-TRANS(vsetallnez_w, ALL, gen_cv, gen_helper_vsetallnez_w)
1672
-TRANS(vsetallnez_d, ALL, gen_cv, gen_helper_vsetallnez_d)
1673
+TRANS(vsetanyeqz_b, LSX, gen_cv, gen_helper_vsetanyeqz_b)
1674
+TRANS(vsetanyeqz_h, LSX, gen_cv, gen_helper_vsetanyeqz_h)
1675
+TRANS(vsetanyeqz_w, LSX, gen_cv, gen_helper_vsetanyeqz_w)
1676
+TRANS(vsetanyeqz_d, LSX, gen_cv, gen_helper_vsetanyeqz_d)
1677
+TRANS(vsetallnez_b, LSX, gen_cv, gen_helper_vsetallnez_b)
1678
+TRANS(vsetallnez_h, LSX, gen_cv, gen_helper_vsetallnez_h)
1679
+TRANS(vsetallnez_w, LSX, gen_cv, gen_helper_vsetallnez_w)
1680
+TRANS(vsetallnez_d, LSX, gen_cv, gen_helper_vsetallnez_d)
1681
1682
static bool trans_vinsgr2vr_b(DisasContext *ctx, arg_vr_i *a)
1683
{
1684
TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
1685
+
1686
+ if (!avail_LSX(ctx)) {
1687
+ return false;
1688
+ }
1689
+
1690
CHECK_SXE;
1691
tcg_gen_st8_i64(src, cpu_env,
1692
offsetof(CPULoongArchState, fpr[a->vd].vreg.B(a->imm)));
1693
@@ -XXX,XX +XXX,XX @@ static bool trans_vinsgr2vr_b(DisasContext *ctx, arg_vr_i *a)
1694
static bool trans_vinsgr2vr_h(DisasContext *ctx, arg_vr_i *a)
1695
{
1696
TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
1697
+
1698
+ if (!avail_LSX(ctx)) {
1699
+ return false;
1700
+ }
1701
+
1702
CHECK_SXE;
1703
tcg_gen_st16_i64(src, cpu_env,
1704
offsetof(CPULoongArchState, fpr[a->vd].vreg.H(a->imm)));
1705
@@ -XXX,XX +XXX,XX @@ static bool trans_vinsgr2vr_h(DisasContext *ctx, arg_vr_i *a)
1706
static bool trans_vinsgr2vr_w(DisasContext *ctx, arg_vr_i *a)
1707
{
1708
TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
1709
+
1710
+ if (!avail_LSX(ctx)) {
1711
+ return false;
1712
+ }
1713
+
1714
CHECK_SXE;
1715
tcg_gen_st32_i64(src, cpu_env,
1716
offsetof(CPULoongArchState, fpr[a->vd].vreg.W(a->imm)));
1717
@@ -XXX,XX +XXX,XX @@ static bool trans_vinsgr2vr_w(DisasContext *ctx, arg_vr_i *a)
1718
static bool trans_vinsgr2vr_d(DisasContext *ctx, arg_vr_i *a)
1719
{
1720
TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
1721
+
1722
+ if (!avail_LSX(ctx)) {
1723
+ return false;
1724
+ }
1725
+
1726
CHECK_SXE;
1727
tcg_gen_st_i64(src, cpu_env,
1728
offsetof(CPULoongArchState, fpr[a->vd].vreg.D(a->imm)));
1729
@@ -XXX,XX +XXX,XX @@ static bool trans_vinsgr2vr_d(DisasContext *ctx, arg_vr_i *a)
1730
static bool trans_vpickve2gr_b(DisasContext *ctx, arg_rv_i *a)
1731
{
1732
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1733
+
1734
+ if (!avail_LSX(ctx)) {
1735
+ return false;
1736
+ }
1737
+
1738
CHECK_SXE;
1739
tcg_gen_ld8s_i64(dst, cpu_env,
1740
offsetof(CPULoongArchState, fpr[a->vj].vreg.B(a->imm)));
1741
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_b(DisasContext *ctx, arg_rv_i *a)
1742
static bool trans_vpickve2gr_h(DisasContext *ctx, arg_rv_i *a)
1743
{
1744
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1745
+
1746
+ if (!avail_LSX(ctx)) {
1747
+ return false;
1748
+ }
1749
+
1750
CHECK_SXE;
1751
tcg_gen_ld16s_i64(dst, cpu_env,
1752
offsetof(CPULoongArchState, fpr[a->vj].vreg.H(a->imm)));
1753
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_h(DisasContext *ctx, arg_rv_i *a)
1754
static bool trans_vpickve2gr_w(DisasContext *ctx, arg_rv_i *a)
1755
{
1756
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1757
+
1758
+ if (!avail_LSX(ctx)) {
1759
+ return false;
1760
+ }
1761
+
1762
CHECK_SXE;
1763
tcg_gen_ld32s_i64(dst, cpu_env,
1764
offsetof(CPULoongArchState, fpr[a->vj].vreg.W(a->imm)));
1765
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_w(DisasContext *ctx, arg_rv_i *a)
1766
static bool trans_vpickve2gr_d(DisasContext *ctx, arg_rv_i *a)
1767
{
1768
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1769
+
1770
+ if (!avail_LSX(ctx)) {
1771
+ return false;
1772
+ }
1773
+
1774
CHECK_SXE;
1775
tcg_gen_ld_i64(dst, cpu_env,
1776
offsetof(CPULoongArchState, fpr[a->vj].vreg.D(a->imm)));
1777
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_d(DisasContext *ctx, arg_rv_i *a)
1778
static bool trans_vpickve2gr_bu(DisasContext *ctx, arg_rv_i *a)
1779
{
1780
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1781
+
1782
+ if (!avail_LSX(ctx)) {
1783
+ return false;
1784
+ }
1785
+
1786
CHECK_SXE;
1787
tcg_gen_ld8u_i64(dst, cpu_env,
1788
offsetof(CPULoongArchState, fpr[a->vj].vreg.B(a->imm)));
1789
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_bu(DisasContext *ctx, arg_rv_i *a)
1790
static bool trans_vpickve2gr_hu(DisasContext *ctx, arg_rv_i *a)
1791
{
1792
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1793
+
1794
+ if (!avail_LSX(ctx)) {
1795
+ return false;
1796
+ }
1797
+
1798
CHECK_SXE;
1799
tcg_gen_ld16u_i64(dst, cpu_env,
1800
offsetof(CPULoongArchState, fpr[a->vj].vreg.H(a->imm)));
1801
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_hu(DisasContext *ctx, arg_rv_i *a)
1802
static bool trans_vpickve2gr_wu(DisasContext *ctx, arg_rv_i *a)
1803
{
1804
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1805
+
1806
+ if (!avail_LSX(ctx)) {
1807
+ return false;
1808
+ }
1809
+
1810
CHECK_SXE;
1811
tcg_gen_ld32u_i64(dst, cpu_env,
1812
offsetof(CPULoongArchState, fpr[a->vj].vreg.W(a->imm)));
1813
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_wu(DisasContext *ctx, arg_rv_i *a)
1814
static bool trans_vpickve2gr_du(DisasContext *ctx, arg_rv_i *a)
1815
{
1816
TCGv dst = gpr_dst(ctx, a->rd, EXT_NONE);
1817
+
1818
+ if (!avail_LSX(ctx)) {
1819
+ return false;
1820
+ }
1821
+
1822
CHECK_SXE;
1823
tcg_gen_ld_i64(dst, cpu_env,
1824
offsetof(CPULoongArchState, fpr[a->vj].vreg.D(a->imm)));
1825
@@ -XXX,XX +XXX,XX @@ static bool trans_vpickve2gr_du(DisasContext *ctx, arg_rv_i *a)
1826
static bool gvec_dup(DisasContext *ctx, arg_vr *a, MemOp mop)
1827
{
1828
TCGv src = gpr_src(ctx, a->rj, EXT_NONE);
1829
+
1830
+ if (!avail_LSX(ctx)) {
1831
+ return false;
1832
+ }
1833
+
1834
CHECK_SXE;
1835
1836
tcg_gen_gvec_dup_i64(mop, vec_full_offset(a->vd),
1837
@@ -XXX,XX +XXX,XX @@ static bool gvec_dup(DisasContext *ctx, arg_vr *a, MemOp mop)
1838
return true;
1839
}
1840
1841
-TRANS(vreplgr2vr_b, ALL, gvec_dup, MO_8)
1842
-TRANS(vreplgr2vr_h, ALL, gvec_dup, MO_16)
1843
-TRANS(vreplgr2vr_w, ALL, gvec_dup, MO_32)
1844
-TRANS(vreplgr2vr_d, ALL, gvec_dup, MO_64)
1845
+TRANS(vreplgr2vr_b, LSX, gvec_dup, MO_8)
1846
+TRANS(vreplgr2vr_h, LSX, gvec_dup, MO_16)
1847
+TRANS(vreplgr2vr_w, LSX, gvec_dup, MO_32)
1848
+TRANS(vreplgr2vr_d, LSX, gvec_dup, MO_64)
1849
1850
static bool trans_vreplvei_b(DisasContext *ctx, arg_vv_i *a)
1851
{
1852
+ if (!avail_LSX(ctx)) {
1853
+ return false;
1854
+ }
1855
+
1856
CHECK_SXE;
1857
tcg_gen_gvec_dup_mem(MO_8,vec_full_offset(a->vd),
1858
offsetof(CPULoongArchState,
1859
@@ -XXX,XX +XXX,XX @@ static bool trans_vreplvei_b(DisasContext *ctx, arg_vv_i *a)
1860
1861
static bool trans_vreplvei_h(DisasContext *ctx, arg_vv_i *a)
1862
{
1863
+ if (!avail_LSX(ctx)) {
1864
+ return false;
1865
+ }
1866
+
1867
CHECK_SXE;
1868
tcg_gen_gvec_dup_mem(MO_16, vec_full_offset(a->vd),
1869
offsetof(CPULoongArchState,
1870
@@ -XXX,XX +XXX,XX @@ static bool trans_vreplvei_h(DisasContext *ctx, arg_vv_i *a)
1871
}
1872
static bool trans_vreplvei_w(DisasContext *ctx, arg_vv_i *a)
1873
{
1874
+ if (!avail_LSX(ctx)) {
1875
+ return false;
1876
+ }
1877
+
1878
CHECK_SXE;
1879
tcg_gen_gvec_dup_mem(MO_32, vec_full_offset(a->vd),
1880
offsetof(CPULoongArchState,
1881
@@ -XXX,XX +XXX,XX @@ static bool trans_vreplvei_w(DisasContext *ctx, arg_vv_i *a)
1882
}
1883
static bool trans_vreplvei_d(DisasContext *ctx, arg_vv_i *a)
1884
{
1885
+ if (!avail_LSX(ctx)) {
1886
+ return false;
1887
+ }
1888
+
1889
CHECK_SXE;
1890
tcg_gen_gvec_dup_mem(MO_64, vec_full_offset(a->vd),
1891
offsetof(CPULoongArchState,
1892
@@ -XXX,XX +XXX,XX @@ static bool gen_vreplve(DisasContext *ctx, arg_vvr *a, int vece, int bit,
1893
TCGv_ptr t1 = tcg_temp_new_ptr();
1894
TCGv_i64 t2 = tcg_temp_new_i64();
1895
1896
+ if (!avail_LSX(ctx)) {
1897
+ return false;
1898
+ }
1899
+
1900
CHECK_SXE;
1901
1902
tcg_gen_andi_i64(t0, gpr_src(ctx, a->rk, EXT_NONE), (LSX_LEN/bit) -1);
1903
@@ -XXX,XX +XXX,XX @@ static bool gen_vreplve(DisasContext *ctx, arg_vvr *a, int vece, int bit,
1904
return true;
1905
}
1906
1907
-TRANS(vreplve_b, ALL, gen_vreplve, MO_8, 8, tcg_gen_ld8u_i64)
1908
-TRANS(vreplve_h, ALL, gen_vreplve, MO_16, 16, tcg_gen_ld16u_i64)
1909
-TRANS(vreplve_w, ALL, gen_vreplve, MO_32, 32, tcg_gen_ld32u_i64)
1910
-TRANS(vreplve_d, ALL, gen_vreplve, MO_64, 64, tcg_gen_ld_i64)
1911
+TRANS(vreplve_b, LSX, gen_vreplve, MO_8, 8, tcg_gen_ld8u_i64)
1912
+TRANS(vreplve_h, LSX, gen_vreplve, MO_16, 16, tcg_gen_ld16u_i64)
1913
+TRANS(vreplve_w, LSX, gen_vreplve, MO_32, 32, tcg_gen_ld32u_i64)
1914
+TRANS(vreplve_d, LSX, gen_vreplve, MO_64, 64, tcg_gen_ld_i64)
1915
1916
static bool trans_vbsll_v(DisasContext *ctx, arg_vv_i *a)
1917
{
1918
int ofs;
1919
TCGv_i64 desthigh, destlow, high, low;
1920
1921
+ if (!avail_LSX(ctx)) {
1922
+ return false;
1923
+ }
1924
+
1925
CHECK_SXE;
1926
1927
desthigh = tcg_temp_new_i64();
1928
@@ -XXX,XX +XXX,XX @@ static bool trans_vbsrl_v(DisasContext *ctx, arg_vv_i *a)
1929
TCGv_i64 desthigh, destlow, high, low;
1930
int ofs;
1931
1932
+ if (!avail_LSX(ctx)) {
1933
+ return false;
1934
+ }
1935
+
1936
CHECK_SXE;
1937
1938
desthigh = tcg_temp_new_i64();
1939
@@ -XXX,XX +XXX,XX @@ static bool trans_vbsrl_v(DisasContext *ctx, arg_vv_i *a)
1940
return true;
1941
}
1942
1943
-TRANS(vpackev_b, ALL, gen_vvv, gen_helper_vpackev_b)
1944
-TRANS(vpackev_h, ALL, gen_vvv, gen_helper_vpackev_h)
1945
-TRANS(vpackev_w, ALL, gen_vvv, gen_helper_vpackev_w)
1946
-TRANS(vpackev_d, ALL, gen_vvv, gen_helper_vpackev_d)
1947
-TRANS(vpackod_b, ALL, gen_vvv, gen_helper_vpackod_b)
1948
-TRANS(vpackod_h, ALL, gen_vvv, gen_helper_vpackod_h)
1949
-TRANS(vpackod_w, ALL, gen_vvv, gen_helper_vpackod_w)
1950
-TRANS(vpackod_d, ALL, gen_vvv, gen_helper_vpackod_d)
1951
-
1952
-TRANS(vpickev_b, ALL, gen_vvv, gen_helper_vpickev_b)
1953
-TRANS(vpickev_h, ALL, gen_vvv, gen_helper_vpickev_h)
1954
-TRANS(vpickev_w, ALL, gen_vvv, gen_helper_vpickev_w)
1955
-TRANS(vpickev_d, ALL, gen_vvv, gen_helper_vpickev_d)
1956
-TRANS(vpickod_b, ALL, gen_vvv, gen_helper_vpickod_b)
1957
-TRANS(vpickod_h, ALL, gen_vvv, gen_helper_vpickod_h)
1958
-TRANS(vpickod_w, ALL, gen_vvv, gen_helper_vpickod_w)
1959
-TRANS(vpickod_d, ALL, gen_vvv, gen_helper_vpickod_d)
1960
-
1961
-TRANS(vilvl_b, ALL, gen_vvv, gen_helper_vilvl_b)
1962
-TRANS(vilvl_h, ALL, gen_vvv, gen_helper_vilvl_h)
1963
-TRANS(vilvl_w, ALL, gen_vvv, gen_helper_vilvl_w)
1964
-TRANS(vilvl_d, ALL, gen_vvv, gen_helper_vilvl_d)
1965
-TRANS(vilvh_b, ALL, gen_vvv, gen_helper_vilvh_b)
1966
-TRANS(vilvh_h, ALL, gen_vvv, gen_helper_vilvh_h)
1967
-TRANS(vilvh_w, ALL, gen_vvv, gen_helper_vilvh_w)
1968
-TRANS(vilvh_d, ALL, gen_vvv, gen_helper_vilvh_d)
1969
-
1970
-TRANS(vshuf_b, ALL, gen_vvvv, gen_helper_vshuf_b)
1971
-TRANS(vshuf_h, ALL, gen_vvv, gen_helper_vshuf_h)
1972
-TRANS(vshuf_w, ALL, gen_vvv, gen_helper_vshuf_w)
1973
-TRANS(vshuf_d, ALL, gen_vvv, gen_helper_vshuf_d)
1974
-TRANS(vshuf4i_b, ALL, gen_vv_i, gen_helper_vshuf4i_b)
1975
-TRANS(vshuf4i_h, ALL, gen_vv_i, gen_helper_vshuf4i_h)
1976
-TRANS(vshuf4i_w, ALL, gen_vv_i, gen_helper_vshuf4i_w)
1977
-TRANS(vshuf4i_d, ALL, gen_vv_i, gen_helper_vshuf4i_d)
1978
-
1979
-TRANS(vpermi_w, ALL, gen_vv_i, gen_helper_vpermi_w)
1980
-
1981
-TRANS(vextrins_b, ALL, gen_vv_i, gen_helper_vextrins_b)
1982
-TRANS(vextrins_h, ALL, gen_vv_i, gen_helper_vextrins_h)
1983
-TRANS(vextrins_w, ALL, gen_vv_i, gen_helper_vextrins_w)
1984
-TRANS(vextrins_d, ALL, gen_vv_i, gen_helper_vextrins_d)
1985
+TRANS(vpackev_b, LSX, gen_vvv, gen_helper_vpackev_b)
1986
+TRANS(vpackev_h, LSX, gen_vvv, gen_helper_vpackev_h)
1987
+TRANS(vpackev_w, LSX, gen_vvv, gen_helper_vpackev_w)
1988
+TRANS(vpackev_d, LSX, gen_vvv, gen_helper_vpackev_d)
1989
+TRANS(vpackod_b, LSX, gen_vvv, gen_helper_vpackod_b)
1990
+TRANS(vpackod_h, LSX, gen_vvv, gen_helper_vpackod_h)
1991
+TRANS(vpackod_w, LSX, gen_vvv, gen_helper_vpackod_w)
1992
+TRANS(vpackod_d, LSX, gen_vvv, gen_helper_vpackod_d)
1993
+
1994
+TRANS(vpickev_b, LSX, gen_vvv, gen_helper_vpickev_b)
1995
+TRANS(vpickev_h, LSX, gen_vvv, gen_helper_vpickev_h)
1996
+TRANS(vpickev_w, LSX, gen_vvv, gen_helper_vpickev_w)
1997
+TRANS(vpickev_d, LSX, gen_vvv, gen_helper_vpickev_d)
1998
+TRANS(vpickod_b, LSX, gen_vvv, gen_helper_vpickod_b)
1999
+TRANS(vpickod_h, LSX, gen_vvv, gen_helper_vpickod_h)
2000
+TRANS(vpickod_w, LSX, gen_vvv, gen_helper_vpickod_w)
2001
+TRANS(vpickod_d, LSX, gen_vvv, gen_helper_vpickod_d)
2002
+
2003
+TRANS(vilvl_b, LSX, gen_vvv, gen_helper_vilvl_b)
2004
+TRANS(vilvl_h, LSX, gen_vvv, gen_helper_vilvl_h)
2005
+TRANS(vilvl_w, LSX, gen_vvv, gen_helper_vilvl_w)
2006
+TRANS(vilvl_d, LSX, gen_vvv, gen_helper_vilvl_d)
2007
+TRANS(vilvh_b, LSX, gen_vvv, gen_helper_vilvh_b)
2008
+TRANS(vilvh_h, LSX, gen_vvv, gen_helper_vilvh_h)
2009
+TRANS(vilvh_w, LSX, gen_vvv, gen_helper_vilvh_w)
2010
+TRANS(vilvh_d, LSX, gen_vvv, gen_helper_vilvh_d)
2011
+
2012
+TRANS(vshuf_b, LSX, gen_vvvv, gen_helper_vshuf_b)
2013
+TRANS(vshuf_h, LSX, gen_vvv, gen_helper_vshuf_h)
2014
+TRANS(vshuf_w, LSX, gen_vvv, gen_helper_vshuf_w)
2015
+TRANS(vshuf_d, LSX, gen_vvv, gen_helper_vshuf_d)
2016
+TRANS(vshuf4i_b, LSX, gen_vv_i, gen_helper_vshuf4i_b)
2017
+TRANS(vshuf4i_h, LSX, gen_vv_i, gen_helper_vshuf4i_h)
2018
+TRANS(vshuf4i_w, LSX, gen_vv_i, gen_helper_vshuf4i_w)
2019
+TRANS(vshuf4i_d, LSX, gen_vv_i, gen_helper_vshuf4i_d)
2020
+
2021
+TRANS(vpermi_w, LSX, gen_vv_i, gen_helper_vpermi_w)
2022
+
2023
+TRANS(vextrins_b, LSX, gen_vv_i, gen_helper_vextrins_b)
2024
+TRANS(vextrins_h, LSX, gen_vv_i, gen_helper_vextrins_h)
2025
+TRANS(vextrins_w, LSX, gen_vv_i, gen_helper_vextrins_w)
2026
+TRANS(vextrins_d, LSX, gen_vv_i, gen_helper_vextrins_d)
2027
2028
static bool trans_vld(DisasContext *ctx, arg_vr_i *a)
2029
{
2030
@@ -XXX,XX +XXX,XX @@ static bool trans_vld(DisasContext *ctx, arg_vr_i *a)
2031
TCGv_i64 rl, rh;
2032
TCGv_i128 val;
2033
2034
+ if (!avail_LSX(ctx)) {
2035
+ return false;
2036
+ }
2037
+
2038
CHECK_SXE;
2039
2040
addr = gpr_src(ctx, a->rj, EXT_NONE);
2041
@@ -XXX,XX +XXX,XX @@ static bool trans_vst(DisasContext *ctx, arg_vr_i *a)
2042
TCGv_i128 val;
2043
TCGv_i64 ah, al;
2044
2045
+ if (!avail_LSX(ctx)) {
2046
+ return false;
2047
+ }
2048
+
2049
CHECK_SXE;
2050
2051
addr = gpr_src(ctx, a->rj, EXT_NONE);
2052
@@ -XXX,XX +XXX,XX @@ static bool trans_vldx(DisasContext *ctx, arg_vrr *a)
2053
TCGv_i64 rl, rh;
2054
TCGv_i128 val;
2055
2056
+ if (!avail_LSX(ctx)) {
2057
+ return false;
2058
+ }
2059
+
2060
CHECK_SXE;
2061
2062
src1 = gpr_src(ctx, a->rj, EXT_NONE);
2063
@@ -XXX,XX +XXX,XX @@ static bool trans_vstx(DisasContext *ctx, arg_vrr *a)
2064
TCGv_i64 ah, al;
2065
TCGv_i128 val;
2066
2067
+ if (!avail_LSX(ctx)) {
2068
+ return false;
2069
+ }
2070
+
2071
CHECK_SXE;
2072
2073
src1 = gpr_src(ctx, a->rj, EXT_NONE);
2074
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_vr_i *a) \
2075
TCGv addr; \
2076
TCGv_i64 val; \
2077
\
2078
+ if (!avail_LSX(ctx)) { \
2079
+ return false; \
2080
+ } \
2081
+ \
2082
CHECK_SXE; \
2083
\
2084
addr = gpr_src(ctx, a->rj, EXT_NONE); \
2085
@@ -XXX,XX +XXX,XX @@ static bool trans_## NAME (DisasContext *ctx, arg_vr_ii *a) \
2086
TCGv addr; \
2087
TCGv_i64 val; \
2088
\
2089
+ if (!avail_LSX(ctx)) { \
2090
+ return false; \
2091
+ } \
2092
+ \
2093
CHECK_SXE; \
2094
\
2095
addr = gpr_src(ctx, a->rj, EXT_NONE); \
2096
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
2097
index XXXXXXX..XXXXXXX 100644
2098
--- a/target/loongarch/translate.h
2099
+++ b/target/loongarch/translate.h
2100
@@ -XXX,XX +XXX,XX @@
2101
#define avail_FP_DP(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, FP_DP))
2102
#define avail_LSPW(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LSPW))
2103
#define avail_LAM(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LAM))
2104
+#define avail_LSX(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LSX))
2105
+
2106
2107
/*
2108
* If an operation is being performed on less than TARGET_LONG_BITS,
2109
--
2110
2.39.1
diff view generated by jsdifflib
New patch
1
Signed-off-by: Song Gao <gaosong@loongson.cn>
2
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
3
Message-ID: <20230822032724.1353391-16-gaosong@loongson.cn>
4
Message-Id: <20230822072219.35719-1-philmd@linaro.org>
5
---
6
.../loongarch/insn_trans/trans_privileged.c.inc | 16 ++++++++--------
7
target/loongarch/translate.h | 2 +-
8
2 files changed, 9 insertions(+), 9 deletions(-)
1
9
10
diff --git a/target/loongarch/insn_trans/trans_privileged.c.inc b/target/loongarch/insn_trans/trans_privileged.c.inc
11
index XXXXXXX..XXXXXXX 100644
12
--- a/target/loongarch/insn_trans/trans_privileged.c.inc
13
+++ b/target/loongarch/insn_trans/trans_privileged.c.inc
14
@@ -XXX,XX +XXX,XX @@ static bool gen_iocsrwr(DisasContext *ctx, arg_rr *a,
15
return true;
16
}
17
18
-TRANS(iocsrrd_b, ALL, gen_iocsrrd, gen_helper_iocsrrd_b)
19
-TRANS(iocsrrd_h, ALL, gen_iocsrrd, gen_helper_iocsrrd_h)
20
-TRANS(iocsrrd_w, ALL, gen_iocsrrd, gen_helper_iocsrrd_w)
21
-TRANS(iocsrrd_d, ALL, gen_iocsrrd, gen_helper_iocsrrd_d)
22
-TRANS(iocsrwr_b, ALL, gen_iocsrwr, gen_helper_iocsrwr_b)
23
-TRANS(iocsrwr_h, ALL, gen_iocsrwr, gen_helper_iocsrwr_h)
24
-TRANS(iocsrwr_w, ALL, gen_iocsrwr, gen_helper_iocsrwr_w)
25
-TRANS(iocsrwr_d, ALL, gen_iocsrwr, gen_helper_iocsrwr_d)
26
+TRANS(iocsrrd_b, IOCSR, gen_iocsrrd, gen_helper_iocsrrd_b)
27
+TRANS(iocsrrd_h, IOCSR, gen_iocsrrd, gen_helper_iocsrrd_h)
28
+TRANS(iocsrrd_w, IOCSR, gen_iocsrrd, gen_helper_iocsrrd_w)
29
+TRANS(iocsrrd_d, IOCSR, gen_iocsrrd, gen_helper_iocsrrd_d)
30
+TRANS(iocsrwr_b, IOCSR, gen_iocsrwr, gen_helper_iocsrwr_b)
31
+TRANS(iocsrwr_h, IOCSR, gen_iocsrwr, gen_helper_iocsrwr_h)
32
+TRANS(iocsrwr_w, IOCSR, gen_iocsrwr, gen_helper_iocsrwr_w)
33
+TRANS(iocsrwr_d, IOCSR, gen_iocsrwr, gen_helper_iocsrwr_d)
34
35
static void check_mmu_idx(DisasContext *ctx)
36
{
37
diff --git a/target/loongarch/translate.h b/target/loongarch/translate.h
38
index XXXXXXX..XXXXXXX 100644
39
--- a/target/loongarch/translate.h
40
+++ b/target/loongarch/translate.h
41
@@ -XXX,XX +XXX,XX @@
42
#define avail_LSPW(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LSPW))
43
#define avail_LAM(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LAM))
44
#define avail_LSX(C) (FIELD_EX32((C)->cpucfg2, CPUCFG2, LSX))
45
-
46
+#define avail_IOCSR(C) (FIELD_EX32((C)->cpucfg1, CPUCFG1, IOCSR))
47
48
/*
49
* If an operation is being performed on less than TARGET_LONG_BITS,
50
--
51
2.39.1
diff view generated by jsdifflib
New patch
1
From: Bibo Mao <maobibo@loongson.cn>
1
2
3
Implement the callback for getting the architecture-dependent CPU
4
ID, the cpu ID is physical id described in ACPI MADT table, this
5
will be used for cpu hotplug.
6
7
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
8
Reviewed-by: Song Gao <gaosong@loongson.cn>
9
Message-Id: <20230824005007.2000525-1-maobibo@loongson.cn>
10
Signed-off-by: Song Gao <gaosong@loongson.cn>
11
---
12
hw/loongarch/virt.c | 2 ++
13
target/loongarch/cpu.c | 8 ++++++++
14
target/loongarch/cpu.h | 1 +
15
3 files changed, 11 insertions(+)
16
17
diff --git a/hw/loongarch/virt.c b/hw/loongarch/virt.c
18
index XXXXXXX..XXXXXXX 100644
19
--- a/hw/loongarch/virt.c
20
+++ b/hw/loongarch/virt.c
21
@@ -XXX,XX +XXX,XX @@ static void loongarch_init(MachineState *machine)
22
cpu = cpu_create(machine->cpu_type);
23
cpu->cpu_index = i;
24
machine->possible_cpus->cpus[i].cpu = OBJECT(cpu);
25
+ lacpu = LOONGARCH_CPU(cpu);
26
+ lacpu->phy_id = machine->possible_cpus->cpus[i].arch_id;
27
}
28
fdt_add_cpu_nodes(lams);
29
30
diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
31
index XXXXXXX..XXXXXXX 100644
32
--- a/target/loongarch/cpu.c
33
+++ b/target/loongarch/cpu.c
34
@@ -XXX,XX +XXX,XX @@ static struct TCGCPUOps loongarch_tcg_ops = {
35
static const struct SysemuCPUOps loongarch_sysemu_ops = {
36
.get_phys_page_debug = loongarch_cpu_get_phys_page_debug,
37
};
38
+
39
+static int64_t loongarch_cpu_get_arch_id(CPUState *cs)
40
+{
41
+ LoongArchCPU *cpu = LOONGARCH_CPU(cs);
42
+
43
+ return cpu->phy_id;
44
+}
45
#endif
46
47
static void loongarch_cpu_class_init(ObjectClass *c, void *data)
48
@@ -XXX,XX +XXX,XX @@ static void loongarch_cpu_class_init(ObjectClass *c, void *data)
49
cc->set_pc = loongarch_cpu_set_pc;
50
cc->get_pc = loongarch_cpu_get_pc;
51
#ifndef CONFIG_USER_ONLY
52
+ cc->get_arch_id = loongarch_cpu_get_arch_id;
53
dc->vmsd = &vmstate_loongarch_cpu;
54
cc->sysemu_ops = &loongarch_sysemu_ops;
55
#endif
56
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
57
index XXXXXXX..XXXXXXX 100644
58
--- a/target/loongarch/cpu.h
59
+++ b/target/loongarch/cpu.h
60
@@ -XXX,XX +XXX,XX @@ struct ArchCPU {
61
CPUNegativeOffsetState neg;
62
CPULoongArchState env;
63
QEMUTimer timer;
64
+ uint32_t phy_id;
65
66
/* 'compatible' string for this CPU for Linux device trees */
67
const char *dtb_compatible;
68
--
69
2.39.1
diff view generated by jsdifflib
New patch
1
From: Bibo Mao <maobibo@loongson.cn>
1
2
3
For edge triggered irq, qemu_irq_pulse is used to inject irq. It will
4
set irq with high level and low level soon to simluate pulse irq.
5
6
For edge triggered irq, irq is injected and set as pending at rising
7
level, do not clear irq at lowering level. LoongArch pch interrupt will
8
clear irq for lowering level irq, there will be problem. ACPI ged deivce
9
is edge-triggered irq, it is used for cpu/memory hotplug.
10
11
This patch fixes memory hotplug issue on LoongArch virt machine.
12
13
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
14
Reviewed-by: Song Gao <gaosong@loongson.cn>
15
Message-Id: <20230707091557.1474790-1-maobibo@loongson.cn>
16
Signed-off-by: Song Gao <gaosong@loongson.cn>
17
---
18
hw/intc/loongarch_pch_pic.c | 7 ++++++-
19
1 file changed, 6 insertions(+), 1 deletion(-)
20
21
diff --git a/hw/intc/loongarch_pch_pic.c b/hw/intc/loongarch_pch_pic.c
22
index XXXXXXX..XXXXXXX 100644
23
--- a/hw/intc/loongarch_pch_pic.c
24
+++ b/hw/intc/loongarch_pch_pic.c
25
@@ -XXX,XX +XXX,XX @@ static void pch_pic_update_irq(LoongArchPCHPIC *s, uint64_t mask, int level)
26
qemu_set_irq(s->parent_irq[s->htmsi_vector[irq]], 1);
27
}
28
} else {
29
- val = mask & s->intisr;
30
+ /*
31
+ * intirr means requested pending irq
32
+ * do not clear pending irq for edge-triggered on lowering edge
33
+ */
34
+ val = mask & s->intisr & ~s->intirr;
35
if (val) {
36
irq = ctz64(val);
37
s->intisr &= ~MAKE_64BIT_MASK(irq, 1);
38
@@ -XXX,XX +XXX,XX @@ static void pch_pic_irq_handler(void *opaque, int irq, int level)
39
/* Edge triggered */
40
if (level) {
41
if ((s->last_intirr & mask) == 0) {
42
+ /* marked pending on a rising edge */
43
s->intirr |= mask;
44
}
45
s->last_intirr |= mask;
46
--
47
2.39.1
diff view generated by jsdifflib
1
From: Jiaxun Yang <jiaxun.yang@flygoat.com>
1
From: Jiajie Chen <c@jia.je>
2
2
3
As per "Loongson 3A5000/3B5000 Processor Reference Manual",
3
Since GDB 13.1(GDB commit ea3352172), GDB LoongArch changed to use
4
Loongson 3A5000's IPI implementation have 4 mailboxes per
4
fcc0-7 instead of fcc register. This commit partially reverts commit
5
core.
5
2f149c759 (`target/loongarch: Update gdb_set_fpu() and gdb_get_fpu()`)
6
to match the behavior of GDB.
6
7
7
However, in 78464f023b54 ("hw/loongarch/virt: Modify ipi as
8
Note that it is a breaking change for GDB 13.0 or earlier, but it is
8
percpu device"), the number of IPI mailboxes was reduced to
9
also required for GDB 13.1 or later to work.
9
one, which mismatches actual hardware.
10
10
11
It won't affect LoongArch based system as LoongArch boot code
11
Signed-off-by: Jiajie Chen <c@jia.je>
12
only uses the first mailbox, however MIPS based Loongson boot
12
Acked-by: Song Gao <gaosong@loongson.cn>
13
code uses all 4 mailboxes.
13
Message-Id: <20230808054315.3391465-1-c@jia.je>
14
15
Fixes Coverity CID: 1512452, 1512453
16
Fixes: 78464f023b54 ("hw/loongarch/virt: Modify ipi as percpu device")
17
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
18
Reviewed-by: Song Gao <gaosong@loongson.cn>
19
Message-Id: <20230521102307.87081-2-jiaxun.yang@flygoat.com>
20
Signed-off-by: Song Gao <gaosong@loongson.cn>
14
Signed-off-by: Song Gao <gaosong@loongson.cn>
21
---
15
---
22
hw/intc/loongarch_ipi.c | 6 +++---
16
gdb-xml/loongarch-fpu.xml | 9 ++++++++-
23
include/hw/intc/loongarch_ipi.h | 4 +++-
17
target/loongarch/gdbstub.c | 16 +++++++---------
24
2 files changed, 6 insertions(+), 4 deletions(-)
18
2 files changed, 15 insertions(+), 10 deletions(-)
25
19
26
diff --git a/hw/intc/loongarch_ipi.c b/hw/intc/loongarch_ipi.c
20
diff --git a/gdb-xml/loongarch-fpu.xml b/gdb-xml/loongarch-fpu.xml
27
index XXXXXXX..XXXXXXX 100644
21
index XXXXXXX..XXXXXXX 100644
28
--- a/hw/intc/loongarch_ipi.c
22
--- a/gdb-xml/loongarch-fpu.xml
29
+++ b/hw/intc/loongarch_ipi.c
23
+++ b/gdb-xml/loongarch-fpu.xml
30
@@ -XXX,XX +XXX,XX @@ static void loongarch_ipi_init(Object *obj)
24
@@ -XXX,XX +XXX,XX @@
31
25
<reg name="f29" bitsize="64" type="fputype" group="float"/>
32
static const VMStateDescription vmstate_ipi_core = {
26
<reg name="f30" bitsize="64" type="fputype" group="float"/>
33
.name = "ipi-single",
27
<reg name="f31" bitsize="64" type="fputype" group="float"/>
34
- .version_id = 1,
28
- <reg name="fcc" bitsize="64" type="uint64" group="float"/>
35
- .minimum_version_id = 1,
29
+ <reg name="fcc0" bitsize="8" type="uint8" group="float"/>
36
+ .version_id = 2,
30
+ <reg name="fcc1" bitsize="8" type="uint8" group="float"/>
37
+ .minimum_version_id = 2,
31
+ <reg name="fcc2" bitsize="8" type="uint8" group="float"/>
38
.fields = (VMStateField[]) {
32
+ <reg name="fcc3" bitsize="8" type="uint8" group="float"/>
39
VMSTATE_UINT32(status, IPICore),
33
+ <reg name="fcc4" bitsize="8" type="uint8" group="float"/>
40
VMSTATE_UINT32(en, IPICore),
34
+ <reg name="fcc5" bitsize="8" type="uint8" group="float"/>
41
VMSTATE_UINT32(set, IPICore),
35
+ <reg name="fcc6" bitsize="8" type="uint8" group="float"/>
42
VMSTATE_UINT32(clear, IPICore),
36
+ <reg name="fcc7" bitsize="8" type="uint8" group="float"/>
43
- VMSTATE_UINT32_ARRAY(buf, IPICore, 2),
37
<reg name="fcsr" bitsize="32" type="uint32" group="float"/>
44
+ VMSTATE_UINT32_ARRAY(buf, IPICore, IPI_MBX_NUM * 2),
38
</feature>
45
VMSTATE_END_OF_LIST()
39
diff --git a/target/loongarch/gdbstub.c b/target/loongarch/gdbstub.c
40
index XXXXXXX..XXXXXXX 100644
41
--- a/target/loongarch/gdbstub.c
42
+++ b/target/loongarch/gdbstub.c
43
@@ -XXX,XX +XXX,XX @@ static int loongarch_gdb_get_fpu(CPULoongArchState *env,
44
{
45
if (0 <= n && n < 32) {
46
return gdb_get_reg64(mem_buf, env->fpr[n].vreg.D(0));
47
- } else if (n == 32) {
48
- uint64_t val = read_fcc(env);
49
- return gdb_get_reg64(mem_buf, val);
50
- } else if (n == 33) {
51
+ } else if (32 <= n && n < 40) {
52
+ return gdb_get_reg8(mem_buf, env->cf[n - 32]);
53
+ } else if (n == 40) {
54
return gdb_get_reg32(mem_buf, env->fcsr0);
46
}
55
}
47
};
56
return 0;
48
diff --git a/include/hw/intc/loongarch_ipi.h b/include/hw/intc/loongarch_ipi.h
57
@@ -XXX,XX +XXX,XX @@ static int loongarch_gdb_set_fpu(CPULoongArchState *env,
49
index XXXXXXX..XXXXXXX 100644
58
if (0 <= n && n < 32) {
50
--- a/include/hw/intc/loongarch_ipi.h
59
env->fpr[n].vreg.D(0) = ldq_p(mem_buf);
51
+++ b/include/hw/intc/loongarch_ipi.h
60
length = 8;
52
@@ -XXX,XX +XXX,XX @@
61
- } else if (n == 32) {
53
#define MAIL_SEND_OFFSET 0
62
- uint64_t val = ldq_p(mem_buf);
54
#define ANY_SEND_OFFSET (IOCSR_ANY_SEND - IOCSR_MAIL_SEND)
63
- write_fcc(env, val);
55
64
- length = 8;
56
+#define IPI_MBX_NUM 4
65
- } else if (n == 33) {
57
+
66
+ } else if (32 <= n && n < 40) {
58
#define TYPE_LOONGARCH_IPI "loongarch_ipi"
67
+ env->cf[n - 32] = ldub_p(mem_buf);
59
OBJECT_DECLARE_SIMPLE_TYPE(LoongArchIPI, LOONGARCH_IPI)
68
+ length = 1;
60
69
+ } else if (n == 40) {
61
@@ -XXX,XX +XXX,XX @@ typedef struct IPICore {
70
env->fcsr0 = ldl_p(mem_buf);
62
uint32_t set;
71
length = 4;
63
uint32_t clear;
72
}
64
/* 64bit buf divide into 2 32bit buf */
65
- uint32_t buf[2];
66
+ uint32_t buf[IPI_MBX_NUM * 2];
67
qemu_irq irq;
68
} IPICore;
69
70
--
73
--
71
2.39.1
74
2.39.1
diff view generated by jsdifflib
New patch
1
From: Jiajie Chen <c@jia.je>
1
2
3
In hw/acpi/aml-build.c:build_pptt() function, the code assumes that the
4
ACPI processor id equals to the cpu index, for example if we have 8
5
cpus, then the ACPI processor id should be in range 0-7.
6
7
However, in hw/loongarch/acpi-build.c:build_madt() function we broke the
8
assumption. If we have 8 cpus again, the ACPI processor id in MADT table
9
would be in range 1-8. It violates the following description taken from
10
ACPI spec 6.4 table 5.138:
11
12
If the processor structure represents an actual processor, this field
13
must match the value of ACPI processor ID field in the processor’s entry
14
in the MADT.
15
16
It will break the latest Linux 6.5-rc6 with the
17
following error message:
18
19
ACPI PPTT: PPTT table found, but unable to locate core 7 (8)
20
Invalid BIOS PPTT
21
22
Here 7 is the last cpu index, 8 is the ACPI processor id learned from
23
MADT.
24
25
With this patch, Linux can properly detect SMT threads when "-smp
26
8,sockets=1,cores=4,threads=2" is passed:
27
28
Thread(s) per core: 2
29
Core(s) per socket: 2
30
Socket(s): 2
31
32
The detection of number of sockets is still wrong, but that is out of
33
scope of the commit.
34
35
Signed-off-by: Jiajie Chen <c@jia.je>
36
Reviewed-by: Bibo Mao <maobibo@loongson.cn>
37
Message-Id: <20230820105658.99123-2-c@jia.je>
38
Signed-off-by: Song Gao <gaosong@loongson.cn>
39
---
40
hw/loongarch/acpi-build.c | 2 +-
41
1 file changed, 1 insertion(+), 1 deletion(-)
42
43
diff --git a/hw/loongarch/acpi-build.c b/hw/loongarch/acpi-build.c
44
index XXXXXXX..XXXXXXX 100644
45
--- a/hw/loongarch/acpi-build.c
46
+++ b/hw/loongarch/acpi-build.c
47
@@ -XXX,XX +XXX,XX @@ build_madt(GArray *table_data, BIOSLinker *linker, LoongArchMachineState *lams)
48
build_append_int_noprefix(table_data, 17, 1); /* Type */
49
build_append_int_noprefix(table_data, 15, 1); /* Length */
50
build_append_int_noprefix(table_data, 1, 1); /* Version */
51
- build_append_int_noprefix(table_data, i + 1, 4); /* ACPI Processor ID */
52
+ build_append_int_noprefix(table_data, i, 4); /* ACPI Processor ID */
53
build_append_int_noprefix(table_data, arch_id, 4); /* Core ID */
54
build_append_int_noprefix(table_data, 1, 4); /* Flags */
55
}
56
--
57
2.39.1
58
59
diff view generated by jsdifflib