delocate: support floating point literals in AArch64 asm.

fcmp supports comparing a register against zero without needing to load
zero into a register. This is expressed in the asm as:

   fcmp d0, #0.0

I.e. a literal floating-point zero, which delocate cannot currently
parse.

LLVM starts generating such instructions with [1].

[1] https://github.com/llvm/llvm-project/commit/97ff96173abc0e914d5c8716ccc6356342aca043

Bug: 383435112
Change-Id: I9c2cdd9f3377f56ba56a7287beed26061c2ac98f
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/74227
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: Adam Langley <agl@google.com>
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 1c41714..9ebe647 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -77,8 +77,10 @@
 TOCRefHigh <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@ha"
 TOCRefLow <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@l"
 IndirectionIndicator <- '*'
+Float <- [0-9]+ '.' [0-9]*
 RegisterOrConstant <- (('%'[[A-Z]][[A-Z0-9]]*) /
                        ('$'? ((Offset Offset) / Offset)) /
+                       ('#' Float ) /
                        ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)? ) /
                        ('#' '~'? '(' [0-9] WS? "<<" WS? [0-9] ')' ) /
                        ARMRegister)
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index ee8a108..7baa0e7 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -61,6 +61,7 @@
 	ruleTOCRefHigh
 	ruleTOCRefLow
 	ruleIndirectionIndicator
+	ruleFloat
 	ruleRegisterOrConstant
 	ruleARMConstantTweak
 	ruleARMRegister
@@ -125,6 +126,7 @@
 	"TOCRefHigh",
 	"TOCRefLow",
 	"IndirectionIndicator",
+	"Float",
 	"RegisterOrConstant",
 	"ARMConstantTweak",
 	"ARMRegister",
@@ -256,7 +258,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [61]func() bool
+	rules  [62]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -4626,424 +4628,428 @@
 			position, tokenIndex = position549, tokenIndex549
 			return false
 		},
-		/* 43 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
+		/* 43 Float <- <([0-9]+ '.' [0-9]*)> */
 		func() bool {
 			position551, tokenIndex551 := position, tokenIndex
 			{
 				position552 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l551
+				}
+				position++
+			l553:
 				{
-					position553, tokenIndex553 := position, tokenIndex
-					if buffer[position] != rune('%') {
+					position554, tokenIndex554 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l554
 					}
 					position++
-					{
-						position555, tokenIndex555 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l556
-						}
-						position++
-						goto l555
-					l556:
-						position, tokenIndex = position555, tokenIndex555
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l554
-						}
-						position++
-					}
-				l555:
-				l557:
-					{
-						position558, tokenIndex558 := position, tokenIndex
-						{
-							position559, tokenIndex559 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l560
-							}
-							position++
-							goto l559
-						l560:
-							position, tokenIndex = position559, tokenIndex559
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l561
-							}
-							position++
-							goto l559
-						l561:
-							position, tokenIndex = position559, tokenIndex559
-							{
-								position562, tokenIndex562 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l563
-								}
-								position++
-								goto l562
-							l563:
-								position, tokenIndex = position562, tokenIndex562
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l558
-								}
-								position++
-							}
-						l562:
-						}
-					l559:
-						goto l557
-					l558:
-						position, tokenIndex = position558, tokenIndex558
-					}
 					goto l553
 				l554:
-					position, tokenIndex = position553, tokenIndex553
-					{
-						position565, tokenIndex565 := position, tokenIndex
-						if buffer[position] != rune('$') {
-							goto l565
-						}
-						position++
-						goto l566
-					l565:
-						position, tokenIndex = position565, tokenIndex565
-					}
-				l566:
-					{
-						position567, tokenIndex567 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l568
-						}
-						if !_rules[ruleOffset]() {
-							goto l568
-						}
-						goto l567
-					l568:
-						position, tokenIndex = position567, tokenIndex567
-						if !_rules[ruleOffset]() {
-							goto l564
-						}
-					}
-				l567:
-					goto l553
-				l564:
-					position, tokenIndex = position553, tokenIndex553
-					if buffer[position] != rune('#') {
-						goto l569
-					}
-					position++
-					if !_rules[ruleOffset]() {
-						goto l569
-					}
-					{
-						position570, tokenIndex570 := position, tokenIndex
-						if buffer[position] != rune('*') {
-							goto l570
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l570
-						}
-						position++
-					l572:
-						{
-							position573, tokenIndex573 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l573
-							}
-							position++
-							goto l572
-						l573:
-							position, tokenIndex = position573, tokenIndex573
-						}
-						{
-							position574, tokenIndex574 := position, tokenIndex
-							if buffer[position] != rune('-') {
-								goto l574
-							}
-							position++
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l574
-							}
-							position++
-						l576:
-							{
-								position577, tokenIndex577 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l577
-								}
-								position++
-								goto l576
-							l577:
-								position, tokenIndex = position577, tokenIndex577
-							}
-							goto l575
-						l574:
-							position, tokenIndex = position574, tokenIndex574
-						}
-					l575:
-						goto l571
-					l570:
-						position, tokenIndex = position570, tokenIndex570
-					}
-				l571:
-					goto l553
-				l569:
-					position, tokenIndex = position553, tokenIndex553
-					if buffer[position] != rune('#') {
-						goto l578
-					}
-					position++
-					{
-						position579, tokenIndex579 := position, tokenIndex
-						if buffer[position] != rune('~') {
-							goto l579
-						}
-						position++
-						goto l580
-					l579:
-						position, tokenIndex = position579, tokenIndex579
-					}
-				l580:
-					if buffer[position] != rune('(') {
-						goto l578
-					}
-					position++
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l578
-					}
-					position++
-					{
-						position581, tokenIndex581 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l581
-						}
-						goto l582
-					l581:
-						position, tokenIndex = position581, tokenIndex581
-					}
-				l582:
-					if buffer[position] != rune('<') {
-						goto l578
-					}
-					position++
-					if buffer[position] != rune('<') {
-						goto l578
-					}
-					position++
-					{
-						position583, tokenIndex583 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l583
-						}
-						goto l584
-					l583:
-						position, tokenIndex = position583, tokenIndex583
-					}
-				l584:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l578
-					}
-					position++
-					if buffer[position] != rune(')') {
-						goto l578
-					}
-					position++
-					goto l553
-				l578:
-					position, tokenIndex = position553, tokenIndex553
-					if !_rules[ruleARMRegister]() {
-						goto l551
-					}
+					position, tokenIndex = position554, tokenIndex554
 				}
-			l553:
-				{
-					position585, tokenIndex585 := position, tokenIndex
-					{
-						position586, tokenIndex586 := position, tokenIndex
-						if buffer[position] != rune('f') {
-							goto l587
-						}
-						position++
-						goto l586
-					l587:
-						position, tokenIndex = position586, tokenIndex586
-						if buffer[position] != rune('b') {
-							goto l588
-						}
-						position++
-						goto l586
-					l588:
-						position, tokenIndex = position586, tokenIndex586
-						if buffer[position] != rune(':') {
-							goto l589
-						}
-						position++
-						goto l586
-					l589:
-						position, tokenIndex = position586, tokenIndex586
-						if buffer[position] != rune('(') {
-							goto l590
-						}
-						position++
-						goto l586
-					l590:
-						position, tokenIndex = position586, tokenIndex586
-						if buffer[position] != rune('+') {
-							goto l591
-						}
-						position++
-						goto l586
-					l591:
-						position, tokenIndex = position586, tokenIndex586
-						if buffer[position] != rune('-') {
-							goto l585
-						}
-						position++
-					}
-				l586:
+				if buffer[position] != rune('.') {
 					goto l551
-				l585:
-					position, tokenIndex = position585, tokenIndex585
 				}
-				add(ruleRegisterOrConstant, position552)
+				position++
+			l555:
+				{
+					position556, tokenIndex556 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l556
+					}
+					position++
+					goto l555
+				l556:
+					position, tokenIndex = position556, tokenIndex556
+				}
+				add(ruleFloat, position552)
 			}
 			return true
 		l551:
 			position, tokenIndex = position551, tokenIndex551
 			return false
 		},
