diff options
author | Victor Khimenko <khim@google.com> | 2023-04-21 15:33:37 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2023-04-21 15:33:37 +0000 |
commit | d95592f8a30c9de44a18a3e550638e6ecc845e9d (patch) | |
tree | a076320347f30694dd7f815ea3c7ef0519645811 | |
parent | 51e7bc32f4cc82a501071851bf73c614f2afce2e (diff) | |
parent | 1bf3e03bcb66e3a87a0bc3c69affd8ee56a45a00 (diff) | |
download | binary_translation-d95592f8a30c9de44a18a3e550638e6ecc845e9d.tar.gz |
Merge "interp: Tests for Rounding modes." am: 4822f4322a am: 6d529b5774 am: 55dfe35cdf am: 1bf3e03bcbandroid-14.0.0_r45android-14.0.0_r44android-14.0.0_r43android-14.0.0_r42android-14.0.0_r41android-14.0.0_r40android-14.0.0_r39android-14.0.0_r38android14-d2-s5-releaseandroid14-d2-s4-releaseandroid14-d2-s3-releaseandroid14-d2-s2-releaseandroid14-d2-s1-releaseandroid14-d2-release
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/binary_translation/+/2547230
Change-Id: Iacea4896f917cd20e0d276c0ca1271ea6a4dc043
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 |