diff --git a/crypto/fipsmodule/digest/digest.c b/crypto/fipsmodule/digest/digest.c
index f499c46..52197c1 100644
--- a/crypto/fipsmodule/digest/digest.c
+++ b/crypto/fipsmodule/digest/digest.c
@@ -185,6 +185,10 @@
 void EVP_MD_CTX_move(EVP_MD_CTX *out, EVP_MD_CTX *in) {
   EVP_MD_CTX_cleanup(out);
   // While not guaranteed, |EVP_MD_CTX| is currently safe to move with |memcpy|.
+  // bssl-crypto currently relies on this, however, so if we change this, we
+  // need to box the |HMAC_CTX|. (Relying on this is only fine because we assume
+  // BoringSSL and bssl-crypto will always be updated atomically. We do not
+  // allow any version skew between the two.)
   OPENSSL_memcpy(out, in, sizeof(EVP_MD_CTX));
   EVP_MD_CTX_init(in);
 }
diff --git a/include/openssl/span.h b/include/openssl/span.h
index aa8f801..044ada1 100644
--- a/include/openssl/span.h
+++ b/include/openssl/span.h
@@ -40,20 +40,7 @@
                 "Span<T> must be derived from SpanBase<const T>");
 
   friend bool operator==(Span<T> lhs, Span<T> rhs) {
-    // MSVC issues warning C4996 because std::equal is unsafe. The pragma to
-    // suppress the warning mysteriously has no effect, hence this
-    // implementation. See
-    // https://msdn.microsoft.com/en-us/library/aa985974.aspx.
-    if (lhs.size() != rhs.size()) {
-      return false;
-    }
-    for (T *l = lhs.begin(), *r = rhs.begin(); l != lhs.end() && r != rhs.end();
-         ++l, ++r) {
-      if (*l != *r) {
-        return false;
-      }
-    }
-    return true;
+    return std::equal(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());
   }
 
   friend bool operator!=(Span<T> lhs, Span<T> rhs) { return !(lhs == rhs); }
diff --git a/pki/input.cc b/pki/input.cc
index a0d8af6..12ee450 100644
--- a/pki/input.cc
+++ b/pki/input.cc
@@ -23,9 +23,7 @@
 bssl::Span<const uint8_t> Input::AsSpan() const { return data_; }
 
 bool operator==(const Input &lhs, const Input &rhs) {
-  return lhs.Length() == rhs.Length() &&
-         std::equal(lhs.UnsafeData(), lhs.UnsafeData() + lhs.Length(),
-                    rhs.UnsafeData());
+  return lhs.AsSpan() == rhs.AsSpan();
 }
 
 bool operator!=(const Input &lhs, const Input &rhs) { return !(lhs == rhs); }
diff --git a/rust/bssl-crypto/README.md b/rust/bssl-crypto/README.md
index 9518862..678f45e 100644
--- a/rust/bssl-crypto/README.md
+++ b/rust/bssl-crypto/README.md
@@ -10,5 +10,5 @@
 
 Unlike BoringSSL itself, this crate does not attempt to handle allocation failures. If an allocation fails, functions in this crate will panic.
 
-WARNING - This crate is experimental and does *NOT* have a stable API. We expect to iterate on the API as it develops. If you use this crate you must be prepared to adapt your code to future changes as they occur.
+WARNING - This crate is experimental and does *NOT* have a stable API. We expect to iterate on the API as it develops. If you use this crate you must be prepared to adapt your code to future changes as they occur. Additionally, this crate must be updated atomically with BoringSSL. The crate, internally, may depend on implementation details of the library.
 
diff --git a/rust/bssl-crypto/src/hmac.rs b/rust/bssl-crypto/src/hmac.rs
index bf482f7..5924fa8 100644
--- a/rust/bssl-crypto/src/hmac.rs
+++ b/rust/bssl-crypto/src/hmac.rs
@@ -234,6 +234,10 @@
 /// until the Rust language can support the `min_const_generics` feature. Until then we will have to
 /// pass both separately: https://github.com/rust-lang/rust/issues/60551
 struct Hmac<const N: usize, MD: digest::Algorithm> {
+    // Safety: this relies on HMAC_CTX being relocatable via `memcpy`, which is
+    // not generally true of BoringSSL types. This is fine to rely on only
+    // because we do not allow any version skew between bssl-crypto and
+    // BoringSSL. It is *not* safe to copy this code in any other project.
     ctx: bssl_sys::HMAC_CTX,
     _marker: PhantomData<MD>,
 }
@@ -366,6 +370,7 @@
 #[cfg(test)]
 mod tests {
     use super::*;
+    use alloc::boxed::Box;
 
     #[test]
     fn hmac_sha256() {
@@ -401,10 +406,13 @@
         let mut hmac = HmacSha256::new_from_slice(&key);
         hmac.update(&data[..1]);
         let mut hmac2 = hmac.clone();
+        let mut hmac3 = Box::new(hmac2.clone());
         hmac.update(&data[1..]);
         hmac2.update(&data[1..]);
+        hmac3.update(&data[1..]);
         assert_eq!(hmac.digest(), expected);
         assert_eq!(hmac2.digest(), expected);
+        assert_eq!(hmac3.digest(), expected);
     }
 
     #[test]
@@ -458,9 +466,12 @@
         let mut hmac = HmacSha512::new_from_slice(&key);
         hmac.update(&data[..1]);
         let mut hmac2 = hmac.clone();
+        let mut hmac3 = Box::new(hmac.clone());
         hmac.update(&data[1..]);
         hmac2.update(&data[1..]);
+        hmac3.update(&data[1..]);
         assert_eq!(hmac.digest(), expected);
         assert_eq!(hmac2.digest(), expected);
+        assert_eq!(hmac3.digest(), expected);
     }
 }
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 2247f24..3381cae 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -82,9 +82,14 @@
                        ('#' '~'? '(' [0-9] WS? "<<" WS? [0-9] ')' ) /
                        ARMRegister)
                       ![fb:(+\-]
-ARMConstantTweak <- (([us] "xt" [xwhb]) / "lsl" / "lsr" / "ror" / "asr") (WS '#' Offset)?
-ARMRegister <- "sp" / ([xwdqshb] [0-9] [0-9]?) / "xzr" / "wzr" / "NZCV" / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')? )
-ARMVectorRegister <- "v" [0-9] [0-9]? ('.' [0-9]* [bsdhq] ('[' [0-9] [0-9]? ']')? )?
+ARMConstantTweak <- ((([us] "xt" [xwhb]) / "lsl" / "lsr" / "ror" / "asr") (WS '#' Offset)?) /
+                    "mul vl"  # multiply offset by the hardware's vector length
+ARMRegister <- "sp" /
+               ([xwdqshb] [0-9] [0-9]?) /
+               "xzr" / "wzr" / "NZCV" / ARMVectorRegister / SVE2PredicateRegister /
+               ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')? )
+ARMVectorRegister <- [vz] [0-9] [0-9]? ('.' [0-9]* [bsdhq] ('[' [0-9] [0-9]? ']')? )?
+SVE2PredicateRegister <- "p" [0-9] [0-9]? "/" [mMzZ]
 # Compilers only output a very limited number of expression forms. Rather than
 # implement a full expression parser, this enumerate those forms plus a few
 # that appear in our hand-written assembly.
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index fa21419..f0963cc 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -64,6 +64,7 @@
 	ruleARMConstantTweak
 	ruleARMRegister
 	ruleARMVectorRegister
+	ruleSVE2PredicateRegister
 	ruleMemoryRef
 	ruleSymbolRef
 	ruleLow12BitsSymbolRef
@@ -125,6 +126,7 @@
 	"ARMConstantTweak",
 	"ARMRegister",
 	"ARMVectorRegister",
+	"SVE2PredicateRegister",
 	"MemoryRef",
 	"SymbolRef",
 	"Low12BitsSymbolRef",
@@ -250,7 +252,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [58]func() bool
+	rules  [59]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -4768,7 +4770,7 @@
 			position, tokenIndex = position532, tokenIndex532
 			return false
 		},
