Revision 46525e1f target-sparc/translate.c
b/target-sparc/translate.c | ||
---|---|---|
598 | 598 |
} |
599 | 599 |
} |
600 | 600 |
|
601 |
static inline void gen_branch2(DisasContext *dc, long tb, target_ulong pc1, target_ulong pc2) |
|
601 |
static inline void gen_branch2(DisasContext *dc, target_ulong pc1, |
|
602 |
target_ulong pc2) |
|
602 | 603 |
{ |
603 | 604 |
int l1; |
604 | 605 |
|
... | ... | |
612 | 613 |
gen_goto_tb(dc, 1, pc2, pc2 + 4); |
613 | 614 |
} |
614 | 615 |
|
615 |
static inline void gen_branch_a(DisasContext *dc, long tb, target_ulong pc1, target_ulong pc2) |
|
616 |
static inline void gen_branch_a(DisasContext *dc, target_ulong pc1, |
|
617 |
target_ulong pc2) |
|
616 | 618 |
{ |
617 | 619 |
int l1; |
618 | 620 |
|
... | ... | |
626 | 628 |
gen_goto_tb(dc, 1, pc2 + 4, pc2 + 8); |
627 | 629 |
} |
628 | 630 |
|
629 |
static inline void gen_branch(DisasContext *dc, long tb, target_ulong pc, target_ulong npc) |
|
631 |
static inline void gen_branch(DisasContext *dc, target_ulong pc, |
|
632 |
target_ulong npc) |
|
630 | 633 |
{ |
631 | 634 |
gen_goto_tb(dc, 0, pc, npc); |
632 | 635 |
} |
633 | 636 |
|
634 |
static inline void gen_generic_branch(DisasContext *dc, target_ulong npc1, target_ulong npc2)
|
|
637 |
static inline void gen_generic_branch(target_ulong npc1, target_ulong npc2) |
|
635 | 638 |
{ |
636 | 639 |
int l1, l2; |
637 | 640 |
|
... | ... | |
651 | 654 |
static inline void flush_T2(DisasContext * dc) |
652 | 655 |
{ |
653 | 656 |
if (dc->npc == JUMP_PC) { |
654 |
gen_generic_branch(dc, dc->jump_pc[0], dc->jump_pc[1]);
|
|
657 |
gen_generic_branch(dc->jump_pc[0], dc->jump_pc[1]); |
|
655 | 658 |
dc->npc = DYNAMIC_PC; |
656 | 659 |
} |
657 | 660 |
} |
... | ... | |
659 | 662 |
static inline void save_npc(DisasContext * dc) |
660 | 663 |
{ |
661 | 664 |
if (dc->npc == JUMP_PC) { |
662 |
gen_generic_branch(dc, dc->jump_pc[0], dc->jump_pc[1]);
|
|
665 |
gen_generic_branch(dc->jump_pc[0], dc->jump_pc[1]); |
|
663 | 666 |
dc->npc = DYNAMIC_PC; |
664 | 667 |
} else if (dc->npc != DYNAMIC_PC) { |
665 | 668 |
gen_movl_npc_im(dc->npc); |
... | ... | |
675 | 678 |
static inline void gen_mov_pc_npc(DisasContext * dc) |
676 | 679 |
{ |
677 | 680 |
if (dc->npc == JUMP_PC) { |
678 |
gen_generic_branch(dc, dc->jump_pc[0], dc->jump_pc[1]);
|
|
681 |
gen_generic_branch(dc->jump_pc[0], dc->jump_pc[1]); |
|
679 | 682 |
gen_op_mov_pc_npc(); |
680 | 683 |
dc->pc = DYNAMIC_PC; |
681 | 684 |
} else if (dc->npc == DYNAMIC_PC) { |
... | ... | |
861 | 864 |
flush_T2(dc); |
862 | 865 |
gen_cond[cc][cond](); |
863 | 866 |
if (a) { |
864 |
gen_branch_a(dc, (long)dc->tb, target, dc->npc);
|
|
867 |
gen_branch_a(dc, target, dc->npc); |
|
865 | 868 |
dc->is_br = 1; |
866 | 869 |
} else { |
867 | 870 |
dc->pc = dc->npc; |
... | ... | |
900 | 903 |
flush_T2(dc); |
901 | 904 |
gen_fcond[cc][cond](); |
902 | 905 |
if (a) { |
903 |
gen_branch_a(dc, (long)dc->tb, target, dc->npc);
|
|
906 |
gen_branch_a(dc, target, dc->npc); |
|
904 | 907 |
dc->is_br = 1; |
905 | 908 |
} else { |
906 | 909 |
dc->pc = dc->npc; |
... | ... | |
921 | 924 |
flush_T2(dc); |
922 | 925 |
gen_cond_reg(cond); |
923 | 926 |
if (a) { |
924 |
gen_branch_a(dc, (long)dc->tb, target, dc->npc);
|
|
927 |
gen_branch_a(dc, target, dc->npc); |
|
925 | 928 |
dc->is_br = 1; |
926 | 929 |
} else { |
927 | 930 |
dc->pc = dc->npc; |
... | ... | |
3123 | 3126 |
gen_op_next_insn(); |
3124 | 3127 |
} else if (dc->npc == JUMP_PC) { |
3125 | 3128 |
/* we can do a static jump */ |
3126 |
gen_branch2(dc, (long)dc->tb, dc->jump_pc[0], dc->jump_pc[1]);
|
|
3129 |
gen_branch2(dc, dc->jump_pc[0], dc->jump_pc[1]); |
|
3127 | 3130 |
dc->is_br = 1; |
3128 | 3131 |
} else { |
3129 | 3132 |
dc->pc = dc->npc; |
... | ... | |
3249 | 3252 |
if (dc->pc != DYNAMIC_PC && |
3250 | 3253 |
(dc->npc != DYNAMIC_PC && dc->npc != JUMP_PC)) { |
3251 | 3254 |
/* static PC and NPC: we can use direct chaining */ |
3252 |
gen_branch(dc, (long)tb, dc->pc, dc->npc);
|
|
3255 |
gen_branch(dc, dc->pc, dc->npc); |
|
3253 | 3256 |
} else { |
3254 | 3257 |
if (dc->pc != DYNAMIC_PC) |
3255 | 3258 |
gen_jmp_im(dc->pc); |
Also available in: Unified diff