Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.77 KB | None | 0 0
  1. uint32_t *EMIT_moveq(uint32_t *ptr, uint16_t **m68k_ptr)
  2. {
  3.     uint16_t opcode = BE16((*m68k_ptr)[0]);
  4.     int8_t value = opcode & 0xff;
  5.     uint8_t reg = (opcode >> 9) & 7;
  6.     uint8_t tmp_reg = RA_MapM68kRegisterForWrite(&ptr, reg);
  7.  
  8.     (*m68k_ptr)++;
  9.  
  10.     *ptr++ = movs_immed_s8(tmp_reg, value);
  11.     ptr = EMIT_AdvancePC(ptr, 2);
  12.  
  13.     uint8_t mask = M68K_GetSRMask(BE16((*m68k_ptr)[0]));
  14.     uint8_t update_mask = (SR_C | SR_V | SR_Z | SR_N) & ~mask;
  15.  
  16.     if (update_mask)
  17.     {
  18.         *ptr++ = bic_immed(REG_SR, REG_SR, update_mask);
  19.         if (update_mask & SR_N)
  20.             *ptr++ = orr_cc_immed(ARM_CC_MI, REG_SR, REG_SR, SR_N);
  21.         if (update_mask & SR_Z)
  22.             *ptr++ = orr_cc_immed(ARM_CC_EQ, REG_SR, REG_SR, SR_Z);
  23.     }
  24.  
  25.  
  26.     return ptr;
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement