e2k: use decodetree for alops

This commit is contained in:
Denis Drakhnia 2024-02-18 16:45:03 +02:00
parent 5fdb52d067
commit b9c2c736c2
11 changed files with 2998 additions and 65 deletions

1644
target/e2k/alop.decode Normal file

File diff suppressed because it is too large Load Diff

View File

@ -938,6 +938,9 @@ typedef enum {
ARGS_DDSD = alopf21_args(ARG_SIZE_D, ARG_SIZE_D, ARG_SIZE_S, ARG_SIZE_D),
ARGS_DDDD = alopf21_args(ARG_SIZE_D, ARG_SIZE_D, ARG_SIZE_D, ARG_SIZE_D),
ARGS_PPPP = alopf21_args(ARG_SIZE_P, ARG_SIZE_P, ARG_SIZE_P, ARG_SIZE_P),
// compat
ARGS_XSD = alopf7_args(ARG_SIZE_X, ARG_SIZE_S, ARG_SIZE_D),
} AlopArgs;
typedef enum {
@ -1239,14 +1242,14 @@ static AlopDesc alops[] = {
{ X(OP_FXCMPNLTXB), ALOPF7, ARGS_XXB, ALOP_SHORT, 0x2b, 1, -1, CHAN_0134, { -1 }, 5, 4 },
{ X(OP_FXCMPNLEXB), ALOPF7, ARGS_XXB, ALOP_SHORT, 0x2b, 1, -1, CHAN_0134, { -1 }, 6, 4 },
{ X(OP_FXCMPODXB), ALOPF7, ARGS_XXB, ALOP_SHORT, 0x2b, 1, -1, CHAN_0134, { -1 }, 7, 4 },
{ X(OP_CCTOPO), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 0 },
{ X(OP_CCTOPB), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 1 },
{ X(OP_CCTOPE), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 2 },
{ X(OP_CCTOPBE), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 3 },
{ X(OP_CCTOPS), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 4 },
{ X(OP_CCTOPP), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 5 },
{ X(OP_CCTOPL), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 6 },
{ X(OP_CCTOPLE), ALOPF8, ARGS_S, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 7 },
{ X(OP_CCTOPO), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 0 },
{ X(OP_CCTOPB), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 1 },
{ X(OP_CCTOPE), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 2 },
{ X(OP_CCTOPBE), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 3 },
{ X(OP_CCTOPS), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 4 },
{ X(OP_CCTOPP), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 5 },
{ X(OP_CCTOPL), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 6 },
{ X(OP_CCTOPLE), ALOPF8, ARGS_SB, ALOP_SHORT, 0x24, 1, -1, CHAN_03, { -1 }, 7 },
{ X(OP_STAAB), ALOPF10, ARGS_S, ALOP_EXT, 0x1c, 1, -1, CHAN_25, { -1 } },
{ X(OP_STAAH), ALOPF10, ARGS_S, ALOP_EXT, 0x1d, 1, -1, CHAN_25, { -1 } },
{ X(OP_STAAW), ALOPF10, ARGS_S, ALOP_EXT, 0x1e, 1, -1, CHAN_25, { -1 } },

View File

@ -1,4 +1,9 @@
gen = [
decodetree.process('alop.decode', extra_args: ['--static-decode=decode_alop', '--insnwidth=64']),
]
e2k_ss = ss.source_set()
e2k_ss.add(gen)
e2k_ss.add(files(
'cpu.c',
'cpu-dump.c',

View File

@ -0,0 +1,758 @@
#define compat_format_alf1 ALOPF1
#define compat_format_alf1_mas ALOPF1_MAS
#define compat_format_alf1_lit8 ALOPF11_LIT8
#define compat_format_alf2 ALOPF2
#define compat_format_alf2_pshufh ALOPF12_PSHUFH
#define compat_format_alf2_icalld ALOPF12_ICALLD
#define compat_format_alf3_mas ALOPF3
#define compat_format_alf7 ALOPF7
#define compat_format_alf8 ALOPF8
#define compat_format_alf10_mas ALOPF10
#define compat_format_alf15 ALOPF15
#define compat_format_alf16 ALOPF16
#define compat_format_alf21 ALOPF21
#define compat_format_alf21_log ALOPF21
#define compat_format(F) glue(compat_format_, F)
#define compat_args_alf1(R, S1, S2, S3) glue(ARGS_, glue3(S1, S2, R))
#define compat_args_alf1_mas(R, S1, S2, S3) glue(ARGS_, glue3(S1, S2, R))
#define compat_args_alf1_lit8(R, S1, S2, S3) glue(ARGS_, glue3(S1, S2, R))
#define compat_args_alf2(R, S1, S2, S3) glue(ARGS_, glue(S2, R))
#define compat_args_alf2_pshufh(R, S1, S2, S3) glue(ARGS_, glue(S2, R))
#define compat_args_alf2_icalld(R, S1, S2, S3) glue(ARGS_, glue(S2, R))
#define compat_args_alf3_mas(R, S1, S2, S3) glue(ARGS_, glue3(S1, S2, R))
#define compat_args_alf7(R, S1, S2, S3) glue(ARGS_, glue3(S1, S2, R))
#define compat_args_alf8(R, S1, S2, S3) glue(ARGS_, glue(S2, R))
#define compat_args_alf10_mas(R, S1, S2, S3) glue(ARGS_, R)
#define compat_args_alf15(R_, S1, S2, S3) glue(ARGS_, glue(S2, R))
#define compat_args_alf16(R, S1, S2, S3) glue(ARGS_, R)
#define compat_args_alf21(R, S1, S2, S3) glue(ARGS_, glue4(S1, S2, S3, R))
#define compat_args_alf21_log(R, S1, S2, S3) glue(ARGS_, glue4(S1, S2, S3, R))
#define compat_args(F, R, S1, S2, S3) glue(compat_args_, F)(R, S1, S2, S3)
#define lower_B b
#define lower_S s
#define lower_D d
#define lower_X x
#define lower_P q
#define lower_Q q
#define lower(S) glue(lower_, S)
#define compat_args2_alf1(R, S1, S2, S3) glue3(R, S1, S2)
#define compat_args2_alf1_mas(R, S1, S2, S3)
#define compat_args2_alf1_lit8(R, S1, S2, S3) glue3(R, S1, S2)
#define compat_args2_alf2(R, S1, S2, S3) glue(R, S2)
#define compat_args2_alf2_pshufh(R, S1, S2, S3) glue(R, S2)
#define compat_args2_alf3_mas(R, S1, S2, S3)
#define compat_args2_alf7(R, S1, S2, S3) glue3(R, S1, S2)
#define compat_args2_alf8(R, S1, S2, S3) glue(R, S2)
#define compat_args2_alf21(R, S1, S2, S3) glue4(R, S1, S2, S3)
#define compat_args2_alf21_log(R, S1, S2, S3) glue4(R, S1, S2, S3)
#define compat_args2(F, R, S1, S2, S3) glue(compat_args2_, F)(lower(R), lower(S1), lower(S2), lower(S3))
#define V_MIN(X) ((X) & 0xff)
#define V_MAX(X) ((X) >> 8)
#define R(MIN, MAX) (((MAX) << 8) | (MIN))
#define V1_2 R(1, 2)
#define V1_3 R(1, 3)
static bool check_version(Alop *alop, uint16_t versions[6])
{
uint16_t min_ver = V_MIN(versions[alop->chan]); \
uint16_t max_ver = V_MAX(versions[alop->chan]); \
return alop->ctx->version >= min_ver && (max_ver == 0 || alop->ctx->version <= max_ver);
}
#define TRANS_BASE(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, CODE) \
static bool glue(trans_, NAME)(DisasContext *ctx, glue(arg_, F) *a) \
{ \
uint16_t versions[6] = { C0, C1, C2, C3, C4, C5 }; \
Alop *alop = &ctx->alops[ctx->cur_alop]; \
if (!check_version(alop, versions)) { \
return false; \
} else if (ctx->only_check) { \
alop->format = compat_format(F); \
alop->args = compat_args(F, R, S1, S2, S3); \
} else { \
CODE; \
} \
return true; \
}
#define TRANSW(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, E, GEN) \
TRANS_BASE(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, \
{ glue4(gen_, F, E, compat_args2(F, R, S1, S2, S3))(alop, GEN); })
#define TRANSC(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, WRAP, OP1, OP2) \
TRANS_BASE(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, \
{ WRAP(alop, OP1, OP2); })
#define TRANSM(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, ADDR, GEN, MEMOP, BASE) \
TRANS_BASE(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, \
{ glue(gen_, F)(alop, ADDR, GEN, MEMOP, BASE); })
#define TRANS_(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, WRAP, GEN) \
TRANS_BASE(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, { WRAP(alop, GEN); })
#define TRANSD(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, GEN) \
TRANS_BASE(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, { GEN(alop); })
// special version:
// * set old opcode (to reuse old code)
// * direct call
#define TRANSA(NAME, C0, C1, C2, C3, C4, C5, R, S1, S2, S3, F, OP, GEN) \
static bool glue(trans_, NAME)(DisasContext *ctx, glue(arg_, F) *a) \
{ \
uint16_t versions[6] = { C0, C1, C2, C3, C4, C5 }; \
Alop *alop = &ctx->alops[ctx->cur_alop]; \
if (!check_version(alop, versions)) { \
return false; \
} else if (ctx->only_check) { \
alop->op = OP; \
alop->format = compat_format(F); \
alop->args = compat_args(F, R, S1, S2, S3); \
} else { \
GEN(alop); \
} \
return true; \
}
TRANSW(andw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_and_i32);
TRANSW(andd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_and_i64);
TRANSW(andnw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, gen_andn_i32);
TRANSW(andnd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, gen_andn_i64);
TRANSW(orw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_or_i32);
TRANSW(ord, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_or_i64);
TRANSW(ornw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, gen_orn_i32);
TRANSW(ornd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, gen_orn_i64);
TRANSW(xorw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_xor_i32);
TRANSW(xord, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_xor_i64);
TRANSW(xornw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, gen_xorn_i32);
TRANSW(xornd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, gen_xorn_i64);
TRANSW(sxtb, 1, 1, 1, 1, 1, 1, D,0,S,0, alf2, _, gen_sxtb);
TRANSW(sxth, 1, 1, 1, 1, 1, 1, D,0,S,0, alf2, _, gen_sxth);
TRANSW(sxtw, 1, 1, 1, 1, 1, 1, D,0,S,0, alf2, _, gen_sxtw);
TRANSW(zxtb, 1, 1, 1, 1, 1, 1, D,0,S,0, alf2, _, gen_zxtb);
TRANSW(zxth, 1, 1, 1, 1, 1, 1, D,0,S,0, alf2, _, gen_zxth);
TRANSW(zxtw, 1, 1, 1, 1, 1, 1, D,0,S,0, alf2, _, gen_zxtw);
TRANSD(sxt, 1, 1, 1, 1, 1, 1, D,S,S,0, alf1, gen_sxt);
TRANSD(mergew, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, gen_merges);
TRANSD(merged, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, gen_merged);
TRANSW(addw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_add_i32);
TRANSW(addd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_add_i64);
TRANSW(negw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf2, _, tcg_gen_neg_i32);
TRANSW(subw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_sub_i32);
TRANSW(negd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf2, _, tcg_gen_neg_i64);
TRANSW(subd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_sub_i64);
TRANSW(sclw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_rotl_i32);
TRANSW(scld, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_rotl_i64);
TRANSW(scrw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_rotr_i32);
TRANSW(scrd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_rotr_i64);
TRANSW(shlw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_shl_i32);
TRANSW(shld, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_shl_i64);
TRANSW(shrw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_shr_i32);
TRANSW(shrd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_shr_i64);
TRANSW(sarw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, _, tcg_gen_sar_i32);
TRANSW(sard, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, _, tcg_gen_sar_i64);
TRANSD(getfw, 1, 1, 1, 1, 1, 1, S,S,S,0, alf1, gen_getfs);
TRANSD(getfd, 1, 1, 1, 1, 1, 1, D,D,D,0, alf1, gen_getfd);
TRANSW(cmpowb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmposb);
TRANSW(cmpbwb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpbsb);
TRANSW(cmpewb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpesb);
TRANSW(cmpbewb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpbesb);
TRANSW(cmpswb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpssb);
TRANSW(cmppwb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmppsb);
TRANSW(cmplwb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmplsb);
TRANSW(cmplewb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmplesb);
TRANSW(cmpodb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpodb);
TRANSW(cmpbdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpbdb);
TRANSW(cmpedb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpedb);
TRANSW(cmpbedb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpbedb);
TRANSW(cmpsdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpsdb);
TRANSW(cmppdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmppdb);
TRANSW(cmpldb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpldb);
TRANSW(cmpledb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpledb);
TRANSW(cmpandewb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpandesb);
TRANSW(cmpandswb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpandssb);
TRANSW(cmpandpwb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpandpsb);
TRANSW(cmpandlewb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _, gen_cmpandlesb);
TRANSW(cmpandedb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpandedb);
TRANSW(cmpandsdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpandsdb);
TRANSW(cmpandpdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpandpdb);
TRANSW(cmpandledb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _, gen_cmpandledb);
TRANSD(cctopo, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctopo);
TRANSD(cctopb, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctopb);
TRANSD(cctope, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctope);
TRANSD(cctopbe, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctopbe);
TRANSD(cctops, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctops);
TRANSD(cctopp, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctopp);
TRANSD(cctopl, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctopl);
TRANSD(cctople, 1, 0, 0, 1, 0, 0, B,0,S,0, alf8, gen_cctople);
TRANSM(ldb, 1, 0, 1, 1, 0, 1, D,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i64, MO_UB, ADDR_FLAT);
TRANSM(ldh, 1, 0, 1, 1, 0, 1, D,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i64, MO_UW, ADDR_FLAT);
TRANSM(ldw, 1, 0, 1, 1, 0, 1, D,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i64, MO_UL, ADDR_FLAT);
TRANSM(ldd, 1, 0, 1, 1, 0, 1, D,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i64, MO_UQ, ADDR_FLAT);
// should be illop if not e2k32
#if 1 || defined(TARGET_E2K32)
TRANSM(ldcsb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UB, ADDR_CS);
TRANSM(ldcsh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UW, ADDR_CS);
TRANSM(ldcsw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UL, ADDR_CS);
TRANSM(ldcsd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UQ, ADDR_CS);
TRANSM(lddsb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UB, ADDR_DS);
TRANSM(lddsh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UW, ADDR_DS);
TRANSM(lddsw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UL, ADDR_DS);
TRANSM(lddsd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UQ, ADDR_DS);
TRANSM(ldesb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UB, ADDR_ES);
TRANSM(ldesh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UW, ADDR_ES);
TRANSM(ldesw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UL, ADDR_ES);
TRANSM(ldesd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UQ, ADDR_ES);
TRANSM(ldfsb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UB, ADDR_FS);
TRANSM(ldfsh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UW, ADDR_FS);
TRANSM(ldfsw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UL, ADDR_FS);
TRANSM(ldfsd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UQ, ADDR_FS);
//ldfsq, 1, 0, 1, 1, 0, 1, Q,D,D,0, alf11_mas, AF_PAIR
TRANSM(ldgsb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UB, ADDR_GS);
TRANSM(ldgsh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UW, ADDR_GS);
TRANSM(ldgsw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UL, ADDR_GS);
TRANSM(ldgsd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UQ, ADDR_GS);
//ldgsq, 1, 0, 1, 1, 0, 1, Q,D,D,0, alf11_mas, AF_PAIR
TRANSM(ldssb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UB, ADDR_SS);
TRANSM(ldssh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UW, ADDR_SS);
TRANSM(ldssw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UL, ADDR_SS);
TRANSM(ldssd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UQ, ADDR_SS);
//ldssq, 1, 0, 1, 1, 0, 1, Q,D,D,0, alf11_mas, AF_PAIR
TRANSM(ldgdb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UB, ADDR_GD);
TRANSM(ldgdh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UW, ADDR_GD);
TRANSM(ldgdw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UL, ADDR_GD);
TRANSM(ldgdd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf1_mas, gen_addr_i32, gen_ld_raw_i64, MO_UQ, ADDR_GD);
//ldgdq, 1, 0, 1, 1, 0, 1, Q,S,S,0, alf11_mas, AF_PAIR
#endif
//ldcudb, 1, 0, 1, 1, 0, 1, D,S,S,0, alf11_mas
//ldcudh, 1, 0, 1, 1, 0, 1, D,S,S,0, alf11_mas
//ldcudw, 1, 0, 1, 1, 0, 1, D,S,S,0, alf11_mas
//ldcudd, 1, 0, 1, 1, 0, 1, D,S,S,0, alf11_mas
//ldcudq, 1, 0, 1, 1, 0, 1, Q,S,S,0, alf11_mas, AF_PAIR
//ldapb, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas
//ldaph, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas
//ldapw, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas
//ldapq, 1, 0, 1, 1, 0, 1, Q,Q,S,0, alf11_mas, AF_PAIR
//ldodrb, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodrh, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodrw, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodrd, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodrq, 1, 0, 1, 1, 0, 1, Q,Q,S,0, alf11_mas, AF_PAIR | AF_REMOVED_IN_V3
//ldodwb, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodwh, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodww, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodwd, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodwq, 1, 0, 1, 1, 0, 1, Q,Q,S,0, alf11_mas, AF_PAIR | AF_REMOVED_IN_V3
//ldodpb, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodph, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodpw, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodpd, 1, 0, 1, 1, 0, 1, D,Q,S,0, alf11_mas, AF_REMOVED_IN_V3
//ldodpq, 1, 0, 1, 1, 0, 1, Q,Q,S,0, alf11_mas, AF_PAIR | AF_REMOVED_IN_V3
TRANSM(stb, 0, 0, 1, 0, 0, 1, S,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i32, MO_UB, ADDR_FLAT);
TRANSM(sth, 0, 0, 1, 0, 0, 1, S,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i32, MO_UW, ADDR_FLAT);
TRANSM(stw, 0, 0, 1, 0, 0, 1, S,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i32, MO_UL, ADDR_FLAT);
TRANSM(std, 0, 0, 1, 0, 0, 1, D,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i64, MO_UQ, ADDR_FLAT);
//stq, 0, 0, 5, 0, 0, 5, Q,D,D,0, alf13_mas, AF_PAIR
// should be illop if not e2k32
#if 1 || defined(TARGET_E2K32)
TRANSM(stcsb, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UB, ADDR_CS);
TRANSM(stcsh, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UW, ADDR_CS);
TRANSM(stcsw, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UL, ADDR_CS);
TRANSM(stcsd, 0, 0, 1, 0, 0, 1, D,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i64, MO_UQ, ADDR_CS);
//stcsq, 0, 0, 1, 0, 0, 1, Q,S,S,0, alf13_mas, AF_PAIR
TRANSM(stdsb, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UB, ADDR_DS);
TRANSM(stdsh, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UW, ADDR_DS);
TRANSM(stdsw, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UL, ADDR_DS);
TRANSM(stdsd, 0, 0, 1, 0, 0, 1, D,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i64, MO_UQ, ADDR_DS);
//stdsq, 0, 0, 1, 0, 0, 1, Q,S,S,0, alf13_mas, AF_PAIR
TRANSM(stesb, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UB, ADDR_ES);
TRANSM(stesh, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UW, ADDR_ES);
TRANSM(stesw, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UL, ADDR_ES);
TRANSM(stesd, 0, 0, 1, 0, 0, 1, D,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i64, MO_UQ, ADDR_ES);
//stesq, 0, 0, 1, 0, 0, 1, Q,S,S,0, alf13_mas, AF_PAIR
TRANSM(stfsb, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UB, ADDR_FS);
TRANSM(stfsh, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UW, ADDR_FS);
TRANSM(stfsw, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UL, ADDR_FS);
TRANSM(stfsd, 0, 0, 1, 0, 0, 1, D,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i64, MO_UQ, ADDR_FS);
//stfsq, 0, 0, 1, 0, 0, 1, Q,S,S,0, alf13_mas, AF_PAIR
TRANSM(stgsb, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UB, ADDR_GS);
TRANSM(stgsh, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UW, ADDR_GS);
TRANSM(stgsw, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UL, ADDR_GS);
TRANSM(stgsd, 0, 0, 1, 0, 0, 1, D,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i64, MO_UQ, ADDR_GS);
//stgsq, 0, 0, 1, 0, 0, 1, Q,S,S,0, alf13_mas, AF_PAIR
TRANSM(stssb, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UB, ADDR_SS);
TRANSM(stssh, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UW, ADDR_SS);
TRANSM(stssw, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UL, ADDR_SS);
TRANSM(stssd, 0, 0, 1, 0, 0, 1, D,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i64, MO_UQ, ADDR_SS);
//stssq, 0, 0, 1, 0, 0, 1, Q,S,S,0, alf13_mas, AF_PAIR
TRANSM(stgdb, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UB, ADDR_GD);
TRANSM(stgdh, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UW, ADDR_GD);
TRANSM(stgdw, 0, 0, 1, 0, 0, 1, S,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i32, MO_UL, ADDR_GD);
TRANSM(stgdd, 0, 0, 1, 0, 0, 1, D,S,S,0, alf3_mas, gen_addr_i32, gen_st_raw_i64, MO_UQ, ADDR_GD);
//stgdq, 0, 0, 1, 0, 0, 1, Q,S,S,0, alf13_mas, AF_PAIR
#endif
//stodrb, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodrh, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodrw, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodrd, 0, 0, 1, 0, 0, 1, D,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodrq, 0, 0, 1, 0, 0, 1, Q,Q,S,0, alf13_mas, AF_PAIR | AF_REMOVED_IN_V3
//stodwb, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodwh, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodww, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodwd, 0, 0, 1, 0, 0, 1, D,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodwq, 0, 0, 1, 0, 0, 1, Q,Q,S,0, alf13_mas, AF_PAIR | AF_REMOVED_IN_V3
//stodpb, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodph, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodpw, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodpd, 0, 0, 1, 0, 0, 1, D,Q,S,0, alf13_mas, AF_REMOVED_IN_V3
//stodpq, 0, 0, 1, 0, 0, 1, Q,Q,S,0, alf13_mas, AF_PAIR | AF_REMOVED_IN_V3
TRANSA(staab, 0, 0, 1, 0, 0, 1, S,0,0,0, alf10_mas, OP_STAAB, gen_staab);
TRANSA(staah, 0, 0, 1, 0, 0, 1, S,0,0,0, alf10_mas, OP_STAAH, gen_staah);
TRANSA(staaw, 0, 0, 1, 0, 0, 1, S,0,0,0, alf10_mas, OP_STAAW, gen_staaw);
TRANSA(staad, 0, 0, 1, 0, 0, 1, D,0,0,0, alf10_mas, OP_STAAD, gen_staad);
TRANSA(staaq, 0, 0, 1, 0, 0, 1, Q,0,0,0, alf10_mas, OP_STAAQ, gen_staaq);
//stapb, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas
//staph, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas
//stapw, 0, 0, 1, 0, 0, 1, S,Q,S,0, alf13_mas
//stapd, 0, 0, 1, 0, 0, 1, D,Q,S,0, alf13_mas
//stapq, 0, 0, 1, 0, 0, 1, Q,Q,S,0, alf13_mas, AF_PAIR
//ldrd, 1, 0, 1, 1, 0, 1, D,D,D,0, alf11
//strd, 0, 0, 1, 0, 0, 1, D,D,D,0, alf13_mas
//aaurrw, 0, 0, 1, 0, 0, 1, S,0,0,0, aaurr
//aaurrd, 0, 0, 1, 0, 0, 1, D,0,0,0, aaurr
//aaurrq, 0, 0, 1, 0, 0, 1, Q,0,0,0, aaurr, AF_PAIR
//aaurww, 0, 0, 1, 0, 0, 1, S,0,0,0, aaurw
//aaurwd, 0, 0, 1, 0, 0, 1, D,0,0,0, aaurw
//aaurwq, 0, 0, 1, 0, 0, 1, Q,0,0,0, aaurw, AF_PAIR
TRANSA(gettags, 0, 0, 1, 0, 0, 1, S,0,S,0, alf2, OP_GETTAGS, gen_gettags);
TRANSA(gettagd, 0, 0, 1, 0, 0, 1, S,0,D,0, alf2, OP_GETTAGD, gen_gettagd);
TRANSA(puttags, 0, 0, 1, 0, 0, 1, S,S,S,0, alf1_mas, OP_PUTTAGS, gen_puttags);
TRANSA(puttagd, 0, 0, 1, 0, 0, 1, D,D,S,0, alf1_mas, OP_PUTTAGD, gen_puttagd);
//gettc, 1, 0, 0, 0, 0, 0, D,0,S,0, alf12
//puttc, 1, 0, 0, 0, 0, 0, D,D,D,0, alf11
//invtc, 1, 0, 0, 0, 0, 0, D,0,S,0, alf12
TRANSA(movts, 1, 1, 0, 1, 1, 0, S,0,S,0, alf2, OP_MOVTS, gen_movts);
TRANSA(movtcs, 1, 1, 0, 1, 1, 0, S,0,S,0, alf2, OP_MOVTCS, gen_movtcs);
//TRANSA(movtrs, 1, 1, 0, 1, 1, 0, S,0,S,0, alf2, OP_MOVTRS, gen_movtrs);
//TRANSA(movtrcs, 1, 1, 0, 1, 1, 0, S,0,S,0, alf2, OP_MOVTRCS, gen_movtrcs);
TRANSA(movtd, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, OP_MOVTD, gen_movtd);
TRANSA(movtcd, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, OP_MOVTCD, gen_movtcd);
//TRANSA(movtrd, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, OP_MOVTRD, gen_movtrd);
//TRANSA(movtrcd, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, OP_MOVTRCD, gen_movtrcd);
TRANSA(movtq, 1, 1, 0, 1, 1, 0, Q,0,Q,0, alf2, OP_MOVTQ, gen_movtq);
TRANSA(movtcq, 1, 1, 0, 1, 1, 0, Q,0,Q,0, alf2, OP_MOVTCQ, gen_movtcq);
//movtrq, 1, 1, 0, 1, 1, 0, Q,0,Q,0, alf22, AF_PAIR
//movtrcq, 1, 1, 0, 1, 1, 0, Q,0,Q,0, alf22, AF_PAIR
//getsap, 1, 1, 0, 0, 0, 0, Q,0,S,0, alf2, AF_PAIR
//cudtoap, 1, 1, 0, 1, 1, 0, Q,0,S,0, alf2, AF_PAIR
//gdtoap, 1, 1, 0, 1, 1, 0, Q,0,S,0, alf2, AF_PAIR
//vfsi, 0, 1, 0, 0, 1, 0, D,S,D,0, alf1
TRANSA(getpl, 1, 0, 0, 1, 0, 0, D,0,S,0, alf2, OP_GETPL, gen_getpl);
TRANSW(fxcmpeqsb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmpeqs);
TRANSW(fxcmpltsb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmplts);
TRANSW(fxcmplesb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmples);
TRANSW(fxcmpuodsb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmpuods);
TRANSW(fxcmpneqsb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmpneqs);
TRANSW(fxcmpnltsb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmpnlts);
TRANSW(fxcmpnlesb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmpnles);
TRANSW(fxcmpodsb, 1, 1, 0, 1, 1, 0, D,X,S,0, alf7, _env_, gen_helper_fxcmpods);
TRANSW(fxcmpeqdb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpeqd);
TRANSW(fxcmpltdb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpltd);
TRANSW(fxcmpledb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpled);
TRANSW(fxcmpuoddb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpuodd);
TRANSW(fxcmpneqdb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpneqd);
TRANSW(fxcmpnltdb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpnltd);
TRANSW(fxcmpnledb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpnled);
TRANSW(fxcmpoddb, 1, 1, 0, 1, 1, 0, D,X,D,0, alf7, _env_, gen_helper_fxcmpodd);
TRANSW(fxcmpeqxb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmpeqx);
TRANSW(fxcmpltxb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmpltx);
TRANSW(fxcmplexb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmplex);
TRANSW(fxcmpuodxb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmpuodx);
TRANSW(fxcmpneqxb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmpneqx);
TRANSW(fxcmpnltxb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmpnltx);
TRANSW(fxcmpnlexb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmpnlex);
TRANSW(fxcmpodxb, 1, 1, 0, 1, 1, 0, D,X,X,0, alf7, _env_, gen_helper_fxcmpodx);
TRANSW(fcmpeqsb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmpeqs);
TRANSW(fcmpltsb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmplts);
TRANSW(fcmplesb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmples);
TRANSW(fcmpuodsb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmpuods);
TRANSW(fcmpneqsb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmpneqs);
TRANSW(fcmpnltsb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmpnlts);
TRANSW(fcmpnlesb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmpnles);
TRANSW(fcmpodsb, 1, 1, 0, 1, 1, 0, S,S,S,0, alf7, _env_, gen_helper_fcmpods);
TRANSW(fcmpeqdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpeqd);
TRANSW(fcmpltdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpltd);
TRANSW(fcmpledb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpled);
TRANSW(fcmpuoddb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpuodd);
TRANSW(fcmpneqdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpneqd);
TRANSW(fcmpnltdb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpnltd);
TRANSW(fcmpnledb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpnled);
TRANSW(fcmpoddb, 1, 1, 0, 1, 1, 0, D,D,D,0, alf7, _env_, gen_helper_fcmpodd);
TRANSW(fadds, 1, 1, 4, 1, 1, 4, S,S,S,0, alf1, _env_, gen_helper_fadds);
TRANSW(faddd, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_faddd);
TRANSW(fsubs, 1, 1, 4, 1, 1, 4, S,S,S,0, alf1, _env_, gen_helper_fsubs);
TRANSW(fsubd, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_fsubd);
TRANSW(fmins, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fmins);
TRANSW(fmind, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fmind);
TRANSW(fmaxs, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fmaxs);
TRANSW(fmaxd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fmaxd);
TRANSW(fmuls, 1, 1, 4, 1, 1, 4, S,S,S,0, alf1, _env_, gen_helper_fmuls);
TRANSW(fmuld, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_fmuld);
TRANSW(fstoiw, 1, 1, 0, 1, 1, 0, S,0,S,0, alf2, _env_, gen_helper_fstois);
TRANSW(fstoiwtr, 1, 1, 0, 1, 1, 0, S,0,S,0, alf2, _env_, gen_helper_fstoistr);
TRANSW(iwtofs, 1, 1, 0, 1, 1, 0, S,0,S,0, alf2, _env_, gen_helper_istofs);
TRANSW(fdtoid, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, _env_, gen_helper_fdtoid);
TRANSW(fxtoid, 1, 1, 0, 1, 1, 0, D,0,X,0, alf2, _env_, gen_helper_fxtoid);
TRANSW(idtofd, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, _env_, gen_helper_idtofd);
TRANSW(idtofx, 1, 1, 0, 1, 1, 0, X,0,D,0, alf2, _env_, gen_helper_idtofx);
TRANSW(fxtofd, 1, 1, 0, 1, 1, 0, D,0,X,0, alf2, _env_, gen_helper_fxtofd);
TRANSW(fdtofx, 1, 1, 0, 1, 1, 0, X,0,D,0, alf2, _env_, gen_helper_fdtofx);
TRANSW(pfstoiw, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, _env_, gen_helper_pfstois);
TRANSW(pfstoiwtr, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, _env_, gen_helper_pfstoistr);
TRANSW(piwtofs, 1, 1, 0, 1, 1, 0, D,0,D,0, alf2, _env_, gen_helper_pistofs);
TRANSW(fstoid, 1, 1, 0, 1, 1, 0, D,0,S,0, alf2, _env_, gen_helper_fstoid);
TRANSW(iwtofd, 1, 1, 0, 1, 1, 0, D,0,S,0, alf2, _env_, gen_helper_istofd);
TRANSW(iwtofx, 1, 1, 0, 1, 1, 0, X,0,S,0, alf2, _env_, gen_helper_istofx);
TRANSW(fstofd, 1, 1, 0, 1, 1, 0, D,0,S,0, alf2, _env_, gen_helper_fstofd);
TRANSW(fstofx, 1, 1, 0, 1, 1, 0, X,0,S,0, alf2, _env_, gen_helper_fstofx);
TRANSW(pfstofd, 1, 1, 0, 1, 1, 0, D,0,S,0, alf2, _env_, gen_helper_fstofd);
TRANSW(fdtoiw, 1, 1, 0, 1, 1, 0, S,0,D,0, alf2, _env_, gen_helper_fdtois);
TRANSW(fxtoiw, 1, 1, 0, 1, 1, 0, S,0,X,0, alf2, _env_, gen_helper_fxtois);
TRANSW(fdtoiwtr, 1, 1, 0, 1, 1, 0, S,0,D,0, alf2, _env_, gen_helper_fdtoistr);
TRANSW(idtofs, 1, 1, 0, 1, 1, 0, S,0,D,0, alf2, _env_, gen_helper_idtofs);
TRANSW(fdtofs, 1, 1, 0, 1, 1, 0, S,0,D,0, alf2, _env_, gen_helper_fdtofs);
TRANSW(fxtofs, 1, 1, 0, 1, 1, 0, S,0,X,0, alf2, _env_, gen_helper_fxtofs);
TRANSW(pfdtoiw, 1, 1, 0, 1, 1, 0, S,0,D,0, alf2, _env_, gen_helper_fdtois);
TRANSW(pfdtoiwtr, 1, 1, 0, 1, 1, 0, S,0,D,0, alf2, _env_, gen_helper_fdtoistr);
TRANSW(pfdtofs, 1, 1, 0, 1, 1, 0, S,0,D,0, alf2, _env_, gen_helper_fdtofs);
TRANSW(udivw, 0, 0, 0, 0, 0, 1, S,S,S,0, alf1, _tag_, gen_udivs);
TRANSW(udivd, 0, 0, 0, 0, 0, 1, D,D,D,0, alf1, _tag_, gen_udivd);
TRANSW(sdivw, 0, 0, 0, 0, 0, 1, S,S,S,0, alf1, _tag_, gen_sdivs);
TRANSW(sdivd, 0, 0, 0, 0, 0, 1, D,D,D,0, alf1, _tag_, gen_sdivd);
TRANSW(udivx, 0, 0, 0, 0, 0, 1, S,D,S,0, alf1, _tag_, gen_udivx);
TRANSW(umodx, 0, 0, 0, 0, 0, 1, S,D,S,0, alf1, _tag_, gen_umodx);
TRANSW(sdivx, 0, 0, 0, 0, 0, 1, S,D,S,0, alf1, _tag_, gen_sdivx);
TRANSW(smodx, 0, 0, 0, 0, 0, 1, S,D,S,0, alf1, _tag_, gen_smodx);
TRANSW(fxaddss, 1, 1, 0, 1, 1, 0, S,X,S,0, alf1, _env_, gen_helper_fxaddss);
TRANSW(fxadddd, 1, 1, 0, 1, 1, 0, D,X,D,0, alf1, _env_, gen_helper_fxadddd);
TRANSW(fxaddsx, 1, 1, 0, 1, 1, 0, X,X,S,0, alf1, _env_, gen_helper_fxaddsx);
TRANSW(fxadddx, 1, 1, 0, 1, 1, 0, X,X,D,0, alf1, _env_, gen_helper_fxadddx);
TRANSW(fxaddxs, 1, 1, 0, 1, 1, 0, S,X,X,0, alf1, _env_, gen_helper_fxaddxs);
TRANSW(fxaddxd, 1, 1, 0, 1, 1, 0, D,X,X,0, alf1, _env_, gen_helper_fxaddxd);
TRANSW(fxaddxx, 1, 1, 0, 1, 1, 0, X,X,X,0, alf1, _env_, gen_helper_fxaddxx);
TRANSW(fxdivss, 0, 0, 0, 0, 0, 1, S,X,S,0, alf1, _env_, gen_helper_fxdivss);
TRANSW(fxsubss, 1, 1, 0, 1, 1, 0, S,X,S,0, alf1, _env_, gen_helper_fxsubss);
TRANSW(fxdivdd, 0, 0, 0, 0, 0, 1, D,X,D,0, alf1, _env_, gen_helper_fxdivdd);
TRANSW(fxsubdd, 1, 1, 0, 1, 1, 0, D,X,D,0, alf1, _env_, gen_helper_fxsubdd);
TRANSW(fxdivsx, 0, 0, 0, 0, 0, 1, X,X,S,0, alf1, _env_, gen_helper_fxdivsx);
TRANSW(fxsubsx, 1, 1, 0, 1, 1, 0, X,X,S,0, alf1, _env_, gen_helper_fxsubsx);
TRANSW(fxdivdx, 0, 0, 0, 0, 0, 1, X,X,D,0, alf1, _env_, gen_helper_fxdivdx);
TRANSW(fxsubdx, 1, 1, 0, 1, 1, 0, X,X,D,0, alf1, _env_, gen_helper_fxsubdx);
TRANSW(fxdivxs, 0, 0, 0, 0, 0, 1, S,X,X,0, alf1, _env_, gen_helper_fxdivxs);
TRANSW(fxsubxs, 1, 1, 0, 1, 1, 0, S,X,X,0, alf1, _env_, gen_helper_fxsubxs);
TRANSW(fxdivxd, 0, 0, 0, 0, 0, 1, D,X,X,0, alf1, _env_, gen_helper_fxdivxd);
TRANSW(fxsubxd, 1, 1, 0, 1, 1, 0, D,X,X,0, alf1, _env_, gen_helper_fxsubxd);
TRANSW(fxdivxx, 0, 0, 0, 0, 0, 1, X,X,X,0, alf1, _env_, gen_helper_fxdivxx);
TRANSW(fxsubxx, 1, 1, 0, 1, 1, 0, X,X,X,0, alf1, _env_, gen_helper_fxsubxx);
TRANSW(fxmulss, 1, 1, 0, 1, 1, 0, S,X,S,0, alf1, _env_, gen_helper_fxmulss);
TRANSW(fxmuldd, 1, 1, 0, 1, 1, 0, D,X,D,0, alf1, _env_, gen_helper_fxmuldd);
TRANSW(fxmulsx, 1, 1, 0, 1, 1, 0, X,X,S,0, alf1, _env_, gen_helper_fxmulsx);
TRANSW(fxmuldx, 1, 1, 0, 1, 1, 0, X,X,D,0, alf1, _env_, gen_helper_fxmuldx);
TRANSW(fxmulxs, 1, 1, 0, 1, 1, 0, S,X,X,0, alf1, _env_, gen_helper_fxmulxs);
TRANSW(fxmulxd, 1, 1, 0, 1, 1, 0, D,X,X,0, alf1, _env_, gen_helper_fxmulxd);
TRANSW(fxmulxx, 1, 1, 0, 1, 1, 0, X,X,X,0, alf1, _env_, gen_helper_fxmulxx);
TRANSW(fxrsubss, 1, 1, 0, 1, 1, 0, S,X,S,0, alf1, _env_, gen_helper_fxrsubss);
TRANSW(fxrsubdd, 1, 1, 0, 1, 1, 0, D,X,D,0, alf1, _env_, gen_helper_fxrsubdd);
TRANSW(fxrsubsx, 1, 1, 0, 1, 1, 0, X,X,S,0, alf1, _env_, gen_helper_fxrsubsx);
TRANSW(fxrsubdx, 1, 1, 0, 1, 1, 0, X,X,D,0, alf1, _env_, gen_helper_fxrsubdx);
TRANSW(fxsqrtisx, 0, 0, 0, 0, 0, 1, X,0,S,0, alf2, _env_, gen_helper_fstofx);
TRANSW(fxsqrtidx, 0, 0, 0, 0, 0, 1, X,0,D,0, alf2, _env_, gen_helper_fdtofx);
TRANSW(fxsqrtixx, 0, 0, 0, 0, 0, 1, X,0,X,0, alf2, _, gen_movx);
TRANSW(fxsqrtuxx, 0, 0, 0, 0, 0, 1, X,X,X,0, alf1, _, gen_fxsqrtuxx);
TRANSW(fxsqrtusx, 0, 0, 0, 0, 0, 1, X,S,X,0, alf1, _, gen_fxsqrtusx);
TRANSW(fxsqrtudx, 0, 0, 0, 0, 0, 1, X,D,X,0, alf1, _, gen_fxsqrtudx);
TRANSW(fxsqrttxx, 0, 0, 0, 0, 0, 1, X,X,X,0, alf1, _env_, gen_helper_fxsqrttxx);
TRANSW(fxsqrttsx, 0, 0, 0, 0, 0, 1, X,S,X,0, alf1, _env_, gen_helper_fxsqrttsx);
TRANSW(fxsqrttdx, 0, 0, 0, 0, 0, 1, X,D,X,0, alf1, _env_, gen_helper_fxsqrttdx);
TRANSW(fxdivtss, 0, 0, 0, 0, 0, 1, S,S,X,0, alf1, _env_, gen_helper_fxdivtss);
TRANSW(fxdivtdd, 0, 0, 0, 0, 0, 1, D,D,X,0, alf1, _env_, gen_helper_fxdivtdd);
TRANSW(fxdivtsx, 0, 0, 0, 0, 0, 1, X,S,X,0, alf1, _env_, gen_helper_fxdivtsx);
TRANSW(fxdivtdx, 0, 0, 0, 0, 0, 1, X,D,X,0, alf1, _env_, gen_helper_fxdivtdx);
TRANSW(movfi, 2, 1, 0, 2, 1, 0, S,0,X,0, alf2, _, gen_movfi);
TRANSW(movif, 2, 1, 0, 2, 1, 0, X,D,S,0, alf1, _, gen_movif);
TRANSW(pminub, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pminub);
TRANSW(pminsh, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pminsh);
TRANSW(pmaxub, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pmaxub);
TRANSW(pmaxsh, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pmaxsh);
TRANSW(punpckhbh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_punpckhbh);
TRANSW(punpcklbh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_punpcklbh);
TRANSW(punpckhhw, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_punpckhhw);
TRANSW(punpcklhw, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_punpcklhw);
TRANSW(punpckhwd, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_punpckhwd);
TRANSW(punpcklwd, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_punpcklwd);
TRANSW(pmovmskps, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_pmovmskps);
TRANSW(pmovmskpd, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_pmovmskpd);
TRANSW(packsshb, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_packsshb);
TRANSW(packushb, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_packushb);
TRANSW(packsswh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_packsswh);
TRANSW(paddb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_vec_add8_i64);
TRANSW(paddh, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_vec_add16_i64);
TRANSW(paddw, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_vec_add32_i64);
TRANSW(paddd, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_add_i64);
TRANSW(paddsb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_paddsb);
TRANSW(paddsh, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_paddsh);
TRANSW(pmovmskb, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_pmovmskb);
TRANSW(paddusb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_paddusb);
TRANSW(paddush, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_paddush);
TRANSW(psubb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_vec_sub8_i64);
TRANSW(psubh, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_vec_sub16_i64);
TRANSW(psubw, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_vec_sub32_i64);
TRANSW(psubd, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, tcg_gen_sub_i64);
TRANSW(psubsb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_psubsb);
TRANSW(psubsh, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_psubsh);
TRANSW(psubusb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_psubusb);
TRANSW(psubush, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_psubush);
TRANSW(psrlqh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1_lit8, _, gen_psrlqh);
TRANSW(psrlql, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1_lit8, _, gen_psrlql);
TRANSW(psllqh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1_lit8, _, gen_psllqh);
TRANSW(psllql, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1_lit8, _, gen_psllql);
TRANSW(psrlw, 3, 1, 0, 3, 1, 0, D,D,D,0, alf1, _, gen_helper_psrlw);
TRANSW(psrlh, 3, 1, 0, 3, 1, 0, D,D,D,0, alf1, _, gen_helper_psrlh);
TRANSW(psraw, 3, 1, 0, 3, 1, 0, D,D,D,0, alf1, _, gen_helper_psraw);
TRANSW(psrah, 3, 1, 0, 3, 1, 0, D,D,D,0, alf1, _, gen_helper_psrah);
TRANSW(psllw, 3, 1, 0, 3, 1, 0, D,D,D,0, alf1, _, gen_helper_psllw);
TRANSW(psllh, 3, 1, 0, 3, 1, 0, D,D,D,0, alf1, _, gen_helper_psllh);
TRANSW(pshufw, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1_lit8, _, gen_pshufw);
TRANSW(pshufh, 0, 1, 0, 0, 1, 0, D,0,D,0, alf2_pshufh, _, gen_helper_pshufh);
TRANSW(pcmpeqb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpeqb);
TRANSW(pcmpeqh, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpeqh);
TRANSW(pcmpeqw, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpeqw);
TRANSW(pcmpgtb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpgtb);
TRANSW(pcmpgth, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpgth);
TRANSW(pcmpgtw, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpgtw);
TRANSW(pmulhh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_pmulhh);
TRANSW(pmullh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_pmullh);
TRANSW(pmaddh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_pmaddh);
TRANSW(pmulhuh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_pmulhuh);
TRANSW(psadbw, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_helper_psadbw);
TRANSW(pextrh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1_lit8, _, gen_pextrh);
TRANSW(pinsh, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1_lit8, _, gen_pinsh);
TRANSW(pavgusb, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pavgusb);
TRANSW(pavgush, 1, 0, 0, 1, 0, 0, D,D,D,0, alf1, _, gen_helper_pavgush);
TRANSW(mulw, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _, tcg_gen_mul_i32);
TRANSW(muld, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _, tcg_gen_mul_i64);
TRANSW(umulx, 1, 1, 0, 1, 1, 0, D,S,S,0, alf1, _, gen_umulx);
TRANSW(smulx, 1, 1, 0, 1, 1, 0, D,S,S,0, alf1, _, gen_smulx);
TRANSW(insfw, 1, 1, 0, 1, 1, 0, S,S,S,S, alf21, _, gen_insfs);
TRANSD(insfd, 1, 1, 0, 1, 1, 0, D,D,D,D, alf21, gen_insfd);
TRANSW(fxcmpudsf, 1, 1, 0, 1, 1, 0, S,X,S,0, alf1, _env_, gen_helper_fxcmpudsf);
TRANSW(fxcmpodsf, 1, 1, 0, 1, 1, 0, S,X,S,0, alf1, _env_, gen_helper_fxcmpodsf);
TRANSW(fxcmpuddf, 1, 1, 0, 1, 1, 0, S,X,D,0, alf1, _env_, gen_helper_fxcmpuddf);
TRANSW(fxcmpoddf, 1, 1, 0, 1, 1, 0, S,X,D,0, alf1, _env_, gen_helper_fxcmpoddf);
TRANSW(fxcmpudxf, 1, 1, 0, 1, 1, 0, S,X,X,0, alf1, _env_, gen_helper_fxcmpudxf);
TRANSW(fxcmpodxf, 1, 1, 0, 1, 1, 0, S,X,X,0, alf1, _env_, gen_helper_fxcmpodxf);
TRANSW(fcmpeqs, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpeqs);
TRANSW(fcmplts, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmplts);
TRANSW(fcmples, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmples);
TRANSW(fcmpuods, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpuods);
TRANSW(fcmpneqs, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpneqs);
TRANSW(fcmpnlts, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpnlts);
TRANSW(fcmpnles, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpnles);
TRANSW(fcmpods, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpods);
TRANSW(fcmpeqd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpeqd);
TRANSW(fcmpltd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpltd);
TRANSW(fcmpled, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpled);
TRANSW(fcmpuodd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpuodd);
TRANSW(fcmpneqd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpneqd);
TRANSW(fcmpnltd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpnltd);
TRANSW(fcmpnled, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpnled);
TRANSW(fcmpodd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpodd);
TRANSW(fcmpudsf, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpudsf);
TRANSW(fcmpodsf, 1, 1, 0, 1, 1, 0, S,S,S,0, alf1, _env_, gen_helper_fcmpodsf);
TRANSW(fcmpuddf, 1, 1, 0, 1, 1, 0, S,D,D,0, alf1, _env_, gen_helper_fcmpuddf);
TRANSW(fcmpoddf, 1, 1, 0, 1, 1, 0, S,D,D,0, alf1, _env_, gen_helper_fcmpoddf);
TRANSW(pfadds, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_pfadds);
TRANSW(pfaddd, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_faddd);
TRANSW(pfsubs, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_pfsubs);
TRANSW(pfsubd, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_fsubd);
TRANSW(pfmins, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfmins);
TRANSW(pfmind, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fmind);
TRANSW(pfmaxs, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfmaxs);
TRANSW(pfmaxd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fmaxd);
TRANSW(pfmuls, 1, 1, 4, 1, 1, 4, D,D,D,0, alf1, _env_, gen_helper_pfmuls);
TRANSW(pfmuld, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fmuld);
TRANSW(pfcmpeqs, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmpeqs);
TRANSW(pfcmplts, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmplts);
TRANSW(pfcmples, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmples);
TRANSW(pfcmpuods, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmpuods);
TRANSW(pfcmpneqs, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmpneqs);
TRANSW(pfcmpnlts, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmpnlts);
TRANSW(pfcmpnles, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmpnles);
TRANSW(pfcmpods, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_pfcmpods);
TRANSW(pfcmpeqd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpeqd);
TRANSW(pfcmpltd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpltd);
TRANSW(pfcmpled, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpled);
TRANSW(pfcmpuodd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpuodd);
TRANSW(pfcmpneqd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpneqd);
TRANSW(pfcmpnltd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpnltd);
TRANSW(pfcmpnled, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpnled);
TRANSW(pfcmpodd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _env_, gen_helper_fcmpodd);
TRANSW(pandd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _, tcg_gen_and_i64);
TRANSW(pandnd, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _, gen_andn_i64);
TRANSW(pord, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _, tcg_gen_or_i64);
TRANSW(pxord, 1, 1, 0, 1, 1, 0, D,D,D,0, alf1, _, tcg_gen_xor_i64);
TRANSW(psrld, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_psrld);
TRANSW(pslld, 0, 1, 0, 0, 1, 0, D,D,D,0, alf1, _, gen_pslld);
TRANSW(fdivs, 0, 0, 0, 0, 0, 1, S,S,S,0, alf1, _env_, gen_helper_fdivs);
TRANSW(fdivd, 0, 0, 0, 0, 0, 1, D,D,D,0, alf1, _env_, gen_helper_fdivd);
TRANSW(pfdivs, 0, 0, 0, 0, 0, 1, S,S,S,0, alf1, _env_, gen_helper_fdivs);
TRANSW(pfdivd, 0, 0, 0, 0, 0, 1, D,D,D,0, alf1, _env_, gen_helper_fdivd);
TRANSW(fsqrts, 0, 0, 0, 0, 0, 1, S,0,S,0, alf2, _env_, gen_helper_fsqrts);
TRANSW(fsqrtid, 0, 0, 0, 0, 0, 1, D,0,D,0, alf2, _, tcg_gen_mov_i64);
TRANSW(pfsqrts, 0, 0, 0, 0, 0, 1, S,0,S,0, alf2, _env_, gen_helper_fsqrts);
TRANSW(frcps, 0, 0, 0, 0, 0, 1, S,0,S,0, alf2, _env_, gen_helper_frcps);
TRANSW(fsqrttd, 0, 0, 0, 0, 0, 1, D,D,D,0, alf1, _env_, gen_helper_fsqrttd);
TRANSW(pfsqrttd, 0, 0, 0, 0, 0, 1, D,D,D,0, alf1, _env_, gen_helper_fsqrttd);
TRANSW(frsqrts, 0, 0, 0, 0, 0, 1, S,0,S,0, alf2, _env_, gen_helper_frsqrts);
TRANSD(rww, 1, 0, 0, 0, 0, 0, 0,0,S,0, alf15, gen_rws);
TRANSD(rwd, 1, 0, 0, 0, 0, 0, 0,0,D,0, alf15, gen_rwd);
TRANSD(rrw, 1, 0, 0, 0, 0, 0, S,0,0,0, alf16, gen_rrs);
TRANSD(rrd, 1, 0, 0, 0, 0, 0, D,0,0,0, alf16, gen_rrd);
TRANSW(getsp, 1, 0, 0, 0, 0, 0, D,0,S,0, alf2, _env_, gen_helper_getsp);
//aptoap, 1, 1, 0, 1, 1, 0, Q,Q,S,0, alf11, AF_PAIR
//getva, 1, 0, 0, 1, 0, 0, D,Q,S,0, alf11
//tdtomp, 1, 1, 0, 1, 1, 0, D,D,D,0, alf11, AF_REMOVED_IN_V3
//odtoap, 1, 1, 0, 1, 1, 0, Q,Q,D,0, alf11, AF_REMOVED_IN_V3
//cast, 1, 1, 0, 1, 1, 0, Q,Q,Q,0, alf11, AF_REMOVED_IN_V3
//gettd, 1, 0, 0, 1, 0, 0, D,0,D,0, alf12, AF_REMOVED_IN_V3
//getsod, 1, 1, 0, 1, 1, 0, Q,0,Q,0, alf12, AF_REMOVED_IN_V3
//andw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//andnw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//orw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//ornw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//xorw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//xornw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//addw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//subw_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//sclw_fb, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//scrw_fb, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//shlw_fb, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//shrw_fb, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//sarw_fb, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//umulx_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//smulx_fb, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//incw_fb, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//decw_fb, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//andw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//andnw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//orw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//ornw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//xorw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//xornw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//addw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//subw_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//sclw_fh, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//scrw_fh, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//shlw_fh, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//shrw_fh, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//sarw_fh, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//umulx_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//smulx_fh, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//incw_fh, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//decw_fh, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//andw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//andnw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//orw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//ornw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//xorw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//xornw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//addw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//subw_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//sclw_fw, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//scrw_fw, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//shlw_fw, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//shrw_fw, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//sarw_fw, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//umulx_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//smulx_fw, 1, 0, 0, 1, 0, 0, S,S,S,0, alf11
//incw_fw, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
//decw_fw, 1, 0, 0, 1, 0, 0, S,S,S,S, alf21
#define TRANS_ICOMB(NAME, C0, C1, C2, C3, C4, C5, OP2) \
TRANSC(glue3(and_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_AND, OP2); \
TRANSC(glue3(and_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_AND, OP2); \
TRANSC(glue3(andn_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_ANDN, OP2); \
TRANSC(glue3(andn_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_ANDN, OP2); \
TRANSC(glue3(or_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_OR, OP2); \
TRANSC(glue3(or_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_OR, OP2); \
TRANSC(glue3(orn_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_ORN, OP2); \
TRANSC(glue3(orn_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_ORN, OP2); \
TRANSC(glue3(xor_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_XOR, OP2); \
TRANSC(glue3(xor_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_XOR, OP2); \
TRANSC(glue3(xorn_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_XORN, OP2); \
TRANSC(glue3(xorn_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_XORN, OP2); \
TRANSC(glue3(merge_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_MERGE, OP2); \
TRANSC(glue3(merge_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_MERGE, OP2); \
TRANSC(glue3(add_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_ADD, OP2); \
TRANSC(glue3(add_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_ADD, OP2); \
TRANSC(glue3(sub_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_SUB, OP2); \
TRANSC(glue3(sub_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_SUB, OP2); \
TRANSC(glue3(scl_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_SCL, OP2); \
TRANSC(glue3(scl_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_SCL, OP2); \
TRANSC(glue3(scr_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_SCR, OP2); \
TRANSC(glue3(scr_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_SCR, OP2); \
TRANSC(glue3(shl_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_SHL, OP2); \
TRANSC(glue3(shl_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_SHL, OP2); \
TRANSC(glue3(shr_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_SHR, OP2); \
TRANSC(glue3(shr_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_SHR, OP2); \
TRANSC(glue3(sar_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_SAR, OP2); \
TRANSC(glue3(sar_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_SAR, OP2); \
TRANSC(glue3(getf_, NAME, w), C0, C1, C2, C3, C4, C5, S,S,S,S, alf21, gen_icomb_i32, ICOMB_GETF, OP2); \
TRANSC(glue3(getf_, NAME, d), C0, C1, C2, C3, C4, C5, D,D,D,D, alf21, gen_icomb_i64, ICOMB_GETF, OP2)
TRANS_ICOMB(and, 0, 1, 0, 0, 1, 0, ICOMB_AND);
TRANS_ICOMB(andn, 0, 1, 0, 0, 1, 0, ICOMB_ANDN);
TRANS_ICOMB(or, 0, 1, 0, 0, 1, 0, ICOMB_OR);
TRANS_ICOMB(orn, 0, 1, 0, 0, 1, 0, ICOMB_ORN);
TRANS_ICOMB(xor, 0, 1, 0, 0, 1, 0, ICOMB_XOR);
TRANS_ICOMB(xorn, 0, 1, 0, 0, 1, 0, ICOMB_XORN);
TRANS_ICOMB(rsub, 0, 1, 0, 0, 1, 0, ICOMB_RSUB);
TRANS_ICOMB(add, 0, 1, 0, 0, 1, 0, ICOMB_ADD);
TRANS_ICOMB(sub, 0, 1, 0, 0, 1, 0, ICOMB_SUB);
TRANS_ICOMB(merge, 0, V1_2, 0, 0, V1_2, 0, ICOMB_MERGE);
TRANS_ICOMB(scl, 0, V1_2, 0, 0, V1_2, 0, ICOMB_SCL);
TRANS_ICOMB(scr, 0, V1_2, 0, 0, V1_2, 0, ICOMB_SCR);
TRANS_ICOMB(shl, 0, V1_2, 0, 0, V1_2, 0, ICOMB_SHL);
TRANS_ICOMB(shr, 0, V1_2, 0, 0, V1_2, 0, ICOMB_SHR);
TRANS_ICOMB(sar, 0, V1_2, 0, 0, V1_2, 0, ICOMB_SAR);
TRANS_ICOMB(getf, 0, V1_2, 0, 0, V1_2, 0, ICOMB_GETF);
TRANSC(fmul_adds, 1, 1, 4, 1, 1, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_MUL, FCOMB_ADD);
TRANSC(fmul_addd, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_MUL, FCOMB_ADD);
TRANSC(fmul_subs, 1, 1, 4, 1, 1, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_MUL, FCOMB_SUB);
TRANSC(fmul_subd, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_MUL, FCOMB_SUB);
TRANSC(fmul_rsubs, 1, 1, 4, 1, 1, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_MUL, FCOMB_RSUB);
TRANSC(fmul_rsubd, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_MUL, FCOMB_RSUB);
TRANSC(pfmul_adds, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_MUL, FCOMB_ADD);
TRANSC(pfmul_addd, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_MUL, FCOMB_ADD);
TRANSC(pfmul_subs, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_MUL, FCOMB_SUB);
TRANSC(pfmul_subd, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_MUL, FCOMB_SUB);
TRANSC(pfmul_rsubs, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_MUL, FCOMB_RSUB);
TRANSC(pfmul_rsubd, 1, 1, 4, 1, 1, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_MUL, FCOMB_RSUB);
TRANSC(fadd_muls, V1_2, V1_2, 0, V1_2, V1_2, 0, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_ADD, FCOMB_MUL);
TRANSC(fadd_muld, V1_2, V1_2, 0, V1_2, V1_2, 0, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_ADD, FCOMB_MUL);
TRANSC(fsub_muls, V1_2, V1_2, 0, V1_2, V1_2, 0, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_SUB, FCOMB_MUL);
TRANSC(fsub_muld, V1_2, V1_2, 0, V1_2, V1_2, 0, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_SUB, FCOMB_MUL);
TRANSC(pfadd_muls, V1_2, V1_2, 0, V1_2, V1_2, 0, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADD, FCOMB_MUL);
TRANSC(pfadd_muld, V1_2, V1_2, 0, V1_2, V1_2, 0, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_ADD, FCOMB_MUL);
TRANSC(pfsub_muls, V1_2, V1_2, 0, V1_2, V1_2, 0, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_SUB, FCOMB_MUL);
TRANSC(pfsub_muld, V1_2, V1_2, 0, V1_2, V1_2, 0, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_SUB, FCOMB_MUL);

View File

@ -0,0 +1,42 @@
TRANSW(bitrevw, 2, 2, 0, 2, 2, 0, S,0,S,0, alf2, _, gen_bitrevs);
TRANSW(bitrevd, 2, 2, 0, 2, 2, 0, D,0,D,0, alf2, _, gen_bitrevd);
TRANSW(lzcnts, 0, 2, 0, 0, 2, 0, S,0,S,0, alf2, _, gen_lzcnts);
TRANSW(lzcntd, 0, 2, 0, 0, 2, 0, D,0,D,0, alf2, _, gen_lzcntd);
TRANSW(popcnts, 0, 2, 0, 0, 2, 0, S,0,S,0, alf2, _, tcg_gen_ctpop_i32);
TRANSW(popcntd, 0, 2, 0, 0, 2, 0, D,0,D,0, alf2, _, tcg_gen_ctpop_i64);
TRANSW(fdtoidtr, 2, 2, 0, 2, 2, 0, D,0,D,0, alf2, _env_, gen_helper_fdtoidtr);
TRANSW(fxtoidtr, 2, 2, 0, 2, 2, 0, D,0,X,0, alf2, _env_, gen_helper_fxtoidtr);
TRANSW(fstoidtr, 2, 2, 0, 2, 2, 0, D,0,S,0, alf2, _env_, gen_helper_fstoidtr);
TRANSW(fxtoiwtr, 2, 2, 0, 2, 2, 0, S,0,X,0, alf2, _env_, gen_helper_fxtoistr);
TRANSW(movx, 2, 2, 0, 2, 2, 0, X,0,X,0, alf2, _, gen_movx);
TRANSW(movxa, 2, 2, 0, 2, 2, 0, X,0,X,0, alf2, _, gen_movxa);
TRANSW(movxc, 2, 2, 0, 2, 2, 0, X,0,X,0, alf2, _, gen_movxc);
TRANSW(pmulubhh, 0, 2, 0, 0, 2, 0, D,D,D,0, alf1, _, gen_helper_pmulubhh);
TRANSW(pshufb, 2, 2, 0, 2, 2, 0, D,D,D,D, alf21, _, gen_helper_pshufb);
TRANSW(pmerge, 2, 2, 0, 2, 2, 0, D,D,D,D, alf21, _, gen_helper_pmerge);
TRANSC(fadd_adds, 2, 2, 4, 2, 2, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_ADD, FCOMB_ADD);
TRANSC(fadd_addd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_ADD, FCOMB_ADD);
TRANSC(fsub_adds, 2, 2, 4, 2, 2, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_SUB, FCOMB_ADD);
TRANSC(fsub_addd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_SUB, FCOMB_ADD);
TRANSC(fadd_subs, 2, 2, 4, 2, 2, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_ADD, FCOMB_SUB);
TRANSC(fadd_subd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_ADD, FCOMB_SUB);
TRANSC(fsub_subs, 2, 2, 4, 2, 2, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_SUB, FCOMB_SUB);
TRANSC(fsub_subd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_SUB, FCOMB_SUB);
TRANSC(fadd_rsubs, 2, 2, 4, 2, 2, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_ADD, FCOMB_RSUB);
TRANSC(fadd_rsubd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_ADD, FCOMB_RSUB);
TRANSC(fsub_rsubs, 2, 2, 4, 2, 2, 4, S,S,S,S, alf21, gen_fcomb_i32, FCOMB_SUB, FCOMB_RSUB);
TRANSC(fsub_rsubd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_fcomb_i64, FCOMB_SUB, FCOMB_RSUB);
TRANSC(pfadd_adds, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADD, FCOMB_ADD);
TRANSC(pfadd_addd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_ADD, FCOMB_ADD);
TRANSC(pfsub_adds, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_SUB, FCOMB_ADD);
TRANSC(pfsub_addd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_SUB, FCOMB_ADD);
TRANSC(pfadd_subs, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADD, FCOMB_SUB);
TRANSC(pfadd_subd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_ADD, FCOMB_SUB);
TRANSC(pfsub_subs, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_SUB, FCOMB_SUB);
TRANSC(pfsub_subd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_SUB, FCOMB_SUB);
TRANSC(pfadd_rsubs, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADD, FCOMB_RSUB);
TRANSC(pfadd_rsubd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_ADD, FCOMB_RSUB);
TRANSC(pfsub_rsubs, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_SUB, FCOMB_RSUB);
TRANSC(pfsub_rsubd, 2, 2, 4, 2, 2, 4, D,D,D,D, alf21, gen_pfcomb_i64, FCOMB_SUB, FCOMB_RSUB);

View File

@ -0,0 +1,79 @@
TRANSW(umulhd, 3, 3, 0, 3, 3, 0, D,D,D,0, alf1, _, gen_umulhd);
TRANSW(smulhd, 3, 3, 0, 3, 3, 0, D,D,D,0, alf1, _, gen_smulhd);
TRANSW(pminsb, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pminsb);
TRANSW(pminuh, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pminuh);
TRANSW(pmaxsb, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pmaxsb);
TRANSW(pmaxuh, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pmaxuh);
TRANSW(pcmpeqd, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpeqd);
TRANSW(pcmpgtd, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pcmpgtd);
TRANSW(mpsadbh, 0, 3, 0, 0, 3, 0, D,D,D,0, alf1, _, gen_helper_mpsadbh);
TRANSW(pmaddubsh, 0, 3, 0, 0, 3, 0, D,D,D,0, alf1, _, gen_helper_pmaddubsh);
TRANSW(pmulhrsh, 0, 3, 0, 0, 3, 0, D,D,D,0, alf1, _, gen_helper_pmulhrsh);
TRANSW(phminposuh, 0, 3, 0, 0, 3, 0, D,D,D,0, alf1, _, gen_helper_phminposuh);
TRANSW(packuswh, 0, 3, 0, 0, 3, 0, D,D,D,0, alf1, _, gen_helper_packuswh);
TRANSW(fstoifs, 3, 3, 0, 3, 3, 0, S,S,S,0, alf1, _env_, gen_helper_fstoifs);
TRANSW(fdtoifd, 3, 3, 0, 3, 3, 0, D,D,D,0, alf1, _env_, gen_helper_fdtoifd);
TRANSW(pfstoifs, 3, 3, 0, 3, 3, 0, D,D,D,0, alf1, _env_, gen_helper_pfstoifs);
TRANSW(pfdtoifd, 3, 3, 0, 3, 3, 0, D,D,D,0, alf1, _env_, gen_helper_fdtoifd);
TRANSW(pfhadds, 3, 3, 4, 3, 3, 4, D,D,D,0, alf1, _env_, gen_helper_pfhadds);
TRANSW(pfhsubs, 3, 3, 4, 3, 3, 4, D,D,D,0, alf1, _env_, gen_helper_pfhsubs);
TRANSW(pfaddsubs, 3, 3, 4, 3, 3, 4, D,D,D,0, alf1, _env_, gen_helper_pfaddsubs);
TRANSW(pminuw, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pminuw);
TRANSW(pminsw, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pminsw);
TRANSW(pmaxuw, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pmaxuw);
TRANSW(pmaxsw, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_pmaxsw);
TRANSW(phaddh, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_phaddh);
TRANSW(phaddw, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_phaddw);
TRANSW(phaddsh, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_phaddsh);
TRANSW(phsubh, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_phsubh);
TRANSW(phsubw, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_phsubw);
TRANSW(phsubsh, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_phsubsh);
TRANSW(psignb, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_psignb);
TRANSW(psignh, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_psignh);
TRANSW(psignw, 3, 0, 0, 3, 0, 0, D,D,D,0, alf1, _, gen_helper_psignw);
//puttst, 0, 0, 0, 3, 0, 0, D,0,D,0, alf12
//andd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//andnd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//ord_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//ornd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//xord_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//xornd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//addd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//subd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf11
//scld_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf21
//scrd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf21
//shld_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf21
//shrd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf21
//sard_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf21
//incd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf21
//decd_fd, 3, 0, 0, 3, 0, 0, S,D,D,0, alf21
TRANSC(pfhadd_adds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HADD, FCOMB_ADD);
TRANSC(pfhsub_adds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HSUB, FCOMB_ADD);
TRANSC(pfaddsub_adds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADDSUB, FCOMB_ADD);
TRANSC(pfhadd_subs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HADD, FCOMB_SUB);
TRANSC(pfhsub_subs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HSUB, FCOMB_SUB);
TRANSC(pfaddsub_subs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADDSUB, FCOMB_SUB);
TRANSC(pfadd_hadds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADD, FCOMB_HADD);
TRANSC(pfsub_hadds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_SUB, FCOMB_HADD);
TRANSC(pfhadd_hadds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HADD, FCOMB_HADD);
TRANSC(pfhsub_hadds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HSUB, FCOMB_HADD);
TRANSC(pfmul_hadds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_MUL, FCOMB_HADD);
TRANSC(pfaddsub_hadds, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADDSUB, FCOMB_HADD);
TRANSC(pfadd_hsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADD, FCOMB_HSUB);
TRANSC(pfsub_hsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_SUB, FCOMB_HSUB);
TRANSC(pfhadd_hsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HADD, FCOMB_HSUB);
TRANSC(pfhsub_hsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HSUB, FCOMB_HSUB);
TRANSC(pfmul_hsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_MUL, FCOMB_HSUB);
TRANSC(pfaddsub_hsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADDSUB, FCOMB_HSUB);
TRANSC(pfhadd_rsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HADD, FCOMB_RSUB);
TRANSC(pfhsub_rsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HSUB, FCOMB_RSUB);
TRANSC(pfaddsub_rsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADDSUB, FCOMB_RSUB);
TRANSC(pfadd_addsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADD, FCOMB_ADDSUB);
TRANSC(pfsub_addsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_SUB, FCOMB_ADDSUB);
TRANSC(pfhadd_addsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HADD, FCOMB_ADDSUB);
TRANSC(pfhsub_addsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_HSUB, FCOMB_ADDSUB);
TRANSC(pfmul_addsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_MUL, FCOMB_ADDSUB);
TRANSC(pfaddsub_addsubs, 3, 3, 4, 3, 3, 4, D,D,D,D, alf21, gen_pfcomb_i32, FCOMB_ADDSUB, FCOMB_ADDSUB);

View File

@ -0,0 +1,3 @@
TRANSW(fscales, 0, 4, 0, 0, 4, 0, S,S,S,0, alf1, _env_, gen_helper_fscales);
TRANSW(fscaled, 0, 4, 0, 0, 4, 0, D,D,S,0, alf1, _env_, gen_helper_fscaled);
TRANSW(fxscalesx, 0, 4, 0, 0, 4, 0, X,X,S,0, alf1, _env_, gen_helper_fxscalesx);

View File

@ -0,0 +1,239 @@
//ldq, 5, 0, 5, 5, 0, 5, Q,D,D,0, alf1_mas, AF_PAIR
TRANSM(ldqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_FLAT);
TRANSM(ldcsqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_CS);
TRANSM(lddsqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_DS);
TRANSM(ldesqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_ES);
TRANSM(ldfsqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_FS);
TRANSM(ldgsqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_GS);
TRANSM(ldssqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_SS);
TRANSM(ldgdqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas, gen_addr_i64, gen_ld_raw_i128, MO_UO, ADDR_GD);
//ldcudqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas
//ldapqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas
TRANSM(stqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_FLAT);
TRANSA(staaqp, 0, 0, 5, 0, 0, 5, P,0,0,0, alf10_mas, OP_STAAQP, gen_staaqp);
TRANSM(stcsqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_CS);
TRANSM(stdsqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_DS);
TRANSM(stesqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_ES);
TRANSM(stfsqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_FS);
TRANSM(stgsqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_GS);
TRANSM(stssqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_SS);
TRANSM(stgdqp, 0, 0, 5, 0, 0, 5, P,S,S,0, alf3_mas, gen_addr_i64, gen_st_raw_i128, MO_UO, ADDR_GD);
//stapqp, 0, 0, 5, 0, 0, 5, P,Q,S,0, alf3_mas
TRANSM(stmqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_FLAT);
TRANSM(stcsmqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_CS);
TRANSM(stdsmqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_DS);
TRANSM(stesmqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_ES);
TRANSM(stfsmqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_FS);
TRANSM(stgsmqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_GS);
TRANSM(stssmqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_SS);
TRANSM(stgdmqp, 0, 0, 5, 0, 0, 5, P,S,S,0, alf3_mas, gen_addr_src1_i64, gen_stm_raw_i128, MO_UO, ADDR_GD);
//stapmqp, 0, 0, 5, 0, 0, 5, P,Q,S,0, alf13_mas
//ldrqp, 5, 0, 5, 5, 0, 5, P,D,D,0, alf1_mas
//strqp, 0, 0, 5, 0, 0, 5, P,D,D,0, alf3_mas
TRANSA(puttagqp, 5, 5, 0, 5, 5, 0, P,P,S,0, alf1, OP_PUTTAGQP, gen_puttagqp);
TRANSW(pmullw, 0, 5, 0, 0, 5, 0, D,D,D,0, alf1, _, gen_pmullw);
TRANSW(psrcw, 5, 5, 0, 5, 5, 0, D,D,D,0, alf1, _, gen_psrcd);
TRANSW(psrcd, 5, 5, 0, 5, 5, 0, D,D,D,0, alf1, _, gen_psrcw);
TRANSW(addcd, 0, 5, 0, 0, 5, 0, D,D,D,S, alf21, _, gen_addcd);
TRANSW(addcd_c, 0, 5, 0, 0, 5, 0, D,D,D,S, alf21, _, gen_addcd_c);
TRANSW(subcd, 0, 5, 0, 0, 5, 0, D,D,D,S, alf21, _, gen_subcd);
TRANSW(subcd_c, 0, 5, 0, 0, 5, 0, D,D,D,S, alf21, _, gen_subcd_c);
TRANSW(getfzs, 5, 5, 5, 5, 5, 5, S,S,S,0, alf1, _, gen_getfzs);
TRANSW(getfzd, 5, 5, 5, 5, 5, 5, D,D,D,0, alf1, _, gen_getfzd);
TRANSW(qpsrlw, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsrlw);
TRANSW(qpsrlh, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsrlh);
TRANSW(qpsraw, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsraw);
TRANSW(qpsrah, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsrah);
TRANSW(qpsllw, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsllw);
TRANSW(qpsllh, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsllh);
TRANSW(qpsrld, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsrld);
TRANSW(qpslld, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpslld);
TRANSW(qpand, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _, gen_qpand);
TRANSW(qpandn, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _, gen_qpandn);
TRANSW(qpor, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _, gen_qpor);
TRANSW(qpxor, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _, gen_qpxor);
TRANSW(qpminuw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpminuw);
TRANSW(qpminsw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpminsw);
TRANSW(qpmaxuw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpmaxuw);
TRANSW(qpmaxsw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpmaxsw);
TRANSW(qpcmpeqd, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpeqd);
TRANSW(qphaddh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_helper_qphaddh);
TRANSW(qphaddw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_helper_qphaddw);
TRANSW(qphaddsh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_helper_qphaddsh);
TRANSW(qpcmpgtd, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpgtd);
TRANSW(qphsubh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_helper_qphsubh);
TRANSW(qphsubw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_helper_qphsubw);
TRANSW(qphsubsh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_helper_qphsubsh);
TRANSW(qpsrcw, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsrcw);
TRANSW(qpsrcd, 5, 5, 0, 5, 5, 0, P,P,D,0, alf1, _, gen_qpsrcd);
TRANSW(qpmsk2sgnb, 5, 5, 0, 5, 5, 0, P,P,S,0, alf1, _, gen_helper_qpmsk2sgnb);
TRANSW(qpsignb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsignb);
TRANSW(qpsignh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsignh);
TRANSW(qpsignw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsignw);
TRANSW(qpsgn2mskb, 5, 5, 0, 5, 5, 0, S,0,P,0, alf2, _, gen_helper_qpsgn2mskb);
TRANSW(qppackdl, 5, 5, 0, 5, 5, 0, P,D,D,0, alf1, _, gen_qppackdl);
TRANSW(qpswitchw, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _, gen_qpswitchw);
TRANSW(qpswitchd, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _, gen_qpswitchd);
TRANSW(qpminub, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpminub);
TRANSW(qpminsh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpminsh);
TRANSW(qpmaxub, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpmaxub);
TRANSW(qpmaxsh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpmaxsh);
TRANSW(qpminsb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpminsb);
TRANSW(qpminuh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpminuh);
TRANSW(qpmaxsb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpmaxsb);
TRANSW(qpmaxuh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpmaxuh);
TRANSW(qpacksshb, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpacksshb);
TRANSW(qpaddb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddb);
TRANSW(qpackushb, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpackushb);
TRANSW(qpaddh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddh);
TRANSW(qpacksswh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpacksswh);
TRANSW(qpaddsb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddsb);
TRANSW(qpackuswh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpackuswh);
TRANSW(qpaddsh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddsh);
TRANSW(qpaddusb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddusb);
TRANSW(qpaddush, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddush);
TRANSW(qpaddw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddw);
TRANSW(qpaddd, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpaddd);
TRANSW(qpsubb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubb);
TRANSW(qpsubh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubh);
TRANSW(qpsubsb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubsb);
TRANSW(qpsubsh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubsh);
TRANSW(qpsubusb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubusb);
TRANSW(qpsubush, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubush);
TRANSW(qpsubw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubw);
TRANSW(qpsubd, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpsubd);
TRANSW(qpcmpeqb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpeqb);
TRANSW(qpmulhh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpmulhh);
TRANSW(qpcmpeqh, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpeqh);
TRANSW(qpmullh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpmullh);
TRANSW(qpcmpeqw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpeqw);
TRANSW(qpmaddh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpmaddh);
TRANSW(qpcmpgtb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpgtb);
TRANSW(qpmulhuh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpmulhuh);
TRANSW(qpcmpgth, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpgth);
TRANSW(qpsadbw, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpsadbw);
TRANSW(qpcmpgtw, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpcmpgtw);
TRANSW(qpmulubhh, 0, 5, 0, 0, 5, 0, P,D,P,0, alf1, _, gen_helper_qpmulubhh);
TRANSW(qpavgusb, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpavgusb);
TRANSW(qpmullw, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpmullw);
TRANSW(qpavgush, 5, 0, 0, 5, 0, 0, P,P,P,0, alf1, _, gen_qpavgush);
TRANSW(qpmaddubsh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpmaddubsh);
TRANSW(qpmulhrsh, 0, 5, 0, 0, 5, 0, P,P,P,0, alf1, _, gen_qpmulhrsh);
TRANSW(qphminposuh, 0, 5, 0, 0, 5, 0, D,P,P,0, alf1, _, gen_helper_qphminposuh);
TRANSW(qpmpsadbh, 0, 5, 0, 0, 5, 0, P,P,S,0, alf1, _, gen_helper_qpmpsadbh);
TRANSW(qpfstois, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _env_, gen_qpfstois);
TRANSW(qpfstoistr, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _env_, gen_qpfstoistr);
TRANSW(qpistofs, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _env_, gen_qpistofs);
TRANSW(qpfstoid, 5, 5, 0, 5, 5, 0, P,0,D,0, alf2, _env_, gen_helper_qpfstoid);
TRANSW(qpfstoidtr, 5, 5, 0, 5, 5, 0, P,0,D,0, alf2, _env_, gen_helper_qpfstoidtr);
TRANSW(qpistofd, 5, 5, 0, 5, 5, 0, P,0,D,0, alf2, _env_, gen_helper_qpistofd);
TRANSW(qpfstofd, 5, 5, 0, 5, 5, 0, P,0,D,0, alf2, _env_, gen_helper_qpfstofd);
TRANSW(qpfdtois, 5, 5, 0, 5, 5, 0, D,0,P,0, alf2, _env_, gen_helper_qpfdtois);
TRANSW(qpfdtoistr, 5, 5, 0, 5, 5, 0, D,0,P,0, alf2, _env_, gen_helper_qpfdtoistr);
TRANSW(qpidtofs, 5, 5, 0, 5, 5, 0, D,0,P,0, alf2, _env_, gen_helper_qpidtofs);
TRANSW(qpfdtofs, 5, 5, 0, 5, 5, 0, D,0,P,0, alf2, _env_, gen_helper_qpfdtofs);
TRANSW(qpfdtoid, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _env_, gen_qpfdtoid);
TRANSW(qpfdtoidtr, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _env_, gen_qpfdtoidtr);
TRANSW(qpidtofd, 5, 5, 0, 5, 5, 0, P,0,P,0, alf2, _env_, gen_qpidtofd);
TRANSW(qpfstoifs, 5, 5, 0, 5, 5, 0, P,D,P,0, alf1, _env_, gen_qpfstoifs);
TRANSW(qpfdtoifd, 5, 5, 0, 5, 5, 0, P,D,P,0, alf1, _env_, gen_qpfdtoifd);
TRANSW(qpfadds, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfadds);
TRANSW(qpfaddd, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfaddd);
TRANSW(qpfsubs, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfsubs);
TRANSW(qpfsubd, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfsubd);
TRANSW(qpfmins, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfmins);
TRANSW(qpfmind, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfmind);
TRANSW(qpfmaxs, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfmaxs);
TRANSW(qpfmaxd, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfmaxd);
TRANSW(qpfmuls, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfmuls);
TRANSW(qpfmuld, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfmuld);
TRANSW(qpfcmpeqs, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpeqs);
TRANSW(qpfcmplts, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmplts);
TRANSW(qpfcmples, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmples);
TRANSW(qpfcmpuods, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpuods);
TRANSW(qpfcmpneqs, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpneqs);
TRANSW(qpfcmpnlts, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpnlts);
TRANSW(qpfcmpnles, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpnles);
TRANSW(qpfcmpods, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpods);
TRANSW(qpfcmpeqd, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpeqd);
TRANSW(qpfcmpltd, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpltd);
TRANSW(qpfcmpled, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpled);
TRANSW(qpfcmpuodd, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpuodd);
TRANSW(qpfcmpneqd, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpneqd);
TRANSW(qpfcmpnltd, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpnltd);
TRANSW(qpfcmpnled, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpnled);
TRANSW(qpfcmpodd, 5, 5, 0, 5, 5, 0, P,P,P,0, alf1, _env_, gen_qpfcmpodd);
TRANSW(qpfhadds, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_helper_qpfhadds);
TRANSW(qpfhsubs, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_helper_qpfhsubs);
TRANSW(qpfaddsubs, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfaddsubs);
TRANSW(qpfaddsubd, 5, 5, 5, 5, 5, 5, P,P,P,0, alf1, _env_, gen_qpfaddsubd);
//plog_and, 5, 5, 0, 5, 5, 0, D,D,D,D, alf21, AF_ALIAS
//plog_xor, 5, 5, 0, 5, 5, 0, D,D,D,D, alf21, AF_ALIAS
//plog_sel3, 5, 5, 0, 5, 5, 0, D,D,D,D, alf21, AF_ALIAS
//plog_mjr, 5, 5, 0, 5, 5, 0, D,D,D,D, alf21, AF_ALIAS
//plog_or, 5, 5, 0, 5, 5, 0, D,D,D,D, alf21, AF_ALIAS
TRANSW(plog, 5, 5, 0, 5, 5, 0, D,D,D,D, alf21_log, _, gen_plog);
//qplog_and, 5, 5, 7, 5, 5, 7, P,P,P,P, alf21_lt3, AF_ALIAS
//qplog_xor, 5, 5, 7, 5, 5, 7, P,P,P,P, alf21_lt3, AF_ALIAS
//qplog_sel3, 5, 5, 7, 5, 5, 7, P,P,P,P, alf21_lt3, AF_ALIAS
//qplog_mjr, 5, 5, 7, 5, 5, 7, P,P,P,P, alf21_lt3, AF_ALIAS
//qplog_or, 5, 5, 7, 5, 5, 7, P,P,P,P, alf21_lt3, AF_ALIAS
TRANSW(qplog, 5, 5, 7, 5, 5, 7, P,P,P,P, alf21_log, _, gen_qplog);
TRANSW(qppermb, 5, 5, 0, 5, 5, 0, P,P,P,P, alf21, _, gen_helper_qppermb);
TRANSW(qpshufb, 5, 5, 0, 5, 5, 0, P,P,P,P, alf21, _, gen_helper_qpshufb);
TRANSW(qpmerge, 5, 5, 0, 5, 5, 0, P,P,P,P, alf21, _, gen_qpmerge);
TRANSC(qpfadd_adds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADD, FCOMB_ADD);
TRANSC(qpfadd_addd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADD, FCOMB_ADD);
TRANSC(qpfsub_adds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_SUB, FCOMB_ADD);
TRANSC(qpfsub_addd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_SUB, FCOMB_ADD);
TRANSC(qpfhadd_adds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HADD, FCOMB_ADD);
TRANSC(qpfhsub_adds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HSUB, FCOMB_ADD);
TRANSC(qpfmul_adds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_MUL, FCOMB_ADD);
TRANSC(qpfmul_addd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_MUL, FCOMB_ADD);
TRANSC(qpfaddsub_adds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADDSUB, FCOMB_ADD);
TRANSC(qpfaddsub_addd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADDSUB, FCOMB_ADD);
TRANSC(qpfadd_subs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADD, FCOMB_SUB);
TRANSC(qpfadd_subd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADD, FCOMB_SUB);
TRANSC(qpfsub_subs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_SUB, FCOMB_SUB);
TRANSC(qpfsub_subd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_SUB, FCOMB_SUB);
TRANSC(qpfhadd_subs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HADD, FCOMB_SUB);
TRANSC(qpfhsub_subs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HSUB, FCOMB_SUB);
TRANSC(qpfmul_subs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_MUL, FCOMB_SUB);
TRANSC(qpfmul_subd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_MUL, FCOMB_SUB);
TRANSC(qpfaddsub_subs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADDSUB, FCOMB_SUB);
TRANSC(qpfaddsub_subd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADDSUB, FCOMB_SUB);
TRANSC(qpfadd_hadds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADD, FCOMB_HADD);
TRANSC(qpfsub_hadds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_SUB, FCOMB_HADD);
TRANSC(qpfhadd_hadds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HADD, FCOMB_HADD);
TRANSC(qpfhsub_hadds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HSUB, FCOMB_HADD);
TRANSC(qpfmul_hadds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_MUL, FCOMB_HADD);
TRANSC(qpfaddsub_hadds, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADDSUB, FCOMB_HADD);
TRANSC(qpfadd_hsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADD, FCOMB_HSUB);
TRANSC(qpfsub_hsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_SUB, FCOMB_HSUB);
TRANSC(qpfhadd_hsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HADD, FCOMB_HSUB);
TRANSC(qpfhsub_hsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HSUB, FCOMB_HSUB);
TRANSC(qpfmul_hsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_MUL, FCOMB_HSUB);
TRANSC(qpfaddsub_hsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADDSUB, FCOMB_HSUB);
TRANSC(qpfadd_rsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADD, FCOMB_RSUB);
TRANSC(qpfadd_rsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADD, FCOMB_RSUB);
TRANSC(qpfsub_rsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_SUB, FCOMB_RSUB);
TRANSC(qpfsub_rsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_SUB, FCOMB_RSUB);
TRANSC(qpfhadd_rsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HADD, FCOMB_RSUB);
TRANSC(qpfhsub_rsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HSUB, FCOMB_RSUB);
TRANSC(qpfmul_rsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_MUL, FCOMB_RSUB);
TRANSC(qpfmul_rsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_MUL, FCOMB_RSUB);
TRANSC(qpfaddsub_rsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADDSUB, FCOMB_RSUB);
TRANSC(qpfaddsub_rsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADDSUB, FCOMB_RSUB);
TRANSC(qpfadd_addsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADD, FCOMB_ADDSUB);
TRANSC(qpfadd_addsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADD, FCOMB_ADDSUB);
TRANSC(qpfsub_addsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_SUB, FCOMB_ADDSUB);
TRANSC(qpfsub_addsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_SUB, FCOMB_ADDSUB);
TRANSC(qpfhadd_addsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HADD, FCOMB_ADDSUB);
TRANSC(qpfhsub_addsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_HSUB, FCOMB_ADDSUB);
TRANSC(qpfmul_addsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_MUL, FCOMB_ADDSUB);
TRANSC(qpfmul_addsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_MUL, FCOMB_ADDSUB);
TRANSC(qpfaddsub_addsubs, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i32, FCOMB_ADDSUB, FCOMB_ADDSUB);
TRANSC(qpfaddsub_addsubd, 5, 5, 5, 5, 5, 5, P,P,P,P, alf21, gen_qpfcomb_i64, FCOMB_ADDSUB, FCOMB_ADDSUB);

View File

@ -0,0 +1,66 @@
//vfbgv, 0, 6, 0, 0, 6, 0, S,S,S,0, alf1
//modbgv, 0, 6, 0, 0, 6, 0, S,0,S,0, alf2
//mkfsw, 0, 6, 0, 0, 6, 0, D,S,S,0, alf1
TRANSD(ibranchd, 6, 0, 0, 0, 0, 0, D,0,D,0, alf2, gen_ibranchd);
TRANSD(icalld, 6, 0, 0, 0, 0, 0, D,0,D,0, alf2_icalld, gen_icalld);
TRANSD(pmrgp, 6, 6, 0, 6, 6, 0, D,D,D,0, alf1, gen_merged);
TRANSD(qpmrgp, 6, 6, 0, 6, 6, 0, P,P,P,0, alf1, gen_qpmrgp);
TRANSW(qpsrad, 6, 6, 0, 6, 6, 0, P,P,D,0, alf1, _, gen_qpsrad);
TRANSW(pcmpeqbop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqbop);
TRANSW(pcmpeqhop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqhop);
TRANSW(pcmpeqwop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqwop);
TRANSW(pcmpeqdop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqdop);
TRANSW(pcmpgtbop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgtbop);
TRANSW(pcmpgthop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgthop);
TRANSW(pcmpgtwop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgtwop);
TRANSW(pcmpgtdop, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgtdop);
TRANSW(pcmpeqbap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqbap);
TRANSW(pcmpeqhap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqhap);
TRANSW(pcmpeqwap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqwap);
TRANSW(pcmpeqdap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpeqdap);
TRANSW(pcmpgtbap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgtbap);
TRANSW(pcmpgthap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgthap);
TRANSW(pcmpgtwap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgtwap);
TRANSW(pcmpgtdap, 6, 0, 0, 6, 0, 0, D,D,D,0, alf7, _, gen_pcmpgtdap);
TRANSW(qpcmpeqbop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqbop);
TRANSW(qpcmpeqhop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqhop);
TRANSW(qpcmpeqwop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqwop);
TRANSW(qpcmpeqdop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqdop);
TRANSW(qpcmpgtbop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgtbop);
TRANSW(qpcmpgthop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgthop);
TRANSW(qpcmpgtwop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgtwop);
TRANSW(qpcmpgtdop, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgtdop);
TRANSW(qpcmpeqbap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqbap);
TRANSW(qpcmpeqhap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqhap);
TRANSW(qpcmpeqwap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqwap);
TRANSW(qpcmpeqdap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpeqdap);
TRANSW(qpcmpgtbap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgtbap);
TRANSW(qpcmpgthap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgthap);
TRANSW(qpcmpgtwap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgtwap);
TRANSW(qpcmpgtdap, 6, 0, 0, 6, 0, 0, D,P,P,0, alf7, _, gen_qpcmpgtdap);
TRANSW(qpcext_0x00, 6, 6, 0, 6, 6, 0, P,0,D,0, alf2, _, gen_qpcext_0x00);
TRANSW(qpcext_0x7f, 6, 6, 0, 6, 6, 0, P,0,D,0, alf2, _, gen_qpcext_0x7f);
TRANSW(qpcext_0x80, 6, 6, 0, 6, 6, 0, P,0,D,0, alf2, _, gen_qpcext_0x80);
TRANSW(qpcext_0xff, 6, 6, 0, 6, 6, 0, P,0,D,0, alf2, _, gen_qpcext_0xff);
TRANSW(fmas, 6, 6, 6, 6, 6, 6, S,S,S,S, alf21, _env_, gen_helper_fmas);
TRANSW(fmad, 6, 6, 6, 6, 6, 6, D,D,D,D, alf21, _env_, gen_helper_fmad);
TRANSW(fmss, 6, 6, 6, 6, 6, 6, S,S,S,S, alf21, _env_, gen_helper_fmss);
TRANSW(fmsd, 6, 6, 6, 6, 6, 6, D,D,D,D, alf21, _env_, gen_helper_fmsd);
TRANSW(fnmas, 6, 6, 6, 6, 6, 6, S,S,S,S, alf21, _env_, gen_helper_fnmas);
TRANSW(fnmad, 6, 6, 6, 6, 6, 6, D,D,D,D, alf21, _env_, gen_helper_fnmad);
TRANSW(fnmss, 6, 6, 6, 6, 6, 6, S,S,S,S, alf21, _env_, gen_helper_fnmss);
TRANSW(fnmsd, 6, 6, 6, 6, 6, 6, D,D,D,D, alf21, _env_, gen_helper_fnmsd);
TRANSW(qpfmas, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmas);
TRANSW(qpfmad, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmad);
TRANSW(qpfmss, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmss);
TRANSW(qpfmsd, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmsd);
TRANSW(qpfnmas, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfnmas);
TRANSW(qpfnmad, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfnmad);
TRANSW(qpfnmss, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfnmss);
TRANSW(qpfnmsd, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfnmsd);
TRANSW(qpfmass, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmass);
TRANSW(qpfmasd, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmasd);
TRANSW(qpfmsas, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmsas);
TRANSW(qpfmsad, 6, 6, 6, 6, 6, 6, P,P,P,P, alf21, _env_, gen_helper_qpfmsad);
TRANSW(clmull, 6, 6, 0, 6, 6, 0, D,D,D,0, alf1, _, gen_helper_clmull);
TRANSW(clmulh, 6, 6, 0, 6, 6, 0, D,D,D,0, alf1, _, gen_helper_clmulh);

View File

@ -0,0 +1,40 @@
//qpmgme, 7, 0, 0, 0, 0, 0, P,P,P,P, alf21
//qpaesltr, 0, 7, 0, 0, 0, 0, P,P,P,P, alf21
//qpaesiltr, 0, 7, 0, 0, 0, 0, P,P,P,P, alf21
//qpkuzltr, 0, 7, 0, 0, 0, 0, P,0,P,0, alf12
//qpsbgltrlo, 0, 7, 0, 0, 0, 0, P,P,P,0, alf11
//qpsbgltrhi, 0, 7, 0, 0, 0, 0, P,P,P,0, alf11
//qpaesebgn, 0, 0, 7, 0, 0, 0, P,P,P,P, alf21
//qpaesdbgn, 0, 0, 7, 0, 0, 0, P,P,P,P, alf21
//qpcm2b, 7, 7, 0, 7, 7, 0, P,0,S,0, alf12
//qpcm2h, 7, 7, 0, 7, 7, 0, P,0,S,0, alf12
//qpcm2w, 7, 7, 0, 7, 7, 0, P,0,S,0, alf12
//qpcm2d, 7, 7, 0, 7, 7, 0, P,0,S,0, alf12
//qpkuzebgn, 0, 0, 7, 0, 0, 0, P,P,P,P, alf21
//qps2cmh, 7, 7, 0, 7, 7, 0, S,P,P,0, alf11
//qps2cmw, 7, 7, 0, 7, 7, 0, S,P,P,0, alf11
//qps2cmd, 7, 7, 0, 7, 7, 0, S,P,P,0, alf11
//qps2mb, 7, 7, 0, 7, 7, 0, S,P,P,0, alf11
//qps2mh, 7, 7, 0, 7, 7, 0, S,P,P,0, alf11
//qps2mw, 7, 7, 0, 7, 7, 0, S,P,P,0, alf11
//qps2md, 7, 7, 0, 7, 7, 0, S,P,P,0, alf11
TRANSW(qpackhbss, 7, 7, 0, 7, 7, 0, P,P,P,0, alf1, _, gen_qpackhbss);
TRANSW(qpackhbus, 7, 7, 0, 7, 7, 0, P,P,P,0, alf1, _, gen_qpackhbus);
TRANSW(qpackwhss, 7, 7, 0, 7, 7, 0, P,P,P,0, alf1, _, gen_qpackwhss);
TRANSW(qpackwhus, 7, 7, 0, 7, 7, 0, P,P,P,0, alf1, _, gen_qpackwhus);
//qpfstobf, 7, 7, 0, 7, 7, 0, P,P,P,0, alf11
//qpidotsbwss, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qpidotsbwus, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qpidotsbwuu, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qpidotshwss, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qpbfdots, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_0, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_1, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_2, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_3, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_4, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_5, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_6, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qptbl_7, 7, 7, 0, 7, 7, 0, P,P,P,P, alf21
//qpinss, 7, 7, 0, 7, 7, 0, P,P,S,P, alf21_lt3
//qpinsd, 7, 7, 0, 7, 7, 0, P,P,D,P, alf21_lt3

View File

@ -513,10 +513,12 @@ typedef struct DisasContext {
UnpackedBundle bundle;
Cs0 cs0;
Cs1 cs1;
int cur_alop;
Alop alops[6];
target_ulong pc;
int mmuidx;
bool loop_mode;
bool only_check;
TCGv_i32 lp[7];
@ -3760,38 +3762,30 @@ IMPL_GEN_ALOPF2_ENV_QQ(gen_qpfdtoid, gen_helper_fdtoid)
IMPL_GEN_ALOPF2_ENV_QQ(gen_qpfdtoidtr, gen_helper_fdtoidtr)
IMPL_GEN_ALOPF2_ENV_QQ(gen_qpidtofd, gen_helper_idtofd)
#define IMPL_GEN_PLOG(name, base) \
static void name(TCGv_i64 ret, uint32_t table, TCGv_i64 s1, \
TCGv_i64 s2, TCGv_i64 s3) \
{ \
TCGv_i32 t0 = tcg_constant_i32(base + table); \
gen_helper_plog(ret, t0, s1, s2, s3); \
}
static void gen_plog(TCGv_i64 ret, uint32_t table, TCGv_i64 s1,
TCGv_i64 s2, TCGv_i64 s3)
{
TCGv_i32 t0 = tcg_constant_i32(table);
gen_helper_plog(ret, t0, s1, s2, s3);
}
IMPL_GEN_PLOG(gen_plog_0x00, 0x00)
IMPL_GEN_PLOG(gen_plog_0x80, 0x80)
static void gen_qplog(TCGv_i128 ret, uint32_t opc, TCGv_i128 s1,
TCGv_i128 s2, TCGv_i128 s3)
{
TCGv_i64 t0 = tcg_temp_new_i64();
TCGv_i64 t1 = tcg_temp_new_i64();
TCGv_i64 t2 = tcg_temp_new_i64();
TCGv_i64 t3 = tcg_temp_new_i64();
TCGv_i64 t4 = tcg_temp_new_i64();
TCGv_i64 t5 = tcg_temp_new_i64();
#define IMPL_GEN_ALOPF21_LOG_QQQQ(name, op) \
static void name(TCGv_i128 ret, uint32_t opc, TCGv_i128 s1, \
TCGv_i128 s2, TCGv_i128 s3) \
{ \
TCGv_i64 t0 = tcg_temp_new_i64(); \
TCGv_i64 t1 = tcg_temp_new_i64(); \
TCGv_i64 t2 = tcg_temp_new_i64(); \
TCGv_i64 t3 = tcg_temp_new_i64(); \
TCGv_i64 t4 = tcg_temp_new_i64(); \
TCGv_i64 t5 = tcg_temp_new_i64(); \
\
gen_qpunpackdl(t0, t1, s1); \
gen_qpunpackdl(t2, t3, s2); \
gen_qpunpackdl(t4, t5, s3); \
op(t0, opc, t0, t2, t4); \
op(t1, opc, t1, t3, t5); \
gen_qppackdl(ret, t0, t1); \
}
IMPL_GEN_ALOPF21_LOG_QQQQ(gen_qplog_0x00, gen_plog_0x00)
IMPL_GEN_ALOPF21_LOG_QQQQ(gen_qplog_0x80, gen_plog_0x80)
gen_qpunpackdl(t0, t1, s1);
gen_qpunpackdl(t2, t3, s2);
gen_qpunpackdl(t4, t5, s3);
gen_plog(t0, opc, t0, t2, t4);
gen_plog(t1, opc, t1, t3, t5);
gen_qppackdl(ret, t0, t1);
}
#define IMPL_GEN_ALOPF7_QQB(name, op1, op2) \
static void name(TCGv_i64 ret, TCGv_i128 s1, TCGv_i128 s2) \
@ -4583,7 +4577,7 @@ static void gen_staad(Alop *alop)
}
}
static void gen_staaw(Alop *alop, MemOp memop)
static void gen_staaw_(Alop *alop, MemOp memop)
{
DisasContext *ctx = alop->ctx;
uint8_t mas = alop->mas;
@ -4635,6 +4629,21 @@ static void gen_staaw(Alop *alop, MemOp memop)
}
}
static void gen_staab(Alop *alop)
{
gen_staaw_(alop, MO_8);
}
static void gen_staah(Alop *alop)
{
gen_staaw_(alop, MO_16);
}
static void gen_staaw(Alop *alop)
{
gen_staaw_(alop, MO_32);
}
#define IMPL_ALOPF1_BASIC(name, R, S1, S2, T, code) \
static void glue3(name, _, glue3(R, S1, S2))(Alop *alop, T) \
{ \
@ -4750,7 +4759,7 @@ static void gen_staaw(Alop *alop, MemOp memop)
#define IMPL_ALOPF21_LOG(name, R, S1, S2, S3) \
IMPL_ALOPF21_BASIC(name, R, S1, S2, S3, \
void (*op)(temp(R), uint32_t, temp(S1), temp(S2), temp(S3)), \
{ (*op)(r.val, alop->als.opc1, s1.val, s2.val, s3.val); })
{ (*op)(r.val, ((alop->ales.opc2 & 1) << 7) | alop->als.opc1, s1.val, s2.val, s3.val); })
IMPL_ALOPF1(gen_alf1, s, s, s)
IMPL_ALOPF1(gen_alf1, d, s, s)
@ -4792,6 +4801,7 @@ IMPL_ALOPF1_ENV(gen_alf1_env, q, q, q)
IMPL_ALOPF1_LIT8(gen_alf1_lit8, d, d, d)
IMPL_ALOPF2(gen_alf2, s, s)
IMPL_ALOPF2(gen_alf2, d, s)
IMPL_ALOPF2(gen_alf2, d, d)
IMPL_ALOPF2(gen_alf2, s, x)
IMPL_ALOPF2(gen_alf2, x, x)
@ -5594,9 +5604,9 @@ static void gen_alop_simple(Alop *alop)
case OP_PUTTAGS: gen_puttags(alop); break;
case OP_PUTTAGD: gen_puttagd(alop); break;
case OP_PUTTAGQP: gen_puttagqp(alop); break;
case OP_STAAB: gen_staaw(alop, MO_8); break;
case OP_STAAH: gen_staaw(alop, MO_16); break;
case OP_STAAW: gen_staaw(alop, MO_32); break;
case OP_STAAB: gen_staab(alop); break;
case OP_STAAH: gen_staah(alop); break;
case OP_STAAW: gen_staaw(alop); break;
case OP_STAAD: gen_staad(alop); break;
case OP_STAAQ: gen_staaq(alop); break;
case OP_STAAQP: gen_staaqp(alop); break;
@ -5835,10 +5845,10 @@ static void gen_alop_simple(Alop *alop)
case OP_QPMERGE: gen_alf21_qqqq(alop, gen_qpmerge); break;
case OP_QPSHUFB: gen_alf21_qqqq(alop, gen_helper_qpshufb); break;
case OP_QPPERMB: gen_alf21_qqqq(alop, gen_helper_qppermb); break;
case OP_PLOG_0x00: gen_alf21_log_dddd(alop, gen_plog_0x00); break;
case OP_PLOG_0x80: gen_alf21_log_dddd(alop, gen_plog_0x80); break;
case OP_QPLOG_0x00: gen_alf21_log_qqqq(alop, gen_qplog_0x00); break;
case OP_QPLOG_0x80: gen_alf21_log_qqqq(alop, gen_qplog_0x80); break;
case OP_PLOG_0x00:
case OP_PLOG_0x80: gen_alf21_log_dddd(alop, gen_plog); break;
case OP_QPLOG_0x00:
case OP_QPLOG_0x80: gen_alf21_log_qqqq(alop, gen_qplog); break;
case OP_FMAS: gen_alf21_env_ssss(alop, gen_helper_fmas); break;
case OP_FMSS: gen_alf21_env_ssss(alop, gen_helper_fmss); break;
case OP_FNMAS: gen_alf21_env_ssss(alop, gen_helper_fnmas); break;
@ -6333,7 +6343,18 @@ static inline bool rlp_is_chan_pred(uint16_t rlp, int chan)
return !extract16(rlp, 15, 1) && rlp_check_chan(rlp, chan);
}
static void decode_alop(Alop *alop, AlesFlag ales_present)
/* Include the auto-generated decoder for alops */
#include "decode-alop.c.inc"
#include "trans/alop-v1.c.inc"
#include "trans/alop-v2.c.inc"
#include "trans/alop-v3.c.inc"
#include "trans/alop-v4.c.inc"
#include "trans/alop-v5.c.inc"
#include "trans/alop-v6.c.inc"
#include "trans/alop-v7.c.inc"
static void decode_alop_old(Alop *alop, AlesFlag ales_present)
{
DisasContext *ctx = alop->ctx;
@ -6552,6 +6573,23 @@ static void alop_find_max_reg_indices(Alop *alop, int *max_r_src,
}
}
static uint64_t alop_insn(Alop *alop)
{
uint64_t insn = 0;
/* ALES2/5 may be allocated but must not be used */
bool ales_present = (alop->ctx->bundle.ales_present[alop->chan] & ALES_PRESENT) != 0;
uint16_t ales = ales_present ? alop->ales.raw : 0;
insn = deposit64(insn, 0, 32, alop->als.raw);
insn = deposit64(insn, 32, 16, ales);
insn = deposit64(insn, 48, 3, alop->chan + (alop->chan >= 3));
alop->mas = alop->ctx->cs1.type == CS1_MAS ? alop->ctx->cs1.mas[alop->chan] : 0;
insn = deposit64(insn, 51, 7, alop->mas);
insn = deposit64(insn, 63, 1, ales_present);
return insn;
}
static void decode_alops(DisasContext *ctx)
{
int i;
@ -6568,11 +6606,16 @@ static void decode_alops(DisasContext *ctx)
alop->result.kind = ALOP_RESULT_NONE;
if (ctx->bundle.als_present[i]) {
ctx->cur_alop = i;
alop->mas = ctx->cs1.type == CS1_MAS ? ctx->cs1.mas[i] : 0;
alop->als.raw = ctx->bundle.als[i];
alop->ales.raw = ctx->bundle.ales[i];
decode_alop(alop, ctx->bundle.ales_present[i]);
if (!decode_alop(ctx, alop_insn(alop))) {
// fallback
decode_alop_old(alop, ctx->bundle.ales_present[i]);
}
}
}
}
@ -6677,22 +6720,31 @@ static void gen_alop(Alop *alop)
tcg_gen_brcondi_i32(TCG_COND_EQ, cond, 0, skip_op);
}
switch (alop->format) {
case ALOPF21_ICOMB:
gen_icomb(alop);
break;
case ALOPF21_FCOMB:
gen_fcomb(alop);
break;
case ALOPF21_PFCOMB:
gen_pfcomb(alop);
break;
case ALOPF21_QPFCOMB:
gen_qpfcomb(alop);
break;
default:
gen_alop_simple(alop);
break;
ctx->cur_alop = alop->chan;
if (!decode_alop(ctx, alop_insn(alop))) {
// fallback
switch (alop->format) {
case ALOPF21_ICOMB:
e2k_todo(ctx, "fallback icomb");
gen_icomb(alop);
break;
case ALOPF21_FCOMB:
e2k_todo(ctx, "fallback fcomb");
gen_fcomb(alop);
break;
case ALOPF21_PFCOMB:
e2k_todo(ctx, "fallback pfcomb");
gen_pfcomb(alop);
break;
case ALOPF21_QPFCOMB:
e2k_todo(ctx, "fallback qpfcomb");
gen_qpfcomb(alop);
break;
default:
e2k_todo(ctx, "fallback simple %s.%d", alop->name, alop->chan);
gen_alop_simple(alop);
break;
}
}
switch (alop->result.kind) {
@ -7412,10 +7464,12 @@ static target_ulong do_decode(DisasContext *ctx, CPUState *cs)
return ctx->pc + 8;
}
ctx->only_check = true;
decode_ct_cond(ctx, &ctx->bundle);
decode_cs1(ctx, &ctx->bundle);
decode_cs0(ctx, &ctx->bundle);
decode_alops(ctx);
ctx->only_check = false;
return ctx->pc + len;
}