diff --git a/tests/A64/a64.cpp b/tests/A64/a64.cpp
index 2f2e2f62..79520569 100644
--- a/tests/A64/a64.cpp
+++ b/tests/A64/a64.cpp
@@ -228,6 +228,66 @@ TEST_CASE("A64: REV16", "[a64]") {
     REQUIRE(jit.GetPC() == 8);
 }
 
+TEST_CASE("A64: SSHL", "[a64]") {
+    A64TestEnv env;
+    A64::Jit jit{A64::UserConfig{&env}};
+
+    env.code_mem.emplace_back(0x4e204484);  // SSHL v4.16b, v4.16b, v0.16b
+    env.code_mem.emplace_back(0x4e6144a5);  // SSHL  v5.8h,  v5.8h,  v1.8h
+    env.code_mem.emplace_back(0x4ea244c6);  // SSHL  v6.4s,  v6.4s,  v2.4s
+    env.code_mem.emplace_back(0x4ee344e7);  // SSHL  v7.2d,  v7.2d,  v3.2d
+    env.code_mem.emplace_back(0x14000000);  // B .
+
+    jit.SetPC(0);
+    jit.SetVector(0, {0xEFF0FAFBFCFDFEFF, 0x0807050403020100});
+    jit.SetVector(1, {0xFFFCFFFDFFFEFFFF, 0x0004000300020001});
+    jit.SetVector(2, {0xFFFFFFFDFFFFFFFE, 0x0000000200000001});
+    jit.SetVector(3, {0xFFFFFFFFFFFFFFFF, 0x0000000000000001});
+
+    jit.SetVector(4, {0x8080808080808080, 0xFFFFFFFFFFFFFFFF});
+    jit.SetVector(5, {0x8000800080008000, 0xFFFFFFFFFFFFFFFF});
+    jit.SetVector(6, {0x8000000080000000, 0xFFFFFFFFFFFFFFFF});
+    jit.SetVector(7, {0x8000000000000000, 0xFFFFFFFFFFFFFFFF});
+
+    env.ticks_left = 4;
+    jit.Run();
+
+    REQUIRE(jit.GetVector(4) == Vector{0xfffffefcf8f0e0c0, 0x0080e0f0f8fcfeff});
+    REQUIRE(jit.GetVector(5) == Vector{0xf800f000e000c000, 0xfff0fff8fffcfffe});
+    REQUIRE(jit.GetVector(6) == Vector{0xf0000000e0000000, 0xfffffffcfffffffe});
+    REQUIRE(jit.GetVector(7) == Vector{0xc000000000000000, 0xfffffffffffffffe});
+}
+
+TEST_CASE("A64: USHL", "[a64]") {
+    A64TestEnv env;
+    A64::Jit jit{A64::UserConfig{&env}};
+
+    env.code_mem.emplace_back(0x6e204484);  // USHL v4.16b, v4.16b, v0.16b
+    env.code_mem.emplace_back(0x6e6144a5);  // USHL  v5.8h,  v5.8h,  v1.8h
+    env.code_mem.emplace_back(0x6ea244c6);  // USHL  v6.4s,  v6.4s,  v2.4s
+    env.code_mem.emplace_back(0x6ee344e7);  // USHL  v7.2d,  v7.2d,  v3.2d
+    env.code_mem.emplace_back(0x14000000);  // B .
+
+    jit.SetPC(0);
+    jit.SetVector(0, {0x100F0E0D0C0B0A09, 0x0807050403020100});
+    jit.SetVector(1, {0x0008000700060005, 0x0004000300020001});
+    jit.SetVector(2, {0x0000000400000003, 0x0000000200000001});
+    jit.SetVector(3, {0x0000000000000002, 0x0000000000000001});
+
+    jit.SetVector(4, {0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF});
+    jit.SetVector(5, {0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF});
+    jit.SetVector(6, {0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF});
+    jit.SetVector(7, {0xFFFFFFFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF});
+
+    env.ticks_left = 4;
+    jit.Run();
+
+    REQUIRE(jit.GetVector(4) == Vector{0x0000000000000000, 0x0080e0f0f8fcfeff});
+    REQUIRE(jit.GetVector(5) == Vector{0xff00ff80ffc0ffe0, 0xfff0fff8fffcfffe});
+    REQUIRE(jit.GetVector(6) == Vector{0xfffffff0fffffff8, 0xfffffffcfffffffe});
+    REQUIRE(jit.GetVector(7) == Vector{0xfffffffffffffffc, 0xfffffffffffffffe});
+}
+
 TEST_CASE("A64: XTN", "[a64]") {
     A64TestEnv env;
     A64::Jit jit{A64::UserConfig{&env}};