/[qemu]/qemu/op-arm.c
ViewVC logotype

Diff of /qemu/op-arm.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by bellard, Sun Jun 15 19:42:24 2003 UTC revision 1.2 by bellard, Wed Jul 9 17:10:32 2003 UTC
# Line 154  void OPPROTO op_adcl_T0_T1_cc(void) Line 154  void OPPROTO op_adcl_T0_T1_cc(void)
154      FORCE_RET();      FORCE_RET();
155  }  }
156    
157  #define OPSUB(sub, sbc, T0, T1)                 \  #define OPSUB(sub, sbc, res, T0, T1)            \
158                                                  \                                                  \
159  void OPPROTO op_ ## sub ## l_T0_T1(void)        \  void OPPROTO op_ ## sub ## l_T0_T1(void)        \
160  {                                               \  {                                               \
161      T0 -= T1;                                   \      res = T0 - T1;                              \
162  }                                               \  }                                               \
163                                                  \                                                  \
164  void OPPROTO op_ ## sub ## l_T0_T1_cc(void)     \  void OPPROTO op_ ## sub ## l_T0_T1_cc(void)     \
# Line 167  void OPPROTO op_ ## sub ## l_T0_T1_cc(vo Line 167  void OPPROTO op_ ## sub ## l_T0_T1_cc(vo
167      src1 = T0;                                  \      src1 = T0;                                  \
168      T0 -= T1;                                   \      T0 -= T1;                                   \
169      env->NZF = T0;                              \      env->NZF = T0;                              \
170      env->CF = src1 < T1;                        \      env->CF = src1 >= T1;                       \
171      env->VF = (src1 ^ T1) & (src1 ^ T0);        \      env->VF = (src1 ^ T1) & (src1 ^ T0);        \
172        res = T0;                                   \
173  }                                               \  }                                               \
174                                                  \                                                  \
175  void OPPROTO op_ ## sbc ## l_T0_T1(void)        \  void OPPROTO op_ ## sbc ## l_T0_T1(void)        \
176  {                                               \  {                                               \
177      T0 = T0 - T1 + env->CF - 1;                 \      res = T0 - T1 + env->CF - 1;                \
178  }                                               \  }                                               \
179                                                  \                                                  \
180  void OPPROTO op_ ## sbc ## l_T0_T1_cc(void)     \  void OPPROTO op_ ## sbc ## l_T0_T1_cc(void)     \
# Line 182  void OPPROTO op_ ## sbc ## l_T0_T1_cc(vo Line 183  void OPPROTO op_ ## sbc ## l_T0_T1_cc(vo
183      src1 = T0;                                  \      src1 = T0;                                  \
184      if (!env->CF) {                             \      if (!env->CF) {                             \
185          T0 = T0 - T1 - 1;                       \          T0 = T0 - T1 - 1;                       \
186          T0 += T1;                               \          env->CF = src1 >= T1;                   \
         env->CF = src1 < T1;                    \  
187      } else {                                    \      } else {                                    \
188          T0 = T0 - T1;                           \          T0 = T0 - T1;                           \
189          env->CF = src1 <= T1;                   \          env->CF = src1 > T1;                    \
190      }                                           \      }                                           \
191      env->VF = (src1 ^ T1) & (src1 ^ T0);        \      env->VF = (src1 ^ T1) & (src1 ^ T0);        \
192      env->NZF = T0;                              \      env->NZF = T0;                              \
193        res = T0;                                   \
194      FORCE_RET();                                \      FORCE_RET();                                \
195  }  }
196    
197  OPSUB(sub, sbc, T0, T1)  OPSUB(sub, sbc, T0, T0, T1)
198    
199  OPSUB(rsb, rsc, T1, T0)  OPSUB(rsb, rsc, T0, T1, T0)
200    
201  void OPPROTO op_andl_T0_T1(void)  void OPPROTO op_andl_T0_T1(void)
202  {  {
# Line 222  void OPPROTO op_notl_T1(void) Line 223  void OPPROTO op_notl_T1(void)
223      T1 = ~T1;      T1 = ~T1;
224  }  }
225    
226  void OPPROTO op_logic_cc(void)  void OPPROTO op_logic_T0_cc(void)
227  {  {
228      env->NZF = T0;      env->NZF = T0;
229  }  }
230    
231    void OPPROTO op_logic_T1_cc(void)
232    {
233        env->NZF = T1;
234    }
235    
236  #define EIP (env->regs[15])  #define EIP (env->regs[15])
237    
238  void OPPROTO op_test_eq(void)  void OPPROTO op_test_eq(void)
# Line 334  void OPPROTO op_jmp(void) Line 340  void OPPROTO op_jmp(void)
340    
341  void OPPROTO op_movl_T0_psr(void)  void OPPROTO op_movl_T0_psr(void)
342  {  {
343      int ZF;      T0 = compute_cpsr();
     ZF = (env->NZF == 0);  
     T0 = env->cpsr | (env->NZF & 0x80000000) | (ZF << 30) |  
         (env->CF << 29) | ((env->VF & 0x80000000) >> 3);  
344  }  }
345    
346  /* NOTE: N = 1 and Z = 1 cannot be stored currently */  /* NOTE: N = 1 and Z = 1 cannot be stored currently */

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26