1 use crate::{OverflowFlags, TestDivInput, TestDivResult};
3 pub fn divdeo(inputs: TestDivInput) -> TestDivResult {
4 let dividend = i128::from(inputs.dividend as i64) << 64;
5 let divisor = i128::from(inputs.divisor as i64);
8 if divisor == 0 || (divisor == -1 && dividend == i128::min_value()) {
12 let result128 = dividend / divisor;
13 if result128 as i64 as i128 != result128 {
17 result = result128 as u64;
23 overflow: Some(OverflowFlags {
30 pub fn divdeuo(inputs: TestDivInput) -> TestDivResult {
31 let dividend = u128::from(inputs.dividend) << 64;
32 let divisor = u128::from(inputs.divisor);
39 let resultu128 = dividend / divisor;
40 if resultu128 > u128::from(u64::max_value()) {
44 result = resultu128 as u64;
50 overflow: Some(OverflowFlags {
57 pub fn divdo(inputs: TestDivInput) -> TestDivResult {
58 let dividend = inputs.dividend as i64;
59 let divisor = inputs.divisor as i64;
62 if divisor == 0 || (divisor == -1 && dividend == i64::min_value()) {
66 result = (dividend / divisor) as u64;
71 overflow: Some(OverflowFlags {
78 pub fn divduo(inputs: TestDivInput) -> TestDivResult {
79 let dividend: u64 = inputs.dividend;
80 let divisor: u64 = inputs.divisor;
87 result = dividend / divisor;
92 overflow: Some(OverflowFlags {
99 pub fn divweo(inputs: TestDivInput) -> TestDivResult {
100 let dividend = i64::from(inputs.dividend as i32) << 32;
101 let divisor = i64::from(inputs.divisor as i32);
104 if divisor == 0 || (divisor == -1 && dividend == i64::min_value()) {
108 let result64 = dividend / divisor;
109 if result64 as i32 as i64 != result64 {
113 result = result64 as u32 as u64;
119 overflow: Some(OverflowFlags {
121 overflow32: overflow,
126 pub fn divweuo(inputs: TestDivInput) -> TestDivResult {
127 let dividend = u64::from(inputs.dividend as u32) << 32;
128 let divisor = u64::from(inputs.divisor as u32);
135 let resultu64 = dividend / divisor;
136 if resultu64 > u64::from(u32::max_value()) {
140 result = resultu64 as u32 as u64;
146 overflow: Some(OverflowFlags {
148 overflow32: overflow,
153 pub fn divwo(inputs: TestDivInput) -> TestDivResult {
154 let dividend = inputs.dividend as i32;
155 let divisor = inputs.divisor as i32;
158 if divisor == 0 || (divisor == -1 && dividend == i32::min_value()) {
162 result = (dividend / divisor) as u32 as u64;
167 overflow: Some(OverflowFlags {
169 overflow32: overflow,
174 pub fn divwuo(inputs: TestDivInput) -> TestDivResult {
175 let dividend = inputs.dividend as u32;
176 let divisor = inputs.divisor as u32;
183 result = (dividend / divisor) as u64;
188 overflow: Some(OverflowFlags {
190 overflow32: overflow,
195 pub fn modsd(inputs: TestDivInput) -> TestDivResult {
196 let dividend = inputs.dividend as i64;
197 let divisor = inputs.divisor as i64;
199 if divisor == 0 || (divisor == -1 && dividend == i64::min_value()) {
202 result = (dividend % divisor) as u64;
210 pub fn modud(inputs: TestDivInput) -> TestDivResult {
211 let dividend: u64 = inputs.dividend;
212 let divisor: u64 = inputs.divisor;
217 result = dividend % divisor;
225 pub fn modsw(inputs: TestDivInput) -> TestDivResult {
226 let dividend = inputs.dividend as i32;
227 let divisor = inputs.divisor as i32;
229 if divisor == 0 || (divisor == -1 && dividend == i32::min_value()) {
232 result = (dividend % divisor) as u64;
240 pub fn moduw(inputs: TestDivInput) -> TestDivResult {
241 let dividend = inputs.dividend as u32;
242 let divisor = inputs.divisor as u32;
247 result = (dividend % divisor) as u64;