unicorn/qemu/target/arm/decode-vfp-uncond.inc.c
Nguyen Anh Quynh aaaea14214 import Unicorn2
2021-10-03 22:14:44 +08:00

226 lines
9.2 KiB
C

/* This file is autogenerated by scripts/decodetree.py. */
typedef struct {
int vd;
int vm;
int vn;
} arg_disas_vfp_uncond0;
typedef struct {
int cc;
int dp;
int vd;
int vm;
int vn;
} arg_disas_vfp_uncond1;
typedef struct {
int dp;
int rm;
int vd;
int vm;
} arg_disas_vfp_uncond2;
typedef struct {
int dp;
int op;
int rm;
int vd;
int vm;
} arg_disas_vfp_uncond3;
typedef arg_disas_vfp_uncond1 arg_VSEL;
static bool trans_VSEL(DisasContext *ctx, arg_VSEL *a);
typedef arg_disas_vfp_uncond0 arg_VMAXNM_sp;
static bool trans_VMAXNM_sp(DisasContext *ctx, arg_VMAXNM_sp *a);
typedef arg_disas_vfp_uncond0 arg_VMINNM_sp;
static bool trans_VMINNM_sp(DisasContext *ctx, arg_VMINNM_sp *a);
typedef arg_disas_vfp_uncond0 arg_VMAXNM_dp;
static bool trans_VMAXNM_dp(DisasContext *ctx, arg_VMAXNM_dp *a);
typedef arg_disas_vfp_uncond0 arg_VMINNM_dp;
static bool trans_VMINNM_dp(DisasContext *ctx, arg_VMINNM_dp *a);
typedef arg_disas_vfp_uncond2 arg_VRINT;
static bool trans_VRINT(DisasContext *ctx, arg_VRINT *a);
typedef arg_disas_vfp_uncond3 arg_VCVT;
static bool trans_VCVT(DisasContext *ctx, arg_VCVT *a);
static void disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_2(DisasContext *ctx, arg_disas_vfp_uncond1 *a, uint32_t insn)
{
a->cc = extract32(insn, 20, 2);
a->vm = deposit32(extract32(insn, 5, 1), 1, 31, extract32(insn, 0, 4));
a->vn = deposit32(extract32(insn, 7, 1), 1, 31, extract32(insn, 16, 4));
a->vd = deposit32(extract32(insn, 22, 1), 1, 31, extract32(insn, 12, 4));
a->dp = 0;
}
static void disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_3(DisasContext *ctx, arg_disas_vfp_uncond1 *a, uint32_t insn)
{
a->cc = extract32(insn, 20, 2);
a->vm = deposit32(extract32(insn, 0, 4), 4, 28, extract32(insn, 5, 1));
a->vn = deposit32(extract32(insn, 16, 4), 4, 28, extract32(insn, 7, 1));
a->vd = deposit32(extract32(insn, 12, 4), 4, 28, extract32(insn, 22, 1));
a->dp = 1;
}
static void disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_4(DisasContext *ctx, arg_disas_vfp_uncond2 *a, uint32_t insn)
{
a->rm = extract32(insn, 16, 2);
a->vm = deposit32(extract32(insn, 5, 1), 1, 31, extract32(insn, 0, 4));
a->vd = deposit32(extract32(insn, 22, 1), 1, 31, extract32(insn, 12, 4));
a->dp = 0;
}
static void disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_5(DisasContext *ctx, arg_disas_vfp_uncond2 *a, uint32_t insn)
{
a->rm = extract32(insn, 16, 2);
a->vm = deposit32(extract32(insn, 0, 4), 4, 28, extract32(insn, 5, 1));
a->vd = deposit32(extract32(insn, 12, 4), 4, 28, extract32(insn, 22, 1));
a->dp = 1;
}
static void disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_6(DisasContext *ctx, arg_disas_vfp_uncond3 *a, uint32_t insn)
{
a->rm = extract32(insn, 16, 2);
a->op = extract32(insn, 7, 1);
a->vm = deposit32(extract32(insn, 5, 1), 1, 31, extract32(insn, 0, 4));
a->vd = deposit32(extract32(insn, 22, 1), 1, 31, extract32(insn, 12, 4));
a->dp = 0;
}
static void disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_7(DisasContext *ctx, arg_disas_vfp_uncond3 *a, uint32_t insn)
{
a->rm = extract32(insn, 16, 2);
a->op = extract32(insn, 7, 1);
a->vm = deposit32(extract32(insn, 0, 4), 4, 28, extract32(insn, 5, 1));
a->vd = deposit32(extract32(insn, 22, 1), 1, 31, extract32(insn, 12, 4));
a->dp = 1;
}
static void disas_vfp_uncond_extract_vfp_dnm_d(DisasContext *ctx, arg_disas_vfp_uncond0 *a, uint32_t insn)
{
a->vm = deposit32(extract32(insn, 0, 4), 4, 28, extract32(insn, 5, 1));
a->vn = deposit32(extract32(insn, 16, 4), 4, 28, extract32(insn, 7, 1));
a->vd = deposit32(extract32(insn, 12, 4), 4, 28, extract32(insn, 22, 1));
}
static void disas_vfp_uncond_extract_vfp_dnm_s(DisasContext *ctx, arg_disas_vfp_uncond0 *a, uint32_t insn)
{
a->vm = deposit32(extract32(insn, 5, 1), 1, 31, extract32(insn, 0, 4));
a->vn = deposit32(extract32(insn, 7, 1), 1, 31, extract32(insn, 16, 4));
a->vd = deposit32(extract32(insn, 22, 1), 1, 31, extract32(insn, 12, 4));
}
static bool disas_vfp_uncond(DisasContext *ctx, uint32_t insn)
{
union {
arg_disas_vfp_uncond0 f_disas_vfp_uncond0;
arg_disas_vfp_uncond1 f_disas_vfp_uncond1;
arg_disas_vfp_uncond2 f_disas_vfp_uncond2;
arg_disas_vfp_uncond3 f_disas_vfp_uncond3;
} u;
switch (insn & 0xff800f50) {
case 0xfe000a00:
/* 11111110 0....... ....1010 .0.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:47 */
disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_2(ctx, &u.f_disas_vfp_uncond1, insn);
if (trans_VSEL(ctx, &u.f_disas_vfp_uncond1)) return true;
return false;
case 0xfe000b00:
/* 11111110 0....... ....1011 .0.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:49 */
disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_3(ctx, &u.f_disas_vfp_uncond1, insn);
if (trans_VSEL(ctx, &u.f_disas_vfp_uncond1)) return true;
return false;
case 0xfe800a00:
/* 11111110 1....... ....1010 .0.0.... */
disas_vfp_uncond_extract_vfp_dnm_s(ctx, &u.f_disas_vfp_uncond0, insn);
switch ((insn >> 20) & 0x3) {
case 0x0:
/* 11111110 1.00.... ....1010 .0.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:52 */
if (trans_VMAXNM_sp(ctx, &u.f_disas_vfp_uncond0)) return true;
return false;
}
return false;
case 0xfe800a40:
/* 11111110 1....... ....1010 .1.0.... */
switch ((insn >> 20) & 0x3) {
case 0x0:
/* 11111110 1.00.... ....1010 .1.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:53 */
disas_vfp_uncond_extract_vfp_dnm_s(ctx, &u.f_disas_vfp_uncond0, insn);
if (trans_VMINNM_sp(ctx, &u.f_disas_vfp_uncond0)) return true;
return false;
case 0x3:
/* 11111110 1.11.... ....1010 .1.0.... */
switch ((insn >> 18) & 0x3) {
case 0x2:
/* 11111110 1.1110.. ....1010 .1.0.... */
disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_4(ctx, &u.f_disas_vfp_uncond2, insn);
switch ((insn >> 7) & 0x1) {
case 0x0:
/* 11111110 1.1110.. ....1010 01.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:58 */
if (trans_VRINT(ctx, &u.f_disas_vfp_uncond2)) return true;
return false;
}
return false;
case 0x3:
/* 11111110 1.1111.. ....1010 .1.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:64 */
disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_6(ctx, &u.f_disas_vfp_uncond3, insn);
if (trans_VCVT(ctx, &u.f_disas_vfp_uncond3)) return true;
return false;
}
return false;
}
return false;
case 0xfe800b00:
/* 11111110 1....... ....1011 .0.0.... */
disas_vfp_uncond_extract_vfp_dnm_d(ctx, &u.f_disas_vfp_uncond0, insn);
switch ((insn >> 20) & 0x3) {
case 0x0:
/* 11111110 1.00.... ....1011 .0.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:55 */
if (trans_VMAXNM_dp(ctx, &u.f_disas_vfp_uncond0)) return true;
return false;
}
return false;
case 0xfe800b40:
/* 11111110 1....... ....1011 .1.0.... */
switch ((insn >> 20) & 0x3) {
case 0x0:
/* 11111110 1.00.... ....1011 .1.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:56 */
disas_vfp_uncond_extract_vfp_dnm_d(ctx, &u.f_disas_vfp_uncond0, insn);
if (trans_VMINNM_dp(ctx, &u.f_disas_vfp_uncond0)) return true;
return false;
case 0x3:
/* 11111110 1.11.... ....1011 .1.0.... */
switch ((insn >> 18) & 0x3) {
case 0x2:
/* 11111110 1.1110.. ....1011 .1.0.... */
disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_5(ctx, &u.f_disas_vfp_uncond2, insn);
switch ((insn >> 7) & 0x1) {
case 0x0:
/* 11111110 1.1110.. ....1011 01.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:60 */
if (trans_VRINT(ctx, &u.f_disas_vfp_uncond2)) return true;
return false;
}
return false;
case 0x3:
/* 11111110 1.1111.. ....1011 .1.0.... */
/* /mnt/c/Users/me/Documents/projects/unicorn2/tmp/tmp/qemu-5.0.0/target/arm/vfp-uncond.decode:66 */
disas_vfp_uncond_extract_disas_vfp_uncond_Fmt_7(ctx, &u.f_disas_vfp_uncond3, insn);
if (trans_VCVT(ctx, &u.f_disas_vfp_uncond3)) return true;
return false;
}
return false;
}
return false;
}
return false;
}