target/mips: Convert MSA 3R instruction format to decodetree (part 1/4)
Convert 3-register operations to decodetree. Since the 'data format' field is a constant value, use tcg_constant_i32() instead of a TCG temporary. Note, the format definition could be named @3rf_b (for 3R with a df field BYTE-based) but since the instruction class is named '3R', we simply call the format @3r to ease reviewing the msa.decode file. However we directly call the trans_msa_3rf() function, which handles the BYTE-based df field. Reviewed-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Message-Id: <20211028210843.2120802-21-f4bug@amsat.org>
This commit is contained in:
parent
2d5246f305
commit
67bedef51a
@ -32,6 +32,7 @@
|
||||
@vec ...... ..... wt:5 ws:5 wd:5 ...... &msa_r df=0
|
||||
@2r ...... ........ df:2 ws:5 wd:5 ...... &msa_r wt=0
|
||||
@2rf ...... ......... . ws:5 wd:5 ...... &msa_r wt=0 df=%2r_df_w
|
||||
@3r ...... ... df:2 wt:5 ws:5 wd:5 ...... &msa_r
|
||||
@3rf_h ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_h
|
||||
@3rf_w ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_w
|
||||
@u5 ...... ... df:2 sa:5 ws:5 wd:5 ...... &msa_i
|
||||
@ -88,6 +89,11 @@ BNZ 010001 111 .. ..... ................ @bz
|
||||
SRARI 011110 010 ....... ..... ..... 001010 @bit
|
||||
SRLRI 011110 011 ....... ..... ..... 001010 @bit
|
||||
|
||||
SLD 011110 000 .. ..... ..... ..... 010100 @3r
|
||||
SPLAT 011110 001 .. ..... ..... ..... 010100 @3r
|
||||
|
||||
VSHF 011110 000 .. ..... ..... ..... 010101 @3r
|
||||
|
||||
FCAF 011110 0000 . ..... ..... ..... 011010 @3rf_w
|
||||
FCUN 011110 0001 . ..... ..... ..... 011010 @3rf_w
|
||||
FCEQ 011110 0010 . ..... ..... ..... 011010 @3rf_w
|
||||
|
@ -58,15 +58,12 @@ enum {
|
||||
OPC_SUBS_S_df = (0x0 << 23) | OPC_MSA_3R_11,
|
||||
OPC_MULV_df = (0x0 << 23) | OPC_MSA_3R_12,
|
||||
OPC_DOTP_S_df = (0x0 << 23) | OPC_MSA_3R_13,
|
||||
OPC_SLD_df = (0x0 << 23) | OPC_MSA_3R_14,
|
||||
OPC_VSHF_df = (0x0 << 23) | OPC_MSA_3R_15,
|
||||
OPC_SRA_df = (0x1 << 23) | OPC_MSA_3R_0D,
|
||||
OPC_SUBV_df = (0x1 << 23) | OPC_MSA_3R_0E,
|
||||
OPC_ADDS_A_df = (0x1 << 23) | OPC_MSA_3R_10,
|
||||
OPC_SUBS_U_df = (0x1 << 23) | OPC_MSA_3R_11,
|
||||
OPC_MADDV_df = (0x1 << 23) | OPC_MSA_3R_12,
|
||||
OPC_DOTP_U_df = (0x1 << 23) | OPC_MSA_3R_13,
|
||||
OPC_SPLAT_df = (0x1 << 23) | OPC_MSA_3R_14,
|
||||
OPC_SRAR_df = (0x1 << 23) | OPC_MSA_3R_15,
|
||||
OPC_SRL_df = (0x2 << 23) | OPC_MSA_3R_0D,
|
||||
OPC_MAX_S_df = (0x2 << 23) | OPC_MSA_3R_0E,
|
||||
@ -505,6 +502,11 @@ TRANS(BMNZ_V, trans_msa_3r, gen_helper_msa_bmnz_v);
|
||||
TRANS(BMZ_V, trans_msa_3r, gen_helper_msa_bmz_v);
|
||||
TRANS(BSEL_V, trans_msa_3r, gen_helper_msa_bsel_v);
|
||||
|
||||
TRANS(SLD, trans_msa_3rf, gen_helper_msa_sld_df);
|
||||
TRANS(SPLAT, trans_msa_3rf, gen_helper_msa_splat_df);
|
||||
|
||||
TRANS(VSHF, trans_msa_3rf, gen_helper_msa_vshf_df);
|
||||
|
||||
static void gen_msa_3r(DisasContext *ctx)
|
||||
{
|
||||
#define MASK_MSA_3R(op) (MASK_MSA_MINOR(op) | (op & (0x7 << 23)))
|
||||
@ -1255,12 +1257,6 @@ static void gen_msa_3r(DisasContext *ctx)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OPC_SLD_df:
|
||||
gen_helper_msa_sld_df(cpu_env, tdf, twd, tws, twt);
|
||||
break;
|
||||
case OPC_VSHF_df:
|
||||
gen_helper_msa_vshf_df(cpu_env, tdf, twd, tws, twt);
|
||||
break;
|
||||
case OPC_SUBV_df:
|
||||
switch (df) {
|
||||
case DF_BYTE:
|
||||
@ -1293,9 +1289,6 @@ static void gen_msa_3r(DisasContext *ctx)
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case OPC_SPLAT_df:
|
||||
gen_helper_msa_splat_df(cpu_env, tdf, twd, tws, twt);
|
||||
break;
|
||||
case OPC_SUBSUS_U_df:
|
||||
switch (df) {
|
||||
case DF_BYTE:
|
||||
|
Loading…
Reference in New Issue
Block a user