From 6056bc4afa03771ce3c03430838562843fa45d0e Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Wed, 24 Jul 2024 20:48:37 -0500 Subject: [PATCH] nak: Add tests for nak_builder::iadd64 Part-of: --- src/nouveau/compiler/nak/hw_tests.rs | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/nouveau/compiler/nak/hw_tests.rs b/src/nouveau/compiler/nak/hw_tests.rs index a28ddcdf81a..2e179e2c9b5 100644 --- a/src/nouveau/compiler/nak/hw_tests.rs +++ b/src/nouveau/compiler/nak/hw_tests.rs @@ -611,6 +611,44 @@ fn test_op_prmt() { test_foldable_op(op); } +#[test] +fn test_iadd64() { + let run = RunSingleton::get(); + let invocations = 100; + + let mut b = TestShaderBuilder::new(run.sm.as_ref()); + + let x = SSARef::from([ + b.ld_test_data(0, MemType::B32)[0], + b.ld_test_data(4, MemType::B32)[0], + ]); + let y = SSARef::from([ + b.ld_test_data(8, MemType::B32)[0], + b.ld_test_data(12, MemType::B32)[0], + ]); + let dst = b.iadd64(x.into(), y.into(), 0.into()); + b.st_test_data(16, MemType::B32, dst[0].into()); + b.st_test_data(20, MemType::B32, dst[1].into()); + + let bin = b.compile(); + + let mut a = Acorn::new(); + let mut data = Vec::new(); + for _ in 0..invocations { + data.push([a.get_u32(), a.get_u32(), a.get_u32(), a.get_u32(), 0, 0]); + } + + run.run.run(&bin, &mut data).unwrap(); + + for d in &data { + let x = u64::from(d[0]) | (u64::from(d[1]) << 32); + let y = u64::from(d[2]) | (u64::from(d[3]) << 32); + let dst = x.wrapping_add(y); + assert_eq!(d[4], dst as u32); + assert_eq!(d[5], (dst >> 32) as u32); + } +} + #[test] fn test_isetp64() { let run = RunSingleton::get();