-		/* 44 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')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9]))> */
+		/* 44 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
 		func() bool {
-			position592, tokenIndex592 := position, tokenIndex
+			position557, tokenIndex557 := position, tokenIndex
 			{
-				position593 := position
+				position558 := position
 				{
-					position594, tokenIndex594 := position, tokenIndex
+					position559, tokenIndex559 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l560
+					}
+					position++
 					{
-						position596, tokenIndex596 := position, tokenIndex
+						position561, tokenIndex561 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l562
+						}
+						position++
+						goto l561
+					l562:
+						position, tokenIndex = position561, tokenIndex561
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l560
+						}
+						position++
+					}
+				l561:
+				l563:
+					{
+						position564, tokenIndex564 := position, tokenIndex
 						{
-							position598, tokenIndex598 := position, tokenIndex
-							if buffer[position] != rune('u') {
-								goto l599
+							position565, tokenIndex565 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l566
 							}
 							position++
+							goto l565
+						l566:
+							position, tokenIndex = position565, tokenIndex565
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l567
+							}
+							position++
+							goto l565
+						l567:
+							position, tokenIndex = position565, tokenIndex565
+							{
+								position568, tokenIndex568 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l569
+								}
+								position++
+								goto l568
+							l569:
+								position, tokenIndex = position568, tokenIndex568
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l564
+								}
+								position++
+							}
+						l568:
+						}
+					l565:
+						goto l563
+					l564:
+						position, tokenIndex = position564, tokenIndex564
+					}
+					goto l559
+				l560:
+					position, tokenIndex = position559, tokenIndex559
+					{
+						position571, tokenIndex571 := position, tokenIndex
+						if buffer[position] != rune('$') {
+							goto l571
+						}
+						position++
+						goto l572
+					l571:
+						position, tokenIndex = position571, tokenIndex571
+					}
+				l572:
+					{
+						position573, tokenIndex573 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l574
+						}
+						if !_rules[ruleOffset]() {
+							goto l574
+						}
+						goto l573
+					l574:
+						position, tokenIndex = position573, tokenIndex573
+						if !_rules[ruleOffset]() {
+							goto l570
+						}
+					}
+				l573:
+					goto l559
+				l570:
+					position, tokenIndex = position559, tokenIndex559
+					if buffer[position] != rune('#') {
+						goto l575
+					}
+					position++
+					if !_rules[ruleFloat]() {
+						goto l575
+					}
+					goto l559
+				l575:
+					position, tokenIndex = position559, tokenIndex559
+					if buffer[position] != rune('#') {
+						goto l576
+					}
+					position++
+					if !_rules[ruleOffset]() {
+						goto l576
+					}
+					{
+						position577, tokenIndex577 := position, tokenIndex
+						if buffer[position] != rune('*') {
+							goto l577
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l577
+						}
+						position++
+					l579:
+						{
+							position580, tokenIndex580 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l580
+							}
+							position++
+							goto l579
+						l580:
+							position, tokenIndex = position580, tokenIndex580
+						}
+						{
+							position581, tokenIndex581 := position, tokenIndex
+							if buffer[position] != rune('-') {
+								goto l581
+							}
+							position++
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l581
+							}
+							position++
+						l583:
+							{
+								position584, tokenIndex584 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l584
+								}
+								position++
+								goto l583
+							l584:
+								position, tokenIndex = position584, tokenIndex584
+							}
+							goto l582
+						l581:
+							position, tokenIndex = position581, tokenIndex581
+						}
+					l582:
+						goto l578
+					l577:
+						position, tokenIndex = position577, tokenIndex577
+					}
+				l578:
+					goto l559
+				l576:
+					position, tokenIndex = position559, tokenIndex559
+					if buffer[position] != rune('#') {
+						goto l585
+					}
+					position++
+					{
+						position586, tokenIndex586 := position, tokenIndex
+						if buffer[position] != rune('~') {
+							goto l586
+						}
+						position++
+						goto l587
+					l586:
+						position, tokenIndex = position586, tokenIndex586
+					}
+				l587:
+					if buffer[position] != rune('(') {
+						goto l585
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l585
+					}
+					position++
+					{
+						position588, tokenIndex588 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l588
+						}
+						goto l589
+					l588:
+						position, tokenIndex = position588, tokenIndex588
+					}
+				l589:
+					if buffer[position] != rune('<') {
+						goto l585
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l585
+					}
+					position++
+					{
+						position590, tokenIndex590 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l590
+						}
+						goto l591
+					l590:
+						position, tokenIndex = position590, tokenIndex590
+					}
+				l591:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l585
+					}
+					position++
+					if buffer[position] != rune(')') {
+						goto l585
+					}
+					position++
+					goto l559
+				l585:
+					position, tokenIndex = position559, tokenIndex559
+					if !_rules[ruleARMRegister]() {
+						goto l557
+					}
+				}
+			l559:
+				{
+					position592, tokenIndex592 := position, tokenIndex
+					{
+						position593, tokenIndex593 := position, tokenIndex
+						if buffer[position] != rune('f') {
+							goto l594
+						}
+						position++
+						goto l593
+					l594:
+						position, tokenIndex = position593, tokenIndex593
+						if buffer[position] != rune('b') {
+							goto l595
+						}
+						position++
+						goto l593
+					l595:
+						position, tokenIndex = position593, tokenIndex593
+						if buffer[position] != rune(':') {
+							goto l596
+						}
+						position++
+						goto l593
+					l596:
+						position, tokenIndex = position593, tokenIndex593
+						if buffer[position] != rune('(') {
+							goto l597
+						}
+						position++
+						goto l593
+					l597:
+						position, tokenIndex = position593, tokenIndex593
+						if buffer[position] != rune('+') {
 							goto l598
-						l599:
-							position, tokenIndex = position598, tokenIndex598
-							if buffer[position] != rune('s') {
-								goto l597
-							}
-							position++
 						}
+						position++
+						goto l593
 					l598:
-						{
-							position600, tokenIndex600 := position, tokenIndex
-							if buffer[position] != rune('x') {
-								goto l601
-							}
-							position++
-							goto l600
-						l601:
-							position, tokenIndex = position600, tokenIndex600
-							if buffer[position] != rune('X') {
-								goto l597
-							}
-							position++
+						position, tokenIndex = position593, tokenIndex593
+						if buffer[position] != rune('-') {
+							goto l592
 						}
-					l600:
+						position++
+					}
+				l593:
+					goto l557
+				l592:
+					position, tokenIndex = position592, tokenIndex592
+				}
+				add(ruleRegisterOrConstant, position558)
+			}
+			return true
+		l557:
+			position, tokenIndex = position557, tokenIndex557
+			return false
+		},
+		/* 45 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')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9]))> */
+		func() bool {
+			position599, tokenIndex599 := position, tokenIndex
+			{
+				position600 := position
+				{
+					position601, tokenIndex601 := position, tokenIndex
+					{
+						position603, tokenIndex603 := position, tokenIndex
 						{
-							position602, tokenIndex602 := position, tokenIndex
-							if buffer[position] != rune('t') {
-								goto l603
-							}
-							position++
-							goto l602
-						l603:
-							position, tokenIndex = position602, tokenIndex602
-							if buffer[position] != rune('T') {
-								goto l597
-							}
-							position++
-						}
-					l602:
-						{
-							position604, tokenIndex604 := position, tokenIndex
-							if buffer[position] != rune('x') {
-								goto l605
-							}
-							position++
-							goto l604
-						l605:
-							position, tokenIndex = position604, tokenIndex604
-							if buffer[position] != rune('w') {
+							position605, tokenIndex605 := position, tokenIndex
+							if buffer[position] != rune('u') {
 								goto l606
 							}
 							position++
-							goto l604
+							goto l605
 						l606:
-							position, tokenIndex = position604, tokenIndex604
-							if buffer[position] != rune('h') {
-								goto l607
-							}
-							position++
-							goto l604
-						l607:
-							position, tokenIndex = position604, tokenIndex604
-							if buffer[position] != rune('b') {
-								goto l597
+							position, tokenIndex = position605, tokenIndex605
+							if buffer[position] != rune('s') {
+								goto l604
 							}
 							position++
 						}
-					l604:
-						goto l596
-					l597:
-						position, tokenIndex = position596, tokenIndex596
+					l605:
+						{
+							position607, tokenIndex607 := position, tokenIndex
+							if buffer[position] != rune('x') {
+								goto l608
+							}
+							position++
+							goto l607
+						l608:
+							position, tokenIndex = position607, tokenIndex607
+							if buffer[position] != rune('X') {
+								goto l604
+							}
+							position++
+						}
+					l607:
 						{
 							position609, tokenIndex609 := position, tokenIndex
-							if buffer[position] != rune('l') {
+							if buffer[position] != rune('t') {
 								goto l610
 							}
 							position++
 							goto l609
 						l610:
 							position, tokenIndex = position609, tokenIndex609
-							if buffer[position] != rune('L') {
-								goto l608
+							if buffer[position] != rune('T') {
+								goto l604
 							}
 							position++
 						}
 					l609:
 						{
 							position611, tokenIndex611 := position, tokenIndex
-							if buffer[position] != rune('s') {
+							if buffer[position] != rune('x') {
 								goto l612
 							}
 							position++
 							goto l611
 						l612:
 							position, tokenIndex = position611, tokenIndex611
-							if buffer[position] != rune('S') {
-								goto l608
+							if buffer[position] != rune('w') {
+								goto l613
+							}
+							position++
+							goto l611
+						l613:
+							position, tokenIndex = position611, tokenIndex611
+							if buffer[position] != rune('h') {
+								goto l614
+							}
+							position++
+							goto l611
+						l614:
+							position, tokenIndex = position611, tokenIndex611
+							if buffer[position] != rune('b') {
+								goto l604
 							}
 							position++
 						}
 					l611:
-						{
-							position613, tokenIndex613 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l614
-							}
-							position++
-							goto l613
-						l614:
-							position, tokenIndex = position613, tokenIndex613
-							if buffer[position] != rune('L') {
-								goto l608
-							}
-							position++
-						}
-					l613:
-						goto l596
-					l608:
-						position, tokenIndex = position596, tokenIndex596
+						goto l603
+					l604:
+						position, tokenIndex = position603, tokenIndex603
 						{
 							position616, tokenIndex616 := position, tokenIndex
 							if buffer[position] != rune('l') {
@@ -5076,32 +5082,32 @@
 					l618:
 						{
 							position620, tokenIndex620 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							if buffer[position] != rune('l') {
 								goto l621
 							}
 							position++
 							goto l620
 						l621:
 							position, tokenIndex = position620, tokenIndex620
-							if buffer[position] != rune('R') {
+							if buffer[position] != rune('L') {
 								goto l615
 							}
 							position++
 						}
 					l620:
-						goto l596
+						goto l603
 					l615:
-						position, tokenIndex = position596, tokenIndex596
+						position, tokenIndex = position603, tokenIndex603
 						{
 							position623, tokenIndex623 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							if buffer[position] != rune('l') {
 								goto l624
 							}
 							position++
 							goto l623
 						l624:
 							position, tokenIndex = position623, tokenIndex623
-							if buffer[position] != rune('R') {
+							if buffer[position] != rune('L') {
 								goto l622
 							}
 							position++
@@ -5109,14 +5115,14 @@
 					l623:
 						{
 							position625, tokenIndex625 := position, tokenIndex
-							if buffer[position] != rune('o') {
+							if buffer[position] != rune('s') {
 								goto l626
 							}
 							position++
 							goto l625
 						l626:
 							position, tokenIndex = position625, tokenIndex625
-							if buffer[position] != rune('O') {
+							if buffer[position] != rune('S') {
 								goto l622
 							}
 							position++
@@ -5137,390 +5143,390 @@
 							position++
 						}
 					l627:
-						goto l596
+						goto l603
 					l622:
-						position, tokenIndex = position596, tokenIndex596
+						position, tokenIndex = position603, tokenIndex603
 						{
-							position629, tokenIndex629 := position, tokenIndex
-							if buffer[position] != rune('a') {
-								goto l630
-							}
-							position++
-							goto l629
-						l630:
-							position, tokenIndex = position629, tokenIndex629
-							if buffer[position] != rune('A') {
-								goto l595
-							}
-							position++
-						}
-					l629:
-						{
-							position631, tokenIndex631 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l632
-							}
-							position++
-							goto l631
-						l632:
-							position, tokenIndex = position631, tokenIndex631
-							if buffer[position] != rune('S') {
-								goto l595
-							}
-							position++
-						}
-					l631:
-						{
-							position633, tokenIndex633 := position, tokenIndex
+							position630, tokenIndex630 := position, tokenIndex
 							if buffer[position] != rune('r') {
-								goto l634
+								goto l631
 							}
 							position++
-							goto l633
-						l634:
-							position, tokenIndex = position633, tokenIndex633
+							goto l630
+						l631:
+							position, tokenIndex = position630, tokenIndex630
 							if buffer[position] != rune('R') {
-								goto l595
+								goto l629
 							}
 							position++
 						}
-					l633:
+					l630:
+						{
+							position632, tokenIndex632 := position, tokenIndex
+							if buffer[position] != rune('o') {
+								goto l633
+							}
+							position++
+							goto l632
+						l633:
+							position, tokenIndex = position632, tokenIndex632
+							if buffer[position] != rune('O') {
+								goto l629
+							}
+							position++
+						}
+					l632:
+						{
+							position634, tokenIndex634 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l635
+							}
+							position++
+							goto l634
+						l635:
+							position, tokenIndex = position634, tokenIndex634
+							if buffer[position] != rune('R') {
+								goto l629
+							}
+							position++
+						}
+					l634:
+						goto l603
+					l629:
+						position, tokenIndex = position603, tokenIndex603
+						{
+							position636, tokenIndex636 := position, tokenIndex
+							if buffer[position] != rune('a') {
+								goto l637
+							}
+							position++
+							goto l636
+						l637:
+							position, tokenIndex = position636, tokenIndex636
+							if buffer[position] != rune('A') {
+								goto l602
+							}
+							position++
+						}
+					l636:
+						{
+							position638, tokenIndex638 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l639
+							}
+							position++
+							goto l638
+						l639:
+							position, tokenIndex = position638, tokenIndex638
+							if buffer[position] != rune('S') {
+								goto l602
+							}
+							position++
+						}
+					l638:
+						{
+							position640, tokenIndex640 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l641
+							}
+							position++
+							goto l640
+						l641:
+							position, tokenIndex = position640, tokenIndex640
+							if buffer[position] != rune('R') {
+								goto l602
+							}
+							position++
+						}
+					l640:
 					}
-				l596:
+				l603:
 					{
-						position635, tokenIndex635 := position, tokenIndex
+						position642, tokenIndex642 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l635
+							goto l642
 						}
 						if buffer[position] != rune('#') {
-							goto l635
+							goto l642
 						}
 						position++
 						if !_rules[ruleOffset]() {
-							goto l635
+							goto l642
 						}
-						goto l636
-					l635:
-						position, tokenIndex = position635, tokenIndex635
-					}
-				l636:
-					goto l594
-				l595:
-					position, tokenIndex = position594, tokenIndex594
-					{
-						position638, tokenIndex638 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l639
-						}
-						position++
-						goto l638
-					l639:
-						position, tokenIndex = position638, tokenIndex638
-						if buffer[position] != rune('M') {
-							goto l637
-						}
-						position++
-					}
-				l638:
-					{
-						position640, tokenIndex640 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l641
-						}
-						position++
-						goto l640
-					l641:
-						position, tokenIndex = position640, tokenIndex640
-						if buffer[position] != rune('U') {
-							goto l637
-						}
-						position++
-					}
-				l640:
-					{
-						position642, tokenIndex642 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l643
-						}
-						position++
-						goto l642
-					l643:
+						goto l643
+					l642:
 						position, tokenIndex = position642, tokenIndex642
-						if buffer[position] != rune('L') {
-							goto l637
+					}
+				l643:
+					goto l601
+				l602:
+					position, tokenIndex = position601, tokenIndex601
+					{
+						position645, tokenIndex645 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l646
+						}
+						position++
+						goto l645
+					l646:
+						position, tokenIndex = position645, tokenIndex645
+						if buffer[position] != rune('M') {
+							goto l644
 						}
 						position++
 					}
-				l642:
+				l645:
+					{
+						position647, tokenIndex647 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l648
+						}
+						position++
+						goto l647
+					l648:
+						position, tokenIndex = position647, tokenIndex647
+						if buffer[position] != rune('U') {
+							goto l644
+						}
+						position++
+					}
+				l647:
+					{
+						position649, tokenIndex649 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l650
+						}
+						position++
+						goto l649
+					l650:
+						position, tokenIndex = position649, tokenIndex649
+						if buffer[position] != rune('L') {
+							goto l644
+						}
+						position++
+					}
+				l649:
 					if buffer[position] != rune(' ') {
-						goto l637
+						goto l644
 					}
 					position++
 					{
-						position644, tokenIndex644 := position, tokenIndex
+						position651, tokenIndex651 := position, tokenIndex
 						if buffer[position] != rune('v') {
-							goto l645
+							goto l652
 						}
 						position++
-						goto l644
-					l645:
-						position, tokenIndex = position644, tokenIndex644
+						goto l651
+					l652:
+						position, tokenIndex = position651, tokenIndex651
 						if buffer[position] != rune('V') {
-							goto l637
+							goto l644
 						}
 						position++
 					}
+				l651:
+					{
+						position653, tokenIndex653 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l654
+						}
+						position++
+						goto l653
+					l654:
+						position, tokenIndex = position653, tokenIndex653
+						if buffer[position] != rune('L') {
+							goto l644
+						}
+						position++
+					}
+				l653:
+					goto l601
 				l644:
+					position, tokenIndex = position601, tokenIndex601
 					{
-						position646, tokenIndex646 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l647
-						}
-						position++
-						goto l646
-					l647:
-						position, tokenIndex = position646, tokenIndex646
-						if buffer[position] != rune('L') {
-							goto l637
-						}
-						position++
-					}
-				l646:
-					goto l594
-				l637:
-					position, tokenIndex = position594, tokenIndex594
-					{
-						position648, tokenIndex648 := position, tokenIndex
+						position655, tokenIndex655 := position, tokenIndex
 						if buffer[position] != rune('m') {
-							goto l649
+							goto l656
 						}
 						position++
-						goto l648
-					l649:
-						position, tokenIndex = position648, tokenIndex648
+						goto l655
+					l656:
+						position, tokenIndex = position655, tokenIndex655
 						if buffer[position] != rune('M') {
-							goto l592
+							goto l599
 						}
 						position++
 					}
-				l648:
+				l655:
 					{
-						position650, tokenIndex650 := position, tokenIndex
+						position657, tokenIndex657 := position, tokenIndex
 						if buffer[position] != rune('u') {
-							goto l651
+							goto l658
 						}
 						position++
-						goto l650
-					l651:
-						position, tokenIndex = position650, tokenIndex650
+						goto l657
+					l658:
+						position, tokenIndex = position657, tokenIndex657
 						if buffer[position] != rune('U') {
-							goto l592
+							goto l599
 						}
 						position++
 					}
-				l650:
+				l657:
 					{
-						position652, tokenIndex652 := position, tokenIndex
+						position659, tokenIndex659 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l653
+							goto l660
 						}
 						position++
-						goto l652
-					l653:
-						position, tokenIndex = position652, tokenIndex652
+						goto l659
+					l660:
+						position, tokenIndex = position659, tokenIndex659
 						if buffer[position] != rune('L') {
-							goto l592
+							goto l599
 						}
 						position++
 					}
-				l652:
+				l659:
 					if buffer[position] != rune(' ') {
-						goto l592
+						goto l599
 					}
 					position++
 					if buffer[position] != rune('#') {
-						goto l592
+						goto l599
 					}
 					position++
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l592
+						goto l599
 					}
 					position++
 				}
