diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-04-26 20:36:11 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2005-04-26 20:36:11 +0000 |
commit | e50e6a20192616b93d94be316556deb001e4f477 (patch) | |
tree | 5b5554cce68103cce6f0e54719bbdd741068ddfd /target-arm/op.c | |
parent | 430116a1d8acbc0ac843517b57f70b75fe56d9ae (diff) |
better arm conditionnal execution implementation (Paul Brook)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1399 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-arm/op.c')
-rw-r--r-- | target-arm/op.c | 37 |
1 files changed, 21 insertions, 16 deletions
diff --git a/target-arm/op.c b/target-arm/op.c index f4cbb6e662..08afa2f7cf 100644 --- a/target-arm/op.c +++ b/target-arm/op.c @@ -251,104 +251,109 @@ void OPPROTO op_logic_T1_cc(void) void OPPROTO op_test_eq(void) { if (env->NZF == 0) - JUMP_TB(op_test_eq, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1);; FORCE_RET(); } void OPPROTO op_test_ne(void) { if (env->NZF != 0) - JUMP_TB(op_test_ne, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1);; FORCE_RET(); } void OPPROTO op_test_cs(void) { if (env->CF != 0) - JUMP_TB(op_test_cs, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_cc(void) { if (env->CF == 0) - JUMP_TB(op_test_cc, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_mi(void) { if ((env->NZF & 0x80000000) != 0) - JUMP_TB(op_test_mi, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_pl(void) { if ((env->NZF & 0x80000000) == 0) - JUMP_TB(op_test_pl, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_vs(void) { if ((env->VF & 0x80000000) != 0) - JUMP_TB(op_test_vs, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_vc(void) { if ((env->VF & 0x80000000) == 0) - JUMP_TB(op_test_vc, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_hi(void) { if (env->CF != 0 && env->NZF != 0) - JUMP_TB(op_test_hi, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_ls(void) { if (env->CF == 0 || env->NZF == 0) - JUMP_TB(op_test_ls, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_ge(void) { if (((env->VF ^ env->NZF) & 0x80000000) == 0) - JUMP_TB(op_test_ge, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_lt(void) { if (((env->VF ^ env->NZF) & 0x80000000) != 0) - JUMP_TB(op_test_lt, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_gt(void) { if (env->NZF != 0 && ((env->VF ^ env->NZF) & 0x80000000) == 0) - JUMP_TB(op_test_gt, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } void OPPROTO op_test_le(void) { if (env->NZF == 0 || ((env->VF ^ env->NZF) & 0x80000000) != 0) - JUMP_TB(op_test_le, PARAM1, 0, PARAM2); + GOTO_LABEL_PARAM(1); FORCE_RET(); } -void OPPROTO op_jmp(void) +void OPPROTO op_jmp0(void) { - JUMP_TB(op_jmp, PARAM1, 1, PARAM2); + JUMP_TB(op_jmp0, PARAM1, 0, PARAM2); +} + +void OPPROTO op_jmp1(void) +{ + JUMP_TB(op_jmp1, PARAM1, 1, PARAM2); } void OPPROTO op_exit_tb(void) |