assembler_zacas_tests.cpp
1 #include <catch/catch.hpp> 2 3 #include <biscuit/assembler.hpp> 4 5 #include "assembler_test_utils.hpp" 6 7 using namespace biscuit; 8 9 TEST_CASE("AMOCAS.D", "[Zacas]") { 10 uint32_t value = 0; 11 auto as = MakeAssembler64(value); 12 13 as.AMOCAS_D(Ordering::None, x31, x7, x15); 14 REQUIRE(value == 0x2877BFAF); 15 16 as.RewindBuffer(); 17 18 as.AMOCAS_D(Ordering::AQ, x31, x7, x15); 19 REQUIRE(value == 0x2C77BFAF); 20 21 as.RewindBuffer(); 22 23 as.AMOCAS_D(Ordering::RL, x31, x7, x15); 24 REQUIRE(value == 0x2A77BFAF); 25 26 as.RewindBuffer(); 27 28 as.AMOCAS_D(Ordering::AQRL, x31, x7, x15); 29 REQUIRE(value == 0x2E77BFAF); 30 } 31 32 TEST_CASE("AMOCAS.Q", "[Zacas]") { 33 uint32_t value = 0; 34 auto as = MakeAssembler64(value); 35 36 as.AMOCAS_Q(Ordering::None, x30, x6, x14); 37 REQUIRE(value == 0x28674F2F); 38 39 as.RewindBuffer(); 40 41 as.AMOCAS_Q(Ordering::AQ, x30, x6, x14); 42 REQUIRE(value == 0x2C674F2F); 43 44 as.RewindBuffer(); 45 46 as.AMOCAS_Q(Ordering::RL, x30, x6, x14); 47 REQUIRE(value == 0x2A674F2F); 48 49 as.RewindBuffer(); 50 51 as.AMOCAS_Q(Ordering::AQRL, x30, x6, x14); 52 REQUIRE(value == 0x2E674F2F); 53 } 54 55 TEST_CASE("AMOCAS.W", "[Zacas]") { 56 uint32_t value = 0; 57 auto as = MakeAssembler64(value); 58 59 as.AMOCAS_W(Ordering::None, x31, x7, x15); 60 REQUIRE(value == 0x2877AFAF); 61 62 as.RewindBuffer(); 63 64 as.AMOCAS_W(Ordering::AQ, x31, x7, x15); 65 REQUIRE(value == 0x2C77AFAF); 66 67 as.RewindBuffer(); 68 69 as.AMOCAS_W(Ordering::RL, x31, x7, x15); 70 REQUIRE(value == 0x2A77AFAF); 71 72 as.RewindBuffer(); 73 74 as.AMOCAS_W(Ordering::AQRL, x31, x7, x15); 75 REQUIRE(value == 0x2E77AFAF); 76 }