Diff for /qemu/target-m68k/translate.c between versions 1.1.1.7 and 1.1.1.8

version 1.1.1.7, 2018/04/24 18:41:02 version 1.1.1.8, 2018/04/24 19:02:59
Line 25 Line 25
   
 #include "config.h"  #include "config.h"
 #include "cpu.h"  #include "cpu.h"
 #include "exec-all.h"  
 #include "disas.h"  #include "disas.h"
 #include "tcg-op.h"  #include "tcg-op.h"
 #include "qemu-log.h"  #include "qemu-log.h"
Line 171  typedef void (*disas_proc)(DisasContext  Line 170  typedef void (*disas_proc)(DisasContext 
   static void disas_##name (DisasContext *s, uint16_t insn)    static void disas_##name (DisasContext *s, uint16_t insn)
 #endif  #endif
   
 /* FIXME: Remove this.  */  
 #define gen_im32(val) tcg_const_i32(val)  
   
 /* Generate a load from the specified address.  Narrow values are  /* Generate a load from the specified address.  Narrow values are
    sign extended to full register width.  */     sign extended to full register width.  */
 static inline TCGv gen_load(DisasContext * s, int opsize, TCGv addr, int sign)  static inline TCGv gen_load(DisasContext * s, int opsize, TCGv addr, int sign)
Line 339  static TCGv gen_lea_indexed(DisasContext Line 335  static TCGv gen_lea_indexed(DisasContext
         if ((ext & 0x80) == 0) {          if ((ext & 0x80) == 0) {
             /* base not suppressed */              /* base not suppressed */
             if (IS_NULL_QREG(base)) {              if (IS_NULL_QREG(base)) {
                 base = gen_im32(offset + bd);                  base = tcg_const_i32(offset + bd);
                 bd = 0;                  bd = 0;
             }              }
             if (!IS_NULL_QREG(add)) {              if (!IS_NULL_QREG(add)) {
Line 355  static TCGv gen_lea_indexed(DisasContext Line 351  static TCGv gen_lea_indexed(DisasContext
                 add = tmp;                  add = tmp;
             }              }
         } else {          } else {
             add = gen_im32(bd);              add = tcg_const_i32(bd);
         }          }
         if ((ext & 3) != 0) {          if ((ext & 3) != 0) {
             /* memory indirect */              /* memory indirect */
Line 536  static TCGv gen_lea(DisasContext *s, uin Line 532  static TCGv gen_lea(DisasContext *s, uin
         case 0: /* Absolute short.  */          case 0: /* Absolute short.  */
             offset = ldsw_code(s->pc);              offset = ldsw_code(s->pc);
             s->pc += 2;              s->pc += 2;
             return gen_im32(offset);              return tcg_const_i32(offset);
         case 1: /* Absolute long.  */          case 1: /* Absolute long.  */
             offset = read_im32(s);              offset = read_im32(s);
             return gen_im32(offset);              return tcg_const_i32(offset);
         case 2: /* pc displacement  */          case 2: /* pc displacement  */
             offset = s->pc;              offset = s->pc;
             offset += ldsw_code(s->pc);              offset += ldsw_code(s->pc);
             s->pc += 2;              s->pc += 2;
             return gen_im32(offset);              return tcg_const_i32(offset);
         case 3: /* pc index+displacement.  */          case 3: /* pc index+displacement.  */
             return gen_lea_indexed(s, opsize, NULL_QREG);              return gen_lea_indexed(s, opsize, NULL_QREG);
         case 4: /* Immediate.  */          case 4: /* Immediate.  */
Line 861  static void gen_jmp_tb(DisasContext *s,  Line 857  static void gen_jmp_tb(DisasContext *s, 
                (s->pc & TARGET_PAGE_MASK) == (dest & TARGET_PAGE_MASK)) {                 (s->pc & TARGET_PAGE_MASK) == (dest & TARGET_PAGE_MASK)) {
         tcg_gen_goto_tb(n);          tcg_gen_goto_tb(n);
         tcg_gen_movi_i32(QREG_PC, dest);          tcg_gen_movi_i32(QREG_PC, dest);
         tcg_gen_exit_tb((long)tb + n);          tcg_gen_exit_tb((tcg_target_long)tb + n);
     } else {      } else {
         gen_jmp_im(s, dest);          gen_jmp_im(s, dest);
         tcg_gen_exit_tb(0);          tcg_gen_exit_tb(0);
Line 1209  DISAS_INSN(arith_im) Line 1205  DISAS_INSN(arith_im)
         break;          break;
     case 2: /* subi */      case 2: /* subi */
         tcg_gen_mov_i32(dest, src1);          tcg_gen_mov_i32(dest, src1);
         gen_helper_xflag_lt(QREG_CC_X, dest, gen_im32(im));          gen_helper_xflag_lt(QREG_CC_X, dest, tcg_const_i32(im));
         tcg_gen_subi_i32(dest, dest, im);          tcg_gen_subi_i32(dest, dest, im);
         gen_update_cc_add(dest, gen_im32(im));          gen_update_cc_add(dest, tcg_const_i32(im));
         s->cc_op = CC_OP_SUB;          s->cc_op = CC_OP_SUB;
         break;          break;
     case 3: /* addi */      case 3: /* addi */
         tcg_gen_mov_i32(dest, src1);          tcg_gen_mov_i32(dest, src1);
         tcg_gen_addi_i32(dest, dest, im);          tcg_gen_addi_i32(dest, dest, im);
         gen_update_cc_add(dest, gen_im32(im));          gen_update_cc_add(dest, tcg_const_i32(im));
         gen_helper_xflag_lt(QREG_CC_X, dest, gen_im32(im));          gen_helper_xflag_lt(QREG_CC_X, dest, tcg_const_i32(im));
         s->cc_op = CC_OP_ADD;          s->cc_op = CC_OP_ADD;
         break;          break;
     case 5: /* eori */      case 5: /* eori */
Line 1228  DISAS_INSN(arith_im) Line 1224  DISAS_INSN(arith_im)
     case 6: /* cmpi */      case 6: /* cmpi */
         tcg_gen_mov_i32(dest, src1);          tcg_gen_mov_i32(dest, src1);
         tcg_gen_subi_i32(dest, dest, im);          tcg_gen_subi_i32(dest, dest, im);
         gen_update_cc_add(dest, gen_im32(im));          gen_update_cc_add(dest, tcg_const_i32(im));
         s->cc_op = CC_OP_SUB;          s->cc_op = CC_OP_SUB;
         break;          break;
     default:      default:
Line 1324  DISAS_INSN(clr) Line 1320  DISAS_INSN(clr)
     default:      default:
         abort();          abort();
     }      }
     DEST_EA(insn, opsize, gen_im32(0), NULL);      DEST_EA(insn, opsize, tcg_const_i32(0), NULL);
     gen_logic_cc(s, gen_im32(0));      gen_logic_cc(s, tcg_const_i32(0));
 }  }
   
 static TCGv gen_get_ccr(DisasContext *s)  static TCGv gen_get_ccr(DisasContext *s)
Line 1589  DISAS_INSN(jump) Line 1585  DISAS_INSN(jump)
     }      }
     if ((insn & 0x40) == 0) {      if ((insn & 0x40) == 0) {
         /* jsr */          /* jsr */
         gen_push(s, gen_im32(s->pc));          gen_push(s, tcg_const_i32(s->pc));
     }      }
     gen_jmp(s, tmp);      gen_jmp(s, tmp);
 }  }
Line 1617  DISAS_INSN(addsubq) Line 1613  DISAS_INSN(addsubq)
             tcg_gen_addi_i32(dest, dest, val);              tcg_gen_addi_i32(dest, dest, val);
         }          }
     } else {      } else {
         src2 = gen_im32(val);          src2 = tcg_const_i32(val);
         if (insn & 0x0100) {          if (insn & 0x0100) {
             gen_helper_xflag_lt(QREG_CC_X, dest, src2);              gen_helper_xflag_lt(QREG_CC_X, dest, src2);
             tcg_gen_subi_i32(dest, dest, val);              tcg_gen_subi_i32(dest, dest, val);
Line 1666  DISAS_INSN(branch) Line 1662  DISAS_INSN(branch)
     }      }
     if (op == 1) {      if (op == 1) {
         /* bsr */          /* bsr */
         gen_push(s, gen_im32(s->pc));          gen_push(s, tcg_const_i32(s->pc));
     }      }
     gen_flush_cc_op(s);      gen_flush_cc_op(s);
     if (op > 1) {      if (op > 1) {
Line 1757  DISAS_INSN(mov3q) Line 1753  DISAS_INSN(mov3q)
     val = (insn >> 9) & 7;      val = (insn >> 9) & 7;
     if (val == 0)      if (val == 0)
         val = -1;          val = -1;
     src = gen_im32(val);      src = tcg_const_i32(val);
     gen_logic_cc(s, src);      gen_logic_cc(s, src);
     DEST_EA(insn, OS_LONG, src, NULL);      DEST_EA(insn, OS_LONG, src, NULL);
 }  }
Line 1883  DISAS_INSN(shift_im) Line 1879  DISAS_INSN(shift_im)
     tmp = (insn >> 9) & 7;      tmp = (insn >> 9) & 7;
     if (tmp == 0)      if (tmp == 0)
         tmp = 8;          tmp = 8;
     shift = gen_im32(tmp);      shift = tcg_const_i32(tmp);
     /* No need to flush flags becuse we know we will set C flag.  */      /* No need to flush flags becuse we know we will set C flag.  */
     if (insn & 0x100) {      if (insn & 0x100) {
         gen_helper_shl_cc(reg, cpu_env, reg, shift);          gen_helper_shl_cc(reg, cpu_env, reg, shift);
Line 2191  DISAS_INSN(fpu) Line 2187  DISAS_INSN(fpu)
         switch ((ext >> 10) & 7) {          switch ((ext >> 10) & 7) {
         case 4: /* FPCR */          case 4: /* FPCR */
             /* Not implemented.  Always return zero.  */              /* Not implemented.  Always return zero.  */
             tmp32 = gen_im32(0);              tmp32 = tcg_const_i32(0);
             break;              break;
         case 1: /* FPIAR */          case 1: /* FPIAR */
         case 2: /* FPSR */          case 2: /* FPSR */
Line 2592  DISAS_INSN(mac) Line 2588  DISAS_INSN(mac)
         /* Skip the accumulate if the value is already saturated.  */          /* Skip the accumulate if the value is already saturated.  */
         l1 = gen_new_label();          l1 = gen_new_label();
         tmp = tcg_temp_new();          tmp = tcg_temp_new();
         gen_op_and32(tmp, QREG_MACSR, gen_im32(MACSR_PAV0 << acc));          gen_op_and32(tmp, QREG_MACSR, tcg_const_i32(MACSR_PAV0 << acc));
         gen_op_jmp_nz32(tmp, l1);          gen_op_jmp_nz32(tmp, l1);
     }      }
 #endif  #endif
Line 2626  DISAS_INSN(mac) Line 2622  DISAS_INSN(mac)
             /* Skip the accumulate if the value is already saturated.  */              /* Skip the accumulate if the value is already saturated.  */
             l1 = gen_new_label();              l1 = gen_new_label();
             tmp = tcg_temp_new();              tmp = tcg_temp_new();
             gen_op_and32(tmp, QREG_MACSR, gen_im32(MACSR_PAV0 << acc));              gen_op_and32(tmp, QREG_MACSR, tcg_const_i32(MACSR_PAV0 << acc));
             gen_op_jmp_nz32(tmp, l1);              gen_op_jmp_nz32(tmp, l1);
         }          }
 #endif  #endif
Line 3113  void cpu_dump_state(CPUState *env, FILE  Line 3109  void cpu_dump_state(CPUState *env, FILE 
     cpu_fprintf (f, "FPRESULT = %12g\n", *(double *)&env->fp_result);      cpu_fprintf (f, "FPRESULT = %12g\n", *(double *)&env->fp_result);
 }  }
   
 void gen_pc_load(CPUState *env, TranslationBlock *tb,  void restore_state_to_opc(CPUState *env, TranslationBlock *tb, int pc_pos)
                 unsigned long searched_pc, int pc_pos, void *puc)  
 {  {
     env->pc = gen_opc_pc[pc_pos];      env->pc = gen_opc_pc[pc_pos];
 }  }

Removed from v.1.1.1.7  
changed lines
  Added in v.1.1.1.8


unix.superglobalmegacorp.com