| 77 | } |
| 78 | |
| 79 | U32 idiv16(CPU* cpu, S16 src) { |
| 80 | S32 num = (S32)(((U32)DX << 16) | AX); |
| 81 | |
| 82 | if (src==0) { |
| 83 | cpu->prepareException(EXCEPTION_DIVIDE, 0); |
| 84 | return 0; |
| 85 | } |
| 86 | S32 quo=num/src; |
| 87 | S16 rem=(S16)(num % src); |
| 88 | S16 quo16s=(S16)quo; |
| 89 | if (quo!=(S32)quo16s) { |
| 90 | cpu->prepareException(EXCEPTION_DIVIDE, 1); |
| 91 | return 0; |
| 92 | } |
| 93 | DX=rem; |
| 94 | AX=quo16s; |
| 95 | return 1; |
| 96 | } |
| 97 | |
| 98 | U32 div32(CPU* cpu, U32 src) { |
| 99 | U64 num = ((U64)EDX << 32) | EAX; |
no test coverage detected