Mercurial > repos > blastem
comparison z80_to_x86.c @ 301:6e15509a1257
Compare src_op.mode with the correct constant in shift/rotate instructions
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 08 May 2013 23:03:18 -0700 |
parents | 9adc1dce39bf |
children | 3b831fe32c15 |
comparison
equal
deleted
inserted
replaced
300:9adc1dce39bf | 301:6e15509a1257 |
---|---|
887 } else { | 887 } else { |
888 src_op.mode = Z80_UNUSED; | 888 src_op.mode = Z80_UNUSED; |
889 dst = translate_z80_reg(inst, &dst_op, dst, opts); | 889 dst = translate_z80_reg(inst, &dst_op, dst, opts); |
890 } | 890 } |
891 dst = rol_ir(dst, 1, dst_op.base, SZ_B); | 891 dst = rol_ir(dst, 1, dst_op.base, SZ_B); |
892 if (src_op.mode != Z80_UNUSED) { | 892 if (src_op.mode != MODE_UNUSED) { |
893 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); | 893 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); |
894 } | 894 } |
895 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); | 895 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); |
896 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | 896 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); |
897 //TODO: Implement half-carry flag | 897 //TODO: Implement half-carry flag |
919 src_op.mode = Z80_UNUSED; | 919 src_op.mode = Z80_UNUSED; |
920 dst = translate_z80_reg(inst, &dst_op, dst, opts); | 920 dst = translate_z80_reg(inst, &dst_op, dst, opts); |
921 } | 921 } |
922 dst = bt_irdisp8(dst, 0, CONTEXT, zf_off(ZF_C), SZ_B); | 922 dst = bt_irdisp8(dst, 0, CONTEXT, zf_off(ZF_C), SZ_B); |
923 dst = rcl_ir(dst, 1, dst_op.base, SZ_B); | 923 dst = rcl_ir(dst, 1, dst_op.base, SZ_B); |
924 if (src_op.mode != Z80_UNUSED) { | 924 if (src_op.mode != MODE_UNUSED) { |
925 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); | 925 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); |
926 } | 926 } |
927 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); | 927 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); |
928 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | 928 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); |
929 //TODO: Implement half-carry flag | 929 //TODO: Implement half-carry flag |
950 } else { | 950 } else { |
951 src_op.mode = Z80_UNUSED; | 951 src_op.mode = Z80_UNUSED; |
952 dst = translate_z80_reg(inst, &dst_op, dst, opts); | 952 dst = translate_z80_reg(inst, &dst_op, dst, opts); |
953 } | 953 } |
954 dst = ror_ir(dst, 1, dst_op.base, SZ_B); | 954 dst = ror_ir(dst, 1, dst_op.base, SZ_B); |
955 if (src_op.mode != Z80_UNUSED) { | 955 if (src_op.mode != MODE_UNUSED) { |
956 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); | 956 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); |
957 } | 957 } |
958 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); | 958 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); |
959 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | 959 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); |
960 //TODO: Implement half-carry flag | 960 //TODO: Implement half-carry flag |
982 src_op.mode = Z80_UNUSED; | 982 src_op.mode = Z80_UNUSED; |
983 dst = translate_z80_reg(inst, &dst_op, dst, opts); | 983 dst = translate_z80_reg(inst, &dst_op, dst, opts); |
984 } | 984 } |
985 dst = bt_irdisp8(dst, 0, CONTEXT, zf_off(ZF_C), SZ_B); | 985 dst = bt_irdisp8(dst, 0, CONTEXT, zf_off(ZF_C), SZ_B); |
986 dst = rcr_ir(dst, 1, dst_op.base, SZ_B); | 986 dst = rcr_ir(dst, 1, dst_op.base, SZ_B); |
987 if (src_op.mode != Z80_UNUSED) { | 987 if (src_op.mode != MODE_UNUSED) { |
988 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); | 988 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); |
989 } | 989 } |
990 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); | 990 dst = setcc_rdisp8(dst, CC_C, CONTEXT, zf_off(ZF_C)); |
991 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | 991 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); |
992 //TODO: Implement half-carry flag | 992 //TODO: Implement half-carry flag |
1014 } else { | 1014 } else { |
1015 src_op.mode = Z80_UNUSED; | 1015 src_op.mode = Z80_UNUSED; |
1016 dst = translate_z80_reg(inst, &dst_op, dst, opts); | 1016 dst = translate_z80_reg(inst, &dst_op, dst, opts); |
1017 } | 1017 } |
1018 dst = shl_ir(dst, 1, dst_op.base, SZ_B); | 1018 dst = shl_ir(dst, 1, dst_op.base, SZ_B); |
1019 if (src_op.mode != Z80_UNUSED) { | 1019 if (src_op.mode != MODE_UNUSED) { |
1020 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); | 1020 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); |
1021 } | 1021 } |
1022 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | 1022 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); |
1023 //TODO: Implement half-carry flag | 1023 //TODO: Implement half-carry flag |
1024 dst = cmp_ir(dst, 0, dst_op.base, SZ_B); | 1024 dst = cmp_ir(dst, 0, dst_op.base, SZ_B); |
1044 } else { | 1044 } else { |
1045 src_op.mode = Z80_UNUSED; | 1045 src_op.mode = Z80_UNUSED; |
1046 dst = translate_z80_reg(inst, &dst_op, dst, opts); | 1046 dst = translate_z80_reg(inst, &dst_op, dst, opts); |
1047 } | 1047 } |
1048 dst = sar_ir(dst, 1, dst_op.base, SZ_B); | 1048 dst = sar_ir(dst, 1, dst_op.base, SZ_B); |
1049 if (src_op.mode != Z80_UNUSED) { | 1049 if (src_op.mode != MODE_UNUSED) { |
1050 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); | 1050 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); |
1051 } | 1051 } |
1052 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | 1052 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); |
1053 //TODO: Implement half-carry flag | 1053 //TODO: Implement half-carry flag |
1054 dst = cmp_ir(dst, 0, dst_op.base, SZ_B); | 1054 dst = cmp_ir(dst, 0, dst_op.base, SZ_B); |
1074 } else { | 1074 } else { |
1075 src_op.mode = Z80_UNUSED; | 1075 src_op.mode = Z80_UNUSED; |
1076 dst = translate_z80_reg(inst, &dst_op, dst, opts); | 1076 dst = translate_z80_reg(inst, &dst_op, dst, opts); |
1077 } | 1077 } |
1078 dst = shr_ir(dst, 1, dst_op.base, SZ_B); | 1078 dst = shr_ir(dst, 1, dst_op.base, SZ_B); |
1079 if (src_op.mode != Z80_UNUSED) { | 1079 if (src_op.mode != MODE_UNUSED) { |
1080 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); | 1080 dst = mov_rr(dst, dst_op.base, src_op.base, SZ_B); |
1081 } | 1081 } |
1082 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); | 1082 dst = mov_irdisp8(dst, 0, CONTEXT, zf_off(ZF_N), SZ_B); |
1083 //TODO: Implement half-carry flag | 1083 //TODO: Implement half-carry flag |
1084 dst = cmp_ir(dst, 0, dst_op.base, SZ_B); | 1084 dst = cmp_ir(dst, 0, dst_op.base, SZ_B); |