diff options
author | Victor Khimenko <khim@google.com> | 2023-04-21 12:39:40 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-04-21 12:39:40 +0000 |
commit | 4822f4322ac33b090c48b0b6b6033155caa624e2 (patch) | |
tree | a076320347f30694dd7f815ea3c7ef0519645811 | |
parent | d0acef2e613590395a755c97eb9740686b1a7dfa (diff) | |
parent | 77233039396513a90f828585d7ab8c7457216abf (diff) | |
download | binary_translation-4822f4322ac33b090c48b0b6b6033155caa624e2.tar.gz |
Merge "interp: Tests for Rounding modes."
-rw-r--r-- | interpreter/riscv64/interpreter_test.cc | 214 |
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 |