-			l594:
-				add(ruleARMConstantTweak, position593)
+			l601:
+				add(ruleARMConstantTweak, position600)
 			}
 			return true
-		l592:
-			position, tokenIndex = position592, tokenIndex592
+		l599:
+			position, tokenIndex = position599, tokenIndex599
 			return false
 		},
-		/* 45 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')) / SVE2PredicateRegister / ARMVectorRegister / SVE2SpecialValue / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
+		/* 46 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')) / SVE2PredicateRegister / ARMVectorRegister / SVE2SpecialValue / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
 		func() bool {
-			position654, tokenIndex654 := position, tokenIndex
+			position661, tokenIndex661 := position, tokenIndex
 			{
-				position655 := position
+				position662 := position
 				{
-					position656, tokenIndex656 := position, tokenIndex
+					position663, tokenIndex663 := position, tokenIndex
 					{
-						position658, tokenIndex658 := position, tokenIndex
+						position665, tokenIndex665 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l659
-						}
-						position++
-						goto l658
-					l659:
-						position, tokenIndex = position658, tokenIndex658
-						if buffer[position] != rune('S') {
-							goto l657
-						}
-						position++
-					}
-				l658:
-					{
-						position660, tokenIndex660 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l661
-						}
-						position++
-						goto l660
-					l661:
-						position, tokenIndex = position660, tokenIndex660
-						if buffer[position] != rune('P') {
-							goto l657
-						}
-						position++
-					}
-				l660:
-					goto l656
-				l657:
-					position, tokenIndex = position656, tokenIndex656
-					{
-						position663, tokenIndex663 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l664
-						}
-						position++
-						goto l663
-					l664:
-						position, tokenIndex = position663, tokenIndex663
-						if buffer[position] != rune('w') {
-							goto l665
-						}
-						position++
-						goto l663
-					l665:
-						position, tokenIndex = position663, tokenIndex663
-						if buffer[position] != rune('d') {
 							goto l666
 						}
 						position++
-						goto l663
+						goto l665
 					l666:
-						position, tokenIndex = position663, tokenIndex663
-						if buffer[position] != rune('q') {
-							goto l667
+						position, tokenIndex = position665, tokenIndex665
+						if buffer[position] != rune('S') {
+							goto l664
 						}
 						position++
-						goto l663
-					l667:
-						position, tokenIndex = position663, tokenIndex663
-						if buffer[position] != rune('s') {
+					}
+				l665:
+					{
+						position667, tokenIndex667 := position, tokenIndex
+						if buffer[position] != rune('p') {
 							goto l668
 						}
 						position++
-						goto l663
+						goto l667
 					l668:
-						position, tokenIndex = position663, tokenIndex663
-						if buffer[position] != rune('h') {
-							goto l669
-						}
-						position++
-						goto l663
-					l669:
-						position, tokenIndex = position663, tokenIndex663
-						if buffer[position] != rune('b') {
-							goto l662
+						position, tokenIndex = position667, tokenIndex667
+						if buffer[position] != rune('P') {
+							goto l664
 						}
 						position++
 					}
-				l663:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l662
-					}
-					position++
+				l667:
+					goto l663
+				l664:
+					position, tokenIndex = position663, tokenIndex663
 					{
 						position670, tokenIndex670 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l670
+						if buffer[position] != rune('x') {
+							goto l671
 						}
 						position++
-						goto l671
-					l670:
+						goto l670
+					l671:
 						position, tokenIndex = position670, tokenIndex670
-					}
-				l671:
-					goto l656
-				l662:
-					position, tokenIndex = position656, tokenIndex656
-					{
-						position673, tokenIndex673 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('w') {
+							goto l672
+						}
+						position++
+						goto l670
+					l672:
+						position, tokenIndex = position670, tokenIndex670
+						if buffer[position] != rune('d') {
+							goto l673
+						}
+						position++
+						goto l670
+					l673:
+						position, tokenIndex = position670, tokenIndex670
+						if buffer[position] != rune('q') {
 							goto l674
 						}
 						position++
-						goto l673
+						goto l670
 					l674:
-						position, tokenIndex = position673, tokenIndex673
-						if buffer[position] != rune('X') {
-							goto l672
+						position, tokenIndex = position670, tokenIndex670
+						if buffer[position] != rune('s') {
+							goto l675
 						}
 						position++
-					}
-				l673:
-					{
-						position675, tokenIndex675 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						goto l670
+					l675:
+						position, tokenIndex = position670, tokenIndex670
+						if buffer[position] != rune('h') {
 							goto l676
 						}
 						position++
-						goto l675
+						goto l670
 					l676:
-						position, tokenIndex = position675, tokenIndex675
-						if buffer[position] != rune('Z') {
-							goto l672
+						position, tokenIndex = position670, tokenIndex670
+						if buffer[position] != rune('b') {
+							goto l669
 						}
 						position++
 					}
-				l675:
+				l670:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l669
+					}
+					position++
 					{
 						position677, tokenIndex677 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l678
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l677
 						}
 						position++
-						goto l677
-					l678:
+						goto l678
+					l677:
 						position, tokenIndex = position677, tokenIndex677
-						if buffer[position] != rune('R') {
-							goto l672
-						}
-						position++
 					}
-				l677:
-					goto l656
-				l672:
-					position, tokenIndex = position656, tokenIndex656
+				l678:
+					goto l663
+				l669:
+					position, tokenIndex = position663, tokenIndex663
 					{
 						position680, tokenIndex680 := position, tokenIndex
-						if buffer[position] != rune('w') {
+						if buffer[position] != rune('x') {
 							goto l681
 						}
 						position++
 						goto l680
 					l681:
 						position, tokenIndex = position680, tokenIndex680
-						if buffer[position] != rune('W') {
+						if buffer[position] != rune('X') {
 							goto l679
 						}
 						position++
@@ -5556,19 +5562,19 @@
 						position++
 					}
 				l684:
-					goto l656
+					goto l663
 				l679:
-					position, tokenIndex = position656, tokenIndex656
+					position, tokenIndex = position663, tokenIndex663
 					{
 						position687, tokenIndex687 := position, tokenIndex
-						if buffer[position] != rune('n') {
+						if buffer[position] != rune('w') {
 							goto l688
 						}
 						position++
 						goto l687
 					l688:
 						position, tokenIndex = position687, tokenIndex687
-						if buffer[position] != rune('N') {
+						if buffer[position] != rune('W') {
 							goto l686
 						}
 						position++
@@ -5591,480 +5597,476 @@
 				l689:
 					{
 						position691, tokenIndex691 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('r') {
 							goto l692
 						}
 						position++
 						goto l691
 					l692:
 						position, tokenIndex = position691, tokenIndex691
-						if buffer[position] != rune('C') {
+						if buffer[position] != rune('R') {
 							goto l686
 						}
 						position++
 					}
 				l691:
-					{
-						position693, tokenIndex693 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l694
-						}
-						position++
-						goto l693
-					l694:
-						position, tokenIndex = position693, tokenIndex693
-						if buffer[position] != rune('V') {
-							goto l686
-						}
-						position++
-					}
-				l693:
-					goto l656
+					goto l663
 				l686:
-					position, tokenIndex = position656, tokenIndex656
-					if !_rules[ruleSVE2PredicateRegister]() {
-						goto l695
+					position, tokenIndex = position663, tokenIndex663
+					{
+						position694, tokenIndex694 := position, tokenIndex
+						if buffer[position] != rune('n') {
+							goto l695
+						}
+						position++
+						goto l694
+					l695:
+						position, tokenIndex = position694, tokenIndex694
+						if buffer[position] != rune('N') {
+							goto l693
+						}
+						position++
 					}
-					goto l656
-				l695:
-					position, tokenIndex = position656, tokenIndex656
-					if !_rules[ruleARMVectorRegister]() {
+				l694:
+					{
+						position696, tokenIndex696 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l697
+						}
+						position++
 						goto l696
+					l697:
+						position, tokenIndex = position696, tokenIndex696
+						if buffer[position] != rune('Z') {
+							goto l693
+						}
+						position++
 					}
-					goto l656
 				l696:
-					position, tokenIndex = position656, tokenIndex656
-					if !_rules[ruleSVE2SpecialValue]() {
-						goto l697
+					{
+						position698, tokenIndex698 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l699
+						}
+						position++
+						goto l698
+					l699:
+						position, tokenIndex = position698, tokenIndex698
+						if buffer[position] != rune('C') {
+							goto l693
+						}
+						position++
 					}
-					goto l656
-				l697:
-					position, tokenIndex = position656, tokenIndex656
+				l698:
+					{
+						position700, tokenIndex700 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l701
+						}
+						position++
+						goto l700
+					l701:
+						position, tokenIndex = position700, tokenIndex700
+						if buffer[position] != rune('V') {
+							goto l693
+						}
+						position++
+					}
+				l700:
+					goto l663
+				l693:
+					position, tokenIndex = position663, tokenIndex663
+					if !_rules[ruleSVE2PredicateRegister]() {
+						goto l702
+					}
+					goto l663
+				l702:
+					position, tokenIndex = position663, tokenIndex663
+					if !_rules[ruleARMVectorRegister]() {
+						goto l703
+					}
+					goto l663
+				l703:
+					position, tokenIndex = position663, tokenIndex663
+					if !_rules[ruleSVE2SpecialValue]() {
+						goto l704
+					}
+					goto l663
+				l704:
+					position, tokenIndex = position663, tokenIndex663
 					if buffer[position] != rune('{') {
-						goto l654
+						goto l661
 					}
 					position++
 					{
-						position698, tokenIndex698 := position, tokenIndex
+						position705, tokenIndex705 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l698
+							goto l705
 						}
-						goto l699
-					l698:
-						position, tokenIndex = position698, tokenIndex698
+						goto l706
+					l705:
+						position, tokenIndex = position705, tokenIndex705
 					}
-				l699:
+				l706:
 					if !_rules[ruleARMVectorRegister]() {
-						goto l654
+						goto l661
 					}
-				l700:
+				l707:
 					{
-						position701, tokenIndex701 := position, tokenIndex
+						position708, tokenIndex708 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l701
+							goto l708
 						}
 						position++
 						{
-							position702, tokenIndex702 := position, tokenIndex
+							position709, tokenIndex709 := position, tokenIndex
 							if !_rules[ruleWS]() {
-								goto l702
+								goto l709
 							}
-							goto l703
-						l702:
-							position, tokenIndex = position702, tokenIndex702
+							goto l710
+						l709:
+							position, tokenIndex = position709, tokenIndex709
 						}
-					l703:
+					l710:
 						if !_rules[ruleARMVectorRegister]() {
-							goto l701
+							goto l708
 						}
-						goto l700
-					l701:
-						position, tokenIndex = position701, tokenIndex701
+						goto l707
+					l708:
+						position, tokenIndex = position708, tokenIndex708
 					}
 					{
-						position704, tokenIndex704 := position, tokenIndex
+						position711, tokenIndex711 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l704
+							goto l711
 						}
-						goto l705
-					l704:
-						position, tokenIndex = position704, tokenIndex704
+						goto l712
+					l711:
+						position, tokenIndex = position711, tokenIndex711
 					}
-				l705:
+				l712:
 					if buffer[position] != rune('}') {
-						goto l654
+						goto l661
 					}
 					position++
 					{
-						position706, tokenIndex706 := position, tokenIndex
+						position713, tokenIndex713 := position, tokenIndex
 						if buffer[position] != rune('[') {
-							goto l706
+							goto l713
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l706
+							goto l713
 						}
 						position++
 						{
-							position708, tokenIndex708 := position, tokenIndex
+							position715, tokenIndex715 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l708
+								goto l715
 							}
 							position++
-							goto l709
-						l708:
-							position, tokenIndex = position708, tokenIndex708
+							goto l716
+						l715:
+							position, tokenIndex = position715, tokenIndex715
 						}
-					l709:
+					l716:
 						if buffer[position] != rune(']') {
-							goto l706
+							goto l713
 						}
 						position++
-						goto l707
-					l706:
-						position, tokenIndex = position706, tokenIndex706
+						goto l714
+					l713:
+						position, tokenIndex = position713, tokenIndex713
 					}
-				l707:
+				l714:
 				}
-			l656:
-				add(ruleARMRegister, position655)
+			l663:
+				add(ruleARMRegister, position662)
 			}
 			return true
-		l654:
-			position, tokenIndex = position654, tokenIndex654
+		l661:
+			position, tokenIndex = position661, tokenIndex661
 			return false
 		},
-		/* 46 ARMVectorRegister <- <(('p' / 'v' / 'z') [0-9] [0-9]? !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_') ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
+		/* 47 ARMVectorRegister <- <(('p' / 'v' / 'z') [0-9] [0-9]? !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_') ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
 		func() bool {
-			position710, tokenIndex710 := position, tokenIndex
+			position717, tokenIndex717 := position, tokenIndex
 			{
-				position711 := position
+				position718 := position
 				{
-					position712, tokenIndex712 := position, tokenIndex
+					position719, tokenIndex719 := position, tokenIndex
 					if buffer[position] != rune('p') {
-						goto l713
+						goto l720
 					}
 					position++
-					goto l712
-				l713:
-					position, tokenIndex = position712, tokenIndex712
+					goto l719
+				l720:
+					position, tokenIndex = position719, tokenIndex719
 					if buffer[position] != rune('v') {
-						goto l714
+						goto l721
 					}
 					position++
-					goto l712
-				l714:
-					position, tokenIndex = position712, tokenIndex712
+					goto l719
+				l721:
+					position, tokenIndex = position719, tokenIndex719
 					if buffer[position] != rune('z') {
-						goto l710
+						goto l717
 					}
 					position++
 				}
-			l712:
+			l719:
 				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l710
+					goto l717
 				}
 				position++
 				{
-					position715, tokenIndex715 := position, tokenIndex
+					position722, tokenIndex722 := position, tokenIndex
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l715
+						goto l722
 					}
 					position++
-					goto l716
-				l715:
-					position, tokenIndex = position715, tokenIndex715
+					goto l723
+				l722:
+					position, tokenIndex = position722, tokenIndex722
 				}
-			l716:
-				{
-					position717, tokenIndex717 := position, tokenIndex
-					{
-						position718, tokenIndex718 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l719
-						}
-						position++
-						goto l718
-					l719:
-						position, tokenIndex = position718, tokenIndex718
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l720
-						}
-						position++
-						goto l718
-					l720:
-						position, tokenIndex = position718, tokenIndex718
-						{
-							position722, tokenIndex722 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l723
-							}
-							position++
-							goto l722
-						l723:
-							position, tokenIndex = position722, tokenIndex722
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l721
-							}
-							position++
-						}
-					l722:
-						goto l718
-					l721:
-						position, tokenIndex = position718, tokenIndex718
-						if buffer[position] != rune('_') {
-							goto l717
-						}
-						position++
-					}
-				l718:
-					goto l710
-				l717:
-					position, tokenIndex = position717, tokenIndex717
-				}
+			l723:
 				{
 					position724, tokenIndex724 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l724
-					}
-					position++
-				l726:
 					{
-						position727, tokenIndex727 := position, tokenIndex
+						position725, tokenIndex725 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l726
+						}
+						position++
+						goto l725
+					l726:
+						position, tokenIndex = position725, tokenIndex725
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l727
 						}
 						position++
-						goto l726
+						goto l725
 					l727:
-						position, tokenIndex = position727, tokenIndex727
-					}
-					{
-						position728, tokenIndex728 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						position, tokenIndex = position725, tokenIndex725
+						{
+							position729, tokenIndex729 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l730
+							}
+							position++
 							goto l729
+						l730:
+							position, tokenIndex = position729, tokenIndex729
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l728
+							}
+							position++
 						}
-						position++
-						goto l728
 					l729:
-						position, tokenIndex = position728, tokenIndex728
-						if buffer[position] != rune('s') {
-							goto l730
-						}
-						position++
-						goto l728
-					l730:
-						position, tokenIndex = position728, tokenIndex728
-						if buffer[position] != rune('d') {
-							goto l731
-						}
-						position++
-						goto l728
-					l731:
-						position, tokenIndex = position728, tokenIndex728
-						if buffer[position] != rune('h') {
-							goto l732
-						}
-						position++
-						goto l728
-					l732:
-						position, tokenIndex = position728, tokenIndex728
-						if buffer[position] != rune('q') {
+						goto l725
+					l728:
+						position, tokenIndex = position725, tokenIndex725
+						if buffer[position] != rune('_') {
 							goto l724
 						}
 						position++
 					}
-				l728:
-					{
-						position733, tokenIndex733 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l733
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l733
-						}
-						position++
-						{
-							position735, tokenIndex735 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l735
-							}
-							position++
-							goto l736
-						l735:
-							position, tokenIndex = position735, tokenIndex735
-						}
-					l736:
-						if buffer[position] != rune(']') {
-							goto l733
-						}
-						position++
-						goto l734
-					l733:
-						position, tokenIndex = position733, tokenIndex733
-					}
-				l734:
-					goto l725
+				l725:
+					goto l717
 				l724:
 					position, tokenIndex = position724, tokenIndex724
 				}
-			l725:
-				add(ruleARMVectorRegister, position711)
-			}
-			return true
-		l710:
-			position, tokenIndex = position710, tokenIndex710
-			return false
-		},
-		/* 47 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
-		func() bool {
-			position737, tokenIndex737 := position, tokenIndex
-			{
-				position738 := position
 				{
-					position739, tokenIndex739 := position, tokenIndex
-					if buffer[position] != rune('p') {
-						goto l740
+					position731, tokenIndex731 := position, tokenIndex
+					if buffer[position] != rune('.') {
+						goto l731
 					}
 					position++
-					goto l739
-				l740:
-					position, tokenIndex = position739, tokenIndex739
-					if buffer[position] != rune('P') {
-						goto l737
-					}
-					position++
-				}
-			l739:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l737
-				}
-				position++
-				{
-					position741, tokenIndex741 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l741
-					}
-					position++
-					goto l742
-				l741:
-					position, tokenIndex = position741, tokenIndex741
-				}
-			l742:
-				if buffer[position] != rune('/') {
-					goto l737
-				}
-				position++
-				{
-					position743, tokenIndex743 := position, tokenIndex
-					if buffer[position] != rune('m') {
-						goto l744
-					}
-					position++
-					goto l743
-				l744:
-					position, tokenIndex = position743, tokenIndex743
-					if buffer[position] != rune('M') {
-						goto l745
-					}
-					position++
-					goto l743
-				l745:
-					position, tokenIndex = position743, tokenIndex743
+				l733:
 					{
-						position746, tokenIndex746 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l747
+						position734, tokenIndex734 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l734
 						}
 						position++
-						goto l746
-					l747:
-						position, tokenIndex = position746, tokenIndex746
-						if buffer[position] != rune('Z') {
+						goto l733
+					l734:
+						position, tokenIndex = position734, tokenIndex734
+					}
+					{
+						position735, tokenIndex735 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l736
+						}
+						position++
+						goto l735
+					l736:
+						position, tokenIndex = position735, tokenIndex735
+						if buffer[position] != rune('s') {
 							goto l737
 						}
 						position++
+						goto l735
+					l737:
+						position, tokenIndex = position735, tokenIndex735
+						if buffer[position] != rune('d') {
+							goto l738
+						}
+						position++
+						goto l735
+					l738:
+						position, tokenIndex = position735, tokenIndex735
+						if buffer[position] != rune('h') {
+							goto l739
+						}
+						position++
+						goto l735
+					l739:
+						position, tokenIndex = position735, tokenIndex735
+						if buffer[position] != rune('q') {
+							goto l731
+						}
+						position++
 					}
-				l746:
+				l735:
+					{
+						position740, tokenIndex740 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l740
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l740
+						}
+						position++
+						{
+							position742, tokenIndex742 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l742
+							}
+							position++
+							goto l743
+						l742:
+							position, tokenIndex = position742, tokenIndex742
+						}
+					l743:
+						if buffer[position] != rune(']') {
+							goto l740
+						}
+						position++
+						goto l741
+					l740:
+						position, tokenIndex = position740, tokenIndex740
+					}
+				l741:
+					goto l732
+				l731:
+					position, tokenIndex = position731, tokenIndex731
 				}
-			l743:
-				add(ruleSVE2PredicateRegister, position738)
+			l732:
+				add(ruleARMVectorRegister, position718)
 			}
 			return true
-		l737:
-			position, tokenIndex = position737, tokenIndex737
+		l717:
+			position, tokenIndex = position717, tokenIndex717
 			return false
 		},
-		/* 48 SVE2SpecialValue <- <(((('p' / 'P') ('o' / 'O') ('w' / 'W') '2') / (('v' / 'V') ('l' / 'L') ('1' / '2' / '3' / '4' / '5' / '6' / '7' / '8') ![0-9]) / (('v' / 'V') ('l' / 'L') '1' '6') / (('v' / 'V') ('l' / 'L') '3' '2') / (('v' / 'V') ('l' / 'L') '6' '4') / (('v' / 'V') ('l' / 'L') '1' '2' '8') / (('v' / 'V') ('l' / 'L') '2' '5' '6') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '3') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '4') / (('a' / 'A') ('l' / 'L') ('l' / 'L'))) !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_'))> */
+		/* 48 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
 		func() bool {
-			position748, tokenIndex748 := position, tokenIndex
+			position744, tokenIndex744 := position, tokenIndex
 			{
-				position749 := position
+				position745 := position
+				{
+					position746, tokenIndex746 := position, tokenIndex
+					if buffer[position] != rune('p') {
+						goto l747
+					}
+					position++
+					goto l746
+				l747:
+					position, tokenIndex = position746, tokenIndex746
+					if buffer[position] != rune('P') {
+						goto l744
+					}
+					position++
+				}
+			l746:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l744
+				}
+				position++
+				{
+					position748, tokenIndex748 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l748
+					}
+					position++
+					goto l749
+				l748:
+					position, tokenIndex = position748, tokenIndex748
+				}
+			l749:
+				if buffer[position] != rune('/') {
+					goto l744
+				}
+				position++
 				{
 					position750, tokenIndex750 := position, tokenIndex
-					{
-						position752, tokenIndex752 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l753
-						}
-						position++
-						goto l752
-					l753:
-						position, tokenIndex = position752, tokenIndex752
-						if buffer[position] != rune('P') {
-							goto l751
-						}
-						position++
-					}
-				l752:
-					{
-						position754, tokenIndex754 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l755
-						}
-						position++
-						goto l754
-					l755:
-						position, tokenIndex = position754, tokenIndex754
-						if buffer[position] != rune('O') {
-							goto l751
-						}
-						position++
-					}
-				l754:
-					{
-						position756, tokenIndex756 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l757
-						}
-						position++
-						goto l756
-					l757:
-						position, tokenIndex = position756, tokenIndex756
-						if buffer[position] != rune('W') {
-							goto l751
-						}
-						position++
-					}
-				l756:
-					if buffer[position] != rune('2') {
+					if buffer[position] != rune('m') {
 						goto l751
 					}
 					position++
 					goto l750
 				l751:
 					position, tokenIndex = position750, tokenIndex750
+					if buffer[position] != rune('M') {
+						goto l752
+					}
+					position++
+					goto l750
+				l752:
+					position, tokenIndex = position750, tokenIndex750
+					{
+						position753, tokenIndex753 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l754
+						}
+						position++
+						goto l753
+					l754:
+						position, tokenIndex = position753, tokenIndex753
+						if buffer[position] != rune('Z') {
+							goto l744
+						}
+						position++
+					}
+				l753:
+				}
+			l750:
+				add(ruleSVE2PredicateRegister, position745)
+			}
+			return true
+		l744:
+			position, tokenIndex = position744, tokenIndex744
+			return false
+		},
+		/* 49 SVE2SpecialValue <- <(((('p' / 'P') ('o' / 'O') ('w' / 'W') '2') / (('v' / 'V') ('l' / 'L') ('1' / '2' / '3' / '4' / '5' / '6' / '7' / '8') ![0-9]) / (('v' / 'V') ('l' / 'L') '1' '6') / (('v' / 'V') ('l' / 'L') '3' '2') / (('v' / 'V') ('l' / 'L') '6' '4') / (('v' / 'V') ('l' / 'L') '1' '2' '8') / (('v' / 'V') ('l' / 'L') '2' '5' '6') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '3') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '4') / (('a' / 'A') ('l' / 'L') ('l' / 'L'))) !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_'))> */
+		func() bool {
+			position755, tokenIndex755 := position, tokenIndex
+			{
+				position756 := position
+				{
+					position757, tokenIndex757 := position, tokenIndex
 					{
 						position759, tokenIndex759 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						if buffer[position] != rune('p') {
 							goto l760
 						}
 						position++
 						goto l759
 					l760:
 						position, tokenIndex = position759, tokenIndex759
-						if buffer[position] != rune('V') {
+						if buffer[position] != rune('P') {
 							goto l758
 						}
 						position++
@@ -6072,14 +6074,14 @@
 				l759:
 					{
 						position761, tokenIndex761 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('o') {
 							goto l762
 						}
 						position++
 						goto l761
 					l762:
 						position, tokenIndex = position761, tokenIndex761
-						if buffer[position] != rune('L') {
+						if buffer[position] != rune('O') {
 							goto l758
 						}
 						position++
@@ -6087,313 +6089,305 @@
 				l761:
 					{
 						position763, tokenIndex763 := position, tokenIndex
-						if buffer[position] != rune('1') {
+						if buffer[position] != rune('w') {
 							goto l764
 						}
 						position++
 						goto l763
 					l764:
 						position, tokenIndex = position763, tokenIndex763
-						if buffer[position] != rune('2') {
-							goto l765
-						}
-						position++
-						goto l763
-					l765:
-						position, tokenIndex = position763, tokenIndex763
-						if buffer[position] != rune('3') {
-							goto l766
-						}
-						position++
-						goto l763
-					l766:
-						position, tokenIndex = position763, tokenIndex763
-						if buffer[position] != rune('4') {
-							goto l767
-						}
-						position++
-						goto l763
-					l767:
-						position, tokenIndex = position763, tokenIndex763
-						if buffer[position] != rune('5') {
-							goto l768
-						}
-						position++
-						goto l763
-					l768:
-						position, tokenIndex = position763, tokenIndex763
-						if buffer[position] != rune('6') {
-							goto l769
-						}
-						position++
-						goto l763
-					l769:
-						position, tokenIndex = position763, tokenIndex763
-						if buffer[position] != rune('7') {
-							goto l770
-						}
-						position++
-						goto l763
-					l770:
-						position, tokenIndex = position763, tokenIndex763
-						if buffer[position] != rune('8') {
+						if buffer[position] != rune('W') {
 							goto l758
 						}
 						position++
 					}
 				l763:
+					if buffer[position] != rune('2') {
+						goto l758
+					}
+					position++
+					goto l757
+				l758:
+					position, tokenIndex = position757, tokenIndex757
 					{
-						position771, tokenIndex771 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position766, tokenIndex766 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l767
+						}
+						position++
+						goto l766
+					l767:
+						position, tokenIndex = position766, tokenIndex766
+						if buffer[position] != rune('V') {
+							goto l765
+						}
+						position++
+					}
+				l766:
+					{
+						position768, tokenIndex768 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l769
+						}
+						position++
+						goto l768
+					l769:
+						position, tokenIndex = position768, tokenIndex768
+						if buffer[position] != rune('L') {
+							goto l765
+						}
+						position++
+					}
+				l768:
+					{
+						position770, tokenIndex770 := position, tokenIndex
+						if buffer[position] != rune('1') {
 							goto l771
 						}
 						position++
-						goto l758
+						goto l770
 					l771:
-						position, tokenIndex = position771, tokenIndex771
-					}
-					goto l750
-				l758:
-					position, tokenIndex = position750, tokenIndex750
-					{
-						position773, tokenIndex773 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						position, tokenIndex = position770, tokenIndex770
+						if buffer[position] != rune('2') {
+							goto l772
+						}
+						position++
+						goto l770
+					l772:
+						position, tokenIndex = position770, tokenIndex770
+						if buffer[position] != rune('3') {
+							goto l773
+						}
+						position++
+						goto l770
+					l773:
+						position, tokenIndex = position770, tokenIndex770
+						if buffer[position] != rune('4') {
 							goto l774
 						}
 						position++
-						goto l773
+						goto l770
 					l774:
-						position, tokenIndex = position773, tokenIndex773
-						if buffer[position] != rune('V') {
-							goto l772
+						position, tokenIndex = position770, tokenIndex770
+						if buffer[position] != rune('5') {
+							goto l775
 						}
 						position++
-					}
-				l773:
-					{
-						position775, tokenIndex775 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						goto l770
+					l775:
+						position, tokenIndex = position770, tokenIndex770
+						if buffer[position] != rune('6') {
 							goto l776
 						}
 						position++
-						goto l775
+						goto l770
 					l776:
-						position, tokenIndex = position775, tokenIndex775
-						if buffer[position] != rune('L') {
-							goto l772
-						}
-						position++
-					}
-				l775:
-					if buffer[position] != rune('1') {
-						goto l772
-					}
-					position++
-					if buffer[position] != rune('6') {
-						goto l772
-					}
-					position++
-					goto l750
-				l772:
-					position, tokenIndex = position750, tokenIndex750
-					{
-						position778, tokenIndex778 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l779
-						}
-						position++
-						goto l778
-					l779:
-						position, tokenIndex = position778, tokenIndex778
-						if buffer[position] != rune('V') {
+						position, tokenIndex = position770, tokenIndex770
+						if buffer[position] != rune('7') {
 							goto l777
 						}
 						position++
+						goto l770
+					l777:
+						position, tokenIndex = position770, tokenIndex770
+						if buffer[position] != rune('8') {
+							goto l765
+						}
+						position++
 					}
-				l778:
+				l770:
+					{
+						position778, tokenIndex778 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l778
+						}
+						position++
+						goto l765
+					l778:
+						position, tokenIndex = position778, tokenIndex778
+					}
+					goto l757
+				l765:
+					position, tokenIndex = position757, tokenIndex757
 					{
 						position780, tokenIndex780 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('v') {
 							goto l781
 						}
 						position++
 						goto l780
 					l781:
 						position, tokenIndex = position780, tokenIndex780
-						if buffer[position] != rune('L') {
-							goto l777
+						if buffer[position] != rune('V') {
+							goto l779
 						}
 						position++
 					}
 				l780:
-					if buffer[position] != rune('3') {
-						goto l777
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l777
-					}
-					position++
-					goto l750
-				l777:
-					position, tokenIndex = position750, tokenIndex750
 					{
-						position783, tokenIndex783 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l784
+						position782, tokenIndex782 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l783
 						}
 						position++
-						goto l783
-					l784:
-						position, tokenIndex = position783, tokenIndex783
-						if buffer[position] != rune('V') {
-							goto l782
+						goto l782
+					l783:
+						position, tokenIndex = position782, tokenIndex782
+						if buffer[position] != rune('L') {
+							goto l779
 						}
 						position++
 					}
-				l783:
+				l782:
+					if buffer[position] != rune('1') {
+						goto l779
+					}
+					position++
+					if buffer[position] != rune('6') {
+						goto l779
+					}
+					position++
+					goto l757
+				l779:
+					position, tokenIndex = position757, tokenIndex757
 					{
 						position785, tokenIndex785 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('v') {
 							goto l786
 						}
 						position++
 						goto l785
 					l786:
 						position, tokenIndex = position785, tokenIndex785
-						if buffer[position] != rune('L') {
-							goto l782
+						if buffer[position] != rune('V') {
+							goto l784
 						}
 						position++
 					}
 				l785:
-					if buffer[position] != rune('6') {
-						goto l782
-					}
-					position++
-					if buffer[position] != rune('4') {
-						goto l782
-					}
-					position++
-					goto l750
-				l782:
-					position, tokenIndex = position750, tokenIndex750
 					{
-						position788, tokenIndex788 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l789
+						position787, tokenIndex787 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l788
 						}
 						position++
-						goto l788
-					l789:
-						position, tokenIndex = position788, tokenIndex788
-						if buffer[position] != rune('V') {
-							goto l787
+						goto l787
+					l788:
+						position, tokenIndex = position787, tokenIndex787
+						if buffer[position] != rune('L') {
+							goto l784
 						}
 						position++
 					}
-				l788:
+				l787:
+					if buffer[position] != rune('3') {
+						goto l784
+					}
+					position++
+					if buffer[position] != rune('2') {
+						goto l784
+					}
+					position++
+					goto l757
+				l784:
+					position, tokenIndex = position757, tokenIndex757
 					{
 						position790, tokenIndex790 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('v') {
 							goto l791
 						}
 						position++
 						goto l790
 					l791:
 						position, tokenIndex = position790, tokenIndex790
-						if buffer[position] != rune('L') {
-							goto l787
+						if buffer[position] != rune('V') {
+							goto l789
 						}
 						position++
 					}
 				l790:
-					if buffer[position] != rune('1') {
-						goto l787
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l787
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l787
-					}
-					position++
-					goto l750
-				l787:
-					position, tokenIndex = position750, tokenIndex750
 					{
-						position793, tokenIndex793 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l794
+						position792, tokenIndex792 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l793
 						}
 						position++
-						goto l793
-					l794:
-						position, tokenIndex = position793, tokenIndex793
-						if buffer[position] != rune('V') {
-							goto l792
+						goto l792
+					l793:
+						position, tokenIndex = position792, tokenIndex792
+						if buffer[position] != rune('L') {
+							goto l789
 						}
 						position++
 					}
-				l793:
+				l792:
+					if buffer[position] != rune('6') {
+						goto l789
+					}
+					position++
+					if buffer[position] != rune('4') {
+						goto l789
+					}
+					position++
+					goto l757
+				l789:
+					position, tokenIndex = position757, tokenIndex757
 					{
 						position795, tokenIndex795 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('v') {
 							goto l796
 						}
 						position++
 						goto l795
 					l796:
 						position, tokenIndex = position795, tokenIndex795
-						if buffer[position] != rune('L') {
-							goto l792
+						if buffer[position] != rune('V') {
+							goto l794
 						}
 						position++
 					}
 				l795:
-					if buffer[position] != rune('2') {
-						goto l792
-					}
-					position++
-					if buffer[position] != rune('5') {
-						goto l792
-					}
-					position++
-					if buffer[position] != rune('6') {
-						goto l792
-					}
-					position++
-					goto l750
-				l792:
-					position, tokenIndex = position750, tokenIndex750
 					{
-						position798, tokenIndex798 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l799
+						position797, tokenIndex797 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l798
 						}
 						position++
-						goto l798
-					l799:
-						position, tokenIndex = position798, tokenIndex798
-						if buffer[position] != rune('M') {
-							goto l797
+						goto l797
+					l798:
+						position, tokenIndex = position797, tokenIndex797
+						if buffer[position] != rune('L') {
+							goto l794
 						}
 						position++
 					}
-				l798:
+				l797:
+					if buffer[position] != rune('1') {
+						goto l794
+					}
+					position++
+					if buffer[position] != rune('2') {
+						goto l794
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l794
+					}
+					position++
+					goto l757
+				l794:
+					position, tokenIndex = position757, tokenIndex757
 					{
 						position800, tokenIndex800 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('v') {
 							goto l801
 						}
 						position++
 						goto l800
 					l801:
 						position, tokenIndex = position800, tokenIndex800
-						if buffer[position] != rune('U') {
-							goto l797
+						if buffer[position] != rune('V') {
+							goto l799
 						}
 						position++
 					}
@@ -6408,18 +6402,26 @@
 					l803:
 						position, tokenIndex = position802, tokenIndex802
 						if buffer[position] != rune('L') {
-							goto l797
+							goto l799
 						}
 						position++
 					}
 				l802:
-					if buffer[position] != rune('3') {
-						goto l797
+					if buffer[position] != rune('2') {
+						goto l799
 					}
 					position++
-					goto l750
-				l797:
-					position, tokenIndex = position750, tokenIndex750
+					if buffer[position] != rune('5') {
+						goto l799
+					}
+					position++
+					if buffer[position] != rune('6') {
+						goto l799
+					}
+					position++
+					goto l757
+				l799:
+					position, tokenIndex = position757, tokenIndex757
 					{
 						position805, tokenIndex805 := position, tokenIndex
 						if buffer[position] != rune('m') {
@@ -6465,1140 +6467,1192 @@
 						position++
 					}
 				l809:
-					if buffer[position] != rune('4') {
+					if buffer[position] != rune('3') {
 						goto l804
 					}
 					position++
-					goto l750
+					goto l757
 				l804:
-					position, tokenIndex = position750, tokenIndex750
+					position, tokenIndex = position757, tokenIndex757
 					{
-						position811, tokenIndex811 := position, tokenIndex
-						if buffer[position] != rune('a') {
-							goto l812
+						position812, tokenIndex812 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l813
 						}
 						position++
+						goto l812
+					l813:
+						position, tokenIndex = position812, tokenIndex812
+						if buffer[position] != rune('M') {
+							goto l811
+						}
+						position++
+					}
+				l812:
+					{
+						position814, tokenIndex814 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l815
+						}
+						position++
+						goto l814
+					l815:
+						position, tokenIndex = position814, tokenIndex814
+						if buffer[position] != rune('U') {
+							goto l811
+						}
+						position++
+					}
+				l814:
+					{
+						position816, tokenIndex816 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l817
+						}
+						position++
+						goto l816
+					l817:
+						position, tokenIndex = position816, tokenIndex816
+						if buffer[position] != rune('L') {
+							goto l811
+						}
+						position++
+					}
+				l816:
+					if buffer[position] != rune('4') {
 						goto l811
-					l812:
-						position, tokenIndex = position811, tokenIndex811
-						if buffer[position] != rune('A') {
-							goto l748
-						}
-						position++
 					}
+					position++
+					goto l757
 				l811:
-					{
-						position813, tokenIndex813 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l814
-						}
-						position++
-						goto l813
-					l814:
-						position, tokenIndex = position813, tokenIndex813
-						if buffer[position] != rune('L') {
-							goto l748
-						}
-						position++
-					}
-				l813:
-					{
-						position815, tokenIndex815 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l816
-						}
-						position++
-						goto l815
-					l816:
-						position, tokenIndex = position815, tokenIndex815
-						if buffer[position] != rune('L') {
-							goto l748
-						}
-						position++
-					}
-				l815:
-				}
-			l750:
-				{
-					position817, tokenIndex817 := position, tokenIndex
+					position, tokenIndex = position757, tokenIndex757
 					{
 						position818, tokenIndex818 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						if buffer[position] != rune('a') {
 							goto l819
 						}
 						position++
 						goto l818
 					l819:
 						position, tokenIndex = position818, tokenIndex818
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l820
-						}
-						position++
-						goto l818
-					l820:
-						position, tokenIndex = position818, tokenIndex818
-						{
-							position822, tokenIndex822 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l823
-							}
-							position++
-							goto l822
-						l823:
-							position, tokenIndex = position822, tokenIndex822
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l821
-							}
-							position++
-						}
-					l822:
-						goto l818
-					l821:
-						position, tokenIndex = position818, tokenIndex818
-						if buffer[position] != rune('_') {
-							goto l817
+						if buffer[position] != rune('A') {
+							goto l755
 						}
 						position++
 					}
 				l818:
-					goto l748
-				l817:
-					position, tokenIndex = position817, tokenIndex817
+					{
+						position820, tokenIndex820 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l821
+						}
+						position++
+						goto l820
+					l821:
+						position, tokenIndex = position820, tokenIndex820
+						if buffer[position] != rune('L') {
+							goto l755
+						}
+						position++
+					}
+				l820:
+					{
+						position822, tokenIndex822 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l823
+						}
+						position++
+						goto l822
+					l823:
+						position, tokenIndex = position822, tokenIndex822
+						if buffer[position] != rune('L') {
+							goto l755
+						}
+						position++
+					}
+				l822:
 				}
-				add(ruleSVE2SpecialValue, position749)
+			l757:
+				{
+					position824, tokenIndex824 := position, tokenIndex
+					{
+						position825, tokenIndex825 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l826
+						}
+						position++
+						goto l825
+					l826:
+						position, tokenIndex = position825, tokenIndex825
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l827
+						}
+						position++
+						goto l825
+					l827:
+						position, tokenIndex = position825, tokenIndex825
+						{
+							position829, tokenIndex829 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l830
+							}
+							position++
+							goto l829
+						l830:
+							position, tokenIndex = position829, tokenIndex829
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l828
+							}
+							position++
+						}
+					l829:
+						goto l825
+					l828:
+						position, tokenIndex = position825, tokenIndex825
+						if buffer[position] != rune('_') {
+							goto l824
+						}
+						position++
+					}
+				l825:
+					goto l755
+				l824:
+					position, tokenIndex = position824, tokenIndex824
+				}
+				add(ruleSVE2SpecialValue, position756)
 			}
 			return true
-		l748:
-			position, tokenIndex = position748, tokenIndex748
+		l755:
+			position, tokenIndex = position755, tokenIndex755
 			return false
 		},
-		/* 49 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
+		/* 50 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position824, tokenIndex824 := position, tokenIndex
+			position831, tokenIndex831 := position, tokenIndex
 			{
-				position825 := position
+				position832 := position
 				{
-					position826, tokenIndex826 := position, tokenIndex
+					position833, tokenIndex833 := position, tokenIndex
 					if !_rules[ruleSymbolRef]() {
-						goto l827
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l827
-					}
-					goto l826
-				l827:
-					position, tokenIndex = position826, tokenIndex826
-					if !_rules[ruleSymbolRef]() {
-						goto l828
-					}
-					goto l826
-				l828:
-					position, tokenIndex = position826, tokenIndex826
-					if !_rules[ruleLow12BitsSymbolRef]() {
-						goto l829
-					}
-					goto l826
-				l829:
-					position, tokenIndex = position826, tokenIndex826
-				l831:
-					{
-						position832, tokenIndex832 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l832
-						}
-						goto l831
-					l832:
-						position, tokenIndex = position832, tokenIndex832
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l830
-					}
-					goto l826
-				l830:
-					position, tokenIndex = position826, tokenIndex826
-					if !_rules[ruleSegmentRegister]() {
-						goto l833
-					}
-					if !_rules[ruleOffset]() {
-						goto l833
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l833
-					}
-					goto l826
-				l833:
-					position, tokenIndex = position826, tokenIndex826
-					if !_rules[ruleSegmentRegister]() {
 						goto l834
 					}
 					if !_rules[ruleBaseIndexScale]() {
 						goto l834
 					}
-					goto l826
+					goto l833
 				l834:
-					position, tokenIndex = position826, tokenIndex826
-					if !_rules[ruleSegmentRegister]() {
+					position, tokenIndex = position833, tokenIndex833
+					if !_rules[ruleSymbolRef]() {
 						goto l835
 					}
-					if !_rules[ruleOffset]() {
-						goto l835
-					}
-					goto l826
+					goto l833
 				l835:
-					position, tokenIndex = position826, tokenIndex826
-					if !_rules[ruleARMBaseIndexScale]() {
+					position, tokenIndex = position833, tokenIndex833
+					if !_rules[ruleLow12BitsSymbolRef]() {
 						goto l836
 					}
-					goto l826
+					goto l833
 				l836:
-					position, tokenIndex = position826, tokenIndex826
-					if !_rules[ruleBaseIndexScale]() {
-						goto l824
-					}
-				}
-			l826:
-				add(ruleMemoryRef, position825)
-			}
-			return true
-		l824:
-			position, tokenIndex = position824, tokenIndex824
-			return false
-		},
-		/* 50 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
-		func() bool {
-			position837, tokenIndex837 := position, tokenIndex
-			{
-				position838 := position
-				{
-					position839, tokenIndex839 := position, tokenIndex
-				l841:
+					position, tokenIndex = position833, tokenIndex833
+				l838:
 					{
-						position842, tokenIndex842 := position, tokenIndex
+						position839, tokenIndex839 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l842
+							goto l839
 						}
-						goto l841
-					l842:
-						position, tokenIndex = position842, tokenIndex842
+						goto l838
+					l839:
+						position, tokenIndex = position839, tokenIndex839
 					}
-					if buffer[position] != rune('+') {
-						goto l839
-					}
-					position++
-					goto l840
-				l839:
-					position, tokenIndex = position839, tokenIndex839
-				}
-			l840:
-				{
-					position843, tokenIndex843 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l844
-					}
-					goto l843
-				l844:
-					position, tokenIndex = position843, tokenIndex843
-					if !_rules[ruleSymbolName]() {
+					if !_rules[ruleBaseIndexScale]() {
 						goto l837
 					}
+					goto l833
+				l837:
+					position, tokenIndex = position833, tokenIndex833
+					if !_rules[ruleSegmentRegister]() {
+						goto l840
+					}
+					if !_rules[ruleOffset]() {
+						goto l840
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l840
+					}
+					goto l833
+				l840:
+					position, tokenIndex = position833, tokenIndex833
+					if !_rules[ruleSegmentRegister]() {
+						goto l841
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l841
+					}
+					goto l833
+				l841:
+					position, tokenIndex = position833, tokenIndex833
+					if !_rules[ruleSegmentRegister]() {
+						goto l842
+					}
+					if !_rules[ruleOffset]() {
+						goto l842
+					}
+					goto l833
+				l842:
+					position, tokenIndex = position833, tokenIndex833
+					if !_rules[ruleARMBaseIndexScale]() {
+						goto l843
+					}
+					goto l833
+				l843:
+					position, tokenIndex = position833, tokenIndex833
+					if !_rules[ruleBaseIndexScale]() {
+						goto l831
+					}
 				}
-			l843:
-			l845:
+			l833:
+				add(ruleMemoryRef, position832)
+			}
+			return true
+		l831:
+			position, tokenIndex = position831, tokenIndex831
+			return false
+		},
+		/* 51 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
+		func() bool {
+			position844, tokenIndex844 := position, tokenIndex
+			{
+				position845 := position
 				{
 					position846, tokenIndex846 := position, tokenIndex
-					if !_rules[ruleOffset]() {
+				l848:
+					{
+						position849, tokenIndex849 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l849
+						}
+						goto l848
+					l849:
+						position, tokenIndex = position849, tokenIndex849
+					}
+					if buffer[position] != rune('+') {
 						goto l846
 					}
-					goto l845
+					position++
+					goto l847
 				l846:
 					position, tokenIndex = position846, tokenIndex846
 				}
+			l847:
 				{
-					position847, tokenIndex847 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l847
+					position850, tokenIndex850 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l851
 					}
-					position++
-					if !_rules[ruleSection]() {
-						goto l847
+					goto l850
+				l851:
+					position, tokenIndex = position850, tokenIndex850
+					if !_rules[ruleSymbolName]() {
+						goto l844
 					}
-				l849:
-					{
-						position850, tokenIndex850 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l850
-						}
-						goto l849
-					l850:
-						position, tokenIndex = position850, tokenIndex850
-					}
-					goto l848
-				l847:
-					position, tokenIndex = position847, tokenIndex847
 				}
-			l848:
-				add(ruleSymbolRef, position838)
-			}
-			return true
-		l837:
-			position, tokenIndex = position837, tokenIndex837
-			return false
-		},
-		/* 51 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
-		func() bool {
-			position851, tokenIndex851 := position, tokenIndex
-			{
-				position852 := position
-				if buffer[position] != rune(':') {
-					goto l851
-				}
-				position++
+			l850:
+			l852:
 				{
 					position853, tokenIndex853 := position, tokenIndex
-					if buffer[position] != rune('l') {
+					if !_rules[ruleOffset]() {
+						goto l853
+					}
+					goto l852
+				l853:
+					position, tokenIndex = position853, tokenIndex853
+				}
+				{
+					position854, tokenIndex854 := position, tokenIndex
+					if buffer[position] != rune('@') {
 						goto l854
 					}
 					position++
-					goto l853
-				l854:
-					position, tokenIndex = position853, tokenIndex853
-					if buffer[position] != rune('L') {
-						goto l851
+					if !_rules[ruleSection]() {
+						goto l854
 					}
-					position++
-				}
-			l853:
-				{
-					position855, tokenIndex855 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l856
-					}
-					position++
-					goto l855
 				l856:
-					position, tokenIndex = position855, tokenIndex855
-					if buffer[position] != rune('O') {
-						goto l851
+					{
+						position857, tokenIndex857 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l857
+						}
+						goto l856
+					l857:
+						position, tokenIndex = position857, tokenIndex857
 					}
-					position++
+					goto l855
+				l854:
+					position, tokenIndex = position854, tokenIndex854
 				}
 			l855:
-				if buffer[position] != rune('1') {
-					goto l851
-				}
-				position++
-				if buffer[position] != rune('2') {
-					goto l851
-				}
-				position++
-				if buffer[position] != rune(':') {
-					goto l851
-				}
-				position++
-				{
-					position857, tokenIndex857 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l858
-					}
-					goto l857
-				l858:
-					position, tokenIndex = position857, tokenIndex857
-					if !_rules[ruleSymbolName]() {
-						goto l851
-					}
-				}
-			l857:
-				{
-					position859, tokenIndex859 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l859
-					}
-					goto l860
-				l859:
-					position, tokenIndex = position859, tokenIndex859
-				}
-			l860:
-				add(ruleLow12BitsSymbolRef, position852)
+				add(ruleSymbolRef, position845)
 			}
 			return true
-		l851:
-			position, tokenIndex = position851, tokenIndex851
+		l844:
+			position, tokenIndex = position844, tokenIndex844
 			return false
 		},
-		/* 52 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		/* 52 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
 		func() bool {
-			position861, tokenIndex861 := position, tokenIndex
+			position858, tokenIndex858 := position, tokenIndex
 			{
-				position862 := position
-				if buffer[position] != rune('[') {
-					goto l861
+				position859 := position
+				if buffer[position] != rune(':') {
+					goto l858
 				}
 				position++
-				if !_rules[ruleARMRegister]() {
-					goto l861
-				}
 				{
-					position863, tokenIndex863 := position, tokenIndex
-					if buffer[position] != rune(',') {
+					position860, tokenIndex860 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l861
+					}
+					position++
+					goto l860
+				l861:
+					position, tokenIndex = position860, tokenIndex860
+					if buffer[position] != rune('L') {
+						goto l858
+					}
+					position++
+				}
+			l860:
+				{
+					position862, tokenIndex862 := position, tokenIndex
+					if buffer[position] != rune('o') {
 						goto l863
 					}
 					position++
-					{
-						position865, tokenIndex865 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l865
-						}
-						goto l866
-					l865:
-						position, tokenIndex = position865, tokenIndex865
+					goto l862
+				l863:
+					position, tokenIndex = position862, tokenIndex862
+					if buffer[position] != rune('O') {
+						goto l858
 					}
+					position++
+				}
+			l862:
+				if buffer[position] != rune('1') {
+					goto l858
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l858
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l858
+				}
+				position++
+				{
+					position864, tokenIndex864 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l865
+					}
+					goto l864
+				l865:
+					position, tokenIndex = position864, tokenIndex864
+					if !_rules[ruleSymbolName]() {
+						goto l858
+					}
+				}
+			l864:
+				{
+					position866, tokenIndex866 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l866
+					}
+					goto l867
 				l866:
+					position, tokenIndex = position866, tokenIndex866
+				}
+			l867:
+				add(ruleLow12BitsSymbolRef, position859)
+			}
+			return true
+		l858:
+			position, tokenIndex = position858, tokenIndex858
+			return false
+		},
+		/* 53 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		func() bool {
+			position868, tokenIndex868 := position, tokenIndex
+			{
+				position869 := position
+				if buffer[position] != rune('[') {
+					goto l868
+				}
+				position++
+				if !_rules[ruleARMRegister]() {
+					goto l868
+				}
+				{
+					position870, tokenIndex870 := position, tokenIndex
+					if buffer[position] != rune(',') {
+						goto l870
+					}
+					position++
 					{
-						position867, tokenIndex867 := position, tokenIndex
+						position872, tokenIndex872 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l872
+						}
+						goto l873
+					l872:
+						position, tokenIndex = position872, tokenIndex872
+					}
+				l873:
+					{
+						position874, tokenIndex874 := position, tokenIndex
 						if buffer[position] != rune('#') {
-							goto l868
+							goto l875
 						}
 						position++
 						if !_rules[ruleOffset]() {
-							goto l868
+							goto l875
 						}
 						{
-							position869, tokenIndex869 := position, tokenIndex
+							position876, tokenIndex876 := position, tokenIndex
 							{
-								position871, tokenIndex871 := position, tokenIndex
+								position878, tokenIndex878 := position, tokenIndex
 								if buffer[position] != rune('*') {
-									goto l872
+									goto l879
 								}
 								position++
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l872
+									goto l879
 								}
 								position++
-							l873:
-								{
-									position874, tokenIndex874 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l874
-									}
-									position++
-									goto l873
-								l874:
-									position, tokenIndex = position874, tokenIndex874
-								}
-								goto l871
-							l872:
-								position, tokenIndex = position871, tokenIndex871
-								if buffer[position] != rune('*') {
-									goto l875
-								}
-								position++
-								if buffer[position] != rune('(') {
-									goto l875
-								}
-								position++
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l875
-								}
-								position++
-							l876:
-								{
-									position877, tokenIndex877 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l877
-									}
-									position++
-									goto l876
-								l877:
-									position, tokenIndex = position877, tokenIndex877
-								}
-								if !_rules[ruleOperator]() {
-									goto l875
-								}
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l875
-								}
-								position++
-							l878:
-								{
-									position879, tokenIndex879 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l879
-									}
-									position++
-									goto l878
-								l879:
-									position, tokenIndex = position879, tokenIndex879
-								}
-								if buffer[position] != rune(')') {
-									goto l875
-								}
-								position++
-								goto l871
-							l875:
-								position, tokenIndex = position871, tokenIndex871
 							l880:
 								{
 									position881, tokenIndex881 := position, tokenIndex
-									if buffer[position] != rune('+') {
-										goto l881
-									}
-									position++
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
 										goto l881
 									}
 									position++
-								l882:
-									{
-										position883, tokenIndex883 := position, tokenIndex
-										if c := buffer[position]; c < rune('0') || c > rune('9') {
-											goto l883
-										}
-										position++
-										goto l882
-									l883:
-										position, tokenIndex = position883, tokenIndex883
-									}
 									goto l880
 								l881:
 									position, tokenIndex = position881, tokenIndex881
 								}
+								goto l878
+							l879:
+								position, tokenIndex = position878, tokenIndex878
+								if buffer[position] != rune('*') {
+									goto l882
+								}
+								position++
+								if buffer[position] != rune('(') {
+									goto l882
+								}
+								position++
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l882
+								}
+								position++
+							l883:
+								{
+									position884, tokenIndex884 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l884
+									}
+									position++
+									goto l883
+								l884:
+									position, tokenIndex = position884, tokenIndex884
+								}
+								if !_rules[ruleOperator]() {
+									goto l882
+								}
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l882
+								}
+								position++
+							l885:
+								{
+									position886, tokenIndex886 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l886
+									}
+									position++
+									goto l885
+								l886:
+									position, tokenIndex = position886, tokenIndex886
+								}
+								if buffer[position] != rune(')') {
+									goto l882
+								}
+								position++
+								goto l878
+							l882:
+								position, tokenIndex = position878, tokenIndex878
+							l887:
+								{
+									position888, tokenIndex888 := position, tokenIndex
+									if buffer[position] != rune('+') {
+										goto l888
+									}
+									position++
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l888
+									}
+									position++
+								l889:
+									{
+										position890, tokenIndex890 := position, tokenIndex
+										if c := buffer[position]; c < rune('0') || c > rune('9') {
+											goto l890
+										}
+										position++
+										goto l889
+									l890:
+										position, tokenIndex = position890, tokenIndex890
+									}
+									goto l887
+								l888:
+									position, tokenIndex = position888, tokenIndex888
+								}
 							}
-						l871:
-							goto l870
+						l878:
+							goto l877
 
-							position, tokenIndex = position869, tokenIndex869
+							position, tokenIndex = position876, tokenIndex876
 						}
-					l870:
-						goto l867
-					l868:
-						position, tokenIndex = position867, tokenIndex867
+					l877:
+						goto l874
+					l875:
+						position, tokenIndex = position874, tokenIndex874
 						if !_rules[ruleARMGOTLow12]() {
-							goto l884
+							goto l891
 						}
-						goto l867
-					l884:
-						position, tokenIndex = position867, tokenIndex867
+						goto l874
+					l891:
+						position, tokenIndex = position874, tokenIndex874
 						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l885
+							goto l892
 						}
-						goto l867
-					l885:
-						position, tokenIndex = position867, tokenIndex867
+						goto l874
+					l892:
+						position, tokenIndex = position874, tokenIndex874
 						if !_rules[ruleARMRegister]() {
-							goto l863
+							goto l870
 						}
 					}
-				l867:
+				l874:
 					{
-						position886, tokenIndex886 := position, tokenIndex
+						position893, tokenIndex893 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l886
+							goto l893
 						}
 						position++
 						{
-							position888, tokenIndex888 := position, tokenIndex
+							position895, tokenIndex895 := position, tokenIndex
 							if !_rules[ruleWS]() {
-								goto l888
+								goto l895
 							}
-							goto l889
-						l888:
-							position, tokenIndex = position888, tokenIndex888
+							goto l896
+						l895:
+							position, tokenIndex = position895, tokenIndex895
 						}
-					l889:
+					l896:
 						if !_rules[ruleARMConstantTweak]() {
-							goto l886
+							goto l893
 						}
-						goto l887
-					l886:
-						position, tokenIndex = position886, tokenIndex886
+						goto l894
+					l893:
+						position, tokenIndex = position893, tokenIndex893
 					}
-				l887:
-					goto l864
-				l863:
-					position, tokenIndex = position863, tokenIndex863
+				l894:
+					goto l871
+				l870:
+					position, tokenIndex = position870, tokenIndex870
 				}
-			l864:
+			l871:
 				if buffer[position] != rune(']') {
-					goto l861
+					goto l868
 				}
 				position++
 				{
-					position890, tokenIndex890 := position, tokenIndex
+					position897, tokenIndex897 := position, tokenIndex
 					if !_rules[ruleARMPostincrement]() {
-						goto l890
-					}
-					goto l891
-				l890:
-					position, tokenIndex = position890, tokenIndex890
-				}
-			l891:
-				add(ruleARMBaseIndexScale, position862)
-			}
-			return true
-		l861:
-			position, tokenIndex = position861, tokenIndex861
-			return false
-		},
-		/* 53 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
-		func() bool {
-			position892, tokenIndex892 := position, tokenIndex
-			{
-				position893 := position
-				if buffer[position] != rune(':') {
-					goto l892
-				}
-				position++
-				{
-					position894, tokenIndex894 := position, tokenIndex
-					if buffer[position] != rune('g') {
-						goto l895
-					}
-					position++
-					goto l894
-				l895:
-					position, tokenIndex = position894, tokenIndex894
-					if buffer[position] != rune('G') {
-						goto l892
-					}
-					position++
-				}
-			l894:
-				{
-					position896, tokenIndex896 := position, tokenIndex
-					if buffer[position] != rune('o') {
 						goto l897
 					}
-					position++
-					goto l896
+					goto l898
 				l897:
-					position, tokenIndex = position896, tokenIndex896
-					if buffer[position] != rune('O') {
-						goto l892
+					position, tokenIndex = position897, tokenIndex897
+				}
+			l898:
+				add(ruleARMBaseIndexScale, position869)
+			}
+			return true
+		l868:
+			position, tokenIndex = position868, tokenIndex868
+			return false
+		},
+		/* 54 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		func() bool {
+			position899, tokenIndex899 := position, tokenIndex
+			{
+				position900 := position
+				if buffer[position] != rune(':') {
+					goto l899
+				}
+				position++
+				{
+					position901, tokenIndex901 := position, tokenIndex
+					if buffer[position] != rune('g') {
+						goto l902
 					}
 					position++
-				}
-			l896:
-				{
-					position898, tokenIndex898 := position, tokenIndex
-					if buffer[position] != rune('t') {
+					goto l901
+				l902:
+					position, tokenIndex = position901, tokenIndex901
+					if buffer[position] != rune('G') {
 						goto l899
 					}
 					position++
-					goto l898
-				l899:
-					position, tokenIndex = position898, tokenIndex898
-					if buffer[position] != rune('T') {
-						goto l892
+				}
+			l901:
+				{
+					position903, tokenIndex903 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l904
+					}
+					position++
+					goto l903
+				l904:
+					position, tokenIndex = position903, tokenIndex903
+					if buffer[position] != rune('O') {
+						goto l899
 					}
 					position++
 				}
-			l898:
+			l903:
+				{
+					position905, tokenIndex905 := position, tokenIndex
+					if buffer[position] != rune('t') {
+						goto l906
+					}
+					position++
+					goto l905
+				l906:
+					position, tokenIndex = position905, tokenIndex905
+					if buffer[position] != rune('T') {
+						goto l899
+					}
+					position++
+				}
+			l905:
 				if buffer[position] != rune('_') {
-					goto l892
+					goto l899
 				}
 				position++
 				{
-					position900, tokenIndex900 := position, tokenIndex
+					position907, tokenIndex907 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l901
+						goto l908
 					}
 					position++
-					goto l900
-				l901:
-					position, tokenIndex = position900, tokenIndex900
+					goto l907
+				l908:
+					position, tokenIndex = position907, tokenIndex907
 					if buffer[position] != rune('L') {
-						goto l892
+						goto l899
 					}
 					position++
 				}
-			l900:
+			l907:
 				{
-					position902, tokenIndex902 := position, tokenIndex
+					position909, tokenIndex909 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l903
+						goto l910
 					}
 					position++
-					goto l902
-				l903:
-					position, tokenIndex = position902, tokenIndex902
+					goto l909
+				l910:
+					position, tokenIndex = position909, tokenIndex909
 					if buffer[position] != rune('O') {
-						goto l892
+						goto l899
 					}
 					position++
 				}
-			l902:
+			l909:
 				if buffer[position] != rune('1') {
-					goto l892
+					goto l899
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l892
+					goto l899
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l892
+					goto l899
 				}
 				position++
 				if !_rules[ruleSymbolName]() {
-					goto l892
+					goto l899
 				}
-				add(ruleARMGOTLow12, position893)
+				add(ruleARMGOTLow12, position900)
 			}
 			return true
-		l892:
-			position, tokenIndex = position892, tokenIndex892
+		l899:
+			position, tokenIndex = position899, tokenIndex899
 			return false
 		},
-		/* 54 ARMPostincrement <- <'!'> */
+		/* 55 ARMPostincrement <- <'!'> */
 		func() bool {
-			position904, tokenIndex904 := position, tokenIndex
+			position911, tokenIndex911 := position, tokenIndex
 			{
-				position905 := position
+				position912 := position
 				if buffer[position] != rune('!') {
-					goto l904
+					goto l911
 				}
 				position++
-				add(ruleARMPostincrement, position905)
+				add(ruleARMPostincrement, position912)
 			}
 			return true
-		l904:
-			position, tokenIndex = position904, tokenIndex904
+		l911:
+			position, tokenIndex = position911, tokenIndex911
 			return false
 		},
