aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Khimenko <khim@google.com>2023-04-21 13:26:46 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-21 13:26:46 +0000
commit6d529b577407613b3e91064665cc4debeb0a8ee2 (patch)
treea076320347f30694dd7f815ea3c7ef0519645811
parent2a828e653e27bb0d5a1f2dc659814967bc5157d6 (diff)
parent4822f4322ac33b090c48b0b6b6033155caa624e2 (diff)
downloadbinary_translation-6d529b577407613b3e91064665cc4debeb0a8ee2.tar.gz
Merge "interp: Tests for Rounding modes." am: 4822f4322a
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/binary_translation/+/2547230 Change-Id: I05348f82fbc45bdb22f353631339e635b8941c81 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--interpreter/riscv64/interpreter_test.cc214
1 files changed, 214 insertions, 0 deletions
diff --git a/interpreter/riscv64/interpreter_test.cc b/interpreter/riscv64/interpreter_test.cc
index adc13a66..b6edfc4f 100644
--- a/interpreter/riscv64/interpreter_test.cc
+++ b/interpreter/riscv64/interpreter_test.cc
@@ -641,6 +641,220 @@ TEST_F(Riscv64InterpreterTest, OpFpInstructions) {
{{bit_cast<uint64_t>(1.0), bit_cast<uint64_t>(2.0), bit_cast<uint64_t>(3.0)}});
}
+TEST_F(Riscv64InterpreterTest, RoundingModeTest) {
+ // FAdd.S
+ InterpretOpFp(0x003100d3,
+ // Test RNE
+ {{bit_cast<uint32_t>(1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000005f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000005f) | 0xffff'ffff'0000'0000}});
+ // FAdd.S
+ InterpretOpFp(0x003110d3,
+ // Test RTZ
+ {{bit_cast<uint32_t>(1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000001f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000001f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000}});
+ // FAdd.S
+ InterpretOpFp(0x003120d3,
+ // Test RDN
+ {{bit_cast<uint32_t>(1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000001f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000005f) | 0xffff'ffff'0000'0000}});
+ // FAdd.S
+ InterpretOpFp(0x003130d3,
+ // Test RUP
+ {{bit_cast<uint32_t>(1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000005f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000001f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000}});
+ // FAdd.S
+ InterpretOpFp(0x003140d3,
+ // Test RMM
+ {{bit_cast<uint32_t>(1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(1.0000005f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000001f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000002f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000},
+ {bit_cast<uint32_t>(-1.0000004f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-0.000000059604645f) | 0xffff'ffff'0000'0000,
+ bit_cast<uint32_t>(-1.0000005f) | 0xffff'ffff'0000'0000}});
+
+ // FAdd.D
+ InterpretOpFp(0x023100d3,
+ // Test RNE
+ {{bit_cast<uint64_t>(1.0000000000000002),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000004)},
+ {bit_cast<uint64_t>(1.0000000000000004),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000004)},
+ {bit_cast<uint64_t>(1.0000000000000007),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000009)},
+ {bit_cast<uint64_t>(-1.0000000000000002),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000004)},
+ {bit_cast<uint64_t>(-1.0000000000000004),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000004)},
+ {bit_cast<uint64_t>(-1.0000000000000007),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000009)}});
+ // FAdd.D
+ InterpretOpFp(0x023110d3,
+ // Test RTZ
+ {{bit_cast<uint64_t>(1.0000000000000002),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000002)},
+ {bit_cast<uint64_t>(1.0000000000000004),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000004)},
+ {bit_cast<uint64_t>(1.0000000000000007),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000007)},
+ {bit_cast<uint64_t>(-1.0000000000000002),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000002)},
+ {bit_cast<uint64_t>(-1.0000000000000004),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000004)},
+ {bit_cast<uint64_t>(-1.0000000000000007),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000007)}});
+ // FAdd.D
+ InterpretOpFp(0x023120d3,
+ // Test RDN
+ {{bit_cast<uint64_t>(1.0000000000000002),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000002)},
+ {bit_cast<uint64_t>(1.0000000000000004),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000004)},
+ {bit_cast<uint64_t>(1.0000000000000007),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000007)},
+ {bit_cast<uint64_t>(-1.0000000000000002),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000004)},
+ {bit_cast<uint64_t>(-1.0000000000000004),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000007)},
+ {bit_cast<uint64_t>(-1.0000000000000007),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000009)}});
+ // FAdd.D
+ InterpretOpFp(0x023130d3,
+ // Test RUP
+ {{bit_cast<uint64_t>(1.0000000000000002),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000004)},
+ {bit_cast<uint64_t>(1.0000000000000004),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000007)},
+ {bit_cast<uint64_t>(1.0000000000000007),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000009)},
+ {bit_cast<uint64_t>(-1.0000000000000002),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000002)},
+ {bit_cast<uint64_t>(-1.0000000000000004),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000004)},
+ {bit_cast<uint64_t>(-1.0000000000000007),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000007)}});
+ // FAdd.D
+ InterpretOpFp(0x023140d3,
+ // Test RMM
+ {{bit_cast<uint64_t>(1.0000000000000002),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000004)},
+ {bit_cast<uint64_t>(1.0000000000000004),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000007)},
+ {bit_cast<uint64_t>(1.0000000000000007),
+ bit_cast<uint64_t>(0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(1.0000000000000009)},
+ {bit_cast<uint64_t>(-1.0000000000000002),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000004)},
+ {bit_cast<uint64_t>(-1.0000000000000004),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000007)},
+ {bit_cast<uint64_t>(-1.0000000000000007),
+ bit_cast<uint64_t>(-0.00000000000000011102230246251565),
+ bit_cast<uint64_t>(-1.0000000000000009)}});
+}
+
TEST_F(Riscv64InterpreterTest, LoadInstructions) {
// Offset is always 8.
// Lbu