comparison 68kinst.c @ 181:3b4ef459aa8d

Fix signed division with negative result, fix address reg destination with word-sized operand, fix cmpm decoding and code generation, fix unbalanced pop in bit instructions
author Mike Pavone <pavone@retrodev.com>
date Wed, 09 Jan 2013 21:08:37 -0800
parents e2918b5208eb
children 2f08d9e90a4c
comparison
equal deleted inserted replaced
180:8b846bcff6a2 181:3b4ef459aa8d
1004 istream = m68k_decode_op(istream, size, &(decoded->dst)); 1004 istream = m68k_decode_op(istream, size, &(decoded->dst));
1005 if (!istream) { 1005 if (!istream) {
1006 decoded->op = M68K_INVALID; 1006 decoded->op = M68K_INVALID;
1007 return start+1; 1007 return start+1;
1008 } 1008 }
1009 if (decoded->src.addr_mode == MODE_AREG) { 1009 decoded->extra.size = size;
1010 if (decoded->dst.addr_mode == MODE_AREG) {
1010 //CMPM 1011 //CMPM
1011 decoded->src.addr_mode = decoded->dst.addr_mode = MODE_AREG_POSTINC; 1012 decoded->src.addr_mode = decoded->dst.addr_mode = MODE_AREG_POSTINC;
1012 decoded->src.params.regs.pri = decoded->dst.params.regs.pri; 1013 decoded->src.params.regs.pri = decoded->dst.params.regs.pri;
1013 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); 1014 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);
1014 } else { 1015 } else {
1015 //EOR 1016 //EOR
1016 decoded->op = M68K_EOR; 1017 decoded->op = M68K_EOR;
1017 decoded->extra.size = size;
1018 decoded->src.addr_mode = MODE_REG; 1018 decoded->src.addr_mode = MODE_REG;
1019 decoded->src.params.regs.pri = m68k_reg_quick_field(*istream); 1019 decoded->src.params.regs.pri = m68k_reg_quick_field(*istream);
1020 } 1020 }
1021 } 1021 }
1022 } else { 1022 } else {