-		/* 55 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		/* 56 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
 		func() bool {
-			position906, tokenIndex906 := position, tokenIndex
+			position913, tokenIndex913 := position, tokenIndex
 			{
-				position907 := position
+				position914 := position
 				if buffer[position] != rune('(') {
-					goto l906
+					goto l913
 				}
 				position++
 				{
-					position908, tokenIndex908 := position, tokenIndex
+					position915, tokenIndex915 := position, tokenIndex
 					if !_rules[ruleRegisterOrConstant]() {
-						goto l908
+						goto l915
 					}
-					goto l909
-				l908:
-					position, tokenIndex = position908, tokenIndex908
+					goto l916
+				l915:
+					position, tokenIndex = position915, tokenIndex915
 				}
-			l909:
+			l916:
 				{
-					position910, tokenIndex910 := position, tokenIndex
+					position917, tokenIndex917 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l910
+						goto l917
 					}
-					goto l911
-				l910:
-					position, tokenIndex = position910, tokenIndex910
+					goto l918
+				l917:
+					position, tokenIndex = position917, tokenIndex917
 				}
-			l911:
+			l918:
 				{
-					position912, tokenIndex912 := position, tokenIndex
+					position919, tokenIndex919 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l912
+						goto l919
 					}
 					position++
 					{
-						position914, tokenIndex914 := position, tokenIndex
+						position921, tokenIndex921 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l914
+							goto l921
 						}
-						goto l915
-					l914:
-						position, tokenIndex = position914, tokenIndex914
+						goto l922
+					l921:
+						position, tokenIndex = position921, tokenIndex921
 					}
-				l915:
+				l922:
 					if !_rules[ruleRegisterOrConstant]() {
-						goto l912
+						goto l919
 					}
 					{
-						position916, tokenIndex916 := position, tokenIndex
+						position923, tokenIndex923 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l916
+							goto l923
 						}
-						goto l917
-					l916:
-						position, tokenIndex = position916, tokenIndex916
+						goto l924
+					l923:
+						position, tokenIndex = position923, tokenIndex923
 					}
-				l917:
+				l924:
 					{
-						position918, tokenIndex918 := position, tokenIndex
+						position925, tokenIndex925 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l918
+							goto l925
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l918
+							goto l925
 						}
 						position++
-					l920:
+					l927:
 						{
-							position921, tokenIndex921 := position, tokenIndex
+							position928, tokenIndex928 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l921
+								goto l928
 							}
 							position++
-							goto l920
-						l921:
-							position, tokenIndex = position921, tokenIndex921
+							goto l927
+						l928:
+							position, tokenIndex = position928, tokenIndex928
 						}
-						goto l919
-					l918:
-						position, tokenIndex = position918, tokenIndex918
+						goto l926
+					l925:
+						position, tokenIndex = position925, tokenIndex925
 					}
+				l926:
+					goto l920
 				l919:
-					goto l913
-				l912:
-					position, tokenIndex = position912, tokenIndex912
+					position, tokenIndex = position919, tokenIndex919
 				}
-			l913:
+			l920:
 				if buffer[position] != rune(')') {
-					goto l906
+					goto l913
 				}
 				position++
-				add(ruleBaseIndexScale, position907)
+				add(ruleBaseIndexScale, position914)
 			}
 			return true
-		l906:
-			position, tokenIndex = position906, tokenIndex906
+		l913:
+			position, tokenIndex = position913, tokenIndex913
 			return false
 		},
-		/* 56 Operator <- <('+' / '-')> */
+		/* 57 Operator <- <('+' / '-')> */
 		func() bool {
-			position922, tokenIndex922 := position, tokenIndex
+			position929, tokenIndex929 := position, tokenIndex
 			{
-				position923 := position
+				position930 := position
 				{
-					position924, tokenIndex924 := position, tokenIndex
+					position931, tokenIndex931 := position, tokenIndex
 					if buffer[position] != rune('+') {
-						goto l925
-					}
-					position++
-					goto l924
-				l925:
-					position, tokenIndex = position924, tokenIndex924
-					if buffer[position] != rune('-') {
-						goto l922
-					}
-					position++
-				}
-			l924:
-				add(ruleOperator, position923)
-			}
-			return true
-		l922:
-			position, tokenIndex = position922, tokenIndex922
-			return false
-		},
-		/* 57 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
-		func() bool {
-			position926, tokenIndex926 := position, tokenIndex
-			{
-				position927 := position
-				{
-					position928, tokenIndex928 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l928
-					}
-					position++
-					goto l929
-				l928:
-					position, tokenIndex = position928, tokenIndex928
-				}
-			l929:
-				{
-					position930, tokenIndex930 := position, tokenIndex
-					if buffer[position] != rune('-') {
-						goto l930
+						goto l932
 					}
 					position++
 					goto l931
-				l930:
-					position, tokenIndex = position930, tokenIndex930
+				l932:
+					position, tokenIndex = position931, tokenIndex931
+					if buffer[position] != rune('-') {
+						goto l929
+					}
+					position++
 				}
 			l931:
+				add(ruleOperator, position930)
+			}
+			return true
+		l929:
+			position, tokenIndex = position929, tokenIndex929
+			return false
+		},
+		/* 58 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position933, tokenIndex933 := position, tokenIndex
+			{
+				position934 := position
 				{
-					position932, tokenIndex932 := position, tokenIndex
+					position935, tokenIndex935 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l935
+					}
+					position++
+					goto l936
+				l935:
+					position, tokenIndex = position935, tokenIndex935
+				}
+			l936:
+				{
+					position937, tokenIndex937 := position, tokenIndex
+					if buffer[position] != rune('-') {
+						goto l937
+					}
+					position++
+					goto l938
+				l937:
+					position, tokenIndex = position937, tokenIndex937
+				}
+			l938:
+				{
+					position939, tokenIndex939 := position, tokenIndex
 					if buffer[position] != rune('0') {
-						goto l933
+						goto l940
 					}
 					position++
 					{
-						position934, tokenIndex934 := position, tokenIndex
+						position941, tokenIndex941 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l935
-						}
-						position++
-						goto l934
-					l935:
-						position, tokenIndex = position934, tokenIndex934
-						if buffer[position] != rune('B') {
-							goto l933
-						}
-						position++
-					}
-				l934:
-					{
-						position938, tokenIndex938 := position, tokenIndex
-						if buffer[position] != rune('0') {
-							goto l939
-						}
-						position++
-						goto l938
-					l939:
-						position, tokenIndex = position938, tokenIndex938
-						if buffer[position] != rune('1') {
-							goto l933
-						}
-						position++
-					}
-				l938:
-				l936:
-					{
-						position937, tokenIndex937 := position, tokenIndex
-						{
-							position940, tokenIndex940 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l941
-							}
-							position++
-							goto l940
-						l941:
-							position, tokenIndex = position940, tokenIndex940
-							if buffer[position] != rune('1') {
-								goto l937
-							}
-							position++
-						}
-					l940:
-						goto l936
-					l937:
-						position, tokenIndex = position937, tokenIndex937
-					}
-					goto l932
-				l933:
-					position, tokenIndex = position932, tokenIndex932
-					if buffer[position] != rune('0') {
-						goto l942
-					}
-					position++
-					{
-						position943, tokenIndex943 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l944
-						}
-						position++
-						goto l943
-					l944:
-						position, tokenIndex = position943, tokenIndex943
-						if buffer[position] != rune('X') {
 							goto l942
 						}
 						position++
-					}
-				l943:
-					{
-						position947, tokenIndex947 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l948
+						goto l941
+					l942:
+						position, tokenIndex = position941, tokenIndex941
+						if buffer[position] != rune('B') {
+							goto l940
 						}
 						position++
-						goto l947
-					l948:
-						position, tokenIndex = position947, tokenIndex947
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+					}
+				l941:
+					{
+						position945, tokenIndex945 := position, tokenIndex
+						if buffer[position] != rune('0') {
+							goto l946
+						}
+						position++
+						goto l945
+					l946:
+						position, tokenIndex = position945, tokenIndex945
+						if buffer[position] != rune('1') {
+							goto l940
+						}
+						position++
+					}
+				l945:
+				l943:
+					{
+						position944, tokenIndex944 := position, tokenIndex
+						{
+							position947, tokenIndex947 := position, tokenIndex
+							if buffer[position] != rune('0') {
+								goto l948
+							}
+							position++
+							goto l947
+						l948:
+							position, tokenIndex = position947, tokenIndex947
+							if buffer[position] != rune('1') {
+								goto l944
+							}
+							position++
+						}
+					l947:
+						goto l943
+					l944:
+						position, tokenIndex = position944, tokenIndex944
+					}
+					goto l939
+				l940:
+					position, tokenIndex = position939, tokenIndex939
+					if buffer[position] != rune('0') {
+						goto l949
+					}
+					position++
+					{
+						position950, tokenIndex950 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l951
+						}
+						position++
+						goto l950
+					l951:
+						position, tokenIndex = position950, tokenIndex950
+						if buffer[position] != rune('X') {
 							goto l949
 						}
 						position++
-						goto l947
-					l949:
-						position, tokenIndex = position947, tokenIndex947
-						{
-							position950, tokenIndex950 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l951
-							}
-							position++
-							goto l950
-						l951:
-							position, tokenIndex = position950, tokenIndex950
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l942
-							}
-							position++
-						}
-					l950:
 					}
-				l947:
-				l945:
+				l950:
 					{
-						position946, tokenIndex946 := position, tokenIndex
-						{
-							position952, tokenIndex952 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l953
-							}
-							position++
-							goto l952
-						l953:
-							position, tokenIndex = position952, tokenIndex952
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l954
-							}
-							position++
-							goto l952
-						l954:
-							position, tokenIndex = position952, tokenIndex952
-							{
-								position955, tokenIndex955 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l956
-								}
-								position++
-								goto l955
-							l956:
-								position, tokenIndex = position955, tokenIndex955
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l946
-								}
-								position++
-							}
-						l955:
-						}
-					l952:
-						goto l945
-					l946:
-						position, tokenIndex = position946, tokenIndex946
-					}
-					goto l932
-				l942:
-					position, tokenIndex = position932, tokenIndex932
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l926
-					}
-					position++
-				l957:
-					{
-						position958, tokenIndex958 := position, tokenIndex
+						position954, tokenIndex954 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l958
+							goto l955
 						}
 						position++
-						goto l957
-					l958:
-						position, tokenIndex = position958, tokenIndex958
+						goto l954
+					l955:
+						position, tokenIndex = position954, tokenIndex954
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l956
+						}
+						position++
+						goto l954
+					l956:
+						position, tokenIndex = position954, tokenIndex954
+						{
+							position957, tokenIndex957 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('f') {
+								goto l958
+							}
+							position++
+							goto l957
+						l958:
+							position, tokenIndex = position957, tokenIndex957
+							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l949
+							}
+							position++
+						}
+					l957:
 					}
-				}
-			l932:
-				add(ruleOffset, position927)
-			}
-			return true
-		l926:
-			position, tokenIndex = position926, tokenIndex926
-			return false
-		},
-		/* 58 Section <- <([a-z] / [A-Z] / '@')+> */
-		func() bool {
-			position959, tokenIndex959 := position, tokenIndex
-			{
-				position960 := position
-				{
-					position963, tokenIndex963 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l964
-					}
-					position++
-					goto l963
-				l964:
-					position, tokenIndex = position963, tokenIndex963
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l965
-					}
-					position++
-					goto l963
-				l965:
-					position, tokenIndex = position963, tokenIndex963
-					if buffer[position] != rune('@') {
-						goto l959
-					}
-					position++
-				}
-			l963:
-			l961:
-				{
-					position962, tokenIndex962 := position, tokenIndex
+				l954:
+				l952:
 					{
-						position966, tokenIndex966 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l967
+						position953, tokenIndex953 := position, tokenIndex
+						{
+							position959, tokenIndex959 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l960
+							}
+							position++
+							goto l959
+						l960:
+							position, tokenIndex = position959, tokenIndex959
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l961
+							}
+							position++
+							goto l959
+						l961:
+							position, tokenIndex = position959, tokenIndex959
+							{
+								position962, tokenIndex962 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('f') {
+									goto l963
+								}
+								position++
+								goto l962
+							l963:
+								position, tokenIndex = position962, tokenIndex962
+								if c := buffer[position]; c < rune('A') || c > rune('F') {
+									goto l953
+								}
+								position++
+							}
+						l962:
 						}
