| 96 | } |
| 97 | |
| 98 | U32 div32(CPU* cpu, U32 src) { |
| 99 | U64 num = ((U64)EDX << 32) | EAX; |
| 100 | |
| 101 | if (src==0) { |
| 102 | cpu->prepareException(EXCEPTION_DIVIDE, 0); |
| 103 | return 0; |
| 104 | } |
| 105 | |
| 106 | U64 quo=num/src; |
| 107 | U32 rem=(U32)(num % src); |
| 108 | U32 quo32=(U32)quo; |
| 109 | if (quo!=(U64)quo32) { |
| 110 | cpu->prepareException(EXCEPTION_DIVIDE, 1); |
| 111 | return 0; |
| 112 | } |
| 113 | EDX=rem; |
| 114 | EAX=quo32; |
| 115 | return 1; |
| 116 | } |
| 117 | |
| 118 | U32 idiv32(CPU* cpu, S32 src) { |
| 119 | S64 num = (S64)(((U64)EDX << 32) | EAX); |
no test coverage detected