target/loongarch: Implement vbitsel vset

This patch includes:
- VBITSEL.V;
- VBITSELI.B;
- VSET{EQZ/NEZ}.V;
- VSETANYEQZ.{B/H/W/D};
- VSETALLNEZ.{B/H/W/D}.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Song Gao <gaosong@loongson.cn>
Message-Id: <20230504122810.4094787-38-gaosong@loongson.cn>
This commit is contained in:
Song Gao 2023-05-04 20:28:03 +08:00
parent 386c4e86d0
commit d0dfa19a7b
No known key found for this signature in database
GPG key ID: 40A2FFF239263EDF
5 changed files with 174 additions and 0 deletions

View file

@ -792,6 +792,12 @@ static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
return true; \
}
static void output_cv(DisasContext *ctx, arg_cv *a,
const char *mnemonic)
{
output(ctx, mnemonic, "fcc%d, v%d", a->cd, a->vj);
}
static void output_vvv(DisasContext *ctx, arg_vvv *a, const char *mnemonic)
{
output(ctx, mnemonic, "v%d, v%d, v%d", a->vd, a->vj, a->vk);
@ -1541,3 +1547,17 @@ static bool trans_vfcmp_cond_##suffix(DisasContext *ctx, \
LSX_FCMP_INSN(s)
LSX_FCMP_INSN(d)
INSN_LSX(vbitsel_v, vvvv)
INSN_LSX(vbitseli_b, vv_i)
INSN_LSX(vseteqz_v, cv)
INSN_LSX(vsetnez_v, cv)
INSN_LSX(vsetanyeqz_b, cv)
INSN_LSX(vsetanyeqz_h, cv)
INSN_LSX(vsetanyeqz_w, cv)
INSN_LSX(vsetanyeqz_d, cv)
INSN_LSX(vsetallnez_b, cv)
INSN_LSX(vsetallnez_h, cv)
INSN_LSX(vsetallnez_w, cv)
INSN_LSX(vsetallnez_d, cv)