43c0b05d94
tcg/loongarch64: remove break after g_assert_not_reached()
...
This patch is part of a series that moves towards a consistent use of
g_assert_not_reached() rather than an ad hoc mix of different
assertion mechanisms.
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Pierrick Bouvier <pierrick.bouvier@linaro.org >
Message-ID: <20240919044641.386068-25-pierrick.bouvier@linaro.org >
Signed-off-by: Thomas Huth <thuth@redhat.com >
2024-09-24 13:53:35 +02:00
521d7fb3eb
tcg/loongarch64: Fix tcg_out_movi vs some pcrel pointers
...
Simplify the logic for two-part, 32-bit pc-relative addresses.
Rather than assume all such fit in int32_t, do some arithmetic
and assert a result, do some arithmetic first and then check
to see if the pieces are in range.
Cc: qemu-stable@nongnu.org
Fixes: dacc51720d ("tcg/loongarch64: Implement tcg_out_mov and tcg_out_movi")
Reviewed-by: Song Gao <gaosong@loongson.cn >
Reported-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 13:50:22 -07:00
6b0ca412e1
tcg/loongarch64: Enable v256 with LASX
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 12:47:08 -07:00
4c2c5744aa
tcg/loongarch64: Support LASX in tcg_out_vec_op
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:13 -07:00
3683354664
tcg/loongarch64: Split out vdvjukN in tcg_out_vec_op
...
Fixes a bug in the immediate shifts, because the exact
encoding depends on the element size.
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:13 -07:00
840770183f
tcg/loongarch64: Remove temp_vec from tcg_out_vec_op
...
Use TCG_VEC_TMP0 directly.
Reviewed-by: Song Gao <gaosong@loongson.cn >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:13 -07:00
571f64f0bf
tcg/loongarch64: Support LASX in tcg_out_{mov,ld,st}
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:13 -07:00
604ba8176c
tcg/loongarch64: Split out vdvjvk in tcg_out_vec_op
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
cbf5a8f150
tcg/loongarch64: Support LASX in tcg_out_addsub_vec
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
ce37579571
tcg/loongarch64: Simplify tcg_out_addsub_vec
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
825d53f35a
tcg/loongarch64: Support LASX in tcg_out_dupi_vec
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
75b5ffdd0d
tcg/loongarch64: Use tcg_out_dup_vec in tcg_out_dupi_vec
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
15750faa8e
tcg/loongarch64: Support LASX in tcg_out_dupm_vec
...
Each element size has a different encoding, so code cannot
be shared in the same way as with tcg_out_dup_vec.
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
e78dc00f1d
tcg/loongarch64: Support LASX in tcg_out_dup_vec
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
4f222d8909
tcg/loongarch64: Simplify tcg_out_dup_vec
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
1c05d53baf
tcg/loongarch64: Support TCG_TYPE_V64
...
We can implement this with fld_d, fst_d for load and store,
and then use the normal v128 operations in registers.
This will improve support for guests which use v64.
Reviewed-by: Song Gao <gaosong@loongson.cn >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
3a7a53c352
tcg/loongarch64: Handle i32 and i64 moves between gr and fr
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
3e26131041
tcg/loongarch64: Use fp load/store for I32 and I64 into vector regs
...
Reviewed-by: Song Gao <gaosong@loongson.cn >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
741b0ee832
tcg/loongarch64: Import LASX, FP insns
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-06-19 10:55:12 -07:00
af8c14a254
tcg: Introduce TCG_TARGET_HAS_tst_vec
...
Prelude to supporting TCG_COND_TST* in vector comparisons.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-05-22 19:05:21 -07:00
c9290dfebf
tcg/loongarch64: Fill out tcg_out_{ld,st} for vector regs
...
TCG register spill/fill uses tcg_out_ld/st with all types,
not necessarily going through INDEX_op_{ld,st}_vec.
Cc: qemu-stable@nongnu.org
Fixes: 16288ded94 ("tcg/loongarch64: Lower basic tcg vec ops to LSX")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2336
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Song Gao <gaosong@loongson.cn >
Tested-by: Song Gao <gaosong@loongson.cn >
2024-05-15 08:57:39 +02:00
21e9a8aefb
tcg: Add TCGConst argument to tcg_target_const_match
...
Fill the new argument from any condition within the opcode.
Not yet used within any backend.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-02-03 23:53:48 +00:00
caf3eacc8f
tcg: Introduce TCG_TARGET_HAS_tst
...
Define as 0 for all tcg backends.
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2024-02-03 23:43:48 +00:00
45bf0e7aa6
tcg/loongarch64: Set vector registers call clobbered
...
Because there are more call clobbered registers than
call saved registers, we begin with all registers as
call clobbered and then reset those that are saved.
This was missed when we introduced the LSX support.
Cc: qemu-stable@nongnu.org
Fixes: 16288ded94 ("tcg/loongarch64: Lower basic tcg vec ops to LSX")
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2136
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Song Gao <gaosong@loongson.cn >
Message-Id: <20240201233414.500588-1-richard.henderson@linaro.org >
2024-02-03 16:46:10 +10:00
85d57a37be
tcg/loongarch64: Fix tcg_out_mov() Aborted
...
On LoongArch host, we got an Aborted from tcg_out_mov().
qemu-x86_64 configure with '--enable-debug'.
> (gdb) b /home1/gaosong/code/qemu/tcg/loongarch64/tcg-target.c.inc:312
> Breakpoint 1 at 0x2576f0: file /home1/gaosong/code/qemu/tcg/loongarch64/tcg-target.c.inc, line 312.
> (gdb) run hello
[...]
> Thread 1 "qemu-x86_64" hit Breakpoint 1, tcg_out_mov (s=0xaaaae91760 <tcg_init_ctx>, type=TCG_TYPE_V128, ret=TCG_REG_V2,
> arg=TCG_REG_V0) at /home1/gaosong/code/qemu/tcg/loongarch64/tcg-target.c.inc:312
> 312 g_assert_not_reached();
> (gdb) bt
> #0 tcg_out_mov (s=0xaaaae91760 <tcg_init_ctx>, type=TCG_TYPE_V128, ret=TCG_REG_V2, arg=TCG_REG_V0)
> at /home1/gaosong/code/qemu/tcg/loongarch64/tcg-target.c.inc:312
> #1 0x000000aaaad0fee0 in tcg_reg_alloc_mov (s=0xaaaae91760 <tcg_init_ctx>, op=0xaaaaf67c20) at ../tcg/tcg.c:4632
> #2 0x000000aaaad142f4 in tcg_gen_code (s=0xaaaae91760 <tcg_init_ctx>, tb=0xffe8030340 <code_gen_buffer+197328>,
> pc_start=4346094) at ../tcg/tcg.c:6135
[...]
> (gdb) c
> Continuing.
> **
> ERROR:/home1/gaosong/code/qemu/tcg/loongarch64/tcg-target.c.inc:312:tcg_out_mov: code should not be reached
> Bail out! ERROR:/home1/gaosong/code/qemu/tcg/loongarch64/tcg-target.c.inc:312:tcg_out_mov: code should not be reached
>
> Thread 1 "qemu-x86_64" received signal SIGABRT, Aborted.
> 0x000000fff7b1c390 in raise () from /lib64/libc.so.6
> (gdb) q
Fixes: 16288ded94 ("tcg/loongarch64: Lower basic tcg vec ops to LSX")
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Song Gao <gaosong@loongson.cn >
Message-Id: <20231120065916.374045-1-gaosong@loongson.cn >
2023-11-21 10:32:42 +08:00
b701f195d3
tcg: Remove TCG_TARGET_HAS_neg_{i32,i64}
...
The movcond opcode is now mandatory for backends to implement.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20231026041404.1229328-7-richard.henderson@linaro.org >
2023-11-06 08:27:21 -08:00
0fbee2b764
tcg/loongarch64: Implement neg opcodes
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20231026041404.1229328-6-richard.henderson@linaro.org >
2023-11-06 08:27:21 -08:00
3871be753f
tcg: Remove TCG_TARGET_HAS_movcond_{i32,i64}
...
The movcond opcode is now mandatory for backends to implement.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20231026041404.1229328-4-richard.henderson@linaro.org >
2023-11-06 08:27:21 -08:00
f2a553481e
tcg/loongarch64: Use cpuinfo.h
...
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Jiajie Chen <c@jia.je >
Message-Id: <20230916220151.526140-5-richard.henderson@linaro.org >
2023-11-06 08:27:21 -08:00
2b2ae0a42e
tcg/loongarch64: Use C_N2_I1 for INDEX_op_qemu_ld_a*_i128
...
Use new registers for the output, so that we never overlap
the input address, which could happen for user-only.
This avoids a "tmp = addr + 0" in that case.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Jiajie Chen <c@jia.je >
Message-Id: <20230916220151.526140-3-richard.henderson@linaro.org >
2023-11-06 08:27:21 -08:00
10e1fd2784
tcg/loongarch64: Use tcg_use_softmmu
...
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-10-22 16:32:28 -07:00
7893e42d5d
tcg: Correct invalid mentions of 'softmmu' by 'system-mode'
...
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-ID: <20231004090629.37473-6-philmd@linaro.org >
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com >
2023-10-07 19:02:33 +02:00
79de3960ae
tcg/loongarch64: Fix buid error
...
Fix:
In file included from ../tcg/tcg.c:735:
/home1/gaosong/bugfix/qemu/tcg/loongarch64/tcg-target.c.inc: In function ‘tcg_out_vec_op’:
/home1/gaosong/bugfix/qemu/tcg/loongarch64/tcg-target.c.inc:1855:9: error: a label can only be part of a statement and a declaration is not a statement
TCGCond cond = args[3];
^~~~~~~
Signed-off-by: gaosong <gaosong@loongson.cn >
Message-Id: <20230926075819.3602537-1-gaosong@loongson.cn >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-10-04 11:03:54 -07:00
9358fbbf6e
tcg: Add tcg_out_tb_start backend hook
...
This hook may emit code at the beginning of the TB.
Suggested-by: Jordan Niethe <jniethe5@gmail.com >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-16 14:57:16 +00:00
58f8961285
tcg/loongarch64: Implement 128-bit load & store
...
If LSX is available, use LSX instructions to implement 128-bit load &
store when MO_128 is required, otherwise use two 64-bit loads & stores.
Signed-off-by: Jiajie Chen <c@jia.je >
Message-Id: <20230908022302.180442-17-c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-16 14:57:10 +00:00
561b001aef
tcg/loongarch64: Lower rotli_vec to vrotri
...
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-16-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
0765cce114
tcg/loongarch64: Lower rotv_vec ops to LSX
...
Lower the following ops:
- rotrv_vec
- rotlv_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-15-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
2931527b4d
tcg/loongarch64: Lower vector shift integer ops
...
Lower the following ops:
- shli_vec
- shrv_vec
- sarv_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-14-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
c8b859b45e
tcg/loongarch64: Lower bitsel_vec to vbitsel
...
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-13-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
94304d7b3d
tcg/loongarch64: Lower vector shift vector ops
...
Lower the following ops:
- shlv_vec
- shrv_vec
- sarv_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-12-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
5256ea1176
tcg/loongarch64: Lower vector saturated ops
...
Lower the following ops:
- ssadd_vec
- usadd_vec
- sssub_vec
- ussub_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-11-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
b2f84adc00
tcg/loongarch64: Lower vector min max ops
...
Lower the following ops:
- smin_vec
- smax_vec
- umin_vec
- umax_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-10-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
76d20c205d
tcg/loongarch64: Lower mul_vec to vmul
...
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-9-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
7d577c3ecd
tcg/loongarch64: Lower neg_vec to vneg
...
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-8-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
24c42fde52
tcg/loongarch64: Lower vector bitwise operations
...
Lower the following ops:
- and_vec
- andc_vec
- or_vec
- orc_vec
- xor_vec
- nor_vec
- not_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-7-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
e9d7c8cf95
tcg/loongarch64: Lower add/sub_vec to vadd/vsub
...
Lower the following ops:
- add_vec
- sub_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-6-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
d8b6fa593d
tcg/loongarch64: Lower cmp_vec to vseq/vsle/vslt
...
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-5-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
ebe92db2cc
tcg: pass vece to tcg_target_const_match()
...
Pass vece to tcg_target_const_match() to allow correct interpretation of
const args of vector ops.
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org >
Message-Id: <20230908022302.180442-4-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:51 -07:00
16288ded94
tcg/loongarch64: Lower basic tcg vec ops to LSX
...
LSX support on host cpu is detected via hwcap.
Lower the following ops to LSX:
- dup_vec
- dupi_vec
- dupm_vec
- ld_vec
- st_vec
Signed-off-by: Jiajie Chen <c@jia.je >
Reviewed-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-3-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:50 -07:00
af88a28414
tcg/loongarch64: Import LSX instructions
...
Add opcodes and encoder functions for LSX.
Generated from
https://github.com/jiegec/loongarch-opcodes/tree/qemu-lsx .
Signed-off-by: Jiajie Chen <c@jia.je >
Acked-by: Richard Henderson <richard.henderson@linaro.org >
Message-Id: <20230908022302.180442-2-c@jia.je >
Signed-off-by: Richard Henderson <richard.henderson@linaro.org >
2023-09-15 05:26:50 -07:00