-		/* 43 ARMConstantTweak <- <(((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
+		/* 43 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')))> */
 		func() bool {
 			position573, tokenIndex573 := position, tokenIndex
 			{
@@ -4777,289 +4779,375 @@
 					position575, tokenIndex575 := position, tokenIndex
 					{
 						position577, tokenIndex577 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l578
+						{
+							position579, tokenIndex579 := position, tokenIndex
+							if buffer[position] != rune('u') {
+								goto l580
+							}
+							position++
+							goto l579
+						l580:
+							position, tokenIndex = position579, tokenIndex579
+							if buffer[position] != rune('s') {
+								goto l578
+							}
+							position++
 						}
-						position++
+					l579:
+						{
+							position581, tokenIndex581 := position, tokenIndex
+							if buffer[position] != rune('x') {
+								goto l582
+							}
+							position++
+							goto l581
+						l582:
+							position, tokenIndex = position581, tokenIndex581
+							if buffer[position] != rune('X') {
+								goto l578
+							}
+							position++
+						}
+					l581:
+						{
+							position583, tokenIndex583 := position, tokenIndex
+							if buffer[position] != rune('t') {
+								goto l584
+							}
+							position++
+							goto l583
+						l584:
+							position, tokenIndex = position583, tokenIndex583
+							if buffer[position] != rune('T') {
+								goto l578
+							}
+							position++
+						}
+					l583:
+						{
+							position585, tokenIndex585 := position, tokenIndex
+							if buffer[position] != rune('x') {
+								goto l586
+							}
+							position++
+							goto l585
+						l586:
+							position, tokenIndex = position585, tokenIndex585
+							if buffer[position] != rune('w') {
+								goto l587
+							}
+							position++
+							goto l585
+						l587:
+							position, tokenIndex = position585, tokenIndex585
+							if buffer[position] != rune('h') {
+								goto l588
+							}
+							position++
+							goto l585
+						l588:
+							position, tokenIndex = position585, tokenIndex585
+							if buffer[position] != rune('b') {
+								goto l578
+							}
+							position++
+						}
+					l585:
 						goto l577
 					l578:
 						position, tokenIndex = position577, tokenIndex577
-						if buffer[position] != rune('s') {
-							goto l576
+						{
+							position590, tokenIndex590 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l591
+							}
+							position++
+							goto l590
+						l591:
+							position, tokenIndex = position590, tokenIndex590
+							if buffer[position] != rune('L') {
+								goto l589
+							}
+							position++
 						}
-						position++
+					l590:
+						{
+							position592, tokenIndex592 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l593
+							}
+							position++
+							goto l592
+						l593:
+							position, tokenIndex = position592, tokenIndex592
+							if buffer[position] != rune('S') {
+								goto l589
+							}
+							position++
+						}
+					l592:
+						{
+							position594, tokenIndex594 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l595
+							}
+							position++
+							goto l594
+						l595:
+							position, tokenIndex = position594, tokenIndex594
+							if buffer[position] != rune('L') {
+								goto l589
+							}
+							position++
+						}
+					l594:
+						goto l577
+					l589:
+						position, tokenIndex = position577, tokenIndex577
+						{
+							position597, tokenIndex597 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l598
+							}
+							position++
+							goto l597
+						l598:
+							position, tokenIndex = position597, tokenIndex597
+							if buffer[position] != rune('L') {
+								goto l596
+							}
+							position++
+						}
+					l597:
+						{
+							position599, tokenIndex599 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l600
+							}
+							position++
+							goto l599
+						l600:
+							position, tokenIndex = position599, tokenIndex599
+							if buffer[position] != rune('S') {
+								goto l596
+							}
+							position++
+						}
+					l599:
+						{
+							position601, tokenIndex601 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l602
+							}
+							position++
+							goto l601
+						l602:
+							position, tokenIndex = position601, tokenIndex601
+							if buffer[position] != rune('R') {
+								goto l596
+							}
+							position++
+						}
+					l601:
+						goto l577
+					l596:
+						position, tokenIndex = position577, tokenIndex577
+						{
+							position604, tokenIndex604 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l605
+							}
+							position++
+							goto l604
+						l605:
+							position, tokenIndex = position604, tokenIndex604
+							if buffer[position] != rune('R') {
+								goto l603
+							}
+							position++
+						}
+					l604:
+						{
+							position606, tokenIndex606 := position, tokenIndex
+							if buffer[position] != rune('o') {
+								goto l607
+							}
+							position++
+							goto l606
+						l607:
+							position, tokenIndex = position606, tokenIndex606
+							if buffer[position] != rune('O') {
+								goto l603
+							}
+							position++
+						}
+					l606:
+						{
+							position608, tokenIndex608 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l609
+							}
+							position++
+							goto l608
+						l609:
+							position, tokenIndex = position608, tokenIndex608
+							if buffer[position] != rune('R') {
+								goto l603
+							}
+							position++
+						}
+					l608:
+						goto l577
+					l603:
+						position, tokenIndex = position577, tokenIndex577
+						{
+							position610, tokenIndex610 := position, tokenIndex
+							if buffer[position] != rune('a') {
+								goto l611
+							}
+							position++
+							goto l610
+						l611:
+							position, tokenIndex = position610, tokenIndex610
+							if buffer[position] != rune('A') {
+								goto l576
+							}
+							position++
+						}
+					l610:
+						{
+							position612, tokenIndex612 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l613
+							}
+							position++
+							goto l612
+						l613:
+							position, tokenIndex = position612, tokenIndex612
+							if buffer[position] != rune('S') {
+								goto l576
+							}
+							position++
+						}
+					l612:
+						{
+							position614, tokenIndex614 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l615
+							}
+							position++
+							goto l614
+						l615:
+							position, tokenIndex = position614, tokenIndex614
+							if buffer[position] != rune('R') {
+								goto l576
+							}
+							position++
+						}
+					l614:
 					}
 				l577:
 					{
-						position579, tokenIndex579 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l580
+						position616, tokenIndex616 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l616
+						}
+						if buffer[position] != rune('#') {
+							goto l616
 						}
 						position++
-						goto l579
-					l580:
-						position, tokenIndex = position579, tokenIndex579
-						if buffer[position] != rune('X') {
-							goto l576
+						if !_rules[ruleOffset]() {
+							goto l616
 						}
-						position++
+						goto l617
+					l616:
+						position, tokenIndex = position616, tokenIndex616
 					}
-				l579:
-					{
-						position581, tokenIndex581 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l582
-						}
-						position++
-						goto l581
-					l582:
-						position, tokenIndex = position581, tokenIndex581
-						if buffer[position] != rune('T') {
-							goto l576
-						}
-						position++
-					}
-				l581:
-					{
-						position583, tokenIndex583 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l584
-						}
-						position++
-						goto l583
-					l584:
-						position, tokenIndex = position583, tokenIndex583
-						if buffer[position] != rune('w') {
-							goto l585
-						}
-						position++
-						goto l583
-					l585:
-						position, tokenIndex = position583, tokenIndex583
-						if buffer[position] != rune('h') {
-							goto l586
-						}
-						position++
-						goto l583
-					l586:
-						position, tokenIndex = position583, tokenIndex583
-						if buffer[position] != rune('b') {
-							goto l576
-						}
-						position++
-					}
-				l583:
+				l617:
 					goto l575
 				l576:
 					position, tokenIndex = position575, tokenIndex575
 					{
-						position588, tokenIndex588 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l589
+						position618, tokenIndex618 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l619
 						}
 						position++
-						goto l588
-					l589:
-						position, tokenIndex = position588, tokenIndex588
-						if buffer[position] != rune('L') {
-							goto l587
-						}
-						position++
-					}
-				l588:
-					{
-						position590, tokenIndex590 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l591
-						}
-						position++
-						goto l590
-					l591:
-						position, tokenIndex = position590, tokenIndex590
-						if buffer[position] != rune('S') {
-							goto l587
-						}
-						position++
-					}
-				l590:
-					{
-						position592, tokenIndex592 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l593
-						}
-						position++
-						goto l592
-					l593:
-						position, tokenIndex = position592, tokenIndex592
-						if buffer[position] != rune('L') {
-							goto l587
-						}
-						position++
-					}
-				l592:
-					goto l575
-				l587:
-					position, tokenIndex = position575, tokenIndex575
-					{
-						position595, tokenIndex595 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l596
-						}
-						position++
-						goto l595
-					l596:
-						position, tokenIndex = position595, tokenIndex595
-						if buffer[position] != rune('L') {
-							goto l594
-						}
-						position++
-					}
-				l595:
-					{
-						position597, tokenIndex597 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l598
-						}
-						position++
-						goto l597
-					l598:
-						position, tokenIndex = position597, tokenIndex597
-						if buffer[position] != rune('S') {
-							goto l594
-						}
-						position++
-					}
-				l597:
-					{
-						position599, tokenIndex599 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l600
-						}
-						position++
-						goto l599
-					l600:
-						position, tokenIndex = position599, tokenIndex599
-						if buffer[position] != rune('R') {
-							goto l594
-						}
-						position++
-					}
-				l599:
-					goto l575
-				l594:
-					position, tokenIndex = position575, tokenIndex575
-					{
-						position602, tokenIndex602 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l603
-						}
-						position++
-						goto l602
-					l603:
-						position, tokenIndex = position602, tokenIndex602
-						if buffer[position] != rune('R') {
-							goto l601
-						}
-						position++
-					}
-				l602:
-					{
-						position604, tokenIndex604 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l605
-						}
-						position++
-						goto l604
-					l605:
-						position, tokenIndex = position604, tokenIndex604
-						if buffer[position] != rune('O') {
-							goto l601
-						}
-						position++
-					}
-				l604:
-					{
-						position606, tokenIndex606 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l607
-						}
-						position++
-						goto l606
-					l607:
-						position, tokenIndex = position606, tokenIndex606
-						if buffer[position] != rune('R') {
-							goto l601
-						}
-						position++
-					}
-				l606:
-					goto l575
-				l601:
-					position, tokenIndex = position575, tokenIndex575
-					{
-						position608, tokenIndex608 := position, tokenIndex
-						if buffer[position] != rune('a') {
-							goto l609
-						}
-						position++
-						goto l608
-					l609:
-						position, tokenIndex = position608, tokenIndex608
-						if buffer[position] != rune('A') {
+						goto l618
+					l619:
+						position, tokenIndex = position618, tokenIndex618
+						if buffer[position] != rune('M') {
 							goto l573
 						}
 						position++
 					}
-				l608:
+				l618:
 					{
-						position610, tokenIndex610 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l611
+						position620, tokenIndex620 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l621
 						}
 						position++
-						goto l610
-					l611:
-						position, tokenIndex = position610, tokenIndex610
-						if buffer[position] != rune('S') {
+						goto l620
+					l621:
+						position, tokenIndex = position620, tokenIndex620
+						if buffer[position] != rune('U') {
 							goto l573
 						}
 						position++
 					}
-				l610:
+				l620:
 					{
-						position612, tokenIndex612 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l613
+						position622, tokenIndex622 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l623
 						}
 						position++
-						goto l612
-					l613:
-						position, tokenIndex = position612, tokenIndex612
-						if buffer[position] != rune('R') {
+						goto l622
+					l623:
+						position, tokenIndex = position622, tokenIndex622
+						if buffer[position] != rune('L') {
 							goto l573
 						}
 						position++
 					}
-				l612:
-				}
-			l575:
-				{
-					position614, tokenIndex614 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l614
-					}
-					if buffer[position] != rune('#') {
-						goto l614
+				l622:
+					if buffer[position] != rune(' ') {
+						goto l573
 					}
 					position++
-					if !_rules[ruleOffset]() {
-						goto l614
+					{
+						position624, tokenIndex624 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l625
+						}
+						position++
+						goto l624
+					l625:
+						position, tokenIndex = position624, tokenIndex624
+						if buffer[position] != rune('V') {
+							goto l573
+						}
+						position++
 					}
-					goto l615
-				l614:
-					position, tokenIndex = position614, tokenIndex614
+				l624:
+					{
+						position626, tokenIndex626 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l627
+						}
+						position++
+						goto l626
+					l627:
+						position, tokenIndex = position626, tokenIndex626
+						if buffer[position] != rune('L') {
+							goto l573
+						}
+						position++
+					}
+				l626:
 				}
-			l615:
+			l575:
 				add(ruleARMConstantTweak, position574)
 			}
 			return true
@@ -5067,1530 +5155,1611 @@
 			position, tokenIndex = position573, tokenIndex573
 			return false
 		},
-		/* 44 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
+		/* 44 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / SVE2PredicateRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
 		func() bool {
-			position616, tokenIndex616 := position, tokenIndex
+			position628, tokenIndex628 := position, tokenIndex
 			{
-				position617 := position
+				position629 := position
 				{
-					position618, tokenIndex618 := position, tokenIndex
+					position630, tokenIndex630 := position, tokenIndex
 					{
-						position620, tokenIndex620 := position, tokenIndex
+						position632, tokenIndex632 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l621
+							goto l633
 						}
 						position++
-						goto l620
-					l621:
-						position, tokenIndex = position620, tokenIndex620
+						goto l632
+					l633:
+						position, tokenIndex = position632, tokenIndex632
 						if buffer[position] != rune('S') {
-							goto l619
-						}
-						position++
-					}
-				l620:
-					{
-						position622, tokenIndex622 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l623
-						}
-						position++
-						goto l622
-					l623:
-						position, tokenIndex = position622, tokenIndex622
-						if buffer[position] != rune('P') {
-							goto l619
-						}
-						position++
-					}
-				l622:
-					goto l618
-				l619:
-					position, tokenIndex = position618, tokenIndex618
-					{
-						position625, tokenIndex625 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l626
-						}
-						position++
-						goto l625
-					l626:
-						position, tokenIndex = position625, tokenIndex625
-						if buffer[position] != rune('w') {
-							goto l627
-						}
-						position++
-						goto l625
-					l627:
-						position, tokenIndex = position625, tokenIndex625
-						if buffer[position] != rune('d') {
-							goto l628
-						}
-						position++
-						goto l625
-					l628:
-						position, tokenIndex = position625, tokenIndex625
-						if buffer[position] != rune('q') {
-							goto l629
-						}
-						position++
-						goto l625
-					l629:
-						position, tokenIndex = position625, tokenIndex625
-						if buffer[position] != rune('s') {
-							goto l630
-						}
-						position++
-						goto l625
-					l630:
-						position, tokenIndex = position625, tokenIndex625
-						if buffer[position] != rune('h') {
 							goto l631
 						}
 						position++
-						goto l625
-					l631:
-						position, tokenIndex = position625, tokenIndex625
-						if buffer[position] != rune('b') {
-							goto l624
-						}
-						position++
 					}
-				l625:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l624
-					}
-					position++
+				l632:
 					{
-						position632, tokenIndex632 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l632
+						position634, tokenIndex634 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l635
 						}
 						position++
-						goto l633
-					l632:
-						position, tokenIndex = position632, tokenIndex632
-					}
-				l633:
-					goto l618
-				l624:
-					position, tokenIndex = position618, tokenIndex618
-					{
-						position635, tokenIndex635 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l636
-						}
-						position++
-						goto l635
-					l636:
-						position, tokenIndex = position635, tokenIndex635
-						if buffer[position] != rune('X') {
-							goto l634
+						goto l634
+					l635:
+						position, tokenIndex = position634, tokenIndex634
+						if buffer[position] != rune('P') {
+							goto l631
 						}
 						position++
 					}
-				l635:
+				l634:
+					goto l630
+				l631:
+					position, tokenIndex = position630, tokenIndex630
 					{
 						position637, tokenIndex637 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('x') {
 							goto l638
 						}
 						position++
 						goto l637
 					l638:
 						position, tokenIndex = position637, tokenIndex637
-						if buffer[position] != rune('Z') {
-							goto l634
+						if buffer[position] != rune('w') {
+							goto l639
+						}
+						position++
+						goto l637
+					l639:
+						position, tokenIndex = position637, tokenIndex637
+						if buffer[position] != rune('d') {
+							goto l640
+						}
+						position++
+						goto l637
+					l640:
+						position, tokenIndex = position637, tokenIndex637
+						if buffer[position] != rune('q') {
+							goto l641
+						}
+						position++
+						goto l637
+					l641:
+						position, tokenIndex = position637, tokenIndex637
+						if buffer[position] != rune('s') {
+							goto l642
+						}
+						position++
+						goto l637
+					l642:
+						position, tokenIndex = position637, tokenIndex637
+						if buffer[position] != rune('h') {
+							goto l643
+						}
+						position++
+						goto l637
+					l643:
+						position, tokenIndex = position637, tokenIndex637
+						if buffer[position] != rune('b') {
+							goto l636
 						}
 						position++
 					}
 				l637:
-					{
-						position639, tokenIndex639 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l640
-						}
-						position++
-						goto l639
-					l640:
-						position, tokenIndex = position639, tokenIndex639
-						if buffer[position] != rune('R') {
-							goto l634
-						}
-						position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l636
 					}
-				l639:
-					goto l618
-				l634:
-					position, tokenIndex = position618, tokenIndex618
-					{
-						position642, tokenIndex642 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l643
-						}
-						position++
-						goto l642
-					l643:
-						position, tokenIndex = position642, tokenIndex642
-						if buffer[position] != rune('W') {
-							goto l641
-						}
-						position++
-					}
-				l642:
+					position++
 					{
 						position644, tokenIndex644 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l645
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l644
 						}
 						position++
-						goto l644
-					l645:
+						goto l645
+					l644:
 						position, tokenIndex = position644, tokenIndex644
-						if buffer[position] != rune('Z') {
-							goto l641
-						}
-						position++
 					}
-				l644:
+				l645:
+					goto l630
+				l636:
+					position, tokenIndex = position630, tokenIndex630
 					{
-						position646, tokenIndex646 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l647
+						position647, tokenIndex647 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l648
 						}
 						position++
-						goto l646
-					l647:
-						position, tokenIndex = position646, tokenIndex646
-						if buffer[position] != rune('R') {
-							goto l641
+						goto l647
+					l648:
+						position, tokenIndex = position647, tokenIndex647
+						if buffer[position] != rune('X') {
+							goto l646
 						}
 						position++
 					}
-				l646:
-					goto l618
-				l641:
-					position, tokenIndex = position618, tokenIndex618
+				l647:
 					{
 						position649, tokenIndex649 := position, tokenIndex
-						if buffer[position] != rune('n') {
+						if buffer[position] != rune('z') {
 							goto l650
 						}
 						position++
 						goto l649
 					l650:
 						position, tokenIndex = position649, tokenIndex649
-						if buffer[position] != rune('N') {
-							goto l648
+						if buffer[position] != rune('Z') {
+							goto l646
 						}
 						position++
 					}
 				l649:
 					{
 						position651, tokenIndex651 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('r') {
 							goto l652
 						}
 						position++
 						goto l651
 					l652:
 						position, tokenIndex = position651, tokenIndex651
-						if buffer[position] != rune('Z') {
-							goto l648
+						if buffer[position] != rune('R') {
+							goto l646
 						}
 						position++
 					}
 				l651:
+					goto l630
+				l646:
+					position, tokenIndex = position630, tokenIndex630
 					{
-						position653, tokenIndex653 := position, tokenIndex
-						if buffer[position] != rune('c') {
-							goto l654
+						position654, tokenIndex654 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l655
 						}
 						position++
-						goto l653
-					l654:
-						position, tokenIndex = position653, tokenIndex653
-						if buffer[position] != rune('C') {
-							goto l648
+						goto l654
+					l655:
+						position, tokenIndex = position654, tokenIndex654
+						if buffer[position] != rune('W') {
+							goto l653
 						}
 						position++
 					}
-				l653:
+				l654:
 					{
-						position655, tokenIndex655 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l656
+						position656, tokenIndex656 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l657
 						}
 						position++
-						goto l655
-					l656:
-						position, tokenIndex = position655, tokenIndex655
-						if buffer[position] != rune('V') {
-							goto l648
+						goto l656
+					l657:
+						position, tokenIndex = position656, tokenIndex656
+						if buffer[position] != rune('Z') {
+							goto l653
 						}
 						position++
 					}
-				l655:
-					goto l618
-				l648:
-					position, tokenIndex = position618, tokenIndex618
-					if !_rules[ruleARMVectorRegister]() {
-						goto l657
-					}
-					goto l618
-				l657:
-					position, tokenIndex = position618, tokenIndex618
-					if buffer[position] != rune('{') {
-						goto l616
-					}
-					position++
+				l656:
 					{
 						position658, tokenIndex658 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l658
+						if buffer[position] != rune('r') {
+							goto l659
 						}
-						goto l659
-					l658:
+						position++
+						goto l658
+					l659:
 						position, tokenIndex = position658, tokenIndex658
+						if buffer[position] != rune('R') {
+							goto l653
+						}
+						position++
 					}
-				l659:
-					if !_rules[ruleARMVectorRegister]() {
-						goto l616
-					}
-				l660:
+				l658:
+					goto l630
+				l653:
+					position, tokenIndex = position630, tokenIndex630
 					{
 						position661, tokenIndex661 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l661
+						if buffer[position] != rune('n') {
+							goto l662
 						}
 						position++
-						{
-							position662, tokenIndex662 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l662
-							}
-							goto l663
-						l662:
-							position, tokenIndex = position662, tokenIndex662
-						}
-					l663:
-						if !_rules[ruleARMVectorRegister]() {
-							goto l661
-						}
-						goto l660
-					l661:
+						goto l661
+					l662:
 						position, tokenIndex = position661, tokenIndex661
+						if buffer[position] != rune('N') {
+							goto l660
+						}
+						position++
 					}
+				l661:
 					{
-						position664, tokenIndex664 := position, tokenIndex
-						if !_rules[ruleWS]() {
+						position663, tokenIndex663 := position, tokenIndex
+						if buffer[position] != rune('z') {
 							goto l664
 						}
-						goto l665
+						position++
+						goto l663
 					l664:
-						position, tokenIndex = position664, tokenIndex664
+						position, tokenIndex = position663, tokenIndex663
+						if buffer[position] != rune('Z') {
+							goto l660
+						}
+						position++
+					}
+				l663:
+					{
+						position665, tokenIndex665 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l666
+						}
+						position++
+						goto l665
+					l666:
+						position, tokenIndex = position665, tokenIndex665
+						if buffer[position] != rune('C') {
+							goto l660
+						}
+						position++
 					}
 				l665:
-					if buffer[position] != rune('}') {
-						goto l616
-					}
-					position++
 					{
-						position666, tokenIndex666 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l666
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l666
-						}
-						position++
-						{
-							position668, tokenIndex668 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l668
-							}
-							position++
-							goto l669
-						l668:
-							position, tokenIndex = position668, tokenIndex668
-						}
-					l669:
-						if buffer[position] != rune(']') {
-							goto l666
+						position667, tokenIndex667 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l668
 						}
 						position++
 						goto l667
-					l666:
-						position, tokenIndex = position666, tokenIndex666
+					l668:
+						position, tokenIndex = position667, tokenIndex667
+						if buffer[position] != rune('V') {
+							goto l660
+						}
+						position++
 					}
 				l667:
-				}
-			l618:
-				add(ruleARMRegister, position617)
-			}
-			return true
-		l616:
-			position, tokenIndex = position616, tokenIndex616
-			return false
-		},
-		/* 45 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
-		func() bool {
-			position670, tokenIndex670 := position, tokenIndex
-			{
-				position671 := position
-				{
-					position672, tokenIndex672 := position, tokenIndex
-					if buffer[position] != rune('v') {
-						goto l673
+					goto l630
+				l660:
+					position, tokenIndex = position630, tokenIndex630
+					if !_rules[ruleARMVectorRegister]() {
+						goto l669
 					}
-					position++
-					goto l672
-				l673:
-					position, tokenIndex = position672, tokenIndex672
-					if buffer[position] != rune('V') {
+					goto l630
+				l669:
+					position, tokenIndex = position630, tokenIndex630
+					if !_rules[ruleSVE2PredicateRegister]() {
 						goto l670
 					}
-					position++
-				}
-			l672:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l670
-				}
-				position++
-				{
-					position674, tokenIndex674 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l674
+					goto l630
+				l670:
+					position, tokenIndex = position630, tokenIndex630
+					if buffer[position] != rune('{') {
+						goto l628
 					}
 					position++
-					goto l675
-				l674:
-					position, tokenIndex = position674, tokenIndex674
-				}
-			l675:
-				{
-					position676, tokenIndex676 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l676
+					{
+						position671, tokenIndex671 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l671
+						}
+						goto l672
+					l671:
+						position, tokenIndex = position671, tokenIndex671
 					}
-					position++
+				l672:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l628
+					}
+				l673:
+					{
+						position674, tokenIndex674 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l674
+						}
+						position++
+						{
+							position675, tokenIndex675 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l675
+							}
+							goto l676
+						l675:
+							position, tokenIndex = position675, tokenIndex675
+						}
+					l676:
+						if !_rules[ruleARMVectorRegister]() {
+							goto l674
+						}
+						goto l673
+					l674:
+						position, tokenIndex = position674, tokenIndex674
+					}
+					{
+						position677, tokenIndex677 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l677
+						}
+						goto l678
+					l677:
+						position, tokenIndex = position677, tokenIndex677
+					}
 				l678:
+					if buffer[position] != rune('}') {
+						goto l628
+					}
+					position++
 					{
 						position679, tokenIndex679 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l679
+						}
+						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l679
 						}
 						position++
-						goto l678
+						{
+							position681, tokenIndex681 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l681
+							}
+							position++
+							goto l682
+						l681:
+							position, tokenIndex = position681, tokenIndex681
+						}
+					l682:
+						if buffer[position] != rune(']') {
+							goto l679
+						}
+						position++
+						goto l680
 					l679:
 						position, tokenIndex = position679, tokenIndex679
 					}
+				l680:
+				}
+			l630:
+				add(ruleARMRegister, position629)
+			}
+			return true
+		l628:
+			position, tokenIndex = position628, tokenIndex628
+			return false
+		},
+		/* 45 ARMVectorRegister <- <(('v' / 'z') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
+		func() bool {
+			position683, tokenIndex683 := position, tokenIndex
+			{
+				position684 := position
+				{
+					position685, tokenIndex685 := position, tokenIndex
+					if buffer[position] != rune('v') {
+						goto l686
+					}
+					position++
+					goto l685
+				l686:
+					position, tokenIndex = position685, tokenIndex685
+					if buffer[position] != rune('z') {
+						goto l683
+					}
+					position++
+				}
+			l685:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l683
+				}
+				position++
+				{
+					position687, tokenIndex687 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l687
+					}
+					position++
+					goto l688
+				l687:
+					position, tokenIndex = position687, tokenIndex687
+				}
+			l688:
+				{
+					position689, tokenIndex689 := position, tokenIndex
+					if buffer[position] != rune('.') {
+						goto l689
+					}
+					position++
+				l691:
 					{
-						position680, tokenIndex680 := position, tokenIndex
+						position692, tokenIndex692 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l692
+						}
+						position++
+						goto l691
+					l692:
+						position, tokenIndex = position692, tokenIndex692
+					}
+					{
+						position693, tokenIndex693 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l681
+							goto l694
 						}
 						position++
-						goto l680
-					l681:
-						position, tokenIndex = position680, tokenIndex680
+						goto l693
+					l694:
+						position, tokenIndex = position693, tokenIndex693
 						if buffer[position] != rune('s') {
-							goto l682
+							goto l695
 						}
 						position++
-						goto l680
-					l682:
-						position, tokenIndex = position680, tokenIndex680
+						goto l693
+					l695:
+						position, tokenIndex = position693, tokenIndex693
 						if buffer[position] != rune('d') {
-							goto l683
+							goto l696
 						}
 						position++
-						goto l680
-					l683:
-						position, tokenIndex = position680, tokenIndex680
+						goto l693
+					l696:
+						position, tokenIndex = position693, tokenIndex693
 						if buffer[position] != rune('h') {
-							goto l684
+							goto l697
 						}
 						position++
-						goto l680
-					l684:
-						position, tokenIndex = position680, tokenIndex680
+						goto l693
+					l697:
+						position, tokenIndex = position693, tokenIndex693
 						if buffer[position] != rune('q') {
-							goto l676
+							goto l689
 						}
 						position++
 					}
-				l680:
+				l693:
 					{
-						position685, tokenIndex685 := position, tokenIndex
+						position698, tokenIndex698 := position, tokenIndex
 						if buffer[position] != rune('[') {
-							goto l685
+							goto l698
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l685
+							goto l698
 						}
 						position++
 						{
-							position687, tokenIndex687 := position, tokenIndex
+							position700, tokenIndex700 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l687
+								goto l700
 							}
 							position++
-							goto l688
-						l687:
-							position, tokenIndex = position687, tokenIndex687
+							goto l701
+						l700:
+							position, tokenIndex = position700, tokenIndex700
 						}
-					l688:
+					l701:
 						if buffer[position] != rune(']') {
-							goto l685
+							goto l698
 						}
 						position++
-						goto l686
-					l685:
-						position, tokenIndex = position685, tokenIndex685
-					}
-				l686:
-					goto l677
-				l676:
-					position, tokenIndex = position676, tokenIndex676
-				}
-			l677:
-				add(ruleARMVectorRegister, position671)
-			}
-			return true
-		l670:
-			position, tokenIndex = position670, tokenIndex670
-			return false
-		},
-		/* 46 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
-		func() bool {
-			position689, tokenIndex689 := position, tokenIndex
-			{
-				position690 := position
-				{
-					position691, tokenIndex691 := position, tokenIndex
-					if !_rules[ruleSymbolRef]() {
-						goto l692
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l692
-					}
-					goto l691
-				l692:
-					position, tokenIndex = position691, tokenIndex691
-					if !_rules[ruleSymbolRef]() {
-						goto l693
-					}
-					goto l691
-				l693:
-					position, tokenIndex = position691, tokenIndex691
-					if !_rules[ruleLow12BitsSymbolRef]() {
-						goto l694
-					}
-					goto l691
-				l694:
-					position, tokenIndex = position691, tokenIndex691
-				l696:
-					{
-						position697, tokenIndex697 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l697
-						}
-						goto l696
-					l697:
-						position, tokenIndex = position697, tokenIndex697
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l695
-					}
-					goto l691
-				l695:
-					position, tokenIndex = position691, tokenIndex691
-					if !_rules[ruleSegmentRegister]() {
-						goto l698
-					}
-					if !_rules[ruleOffset]() {
-						goto l698
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l698
-					}
-					goto l691
-				l698:
-					position, tokenIndex = position691, tokenIndex691
-					if !_rules[ruleSegmentRegister]() {
 						goto l699
+					l698:
+						position, tokenIndex = position698, tokenIndex698
 					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l699
-					}
-					goto l691
 				l699:
-					position, tokenIndex = position691, tokenIndex691
-					if !_rules[ruleSegmentRegister]() {
-						goto l700
-					}
-					if !_rules[ruleOffset]() {
-						goto l700
-					}
-					goto l691
-				l700:
-					position, tokenIndex = position691, tokenIndex691
-					if !_rules[ruleARMBaseIndexScale]() {
-						goto l701
-					}
-					goto l691
-				l701:
-					position, tokenIndex = position691, tokenIndex691
-					if !_rules[ruleBaseIndexScale]() {
-						goto l689
-					}
+					goto l690
+				l689:
+					position, tokenIndex = position689, tokenIndex689
 				}
-			l691:
-				add(ruleMemoryRef, position690)
+			l690:
+				add(ruleARMVectorRegister, position684)
 			}
 			return true
-		l689:
-			position, tokenIndex = position689, tokenIndex689
+		l683:
+			position, tokenIndex = position683, tokenIndex683
 			return false
 		},
-		/* 47 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
+		/* 46 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / 'z' / 'Z'))> */
 		func() bool {
 			position702, tokenIndex702 := position, tokenIndex
 			{
 				position703 := position
 				{
 					position704, tokenIndex704 := position, tokenIndex
-				l706:
-					{
-						position707, tokenIndex707 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l707
-						}
-						goto l706
-					l707:
-						position, tokenIndex = position707, tokenIndex707
-					}
-					if buffer[position] != rune('+') {
-						goto l704
+					if buffer[position] != rune('p') {
+						goto l705
 					}
 					position++
-					goto l705
-				l704:
+					goto l704
+				l705:
 					position, tokenIndex = position704, tokenIndex704
+					if buffer[position] != rune('P') {
+						goto l702
+					}
+					position++
 				}
-			l705:
+			l704:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l702
+				}
+				position++
+				{
+					position706, tokenIndex706 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l706
+					}
+					position++
+					goto l707
+				l706:
+					position, tokenIndex = position706, tokenIndex706
+				}
+			l707:
+				if buffer[position] != rune('/') {
+					goto l702
+				}
+				position++
 				{
 					position708, tokenIndex708 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
+					if buffer[position] != rune('m') {
 						goto l709
 					}
+					position++
 					goto l708
 				l709:
 					position, tokenIndex = position708, tokenIndex708
-					if !_rules[ruleSymbolName]() {
-						goto l702
-					}
-				}
-			l708:
-			l710:
-				{
-					position711, tokenIndex711 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l711
-					}
-					goto l710
-				l711:
-					position, tokenIndex = position711, tokenIndex711
-				}
-				{
-					position712, tokenIndex712 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l712
+					if buffer[position] != rune('M') {
+						goto l710
 					}
 					position++
-					if !_rules[ruleSection]() {
-						goto l712
+					goto l708
+				l710:
+					position, tokenIndex = position708, tokenIndex708
+					if buffer[position] != rune('z') {
+						goto l711
 					}
-				l714:
-					{
-						position715, tokenIndex715 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l715
-						}
-						goto l714
-					l715:
-						position, tokenIndex = position715, tokenIndex715
+					position++
+					goto l708
+				l711:
+					position, tokenIndex = position708, tokenIndex708
+					if buffer[position] != rune('Z') {
+						goto l702
 					}
-					goto l713
-				l712:
-					position, tokenIndex = position712, tokenIndex712
+					position++
 				}
-			l713:
-				add(ruleSymbolRef, position703)
+			l708:
+				add(ruleSVE2PredicateRegister, position703)
 			}
 			return true
 		l702:
 			position, tokenIndex = position702, tokenIndex702
 			return false
 		},
-		/* 48 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		/* 47 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position716, tokenIndex716 := position, tokenIndex
+			position712, tokenIndex712 := position, tokenIndex
 			{
-				position717 := position
-				if buffer[position] != rune(':') {
-					goto l716
-				}
-				position++
+				position713 := position
 				{
-					position718, tokenIndex718 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l719
+					position714, tokenIndex714 := position, tokenIndex
+					if !_rules[ruleSymbolRef]() {
+						goto l715
 					}
-					position++
-					goto l718
-				l719:
-					position, tokenIndex = position718, tokenIndex718
-					if buffer[position] != rune('L') {
+					if !_rules[ruleBaseIndexScale]() {
+						goto l715
+					}
+					goto l714
+				l715:
+					position, tokenIndex = position714, tokenIndex714
+					if !_rules[ruleSymbolRef]() {
 						goto l716
 					}
-					position++
-				}
-			l718:
-				{
-					position720, tokenIndex720 := position, tokenIndex
-					if buffer[position] != rune('o') {
+					goto l714
+				l716:
+					position, tokenIndex = position714, tokenIndex714
+					if !_rules[ruleLow12BitsSymbolRef]() {
+						goto l717
+					}
+					goto l714
+				l717:
+					position, tokenIndex = position714, tokenIndex714
+				l719:
+					{
+						position720, tokenIndex720 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l720
+						}
+						goto l719
+					l720:
+						position, tokenIndex = position720, tokenIndex720
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l718
+					}
+					goto l714
+				l718:
+					position, tokenIndex = position714, tokenIndex714
+					if !_rules[ruleSegmentRegister]() {
 						goto l721
 					}
-					position++
-					goto l720
-				l721:
-					position, tokenIndex = position720, tokenIndex720
-					if buffer[position] != rune('O') {
-						goto l716
+					if !_rules[ruleOffset]() {
+						goto l721
 					}
-					position++
-				}
-			l720:
-				if buffer[position] != rune('1') {
-					goto l716
-				}
-				position++
-				if buffer[position] != rune('2') {
-					goto l716
-				}
-				position++
-				if buffer[position] != rune(':') {
-					goto l716
-				}
-				position++
-				{
-					position722, tokenIndex722 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
+					if !_rules[ruleBaseIndexScale]() {
+						goto l721
+					}
+					goto l714
+				l721:
+					position, tokenIndex = position714, tokenIndex714
+					if !_rules[ruleSegmentRegister]() {
+						goto l722
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l722
+					}
+					goto l714
+				l722:
+					position, tokenIndex = position714, tokenIndex714
+					if !_rules[ruleSegmentRegister]() {
 						goto l723
 					}
-					goto l722
-				l723:
-					position, tokenIndex = position722, tokenIndex722
-					if !_rules[ruleSymbolName]() {
-						goto l716
-					}
-				}
-			l722:
-				{
-					position724, tokenIndex724 := position, tokenIndex
 					if !_rules[ruleOffset]() {
+						goto l723
+					}
+					goto l714
+				l723:
+					position, tokenIndex = position714, tokenIndex714
+					if !_rules[ruleARMBaseIndexScale]() {
 						goto l724
 					}
-					goto l725
+					goto l714
 				l724:
-					position, tokenIndex = position724, tokenIndex724
+					position, tokenIndex = position714, tokenIndex714
+					if !_rules[ruleBaseIndexScale]() {
+						goto l712
+					}
 				}
-			l725:
-				add(ruleLow12BitsSymbolRef, position717)
+			l714:
+				add(ruleMemoryRef, position713)
 			}
 			return true
-		l716:
-			position, tokenIndex = position716, tokenIndex716
+		l712:
+			position, tokenIndex = position712, tokenIndex712
 			return false
 		},
-		/* 49 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		/* 48 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
 		func() bool {
-			position726, tokenIndex726 := position, tokenIndex
+			position725, tokenIndex725 := position, tokenIndex
 			{
-				position727 := position
-				if buffer[position] != rune('[') {
-					goto l726
-				}
-				position++
-				if !_rules[ruleARMRegister]() {
-					goto l726
-				}
+				position726 := position
 				{
-					position728, tokenIndex728 := position, tokenIndex
-					if buffer[position] != rune(',') {
-						goto l728
-					}
-					position++
+					position727, tokenIndex727 := position, tokenIndex
+				l729:
 					{
 						position730, tokenIndex730 := position, tokenIndex
-						if !_rules[ruleWS]() {
+						if !_rules[ruleOffset]() {
 							goto l730
 						}
-						goto l731
+						goto l729
 					l730:
 						position, tokenIndex = position730, tokenIndex730
 					}
-				l731:
-					{
-						position732, tokenIndex732 := position, tokenIndex
-						if buffer[position] != rune('#') {
-							goto l733
-						}
-						position++
-						if !_rules[ruleOffset]() {
-							goto l733
-						}
-						{
-							position734, tokenIndex734 := position, tokenIndex
-							{
-								position736, tokenIndex736 := position, tokenIndex
-								if buffer[position] != rune('*') {
-									goto l737
-								}
-								position++
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l737
-								}
-								position++
-							l738:
-								{
-									position739, tokenIndex739 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l739
-									}
-									position++
-									goto l738
-								l739:
-									position, tokenIndex = position739, tokenIndex739
-								}
-								goto l736
-							l737:
-								position, tokenIndex = position736, tokenIndex736
-								if buffer[position] != rune('*') {
-									goto l740
-								}
-								position++
-								if buffer[position] != rune('(') {
-									goto l740
-								}
-								position++
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l740
-								}
-								position++
-							l741:
-								{
-									position742, tokenIndex742 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l742
-									}
-									position++
-									goto l741
-								l742:
-									position, tokenIndex = position742, tokenIndex742
-								}
-								if !_rules[ruleOperator]() {
-									goto l740
-								}
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l740
-								}
-								position++
-							l743:
-								{
-									position744, tokenIndex744 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l744
-									}
-									position++
-									goto l743
-								l744:
-									position, tokenIndex = position744, tokenIndex744
-								}
-								if buffer[position] != rune(')') {
-									goto l740
-								}
-								position++
-								goto l736
-							l740:
-								position, tokenIndex = position736, tokenIndex736
-							l745:
-								{
-									position746, tokenIndex746 := position, tokenIndex
-									if buffer[position] != rune('+') {
-										goto l746
-									}
-									position++
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l746
-									}
-									position++
-								l747:
-									{
-										position748, tokenIndex748 := position, tokenIndex
-										if c := buffer[position]; c < rune('0') || c > rune('9') {
-											goto l748
-										}
-										position++
-										goto l747
-									l748:
-										position, tokenIndex = position748, tokenIndex748
-									}
-									goto l745
-								l746:
-									position, tokenIndex = position746, tokenIndex746
-								}
-							}
-						l736:
-							goto l735
-
-							position, tokenIndex = position734, tokenIndex734
-						}
-					l735:
-						goto l732
-					l733:
-						position, tokenIndex = position732, tokenIndex732
-						if !_rules[ruleARMGOTLow12]() {
-							goto l749
-						}
-						goto l732
-					l749:
-						position, tokenIndex = position732, tokenIndex732
-						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l750
-						}
-						goto l732
-					l750:
-						position, tokenIndex = position732, tokenIndex732
-						if !_rules[ruleARMRegister]() {
-							goto l728
-						}
+					if buffer[position] != rune('+') {
+						goto l727
 					}
-				l732:
-					{
-						position751, tokenIndex751 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l751
-						}
-						position++
-						{
-							position753, tokenIndex753 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l753
-							}
-							goto l754
-						l753:
-							position, tokenIndex = position753, tokenIndex753
-						}
-					l754:
-						if !_rules[ruleARMConstantTweak]() {
-							goto l751
-						}
-						goto l752
-					l751:
-						position, tokenIndex = position751, tokenIndex751
-					}
-				l752:
-					goto l729
-				l728:
-					position, tokenIndex = position728, tokenIndex728
+					position++
+					goto l728
+				l727:
+					position, tokenIndex = position727, tokenIndex727
 				}
-			l729:
-				if buffer[position] != rune(']') {
-					goto l726
-				}
-				position++
+			l728:
 				{
-					position755, tokenIndex755 := position, tokenIndex
-					if !_rules[ruleARMPostincrement]() {
-						goto l755
+					position731, tokenIndex731 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l732
 					}
-					goto l756
-				l755:
-					position, tokenIndex = position755, tokenIndex755
+					goto l731
+				l732:
+					position, tokenIndex = position731, tokenIndex731
+					if !_rules[ruleSymbolName]() {
+						goto l725
+					}
 				}
-			l756:
-				add(ruleARMBaseIndexScale, position727)
+			l731:
+			l733:
+				{
+					position734, tokenIndex734 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l734
+					}
+					goto l733
+				l734:
+					position, tokenIndex = position734, tokenIndex734
+				}
+				{
+					position735, tokenIndex735 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l735
+					}
+					position++
+					if !_rules[ruleSection]() {
+						goto l735
+					}
+				l737:
+					{
+						position738, tokenIndex738 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l738
+						}
+						goto l737
+					l738:
+						position, tokenIndex = position738, tokenIndex738
+					}
+					goto l736
+				l735:
+					position, tokenIndex = position735, tokenIndex735
+				}
+			l736:
+				add(ruleSymbolRef, position726)
 			}
 			return true
-		l726:
-			position, tokenIndex = position726, tokenIndex726
+		l725:
+			position, tokenIndex = position725, tokenIndex725
 			return false
 		},
-		/* 50 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		/* 49 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
 		func() bool {
-			position757, tokenIndex757 := position, tokenIndex
+			position739, tokenIndex739 := position, tokenIndex
 			{
-				position758 := position
+				position740 := position
 				if buffer[position] != rune(':') {
-					goto l757
+					goto l739
 				}
 				position++
 				{
-					position759, tokenIndex759 := position, tokenIndex
-					if buffer[position] != rune('g') {
-						goto l760
-					}
-					position++
-					goto l759
-				l760:
-					position, tokenIndex = position759, tokenIndex759
-					if buffer[position] != rune('G') {
-						goto l757
-					}
-					position++
-				}
-			l759:
-				{
-					position761, tokenIndex761 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l762
-					}
-					position++
-					goto l761
-				l762:
-					position, tokenIndex = position761, tokenIndex761
-					if buffer[position] != rune('O') {
-						goto l757
-					}
-					position++
-				}
-			l761:
-				{
-					position763, tokenIndex763 := position, tokenIndex
-					if buffer[position] != rune('t') {
-						goto l764
-					}
-					position++
-					goto l763
-				l764:
-					position, tokenIndex = position763, tokenIndex763
-					if buffer[position] != rune('T') {
-						goto l757
-					}
-					position++
-				}
-			l763:
-				if buffer[position] != rune('_') {
-					goto l757
-				}
-				position++
-				{
-					position765, tokenIndex765 := position, tokenIndex
+					position741, tokenIndex741 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l766
+						goto l742
 					}
 					position++
-					goto l765
-				l766:
-					position, tokenIndex = position765, tokenIndex765
+					goto l741
+				l742:
+					position, tokenIndex = position741, tokenIndex741
 					if buffer[position] != rune('L') {
-						goto l757
+						goto l739
 					}
 					position++
 				}
-			l765:
+			l741:
 				{
-					position767, tokenIndex767 := position, tokenIndex
+					position743, tokenIndex743 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l768
+						goto l744
 					}
 					position++
-					goto l767
-				l768:
-					position, tokenIndex = position767, tokenIndex767
+					goto l743
+				l744:
+					position, tokenIndex = position743, tokenIndex743
 					if buffer[position] != rune('O') {
-						goto l757
+						goto l739
 					}
 					position++
 				}
-			l767:
+			l743:
 				if buffer[position] != rune('1') {
-					goto l757
+					goto l739
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l757
+					goto l739
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l757
+					goto l739
 				}
 				position++
-				if !_rules[ruleSymbolName]() {
-					goto l757
+				{
+					position745, tokenIndex745 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l746
+					}
+					goto l745
+				l746:
+					position, tokenIndex = position745, tokenIndex745
+					if !_rules[ruleSymbolName]() {
+						goto l739
+					}
 				}
-				add(ruleARMGOTLow12, position758)
+			l745:
+				{
+					position747, tokenIndex747 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l747
+					}
+					goto l748
+				l747:
+					position, tokenIndex = position747, tokenIndex747
+				}
+			l748:
+				add(ruleLow12BitsSymbolRef, position740)
 			}
 			return true
-		l757:
-			position, tokenIndex = position757, tokenIndex757
+		l739:
+			position, tokenIndex = position739, tokenIndex739
 			return false
 		},
-		/* 51 ARMPostincrement <- <'!'> */
+		/* 50 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
 		func() bool {
-			position769, tokenIndex769 := position, tokenIndex
+			position749, tokenIndex749 := position, tokenIndex
 			{
-				position770 := position
-				if buffer[position] != rune('!') {
-					goto l769
+				position750 := position
+				if buffer[position] != rune('[') {
+					goto l749
 				}
 				position++
-				add(ruleARMPostincrement, position770)
-			}
-			return true
-		l769:
-			position, tokenIndex = position769, tokenIndex769
-			return false
-		},
-		/* 52 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
-		func() bool {
-			position771, tokenIndex771 := position, tokenIndex
-			{
-				position772 := position
-				if buffer[position] != rune('(') {
-					goto l771
+				if !_rules[ruleARMRegister]() {
+					goto l749
 				}
-				position++
 				{
-					position773, tokenIndex773 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l773
-					}
-					goto l774
-				l773:
-					position, tokenIndex = position773, tokenIndex773
-				}
-			l774:
-				{
-					position775, tokenIndex775 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l775
-					}
-					goto l776
-				l775:
-					position, tokenIndex = position775, tokenIndex775
-				}
-			l776:
-				{
-					position777, tokenIndex777 := position, tokenIndex
+					position751, tokenIndex751 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l777
+						goto l751
 					}
 					position++
 					{
-						position779, tokenIndex779 := position, tokenIndex
+						position753, tokenIndex753 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l779
+							goto l753
 						}
-						goto l780
-					l779:
-						position, tokenIndex = position779, tokenIndex779
+						goto l754
+					l753:
+						position, tokenIndex = position753, tokenIndex753
 					}
-				l780:
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l777
-					}
+				l754:
 					{
-						position781, tokenIndex781 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l781
-						}
-						goto l782
-					l781:
-						position, tokenIndex = position781, tokenIndex781
-					}
-				l782:
-					{
-						position783, tokenIndex783 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l783
+						position755, tokenIndex755 := position, tokenIndex
+						if buffer[position] != rune('#') {
+							goto l756
 						}
 						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l783
+						if !_rules[ruleOffset]() {
+							goto l756
 						}
-						position++
-					l785:
 						{
-							position786, tokenIndex786 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l786
+							position757, tokenIndex757 := position, tokenIndex
+							{
+								position759, tokenIndex759 := position, tokenIndex
+								if buffer[position] != rune('*') {
+									goto l760
+								}
+								position++
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l760
+								}
+								position++
+							l761:
+								{
+									position762, tokenIndex762 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l762
+									}
+									position++
+									goto l761
+								l762:
+									position, tokenIndex = position762, tokenIndex762
+								}
+								goto l759
+							l760:
+								position, tokenIndex = position759, tokenIndex759
+								if buffer[position] != rune('*') {
+									goto l763
+								}
+								position++
+								if buffer[position] != rune('(') {
+									goto l763
+								}
+								position++
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l763
+								}
+								position++
+							l764:
+								{
+									position765, tokenIndex765 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l765
+									}
+									position++
+									goto l764
+								l765:
+									position, tokenIndex = position765, tokenIndex765
+								}
+								if !_rules[ruleOperator]() {
+									goto l763
+								}
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l763
+								}
+								position++
+							l766:
+								{
+									position767, tokenIndex767 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l767
+									}
+									position++
+									goto l766
+								l767:
+									position, tokenIndex = position767, tokenIndex767
+								}
+								if buffer[position] != rune(')') {
+									goto l763
+								}
+								position++
+								goto l759
+							l763:
+								position, tokenIndex = position759, tokenIndex759
+							l768:
+								{
+									position769, tokenIndex769 := position, tokenIndex
+									if buffer[position] != rune('+') {
+										goto l769
+									}
+									position++
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l769
+									}
+									position++
+								l770:
+									{
+										position771, tokenIndex771 := position, tokenIndex
+										if c := buffer[position]; c < rune('0') || c > rune('9') {
+											goto l771
+										}
+										position++
+										goto l770
+									l771:
+										position, tokenIndex = position771, tokenIndex771
+									}
+									goto l768
+								l769:
+									position, tokenIndex = position769, tokenIndex769
+								}
 							}
-							position++
-							goto l785
-						l786:
-							position, tokenIndex = position786, tokenIndex786
+						l759:
+							goto l758
+
+							position, tokenIndex = position757, tokenIndex757
 						}
-						goto l784
-					l783:
-						position, tokenIndex = position783, tokenIndex783
+					l758:
+						goto l755
+					l756:
+						position, tokenIndex = position755, tokenIndex755
+						if !_rules[ruleARMGOTLow12]() {
+							goto l772
+						}
+						goto l755
+					l772:
+						position, tokenIndex = position755, tokenIndex755
+						if !_rules[ruleLow12BitsSymbolRef]() {
+							goto l773
+						}
+						goto l755
+					l773:
+						position, tokenIndex = position755, tokenIndex755
+						if !_rules[ruleARMRegister]() {
+							goto l751
+						}
 					}
-				l784:
-					goto l778
-				l777:
-					position, tokenIndex = position777, tokenIndex777
+				l755:
+					{
+						position774, tokenIndex774 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l774
+						}
+						position++
+						{
+							position776, tokenIndex776 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l776
+							}
+							goto l777
+						l776:
+							position, tokenIndex = position776, tokenIndex776
+						}
+					l777:
+						if !_rules[ruleARMConstantTweak]() {
+							goto l774
+						}
+						goto l775
+					l774:
+						position, tokenIndex = position774, tokenIndex774
+					}
+				l775:
+					goto l752
+				l751:
+					position, tokenIndex = position751, tokenIndex751
 				}
-			l778:
-				if buffer[position] != rune(')') {
-					goto l771
+			l752:
+				if buffer[position] != rune(']') {
+					goto l749
 				}
 				position++
-				add(ruleBaseIndexScale, position772)
+				{
+					position778, tokenIndex778 := position, tokenIndex
+					if !_rules[ruleARMPostincrement]() {
+						goto l778
+					}
+					goto l779
+				l778:
+					position, tokenIndex = position778, tokenIndex778
+				}
+			l779:
+				add(ruleARMBaseIndexScale, position750)
 			}
 			return true
-		l771:
-			position, tokenIndex = position771, tokenIndex771
+		l749:
+			position, tokenIndex = position749, tokenIndex749
 			return false
 		},
-		/* 53 Operator <- <('+' / '-')> */
+		/* 51 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
 		func() bool {
-			position787, tokenIndex787 := position, tokenIndex
+			position780, tokenIndex780 := position, tokenIndex
 			{
-				position788 := position
+				position781 := position
+				if buffer[position] != rune(':') {
+					goto l780
+				}
+				position++
 				{
-					position789, tokenIndex789 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l790
+					position782, tokenIndex782 := position, tokenIndex
+					if buffer[position] != rune('g') {
+						goto l783
 					}
 					position++
-					goto l789
-				l790:
-					position, tokenIndex = position789, tokenIndex789
-					if buffer[position] != rune('-') {
+					goto l782
+				l783:
+					position, tokenIndex = position782, tokenIndex782
+					if buffer[position] != rune('G') {
+						goto l780
+					}
+					position++
+				}
+			l782:
+				{
+					position784, tokenIndex784 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l785
+					}
+					position++
+					goto l784
+				l785:
+					position, tokenIndex = position784, tokenIndex784
+					if buffer[position] != rune('O') {
+						goto l780
+					}
+					position++
+				}
+			l784:
+				{
+					position786, tokenIndex786 := position, tokenIndex
+					if buffer[position] != rune('t') {
 						goto l787
 					}
 					position++
+					goto l786
+				l787:
+					position, tokenIndex = position786, tokenIndex786
+					if buffer[position] != rune('T') {
+						goto l780
+					}
+					position++
 				}
-			l789:
-				add(ruleOperator, position788)
-			}
-			return true
-		l787:
-			position, tokenIndex = position787, tokenIndex787
-			return false
-		},
-		/* 54 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
-		func() bool {
-			position791, tokenIndex791 := position, tokenIndex
-			{
-				position792 := position
-				{
-					position793, tokenIndex793 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l793
-					}
-					position++
-					goto l794
-				l793:
-					position, tokenIndex = position793, tokenIndex793
+			l786:
+				if buffer[position] != rune('_') {
+					goto l780
 				}
-			l794:
+				position++
 				{
-					position795, tokenIndex795 := position, tokenIndex
-					if buffer[position] != rune('-') {
-						goto l795
+					position788, tokenIndex788 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l789
 					}
 					position++
-					goto l796
-				l795:
-					position, tokenIndex = position795, tokenIndex795
+					goto l788
+				l789:
+					position, tokenIndex = position788, tokenIndex788
+					if buffer[position] != rune('L') {
+						goto l780
+					}
+					position++
 				}
-			l796:
+			l788:
 				{
-					position797, tokenIndex797 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l798
-					}
-					position++
-					{
-						position799, tokenIndex799 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l800
-						}
-						position++
-						goto l799
-					l800:
-						position, tokenIndex = position799, tokenIndex799
-						if buffer[position] != rune('B') {
-							goto l798
-						}
-						position++
-					}
-				l799:
-					{
-						position803, tokenIndex803 := position, tokenIndex
-						if buffer[position] != rune('0') {
-							goto l804
-						}
-						position++
-						goto l803
-					l804:
-						position, tokenIndex = position803, tokenIndex803
-						if buffer[position] != rune('1') {
-							goto l798
-						}
-						position++
-					}
-				l803:
-				l801:
-					{
-						position802, tokenIndex802 := position, tokenIndex
-						{
-							position805, tokenIndex805 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l806
-							}
-							position++
-							goto l805
-						l806:
-							position, tokenIndex = position805, tokenIndex805
-							if buffer[position] != rune('1') {
-								goto l802
-							}
-							position++
-						}
-					l805:
-						goto l801
-					l802:
-						position, tokenIndex = position802, tokenIndex802
-					}
-					goto l797
-				l798:
-					position, tokenIndex = position797, tokenIndex797
-					if buffer[position] != rune('0') {
-						goto l807
-					}
-					position++
-					{
-						position808, tokenIndex808 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l809
-						}
-						position++
-						goto l808
-					l809:
-						position, tokenIndex = position808, tokenIndex808
-						if buffer[position] != rune('X') {
-							goto l807
-						}
-						position++
-					}
-				l808:
-					{
-						position812, tokenIndex812 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l813
-						}
-						position++
-						goto l812
-					l813:
-						position, tokenIndex = position812, tokenIndex812
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l814
-						}
-						position++
-						goto l812
-					l814:
-						position, tokenIndex = position812, tokenIndex812
-						{
-							position815, tokenIndex815 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l816
-							}
-							position++
-							goto l815
-						l816:
-							position, tokenIndex = position815, tokenIndex815
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l807
-							}
-							position++
-						}
-					l815:
-					}
-				l812:
-				l810:
-					{
-						position811, tokenIndex811 := position, tokenIndex
-						{
-							position817, tokenIndex817 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l818
-							}
-							position++
-							goto l817
-						l818:
-							position, tokenIndex = position817, tokenIndex817
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l819
-							}
-							position++
-							goto l817
-						l819:
-							position, tokenIndex = position817, tokenIndex817
-							{
-								position820, tokenIndex820 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l821
-								}
-								position++
-								goto l820
-							l821:
-								position, tokenIndex = position820, tokenIndex820
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l811
-								}
-								position++
-							}
-						l820:
-						}
-					l817:
-						goto l810
-					l811:
-						position, tokenIndex = position811, tokenIndex811
-					}
-					goto l797
-				l807:
-					position, tokenIndex = position797, tokenIndex797
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
+					position790, tokenIndex790 := position, tokenIndex
+					if buffer[position] != rune('o') {
 						goto l791
 					}
 					position++
-				l822:
+					goto l790
+				l791:
+					position, tokenIndex = position790, tokenIndex790
+					if buffer[position] != rune('O') {
+						goto l780
+					}
+					position++
+				}
+			l790:
+				if buffer[position] != rune('1') {
+					goto l780
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l780
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l780
+				}
+				position++
+				if !_rules[ruleSymbolName]() {
+					goto l780
+				}
+				add(ruleARMGOTLow12, position781)
+			}
+			return true
+		l780:
+			position, tokenIndex = position780, tokenIndex780
+			return false
+		},
+		/* 52 ARMPostincrement <- <'!'> */
+		func() bool {
+			position792, tokenIndex792 := position, tokenIndex
+			{
+				position793 := position
+				if buffer[position] != rune('!') {
+					goto l792
+				}
+				position++
+				add(ruleARMPostincrement, position793)
+			}
+			return true
+		l792:
+			position, tokenIndex = position792, tokenIndex792
+			return false
+		},
+		/* 53 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		func() bool {
+			position794, tokenIndex794 := position, tokenIndex
+			{
+				position795 := position
+				if buffer[position] != rune('(') {
+					goto l794
+				}
+				position++
+				{
+					position796, tokenIndex796 := position, tokenIndex
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l796
+					}
+					goto l797
+				l796:
+					position, tokenIndex = position796, tokenIndex796
+				}
+			l797:
+				{
+					position798, tokenIndex798 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l798
+					}
+					goto l799
+				l798:
+					position, tokenIndex = position798, tokenIndex798
+				}
+			l799:
+				{
+					position800, tokenIndex800 := position, tokenIndex
+					if buffer[position] != rune(',') {
+						goto l800
+					}
+					position++
 					{
-						position823, tokenIndex823 := position, tokenIndex
+						position802, tokenIndex802 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l802
+						}
+						goto l803
+					l802:
+						position, tokenIndex = position802, tokenIndex802
+					}
+				l803:
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l800
+					}
+					{
+						position804, tokenIndex804 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l804
+						}
+						goto l805
+					l804:
+						position, tokenIndex = position804, tokenIndex804
+					}
+				l805:
+					{
+						position806, tokenIndex806 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l806
+						}
+						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l806
+						}
+						position++
+					l808:
+						{
+							position809, tokenIndex809 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l809
+							}
+							position++
+							goto l808
+						l809:
+							position, tokenIndex = position809, tokenIndex809
+						}
+						goto l807
+					l806:
+						position, tokenIndex = position806, tokenIndex806
+					}
+				l807:
+					goto l801
+				l800:
+					position, tokenIndex = position800, tokenIndex800
+				}
+			l801:
+				if buffer[position] != rune(')') {
+					goto l794
+				}
+				position++
+				add(ruleBaseIndexScale, position795)
+			}
+			return true
+		l794:
+			position, tokenIndex = position794, tokenIndex794
+			return false
+		},
+		/* 54 Operator <- <('+' / '-')> */
+		func() bool {
+			position810, tokenIndex810 := position, tokenIndex
+			{
+				position811 := position
+				{
+					position812, tokenIndex812 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l813
+					}
+					position++
+					goto l812
+				l813:
+					position, tokenIndex = position812, tokenIndex812
+					if buffer[position] != rune('-') {
+						goto l810
+					}
+					position++
+				}
+			l812:
+				add(ruleOperator, position811)
+			}
+			return true
+		l810:
+			position, tokenIndex = position810, tokenIndex810
+			return false
+		},
+		/* 55 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position814, tokenIndex814 := position, tokenIndex
+			{
+				position815 := position
+				{
+					position816, tokenIndex816 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l816
+					}
+					position++
+					goto l817
+				l816:
+					position, tokenIndex = position816, tokenIndex816
+				}
+			l817:
+				{
+					position818, tokenIndex818 := position, tokenIndex
+					if buffer[position] != rune('-') {
+						goto l818
+					}
+					position++
+					goto l819
+				l818:
+					position, tokenIndex = position818, tokenIndex818
+				}
+			l819:
+				{
+					position820, tokenIndex820 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l821
+					}
+					position++
+					{
+						position822, tokenIndex822 := position, tokenIndex
+						if buffer[position] != rune('b') {
 							goto l823
 						}
 						position++
 						goto l822
 					l823:
-						position, tokenIndex = position823, tokenIndex823
+						position, tokenIndex = position822, tokenIndex822
+						if buffer[position] != rune('B') {
+							goto l821
+						}
+						position++
 					}
-				}
-			l797:
-				add(ruleOffset, position792)
-			}
-			return true
-		l791:
-			position, tokenIndex = position791, tokenIndex791
-			return false
-		},
-		/* 55 Section <- <([a-z] / [A-Z] / '@')+> */
-		func() bool {
-			position824, tokenIndex824 := position, tokenIndex
-			{
-				position825 := position
-				{
-					position828, tokenIndex828 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l829
+				l822:
+					{
+						position826, tokenIndex826 := position, tokenIndex
+						if buffer[position] != rune('0') {
+							goto l827
+						}
+						position++
+						goto l826
+					l827:
+						position, tokenIndex = position826, tokenIndex826
+						if buffer[position] != rune('1') {
+							goto l821
+						}
+						position++
 					}
-					position++
-					goto l828
-				l829:
-					position, tokenIndex = position828, tokenIndex828
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+				l826:
+				l824:
+					{
+						position825, tokenIndex825 := position, tokenIndex
+						{
+							position828, tokenIndex828 := position, tokenIndex
+							if buffer[position] != rune('0') {
+								goto l829
+							}
+							position++
+							goto l828
+						l829:
+							position, tokenIndex = position828, tokenIndex828
+							if buffer[position] != rune('1') {
+								goto l825
+							}
+							position++
+						}
+					l828:
+						goto l824
+					l825:
+						position, tokenIndex = position825, tokenIndex825
+					}
+					goto l820
+				l821:
+					position, tokenIndex = position820, tokenIndex820
+					if buffer[position] != rune('0') {
 						goto l830
 					}
 					position++
-					goto l828
-				l830:
-					position, tokenIndex = position828, tokenIndex828
-					if buffer[position] != rune('@') {
-						goto l824
-					}
-					position++
-				}
-			l828:
-			l826:
-				{
-					position827, tokenIndex827 := position, tokenIndex
 					{
 						position831, tokenIndex831 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
+						if buffer[position] != rune('x') {
 							goto l832
 						}
 						position++
 						goto l831
 					l832:
 						position, tokenIndex = position831, tokenIndex831
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l833
-						}
-						position++
-						goto l831
-					l833:
-						position, tokenIndex = position831, tokenIndex831
-						if buffer[position] != rune('@') {
-							goto l827
+						if buffer[position] != rune('X') {
+							goto l830
 						}
 						position++
 					}
 				l831:
-					goto l826
-				l827:
-					position, tokenIndex = position827, tokenIndex827
+					{
+						position835, tokenIndex835 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l836
+						}
+						position++
+						goto l835
+					l836:
+						position, tokenIndex = position835, tokenIndex835
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l837
+						}
+						position++
+						goto l835
+					l837:
+						position, tokenIndex = position835, tokenIndex835
+						{
+							position838, tokenIndex838 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('f') {
+								goto l839
+							}
+							position++
+							goto l838
+						l839:
+							position, tokenIndex = position838, tokenIndex838
+							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l830
+							}
+							position++
+						}
+					l838:
+					}
+				l835:
+				l833:
+					{
+						position834, tokenIndex834 := position, tokenIndex
+						{
+							position840, tokenIndex840 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l841
+							}
+							position++
+							goto l840
+						l841:
+							position, tokenIndex = position840, tokenIndex840
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l842
+							}
+							position++
+							goto l840
+						l842:
+							position, tokenIndex = position840, tokenIndex840
+							{
+								position843, tokenIndex843 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('f') {
+									goto l844
+								}
+								position++
+								goto l843
+							l844:
+								position, tokenIndex = position843, tokenIndex843
+								if c := buffer[position]; c < rune('A') || c > rune('F') {
+									goto l834
+								}
+								position++
+							}
+						l843:
+						}
+					l840:
+						goto l833
+					l834:
+						position, tokenIndex = position834, tokenIndex834
+					}
+					goto l820
+				l830:
+					position, tokenIndex = position820, tokenIndex820
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l814
+					}
+					position++
+				l845:
+					{
+						position846, tokenIndex846 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l846
+						}
+						position++
+						goto l845
+					l846:
+						position, tokenIndex = position846, tokenIndex846
+					}
 				}
-				add(ruleSection, position825)
+			l820:
+				add(ruleOffset, position815)
 			}
 			return true
-		l824:
-			position, tokenIndex = position824, tokenIndex824
+		l814:
+			position, tokenIndex = position814, tokenIndex814
 			return false
 		},
-		/* 56 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		/* 56 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position834, tokenIndex834 := position, tokenIndex
+			position847, tokenIndex847 := position, tokenIndex
 			{
-				position835 := position
+				position848 := position
+				{
+					position851, tokenIndex851 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l852
+					}
+					position++
+					goto l851
+				l852:
+					position, tokenIndex = position851, tokenIndex851
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l853
+					}
+					position++
+					goto l851
+				l853:
+					position, tokenIndex = position851, tokenIndex851
+					if buffer[position] != rune('@') {
+						goto l847
+					}
+					position++
+				}
+			l851:
+			l849:
+				{
+					position850, tokenIndex850 := position, tokenIndex
+					{
+						position854, tokenIndex854 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l855
+						}
+						position++
+						goto l854
+					l855:
+						position, tokenIndex = position854, tokenIndex854
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l856
+						}
+						position++
+						goto l854
+					l856:
+						position, tokenIndex = position854, tokenIndex854
+						if buffer[position] != rune('@') {
+							goto l850
+						}
+						position++
+					}
+				l854:
+					goto l849
+				l850:
+					position, tokenIndex = position850, tokenIndex850
+				}
+				add(ruleSection, position848)
+			}
+			return true
+		l847:
+			position, tokenIndex = position847, tokenIndex847
+			return false
+		},
+		/* 57 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		func() bool {
+			position857, tokenIndex857 := position, tokenIndex
+			{
+				position858 := position
 				if buffer[position] != rune('%') {
-					goto l834
+					goto l857
 				}
 				position++
 				{
-					position836, tokenIndex836 := position, tokenIndex
+					position859, tokenIndex859 := position, tokenIndex
 					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l837
+						goto l860
 					}
 					position++
-					goto l836
-				l837:
-					position, tokenIndex = position836, tokenIndex836
+					goto l859
+				l860:
+					position, tokenIndex = position859, tokenIndex859
 					if buffer[position] != rune('s') {
-						goto l834
+						goto l857
 					}
 					position++
 				}
-			l836:
+			l859:
 				if buffer[position] != rune('s') {
-					goto l834
+					goto l857
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l834
+					goto l857
 				}
 				position++
-				add(ruleSegmentRegister, position835)
+				add(ruleSegmentRegister, position858)
 			}
 			return true
-		l834:
-			position, tokenIndex = position834, tokenIndex834
+		l857:
+			position, tokenIndex = position857, tokenIndex857
 			return false
 		},
 	}
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/in.s b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
index 8b45e25..b21ebcb 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/in.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
@@ -78,6 +78,9 @@
 	add w0, w1, b2, sxtw
 	add w0, w1, b2, sxtx
 
+        // Aarch64 SVE2 added these forms:
+        ld1d { z1.d }, p0/z, [x13, x11, lsl #3]
+        ld1b { z11.b }, p15/z, [x10, #1, mul vl]
 
 local_function:
 
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/out.s b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
index 852312b..4c03265 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
@@ -125,6 +125,9 @@
 	add w0, w1, b2, sxtw
 	add w0, w1, b2, sxtx
 
+        // Aarch64 SVE2 added these forms:
+        ld1d { z1.d }, p0/z, [x13, x11, lsl #3]
+        ld1b { z11.b }, p15/z, [x10, #1, mul vl]
 
 .Llocal_function_local_target:
 local_function:
