target/loongarch: Implement vinsgr2vr vpickve2gr vreplgr2vr

This patch includes:
- VINSGR2VR.{B/H/W/D};
- VPICKVE2GR.{B/H/W/D}[U];
- VREPLGR2VR.{B/H/W/D}.

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

View file

@ -818,6 +818,21 @@ static void output_vvvv(DisasContext *ctx, arg_vvvv *a, const char *mnemonic)
output(ctx, mnemonic, "v%d, v%d, v%d, v%d", a->vd, a->vj, a->vk, a->va);
}
static void output_vr_i(DisasContext *ctx, arg_vr_i *a, const char *mnemonic)
{
output(ctx, mnemonic, "v%d, r%d, 0x%x", a->vd, a->rj, a->imm);
}
static void output_rv_i(DisasContext *ctx, arg_rv_i *a, const char *mnemonic)
{
output(ctx, mnemonic, "r%d, v%d, 0x%x", a->rd, a->vj, a->imm);
}
static void output_vr(DisasContext *ctx, arg_vr *a, const char *mnemonic)
{
output(ctx, mnemonic, "v%d, r%d", a->vd, a->rj);
}
INSN_LSX(vadd_b, vvv)
INSN_LSX(vadd_h, vvv)
INSN_LSX(vadd_w, vvv)
@ -1561,3 +1576,21 @@ INSN_LSX(vsetallnez_b, cv)
INSN_LSX(vsetallnez_h, cv)
INSN_LSX(vsetallnez_w, cv)
INSN_LSX(vsetallnez_d, cv)
INSN_LSX(vinsgr2vr_b, vr_i)
INSN_LSX(vinsgr2vr_h, vr_i)
INSN_LSX(vinsgr2vr_w, vr_i)
INSN_LSX(vinsgr2vr_d, vr_i)
INSN_LSX(vpickve2gr_b, rv_i)
INSN_LSX(vpickve2gr_h, rv_i)
INSN_LSX(vpickve2gr_w, rv_i)
INSN_LSX(vpickve2gr_d, rv_i)
INSN_LSX(vpickve2gr_bu, rv_i)
INSN_LSX(vpickve2gr_hu, rv_i)
INSN_LSX(vpickve2gr_wu, rv_i)
INSN_LSX(vpickve2gr_du, rv_i)
INSN_LSX(vreplgr2vr_b, vr)
INSN_LSX(vreplgr2vr_h, vr)
INSN_LSX(vreplgr2vr_w, vr)
INSN_LSX(vreplgr2vr_d, vr)