-						position++
-						goto l966
-					l967:
-						position, tokenIndex = position966, tokenIndex966
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l968
-						}
-						position++
-						goto l966
-					l968:
-						position, tokenIndex = position966, tokenIndex966
-						if buffer[position] != rune('@') {
-							goto l962
-						}
-						position++
+					l959:
+						goto l952
+					l953:
+						position, tokenIndex = position953, tokenIndex953
 					}
-				l966:
-					goto l961
-				l962:
-					position, tokenIndex = position962, tokenIndex962
+					goto l939
+				l949:
+					position, tokenIndex = position939, tokenIndex939
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l933
+					}
+					position++
+				l964:
+					{
+						position965, tokenIndex965 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l965
+						}
+						position++
+						goto l964
+					l965:
+						position, tokenIndex = position965, tokenIndex965
+					}
 				}
-				add(ruleSection, position960)
+			l939:
+				add(ruleOffset, position934)
 			}
 			return true
-		l959:
-			position, tokenIndex = position959, tokenIndex959
+		l933:
+			position, tokenIndex = position933, tokenIndex933
 			return false
 		},
-		/* 59 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		/* 59 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position969, tokenIndex969 := position, tokenIndex
+			position966, tokenIndex966 := position, tokenIndex
 			{
-				position970 := position
-				if buffer[position] != rune('%') {
-					goto l969
-				}
-				position++
+				position967 := position
 				{
-					position971, tokenIndex971 := position, tokenIndex
-					if c := buffer[position]; c < rune('c') || c > rune('g') {
+					position970, tokenIndex970 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l971
+					}
+					position++
+					goto l970
+				l971:
+					position, tokenIndex = position970, tokenIndex970
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l972
 					}
 					position++
-					goto l971
+					goto l970
 				l972:
-					position, tokenIndex = position971, tokenIndex971
-					if buffer[position] != rune('s') {
-						goto l969
+					position, tokenIndex = position970, tokenIndex970
+					if buffer[position] != rune('@') {
+						goto l966
 					}
 					position++
 				}
-			l971:
+			l970:
+			l968:
+				{
+					position969, tokenIndex969 := position, tokenIndex
+					{
+						position973, tokenIndex973 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l974
+						}
+						position++
+						goto l973
+					l974:
+						position, tokenIndex = position973, tokenIndex973
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l975
+						}
+						position++
+						goto l973
+					l975:
+						position, tokenIndex = position973, tokenIndex973
+						if buffer[position] != rune('@') {
+							goto l969
+						}
+						position++
+					}
+				l973:
+					goto l968
+				l969:
+					position, tokenIndex = position969, tokenIndex969
+				}
+				add(ruleSection, position967)
+			}
+			return true
+		l966:
+			position, tokenIndex = position966, tokenIndex966
+			return false
+		},
+		/* 60 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		func() bool {
+			position976, tokenIndex976 := position, tokenIndex
+			{
+				position977 := position
+				if buffer[position] != rune('%') {
+					goto l976
+				}
+				position++
+				{
+					position978, tokenIndex978 := position, tokenIndex
+					if c := buffer[position]; c < rune('c') || c > rune('g') {
+						goto l979
+					}
+					position++
+					goto l978
+				l979:
+					position, tokenIndex = position978, tokenIndex978
+					if buffer[position] != rune('s') {
+						goto l976
+					}
+					position++
+				}
+			l978:
 				if buffer[position] != rune('s') {
-					goto l969
+					goto l976
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l969
+					goto l976
 				}
 				position++
-				add(ruleSegmentRegister, position970)
+				add(ruleSegmentRegister, position977)
 			}
 			return true
-		l969:
-			position, tokenIndex = position969, tokenIndex969
+		l976:
+			position, tokenIndex = position976, tokenIndex976
 			return false
 		},
 	}
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/in.s b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
index f93a83f..114ff4f 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/in.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
@@ -86,12 +86,17 @@
 	ld1d { z1.d }, p91/z, [x13, x11, lsl #3]
 	ld1b { z11.b }, p15/z, [x10, #1, mul vl]
 	st2d { z6.d, z7.d }, p0, [x12]
-        // Check that "p22" here isn't parsed as the "p22" register.
+	// Check that "p22" here isn't parsed as the "p22" register.
 	bl p224_point_add
 	ptrue p0.d, vl1
-        // The "#7" here isn't a comment, it's now valid Aarch64 assembly.
+	// The "#7" here isn't a comment, it's now valid Aarch64 assembly.
 	cnth x8, all, mul #7
 
+	// fcmp can compare against zero, which is expressed with a floating-
+	// point zero literal in the instruction. Again, this is not a
+	// comment.
+	fcmp d0, #0.0
+
 local_function:
 
 // BSS data
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/out.s b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
index 4c3ec6d..d77695d 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
@@ -135,13 +135,18 @@
 	ld1d { z1.d }, p91/z, [x13, x11, lsl #3]
 	ld1b { z11.b }, p15/z, [x10, #1, mul vl]
 	st2d { z6.d, z7.d }, p0, [x12]
-        // Check that "p22" here isn't parsed as the "p22" register.
+	// Check that "p22" here isn't parsed as the "p22" register.
 // WAS bl p224_point_add
 	bl	bcm_redirector_p224_point_add
 	ptrue p0.d, vl1
-        // The "#7" here isn't a comment, it's now valid Aarch64 assembly.
+	// The "#7" here isn't a comment, it's now valid Aarch64 assembly.
 	cnth x8, all, mul #7
 
+	// fcmp can compare against zero, which is expressed with a floating-
+	// point zero literal in the instruction. Again, this is not a
+	// comment.
+	fcmp d0, #0.0
+
 .Llocal_function_local_target:
 local_function: