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 |
{ |
{ |
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 |
} |
} |
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 |
} |
} |
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; |
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; |