aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Khimenko <khim@google.com>2023-04-21 15:33:45 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2023-04-21 15:33:45 +0000
commit671db6f863993d5386e001466a8598df041eabe1 (patch)
treea076320347f30694dd7f815ea3c7ef0519645811
parent5a966a90e31ed6f63d069851b0adebaa83b6507d (diff)
parent1bf3e03bcb66e3a87a0bc3c69affd8ee56a45a00 (diff)
downloadbinary_translation-aml_uwb_341513070.tar.gz
Merge "interp: Tests for Rounding modes." am: 4822f4322a am: 6d529b5774 am: 55dfe35cdf am: 1bf3e03bcbaml_wif_341711020aml_wif_341610000aml_wif_341510000aml_wif_341410080aml_wif_341310010aml_wif_341110010aml_wif_341011010aml_wif_340913010aml_uwb_341710010aml_uwb_341513070aml_uwb_341511050aml_uwb_341310300aml_uwb_341310030aml_uwb_341111010aml_uwb_341011000aml_tet_341712060aml_tet_341610020aml_tet_341511010aml_tet_341411060aml_tet_341310230aml_tet_341112070aml_tet_341010040aml_tet_340913030aml_swc_341711000aml_swc_341619000aml_swc_341513600aml_swc_341312300aml_swc_341312020aml_swc_341111000aml_swc_341011020aml_swc_340922010aml_sta_341710000aml_sta_341615000aml_sta_341511040aml_sta_341410000aml_sta_341311010aml_sta_341114000aml_sta_341111000aml_sta_341010020aml_sta_340912000aml_sta_340911000aml_sdk_341710000aml_sdk_341510000aml_sdk_341410000aml_sdk_341110080aml_sdk_341110000aml_sdk_341010000aml_sdk_340912010aml_sch_341510000aml_res_341510000aml_res_341410010aml_res_341311030aml_res_341110000aml_res_340912000aml_per_341711000aml_per_341614000aml_per_341510010aml_per_341410020aml_per_341311000aml_per_341110020aml_per_341110010aml_per_341011100aml_per_341011020aml_per_340916010aml_odp_341717000aml_odp_341610000aml_neu_341510000aml_neu_341010080aml_neu_341010000aml_net_341710020aml_net_341610030aml_net_341510050aml_net_341510000aml_net_341411030aml_net_341311010aml_net_341310020aml_net_341111030aml_net_341014000aml_net_340913000aml_mpr_341713020aml_mpr_341614010aml_mpr_341511070aml_mpr_341411070aml_mpr_341313030aml_mpr_341111030aml_mpr_341111020aml_mpr_341015090aml_mpr_341015030aml_mpr_340919000aml_med_341711000aml_med_341619000aml_med_341513600aml_med_341312300aml_med_341312020aml_med_341111000aml_med_341011000aml_med_340922010aml_ips_341611000aml_ips_341510000aml_ips_340914280aml_ips_340914200aml_ips_340914000aml_ext_341716000aml_ext_341620040aml_ext_341518010aml_ext_341414010aml_ext_341317010aml_ext_341131030aml_ext_341027030aml_doc_341713000aml_doc_341610010aml_doc_341510050aml_doc_341312010aml_doc_341112000aml_doc_341012000aml_doc_340916000aml_con_341614000aml_con_341511080aml_con_341410300aml_con_341310090aml_con_341110000aml_cbr_341710000aml_cbr_341610000aml_cbr_341510010aml_cbr_341410010aml_cbr_341311010aml_cbr_341110000aml_cbr_341011000aml_cbr_340914000aml_ase_341510000aml_ase_341410000aml_ase_341310010aml_ase_341113000aml_ase_340913000aml_art_341711000aml_art_341615020aml_art_341514450aml_art_341514410aml_art_341411300aml_art_341311100aml_art_341110110aml_art_341110060aml_art_341010050aml_art_340915060aml_ads_341720000aml_ads_341615050aml_ads_341517040aml_ads_341413000aml_ads_341316030aml_ads_341131050aml_ads_341027030aml_ads_340915050aml_adb_341520010aml_adb_341517070aml_adb_340912530aml_adb_340912350aml_adb_340912200aml_adb_340912000android14-mainline-wifi-releaseandroid14-mainline-uwb-releaseandroid14-mainline-tethering-releaseandroid14-mainline-sdkext-releaseandroid14-mainline-resolv-releaseandroid14-mainline-permission-releaseandroid14-mainline-os-statsd-releaseandroid14-mainline-networking-releaseandroid14-mainline-mediaprovider-releaseandroid14-mainline-media-swcodec-releaseandroid14-mainline-media-releaseandroid14-mainline-extservices-releaseandroid14-mainline-conscrypt-releaseandroid14-mainline-cellbroadcast-releaseandroid14-mainline-art-releaseandroid14-mainline-appsearch-releaseandroid14-mainline-adservices-releaseandroid14-mainline-adbd-release
Original change: https://android-review.googlesource.com/c/platform/frameworks/libs/binary_translation/+/2547230 Change-Id: I95893eb18f85771718a98fd3a8235dea2af66f12 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