61 |
static int x86_64_hregs; |
static int x86_64_hregs; |
62 |
#endif |
#endif |
63 |
|
|
64 |
|
#ifdef USE_DIRECT_JUMP |
65 |
|
#define TBPARAM(x) |
66 |
|
#else |
67 |
|
#define TBPARAM(x) (long)(x) |
68 |
|
#endif |
69 |
|
|
70 |
typedef struct DisasContext { |
typedef struct DisasContext { |
71 |
/* current insn context */ |
/* current insn context */ |
72 |
int override; /* -1 if no override */ |
int override; /* -1 if no override */ |
1788 |
l1 = gen_new_label(); |
l1 = gen_new_label(); |
1789 |
func(l1); |
func(l1); |
1790 |
|
|
1791 |
gen_op_goto_tb0(); |
gen_op_goto_tb0(TBPARAM(tb)); |
1792 |
gen_jmp_im(next_eip); |
gen_jmp_im(next_eip); |
1793 |
gen_op_movl_T0_im((long)tb + 0); |
gen_op_movl_T0_im((long)tb + 0); |
1794 |
gen_op_exit_tb(); |
gen_op_exit_tb(); |
1795 |
|
|
1796 |
gen_set_label(l1); |
gen_set_label(l1); |
1797 |
gen_op_goto_tb1(); |
gen_op_goto_tb1(TBPARAM(tb)); |
1798 |
gen_jmp_im(val); |
gen_jmp_im(val); |
1799 |
gen_op_movl_T0_im((long)tb + 1); |
gen_op_movl_T0_im((long)tb + 1); |
1800 |
gen_op_exit_tb(); |
gen_op_exit_tb(); |
2185 |
if (s->cc_op != CC_OP_DYNAMIC) |
if (s->cc_op != CC_OP_DYNAMIC) |
2186 |
gen_op_set_cc_op(s->cc_op); |
gen_op_set_cc_op(s->cc_op); |
2187 |
if (tb_num) |
if (tb_num) |
2188 |
gen_op_goto_tb1(); |
gen_op_goto_tb1(TBPARAM(tb)); |
2189 |
else |
else |
2190 |
gen_op_goto_tb0(); |
gen_op_goto_tb0(TBPARAM(tb)); |
2191 |
gen_jmp_im(eip); |
gen_jmp_im(eip); |
2192 |
gen_op_movl_T0_im((long)tb + tb_num); |
gen_op_movl_T0_im((long)tb + tb_num); |
2193 |
gen_op_exit_tb(); |
gen_op_exit_tb(); |