comparison 68kinst.c @ 136:e64554246d11

Fix some bugs in decoding cmp
author Mike Pavone <pavone@retrodev.com>
date Sun, 30 Dec 2012 18:40:33 -0800
parents ab50421b1b7a
children 18796a3b0fe2
comparison
equal deleted inserted replaced
135:a81c548cf353 136:e64554246d11
845 //CMPM or CMPA.l or EOR 845 //CMPM or CMPA.l or EOR
846 if (size == OPSIZE_INVALID) { 846 if (size == OPSIZE_INVALID) {
847 decoded->extra.size = OPSIZE_LONG; 847 decoded->extra.size = OPSIZE_LONG;
848 decoded->dst.addr_mode = MODE_AREG; 848 decoded->dst.addr_mode = MODE_AREG;
849 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); 849 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);
850 istream = m68k_decode_op(istream, size, &(decoded->src)); 850 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src));
851 } else { 851 } else {
852 istream = m68k_decode_op(istream, size, &(decoded->dst)); 852 istream = m68k_decode_op(istream, size, &(decoded->dst));
853 if (decoded->src.addr_mode == MODE_AREG) { 853 if (decoded->src.addr_mode == MODE_AREG) {
854 //CMPM 854 //CMPM
855 decoded->src.addr_mode = decoded->dst.addr_mode = MODE_AREG_POSTINC; 855 decoded->src.addr_mode = decoded->dst.addr_mode = MODE_AREG_POSTINC;
871 } else { 871 } else {
872 decoded->extra.size = size; 872 decoded->extra.size = size;
873 decoded->dst.addr_mode = MODE_REG; 873 decoded->dst.addr_mode = MODE_REG;
874 } 874 }
875 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream); 875 decoded->dst.params.regs.pri = m68k_reg_quick_field(*istream);
876 istream = m68k_decode_op(istream, size, &(decoded->src)); 876 istream = m68k_decode_op(istream, decoded->extra.size, &(decoded->src));
877 } 877 }
878 break; 878 break;
879 case AND_MUL_ABCD_EXG: 879 case AND_MUL_ABCD_EXG:
880 //page 575 for summary 880 //page 575 for summary
881 //EXG opmodes: 881 //EXG opmodes: