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) << 32;
128 let divisor = u64::from(inputs.divisor);
135 let resultu64 = dividend / divisor;
136 if resultu64 > u64::from(u32::max_value()) {
139 result = resultu64 as u32 as u64;
145 overflow: Some(OverflowFlags {
147 overflow32: overflow,
152 pub fn divwo(inputs: TestDivInput) -> TestDivResult {
153 let dividend = inputs.dividend as i32;
154 let divisor = inputs.divisor as i32;
157 if divisor == 0 || (divisor == -1 && dividend == i32::min_value()) {
161 result = (dividend / divisor) as u32 as u64;
166 overflow: Some(OverflowFlags {
168 overflow32: overflow,
173 pub fn divwuo(inputs: TestDivInput) -> TestDivResult {
174 let dividend = inputs.dividend as u32;
175 let divisor = inputs.divisor as u32;
182 result = (dividend / divisor) as u64;
187 overflow: Some(OverflowFlags {
189 overflow32: overflow,
194 pub fn modsd(inputs: TestDivInput) -> TestDivResult {
195 let dividend = inputs.dividend as i64;
196 let divisor = inputs.divisor as i64;
198 if divisor == 0 || (divisor == -1 && dividend == i64::min_value()) {
201 result = (dividend % divisor) as u64;
209 pub fn modud(inputs: TestDivInput) -> TestDivResult {
210 let dividend: u64 = inputs.dividend;
211 let divisor: u64 = inputs.divisor;
216 result = dividend % divisor;
224 pub fn modsw(inputs: TestDivInput) -> TestDivResult {
225 let dividend = inputs.dividend as i32;
226 let divisor = inputs.divisor as i32;
228 if divisor == 0 || (divisor == -1 && dividend == i32::min_value()) {
231 result = (dividend % divisor) as u32 as u64;
239 pub fn moduw(inputs: TestDivInput) -> TestDivResult {
240 let dividend = inputs.dividend as u32;
241 let divisor = inputs.divisor as u32;
246 result = (dividend % divisor) as u64;