226 lines
9.2 KiB
C
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;
|
|
}
|