aboutsummaryrefslogtreecommitdiff
path: root/sim/i960/cpu.h
diff options
context:
space:
mode:
Diffstat (limited to 'sim/i960/cpu.h')
-rw-r--r--sim/i960/cpu.h1883
1 files changed, 298 insertions, 1585 deletions
diff --git a/sim/i960/cpu.h b/sim/i960/cpu.h
index 9887906..17701d3 100644
--- a/sim/i960/cpu.h
+++ b/sim/i960/cpu.h
@@ -72,1485 +72,208 @@ typedef struct {
int empty;
} MODEL_I960CA_DATA;
+/* Instruction argument buffer. */
+
union sem_fields {
- struct { /* empty sformat for unspecified field list */
- int empty;
- } fmt_empty;
- struct { /* e.g. mulo $src1, $src2, $dst */
- SI * i_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char in_src2;
- unsigned char out_dst;
- } fmt_mulo;
- struct { /* e.g. mulo $lit1, $src2, $dst */
- UINT f_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src2;
- unsigned char out_dst;
- } fmt_mulo1;
- struct { /* e.g. mulo $src1, $lit2, $dst */
- UINT f_src2;
- SI * i_src1;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char out_dst;
- } fmt_mulo2;
- struct { /* e.g. mulo $lit1, $lit2, $dst */
- UINT f_src1;
- UINT f_src2;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_mulo3;
- struct { /* e.g. notbit $src1, $src2, $dst */
- SI * i_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char in_src2;
- unsigned char out_dst;
- } fmt_notbit;
- struct { /* e.g. notbit $lit1, $src2, $dst */
- UINT f_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src2;
- unsigned char out_dst;
- } fmt_notbit1;
- struct { /* e.g. notbit $src1, $lit2, $dst */
- UINT f_src2;
- SI * i_src1;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char out_dst;
- } fmt_notbit2;
- struct { /* e.g. notbit $lit1, $lit2, $dst */
- UINT f_src1;
- UINT f_src2;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_notbit3;
- struct { /* e.g. not $src1, $src2, $dst */
- SI * i_src1;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char out_dst;
- } fmt_not;
- struct { /* e.g. not $lit1, $src2, $dst */
- UINT f_src1;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_not1;
- struct { /* e.g. not $src1, $lit2, $dst */
- SI * i_src1;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char out_dst;
- } fmt_not2;
- struct { /* e.g. not $lit1, $lit2, $dst */
- UINT f_src1;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_not3;
- struct { /* e.g. shlo $src1, $src2, $dst */
- SI * i_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char in_src2;
- unsigned char out_dst;
- } fmt_shlo;
- struct { /* e.g. shlo $lit1, $src2, $dst */
- UINT f_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src2;
- unsigned char out_dst;
- } fmt_shlo1;
- struct { /* e.g. shlo $src1, $lit2, $dst */
- UINT f_src2;
- SI * i_src1;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char out_dst;
- } fmt_shlo2;
- struct { /* e.g. shlo $lit1, $lit2, $dst */
- UINT f_src1;
- UINT f_src2;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_shlo3;
- struct { /* e.g. emul $src1, $src2, $dst */
- UINT f_srcdst;
- SI * i_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char in_src2;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_emul;
- struct { /* e.g. emul $lit1, $src2, $dst */
- UINT f_srcdst;
- UINT f_src1;
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src2;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_emul1;
- struct { /* e.g. emul $src1, $lit2, $dst */
- UINT f_srcdst;
- UINT f_src2;
- SI * i_src1;
- SI * i_dst;
- unsigned char in_src1;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_emul2;
- struct { /* e.g. emul $lit1, $lit2, $dst */
- UINT f_srcdst;
- UINT f_src1;
- UINT f_src2;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_emul3;
- struct { /* e.g. movl $src1, $dst */
- UINT f_src1;
- UINT f_srcdst;
- SI * i_src1;
- SI * i_dst;
- unsigned char in_h_gr_add__VM_index_of_src1_1;
- unsigned char in_src1;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_movl;
- struct { /* e.g. movl $lit1, $dst */
- UINT f_srcdst;
- UINT f_src1;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_movl1;
- struct { /* e.g. movt $src1, $dst */
- UINT f_src1;
- UINT f_srcdst;
- SI * i_src1;
- SI * i_dst;
- unsigned char in_h_gr_add__VM_index_of_src1_1;
- unsigned char in_h_gr_add__VM_index_of_src1_2;
- unsigned char in_src1;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_movt;
- struct { /* e.g. movt $lit1, $dst */
- UINT f_srcdst;
- UINT f_src1;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_movt1;
- struct { /* e.g. movq $src1, $dst */
- UINT f_src1;
- UINT f_srcdst;
- SI * i_src1;
- SI * i_dst;
- unsigned char in_h_gr_add__VM_index_of_src1_1;
- unsigned char in_h_gr_add__VM_index_of_src1_2;
- unsigned char in_h_gr_add__VM_index_of_src1_3;
- unsigned char in_src1;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_movq;
- struct { /* e.g. movq $lit1, $dst */
- UINT f_srcdst;
- UINT f_src1;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_movq1;
- struct { /* e.g. modpc $src1, $src2, $dst */
- SI * i_src2;
- SI * i_dst;
- unsigned char in_src2;
- unsigned char out_dst;
- } fmt_modpc;
- struct { /* e.g. lda $offset, $dst */
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_lda_offset;
- struct { /* e.g. lda $offset($abase), $dst */
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_lda_indirect_offset;
- struct { /* e.g. lda ($abase), $dst */
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_lda_indirect;
- struct { /* e.g. lda ($abase)[$index*S$scale], $dst */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_lda_indirect_index;
- struct { /* e.g. lda $optdisp, $dst */
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_lda_disp;
- struct { /* e.g. lda $optdisp($abase), $dst */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_lda_indirect_disp;
- struct { /* e.g. lda $optdisp[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_lda_index_disp;
- struct { /* e.g. lda $optdisp($abase)[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_lda_indirect_index_disp;
- struct { /* e.g. ld $offset, $dst */
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ld_offset;
- struct { /* e.g. ld $offset($abase), $dst */
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ld_indirect_offset;
- struct { /* e.g. ld ($abase), $dst */
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ld_indirect;
- struct { /* e.g. ld ($abase)[$index*S$scale], $dst */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ld_indirect_index;
- struct { /* e.g. ld $optdisp, $dst */
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ld_disp;
- struct { /* e.g. ld $optdisp($abase), $dst */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ld_indirect_disp;
- struct { /* e.g. ld $optdisp[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ld_index_disp;
- struct { /* e.g. ld $optdisp($abase)[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ld_indirect_index_disp;
- struct { /* e.g. ldob $offset, $dst */
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldob_offset;
- struct { /* e.g. ldob $offset($abase), $dst */
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldob_indirect_offset;
- struct { /* e.g. ldob ($abase), $dst */
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldob_indirect;
- struct { /* e.g. ldob ($abase)[$index*S$scale], $dst */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldob_indirect_index;
- struct { /* e.g. ldob $optdisp, $dst */
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldob_disp;
- struct { /* e.g. ldob $optdisp($abase), $dst */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldob_indirect_disp;
- struct { /* e.g. ldob $optdisp[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldob_index_disp;
- struct { /* e.g. ldob $optdisp($abase)[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldob_indirect_index_disp;
- struct { /* e.g. ldos $offset, $dst */
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldos_offset;
- struct { /* e.g. ldos $offset($abase), $dst */
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldos_indirect_offset;
- struct { /* e.g. ldos ($abase), $dst */
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldos_indirect;
- struct { /* e.g. ldos ($abase)[$index*S$scale], $dst */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldos_indirect_index;
- struct { /* e.g. ldos $optdisp, $dst */
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldos_disp;
- struct { /* e.g. ldos $optdisp($abase), $dst */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldos_indirect_disp;
- struct { /* e.g. ldos $optdisp[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldos_index_disp;
- struct { /* e.g. ldos $optdisp($abase)[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldos_indirect_index_disp;
- struct { /* e.g. ldib $offset, $dst */
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldib_offset;
- struct { /* e.g. ldib $offset($abase), $dst */
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldib_indirect_offset;
- struct { /* e.g. ldib ($abase), $dst */
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldib_indirect;
- struct { /* e.g. ldib ($abase)[$index*S$scale], $dst */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldib_indirect_index;
- struct { /* e.g. ldib $optdisp, $dst */
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldib_disp;
- struct { /* e.g. ldib $optdisp($abase), $dst */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldib_indirect_disp;
- struct { /* e.g. ldib $optdisp[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldib_index_disp;
- struct { /* e.g. ldib $optdisp($abase)[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldib_indirect_index_disp;
- struct { /* e.g. ldis $offset, $dst */
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldis_offset;
- struct { /* e.g. ldis $offset($abase), $dst */
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldis_indirect_offset;
- struct { /* e.g. ldis ($abase), $dst */
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldis_indirect;
- struct { /* e.g. ldis ($abase)[$index*S$scale], $dst */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldis_indirect_index;
- struct { /* e.g. ldis $optdisp, $dst */
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- } fmt_ldis_disp;
- struct { /* e.g. ldis $optdisp($abase), $dst */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- } fmt_ldis_indirect_disp;
- struct { /* e.g. ldis $optdisp[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldis_index_disp;
- struct { /* e.g. ldis $optdisp($abase)[$index*S$scale], $dst */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- } fmt_ldis_indirect_index_disp;
- struct { /* e.g. ldl $offset, $dst */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_offset;
- struct { /* e.g. ldl $offset($abase), $dst */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_indirect_offset;
- struct { /* e.g. ldl ($abase), $dst */
- UINT f_srcdst;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_indirect;
- struct { /* e.g. ldl ($abase)[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_indirect_index;
- struct { /* e.g. ldl $optdisp, $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_disp;
- struct { /* e.g. ldl $optdisp($abase), $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_indirect_disp;
- struct { /* e.g. ldl $optdisp[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_index_disp;
- struct { /* e.g. ldl $optdisp($abase)[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- } fmt_ldl_indirect_index_disp;
- struct { /* e.g. ldt $offset, $dst */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_offset;
- struct { /* e.g. ldt $offset($abase), $dst */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_indirect_offset;
- struct { /* e.g. ldt ($abase), $dst */
- UINT f_srcdst;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_indirect;
- struct { /* e.g. ldt ($abase)[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_indirect_index;
- struct { /* e.g. ldt $optdisp, $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_disp;
- struct { /* e.g. ldt $optdisp($abase), $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_indirect_disp;
- struct { /* e.g. ldt $optdisp[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_index_disp;
- struct { /* e.g. ldt $optdisp($abase)[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- } fmt_ldt_indirect_index_disp;
- struct { /* e.g. ldq $offset, $dst */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_offset;
- struct { /* e.g. ldq $offset($abase), $dst */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_indirect_offset;
- struct { /* e.g. ldq ($abase), $dst */
- UINT f_srcdst;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_indirect;
- struct { /* e.g. ldq ($abase)[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_indirect_index;
- struct { /* e.g. ldq $optdisp, $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_dst;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_disp;
- struct { /* e.g. ldq $optdisp($abase), $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_abase;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_indirect_disp;
- struct { /* e.g. ldq $optdisp[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_dst;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_index_disp;
- struct { /* e.g. ldq $optdisp($abase)[$index*S$scale], $dst */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_dst;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char out_dst;
- unsigned char out_h_gr_add__VM_index_of_dst_1;
- unsigned char out_h_gr_add__VM_index_of_dst_2;
- unsigned char out_h_gr_add__VM_index_of_dst_3;
- } fmt_ldq_indirect_index_disp;
- struct { /* e.g. st $st_src, $offset */
- UINT f_offset;
- SI * i_st_src;
- unsigned char in_st_src;
- } fmt_st_offset;
- struct { /* e.g. st $st_src, $offset($abase) */
- UINT f_offset;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_st_indirect_offset;
- struct { /* e.g. st $st_src, ($abase) */
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_st_indirect;
- struct { /* e.g. st $st_src, ($abase)[$index*S$scale] */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_st_indirect_index;
- struct { /* e.g. st $st_src, $optdisp */
- UINT f_optdisp;
- SI * i_st_src;
- unsigned char in_st_src;
- } fmt_st_disp;
- struct { /* e.g. st $st_src, $optdisp($abase) */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_st_indirect_disp;
- struct { /* e.g. st $st_src, $optdisp[$index*S$scale */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_st_index_disp;
- struct { /* e.g. st $st_src, $optdisp($abase)[$index*S$scale] */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_st_indirect_index_disp;
- struct { /* e.g. stob $st_src, $offset */
- UINT f_offset;
- SI * i_st_src;
- unsigned char in_st_src;
- } fmt_stob_offset;
- struct { /* e.g. stob $st_src, $offset($abase) */
- UINT f_offset;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_stob_indirect_offset;
- struct { /* e.g. stob $st_src, ($abase) */
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_stob_indirect;
- struct { /* e.g. stob $st_src, ($abase)[$index*S$scale] */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stob_indirect_index;
- struct { /* e.g. stob $st_src, $optdisp */
- UINT f_optdisp;
- SI * i_st_src;
- unsigned char in_st_src;
- } fmt_stob_disp;
- struct { /* e.g. stob $st_src, $optdisp($abase) */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_stob_indirect_disp;
- struct { /* e.g. stob $st_src, $optdisp[$index*S$scale */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stob_index_disp;
- struct { /* e.g. stob $st_src, $optdisp($abase)[$index*S$scale] */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stob_indirect_index_disp;
- struct { /* e.g. stos $st_src, $offset */
- UINT f_offset;
- SI * i_st_src;
- unsigned char in_st_src;
- } fmt_stos_offset;
- struct { /* e.g. stos $st_src, $offset($abase) */
- UINT f_offset;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_stos_indirect_offset;
- struct { /* e.g. stos $st_src, ($abase) */
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_stos_indirect;
- struct { /* e.g. stos $st_src, ($abase)[$index*S$scale] */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stos_indirect_index;
- struct { /* e.g. stos $st_src, $optdisp */
- UINT f_optdisp;
- SI * i_st_src;
- unsigned char in_st_src;
- } fmt_stos_disp;
- struct { /* e.g. stos $st_src, $optdisp($abase) */
- UINT f_optdisp;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_st_src;
- } fmt_stos_indirect_disp;
- struct { /* e.g. stos $st_src, $optdisp[$index*S$scale */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stos_index_disp;
- struct { /* e.g. stos $st_src, $optdisp($abase)[$index*S$scale] */
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stos_indirect_index_disp;
- struct { /* e.g. stl $st_src, $offset */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_st_src;
- } fmt_stl_offset;
- struct { /* e.g. stl $st_src, $offset($abase) */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_st_src;
- } fmt_stl_indirect_offset;
- struct { /* e.g. stl $st_src, ($abase) */
- UINT f_srcdst;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_st_src;
- } fmt_stl_indirect;
- struct { /* e.g. stl $st_src, ($abase)[$index*S$scale] */
- UINT f_srcdst;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stl_indirect_index;
- struct { /* e.g. stl $st_src, $optdisp */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_st_src;
- } fmt_stl_disp;
- struct { /* e.g. stl $st_src, $optdisp($abase) */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_st_src;
- } fmt_stl_indirect_disp;
- struct { /* e.g. stl $st_src, $optdisp[$index*S$scale */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stl_index_disp;
- struct { /* e.g. stl $st_src, $optdisp($abase)[$index*S$scale] */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stl_indirect_index_disp;
- struct { /* e.g. stt $st_src, $offset */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_st_src;
- } fmt_stt_offset;
- struct { /* e.g. stt $st_src, $offset($abase) */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_st_src;
- } fmt_stt_indirect_offset;
- struct { /* e.g. stt $st_src, ($abase) */
- UINT f_srcdst;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_st_src;
- } fmt_stt_indirect;
- struct { /* e.g. stt $st_src, ($abase)[$index*S$scale] */
- UINT f_srcdst;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stt_indirect_index;
- struct { /* e.g. stt $st_src, $optdisp */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_st_src;
- } fmt_stt_disp;
- struct { /* e.g. stt $st_src, $optdisp($abase) */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_st_src;
- } fmt_stt_indirect_disp;
- struct { /* e.g. stt $st_src, $optdisp[$index*S$scale */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stt_index_disp;
- struct { /* e.g. stt $st_src, $optdisp($abase)[$index*S$scale] */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stt_indirect_index_disp;
- struct { /* e.g. stq $st_src, $offset */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_st_src;
- } fmt_stq_offset;
- struct { /* e.g. stq $st_src, $offset($abase) */
- UINT f_srcdst;
- UINT f_offset;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_st_src;
- } fmt_stq_indirect_offset;
- struct { /* e.g. stq $st_src, ($abase) */
- UINT f_srcdst;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_st_src;
- } fmt_stq_indirect;
- struct { /* e.g. stq $st_src, ($abase)[$index*S$scale] */
- UINT f_srcdst;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stq_indirect_index;
- struct { /* e.g. stq $st_src, $optdisp */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_st_src;
- } fmt_stq_disp;
- struct { /* e.g. stq $st_src, $optdisp($abase) */
- UINT f_srcdst;
- UINT f_optdisp;
- SI * i_abase;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_st_src;
- } fmt_stq_indirect_disp;
- struct { /* e.g. stq $st_src, $optdisp[$index*S$scale */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stq_index_disp;
- struct { /* e.g. stq $st_src, $optdisp($abase)[$index*S$scale] */
- UINT f_srcdst;
- UINT f_optdisp;
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- SI * i_st_src;
- unsigned char in_abase;
- unsigned char in_h_gr_add__VM_index_of_st_src_1;
- unsigned char in_h_gr_add__VM_index_of_st_src_2;
- unsigned char in_h_gr_add__VM_index_of_st_src_3;
- unsigned char in_index;
- unsigned char in_st_src;
- } fmt_stq_indirect_index_disp;
- struct { /* e.g. cmpi $src1, $src2 */
- SI * i_src1;
- SI * i_src2;
- unsigned char in_src1;
- unsigned char in_src2;
- } fmt_cmpi;
- struct { /* e.g. cmpi $lit1, $src2 */
- UINT f_src1;
- SI * i_src2;
- unsigned char in_src2;
- } fmt_cmpi1;
- struct { /* e.g. cmpi $src1, $lit2 */
- UINT f_src2;
- SI * i_src1;
- unsigned char in_src1;
- } fmt_cmpi2;
- struct { /* e.g. cmpi $lit1, $lit2 */
- UINT f_src1;
- UINT f_src2;
- } fmt_cmpi3;
- struct { /* e.g. cmpo $src1, $src2 */
- SI * i_src1;
- SI * i_src2;
- unsigned char in_src1;
- unsigned char in_src2;
- } fmt_cmpo;
- struct { /* e.g. cmpo $lit1, $src2 */
- UINT f_src1;
- SI * i_src2;
- unsigned char in_src2;
- } fmt_cmpo1;
- struct { /* e.g. cmpo $src1, $lit2 */
- UINT f_src2;
- SI * i_src1;
- unsigned char in_src1;
- } fmt_cmpo2;
- struct { /* e.g. cmpo $lit1, $lit2 */
- UINT f_src1;
- UINT f_src2;
- } fmt_cmpo3;
- struct { /* e.g. testno $br_src1 */
- SI * i_br_src1;
- unsigned char out_br_src1;
- } fmt_testno_reg;
- struct { /* e.g. flushreg */
- int empty;
- } fmt_flushreg;
- /* cti insns, kept separately so addr_cache is in fixed place */
- struct {
- union {
- struct { /* e.g. cmpobe $br_src1, $br_src2, $br_disp */
- IADDR i_br_disp;
- SI * i_br_src1;
- SI * i_br_src2;
- unsigned char in_br_src1;
- unsigned char in_br_src2;
- } fmt_cmpobe_reg;
- struct { /* e.g. cmpobe $br_lit1, $br_src2, $br_disp */
- UINT f_br_src1;
- IADDR i_br_disp;
- SI * i_br_src2;
- unsigned char in_br_src2;
- } fmt_cmpobe_lit;
- struct { /* e.g. cmpobl $br_src1, $br_src2, $br_disp */
- IADDR i_br_disp;
- SI * i_br_src1;
- SI * i_br_src2;
- unsigned char in_br_src1;
- unsigned char in_br_src2;
- } fmt_cmpobl_reg;
- struct { /* e.g. cmpobl $br_lit1, $br_src2, $br_disp */
- UINT f_br_src1;
- IADDR i_br_disp;
- SI * i_br_src2;
- unsigned char in_br_src2;
- } fmt_cmpobl_lit;
- struct { /* e.g. bbc $br_src1, $br_src2, $br_disp */
- IADDR i_br_disp;
- SI * i_br_src1;
- SI * i_br_src2;
- unsigned char in_br_src1;
- unsigned char in_br_src2;
- } fmt_bbc_reg;
- struct { /* e.g. bbc $br_lit1, $br_src2, $br_disp */
- UINT f_br_src1;
- IADDR i_br_disp;
- SI * i_br_src2;
- unsigned char in_br_src2;
- } fmt_bbc_lit;
- struct { /* e.g. bno $ctrl_disp */
- IADDR i_ctrl_disp;
- } fmt_bno;
- struct { /* e.g. b $ctrl_disp */
- IADDR i_ctrl_disp;
- } fmt_b;
- struct { /* e.g. bx $offset($abase) */
- UINT f_offset;
- SI * i_abase;
- unsigned char in_abase;
- } fmt_bx_indirect_offset;
- struct { /* e.g. bx ($abase) */
- SI * i_abase;
- unsigned char in_abase;
- } fmt_bx_indirect;
- struct { /* e.g. bx ($abase)[$index*S$scale] */
- UINT f_scale;
- SI * i_abase;
- SI * i_index;
- unsigned char in_abase;
- unsigned char in_index;
- } fmt_bx_indirect_index;
- struct { /* e.g. bx $optdisp */
- UINT f_optdisp;
- } fmt_bx_disp;
- struct { /* e.g. bx $optdisp($abase) */
- UINT f_optdisp;
- SI * i_abase;
- unsigned char in_abase;
- } fmt_bx_indirect_disp;
- struct { /* e.g. callx $optdisp */
- UINT f_optdisp;
- unsigned char in_h_gr_0;
- unsigned char in_h_gr_1;
- unsigned char in_h_gr_10;
- unsigned char in_h_gr_11;
- unsigned char in_h_gr_12;
- unsigned char in_h_gr_13;
- unsigned char in_h_gr_14;
- unsigned char in_h_gr_15;
- unsigned char in_h_gr_2;
- unsigned char in_h_gr_3;
- unsigned char in_h_gr_31;
- unsigned char in_h_gr_4;
- unsigned char in_h_gr_5;
- unsigned char in_h_gr_6;
- unsigned char in_h_gr_7;
- unsigned char in_h_gr_8;
- unsigned char in_h_gr_9;
- unsigned char out_h_gr_0;
- unsigned char out_h_gr_1;
- unsigned char out_h_gr_10;
- unsigned char out_h_gr_11;
- unsigned char out_h_gr_12;
- unsigned char out_h_gr_13;
- unsigned char out_h_gr_14;
- unsigned char out_h_gr_15;
- unsigned char out_h_gr_2;
- unsigned char out_h_gr_3;
- unsigned char out_h_gr_31;
- unsigned char out_h_gr_4;
- unsigned char out_h_gr_5;
- unsigned char out_h_gr_6;
- unsigned char out_h_gr_7;
- unsigned char out_h_gr_8;
- unsigned char out_h_gr_9;
- } fmt_callx_disp;
- struct { /* e.g. callx ($abase) */
- SI * i_abase;
- unsigned char in_abase;
- unsigned char in_h_gr_0;
- unsigned char in_h_gr_1;
- unsigned char in_h_gr_10;
- unsigned char in_h_gr_11;
- unsigned char in_h_gr_12;
- unsigned char in_h_gr_13;
- unsigned char in_h_gr_14;
- unsigned char in_h_gr_15;
- unsigned char in_h_gr_2;
- unsigned char in_h_gr_3;
- unsigned char in_h_gr_31;
- unsigned char in_h_gr_4;
- unsigned char in_h_gr_5;
- unsigned char in_h_gr_6;
- unsigned char in_h_gr_7;
- unsigned char in_h_gr_8;
- unsigned char in_h_gr_9;
- unsigned char out_h_gr_0;
- unsigned char out_h_gr_1;
- unsigned char out_h_gr_10;
- unsigned char out_h_gr_11;
- unsigned char out_h_gr_12;
- unsigned char out_h_gr_13;
- unsigned char out_h_gr_14;
- unsigned char out_h_gr_15;
- unsigned char out_h_gr_2;
- unsigned char out_h_gr_3;
- unsigned char out_h_gr_31;
- unsigned char out_h_gr_4;
- unsigned char out_h_gr_5;
- unsigned char out_h_gr_6;
- unsigned char out_h_gr_7;
- unsigned char out_h_gr_8;
- unsigned char out_h_gr_9;
- } fmt_callx_indirect;
- struct { /* e.g. callx $offset($abase) */
- UINT f_offset;
- SI * i_abase;
- unsigned char in_abase;
- unsigned char in_h_gr_0;
- unsigned char in_h_gr_1;
- unsigned char in_h_gr_10;
- unsigned char in_h_gr_11;
- unsigned char in_h_gr_12;
- unsigned char in_h_gr_13;
- unsigned char in_h_gr_14;
- unsigned char in_h_gr_15;
- unsigned char in_h_gr_2;
- unsigned char in_h_gr_3;
- unsigned char in_h_gr_31;
- unsigned char in_h_gr_4;
- unsigned char in_h_gr_5;
- unsigned char in_h_gr_6;
- unsigned char in_h_gr_7;
- unsigned char in_h_gr_8;
- unsigned char in_h_gr_9;
- unsigned char out_h_gr_0;
- unsigned char out_h_gr_1;
- unsigned char out_h_gr_10;
- unsigned char out_h_gr_11;
- unsigned char out_h_gr_12;
- unsigned char out_h_gr_13;
- unsigned char out_h_gr_14;
- unsigned char out_h_gr_15;
- unsigned char out_h_gr_2;
- unsigned char out_h_gr_3;
- unsigned char out_h_gr_31;
- unsigned char out_h_gr_4;
- unsigned char out_h_gr_5;
- unsigned char out_h_gr_6;
- unsigned char out_h_gr_7;
- unsigned char out_h_gr_8;
- unsigned char out_h_gr_9;
- } fmt_callx_indirect_offset;
- struct { /* e.g. ret */
- int empty;
- unsigned char in_h_gr_0;
- unsigned char in_h_gr_2;
- unsigned char in_h_gr_31;
- unsigned char out_h_gr_0;
- unsigned char out_h_gr_1;
- unsigned char out_h_gr_10;
- unsigned char out_h_gr_11;
- unsigned char out_h_gr_12;
- unsigned char out_h_gr_13;
- unsigned char out_h_gr_14;
- unsigned char out_h_gr_15;
- unsigned char out_h_gr_2;
- unsigned char out_h_gr_3;
- unsigned char out_h_gr_31;
- unsigned char out_h_gr_4;
- unsigned char out_h_gr_5;
- unsigned char out_h_gr_6;
- unsigned char out_h_gr_7;
- unsigned char out_h_gr_8;
- unsigned char out_h_gr_9;
- } fmt_ret;
- struct { /* e.g. calls $src1 */
- SI * i_src1;
- unsigned char in_src1;
- } fmt_calls;
- struct { /* e.g. fmark */
- int empty;
- } fmt_fmark;
- } fields;
-#if WITH_SCACHE_PBB
- SEM_PC addr_cache;
-#endif
- } cti;
+ struct { /* no operands */
+ int empty;
+ } fmt_empty;
+ struct { /* */
+ IADDR i_ctrl_disp;
+ } sfmt_bno;
+ struct { /* */
+ SI* i_br_src1;
+ unsigned char out_br_src1;
+ } sfmt_testno_reg;
+ struct { /* */
+ IADDR i_br_disp;
+ SI* i_br_src2;
+ UINT f_br_src1;
+ unsigned char in_br_src2;
+ } sfmt_cmpobe_lit;
+ struct { /* */
+ IADDR i_br_disp;
+ SI* i_br_src1;
+ SI* i_br_src2;
+ unsigned char in_br_src1;
+ unsigned char in_br_src2;
+ } sfmt_cmpobe_reg;
+ struct { /* */
+ SI* i_dst;
+ UINT f_src1;
+ UINT f_src2;
+ UINT f_srcdst;
+ unsigned char out_dst;
+ unsigned char out_h_gr_add__VM_index_of_dst_1;
+ } sfmt_emul3;
+ struct { /* */
+ SI* i_dst;
+ SI* i_src1;
+ UINT f_src2;
+ UINT f_srcdst;
+ unsigned char in_src1;
+ unsigned char out_dst;
+ unsigned char out_h_gr_add__VM_index_of_dst_1;
+ } sfmt_emul2;
+ struct { /* */
+ SI* i_dst;
+ SI* i_src2;
+ UINT f_src1;
+ UINT f_srcdst;
+ unsigned char in_src2;
+ unsigned char out_dst;
+ unsigned char out_h_gr_add__VM_index_of_dst_1;
+ } sfmt_emul1;
+ struct { /* */
+ SI* i_dst;
+ SI* i_src1;
+ SI* i_src2;
+ UINT f_srcdst;
+ unsigned char in_src1;
+ unsigned char in_src2;
+ unsigned char out_dst;
+ unsigned char out_h_gr_add__VM_index_of_dst_1;
+ } sfmt_emul;
+ struct { /* */
+ SI* i_abase;
+ SI* i_st_src;
+ UINT f_offset;
+ UINT f_srcdst;
+ unsigned char in_abase;
+ unsigned char in_h_gr_add__VM_index_of_st_src_1;
+ unsigned char in_h_gr_add__VM_index_of_st_src_2;
+ unsigned char in_h_gr_add__VM_index_of_st_src_3;
+ unsigned char in_st_src;
+ } sfmt_stq_indirect_offset;
+ struct { /* */
+ SI* i_abase;
+ SI* i_dst;
+ UINT f_offset;
+ UINT f_srcdst;
+ unsigned char in_abase;
+ unsigned char out_dst;
+ unsigned char out_h_gr_add__VM_index_of_dst_1;
+ unsigned char out_h_gr_add__VM_index_of_dst_2;
+ unsigned char out_h_gr_add__VM_index_of_dst_3;
+ } sfmt_ldq_indirect_offset;
+ struct { /* */
+ SI* i_abase;
+ SI* i_index;
+ SI* i_st_src;
+ UINT f_optdisp;
+ UINT f_scale;
+ UINT f_srcdst;
+ unsigned char in_abase;
+ unsigned char in_h_gr_add__VM_index_of_st_src_1;
+ unsigned char in_h_gr_add__VM_index_of_st_src_2;
+ unsigned char in_h_gr_add__VM_index_of_st_src_3;
+ unsigned char in_index;
+ unsigned char in_st_src;
+ } sfmt_stq_indirect_index_disp;
+ struct { /* */
+ SI* i_abase;
+ SI* i_dst;
+ SI* i_index;
+ UINT f_optdisp;
+ UINT f_scale;
+ UINT f_srcdst;
+ unsigned char in_abase;
+ unsigned char in_index;
+ unsigned char out_dst;
+ unsigned char out_h_gr_add__VM_index_of_dst_1;
+ unsigned char out_h_gr_add__VM_index_of_dst_2;
+ unsigned char out_h_gr_add__VM_index_of_dst_3;
+ } sfmt_ldq_indirect_index_disp;
+ struct { /* */
+ SI* i_dst;
+ SI* i_src1;
+ UINT f_src1;
+ UINT f_srcdst;
+ unsigned char in_h_gr_add__VM_index_of_src1_1;
+ unsigned char in_h_gr_add__VM_index_of_src1_2;
+ unsigned char in_h_gr_add__VM_index_of_src1_3;
+ unsigned char in_src1;
+ unsigned char out_dst;
+ unsigned char out_h_gr_add__VM_index_of_dst_1;
+ unsigned char out_h_gr_add__VM_index_of_dst_2;
+ unsigned char out_h_gr_add__VM_index_of_dst_3;
+ } sfmt_movq;
+ struct { /* */
+ UINT f_optdisp;
+ unsigned char in_h_gr_0;
+ unsigned char in_h_gr_1;
+ unsigned char in_h_gr_10;
+ unsigned char in_h_gr_11;
+ unsigned char in_h_gr_12;
+ unsigned char in_h_gr_13;
+ unsigned char in_h_gr_14;
+ unsigned char in_h_gr_15;
+ unsigned char in_h_gr_2;
+ unsigned char in_h_gr_3;
+ unsigned char in_h_gr_31;
+ unsigned char in_h_gr_4;
+ unsigned char in_h_gr_5;
+ unsigned char in_h_gr_6;
+ unsigned char in_h_gr_7;
+ unsigned char in_h_gr_8;
+ unsigned char in_h_gr_9;
+ unsigned char out_h_gr_0;
+ unsigned char out_h_gr_1;
+ unsigned char out_h_gr_10;
+ unsigned char out_h_gr_11;
+ unsigned char out_h_gr_12;
+ unsigned char out_h_gr_13;
+ unsigned char out_h_gr_14;
+ unsigned char out_h_gr_15;
+ unsigned char out_h_gr_2;
+ unsigned char out_h_gr_3;
+ unsigned char out_h_gr_31;
+ unsigned char out_h_gr_4;
+ unsigned char out_h_gr_5;
+ unsigned char out_h_gr_6;
+ unsigned char out_h_gr_7;
+ unsigned char out_h_gr_8;
+ unsigned char out_h_gr_9;
+ } sfmt_callx_disp;
+ struct { /* */
+ SI* i_abase;
+ UINT f_offset;
+ unsigned char in_abase;
+ unsigned char in_h_gr_0;
+ unsigned char in_h_gr_1;
+ unsigned char in_h_gr_10;
+ unsigned char in_h_gr_11;
+ unsigned char in_h_gr_12;
+ unsigned char in_h_gr_13;
+ unsigned char in_h_gr_14;
+ unsigned char in_h_gr_15;
+ unsigned char in_h_gr_2;
+ unsigned char in_h_gr_3;
+ unsigned char in_h_gr_31;
+ unsigned char in_h_gr_4;
+ unsigned char in_h_gr_5;
+ unsigned char in_h_gr_6;
+ unsigned char in_h_gr_7;
+ unsigned char in_h_gr_8;
+ unsigned char in_h_gr_9;
+ unsigned char out_h_gr_0;
+ unsigned char out_h_gr_1;
+ unsigned char out_h_gr_10;
+ unsigned char out_h_gr_11;
+ unsigned char out_h_gr_12;
+ unsigned char out_h_gr_13;
+ unsigned char out_h_gr_14;
+ unsigned char out_h_gr_15;
+ unsigned char out_h_gr_2;
+ unsigned char out_h_gr_3;
+ unsigned char out_h_gr_31;
+ unsigned char out_h_gr_4;
+ unsigned char out_h_gr_5;
+ unsigned char out_h_gr_6;
+ unsigned char out_h_gr_7;
+ unsigned char out_h_gr_8;
+ unsigned char out_h_gr_9;
+ } sfmt_callx_indirect_offset;
#if WITH_SCACHE_PBB
/* Writeback handler. */
struct {
@@ -1572,6 +295,7 @@ union sem_fields {
int insn_count;
/* Next pbb to execute. */
SCACHE *next;
+ SCACHE *branch_target;
} chain;
#endif
};
@@ -1583,6 +307,9 @@ struct argbuf {
const IDESC *idesc;
char trace_p;
char profile_p;
+ /* ??? Temporary hack for skip insns. */
+ char skip_count;
+ char unused;
/* cpu specific data follows */
union sem semantic;
int written;
@@ -1603,13 +330,11 @@ struct scache {
These define and assign the local vars that contain the insn's fields. */
#define EXTRACT_IFMT_EMPTY_VARS \
- /* Instruction fields. */ \
unsigned int length;
#define EXTRACT_IFMT_EMPTY_CODE \
length = 0; \
#define EXTRACT_IFMT_MULO_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_src2; \
@@ -1622,18 +347,17 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_MULO_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_src2 = EXTRACT_UINT (insn, 32, 13, 5); \
- f_m3 = EXTRACT_UINT (insn, 32, 18, 1); \
- f_m2 = EXTRACT_UINT (insn, 32, 19, 1); \
- f_m1 = EXTRACT_UINT (insn, 32, 20, 1); \
- f_opcode2 = EXTRACT_UINT (insn, 32, 21, 4); \
- f_zero = EXTRACT_UINT (insn, 32, 25, 2); \
- f_src1 = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_src2 = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_m3 = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_m2 = EXTRACT_MSB0_UINT (insn, 32, 19, 1); \
+ f_m1 = EXTRACT_MSB0_UINT (insn, 32, 20, 1); \
+ f_opcode2 = EXTRACT_MSB0_UINT (insn, 32, 21, 4); \
+ f_zero = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_src1 = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_MULO1_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_src2; \
@@ -1646,18 +370,17 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_MULO1_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_src2 = EXTRACT_UINT (insn, 32, 13, 5); \
- f_m3 = EXTRACT_UINT (insn, 32, 18, 1); \
- f_m2 = EXTRACT_UINT (insn, 32, 19, 1); \
- f_m1 = EXTRACT_UINT (insn, 32, 20, 1); \
- f_opcode2 = EXTRACT_UINT (insn, 32, 21, 4); \
- f_zero = EXTRACT_UINT (insn, 32, 25, 2); \
- f_src1 = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_src2 = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_m3 = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_m2 = EXTRACT_MSB0_UINT (insn, 32, 19, 1); \
+ f_m1 = EXTRACT_MSB0_UINT (insn, 32, 20, 1); \
+ f_opcode2 = EXTRACT_MSB0_UINT (insn, 32, 21, 4); \
+ f_zero = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_src1 = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_MULO2_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_src2; \
@@ -1670,18 +393,17 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_MULO2_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_src2 = EXTRACT_UINT (insn, 32, 13, 5); \
- f_m3 = EXTRACT_UINT (insn, 32, 18, 1); \
- f_m2 = EXTRACT_UINT (insn, 32, 19, 1); \
- f_m1 = EXTRACT_UINT (insn, 32, 20, 1); \
- f_opcode2 = EXTRACT_UINT (insn, 32, 21, 4); \
- f_zero = EXTRACT_UINT (insn, 32, 25, 2); \
- f_src1 = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_src2 = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_m3 = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_m2 = EXTRACT_MSB0_UINT (insn, 32, 19, 1); \
+ f_m1 = EXTRACT_MSB0_UINT (insn, 32, 20, 1); \
+ f_opcode2 = EXTRACT_MSB0_UINT (insn, 32, 21, 4); \
+ f_zero = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_src1 = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_MULO3_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_src2; \
@@ -1694,18 +416,17 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_MULO3_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_src2 = EXTRACT_UINT (insn, 32, 13, 5); \
- f_m3 = EXTRACT_UINT (insn, 32, 18, 1); \
- f_m2 = EXTRACT_UINT (insn, 32, 19, 1); \
- f_m1 = EXTRACT_UINT (insn, 32, 20, 1); \
- f_opcode2 = EXTRACT_UINT (insn, 32, 21, 4); \
- f_zero = EXTRACT_UINT (insn, 32, 25, 2); \
- f_src1 = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_src2 = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_m3 = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_m2 = EXTRACT_MSB0_UINT (insn, 32, 19, 1); \
+ f_m1 = EXTRACT_MSB0_UINT (insn, 32, 20, 1); \
+ f_opcode2 = EXTRACT_MSB0_UINT (insn, 32, 21, 4); \
+ f_zero = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_src1 = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_LDA_OFFSET_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_abase; \
@@ -1715,15 +436,14 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_LDA_OFFSET_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_abase = EXTRACT_UINT (insn, 32, 13, 5); \
- f_modea = EXTRACT_UINT (insn, 32, 18, 1); \
- f_zeroa = EXTRACT_UINT (insn, 32, 19, 1); \
- f_offset = EXTRACT_UINT (insn, 32, 20, 12); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_abase = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_modea = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_zeroa = EXTRACT_MSB0_UINT (insn, 32, 19, 1); \
+ f_offset = EXTRACT_MSB0_UINT (insn, 32, 20, 12); \
#define EXTRACT_IFMT_LDA_INDIRECT_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_abase; \
@@ -1734,16 +454,15 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_LDA_INDIRECT_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_abase = EXTRACT_UINT (insn, 32, 13, 5); \
- f_modeb = EXTRACT_UINT (insn, 32, 18, 4); \
- f_scale = EXTRACT_UINT (insn, 32, 22, 3); \
- f_zerob = EXTRACT_UINT (insn, 32, 25, 2); \
- f_index = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_abase = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_modeb = EXTRACT_MSB0_UINT (insn, 32, 18, 4); \
+ f_scale = EXTRACT_MSB0_UINT (insn, 32, 22, 3); \
+ f_zerob = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_index = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_LDA_DISP_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_optdisp; \
UINT f_srcdst; \
@@ -1758,17 +477,16 @@ struct scache {
#define EXTRACT_IFMT_LDA_DISP_CODE \
length = 8; \
word_1 = GETIMEMUSI (current_cpu, pc + 4); \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_optdisp = (0|(EXTRACT_UINT (word_1, 32, 0, 32) << 0)); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_abase = EXTRACT_UINT (insn, 32, 13, 5); \
- f_modeb = EXTRACT_UINT (insn, 32, 18, 4); \
- f_scale = EXTRACT_UINT (insn, 32, 22, 3); \
- f_zerob = EXTRACT_UINT (insn, 32, 25, 2); \
- f_index = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_optdisp = (0|(EXTRACT_MSB0_UINT (word_1, 32, 0, 32) << 0)); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_abase = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_modeb = EXTRACT_MSB0_UINT (insn, 32, 18, 4); \
+ f_scale = EXTRACT_MSB0_UINT (insn, 32, 22, 3); \
+ f_zerob = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_index = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_ST_OFFSET_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_abase; \
@@ -1778,15 +496,14 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_ST_OFFSET_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_abase = EXTRACT_UINT (insn, 32, 13, 5); \
- f_modea = EXTRACT_UINT (insn, 32, 18, 1); \
- f_zeroa = EXTRACT_UINT (insn, 32, 19, 1); \
- f_offset = EXTRACT_UINT (insn, 32, 20, 12); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_abase = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_modea = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_zeroa = EXTRACT_MSB0_UINT (insn, 32, 19, 1); \
+ f_offset = EXTRACT_MSB0_UINT (insn, 32, 20, 12); \
#define EXTRACT_IFMT_ST_INDIRECT_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_srcdst; \
UINT f_abase; \
@@ -1797,16 +514,15 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_ST_INDIRECT_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_abase = EXTRACT_UINT (insn, 32, 13, 5); \
- f_modeb = EXTRACT_UINT (insn, 32, 18, 4); \
- f_scale = EXTRACT_UINT (insn, 32, 22, 3); \
- f_zerob = EXTRACT_UINT (insn, 32, 25, 2); \
- f_index = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_abase = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_modeb = EXTRACT_MSB0_UINT (insn, 32, 18, 4); \
+ f_scale = EXTRACT_MSB0_UINT (insn, 32, 22, 3); \
+ f_zerob = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_index = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_ST_DISP_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_optdisp; \
UINT f_srcdst; \
@@ -1821,17 +537,16 @@ struct scache {
#define EXTRACT_IFMT_ST_DISP_CODE \
length = 8; \
word_1 = GETIMEMUSI (current_cpu, pc + 4); \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_optdisp = (0|(EXTRACT_UINT (word_1, 32, 0, 32) << 0)); \
- f_srcdst = EXTRACT_UINT (insn, 32, 8, 5); \
- f_abase = EXTRACT_UINT (insn, 32, 13, 5); \
- f_modeb = EXTRACT_UINT (insn, 32, 18, 4); \
- f_scale = EXTRACT_UINT (insn, 32, 22, 3); \
- f_zerob = EXTRACT_UINT (insn, 32, 25, 2); \
- f_index = EXTRACT_UINT (insn, 32, 27, 5); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_optdisp = (0|(EXTRACT_MSB0_UINT (word_1, 32, 0, 32) << 0)); \
+ f_srcdst = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_abase = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_modeb = EXTRACT_MSB0_UINT (insn, 32, 18, 4); \
+ f_scale = EXTRACT_MSB0_UINT (insn, 32, 22, 3); \
+ f_zerob = EXTRACT_MSB0_UINT (insn, 32, 25, 2); \
+ f_index = EXTRACT_MSB0_UINT (insn, 32, 27, 5); \
#define EXTRACT_IFMT_CMPOBE_REG_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_br_src1; \
UINT f_br_src2; \
@@ -1841,15 +556,14 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_CMPOBE_REG_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_br_src1 = EXTRACT_UINT (insn, 32, 8, 5); \
- f_br_src2 = EXTRACT_UINT (insn, 32, 13, 5); \
- f_br_m1 = EXTRACT_UINT (insn, 32, 18, 1); \
- f_br_disp = ((((EXTRACT_INT (insn, 32, 19, 11)) << (2))) + (pc)); \
- f_br_zero = EXTRACT_UINT (insn, 32, 30, 2); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_br_src1 = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_br_src2 = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_br_m1 = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_br_disp = ((((EXTRACT_MSB0_INT (insn, 32, 19, 11)) << (2))) + (pc)); \
+ f_br_zero = EXTRACT_MSB0_UINT (insn, 32, 30, 2); \
#define EXTRACT_IFMT_CMPOBE_LIT_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
UINT f_br_src1; \
UINT f_br_src2; \
@@ -1859,24 +573,23 @@ struct scache {
unsigned int length;
#define EXTRACT_IFMT_CMPOBE_LIT_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_br_src1 = EXTRACT_UINT (insn, 32, 8, 5); \
- f_br_src2 = EXTRACT_UINT (insn, 32, 13, 5); \
- f_br_m1 = EXTRACT_UINT (insn, 32, 18, 1); \
- f_br_disp = ((((EXTRACT_INT (insn, 32, 19, 11)) << (2))) + (pc)); \
- f_br_zero = EXTRACT_UINT (insn, 32, 30, 2); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_br_src1 = EXTRACT_MSB0_UINT (insn, 32, 8, 5); \
+ f_br_src2 = EXTRACT_MSB0_UINT (insn, 32, 13, 5); \
+ f_br_m1 = EXTRACT_MSB0_UINT (insn, 32, 18, 1); \
+ f_br_disp = ((((EXTRACT_MSB0_INT (insn, 32, 19, 11)) << (2))) + (pc)); \
+ f_br_zero = EXTRACT_MSB0_UINT (insn, 32, 30, 2); \
#define EXTRACT_IFMT_BNO_VARS \
- /* Instruction fields. */ \
UINT f_opcode; \
SI f_ctrl_disp; \
UINT f_ctrl_zero; \
unsigned int length;
#define EXTRACT_IFMT_BNO_CODE \
length = 4; \
- f_opcode = EXTRACT_UINT (insn, 32, 0, 8); \
- f_ctrl_disp = ((((EXTRACT_INT (insn, 32, 8, 22)) << (2))) + (pc)); \
- f_ctrl_zero = EXTRACT_UINT (insn, 32, 30, 2); \
+ f_opcode = EXTRACT_MSB0_UINT (insn, 32, 0, 8); \
+ f_ctrl_disp = ((((EXTRACT_MSB0_INT (insn, 32, 8, 22)) << (2))) + (pc)); \
+ f_ctrl_zero = EXTRACT_MSB0_UINT (insn, 32, 30, 2); \
/* Collection of various things for the trace handler to use. */