diff options
author | Victor Khimenko <khim@google.com> | 2023-04-21 14:07:10 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-04-21 14:07:10 +0000 |
commit | 55dfe35cdff7f7d891f39c25f5f6e3708a4567f9 (patch) | |
tree | a076320347f30694dd7f815ea3c7ef0519645811 | |
parent | d9cda790db7cc1681a722be35844b78b4f1ba5a6 (diff) | |
parent | 6d529b577407613b3e91064665cc4debeb0a8ee2 (diff) | |
download | binary_translation-55dfe35cdff7f7d891f39c25f5f6e3708a4567f9.tar.gz |
Merge "interp: Tests for Rounding modes." am: 4822f4322a am: 6d529b5774
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/binary_translation/+/2547230
Change-Id: Ia667ad35a6e5cdfcbd0e40d762eec059f7a55a62
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-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 |