summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/from_brain.rs128
1 files changed, 128 insertions, 0 deletions
diff --git a/tests/from_brain.rs b/tests/from_brain.rs
index dae984f..fdf52b4 100644
--- a/tests/from_brain.rs
+++ b/tests/from_brain.rs
@@ -1580,6 +1580,134 @@ fn inst_1110() {
test_display(&0b1110_1000_011_10100_11_000110_111_10110u32.to_le_bytes(), "{ R23:22 = vmpywouh(R21:20, R7:6):rnd:sat }");
*/
+ test_invalid(&0b1110_1011_000_10100_11_000110_000_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_display(&0b1110_1011_000_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = sfsub(R20, R6) }");
+ test_display(&0b1110_1011_000_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 = sfadd(R20, R6) }");
+ test_display(&0b1110_1011_010_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = sfmpy(R20, R6) }");
+ test_display(&0b1110_1011_100_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = sfmax(R20, R6) }");
+ test_display(&0b1110_1011_100_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = sfmin(R20, R6) }");
+ test_display(&0b1110_1011_110_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = sffixupn(R20, R6) }");
+ test_display(&0b1110_1011_110_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = sffixupd(R20, R6) }");
+ test_display(&0b1110_1011_111_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22,P1 = sfrecipa(R20, R6) }");
+
+ test_display(&0b1110_1100_000_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L) }");
+ test_display(&0b1110_1100_000_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H) }");
+ test_display(&0b1110_1100_000_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L) }");
+ test_display(&0b1110_1100_000_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H) }");
+ test_display(&0b1110_1100_000_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L):sat }");
+ test_display(&0b1110_1100_000_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H):sat }");
+ test_display(&0b1110_1100_000_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L):sat }");
+ test_display(&0b1110_1100_000_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H):sat }");
+ test_display(&0b1110_1100_001_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L):rnd }");
+ test_display(&0b1110_1100_001_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H):rnd }");
+ test_display(&0b1110_1100_001_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L):rnd }");
+ test_display(&0b1110_1100_001_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H):rnd }");
+ test_display(&0b1110_1100_001_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L):rnd:sat }");
+ test_display(&0b1110_1100_001_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H):rnd:sat }");
+ test_display(&0b1110_1100_001_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L):rnd:sat }");
+ test_display(&0b1110_1100_001_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H):rnd:sat }");
+ test_display(&0b1110_1100_100_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L):<<1 }");
+ test_display(&0b1110_1100_100_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H):<<1 }");
+ test_display(&0b1110_1100_100_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L):<<1 }");
+ test_display(&0b1110_1100_100_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H):<<1 }");
+ test_display(&0b1110_1100_100_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L):<<1:sat }");
+ test_display(&0b1110_1100_100_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H):<<1:sat }");
+ test_display(&0b1110_1100_100_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L):<<1:sat }");
+ test_display(&0b1110_1100_100_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H):<<1:sat }");
+ test_display(&0b1110_1100_101_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L):<<1:rnd }");
+ test_display(&0b1110_1100_101_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H):<<1:rnd }");
+ test_display(&0b1110_1100_101_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L):<<1:rnd }");
+ test_display(&0b1110_1100_101_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H):<<1:rnd }");
+ test_display(&0b1110_1100_101_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.L):<<1:rnd:sat }");
+ test_display(&0b1110_1100_101_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 = mpy(R20.L, R6.H):<<1:rnd:sat }");
+ test_display(&0b1110_1100_101_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.L):<<1:rnd:sat }");
+ test_display(&0b1110_1100_101_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 = mpy(R20.H, R6.H):<<1:rnd:sat }");
+
+ test_display(&0b1110_1101_000_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = mpyi(R20, R6) }");
+ test_display(&0b1110_1101_101_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6.H):<<1:sat }");
+ test_display(&0b1110_1101_111_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6):<<1:sat }");
+ test_display(&0b1110_1101_000_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6) }");
+ test_display(&0b1110_1101_001_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6):rnd }");
+ test_display(&0b1110_1101_010_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpyu(R20, R6) }");
+ test_display(&0b1110_1101_011_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpysu(R20, R6) }");
+ test_display(&0b1110_1101_101_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6.L):<<1:sat }");
+ test_display(&0b1110_1101_101_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6):<<1 }");
+ test_display(&0b1110_1101_101_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6.H):<<1:rnd:sat }");
+ test_display(&0b1110_1101_111_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 = mpy(R20, R6.L):<<1:rnd:sat }");
+
+ test_display(&0b1110_1101_001_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = cmpy(R20, R6):rnd:sat }");
+ test_display(&0b1110_1101_011_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = cmpy(R20, R6*):rnd:sat }");
+ test_display(&0b1110_1101_001_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 = vmpyh(R20, R6):rnd:sat }");
+ test_display(&0b1110_1101_101_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = cmpy(R20, R6):<<1:rnd:sat }");
+ test_display(&0b1110_1101_111_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 = cmpy(R20, R6*):<<1:rnd:sat }");
+ test_display(&0b1110_1101_101_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 = vmpyh(R20, R6):<<1:rnd:sat }");
+
+ test_display(&0b1110_1110_000_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.L) }");
+ test_display(&0b1110_1110_000_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.H) }");
+ test_display(&0b1110_1110_000_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.L) }");
+ test_display(&0b1110_1110_000_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.H) }");
+ test_display(&0b1110_1110_000_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.L):sat }");
+ test_display(&0b1110_1110_000_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.H):sat }");
+ test_display(&0b1110_1110_000_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.L):sat }");
+ test_display(&0b1110_1110_000_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.H):sat }");
+ test_display(&0b1110_1110_001_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.L) }");
+ test_display(&0b1110_1110_001_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.H) }");
+ test_display(&0b1110_1110_001_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.L) }");
+ test_display(&0b1110_1110_001_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.H) }");
+ test_display(&0b1110_1110_001_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.L):sat }");
+ test_display(&0b1110_1110_001_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.H):sat }");
+ test_display(&0b1110_1110_001_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.L):sat }");
+ test_display(&0b1110_1110_001_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.H):sat }");
+ test_display(&0b1110_1110_100_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.L):<<1 }");
+ test_display(&0b1110_1110_100_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.H):<<1 }");
+ test_display(&0b1110_1110_100_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.L):<<1 }");
+ test_display(&0b1110_1110_100_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.H):<<1 }");
+ test_display(&0b1110_1110_100_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.L):<<1:sat }");
+ test_display(&0b1110_1110_100_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 += mpy(R20.L, R6.H):<<1:sat }");
+ test_display(&0b1110_1110_100_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.L):<<1:sat }");
+ test_display(&0b1110_1110_100_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 += mpy(R20.H, R6.H):<<1:sat }");
+ test_display(&0b1110_1110_101_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.L):<<1 }");
+ test_display(&0b1110_1110_101_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.H):<<1 }");
+ test_display(&0b1110_1110_101_10100_11_000110_010_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.L):<<1 }");
+ test_display(&0b1110_1110_101_10100_11_000110_011_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.H):<<1 }");
+ test_display(&0b1110_1110_101_10100_11_000110_100_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.L):<<1:sat }");
+ test_display(&0b1110_1110_101_10100_11_000110_101_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.L, R6.H):<<1:sat }");
+ test_display(&0b1110_1110_101_10100_11_000110_110_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.L):<<1:sat }");
+ test_display(&0b1110_1110_101_10100_11_000110_111_10110u32.to_le_bytes(), "{ R22 -= mpy(R20.H, R6.H):<<1:sat }");
+
+ test_invalid(&0b1110_1110_010_10100_11_000110_000_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_010_10100_11_000110_001_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_010_10100_11_000110_010_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_010_10100_11_000110_011_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_010_10100_11_000110_100_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_010_10100_11_000110_101_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_010_10100_11_000110_110_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_010_10100_11_000110_111_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_000_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_001_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_010_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_011_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_100_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_101_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_110_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_011_10100_11_000110_111_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_000_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_001_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_010_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_011_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_100_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_101_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_110_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_110_10100_11_000110_111_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_000_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_001_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_010_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_011_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_100_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_101_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_110_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+ test_invalid(&0b1110_1110_111_10100_11_000110_111_10110u32.to_le_bytes(), DecodeError::InvalidOpcode);
+
test_display(&0b1110_1111_000_10100_11_000110_000_10110u32.to_le_bytes(), "{ R22 += mpyi(R20, R6) }");
test_display(&0b1110_1111_000_10100_11_000110_001_10110u32.to_le_bytes(), "{ R22 += add(R20, R6) }");
test_invalid(&0b1110_1111_000_10100_11_000110_010_10110u32.to_le_bytes(), DecodeError::InvalidOperand);