/[qemu]/qemu/target-i386/op.c
ViewVC logotype

Diff of /qemu/target-i386/op.c

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

revision 1.38 by bellard, Sat Jul 23 17:41:26 2005 UTC revision 1.39 by bellard, Sat Jul 23 20:21:38 2005 UTC
# Line 328  void OPPROTO op_imulq_T0_T1(void) Line 328  void OPPROTO op_imulq_T0_T1(void)
328  #endif  #endif
329    
330  /* division, flags are undefined */  /* division, flags are undefined */
 /* XXX: add exceptions for overflow */  
331    
332  void OPPROTO op_divb_AL_T0(void)  void OPPROTO op_divb_AL_T0(void)
333  {  {
# Line 339  void OPPROTO op_divb_AL_T0(void) Line 338  void OPPROTO op_divb_AL_T0(void)
338      if (den == 0) {      if (den == 0) {
339          raise_exception(EXCP00_DIVZ);          raise_exception(EXCP00_DIVZ);
340      }      }
341      q = (num / den) & 0xff;      q = (num / den);
342        if (q > 0xff)
343            raise_exception(EXCP00_DIVZ);
344        q &= 0xff;
345      r = (num % den) & 0xff;      r = (num % den) & 0xff;
346      EAX = (EAX & ~0xffff) | (r << 8) | q;      EAX = (EAX & ~0xffff) | (r << 8) | q;
347  }  }
# Line 353  void OPPROTO op_idivb_AL_T0(void) Line 355  void OPPROTO op_idivb_AL_T0(void)
355      if (den == 0) {      if (den == 0) {
356          raise_exception(EXCP00_DIVZ);          raise_exception(EXCP00_DIVZ);
357      }      }
358      q = (num / den) & 0xff;      q = (num / den);
359        if (q != (int8_t)q)
360            raise_exception(EXCP00_DIVZ);
361        q &= 0xff;
362      r = (num % den) & 0xff;      r = (num % den) & 0xff;
363      EAX = (EAX & ~0xffff) | (r << 8) | q;      EAX = (EAX & ~0xffff) | (r << 8) | q;
364  }  }
# Line 367  void OPPROTO op_divw_AX_T0(void) Line 372  void OPPROTO op_divw_AX_T0(void)
372      if (den == 0) {      if (den == 0) {
373          raise_exception(EXCP00_DIVZ);          raise_exception(EXCP00_DIVZ);
374      }      }
375      q = (num / den) & 0xffff;      q = (num / den);
376        if (q > 0xffff)
377            raise_exception(EXCP00_DIVZ);
378        q &= 0xffff;
379      r = (num % den) & 0xffff;      r = (num % den) & 0xffff;
380      EAX = (EAX & ~0xffff) | q;      EAX = (EAX & ~0xffff) | q;
381      EDX = (EDX & ~0xffff) | r;      EDX = (EDX & ~0xffff) | r;
# Line 382  void OPPROTO op_idivw_AX_T0(void) Line 390  void OPPROTO op_idivw_AX_T0(void)
390      if (den == 0) {      if (den == 0) {
391          raise_exception(EXCP00_DIVZ);          raise_exception(EXCP00_DIVZ);
392      }      }
393      q = (num / den) & 0xffff;      q = (num / den);
394        if (q != (int16_t)q)
395            raise_exception(EXCP00_DIVZ);
396        q &= 0xffff;
397      r = (num % den) & 0xffff;      r = (num % den) & 0xffff;
398      EAX = (EAX & ~0xffff) | q;      EAX = (EAX & ~0xffff) | q;
399      EDX = (EDX & ~0xffff) | r;      EDX = (EDX & ~0xffff) | r;

Legend:
Removed from v.1.38  
changed lines
  Added in v.1.39

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