aboutsummaryrefslogtreecommitdiffhomepage
path: root/externals/biscuit/tests/src/assembler_rva_tests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'externals/biscuit/tests/src/assembler_rva_tests.cpp')
-rw-r--r--externals/biscuit/tests/src/assembler_rva_tests.cpp513
1 files changed, 513 insertions, 0 deletions
diff --git a/externals/biscuit/tests/src/assembler_rva_tests.cpp b/externals/biscuit/tests/src/assembler_rva_tests.cpp
new file mode 100644
index 00000000..b972a666
--- /dev/null
+++ b/externals/biscuit/tests/src/assembler_rva_tests.cpp
@@ -0,0 +1,513 @@
+#include <catch/catch.hpp>
+
+#include <biscuit/assembler.hpp>
+
+#include "assembler_test_utils.hpp"
+
+using namespace biscuit;
+
+TEST_CASE("AMOADD.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOADD_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x0077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOADD_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x0477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOADD_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x0277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOADD_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x0677BFAF);
+}
+
+TEST_CASE("AMOADD.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOADD_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x0077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOADD_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x0477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOADD_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x0277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOADD_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x0677AFAF);
+}
+
+TEST_CASE("AMOAND.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOAND_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x6077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOAND_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x6477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOAND_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x6277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOAND_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x6677BFAF);
+}
+
+TEST_CASE("AMOAND.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOAND_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x6077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOAND_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x6477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOAND_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x6277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOAND_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x6677AFAF);
+}
+
+TEST_CASE("AMOMAX.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOMAX_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0xA077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAX_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0xA477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAX_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0xA277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAX_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0xA677BFAF);
+}
+
+TEST_CASE("AMOMAX.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOMAX_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0xA077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAX_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0xA477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAX_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0xA277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAX_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0xA677AFAF);
+}
+
+TEST_CASE("AMOMAXU.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOMAXU_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0xE077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAXU_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0xE477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAXU_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0xE277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAXU_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0xE677BFAF);
+}
+
+TEST_CASE("AMOMAXU.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOMAXU_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0xE077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAXU_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0xE477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAXU_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0xE277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMAXU_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0xE677AFAF);
+}
+
+TEST_CASE("AMOMIN.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOMIN_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x8077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMIN_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x8477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMIN_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x8277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMIN_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x8677BFAF);
+}
+
+TEST_CASE("AMOMIN.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOMIN_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x8077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMIN_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x8477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMIN_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x8277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMIN_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x8677AFAF);
+}
+
+TEST_CASE("AMOMINU.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOMINU_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0xC077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMINU_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0xC477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMINU_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0xC277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMINU_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0xC677BFAF);
+}
+
+TEST_CASE("AMOMINU.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOMINU_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0xC077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMINU_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0xC477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMINU_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0xC277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOMINU_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0xC677AFAF);
+}
+
+TEST_CASE("AMOOR.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOOR_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x4077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOOR_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x4477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOOR_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x4277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOOR_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x4677BFAF);
+}
+
+TEST_CASE("AMOOR.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOOR_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x4077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOOR_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x4477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOOR_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x4277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOOR_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x4677AFAF);
+}
+
+TEST_CASE("AMOSWAP.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOSWAP_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x0877BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOSWAP_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x0C77BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOSWAP_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x0A77BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOSWAP_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x0E77BFAF);
+}
+
+TEST_CASE("AMOSWAP.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOSWAP_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x0877AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOSWAP_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x0C77AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOSWAP_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x0A77AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOSWAP_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x0E77AFAF);
+}
+
+TEST_CASE("AMOXOR.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.AMOXOR_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x2077BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOXOR_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x2477BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOXOR_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x2277BFAF);
+
+ as.RewindBuffer();
+
+ as.AMOXOR_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x2677BFAF);
+}
+
+TEST_CASE("AMOXOR.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.AMOXOR_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x2077AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOXOR_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x2477AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOXOR_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x2277AFAF);
+
+ as.RewindBuffer();
+
+ as.AMOXOR_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x2677AFAF);
+}
+
+TEST_CASE("LR.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.LR_D(Ordering::None, x31, x15);
+ REQUIRE(value == 0x1007BFAF);
+
+ as.RewindBuffer();
+
+ as.LR_D(Ordering::AQ, x31, x15);
+ REQUIRE(value == 0x1407BFAF);
+
+ as.RewindBuffer();
+
+ as.LR_D(Ordering::RL, x31, x15);
+ REQUIRE(value == 0x1207BFAF);
+
+ as.RewindBuffer();
+
+ as.LR_D(Ordering::AQRL, x31, x15);
+ REQUIRE(value == 0x1607BFAF);
+}
+
+TEST_CASE("LR.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.LR_W(Ordering::None, x31, x15);
+ REQUIRE(value == 0x1007AFAF);
+
+ as.RewindBuffer();
+
+ as.LR_W(Ordering::AQ, x31, x15);
+ REQUIRE(value == 0x1407AFAF);
+
+ as.RewindBuffer();
+
+ as.LR_W(Ordering::RL, x31, x15);
+ REQUIRE(value == 0x1207AFAF);
+
+ as.RewindBuffer();
+
+ as.LR_W(Ordering::AQRL, x31, x15);
+ REQUIRE(value == 0x1607AFAF);
+}
+
+TEST_CASE("SC.D", "[rv64a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler64(value);
+
+ as.SC_D(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x1877BFAF);
+
+ as.RewindBuffer();
+
+ as.SC_D(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x1C77BFAF);
+
+ as.RewindBuffer();
+
+ as.SC_D(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x1A77BFAF);
+
+ as.RewindBuffer();
+
+ as.SC_D(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x1E77BFAF);
+}
+
+TEST_CASE("SC.W", "[rv32a]") {
+ uint32_t value = 0;
+ auto as = MakeAssembler32(value);
+
+ as.SC_W(Ordering::None, x31, x7, x15);
+ REQUIRE(value == 0x1877AFAF);
+
+ as.RewindBuffer();
+
+ as.SC_W(Ordering::AQ, x31, x7, x15);
+ REQUIRE(value == 0x1C77AFAF);
+
+ as.RewindBuffer();
+
+ as.SC_W(Ordering::RL, x31, x7, x15);
+ REQUIRE(value == 0x1A77AFAF);
+
+ as.RewindBuffer();
+
+ as.SC_W(Ordering::AQRL, x31, x7, x15);
+ REQUIRE(value == 0x1E77AFAF);
+}