delocate: match all the ARM register extension patterns.

Change-Id: I42d210ae4be106fb2898b986bb17dfe293454828
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/55665
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 4b4794e..0ffecea 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -77,7 +77,7 @@
                        ('#' '~'? '(' [0-9] WS? "<<" WS? [0-9] ')' ) /
                        ARMRegister)
                       ![fb:(+\-]
-ARMConstantTweak <- ("lsl" / "sxtw" / "sxtb" / "uxtw" / "uxtb" / "lsr" / "ror" / "asr") (WS '#' Offset)?
+ARMConstantTweak <- (([us] "xt" [xwhb]) / "lsl" / "lsr" / "ror" / "asr") (WS '#' Offset)?
 ARMRegister <- "sp" / ([xwdqshb] [0-9] [0-9]?) / "xzr" / "wzr" / "NZCV" / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')? )
 ARMVectorRegister <- "v" [0-9] [0-9]? ('.' [0-9]* [bsdhq] ('[' [0-9] [0-9]? ']')? )?
 # Compilers only output a very limited number of expression forms. Rather than
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index 3b25946..01a1fc2 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -4594,7 +4594,7 @@
 			position, tokenIndex = position529, tokenIndex529
 			return false
 		},
-		/* 40 ARMConstantTweak <- <(((('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('s' / 'S') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('s' / 'S') ('x' / 'X') ('t' / 'T') ('b' / 'B')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('b' / 'B')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
+		/* 40 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)?)> */
 		func() bool {
 			position570, tokenIndex570 := position, tokenIndex
 			{
@@ -4603,14 +4603,14 @@
 					position572, tokenIndex572 := position, tokenIndex
 					{
 						position574, tokenIndex574 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('u') {
 							goto l575
 						}
 						position++
 						goto l574
 					l575:
 						position, tokenIndex = position574, tokenIndex574
-						if buffer[position] != rune('L') {
+						if buffer[position] != rune('s') {
 							goto l573
 						}
 						position++
@@ -4618,14 +4618,14 @@
 				l574:
 					{
 						position576, tokenIndex576 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('x') {
 							goto l577
 						}
 						position++
 						goto l576
 					l577:
 						position, tokenIndex = position576, tokenIndex576
-						if buffer[position] != rune('S') {
+						if buffer[position] != rune('X') {
 							goto l573
 						}
 						position++
@@ -4633,158 +4633,157 @@
 				l576:
 					{
 						position578, tokenIndex578 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('t') {
 							goto l579
 						}
 						position++
 						goto l578
 					l579:
 						position, tokenIndex = position578, tokenIndex578
-						if buffer[position] != rune('L') {
+						if buffer[position] != rune('T') {
 							goto l573
 						}
 						position++
 					}
 				l578:
+					{
+						position580, tokenIndex580 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l581
+						}
+						position++
+						goto l580
+					l581:
+						position, tokenIndex = position580, tokenIndex580
+						if buffer[position] != rune('w') {
+							goto l582
+						}
+						position++
+						goto l580
+					l582:
+						position, tokenIndex = position580, tokenIndex580
+						if buffer[position] != rune('h') {
+							goto l583
+						}
+						position++
+						goto l580
+					l583:
+						position, tokenIndex = position580, tokenIndex580
+						if buffer[position] != rune('b') {
+							goto l573
+						}
+						position++
+					}
+				l580:
 					goto l572
 				l573:
 					position, tokenIndex = position572, tokenIndex572
 					{
-						position581, tokenIndex581 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l582
-						}
-						position++
-						goto l581
-					l582:
-						position, tokenIndex = position581, tokenIndex581
-						if buffer[position] != rune('S') {
-							goto l580
-						}
-						position++
-					}
-				l581:
-					{
-						position583, tokenIndex583 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l584
-						}
-						position++
-						goto l583
-					l584:
-						position, tokenIndex = position583, tokenIndex583
-						if buffer[position] != rune('X') {
-							goto l580
-						}
-						position++
-					}
-				l583:
-					{
 						position585, tokenIndex585 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('l') {
 							goto l586
 						}
 						position++
 						goto l585
 					l586:
 						position, tokenIndex = position585, tokenIndex585
-						if buffer[position] != rune('T') {
-							goto l580
+						if buffer[position] != rune('L') {
+							goto l584
 						}
 						position++
 					}
 				l585:
 					{
 						position587, tokenIndex587 := position, tokenIndex
-						if buffer[position] != rune('w') {
+						if buffer[position] != rune('s') {
 							goto l588
 						}
 						position++
 						goto l587
 					l588:
 						position, tokenIndex = position587, tokenIndex587
-						if buffer[position] != rune('W') {
-							goto l580
+						if buffer[position] != rune('S') {
+							goto l584
 						}
 						position++
 					}
 				l587:
-					goto l572
-				l580:
-					position, tokenIndex = position572, tokenIndex572
 					{
-						position590, tokenIndex590 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l591
+						position589, tokenIndex589 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l590
 						}
 						position++
-						goto l590
-					l591:
-						position, tokenIndex = position590, tokenIndex590
-						if buffer[position] != rune('S') {
-							goto l589
+						goto l589
+					l590:
+						position, tokenIndex = position589, tokenIndex589
+						if buffer[position] != rune('L') {
+							goto l584
 						}
 						position++
 					}
-				l590:
+				l589:
+					goto l572
+				l584:
+					position, tokenIndex = position572, tokenIndex572
 					{
 						position592, tokenIndex592 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('l') {
 							goto l593
 						}
 						position++
 						goto l592
 					l593:
 						position, tokenIndex = position592, tokenIndex592
-						if buffer[position] != rune('X') {
-							goto l589
+						if buffer[position] != rune('L') {
+							goto l591
 						}
 						position++
 					}
 				l592:
 					{
 						position594, tokenIndex594 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('s') {
 							goto l595
 						}
 						position++
 						goto l594
 					l595:
 						position, tokenIndex = position594, tokenIndex594
-						if buffer[position] != rune('T') {
-							goto l589
+						if buffer[position] != rune('S') {
+							goto l591
 						}
 						position++
 					}
 				l594:
 					{
 						position596, tokenIndex596 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						if buffer[position] != rune('r') {
 							goto l597
 						}
 						position++
 						goto l596
 					l597:
 						position, tokenIndex = position596, tokenIndex596
-						if buffer[position] != rune('B') {
-							goto l589
+						if buffer[position] != rune('R') {
+							goto l591
 						}
 						position++
 					}
 				l596:
 					goto l572
-				l589:
+				l591:
 					position, tokenIndex = position572, tokenIndex572
 					{
 						position599, tokenIndex599 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('r') {
 							goto l600
 						}
 						position++
 						goto l599
 					l600:
 						position, tokenIndex = position599, tokenIndex599
-						if buffer[position] != rune('U') {
+						if buffer[position] != rune('R') {
 							goto l598
 						}
 						position++
@@ -4792,14 +4791,14 @@
 				l599:
 					{
 						position601, tokenIndex601 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('o') {
 							goto l602
 						}
 						position++
 						goto l601
 					l602:
 						position, tokenIndex = position601, tokenIndex601
-						if buffer[position] != rune('X') {
+						if buffer[position] != rune('O') {
 							goto l598
 						}
 						position++
@@ -4807,260 +4806,86 @@
 				l601:
 					{
 						position603, tokenIndex603 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('r') {
 							goto l604
 						}
 						position++
 						goto l603
 					l604:
 						position, tokenIndex = position603, tokenIndex603
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('R') {
 							goto l598
 						}
 						position++
 					}
 				l603:
+					goto l572
+				l598:
+					position, tokenIndex = position572, tokenIndex572
 					{
 						position605, tokenIndex605 := position, tokenIndex
-						if buffer[position] != rune('w') {
+						if buffer[position] != rune('a') {
 							goto l606
 						}
 						position++
 						goto l605
 					l606:
 						position, tokenIndex = position605, tokenIndex605
-						if buffer[position] != rune('W') {
-							goto l598
-						}
-						position++
-					}
-				l605:
-					goto l572
-				l598:
-					position, tokenIndex = position572, tokenIndex572
-					{
-						position608, tokenIndex608 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l609
-						}
-						position++
-						goto l608
-					l609:
-						position, tokenIndex = position608, tokenIndex608
-						if buffer[position] != rune('U') {
-							goto l607
-						}
-						position++
-					}
-				l608:
-					{
-						position610, tokenIndex610 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l611
-						}
-						position++
-						goto l610
-					l611:
-						position, tokenIndex = position610, tokenIndex610
-						if buffer[position] != rune('X') {
-							goto l607
-						}
-						position++
-					}
-				l610:
-					{
-						position612, tokenIndex612 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l613
-						}
-						position++
-						goto l612
-					l613:
-						position, tokenIndex = position612, tokenIndex612
-						if buffer[position] != rune('T') {
-							goto l607
-						}
-						position++
-					}
-				l612:
-					{
-						position614, tokenIndex614 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l615
-						}
-						position++
-						goto l614
-					l615:
-						position, tokenIndex = position614, tokenIndex614
-						if buffer[position] != rune('B') {
-							goto l607
-						}
-						position++
-					}
-				l614:
-					goto l572
-				l607:
-					position, tokenIndex = position572, tokenIndex572
-					{
-						position617, tokenIndex617 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l618
-						}
-						position++
-						goto l617
-					l618:
-						position, tokenIndex = position617, tokenIndex617
-						if buffer[position] != rune('L') {
-							goto l616
-						}
-						position++
-					}
-				l617:
-					{
-						position619, tokenIndex619 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l620
-						}
-						position++
-						goto l619
-					l620:
-						position, tokenIndex = position619, tokenIndex619
-						if buffer[position] != rune('S') {
-							goto l616
-						}
-						position++
-					}
-				l619:
-					{
-						position621, tokenIndex621 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l622
-						}
-						position++
-						goto l621
-					l622:
-						position, tokenIndex = position621, tokenIndex621
-						if buffer[position] != rune('R') {
-							goto l616
-						}
-						position++
-					}
-				l621:
-					goto l572
-				l616:
-					position, tokenIndex = position572, tokenIndex572
-					{
-						position624, tokenIndex624 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l625
-						}
-						position++
-						goto l624
-					l625:
-						position, tokenIndex = position624, tokenIndex624
-						if buffer[position] != rune('R') {
-							goto l623
-						}
-						position++
-					}
-				l624:
-					{
-						position626, tokenIndex626 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l627
-						}
-						position++
-						goto l626
-					l627:
-						position, tokenIndex = position626, tokenIndex626
-						if buffer[position] != rune('O') {
-							goto l623
-						}
-						position++
-					}
-				l626:
-					{
-						position628, tokenIndex628 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l629
-						}
-						position++
-						goto l628
-					l629:
-						position, tokenIndex = position628, tokenIndex628
-						if buffer[position] != rune('R') {
-							goto l623
-						}
-						position++
-					}
-				l628:
-					goto l572
-				l623:
-					position, tokenIndex = position572, tokenIndex572
-					{
-						position630, tokenIndex630 := position, tokenIndex
-						if buffer[position] != rune('a') {
-							goto l631
-						}
-						position++
-						goto l630
-					l631:
-						position, tokenIndex = position630, tokenIndex630
 						if buffer[position] != rune('A') {
 							goto l570
 						}
 						position++
 					}
-				l630:
+				l605:
 					{
-						position632, tokenIndex632 := position, tokenIndex
+						position607, tokenIndex607 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l633
+							goto l608
 						}
 						position++
-						goto l632
-					l633:
-						position, tokenIndex = position632, tokenIndex632
+						goto l607
+					l608:
+						position, tokenIndex = position607, tokenIndex607
 						if buffer[position] != rune('S') {
 							goto l570
 						}
 						position++
 					}
-				l632:
+				l607:
 					{
-						position634, tokenIndex634 := position, tokenIndex
+						position609, tokenIndex609 := position, tokenIndex
 						if buffer[position] != rune('r') {
-							goto l635
+							goto l610
 						}
 						position++
-						goto l634
-					l635:
-						position, tokenIndex = position634, tokenIndex634
+						goto l609
+					l610:
+						position, tokenIndex = position609, tokenIndex609
 						if buffer[position] != rune('R') {
 							goto l570
 						}
 						position++
 					}
-				l634:
+				l609:
 				}
 			l572:
 				{
-					position636, tokenIndex636 := position, tokenIndex
+					position611, tokenIndex611 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l636
+						goto l611
 					}
 					if buffer[position] != rune('#') {
-						goto l636
+						goto l611
 					}
 					position++
 					if !_rules[ruleOffset]() {
-						goto l636
+						goto l611
 					}
-					goto l637
-				l636:
-					position, tokenIndex = position636, tokenIndex636
+					goto l612
+				l611:
+					position, tokenIndex = position611, tokenIndex611
 				}
-			l637:
+			l612:
 				add(ruleARMConstantTweak, position571)
 			}
 			return true
@@ -5070,1528 +4895,1528 @@
 		},
 		/* 41 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
 		func() bool {
-			position638, tokenIndex638 := position, tokenIndex
+			position613, tokenIndex613 := position, tokenIndex
 			{
-				position639 := position
+				position614 := position
 				{
-					position640, tokenIndex640 := position, tokenIndex
+					position615, tokenIndex615 := position, tokenIndex
 					{
-						position642, tokenIndex642 := position, tokenIndex
+						position617, tokenIndex617 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l643
+							goto l618
 						}
 						position++
-						goto l642
-					l643:
-						position, tokenIndex = position642, tokenIndex642
+						goto l617
+					l618:
+						position, tokenIndex = position617, tokenIndex617
 						if buffer[position] != rune('S') {
-							goto l641
+							goto l616
 						}
 						position++
 					}
-				l642:
+				l617:
 					{
-						position644, tokenIndex644 := position, tokenIndex
+						position619, tokenIndex619 := position, tokenIndex
 						if buffer[position] != rune('p') {
-							goto l645
+							goto l620
 						}
 						position++
-						goto l644
-					l645:
-						position, tokenIndex = position644, tokenIndex644
+						goto l619
+					l620:
+						position, tokenIndex = position619, tokenIndex619
 						if buffer[position] != rune('P') {
-							goto l641
+							goto l616
 						}
 						position++
 					}
-				l644:
-					goto l640
-				l641:
-					position, tokenIndex = position640, tokenIndex640
+				l619:
+					goto l615
+				l616:
+					position, tokenIndex = position615, tokenIndex615
 					{
-						position647, tokenIndex647 := position, tokenIndex
+						position622, tokenIndex622 := position, tokenIndex
 						if buffer[position] != rune('x') {
-							goto l648
+							goto l623
 						}
 						position++
-						goto l647
-					l648:
-						position, tokenIndex = position647, tokenIndex647
+						goto l622
+					l623:
+						position, tokenIndex = position622, tokenIndex622
 						if buffer[position] != rune('w') {
-							goto l649
+							goto l624
 						}
 						position++
-						goto l647
-					l649:
-						position, tokenIndex = position647, tokenIndex647
+						goto l622
+					l624:
+						position, tokenIndex = position622, tokenIndex622
 						if buffer[position] != rune('d') {
-							goto l650
+							goto l625
 						}
 						position++
-						goto l647
-					l650:
-						position, tokenIndex = position647, tokenIndex647
+						goto l622
+					l625:
+						position, tokenIndex = position622, tokenIndex622
 						if buffer[position] != rune('q') {
-							goto l651
+							goto l626
 						}
 						position++
-						goto l647
-					l651:
-						position, tokenIndex = position647, tokenIndex647
+						goto l622
+					l626:
+						position, tokenIndex = position622, tokenIndex622
 						if buffer[position] != rune('s') {
-							goto l652
+							goto l627
 						}
 						position++
-						goto l647
-					l652:
-						position, tokenIndex = position647, tokenIndex647
+						goto l622
+					l627:
+						position, tokenIndex = position622, tokenIndex622
 						if buffer[position] != rune('h') {
-							goto l653
+							goto l628
 						}
 						position++
-						goto l647
-					l653:
-						position, tokenIndex = position647, tokenIndex647
+						goto l622
+					l628:
+						position, tokenIndex = position622, tokenIndex622
 						if buffer[position] != rune('b') {
-							goto l646
+							goto l621
 						}
 						position++
 					}
-				l647:
+				l622:
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l646
+						goto l621
 					}
 					position++
 					{
-						position654, tokenIndex654 := position, tokenIndex
+						position629, tokenIndex629 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l654
+							goto l629
 						}
 						position++
-						goto l655
-					l654:
-						position, tokenIndex = position654, tokenIndex654
+						goto l630
+					l629:
+						position, tokenIndex = position629, tokenIndex629
 					}
-				l655:
-					goto l640
-				l646:
-					position, tokenIndex = position640, tokenIndex640
+				l630:
+					goto l615
+				l621:
+					position, tokenIndex = position615, tokenIndex615
 					{
-						position657, tokenIndex657 := position, tokenIndex
+						position632, tokenIndex632 := position, tokenIndex
 						if buffer[position] != rune('x') {
-							goto l658
+							goto l633
 						}
 						position++
-						goto l657
-					l658:
-						position, tokenIndex = position657, tokenIndex657
+						goto l632
+					l633:
+						position, tokenIndex = position632, tokenIndex632
 						if buffer[position] != rune('X') {
-							goto l656
+							goto l631
 						}
 						position++
 					}
+				l632:
+					{
+						position634, tokenIndex634 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l635
+						}
+						position++
+						goto l634
+					l635:
+						position, tokenIndex = position634, tokenIndex634
+						if buffer[position] != rune('Z') {
+							goto l631
+						}
+						position++
+					}
+				l634:
+					{
+						position636, tokenIndex636 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l637
+						}
+						position++
+						goto l636
+					l637:
+						position, tokenIndex = position636, tokenIndex636
+						if buffer[position] != rune('R') {
+							goto l631
+						}
+						position++
+					}
+				l636:
+					goto l615
+				l631:
+					position, tokenIndex = position615, tokenIndex615
+					{
+						position639, tokenIndex639 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l640
+						}
+						position++
+						goto l639
+					l640:
+						position, tokenIndex = position639, tokenIndex639
+						if buffer[position] != rune('W') {
+							goto l638
+						}
+						position++
+					}
+				l639:
+					{
+						position641, tokenIndex641 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l642
+						}
+						position++
+						goto l641
+					l642:
+						position, tokenIndex = position641, tokenIndex641
+						if buffer[position] != rune('Z') {
+							goto l638
+						}
+						position++
+					}
+				l641:
+					{
+						position643, tokenIndex643 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l644
+						}
+						position++
+						goto l643
+					l644:
+						position, tokenIndex = position643, tokenIndex643
+						if buffer[position] != rune('R') {
+							goto l638
+						}
+						position++
+					}
+				l643:
+					goto l615
+				l638:
+					position, tokenIndex = position615, tokenIndex615
+					{
+						position646, tokenIndex646 := position, tokenIndex
+						if buffer[position] != rune('n') {
+							goto l647
+						}
+						position++
+						goto l646
+					l647:
+						position, tokenIndex = position646, tokenIndex646
+						if buffer[position] != rune('N') {
+							goto l645
+						}
+						position++
+					}
+				l646:
+					{
+						position648, tokenIndex648 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l649
+						}
+						position++
+						goto l648
+					l649:
+						position, tokenIndex = position648, tokenIndex648
+						if buffer[position] != rune('Z') {
+							goto l645
+						}
+						position++
+					}
+				l648:
+					{
+						position650, tokenIndex650 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l651
+						}
+						position++
+						goto l650
+					l651:
+						position, tokenIndex = position650, tokenIndex650
+						if buffer[position] != rune('C') {
+							goto l645
+						}
+						position++
+					}
+				l650:
+					{
+						position652, tokenIndex652 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l653
+						}
+						position++
+						goto l652
+					l653:
+						position, tokenIndex = position652, tokenIndex652
+						if buffer[position] != rune('V') {
+							goto l645
+						}
+						position++
+					}
+				l652:
+					goto l615
+				l645:
+					position, tokenIndex = position615, tokenIndex615
+					if !_rules[ruleARMVectorRegister]() {
+						goto l654
+					}
+					goto l615
+				l654:
+					position, tokenIndex = position615, tokenIndex615
+					if buffer[position] != rune('{') {
+						goto l613
+					}
+					position++
+					{
+						position655, tokenIndex655 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l655
+						}
+						goto l656
+					l655:
+						position, tokenIndex = position655, tokenIndex655
+					}
+				l656:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l613
+					}
 				l657:
 					{
-						position659, tokenIndex659 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						position658, tokenIndex658 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l658
+						}
+						position++
+						{
+							position659, tokenIndex659 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l659
+							}
 							goto l660
+						l659:
+							position, tokenIndex = position659, tokenIndex659
 						}
-						position++
-						goto l659
 					l660:
-						position, tokenIndex = position659, tokenIndex659
-						if buffer[position] != rune('Z') {
-							goto l656
+						if !_rules[ruleARMVectorRegister]() {
+							goto l658
 						}
-						position++
+						goto l657
+					l658:
+						position, tokenIndex = position658, tokenIndex658
 					}
-				l659:
 					{
 						position661, tokenIndex661 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l662
+						if !_rules[ruleWS]() {
+							goto l661
 						}
-						position++
-						goto l661
-					l662:
+						goto l662
+					l661:
 						position, tokenIndex = position661, tokenIndex661
-						if buffer[position] != rune('R') {
-							goto l656
+					}
+				l662:
+					if buffer[position] != rune('}') {
+						goto l613
+					}
+					position++
+					{
+						position663, tokenIndex663 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l663
 						}
 						position++
-					}
-				l661:
-					goto l640
-				l656:
-					position, tokenIndex = position640, tokenIndex640
-					{
-						position664, tokenIndex664 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l665
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l663
+						}
+						position++
+						{
+							position665, tokenIndex665 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l665
+							}
+							position++
+							goto l666
+						l665:
+							position, tokenIndex = position665, tokenIndex665
+						}
+					l666:
+						if buffer[position] != rune(']') {
+							goto l663
 						}
 						position++
 						goto l664
-					l665:
-						position, tokenIndex = position664, tokenIndex664
-						if buffer[position] != rune('W') {
-							goto l663
-						}
-						position++
+					l663:
+						position, tokenIndex = position663, tokenIndex663
 					}
 				l664:
-					{
-						position666, tokenIndex666 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l667
-						}
-						position++
-						goto l666
-					l667:
-						position, tokenIndex = position666, tokenIndex666
-						if buffer[position] != rune('Z') {
-							goto l663
-						}
-						position++
+				}
+			l615:
+				add(ruleARMRegister, position614)
+			}
+			return true
+		l613:
+			position, tokenIndex = position613, tokenIndex613
+			return false
+		},
+		/* 42 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
+		func() bool {
+			position667, tokenIndex667 := position, tokenIndex
+			{
+				position668 := position
+				{
+					position669, tokenIndex669 := position, tokenIndex
+					if buffer[position] != rune('v') {
+						goto l670
 					}
-				l666:
-					{
-						position668, tokenIndex668 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l669
-						}
-						position++
-						goto l668
-					l669:
-						position, tokenIndex = position668, tokenIndex668
-						if buffer[position] != rune('R') {
-							goto l663
-						}
-						position++
+					position++
+					goto l669
+				l670:
+					position, tokenIndex = position669, tokenIndex669
+					if buffer[position] != rune('V') {
+						goto l667
 					}
-				l668:
-					goto l640
-				l663:
-					position, tokenIndex = position640, tokenIndex640
-					{
-						position671, tokenIndex671 := position, tokenIndex
-						if buffer[position] != rune('n') {
-							goto l672
-						}
-						position++
+					position++
+				}
+			l669:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l667
+				}
+				position++
+				{
+					position671, tokenIndex671 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l671
-					l672:
-						position, tokenIndex = position671, tokenIndex671
-						if buffer[position] != rune('N') {
-							goto l670
-						}
-						position++
 					}
+					position++
+					goto l672
 				l671:
-					{
-						position673, tokenIndex673 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l674
-						}
-						position++
+					position, tokenIndex = position671, tokenIndex671
+				}
+			l672:
+				{
+					position673, tokenIndex673 := position, tokenIndex
+					if buffer[position] != rune('.') {
 						goto l673
-					l674:
-						position, tokenIndex = position673, tokenIndex673
-						if buffer[position] != rune('Z') {
-							goto l670
-						}
-						position++
 					}
-				l673:
+					position++
+				l675:
 					{
-						position675, tokenIndex675 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						position676, tokenIndex676 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l676
 						}
 						position++
 						goto l675
 					l676:
-						position, tokenIndex = position675, tokenIndex675
-						if buffer[position] != rune('C') {
-							goto l670
-						}
-						position++
+						position, tokenIndex = position676, tokenIndex676
 					}
-				l675:
 					{
 						position677, tokenIndex677 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						if buffer[position] != rune('b') {
 							goto l678
 						}
 						position++
 						goto l677
 					l678:
 						position, tokenIndex = position677, tokenIndex677
-						if buffer[position] != rune('V') {
-							goto l670
+						if buffer[position] != rune('s') {
+							goto l679
+						}
+						position++
+						goto l677
+					l679:
+						position, tokenIndex = position677, tokenIndex677
+						if buffer[position] != rune('d') {
+							goto l680
+						}
+						position++
+						goto l677
+					l680:
+						position, tokenIndex = position677, tokenIndex677
+						if buffer[position] != rune('h') {
+							goto l681
+						}
+						position++
+						goto l677
+					l681:
+						position, tokenIndex = position677, tokenIndex677
+						if buffer[position] != rune('q') {
+							goto l673
 						}
 						position++
 					}
 				l677:
-					goto l640
-				l670:
-					position, tokenIndex = position640, tokenIndex640
-					if !_rules[ruleARMVectorRegister]() {
-						goto l679
-					}
-					goto l640
-				l679:
-					position, tokenIndex = position640, tokenIndex640
-					if buffer[position] != rune('{') {
-						goto l638
-					}
-					position++
 					{
-						position680, tokenIndex680 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l680
+						position682, tokenIndex682 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l682
 						}
-						goto l681
-					l680:
-						position, tokenIndex = position680, tokenIndex680
-					}
-				l681:
-					if !_rules[ruleARMVectorRegister]() {
-						goto l638
-					}
-				l682:
-					{
-						position683, tokenIndex683 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l683
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l682
 						}
 						position++
 						{
 							position684, tokenIndex684 := position, tokenIndex
-							if !_rules[ruleWS]() {
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l684
 							}
+							position++
 							goto l685
 						l684:
 							position, tokenIndex = position684, tokenIndex684
 						}
 					l685:
-						if !_rules[ruleARMVectorRegister]() {
-							goto l683
-						}
-						goto l682
-					l683:
-						position, tokenIndex = position683, tokenIndex683
-					}
-					{
-						position686, tokenIndex686 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l686
-						}
-						goto l687
-					l686:
-						position, tokenIndex = position686, tokenIndex686
-					}
-				l687:
-					if buffer[position] != rune('}') {
-						goto l638
-					}
-					position++
-					{
-						position688, tokenIndex688 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l688
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l688
-						}
-						position++
-						{
-							position690, tokenIndex690 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l690
-							}
-							position++
-							goto l691
-						l690:
-							position, tokenIndex = position690, tokenIndex690
-						}
-					l691:
 						if buffer[position] != rune(']') {
-							goto l688
+							goto l682
 						}
 						position++
-						goto l689
-					l688:
-						position, tokenIndex = position688, tokenIndex688
+						goto l683
+					l682:
+						position, tokenIndex = position682, tokenIndex682
 					}
-				l689:
+				l683:
+					goto l674
+				l673:
+					position, tokenIndex = position673, tokenIndex673
 				}
-			l640:
-				add(ruleARMRegister, position639)
+			l674:
+				add(ruleARMVectorRegister, position668)
 			}
 			return true
-		l638:
-			position, tokenIndex = position638, tokenIndex638
-			return false
-		},
-		/* 42 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
-		func() bool {
-			position692, tokenIndex692 := position, tokenIndex
-			{
-				position693 := position
-				{
-					position694, tokenIndex694 := position, tokenIndex
-					if buffer[position] != rune('v') {
-						goto l695
-					}
-					position++
-					goto l694
-				l695:
-					position, tokenIndex = position694, tokenIndex694
-					if buffer[position] != rune('V') {
-						goto l692
-					}
-					position++
-				}
-			l694:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l692
-				}
-				position++
-				{
-					position696, tokenIndex696 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l696
-					}
-					position++
-					goto l697
-				l696:
-					position, tokenIndex = position696, tokenIndex696
-				}
-			l697:
-				{
-					position698, tokenIndex698 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l698
-					}
-					position++
-				l700:
-					{
-						position701, tokenIndex701 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l701
-						}
-						position++
-						goto l700
-					l701:
-						position, tokenIndex = position701, tokenIndex701
-					}
-					{
-						position702, tokenIndex702 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l703
-						}
-						position++
-						goto l702
-					l703:
-						position, tokenIndex = position702, tokenIndex702
-						if buffer[position] != rune('s') {
-							goto l704
-						}
-						position++
-						goto l702
-					l704:
-						position, tokenIndex = position702, tokenIndex702
-						if buffer[position] != rune('d') {
-							goto l705
-						}
-						position++
-						goto l702
-					l705:
-						position, tokenIndex = position702, tokenIndex702
-						if buffer[position] != rune('h') {
-							goto l706
-						}
-						position++
-						goto l702
-					l706:
-						position, tokenIndex = position702, tokenIndex702
-						if buffer[position] != rune('q') {
-							goto l698
-						}
-						position++
-					}
-				l702:
-					{
-						position707, tokenIndex707 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l707
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l707
-						}
-						position++
-						{
-							position709, tokenIndex709 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l709
-							}
-							position++
-							goto l710
-						l709:
-							position, tokenIndex = position709, tokenIndex709
-						}
-					l710:
-						if buffer[position] != rune(']') {
-							goto l707
-						}
-						position++
-						goto l708
-					l707:
-						position, tokenIndex = position707, tokenIndex707
-					}
-				l708:
-					goto l699
-				l698:
-					position, tokenIndex = position698, tokenIndex698
-				}
-			l699:
-				add(ruleARMVectorRegister, position693)
-			}
-			return true
-		l692:
-			position, tokenIndex = position692, tokenIndex692
+		l667:
+			position, tokenIndex = position667, tokenIndex667
 			return false
 		},
 		/* 43 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position711, tokenIndex711 := position, tokenIndex
+			position686, tokenIndex686 := position, tokenIndex
 			{
-				position712 := position
+				position687 := position
 				{
-					position713, tokenIndex713 := position, tokenIndex
+					position688, tokenIndex688 := position, tokenIndex
 					if !_rules[ruleSymbolRef]() {
-						goto l714
+						goto l689
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l714
+						goto l689
 					}
-					goto l713
-				l714:
-					position, tokenIndex = position713, tokenIndex713
+					goto l688
+				l689:
+					position, tokenIndex = position688, tokenIndex688
 					if !_rules[ruleSymbolRef]() {
-						goto l715
+						goto l690
 					}
-					goto l713
-				l715:
-					position, tokenIndex = position713, tokenIndex713
+					goto l688
+				l690:
+					position, tokenIndex = position688, tokenIndex688
 					if !_rules[ruleLow12BitsSymbolRef]() {
-						goto l716
+						goto l691
 					}
-					goto l713
-				l716:
-					position, tokenIndex = position713, tokenIndex713
-				l718:
+					goto l688
+				l691:
+					position, tokenIndex = position688, tokenIndex688
+				l693:
 					{
-						position719, tokenIndex719 := position, tokenIndex
+						position694, tokenIndex694 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l719
+							goto l694
 						}
-						goto l718
-					l719:
-						position, tokenIndex = position719, tokenIndex719
+						goto l693
+					l694:
+						position, tokenIndex = position694, tokenIndex694
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l717
+						goto l692
 					}
-					goto l713
-				l717:
-					position, tokenIndex = position713, tokenIndex713
+					goto l688
+				l692:
+					position, tokenIndex = position688, tokenIndex688
 					if !_rules[ruleSegmentRegister]() {
-						goto l720
+						goto l695
 					}
 					if !_rules[ruleOffset]() {
-						goto l720
+						goto l695
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l720
+						goto l695
 					}
-					goto l713
-				l720:
-					position, tokenIndex = position713, tokenIndex713
+					goto l688
+				l695:
+					position, tokenIndex = position688, tokenIndex688
 					if !_rules[ruleSegmentRegister]() {
-						goto l721
+						goto l696
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l721
+						goto l696
 					}
-					goto l713
-				l721:
-					position, tokenIndex = position713, tokenIndex713
+					goto l688
+				l696:
+					position, tokenIndex = position688, tokenIndex688
 					if !_rules[ruleSegmentRegister]() {
-						goto l722
+						goto l697
 					}
 					if !_rules[ruleOffset]() {
-						goto l722
+						goto l697
 					}
-					goto l713
-				l722:
-					position, tokenIndex = position713, tokenIndex713
+					goto l688
+				l697:
+					position, tokenIndex = position688, tokenIndex688
 					if !_rules[ruleARMBaseIndexScale]() {
-						goto l723
+						goto l698
 					}
-					goto l713
-				l723:
-					position, tokenIndex = position713, tokenIndex713
+					goto l688
+				l698:
+					position, tokenIndex = position688, tokenIndex688
 					if !_rules[ruleBaseIndexScale]() {
-						goto l711
+						goto l686
 					}
 				}
-			l713:
-				add(ruleMemoryRef, position712)
+			l688:
+				add(ruleMemoryRef, position687)
 			}
 			return true
-		l711:
-			position, tokenIndex = position711, tokenIndex711
+		l686:
+			position, tokenIndex = position686, tokenIndex686
 			return false
 		},
 		/* 44 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
 		func() bool {
-			position724, tokenIndex724 := position, tokenIndex
+			position699, tokenIndex699 := position, tokenIndex
 			{
-				position725 := position
+				position700 := position
 				{
-					position726, tokenIndex726 := position, tokenIndex
-				l728:
+					position701, tokenIndex701 := position, tokenIndex
+				l703:
 					{
-						position729, tokenIndex729 := position, tokenIndex
+						position704, tokenIndex704 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l729
+							goto l704
 						}
-						goto l728
-					l729:
-						position, tokenIndex = position729, tokenIndex729
+						goto l703
+					l704:
+						position, tokenIndex = position704, tokenIndex704
 					}
 					if buffer[position] != rune('+') {
-						goto l726
+						goto l701
 					}
 					position++
-					goto l727
-				l726:
-					position, tokenIndex = position726, tokenIndex726
+					goto l702
+				l701:
+					position, tokenIndex = position701, tokenIndex701
 				}
-			l727:
+			l702:
 				{
-					position730, tokenIndex730 := position, tokenIndex
+					position705, tokenIndex705 := position, tokenIndex
 					if !_rules[ruleLocalSymbol]() {
-						goto l731
+						goto l706
 					}
-					goto l730
-				l731:
-					position, tokenIndex = position730, tokenIndex730
+					goto l705
+				l706:
+					position, tokenIndex = position705, tokenIndex705
 					if !_rules[ruleSymbolName]() {
-						goto l724
+						goto l699
 					}
 				}
-			l730:
-			l732:
+			l705:
+			l707:
 				{
-					position733, tokenIndex733 := position, tokenIndex
+					position708, tokenIndex708 := position, tokenIndex
 					if !_rules[ruleOffset]() {
-						goto l733
+						goto l708
 					}
-					goto l732
-				l733:
-					position, tokenIndex = position733, tokenIndex733
+					goto l707
+				l708:
+					position, tokenIndex = position708, tokenIndex708
 				}
 				{
-					position734, tokenIndex734 := position, tokenIndex
+					position709, tokenIndex709 := position, tokenIndex
 					if buffer[position] != rune('@') {
-						goto l734
+						goto l709
 					}
 					position++
 					if !_rules[ruleSection]() {
-						goto l734
+						goto l709
 					}
-				l736:
+				l711:
 					{
-						position737, tokenIndex737 := position, tokenIndex
+						position712, tokenIndex712 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l737
+							goto l712
 						}
-						goto l736
-					l737:
-						position, tokenIndex = position737, tokenIndex737
+						goto l711
+					l712:
+						position, tokenIndex = position712, tokenIndex712
 					}
-					goto l735
-				l734:
-					position, tokenIndex = position734, tokenIndex734
+					goto l710
+				l709:
+					position, tokenIndex = position709, tokenIndex709
 				}
-			l735:
-				add(ruleSymbolRef, position725)
+			l710:
+				add(ruleSymbolRef, position700)
 			}
 			return true
-		l724:
-			position, tokenIndex = position724, tokenIndex724
+		l699:
+			position, tokenIndex = position699, tokenIndex699
 			return false
 		},
 		/* 45 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
 		func() bool {
-			position738, tokenIndex738 := position, tokenIndex
+			position713, tokenIndex713 := position, tokenIndex
 			{
-				position739 := position
+				position714 := position
 				if buffer[position] != rune(':') {
-					goto l738
+					goto l713
 				}
 				position++
 				{
-					position740, tokenIndex740 := position, tokenIndex
+					position715, tokenIndex715 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l741
+						goto l716
 					}
 					position++
-					goto l740
-				l741:
-					position, tokenIndex = position740, tokenIndex740
+					goto l715
+				l716:
+					position, tokenIndex = position715, tokenIndex715
 					if buffer[position] != rune('L') {
-						goto l738
+						goto l713
 					}
 					position++
 				}
-			l740:
+			l715:
 				{
-					position742, tokenIndex742 := position, tokenIndex
+					position717, tokenIndex717 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l743
+						goto l718
 					}
 					position++
-					goto l742
-				l743:
-					position, tokenIndex = position742, tokenIndex742
+					goto l717
+				l718:
+					position, tokenIndex = position717, tokenIndex717
 					if buffer[position] != rune('O') {
-						goto l738
+						goto l713
 					}
 					position++
 				}
-			l742:
+			l717:
 				if buffer[position] != rune('1') {
-					goto l738
+					goto l713
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l738
+					goto l713
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l738
+					goto l713
 				}
 				position++
 				{
-					position744, tokenIndex744 := position, tokenIndex
+					position719, tokenIndex719 := position, tokenIndex
 					if !_rules[ruleLocalSymbol]() {
-						goto l745
+						goto l720
 					}
-					goto l744
-				l745:
-					position, tokenIndex = position744, tokenIndex744
+					goto l719
+				l720:
+					position, tokenIndex = position719, tokenIndex719
 					if !_rules[ruleSymbolName]() {
-						goto l738
+						goto l713
 					}
 				}
-			l744:
+			l719:
 				{
-					position746, tokenIndex746 := position, tokenIndex
+					position721, tokenIndex721 := position, tokenIndex
 					if !_rules[ruleOffset]() {
-						goto l746
+						goto l721
 					}
-					goto l747
-				l746:
-					position, tokenIndex = position746, tokenIndex746
+					goto l722
+				l721:
+					position, tokenIndex = position721, tokenIndex721
 				}
-			l747:
-				add(ruleLow12BitsSymbolRef, position739)
+			l722:
+				add(ruleLow12BitsSymbolRef, position714)
 			}
 			return true
-		l738:
-			position, tokenIndex = position738, tokenIndex738
+		l713:
+			position, tokenIndex = position713, tokenIndex713
 			return false
 		},
 		/* 46 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
 		func() bool {
-			position748, tokenIndex748 := position, tokenIndex
+			position723, tokenIndex723 := position, tokenIndex
 			{
-				position749 := position
+				position724 := position
 				if buffer[position] != rune('[') {
-					goto l748
+					goto l723
 				}
 				position++
 				if !_rules[ruleARMRegister]() {
-					goto l748
+					goto l723
 				}
 				{
-					position750, tokenIndex750 := position, tokenIndex
+					position725, tokenIndex725 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l750
+						goto l725
 					}
 					position++
 					{
-						position752, tokenIndex752 := position, tokenIndex
+						position727, tokenIndex727 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l752
+							goto l727
 						}
-						goto l753
-					l752:
-						position, tokenIndex = position752, tokenIndex752
+						goto l728
+					l727:
+						position, tokenIndex = position727, tokenIndex727
 					}
-				l753:
+				l728:
 					{
-						position754, tokenIndex754 := position, tokenIndex
+						position729, tokenIndex729 := position, tokenIndex
 						if buffer[position] != rune('#') {
-							goto l755
+							goto l730
 						}
 						position++
 						if !_rules[ruleOffset]() {
-							goto l755
+							goto l730
 						}
 						{
-							position756, tokenIndex756 := position, tokenIndex
+							position731, tokenIndex731 := position, tokenIndex
 							{
-								position758, tokenIndex758 := position, tokenIndex
+								position733, tokenIndex733 := position, tokenIndex
 								if buffer[position] != rune('*') {
-									goto l759
+									goto l734
 								}
 								position++
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l759
+									goto l734
 								}
 								position++
-							l760:
+							l735:
 								{
-									position761, tokenIndex761 := position, tokenIndex
+									position736, tokenIndex736 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l761
+										goto l736
 									}
 									position++
-									goto l760
-								l761:
-									position, tokenIndex = position761, tokenIndex761
+									goto l735
+								l736:
+									position, tokenIndex = position736, tokenIndex736
 								}
-								goto l758
-							l759:
-								position, tokenIndex = position758, tokenIndex758
+								goto l733
+							l734:
+								position, tokenIndex = position733, tokenIndex733
 								if buffer[position] != rune('*') {
-									goto l762
+									goto l737
 								}
 								position++
 								if buffer[position] != rune('(') {
-									goto l762
+									goto l737
 								}
 								position++
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l762
+									goto l737
 								}
 								position++
-							l763:
+							l738:
 								{
-									position764, tokenIndex764 := position, tokenIndex
+									position739, tokenIndex739 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l764
+										goto l739
 									}
 									position++
-									goto l763
-								l764:
-									position, tokenIndex = position764, tokenIndex764
+									goto l738
+								l739:
+									position, tokenIndex = position739, tokenIndex739
 								}
 								if !_rules[ruleOperator]() {
-									goto l762
+									goto l737
 								}
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l762
+									goto l737
 								}
 								position++
-							l765:
+							l740:
 								{
-									position766, tokenIndex766 := position, tokenIndex
+									position741, tokenIndex741 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l766
+										goto l741
 									}
 									position++
-									goto l765
-								l766:
-									position, tokenIndex = position766, tokenIndex766
+									goto l740
+								l741:
+									position, tokenIndex = position741, tokenIndex741
 								}
 								if buffer[position] != rune(')') {
-									goto l762
+									goto l737
 								}
 								position++
-								goto l758
-							l762:
-								position, tokenIndex = position758, tokenIndex758
-							l767:
+								goto l733
+							l737:
+								position, tokenIndex = position733, tokenIndex733
+							l742:
 								{
-									position768, tokenIndex768 := position, tokenIndex
+									position743, tokenIndex743 := position, tokenIndex
 									if buffer[position] != rune('+') {
-										goto l768
+										goto l743
 									}
 									position++
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l768
+										goto l743
 									}
 									position++
-								l769:
+								l744:
 									{
-										position770, tokenIndex770 := position, tokenIndex
+										position745, tokenIndex745 := position, tokenIndex
 										if c := buffer[position]; c < rune('0') || c > rune('9') {
-											goto l770
+											goto l745
 										}
 										position++
-										goto l769
-									l770:
-										position, tokenIndex = position770, tokenIndex770
+										goto l744
+									l745:
+										position, tokenIndex = position745, tokenIndex745
 									}
-									goto l767
-								l768:
-									position, tokenIndex = position768, tokenIndex768
+									goto l742
+								l743:
+									position, tokenIndex = position743, tokenIndex743
 								}
 							}
-						l758:
-							goto l757
+						l733:
+							goto l732
 
-							position, tokenIndex = position756, tokenIndex756
+							position, tokenIndex = position731, tokenIndex731
 						}
-					l757:
-						goto l754
-					l755:
-						position, tokenIndex = position754, tokenIndex754
+					l732:
+						goto l729
+					l730:
+						position, tokenIndex = position729, tokenIndex729
 						if !_rules[ruleARMGOTLow12]() {
-							goto l771
+							goto l746
 						}
-						goto l754
-					l771:
-						position, tokenIndex = position754, tokenIndex754
+						goto l729
+					l746:
+						position, tokenIndex = position729, tokenIndex729
 						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l772
+							goto l747
 						}
-						goto l754
-					l772:
-						position, tokenIndex = position754, tokenIndex754
+						goto l729
+					l747:
+						position, tokenIndex = position729, tokenIndex729
 						if !_rules[ruleARMRegister]() {
-							goto l750
+							goto l725
 						}
 					}
-				l754:
+				l729:
 					{
-						position773, tokenIndex773 := position, tokenIndex
+						position748, tokenIndex748 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l773
+							goto l748
 						}
 						position++
 						{
-							position775, tokenIndex775 := position, tokenIndex
+							position750, tokenIndex750 := position, tokenIndex
 							if !_rules[ruleWS]() {
-								goto l775
+								goto l750
 							}
-							goto l776
-						l775:
-							position, tokenIndex = position775, tokenIndex775
+							goto l751
+						l750:
+							position, tokenIndex = position750, tokenIndex750
 						}
-					l776:
+					l751:
 						if !_rules[ruleARMConstantTweak]() {
-							goto l773
+							goto l748
 						}
-						goto l774
-					l773:
-						position, tokenIndex = position773, tokenIndex773
+						goto l749
+					l748:
+						position, tokenIndex = position748, tokenIndex748
 					}
-				l774:
-					goto l751
-				l750:
-					position, tokenIndex = position750, tokenIndex750
+				l749:
+					goto l726
+				l725:
+					position, tokenIndex = position725, tokenIndex725
 				}
-			l751:
+			l726:
 				if buffer[position] != rune(']') {
-					goto l748
+					goto l723
 				}
 				position++
 				{
-					position777, tokenIndex777 := position, tokenIndex
+					position752, tokenIndex752 := position, tokenIndex
 					if !_rules[ruleARMPostincrement]() {
-						goto l777
+						goto l752
 					}
-					goto l778
-				l777:
-					position, tokenIndex = position777, tokenIndex777
+					goto l753
+				l752:
+					position, tokenIndex = position752, tokenIndex752
 				}
-			l778:
-				add(ruleARMBaseIndexScale, position749)
+			l753:
+				add(ruleARMBaseIndexScale, position724)
 			}
 			return true
-		l748:
-			position, tokenIndex = position748, tokenIndex748
+		l723:
+			position, tokenIndex = position723, tokenIndex723
 			return false
 		},
 		/* 47 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
 		func() bool {
-			position779, tokenIndex779 := position, tokenIndex
+			position754, tokenIndex754 := position, tokenIndex
 			{
-				position780 := position
+				position755 := position
 				if buffer[position] != rune(':') {
-					goto l779
+					goto l754
 				}
 				position++
 				{
-					position781, tokenIndex781 := position, tokenIndex
+					position756, tokenIndex756 := position, tokenIndex
 					if buffer[position] != rune('g') {
-						goto l782
+						goto l757
 					}
 					position++
-					goto l781
-				l782:
-					position, tokenIndex = position781, tokenIndex781
+					goto l756
+				l757:
+					position, tokenIndex = position756, tokenIndex756
 					if buffer[position] != rune('G') {
-						goto l779
+						goto l754
 					}
 					position++
 				}
-			l781:
+			l756:
 				{
-					position783, tokenIndex783 := position, tokenIndex
+					position758, tokenIndex758 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l784
+						goto l759
 					}
 					position++
-					goto l783
-				l784:
-					position, tokenIndex = position783, tokenIndex783
+					goto l758
+				l759:
+					position, tokenIndex = position758, tokenIndex758
 					if buffer[position] != rune('O') {
-						goto l779
+						goto l754
 					}
 					position++
 				}
-			l783:
+			l758:
 				{
-					position785, tokenIndex785 := position, tokenIndex
+					position760, tokenIndex760 := position, tokenIndex
 					if buffer[position] != rune('t') {
-						goto l786
+						goto l761
 					}
 					position++
-					goto l785
-				l786:
-					position, tokenIndex = position785, tokenIndex785
+					goto l760
+				l761:
+					position, tokenIndex = position760, tokenIndex760
 					if buffer[position] != rune('T') {
-						goto l779
+						goto l754
 					}
 					position++
 				}
-			l785:
+			l760:
 				if buffer[position] != rune('_') {
-					goto l779
+					goto l754
 				}
 				position++
 				{
-					position787, tokenIndex787 := position, tokenIndex
+					position762, tokenIndex762 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l788
+						goto l763
 					}
 					position++
-					goto l787
-				l788:
-					position, tokenIndex = position787, tokenIndex787
+					goto l762
+				l763:
+					position, tokenIndex = position762, tokenIndex762
 					if buffer[position] != rune('L') {
-						goto l779
+						goto l754
 					}
 					position++
 				}
-			l787:
+			l762:
 				{
-					position789, tokenIndex789 := position, tokenIndex
+					position764, tokenIndex764 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l790
+						goto l765
 					}
 					position++
-					goto l789
-				l790:
-					position, tokenIndex = position789, tokenIndex789
+					goto l764
+				l765:
+					position, tokenIndex = position764, tokenIndex764
 					if buffer[position] != rune('O') {
-						goto l779
+						goto l754
 					}
 					position++
 				}
-			l789:
+			l764:
 				if buffer[position] != rune('1') {
-					goto l779
+					goto l754
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l779
+					goto l754
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l779
+					goto l754
 				}
 				position++
 				if !_rules[ruleSymbolName]() {
-					goto l779
+					goto l754
 				}
-				add(ruleARMGOTLow12, position780)
+				add(ruleARMGOTLow12, position755)
 			}
 			return true
-		l779:
-			position, tokenIndex = position779, tokenIndex779
+		l754:
+			position, tokenIndex = position754, tokenIndex754
 			return false
 		},
 		/* 48 ARMPostincrement <- <'!'> */
 		func() bool {
-			position791, tokenIndex791 := position, tokenIndex
+			position766, tokenIndex766 := position, tokenIndex
 			{
-				position792 := position
+				position767 := position
 				if buffer[position] != rune('!') {
-					goto l791
+					goto l766
 				}
 				position++
-				add(ruleARMPostincrement, position792)
+				add(ruleARMPostincrement, position767)
 			}
 			return true
-		l791:
-			position, tokenIndex = position791, tokenIndex791
+		l766:
+			position, tokenIndex = position766, tokenIndex766
 			return false
 		},
 		/* 49 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
 		func() bool {
-			position793, tokenIndex793 := position, tokenIndex
+			position768, tokenIndex768 := position, tokenIndex
 			{
-				position794 := position
+				position769 := position
 				if buffer[position] != rune('(') {
-					goto l793
+					goto l768
 				}
 				position++
 				{
-					position795, tokenIndex795 := position, tokenIndex
+					position770, tokenIndex770 := position, tokenIndex
 					if !_rules[ruleRegisterOrConstant]() {
-						goto l795
+						goto l770
 					}
-					goto l796
-				l795:
-					position, tokenIndex = position795, tokenIndex795
+					goto l771
+				l770:
+					position, tokenIndex = position770, tokenIndex770
 				}
-			l796:
+			l771:
 				{
-					position797, tokenIndex797 := position, tokenIndex
+					position772, tokenIndex772 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l797
+						goto l772
 					}
-					goto l798
-				l797:
-					position, tokenIndex = position797, tokenIndex797
+					goto l773
+				l772:
+					position, tokenIndex = position772, tokenIndex772
 				}
-			l798:
+			l773:
 				{
-					position799, tokenIndex799 := position, tokenIndex
+					position774, tokenIndex774 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l799
+						goto l774
 					}
 					position++
 					{
-						position801, tokenIndex801 := position, tokenIndex
+						position776, tokenIndex776 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l801
+							goto l776
 						}
-						goto l802
-					l801:
-						position, tokenIndex = position801, tokenIndex801
+						goto l777
+					l776:
+						position, tokenIndex = position776, tokenIndex776
 					}
-				l802:
+				l777:
 					if !_rules[ruleRegisterOrConstant]() {
-						goto l799
+						goto l774
 					}
 					{
-						position803, tokenIndex803 := position, tokenIndex
+						position778, tokenIndex778 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l803
+							goto l778
 						}
-						goto l804
-					l803:
-						position, tokenIndex = position803, tokenIndex803
+						goto l779
+					l778:
+						position, tokenIndex = position778, tokenIndex778
 					}
-				l804:
+				l779:
 					{
-						position805, tokenIndex805 := position, tokenIndex
+						position780, tokenIndex780 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l805
+							goto l780
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l805
+							goto l780
 						}
 						position++
-					l807:
+					l782:
 						{
-							position808, tokenIndex808 := position, tokenIndex
+							position783, tokenIndex783 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l808
+								goto l783
 							}
 							position++
-							goto l807
-						l808:
-							position, tokenIndex = position808, tokenIndex808
+							goto l782
+						l783:
+							position, tokenIndex = position783, tokenIndex783
 						}
-						goto l806
-					l805:
-						position, tokenIndex = position805, tokenIndex805
+						goto l781
+					l780:
+						position, tokenIndex = position780, tokenIndex780
 					}
-				l806:
-					goto l800
-				l799:
-					position, tokenIndex = position799, tokenIndex799
+				l781:
+					goto l775
+				l774:
+					position, tokenIndex = position774, tokenIndex774
 				}
-			l800:
+			l775:
 				if buffer[position] != rune(')') {
-					goto l793
+					goto l768
 				}
 				position++
-				add(ruleBaseIndexScale, position794)
+				add(ruleBaseIndexScale, position769)
 			}
 			return true
-		l793:
-			position, tokenIndex = position793, tokenIndex793
+		l768:
+			position, tokenIndex = position768, tokenIndex768
 			return false
 		},
 		/* 50 Operator <- <('+' / '-')> */
 		func() bool {
-			position809, tokenIndex809 := position, tokenIndex
+			position784, tokenIndex784 := position, tokenIndex
 			{
-				position810 := position
+				position785 := position
 				{
-					position811, tokenIndex811 := position, tokenIndex
+					position786, tokenIndex786 := position, tokenIndex
 					if buffer[position] != rune('+') {
-						goto l812
+						goto l787
 					}
 					position++
-					goto l811
-				l812:
-					position, tokenIndex = position811, tokenIndex811
+					goto l786
+				l787:
+					position, tokenIndex = position786, tokenIndex786
 					if buffer[position] != rune('-') {
-						goto l809
+						goto l784
 					}
 					position++
 				}
-			l811:
-				add(ruleOperator, position810)
+			l786:
+				add(ruleOperator, position785)
 			}
 			return true
-		l809:
-			position, tokenIndex = position809, tokenIndex809
+		l784:
+			position, tokenIndex = position784, tokenIndex784
 			return false
 		},
 		/* 51 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
 		func() bool {
-			position813, tokenIndex813 := position, tokenIndex
+			position788, tokenIndex788 := position, tokenIndex
 			{
-				position814 := position
+				position789 := position
 				{
-					position815, tokenIndex815 := position, tokenIndex
+					position790, tokenIndex790 := position, tokenIndex
 					if buffer[position] != rune('+') {
-						goto l815
+						goto l790
 					}
 					position++
-					goto l816
-				l815:
-					position, tokenIndex = position815, tokenIndex815
+					goto l791
+				l790:
+					position, tokenIndex = position790, tokenIndex790
 				}
-			l816:
+			l791:
 				{
-					position817, tokenIndex817 := position, tokenIndex
+					position792, tokenIndex792 := position, tokenIndex
 					if buffer[position] != rune('-') {
-						goto l817
+						goto l792
 					}
 					position++
-					goto l818
-				l817:
-					position, tokenIndex = position817, tokenIndex817
+					goto l793
+				l792:
+					position, tokenIndex = position792, tokenIndex792
 				}
-			l818:
+			l793:
 				{
-					position819, tokenIndex819 := position, tokenIndex
+					position794, tokenIndex794 := position, tokenIndex
 					if buffer[position] != rune('0') {
-						goto l820
+						goto l795
 					}
 					position++
 					{
-						position821, tokenIndex821 := position, tokenIndex
+						position796, tokenIndex796 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l822
+							goto l797
 						}
 						position++
-						goto l821
-					l822:
-						position, tokenIndex = position821, tokenIndex821
+						goto l796
+					l797:
+						position, tokenIndex = position796, tokenIndex796
 						if buffer[position] != rune('B') {
-							goto l820
+							goto l795
 						}
 						position++
 					}
-				l821:
+				l796:
 					{
-						position825, tokenIndex825 := position, tokenIndex
+						position800, tokenIndex800 := position, tokenIndex
 						if buffer[position] != rune('0') {
-							goto l826
+							goto l801
 						}
 						position++
-						goto l825
-					l826:
-						position, tokenIndex = position825, tokenIndex825
+						goto l800
+					l801:
+						position, tokenIndex = position800, tokenIndex800
 						if buffer[position] != rune('1') {
+							goto l795
+						}
+						position++
+					}
+				l800:
+				l798:
+					{
+						position799, tokenIndex799 := position, tokenIndex
+						{
+							position802, tokenIndex802 := position, tokenIndex
+							if buffer[position] != rune('0') {
+								goto l803
+							}
+							position++
+							goto l802
+						l803:
+							position, tokenIndex = position802, tokenIndex802
+							if buffer[position] != rune('1') {
+								goto l799
+							}
+							position++
+						}
+					l802:
+						goto l798
+					l799:
+						position, tokenIndex = position799, tokenIndex799
+					}
+					goto l794
+				l795:
+					position, tokenIndex = position794, tokenIndex794
+					if buffer[position] != rune('0') {
+						goto l804
+					}
+					position++
+					{
+						position805, tokenIndex805 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l806
+						}
+						position++
+						goto l805
+					l806:
+						position, tokenIndex = position805, tokenIndex805
+						if buffer[position] != rune('X') {
+							goto l804
+						}
+						position++
+					}
+				l805:
+					{
+						position809, tokenIndex809 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l810
+						}
+						position++
+						goto l809
+					l810:
+						position, tokenIndex = position809, tokenIndex809
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l811
+						}
+						position++
+						goto l809
+					l811:
+						position, tokenIndex = position809, tokenIndex809
+						{
+							position812, tokenIndex812 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('f') {
+								goto l813
+							}
+							position++
+							goto l812
+						l813:
+							position, tokenIndex = position812, tokenIndex812
+							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l804
+							}
+							position++
+						}
+					l812:
+					}
+				l809:
+				l807:
+					{
+						position808, tokenIndex808 := position, tokenIndex
+						{
+							position814, tokenIndex814 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l815
+							}
+							position++
+							goto l814
+						l815:
+							position, tokenIndex = position814, tokenIndex814
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l816
+							}
+							position++
+							goto l814
+						l816:
+							position, tokenIndex = position814, tokenIndex814
+							{
+								position817, tokenIndex817 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('f') {
+									goto l818
+								}
+								position++
+								goto l817
+							l818:
+								position, tokenIndex = position817, tokenIndex817
+								if c := buffer[position]; c < rune('A') || c > rune('F') {
+									goto l808
+								}
+								position++
+							}
+						l817:
+						}
+					l814:
+						goto l807
+					l808:
+						position, tokenIndex = position808, tokenIndex808
+					}
+					goto l794
+				l804:
+					position, tokenIndex = position794, tokenIndex794
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l788
+					}
+					position++
+				l819:
+					{
+						position820, tokenIndex820 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l820
 						}
 						position++
-					}
-				l825:
-				l823:
-					{
-						position824, tokenIndex824 := position, tokenIndex
-						{
-							position827, tokenIndex827 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l828
-							}
-							position++
-							goto l827
-						l828:
-							position, tokenIndex = position827, tokenIndex827
-							if buffer[position] != rune('1') {
-								goto l824
-							}
-							position++
-						}
-					l827:
-						goto l823
-					l824:
-						position, tokenIndex = position824, tokenIndex824
-					}
-					goto l819
-				l820:
-					position, tokenIndex = position819, tokenIndex819
-					if buffer[position] != rune('0') {
-						goto l829
-					}
-					position++
-					{
-						position830, tokenIndex830 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l831
-						}
-						position++
-						goto l830
-					l831:
-						position, tokenIndex = position830, tokenIndex830
-						if buffer[position] != rune('X') {
-							goto l829
-						}
-						position++
-					}
-				l830:
-					{
-						position834, tokenIndex834 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l835
-						}
-						position++
-						goto l834
-					l835:
-						position, tokenIndex = position834, tokenIndex834
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l836
-						}
-						position++
-						goto l834
-					l836:
-						position, tokenIndex = position834, tokenIndex834
-						{
-							position837, tokenIndex837 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l838
-							}
-							position++
-							goto l837
-						l838:
-							position, tokenIndex = position837, tokenIndex837
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l829
-							}
-							position++
-						}
-					l837:
-					}
-				l834:
-				l832:
-					{
-						position833, tokenIndex833 := position, tokenIndex
-						{
-							position839, tokenIndex839 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l840
-							}
-							position++
-							goto l839
-						l840:
-							position, tokenIndex = position839, tokenIndex839
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l841
-							}
-							position++
-							goto l839
-						l841:
-							position, tokenIndex = position839, tokenIndex839
-							{
-								position842, tokenIndex842 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l843
-								}
-								position++
-								goto l842
-							l843:
-								position, tokenIndex = position842, tokenIndex842
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l833
-								}
-								position++
-							}
-						l842:
-						}
-					l839:
-						goto l832
-					l833:
-						position, tokenIndex = position833, tokenIndex833
-					}
-					goto l819
-				l829:
-					position, tokenIndex = position819, tokenIndex819
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l813
-					}
-					position++
-				l844:
-					{
-						position845, tokenIndex845 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l845
-						}
-						position++
-						goto l844
-					l845:
-						position, tokenIndex = position845, tokenIndex845
+						goto l819
+					l820:
+						position, tokenIndex = position820, tokenIndex820
 					}
 				}
-			l819:
-				add(ruleOffset, position814)
+			l794:
+				add(ruleOffset, position789)
 			}
 			return true
-		l813:
-			position, tokenIndex = position813, tokenIndex813
+		l788:
+			position, tokenIndex = position788, tokenIndex788
 			return false
 		},
 		/* 52 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position846, tokenIndex846 := position, tokenIndex
+			position821, tokenIndex821 := position, tokenIndex
 			{
-				position847 := position
+				position822 := position
 				{
-					position850, tokenIndex850 := position, tokenIndex
+					position825, tokenIndex825 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l851
+						goto l826
 					}
 					position++
-					goto l850
-				l851:
-					position, tokenIndex = position850, tokenIndex850
+					goto l825
+				l826:
+					position, tokenIndex = position825, tokenIndex825
 					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l852
+						goto l827
 					}
 					position++
-					goto l850
-				l852:
-					position, tokenIndex = position850, tokenIndex850
+					goto l825
+				l827:
+					position, tokenIndex = position825, tokenIndex825
 					if buffer[position] != rune('@') {
-						goto l846
+						goto l821
 					}
 					position++
 				}
-			l850:
-			l848:
+			l825:
+			l823:
 				{
-					position849, tokenIndex849 := position, tokenIndex
+					position824, tokenIndex824 := position, tokenIndex
 					{
-						position853, tokenIndex853 := position, tokenIndex
+						position828, tokenIndex828 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l854
+							goto l829
 						}
 						position++
-						goto l853
-					l854:
-						position, tokenIndex = position853, tokenIndex853
+						goto l828
+					l829:
+						position, tokenIndex = position828, tokenIndex828
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l855
+							goto l830
 						}
 						position++
-						goto l853
-					l855:
-						position, tokenIndex = position853, tokenIndex853
+						goto l828
+					l830:
+						position, tokenIndex = position828, tokenIndex828
 						if buffer[position] != rune('@') {
-							goto l849
+							goto l824
 						}
 						position++
 					}
-				l853:
-					goto l848
-				l849:
-					position, tokenIndex = position849, tokenIndex849
+				l828:
+					goto l823
+				l824:
+					position, tokenIndex = position824, tokenIndex824
 				}
-				add(ruleSection, position847)
+				add(ruleSection, position822)
 			}
 			return true
-		l846:
-			position, tokenIndex = position846, tokenIndex846
+		l821:
+			position, tokenIndex = position821, tokenIndex821
 			return false
 		},
 		/* 53 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
 		func() bool {
-			position856, tokenIndex856 := position, tokenIndex
+			position831, tokenIndex831 := position, tokenIndex
 			{
-				position857 := position
+				position832 := position
 				if buffer[position] != rune('%') {
-					goto l856
+					goto l831
 				}
 				position++
 				{
-					position858, tokenIndex858 := position, tokenIndex
+					position833, tokenIndex833 := position, tokenIndex
 					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l859
+						goto l834
 					}
 					position++
-					goto l858
-				l859:
-					position, tokenIndex = position858, tokenIndex858
+					goto l833
+				l834:
+					position, tokenIndex = position833, tokenIndex833
 					if buffer[position] != rune('s') {
-						goto l856
+						goto l831
 					}
 					position++
 				}
-			l858:
+			l833:
 				if buffer[position] != rune('s') {
-					goto l856
+					goto l831
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l856
+					goto l831
 				}
 				position++
-				add(ruleSegmentRegister, position857)
+				add(ruleSegmentRegister, position832)
 			}
 			return true
-		l856:
-			position, tokenIndex = position856, tokenIndex856
+		l831:
+			position, tokenIndex = position831, tokenIndex831
 			return false
 		},
 	}
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/in.s b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
index 3eafc83..8b45e25 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/in.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
@@ -67,6 +67,17 @@
 	add y0, y0
 	add y12, y12
 
+	// Make sure that the magic extension constants are recognised rather
+	// than being interpreted as symbols.
+	add w0, w1, b2, uxtb
+	add w0, w1, b2, uxth
+	add w0, w1, b2, uxtw
+	add w0, w1, b2, uxtx
+	add w0, w1, b2, sxtb
+	add w0, w1, b2, sxth
+	add w0, w1, b2, sxtw
+	add w0, w1, b2, sxtx
+
 
 local_function:
 
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/out.s b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
index 1dbd88a..0b9828f 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
@@ -114,6 +114,17 @@
 // WAS add y12, y12
 	add	bcm_redirector_y12, bcm_redirector_y12
 
+	// Make sure that the magic extension constants are recognised rather
+	// than being interpreted as symbols.
+	add w0, w1, b2, uxtb
+	add w0, w1, b2, uxth
+	add w0, w1, b2, uxtw
+	add w0, w1, b2, uxtx
+	add w0, w1, b2, sxtb
+	add w0, w1, b2, sxth
+	add w0, w1, b2, sxtw
+	add w0, w1, b2, sxtx
+
 
 .Llocal_function_local_target:
 local_function: