Handle notrack instructions in delocate output

GCC on newer Ubuntu seems to enable this by default now, which is
breaking our CI. I haven't yet tested if delocate's output passes CET,
but at least we shouldn't mangle the output.

Change-Id: Idf035193dba24294b4c59b991e375d74a4f3ab87
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/69148
Reviewed-by: Bob Beck <bbe@google.com>
diff --git a/util/fipstools/delocate/delocate.go b/util/fipstools/delocate/delocate.go
index 063d6ac..884344d 100644
--- a/util/fipstools/delocate/delocate.go
+++ b/util/fipstools/delocate/delocate.go
@@ -923,6 +923,12 @@
 }
 
 func (d *delocation) processIntelInstruction(statement, instruction *node32) (*node32, error) {
+	var prefix string
+	if instruction.pegRule == ruleInstructionPrefix {
+		prefix = d.contents(instruction)
+		instruction = skipWS(instruction.next)
+	}
+
 	assertNodeType(instruction, ruleInstructionName)
 	instructionName := d.contents(instruction)
 
@@ -1240,6 +1246,9 @@
 	if changed {
 		d.writeCommentedNode(statement)
 		replacement := "\t" + instructionName + "\t" + strings.Join(args, ", ") + "\n"
+		if len(prefix) != 0 {
+			replacement = "\t" + prefix + replacement
+		}
 		wrappers.do(func() {
 			d.output.WriteString(replacement)
 		})
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 3ce01ed..ff23a80 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -66,7 +66,8 @@
 LocalSymbol <- '.L' [[A-Za-z.0-9$_]]+
 LocalLabel <- [0-9][0-9$]*
 LocalLabelRef <- [0-9][0-9$]*[bf]
-Instruction <- InstructionName (WS InstructionArg ((WS? ',' WS?) InstructionArg)*)?
+InstructionPrefix <- "notrack"
+Instruction <- (InstructionPrefix WS)? InstructionName (WS InstructionArg ((WS? ',' WS?) InstructionArg)*)?
 InstructionName <- [[A-Z]][[A-Z.0-9]]* [.+\-]?
 InstructionArg <- IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*
 GOTLocation <- '$_GLOBAL_OFFSET_TABLE_-' LocalSymbol
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index 856518d..aa93136 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -1,6 +1,6 @@
 package main
 
-// Code generated by ./peg/peg delocate.peg DO NOT EDIT.
+// Code generated by peg delocate.peg DO NOT EDIT.
 
 import (
 	"fmt"
@@ -50,6 +50,7 @@
 	ruleLocalSymbol
 	ruleLocalLabel
 	ruleLocalLabelRef
+	ruleInstructionPrefix
 	ruleInstruction
 	ruleInstructionName
 	ruleInstructionArg
@@ -113,6 +114,7 @@
 	"LocalSymbol",
 	"LocalLabel",
 	"LocalLabelRef",
+	"InstructionPrefix",
 	"Instruction",
 	"InstructionName",
 	"InstructionArg",
@@ -254,7 +256,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [60]func() bool
+	rules  [61]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -3512,824 +3514,796 @@
 			position, tokenIndex = position420, tokenIndex420
 			return false
 		},
-		/* 32 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
+		/* 32 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
 		func() bool {
 			position428, tokenIndex428 := position, tokenIndex
 			{
 				position429 := position
-				if !_rules[ruleInstructionName]() {
-					goto l428
-				}
 				{
 					position430, tokenIndex430 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l430
+					if buffer[position] != rune('n') {
+						goto l431
 					}
-					if !_rules[ruleInstructionArg]() {
-						goto l430
-					}
-				l432:
-					{
-						position433, tokenIndex433 := position, tokenIndex
-						{
-							position434, tokenIndex434 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l434
-							}
-							goto l435
-						l434:
-							position, tokenIndex = position434, tokenIndex434
-						}
-					l435:
-						if buffer[position] != rune(',') {
-							goto l433
-						}
-						position++
-						{
-							position436, tokenIndex436 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l436
-							}
-							goto l437
-						l436:
-							position, tokenIndex = position436, tokenIndex436
-						}
-					l437:
-						if !_rules[ruleInstructionArg]() {
-							goto l433
-						}
-						goto l432
-					l433:
-						position, tokenIndex = position433, tokenIndex433
-					}
-					goto l431
-				l430:
+					position++
+					goto l430
+				l431:
 					position, tokenIndex = position430, tokenIndex430
+					if buffer[position] != rune('N') {
+						goto l428
+					}
+					position++
 				}
-			l431:
-				add(ruleInstruction, position429)
-			}
-			return true
-		l428:
-			position, tokenIndex = position428, tokenIndex428
-			return false
-		},
-		/* 33 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
-		func() bool {
-			position438, tokenIndex438 := position, tokenIndex
-			{
-				position439 := position
+			l430:
+				{
+					position432, tokenIndex432 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l433
+					}
+					position++
+					goto l432
+				l433:
+					position, tokenIndex = position432, tokenIndex432
+					if buffer[position] != rune('O') {
+						goto l428
+					}
+					position++
+				}
+			l432:
+				{
+					position434, tokenIndex434 := position, tokenIndex
+					if buffer[position] != rune('t') {
+						goto l435
+					}
+					position++
+					goto l434
+				l435:
+					position, tokenIndex = position434, tokenIndex434
+					if buffer[position] != rune('T') {
+						goto l428
+					}
+					position++
+				}
+			l434:
+				{
+					position436, tokenIndex436 := position, tokenIndex
+					if buffer[position] != rune('r') {
+						goto l437
+					}
+					position++
+					goto l436
+				l437:
+					position, tokenIndex = position436, tokenIndex436
+					if buffer[position] != rune('R') {
+						goto l428
+					}
+					position++
+				}
+			l436:
+				{
+					position438, tokenIndex438 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l439
+					}
+					position++
+					goto l438
+				l439:
+					position, tokenIndex = position438, tokenIndex438
+					if buffer[position] != rune('A') {
+						goto l428
+					}
+					position++
+				}
+			l438:
 				{
 					position440, tokenIndex440 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
+					if buffer[position] != rune('c') {
 						goto l441
 					}
 					position++
 					goto l440
 				l441:
 					position, tokenIndex = position440, tokenIndex440
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l438
+					if buffer[position] != rune('C') {
+						goto l428
 					}
 					position++
 				}
 			l440:
-			l442:
 				{
-					position443, tokenIndex443 := position, tokenIndex
-					{
-						position444, tokenIndex444 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l445
-						}
-						position++
-						goto l444
-					l445:
-						position, tokenIndex = position444, tokenIndex444
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l446
-						}
-						position++
-						goto l444
-					l446:
-						position, tokenIndex = position444, tokenIndex444
-						if buffer[position] != rune('.') {
-							goto l447
-						}
-						position++
-						goto l444
-					l447:
-						position, tokenIndex = position444, tokenIndex444
-						{
-							position448, tokenIndex448 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l449
-							}
-							position++
-							goto l448
-						l449:
-							position, tokenIndex = position448, tokenIndex448
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l443
-							}
-							position++
-						}
-					l448:
+					position442, tokenIndex442 := position, tokenIndex
+					if buffer[position] != rune('k') {
+						goto l443
 					}
-				l444:
+					position++
 					goto l442
 				l443:
-					position, tokenIndex = position443, tokenIndex443
-				}
-				{
-					position450, tokenIndex450 := position, tokenIndex
-					{
-						position452, tokenIndex452 := position, tokenIndex
-						if buffer[position] != rune('.') {
-							goto l453
-						}
-						position++
-						goto l452
-					l453:
-						position, tokenIndex = position452, tokenIndex452
-						if buffer[position] != rune('+') {
-							goto l454
-						}
-						position++
-						goto l452
-					l454:
-						position, tokenIndex = position452, tokenIndex452
-						if buffer[position] != rune('-') {
-							goto l450
-						}
-						position++
+					position, tokenIndex = position442, tokenIndex442
+					if buffer[position] != rune('K') {
+						goto l428
 					}
-				l452:
-					goto l451
-				l450:
-					position, tokenIndex = position450, tokenIndex450
+					position++
 				}
-			l451:
-				add(ruleInstructionName, position439)
+			l442:
+				add(ruleInstructionPrefix, position429)
 			}
 			return true
-		l438:
-			position, tokenIndex = position438, tokenIndex438
+		l428:
+			position, tokenIndex = position428, tokenIndex428
 			return false
 		},
-		/* 34 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
+		/* 33 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
 		func() bool {
-			position455, tokenIndex455 := position, tokenIndex
+			position444, tokenIndex444 := position, tokenIndex
 			{
-				position456 := position
+				position445 := position
 				{
-					position457, tokenIndex457 := position, tokenIndex
-					if !_rules[ruleIndirectionIndicator]() {
-						goto l457
+					position446, tokenIndex446 := position, tokenIndex
+					if !_rules[ruleInstructionPrefix]() {
+						goto l446
 					}
+					if !_rules[ruleWS]() {
+						goto l446
+					}
+					goto l447
+				l446:
+					position, tokenIndex = position446, tokenIndex446
+				}
+			l447:
+				if !_rules[ruleInstructionName]() {
+					goto l444
+				}
+				{
+					position448, tokenIndex448 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l448
+					}
+					if !_rules[ruleInstructionArg]() {
+						goto l448
+					}
+				l450:
+					{
+						position451, tokenIndex451 := position, tokenIndex
+						{
+							position452, tokenIndex452 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l452
+							}
+							goto l453
+						l452:
+							position, tokenIndex = position452, tokenIndex452
+						}
+					l453:
+						if buffer[position] != rune(',') {
+							goto l451
+						}
+						position++
+						{
+							position454, tokenIndex454 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l454
+							}
+							goto l455
+						l454:
+							position, tokenIndex = position454, tokenIndex454
+						}
+					l455:
+						if !_rules[ruleInstructionArg]() {
+							goto l451
+						}
+						goto l450
+					l451:
+						position, tokenIndex = position451, tokenIndex451
+					}
+					goto l449
+				l448:
+					position, tokenIndex = position448, tokenIndex448
+				}
+			l449:
+				add(ruleInstruction, position445)
+			}
+			return true
+		l444:
+			position, tokenIndex = position444, tokenIndex444
+			return false
+		},
+		/* 34 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
+		func() bool {
+			position456, tokenIndex456 := position, tokenIndex
+			{
+				position457 := position
+				{
+					position458, tokenIndex458 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l459
+					}
+					position++
 					goto l458
-				l457:
-					position, tokenIndex = position457, tokenIndex457
+				l459:
+					position, tokenIndex = position458, tokenIndex458
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l456
+					}
+					position++
 				}
 			l458:
+			l460:
 				{
-					position459, tokenIndex459 := position, tokenIndex
-					if !_rules[ruleARMConstantTweak]() {
-						goto l460
-					}
-					goto l459
-				l460:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l461
-					}
-					goto l459
-				l461:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleLocalLabelRef]() {
+					position461, tokenIndex461 := position, tokenIndex
+					{
+						position462, tokenIndex462 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l463
+						}
+						position++
 						goto l462
+					l463:
+						position, tokenIndex = position462, tokenIndex462
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l464
+						}
+						position++
+						goto l462
+					l464:
+						position, tokenIndex = position462, tokenIndex462
+						if buffer[position] != rune('.') {
+							goto l465
+						}
+						position++
+						goto l462
+					l465:
+						position, tokenIndex = position462, tokenIndex462
+						{
+							position466, tokenIndex466 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l467
+							}
+							position++
+							goto l466
+						l467:
+							position, tokenIndex = position466, tokenIndex466
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l461
+							}
+							position++
+						}
+					l466:
 					}
-					goto l459
 				l462:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleTOCRefHigh]() {
-						goto l463
-					}
-					goto l459
-				l463:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleTOCRefLow]() {
-						goto l464
-					}
-					goto l459
-				l464:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleGOTLocation]() {
-						goto l465
-					}
-					goto l459
-				l465:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleGOTAddress]() {
-						goto l466
-					}
-					goto l459
-				l466:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleGOTSymbolOffset]() {
-						goto l467
-					}
-					goto l459
-				l467:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleMemoryRef]() {
-						goto l455
-					}
+					goto l460
+				l461:
+					position, tokenIndex = position461, tokenIndex461
 				}
-			l459:
-			l468:
 				{
-					position469, tokenIndex469 := position, tokenIndex
-					if !_rules[ruleAVX512Token]() {
-						goto l469
+					position468, tokenIndex468 := position, tokenIndex
+					{
+						position470, tokenIndex470 := position, tokenIndex
+						if buffer[position] != rune('.') {
+							goto l471
+						}
+						position++
+						goto l470
+					l471:
+						position, tokenIndex = position470, tokenIndex470
+						if buffer[position] != rune('+') {
+							goto l472
+						}
+						position++
+						goto l470
+					l472:
+						position, tokenIndex = position470, tokenIndex470
+						if buffer[position] != rune('-') {
+							goto l468
+						}
+						position++
 					}
-					goto l468
-				l469:
-					position, tokenIndex = position469, tokenIndex469
+				l470:
+					goto l469
+				l468:
+					position, tokenIndex = position468, tokenIndex468
 				}
-				add(ruleInstructionArg, position456)
+			l469:
+				add(ruleInstructionName, position457)
 			}
 			return true
-		l455:
-			position, tokenIndex = position455, tokenIndex455
+		l456:
+			position, tokenIndex = position456, tokenIndex456
 			return false
 		},
-		/* 35 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
+		/* 35 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
 		func() bool {
-			position470, tokenIndex470 := position, tokenIndex
+			position473, tokenIndex473 := position, tokenIndex
 			{
-				position471 := position
+				position474 := position
+				{
+					position475, tokenIndex475 := position, tokenIndex
+					if !_rules[ruleIndirectionIndicator]() {
+						goto l475
+					}
+					goto l476
+				l475:
+					position, tokenIndex = position475, tokenIndex475
+				}
+			l476:
+				{
+					position477, tokenIndex477 := position, tokenIndex
+					if !_rules[ruleARMConstantTweak]() {
+						goto l478
+					}
+					goto l477
+				l478:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l479
+					}
+					goto l477
+				l479:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleLocalLabelRef]() {
+						goto l480
+					}
+					goto l477
+				l480:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleTOCRefHigh]() {
+						goto l481
+					}
+					goto l477
+				l481:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleTOCRefLow]() {
+						goto l482
+					}
+					goto l477
+				l482:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleGOTLocation]() {
+						goto l483
+					}
+					goto l477
+				l483:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleGOTAddress]() {
+						goto l484
+					}
+					goto l477
+				l484:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleGOTSymbolOffset]() {
+						goto l485
+					}
+					goto l477
+				l485:
+					position, tokenIndex = position477, tokenIndex477
+					if !_rules[ruleMemoryRef]() {
+						goto l473
+					}
+				}
+			l477:
+			l486:
+				{
+					position487, tokenIndex487 := position, tokenIndex
+					if !_rules[ruleAVX512Token]() {
+						goto l487
+					}
+					goto l486
+				l487:
+					position, tokenIndex = position487, tokenIndex487
+				}
+				add(ruleInstructionArg, position474)
+			}
+			return true
+		l473:
+			position, tokenIndex = position473, tokenIndex473
+			return false
+		},
+		/* 36 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
+		func() bool {
+			position488, tokenIndex488 := position, tokenIndex
+			{
+				position489 := position
 				if buffer[position] != rune('$') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('G') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('B') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('A') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('F') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('F') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('S') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('E') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('A') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('B') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('E') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l470
+					goto l488
 				}
 				position++
 				if buffer[position] != rune('-') {
-					goto l470
+					goto l488
 				}
 				position++
 				if !_rules[ruleLocalSymbol]() {
-					goto l470
+					goto l488
 				}
-				add(ruleGOTLocation, position471)
+				add(ruleGOTLocation, position489)
 			}
 			return true
-		l470:
-			position, tokenIndex = position470, tokenIndex470
+		l488:
+			position, tokenIndex = position488, tokenIndex488
 			return false
 		},
-		/* 36 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
+		/* 37 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
 		func() bool {
-			position472, tokenIndex472 := position, tokenIndex
+			position490, tokenIndex490 := position, tokenIndex
 			{
-				position473 := position
+				position491 := position
 				if buffer[position] != rune('_') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('G') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('B') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('A') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('F') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('F') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('S') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('E') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('A') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('B') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('E') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('(') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('%') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('r') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('i') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune('p') {
-					goto l472
+					goto l490
 				}
 				position++
 				if buffer[position] != rune(')') {
-					goto l472
+					goto l490
 				}
 				position++
-				add(ruleGOTAddress, position473)
+				add(ruleGOTAddress, position491)
 			}
 			return true
-		l472:
-			position, tokenIndex = position472, tokenIndex472
+		l490:
+			position, tokenIndex = position490, tokenIndex490
 			return false
 		},
-		/* 37 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
+		/* 38 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
 		func() bool {
-			position474, tokenIndex474 := position, tokenIndex
+			position492, tokenIndex492 := position, tokenIndex
 			{
-				position475 := position
+				position493 := position
 				{
-					position476, tokenIndex476 := position, tokenIndex
+					position494, tokenIndex494 := position, tokenIndex
 					if buffer[position] != rune('$') {
-						goto l477
+						goto l495
 					}
 					position++
 					if !_rules[ruleSymbolName]() {
-						goto l477
+						goto l495
 					}
 					if buffer[position] != rune('@') {
-						goto l477
+						goto l495
 					}
 					position++
 					if buffer[position] != rune('G') {
-						goto l477
+						goto l495
 					}
 					position++
 					if buffer[position] != rune('O') {
-						goto l477
+						goto l495
 					}
 					position++
 					if buffer[position] != rune('T') {
-						goto l477
+						goto l495
 					}
 					position++
 					{
-						position478, tokenIndex478 := position, tokenIndex
+						position496, tokenIndex496 := position, tokenIndex
 						if buffer[position] != rune('O') {
-							goto l478
+							goto l496
 						}
 						position++
 						if buffer[position] != rune('F') {
-							goto l478
+							goto l496
 						}
 						position++
 						if buffer[position] != rune('F') {
-							goto l478
+							goto l496
 						}
 						position++
-						goto l479
-					l478:
-						position, tokenIndex = position478, tokenIndex478
+						goto l497
+					l496:
+						position, tokenIndex = position496, tokenIndex496
 					}
-				l479:
-					goto l476
-				l477:
-					position, tokenIndex = position476, tokenIndex476
+				l497:
+					goto l494
+				l495:
+					position, tokenIndex = position494, tokenIndex494
 					if buffer[position] != rune(':') {
-						goto l474
+						goto l492
 					}
 					position++
 					{
-						position480, tokenIndex480 := position, tokenIndex
+						position498, tokenIndex498 := position, tokenIndex
 						if buffer[position] != rune('g') {
-							goto l481
+							goto l499
 						}
 						position++
-						goto l480
-					l481:
-						position, tokenIndex = position480, tokenIndex480
+						goto l498
+					l499:
+						position, tokenIndex = position498, tokenIndex498
 						if buffer[position] != rune('G') {
-							goto l474
+							goto l492
 						}
 						position++
 					}
-				l480:
+				l498:
 					{
-						position482, tokenIndex482 := position, tokenIndex
+						position500, tokenIndex500 := position, tokenIndex
 						if buffer[position] != rune('o') {
-							goto l483
+							goto l501
 						}
 						position++
-						goto l482
-					l483:
-						position, tokenIndex = position482, tokenIndex482
+						goto l500
+					l501:
+						position, tokenIndex = position500, tokenIndex500
 						if buffer[position] != rune('O') {
-							goto l474
+							goto l492
 						}
 						position++
 					}
-				l482:
-					{
-						position484, tokenIndex484 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l485
-						}
-						position++
-						goto l484
-					l485:
-						position, tokenIndex = position484, tokenIndex484
-						if buffer[position] != rune('T') {
-							goto l474
-						}
-						position++
-					}
-				l484:
-					if buffer[position] != rune(':') {
-						goto l474
-					}
-					position++
-					if !_rules[ruleSymbolName]() {
-						goto l474
-					}
-				}
-			l476:
-				add(ruleGOTSymbolOffset, position475)
-			}
-			return true
-		l474:
-			position, tokenIndex = position474, tokenIndex474
-			return false
-		},
-		/* 38 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
-		func() bool {
-			position486, tokenIndex486 := position, tokenIndex
-			{
-				position487 := position
-				{
-					position488, tokenIndex488 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l488
-					}
-					goto l489
-				l488:
-					position, tokenIndex = position488, tokenIndex488
-				}
-			l489:
-				if buffer[position] != rune('{') {
-					goto l486
-				}
-				position++
-				{
-					position490, tokenIndex490 := position, tokenIndex
-					if buffer[position] != rune('%') {
-						goto l490
-					}
-					position++
-					goto l491
-				l490:
-					position, tokenIndex = position490, tokenIndex490
-				}
-			l491:
-			l492:
-				{
-					position493, tokenIndex493 := position, tokenIndex
-					{
-						position494, tokenIndex494 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l495
-						}
-						position++
-						goto l494
-					l495:
-						position, tokenIndex = position494, tokenIndex494
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l493
-						}
-						position++
-					}
-				l494:
-					goto l492
-				l493:
-					position, tokenIndex = position493, tokenIndex493
-				}
-				if buffer[position] != rune('}') {
-					goto l486
-				}
-				position++
-				add(ruleAVX512Token, position487)
-			}
-			return true
-		l486:
-			position, tokenIndex = position486, tokenIndex486
-			return false
-		},
-		/* 39 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
-		func() bool {
-			position496, tokenIndex496 := position, tokenIndex
-			{
-				position497 := position
-				if buffer[position] != rune('.') {
-					goto l496
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l496
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l496
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l496
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l496
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l496
-				}
-				position++
-				{
-					position498, tokenIndex498 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l499
-					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l499
-					}
-					position++
-					goto l498
-				l499:
-					position, tokenIndex = position498, tokenIndex498
-					if buffer[position] != rune('.') {
-						goto l496
-					}
-					position++
-					if buffer[position] != rune('L') {
-						goto l496
-					}
-					position++
+				l500:
 					{
 						position502, tokenIndex502 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
+						if buffer[position] != rune('t') {
 							goto l503
 						}
 						position++
 						goto l502
 					l503:
 						position, tokenIndex = position502, tokenIndex502
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l504
-						}
-						position++
-						goto l502
-					l504:
-						position, tokenIndex = position502, tokenIndex502
-						if buffer[position] != rune('_') {
-							goto l505
-						}
-						position++
-						goto l502
-					l505:
-						position, tokenIndex = position502, tokenIndex502
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l496
+						if buffer[position] != rune('T') {
+							goto l492
 						}
 						position++
 					}
 				l502:
-				l500:
-					{
-						position501, tokenIndex501 := position, tokenIndex
-						{
-							position506, tokenIndex506 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l507
-							}
-							position++
-							goto l506
-						l507:
-							position, tokenIndex = position506, tokenIndex506
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l508
-							}
-							position++
-							goto l506
-						l508:
-							position, tokenIndex = position506, tokenIndex506
-							if buffer[position] != rune('_') {
-								goto l509
-							}
-							position++
-							goto l506
-						l509:
-							position, tokenIndex = position506, tokenIndex506
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l501
-							}
-							position++
-						}
-					l506:
-						goto l500
-					l501:
-						position, tokenIndex = position501, tokenIndex501
+					if buffer[position] != rune(':') {
+						goto l492
+					}
+					position++
+					if !_rules[ruleSymbolName]() {
+						goto l492
 					}
 				}
-			l498:
-				if buffer[position] != rune('@') {
-					goto l496
+			l494:
+				add(ruleGOTSymbolOffset, position493)
+			}
+			return true
+		l492:
+			position, tokenIndex = position492, tokenIndex492
+			return false
+		},
+		/* 39 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
+		func() bool {
+			position504, tokenIndex504 := position, tokenIndex
+			{
+				position505 := position
+				{
+					position506, tokenIndex506 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l506
+					}
+					goto l507
+				l506:
+					position, tokenIndex = position506, tokenIndex506
+				}
+			l507:
+				if buffer[position] != rune('{') {
+					goto l504
 				}
 				position++
 				{
-					position510, tokenIndex510 := position, tokenIndex
-					if buffer[position] != rune('h') {
-						goto l511
+					position508, tokenIndex508 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l508
 					}
 					position++
-					goto l510
-				l511:
-					position, tokenIndex = position510, tokenIndex510
-					if buffer[position] != rune('H') {
-						goto l496
-					}
-					position++
+					goto l509
+				l508:
+					position, tokenIndex = position508, tokenIndex508
 				}
+			l509:
 			l510:
 				{
-					position512, tokenIndex512 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l513
+					position511, tokenIndex511 := position, tokenIndex
+					{
+						position512, tokenIndex512 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l513
+						}
+						position++
+						goto l512
+					l513:
+						position, tokenIndex = position512, tokenIndex512
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l511
+						}
+						position++
 					}
-					position++
-					goto l512
-				l513:
-					position, tokenIndex = position512, tokenIndex512
-					if buffer[position] != rune('A') {
-						goto l496
-					}
-					position++
+				l512:
+					goto l510
+				l511:
+					position, tokenIndex = position511, tokenIndex511
 				}
-			l512:
-				add(ruleTOCRefHigh, position497)
+				if buffer[position] != rune('}') {
+					goto l504
+				}
+				position++
+				add(ruleAVX512Token, position505)
 			}
 			return true
-		l496:
-			position, tokenIndex = position496, tokenIndex496
+		l504:
+			position, tokenIndex = position504, tokenIndex504
 			return false
 		},
-		/* 40 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		/* 40 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
 		func() bool {
 			position514, tokenIndex514 := position, tokenIndex
 			{
@@ -4452,470 +4426,503 @@
 				position++
 				{
 					position528, tokenIndex528 := position, tokenIndex
-					if buffer[position] != rune('l') {
+					if buffer[position] != rune('h') {
 						goto l529
 					}
 					position++
 					goto l528
 				l529:
 					position, tokenIndex = position528, tokenIndex528
-					if buffer[position] != rune('L') {
+					if buffer[position] != rune('H') {
 						goto l514
 					}
 					position++
 				}
 			l528:
-				add(ruleTOCRefLow, position515)
+				{
+					position530, tokenIndex530 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l531
+					}
+					position++
+					goto l530
+				l531:
+					position, tokenIndex = position530, tokenIndex530
+					if buffer[position] != rune('A') {
+						goto l514
+					}
+					position++
+				}
+			l530:
+				add(ruleTOCRefHigh, position515)
 			}
 			return true
 		l514:
 			position, tokenIndex = position514, tokenIndex514
 			return false
 		},
-		/* 41 IndirectionIndicator <- <'*'> */
-		func() bool {
-			position530, tokenIndex530 := position, tokenIndex
-			{
-				position531 := position
-				if buffer[position] != rune('*') {
-					goto l530
-				}
-				position++
-				add(ruleIndirectionIndicator, position531)
-			}
-			return true
-		l530:
-			position, tokenIndex = position530, tokenIndex530
-			return false
-		},
-		/* 42 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' / ':' / '(' / '+' / '-'))> */
+		/* 41 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
 		func() bool {
 			position532, tokenIndex532 := position, tokenIndex
 			{
 				position533 := position
+				if buffer[position] != rune('.') {
+					goto l532
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l532
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l532
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l532
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l532
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l532
+				}
+				position++
 				{
 					position534, tokenIndex534 := position, tokenIndex
-					if buffer[position] != rune('%') {
+					if buffer[position] != rune('0') {
 						goto l535
 					}
 					position++
-					{
-						position536, tokenIndex536 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l537
-						}
-						position++
-						goto l536
-					l537:
-						position, tokenIndex = position536, tokenIndex536
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l535
-						}
-						position++
+					if buffer[position] != rune('b') {
+						goto l535
 					}
-				l536:
-				l538:
-					{
-						position539, tokenIndex539 := position, tokenIndex
-						{
-							position540, tokenIndex540 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l541
-							}
-							position++
-							goto l540
-						l541:
-							position, tokenIndex = position540, tokenIndex540
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l542
-							}
-							position++
-							goto l540
-						l542:
-							position, tokenIndex = position540, tokenIndex540
-							{
-								position543, tokenIndex543 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l544
-								}
-								position++
-								goto l543
-							l544:
-								position, tokenIndex = position543, tokenIndex543
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l539
-								}
-								position++
-							}
-						l543:
-						}
-					l540:
-						goto l538
-					l539:
-						position, tokenIndex = position539, tokenIndex539
-					}
+					position++
 					goto l534
 				l535:
 					position, tokenIndex = position534, tokenIndex534
-					{
-						position546, tokenIndex546 := position, tokenIndex
-						if buffer[position] != rune('$') {
-							goto l546
-						}
-						position++
-						goto l547
-					l546:
-						position, tokenIndex = position546, tokenIndex546
-					}
-				l547:
-					{
-						position548, tokenIndex548 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l549
-						}
-						if !_rules[ruleOffset]() {
-							goto l549
-						}
-						goto l548
-					l549:
-						position, tokenIndex = position548, tokenIndex548
-						if !_rules[ruleOffset]() {
-							goto l545
-						}
-					}
-				l548:
-					goto l534
-				l545:
-					position, tokenIndex = position534, tokenIndex534
-					if buffer[position] != rune('#') {
-						goto l550
-					}
-					position++
-					if !_rules[ruleOffset]() {
-						goto l550
-					}
-					{
-						position551, tokenIndex551 := position, tokenIndex
-						if buffer[position] != rune('*') {
-							goto l551
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l551
-						}
-						position++
-					l553:
-						{
-							position554, tokenIndex554 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l554
-							}
-							position++
-							goto l553
-						l554:
-							position, tokenIndex = position554, tokenIndex554
-						}
-						{
-							position555, tokenIndex555 := position, tokenIndex
-							if buffer[position] != rune('-') {
-								goto l555
-							}
-							position++
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l555
-							}
-							position++
-						l557:
-							{
-								position558, tokenIndex558 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l558
-								}
-								position++
-								goto l557
-							l558:
-								position, tokenIndex = position558, tokenIndex558
-							}
-							goto l556
-						l555:
-							position, tokenIndex = position555, tokenIndex555
-						}
-					l556:
-						goto l552
-					l551:
-						position, tokenIndex = position551, tokenIndex551
-					}
-				l552:
-					goto l534
-				l550:
-					position, tokenIndex = position534, tokenIndex534
-					if buffer[position] != rune('#') {
-						goto l559
-					}
-					position++
-					{
-						position560, tokenIndex560 := position, tokenIndex
-						if buffer[position] != rune('~') {
-							goto l560
-						}
-						position++
-						goto l561
-					l560:
-						position, tokenIndex = position560, tokenIndex560
-					}
-				l561:
-					if buffer[position] != rune('(') {
-						goto l559
-					}
-					position++
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l559
-					}
-					position++
-					{
-						position562, tokenIndex562 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l562
-						}
-						goto l563
-					l562:
-						position, tokenIndex = position562, tokenIndex562
-					}
-				l563:
-					if buffer[position] != rune('<') {
-						goto l559
-					}
-					position++
-					if buffer[position] != rune('<') {
-						goto l559
-					}
-					position++
-					{
-						position564, tokenIndex564 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l564
-						}
-						goto l565
-					l564:
-						position, tokenIndex = position564, tokenIndex564
-					}
-				l565:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l559
-					}
-					position++
-					if buffer[position] != rune(')') {
-						goto l559
-					}
-					position++
-					goto l534
-				l559:
-					position, tokenIndex = position534, tokenIndex534
-					if !_rules[ruleARMRegister]() {
+					if buffer[position] != rune('.') {
 						goto l532
 					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l532
+					}
+					position++
+					{
+						position538, tokenIndex538 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l539
+						}
+						position++
+						goto l538
+					l539:
+						position, tokenIndex = position538, tokenIndex538
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l540
+						}
+						position++
+						goto l538
+					l540:
+						position, tokenIndex = position538, tokenIndex538
+						if buffer[position] != rune('_') {
+							goto l541
+						}
+						position++
+						goto l538
+					l541:
+						position, tokenIndex = position538, tokenIndex538
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l532
+						}
+						position++
+					}
+				l538:
+				l536:
+					{
+						position537, tokenIndex537 := position, tokenIndex
+						{
+							position542, tokenIndex542 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l543
+							}
+							position++
+							goto l542
+						l543:
+							position, tokenIndex = position542, tokenIndex542
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l544
+							}
+							position++
+							goto l542
+						l544:
+							position, tokenIndex = position542, tokenIndex542
+							if buffer[position] != rune('_') {
+								goto l545
+							}
+							position++
+							goto l542
+						l545:
+							position, tokenIndex = position542, tokenIndex542
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l537
+							}
+							position++
+						}
+					l542:
+						goto l536
+					l537:
+						position, tokenIndex = position537, tokenIndex537
+					}
 				}
 			l534:
-				{
-					position566, tokenIndex566 := position, tokenIndex
-					{
-						position567, tokenIndex567 := position, tokenIndex
-						if buffer[position] != rune('f') {
-							goto l568
-						}
-						position++
-						goto l567
-					l568:
-						position, tokenIndex = position567, tokenIndex567
-						if buffer[position] != rune('b') {
-							goto l569
-						}
-						position++
-						goto l567
-					l569:
-						position, tokenIndex = position567, tokenIndex567
-						if buffer[position] != rune(':') {
-							goto l570
-						}
-						position++
-						goto l567
-					l570:
-						position, tokenIndex = position567, tokenIndex567
-						if buffer[position] != rune('(') {
-							goto l571
-						}
-						position++
-						goto l567
-					l571:
-						position, tokenIndex = position567, tokenIndex567
-						if buffer[position] != rune('+') {
-							goto l572
-						}
-						position++
-						goto l567
-					l572:
-						position, tokenIndex = position567, tokenIndex567
-						if buffer[position] != rune('-') {
-							goto l566
-						}
-						position++
-					}
-				l567:
+				if buffer[position] != rune('@') {
 					goto l532
-				l566:
-					position, tokenIndex = position566, tokenIndex566
 				}
-				add(ruleRegisterOrConstant, position533)
+				position++
+				{
+					position546, tokenIndex546 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l547
+					}
+					position++
+					goto l546
+				l547:
+					position, tokenIndex = position546, tokenIndex546
+					if buffer[position] != rune('L') {
+						goto l532
+					}
+					position++
+				}
+			l546:
+				add(ruleTOCRefLow, position533)
 			}
 			return true
 		l532:
 			position, tokenIndex = position532, tokenIndex532
 			return false
 		},
-		/* 43 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9]))> */
+		/* 42 IndirectionIndicator <- <'*'> */
 		func() bool {
-			position573, tokenIndex573 := position, tokenIndex
+			position548, tokenIndex548 := position, tokenIndex
 			{
-				position574 := position
+				position549 := position
+				if buffer[position] != rune('*') {
+					goto l548
+				}
+				position++
+				add(ruleIndirectionIndicator, position549)
+			}
+			return true
+		l548:
+			position, tokenIndex = position548, tokenIndex548
+			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' / ':' / '(' / '+' / '-'))> */
+		func() bool {
+			position550, tokenIndex550 := position, tokenIndex
+			{
+				position551 := position
 				{
-					position575, tokenIndex575 := position, tokenIndex
+					position552, tokenIndex552 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l553
+					}
+					position++
 					{
-						position577, tokenIndex577 := position, tokenIndex
-						{
-							position579, tokenIndex579 := position, tokenIndex
-							if buffer[position] != rune('u') {
-								goto l580
-							}
-							position++
-							goto l579
-						l580:
-							position, tokenIndex = position579, tokenIndex579
-							if buffer[position] != rune('s') {
-								goto l578
-							}
-							position++
+						position554, tokenIndex554 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l555
 						}
-					l579:
-						{
-							position581, tokenIndex581 := position, tokenIndex
-							if buffer[position] != rune('x') {
-								goto l582
-							}
-							position++
-							goto l581
-						l582:
-							position, tokenIndex = position581, tokenIndex581
-							if buffer[position] != rune('X') {
-								goto l578
-							}
-							position++
+						position++
+						goto l554
+					l555:
+						position, tokenIndex = position554, tokenIndex554
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l553
 						}
-					l581:
+						position++
+					}
+				l554:
+				l556:
+					{
+						position557, tokenIndex557 := position, tokenIndex
 						{
-							position583, tokenIndex583 := position, tokenIndex
-							if buffer[position] != rune('t') {
-								goto l584
+							position558, tokenIndex558 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l559
 							}
 							position++
-							goto l583
-						l584:
-							position, tokenIndex = position583, tokenIndex583
-							if buffer[position] != rune('T') {
-								goto l578
+							goto l558
+						l559:
+							position, tokenIndex = position558, tokenIndex558
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l560
 							}
 							position++
+							goto l558
+						l560:
+							position, tokenIndex = position558, tokenIndex558
+							{
+								position561, tokenIndex561 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l562
+								}
+								position++
+								goto l561
+							l562:
+								position, tokenIndex = position561, tokenIndex561
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l557
+								}
+								position++
+							}
+						l561:
 						}
-					l583:
+					l558:
+						goto l556
+					l557:
+						position, tokenIndex = position557, tokenIndex557
+					}
+					goto l552
+				l553:
+					position, tokenIndex = position552, tokenIndex552
+					{
+						position564, tokenIndex564 := position, tokenIndex
+						if buffer[position] != rune('$') {
+							goto l564
+						}
+						position++
+						goto l565
+					l564:
+						position, tokenIndex = position564, tokenIndex564
+					}
+				l565:
+					{
+						position566, tokenIndex566 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l567
+						}
+						if !_rules[ruleOffset]() {
+							goto l567
+						}
+						goto l566
+					l567:
+						position, tokenIndex = position566, tokenIndex566
+						if !_rules[ruleOffset]() {
+							goto l563
+						}
+					}
+				l566:
+					goto l552
+				l563:
+					position, tokenIndex = position552, tokenIndex552
+					if buffer[position] != rune('#') {
+						goto l568
+					}
+					position++
+					if !_rules[ruleOffset]() {
+						goto l568
+					}
+					{
+						position569, tokenIndex569 := position, tokenIndex
+						if buffer[position] != rune('*') {
+							goto l569
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l569
+						}
+						position++
+					l571:
 						{
-							position585, tokenIndex585 := position, tokenIndex
-							if buffer[position] != rune('x') {
-								goto l586
+							position572, tokenIndex572 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l572
 							}
 							position++
-							goto l585
-						l586:
-							position, tokenIndex = position585, tokenIndex585
-							if buffer[position] != rune('w') {
-								goto l587
-							}
-							position++
-							goto l585
-						l587:
-							position, tokenIndex = position585, tokenIndex585
-							if buffer[position] != rune('h') {
-								goto l588
-							}
-							position++
-							goto l585
-						l588:
-							position, tokenIndex = position585, tokenIndex585
-							if buffer[position] != rune('b') {
-								goto l578
-							}
-							position++
+							goto l571
+						l572:
+							position, tokenIndex = position572, tokenIndex572
 						}
-					l585:
+						{
+							position573, tokenIndex573 := position, tokenIndex
+							if buffer[position] != rune('-') {
+								goto l573
+							}
+							position++
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l573
+							}
+							position++
+						l575:
+							{
+								position576, tokenIndex576 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l576
+								}
+								position++
+								goto l575
+							l576:
+								position, tokenIndex = position576, tokenIndex576
+							}
+							goto l574
+						l573:
+							position, tokenIndex = position573, tokenIndex573
+						}
+					l574:
+						goto l570
+					l569:
+						position, tokenIndex = position569, tokenIndex569
+					}
+				l570:
+					goto l552
+				l568:
+					position, tokenIndex = position552, tokenIndex552
+					if buffer[position] != rune('#') {
 						goto l577
+					}
+					position++
+					{
+						position578, tokenIndex578 := position, tokenIndex
+						if buffer[position] != rune('~') {
+							goto l578
+						}
+						position++
+						goto l579
 					l578:
-						position, tokenIndex = position577, tokenIndex577
-						{
-							position590, tokenIndex590 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l591
-							}
-							position++
-							goto l590
-						l591:
-							position, tokenIndex = position590, tokenIndex590
-							if buffer[position] != rune('L') {
-								goto l589
-							}
-							position++
-						}
-					l590:
-						{
-							position592, tokenIndex592 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l593
-							}
-							position++
-							goto l592
-						l593:
-							position, tokenIndex = position592, tokenIndex592
-							if buffer[position] != rune('S') {
-								goto l589
-							}
-							position++
-						}
-					l592:
-						{
-							position594, tokenIndex594 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l595
-							}
-							position++
-							goto l594
-						l595:
-							position, tokenIndex = position594, tokenIndex594
-							if buffer[position] != rune('L') {
-								goto l589
-							}
-							position++
-						}
-					l594:
+						position, tokenIndex = position578, tokenIndex578
+					}
+				l579:
+					if buffer[position] != rune('(') {
 						goto l577
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l577
+					}
+					position++
+					{
+						position580, tokenIndex580 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l580
+						}
+						goto l581
+					l580:
+						position, tokenIndex = position580, tokenIndex580
+					}
+				l581:
+					if buffer[position] != rune('<') {
+						goto l577
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l577
+					}
+					position++
+					{
+						position582, tokenIndex582 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l582
+						}
+						goto l583
+					l582:
+						position, tokenIndex = position582, tokenIndex582
+					}
+				l583:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l577
+					}
+					position++
+					if buffer[position] != rune(')') {
+						goto l577
+					}
+					position++
+					goto l552
+				l577:
+					position, tokenIndex = position552, tokenIndex552
+					if !_rules[ruleARMRegister]() {
+						goto l550
+					}
+				}
+			l552:
+				{
+					position584, tokenIndex584 := position, tokenIndex
+					{
+						position585, tokenIndex585 := position, tokenIndex
+						if buffer[position] != rune('f') {
+							goto l586
+						}
+						position++
+						goto l585
+					l586:
+						position, tokenIndex = position585, tokenIndex585
+						if buffer[position] != rune('b') {
+							goto l587
+						}
+						position++
+						goto l585
+					l587:
+						position, tokenIndex = position585, tokenIndex585
+						if buffer[position] != rune(':') {
+							goto l588
+						}
+						position++
+						goto l585
+					l588:
+						position, tokenIndex = position585, tokenIndex585
+						if buffer[position] != rune('(') {
+							goto l589
+						}
+						position++
+						goto l585
 					l589:
-						position, tokenIndex = position577, tokenIndex577
+						position, tokenIndex = position585, tokenIndex585
+						if buffer[position] != rune('+') {
+							goto l590
+						}
+						position++
+						goto l585
+					l590:
+						position, tokenIndex = position585, tokenIndex585
+						if buffer[position] != rune('-') {
+							goto l584
+						}
+						position++
+					}
+				l585:
+					goto l550
+				l584:
+					position, tokenIndex = position584, tokenIndex584
+				}
+				add(ruleRegisterOrConstant, position551)
+			}
+			return true
+		l550:
+			position, tokenIndex = position550, tokenIndex550
+			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]))> */
+		func() bool {
+			position591, tokenIndex591 := position, tokenIndex
+			{
+				position592 := position
+				{
+					position593, tokenIndex593 := position, tokenIndex
+					{
+						position595, tokenIndex595 := position, tokenIndex
 						{
 							position597, tokenIndex597 := position, tokenIndex
-							if buffer[position] != rune('l') {
+							if buffer[position] != rune('u') {
 								goto l598
 							}
 							position++
 							goto l597
 						l598:
 							position, tokenIndex = position597, tokenIndex597
-							if buffer[position] != rune('L') {
+							if buffer[position] != rune('s') {
 								goto l596
 							}
 							position++
@@ -4923,14 +4930,14 @@
 					l597:
 						{
 							position599, tokenIndex599 := position, tokenIndex
-							if buffer[position] != rune('s') {
+							if buffer[position] != rune('x') {
 								goto l600
 							}
 							position++
 							goto l599
 						l600:
 							position, tokenIndex = position599, tokenIndex599
-							if buffer[position] != rune('S') {
+							if buffer[position] != rune('X') {
 								goto l596
 							}
 							position++
@@ -4938,1413 +4945,1389 @@
 					l599:
 						{
 							position601, tokenIndex601 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							if buffer[position] != rune('t') {
 								goto l602
 							}
 							position++
 							goto l601
 						l602:
 							position, tokenIndex = position601, tokenIndex601
-							if buffer[position] != rune('R') {
+							if buffer[position] != rune('T') {
 								goto l596
 							}
 							position++
 						}
 					l601:
-						goto l577
-					l596:
-						position, tokenIndex = position577, tokenIndex577
 						{
-							position604, tokenIndex604 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							position603, tokenIndex603 := position, tokenIndex
+							if buffer[position] != rune('x') {
+								goto l604
+							}
+							position++
+							goto l603
+						l604:
+							position, tokenIndex = position603, tokenIndex603
+							if buffer[position] != rune('w') {
 								goto l605
 							}
 							position++
-							goto l604
+							goto l603
 						l605:
-							position, tokenIndex = position604, tokenIndex604
-							if buffer[position] != rune('R') {
-								goto l603
+							position, tokenIndex = position603, tokenIndex603
+							if buffer[position] != rune('h') {
+								goto l606
+							}
+							position++
+							goto l603
+						l606:
+							position, tokenIndex = position603, tokenIndex603
+							if buffer[position] != rune('b') {
+								goto l596
 							}
 							position++
 						}
-					l604:
-						{
-							position606, tokenIndex606 := position, tokenIndex
-							if buffer[position] != rune('o') {
-								goto l607
-							}
-							position++
-							goto l606
-						l607:
-							position, tokenIndex = position606, tokenIndex606
-							if buffer[position] != rune('O') {
-								goto l603
-							}
-							position++
-						}
-					l606:
+					l603:
+						goto l595
+					l596:
+						position, tokenIndex = position595, tokenIndex595
 						{
 							position608, tokenIndex608 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							if buffer[position] != rune('l') {
 								goto l609
 							}
 							position++
 							goto l608
 						l609:
 							position, tokenIndex = position608, tokenIndex608
-							if buffer[position] != rune('R') {
-								goto l603
+							if buffer[position] != rune('L') {
+								goto l607
 							}
 							position++
 						}
 					l608:
-						goto l577
-					l603:
-						position, tokenIndex = position577, tokenIndex577
 						{
 							position610, tokenIndex610 := position, tokenIndex
-							if buffer[position] != rune('a') {
+							if buffer[position] != rune('s') {
 								goto l611
 							}
 							position++
 							goto l610
 						l611:
 							position, tokenIndex = position610, tokenIndex610
-							if buffer[position] != rune('A') {
-								goto l576
+							if buffer[position] != rune('S') {
+								goto l607
 							}
 							position++
 						}
 					l610:
 						{
 							position612, tokenIndex612 := position, tokenIndex
-							if buffer[position] != rune('s') {
+							if buffer[position] != rune('l') {
 								goto l613
 							}
 							position++
 							goto l612
 						l613:
 							position, tokenIndex = position612, tokenIndex612
-							if buffer[position] != rune('S') {
-								goto l576
+							if buffer[position] != rune('L') {
+								goto l607
 							}
 							position++
 						}
 					l612:
+						goto l595
+					l607:
+						position, tokenIndex = position595, tokenIndex595
 						{
-							position614, tokenIndex614 := position, tokenIndex
-							if buffer[position] != rune('r') {
-								goto l615
+							position615, tokenIndex615 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l616
 							}
 							position++
-							goto l614
-						l615:
-							position, tokenIndex = position614, tokenIndex614
-							if buffer[position] != rune('R') {
-								goto l576
+							goto l615
+						l616:
+							position, tokenIndex = position615, tokenIndex615
+							if buffer[position] != rune('L') {
+								goto l614
 							}
 							position++
 						}
+					l615:
+						{
+							position617, tokenIndex617 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l618
+							}
+							position++
+							goto l617
+						l618:
+							position, tokenIndex = position617, tokenIndex617
+							if buffer[position] != rune('S') {
+								goto l614
+							}
+							position++
+						}
+					l617:
+						{
+							position619, tokenIndex619 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l620
+							}
+							position++
+							goto l619
+						l620:
+							position, tokenIndex = position619, tokenIndex619
+							if buffer[position] != rune('R') {
+								goto l614
+							}
+							position++
+						}
+					l619:
+						goto l595
 					l614:
+						position, tokenIndex = position595, tokenIndex595
+						{
+							position622, tokenIndex622 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l623
+							}
+							position++
+							goto l622
+						l623:
+							position, tokenIndex = position622, tokenIndex622
+							if buffer[position] != rune('R') {
+								goto l621
+							}
+							position++
+						}
+					l622:
+						{
+							position624, tokenIndex624 := position, tokenIndex
+							if buffer[position] != rune('o') {
+								goto l625
+							}
+							position++
+							goto l624
+						l625:
+							position, tokenIndex = position624, tokenIndex624
+							if buffer[position] != rune('O') {
+								goto l621
+							}
+							position++
+						}
+					l624:
+						{
+							position626, tokenIndex626 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l627
+							}
+							position++
+							goto l626
+						l627:
+							position, tokenIndex = position626, tokenIndex626
+							if buffer[position] != rune('R') {
+								goto l621
+							}
+							position++
+						}
+					l626:
+						goto l595
+					l621:
+						position, tokenIndex = position595, tokenIndex595
+						{
+							position628, tokenIndex628 := position, tokenIndex
+							if buffer[position] != rune('a') {
+								goto l629
+							}
+							position++
+							goto l628
+						l629:
+							position, tokenIndex = position628, tokenIndex628
+							if buffer[position] != rune('A') {
+								goto l594
+							}
+							position++
+						}
+					l628:
+						{
+							position630, tokenIndex630 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l631
+							}
+							position++
+							goto l630
+						l631:
+							position, tokenIndex = position630, tokenIndex630
+							if buffer[position] != rune('S') {
+								goto l594
+							}
+							position++
+						}
+					l630:
+						{
+							position632, tokenIndex632 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l633
+							}
+							position++
+							goto l632
+						l633:
+							position, tokenIndex = position632, tokenIndex632
+							if buffer[position] != rune('R') {
+								goto l594
+							}
+							position++
+						}
+					l632:
 					}
-				l577:
+				l595:
 					{
-						position616, tokenIndex616 := position, tokenIndex
+						position634, tokenIndex634 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l616
+							goto l634
 						}
 						if buffer[position] != rune('#') {
-							goto l616
-						}
-						position++
-						if !_rules[ruleOffset]() {
-							goto l616
-						}
-						goto l617
-					l616:
-						position, tokenIndex = position616, tokenIndex616
-					}
-				l617:
-					goto l575
-				l576:
-					position, tokenIndex = position575, tokenIndex575
-					{
-						position619, tokenIndex619 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l620
-						}
-						position++
-						goto l619
-					l620:
-						position, tokenIndex = position619, tokenIndex619
-						if buffer[position] != rune('M') {
-							goto l618
-						}
-						position++
-					}
-				l619:
-					{
-						position621, tokenIndex621 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l622
-						}
-						position++
-						goto l621
-					l622:
-						position, tokenIndex = position621, tokenIndex621
-						if buffer[position] != rune('U') {
-							goto l618
-						}
-						position++
-					}
-				l621:
-					{
-						position623, tokenIndex623 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l624
-						}
-						position++
-						goto l623
-					l624:
-						position, tokenIndex = position623, tokenIndex623
-						if buffer[position] != rune('L') {
-							goto l618
-						}
-						position++
-					}
-				l623:
-					if buffer[position] != rune(' ') {
-						goto l618
-					}
-					position++
-					{
-						position625, tokenIndex625 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l626
-						}
-						position++
-						goto l625
-					l626:
-						position, tokenIndex = position625, tokenIndex625
-						if buffer[position] != rune('V') {
-							goto l618
-						}
-						position++
-					}
-				l625:
-					{
-						position627, tokenIndex627 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l628
-						}
-						position++
-						goto l627
-					l628:
-						position, tokenIndex = position627, tokenIndex627
-						if buffer[position] != rune('L') {
-							goto l618
-						}
-						position++
-					}
-				l627:
-					goto l575
-				l618:
-					position, tokenIndex = position575, tokenIndex575
-					{
-						position629, tokenIndex629 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l630
-						}
-						position++
-						goto l629
-					l630:
-						position, tokenIndex = position629, tokenIndex629
-						if buffer[position] != rune('M') {
-							goto l573
-						}
-						position++
-					}
-				l629:
-					{
-						position631, tokenIndex631 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l632
-						}
-						position++
-						goto l631
-					l632:
-						position, tokenIndex = position631, tokenIndex631
-						if buffer[position] != rune('U') {
-							goto l573
-						}
-						position++
-					}
-				l631:
-					{
-						position633, tokenIndex633 := position, tokenIndex
-						if buffer[position] != rune('l') {
 							goto l634
 						}
 						position++
-						goto l633
+						if !_rules[ruleOffset]() {
+							goto l634
+						}
+						goto l635
 					l634:
-						position, tokenIndex = position633, tokenIndex633
-						if buffer[position] != rune('L') {
-							goto l573
+						position, tokenIndex = position634, tokenIndex634
+					}
+				l635:
+					goto l593
+				l594:
+					position, tokenIndex = position593, tokenIndex593
+					{
+						position637, tokenIndex637 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l638
+						}
+						position++
+						goto l637
+					l638:
+						position, tokenIndex = position637, tokenIndex637
+						if buffer[position] != rune('M') {
+							goto l636
 						}
 						position++
 					}
-				l633:
-					if buffer[position] != rune(' ') {
-						goto l573
-					}
-					position++
-					if buffer[position] != rune('#') {
-						goto l573
-					}
-					position++
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l573
-					}
-					position++
-				}
-			l575:
-				add(ruleARMConstantTweak, position574)
-			}
-			return true
-		l573:
-			position, tokenIndex = position573, tokenIndex573
-			return false
-		},
-		/* 44 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / SVE2PredicateRegister / ARMVectorRegister / SVE2SpecialValue / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
-		func() bool {
-			position635, tokenIndex635 := position, tokenIndex
-			{
-				position636 := position
-				{
-					position637, tokenIndex637 := position, tokenIndex
+				l637:
 					{
 						position639, tokenIndex639 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('u') {
 							goto l640
 						}
 						position++
 						goto l639
 					l640:
 						position, tokenIndex = position639, tokenIndex639
-						if buffer[position] != rune('S') {
-							goto l638
+						if buffer[position] != rune('U') {
+							goto l636
 						}
 						position++
 					}
 				l639:
 					{
 						position641, tokenIndex641 := position, tokenIndex
-						if buffer[position] != rune('p') {
+						if buffer[position] != rune('l') {
 							goto l642
 						}
 						position++
 						goto l641
 					l642:
 						position, tokenIndex = position641, tokenIndex641
-						if buffer[position] != rune('P') {
-							goto l638
+						if buffer[position] != rune('L') {
+							goto l636
 						}
 						position++
 					}
 				l641:
-					goto l637
-				l638:
-					position, tokenIndex = position637, tokenIndex637
-					{
-						position644, tokenIndex644 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l645
-						}
-						position++
-						goto l644
-					l645:
-						position, tokenIndex = position644, tokenIndex644
-						if buffer[position] != rune('w') {
-							goto l646
-						}
-						position++
-						goto l644
-					l646:
-						position, tokenIndex = position644, tokenIndex644
-						if buffer[position] != rune('d') {
-							goto l647
-						}
-						position++
-						goto l644
-					l647:
-						position, tokenIndex = position644, tokenIndex644
-						if buffer[position] != rune('q') {
-							goto l648
-						}
-						position++
-						goto l644
-					l648:
-						position, tokenIndex = position644, tokenIndex644
-						if buffer[position] != rune('s') {
-							goto l649
-						}
-						position++
-						goto l644
-					l649:
-						position, tokenIndex = position644, tokenIndex644
-						if buffer[position] != rune('h') {
-							goto l650
-						}
-						position++
-						goto l644
-					l650:
-						position, tokenIndex = position644, tokenIndex644
-						if buffer[position] != rune('b') {
-							goto l643
-						}
-						position++
-					}
-				l644:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l643
+					if buffer[position] != rune(' ') {
+						goto l636
 					}
 					position++
 					{
-						position651, tokenIndex651 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l651
+						position643, tokenIndex643 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l644
 						}
 						position++
-						goto l652
-					l651:
-						position, tokenIndex = position651, tokenIndex651
+						goto l643
+					l644:
+						position, tokenIndex = position643, tokenIndex643
+						if buffer[position] != rune('V') {
+							goto l636
+						}
+						position++
 					}
-				l652:
-					goto l637
 				l643:
-					position, tokenIndex = position637, tokenIndex637
 					{
-						position654, tokenIndex654 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l655
+						position645, tokenIndex645 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l646
 						}
 						position++
-						goto l654
-					l655:
-						position, tokenIndex = position654, tokenIndex654
-						if buffer[position] != rune('X') {
-							goto l653
+						goto l645
+					l646:
+						position, tokenIndex = position645, tokenIndex645
+						if buffer[position] != rune('L') {
+							goto l636
 						}
 						position++
 					}
-				l654:
+				l645:
+					goto l593
+				l636:
+					position, tokenIndex = position593, tokenIndex593
 					{
-						position656, tokenIndex656 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l657
+						position647, tokenIndex647 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l648
 						}
 						position++
-						goto l656
-					l657:
-						position, tokenIndex = position656, tokenIndex656
-						if buffer[position] != rune('Z') {
-							goto l653
+						goto l647
+					l648:
+						position, tokenIndex = position647, tokenIndex647
+						if buffer[position] != rune('M') {
+							goto l591
 						}
 						position++
 					}
-				l656:
+				l647:
 					{
-						position658, tokenIndex658 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l659
+						position649, tokenIndex649 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l650
 						}
 						position++
-						goto l658
-					l659:
-						position, tokenIndex = position658, tokenIndex658
-						if buffer[position] != rune('R') {
-							goto l653
+						goto l649
+					l650:
+						position, tokenIndex = position649, tokenIndex649
+						if buffer[position] != rune('U') {
+							goto l591
 						}
 						position++
 					}
-				l658:
-					goto l637
-				l653:
-					position, tokenIndex = position637, tokenIndex637
+				l649:
 					{
-						position661, tokenIndex661 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l662
+						position651, tokenIndex651 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l652
 						}
 						position++
-						goto l661
-					l662:
-						position, tokenIndex = position661, tokenIndex661
-						if buffer[position] != rune('W') {
+						goto l651
+					l652:
+						position, tokenIndex = position651, tokenIndex651
+						if buffer[position] != rune('L') {
+							goto l591
+						}
+						position++
+					}
+				l651:
+					if buffer[position] != rune(' ') {
+						goto l591
+					}
+					position++
+					if buffer[position] != rune('#') {
+						goto l591
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l591
+					}
+					position++
+				}
+			l593:
+				add(ruleARMConstantTweak, position592)
+			}
+			return true
+		l591:
+			position, tokenIndex = position591, tokenIndex591
+			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]? ']')?))> */
+		func() bool {
+			position653, tokenIndex653 := position, tokenIndex
+			{
+				position654 := position
+				{
+					position655, tokenIndex655 := position, tokenIndex
+					{
+						position657, tokenIndex657 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l658
+						}
+						position++
+						goto l657
+					l658:
+						position, tokenIndex = position657, tokenIndex657
+						if buffer[position] != rune('S') {
+							goto l656
+						}
+						position++
+					}
+				l657:
+					{
+						position659, tokenIndex659 := position, tokenIndex
+						if buffer[position] != rune('p') {
 							goto l660
 						}
 						position++
+						goto l659
+					l660:
+						position, tokenIndex = position659, tokenIndex659
+						if buffer[position] != rune('P') {
+							goto l656
+						}
+						position++
 					}
-				l661:
+				l659:
+					goto l655
+				l656:
+					position, tokenIndex = position655, tokenIndex655
 					{
-						position663, tokenIndex663 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						position662, tokenIndex662 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l663
+						}
+						position++
+						goto l662
+					l663:
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('w') {
 							goto l664
 						}
 						position++
-						goto l663
+						goto l662
 					l664:
-						position, tokenIndex = position663, tokenIndex663
-						if buffer[position] != rune('Z') {
-							goto l660
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('d') {
+							goto l665
 						}
 						position++
-					}
-				l663:
-					{
-						position665, tokenIndex665 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						goto l662
+					l665:
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('q') {
 							goto l666
 						}
 						position++
-						goto l665
+						goto l662
 					l666:
-						position, tokenIndex = position665, tokenIndex665
-						if buffer[position] != rune('R') {
-							goto l660
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('s') {
+							goto l667
+						}
+						position++
+						goto l662
+					l667:
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('h') {
+							goto l668
+						}
+						position++
+						goto l662
+					l668:
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('b') {
+							goto l661
 						}
 						position++
 					}
-				l665:
-					goto l637
-				l660:
-					position, tokenIndex = position637, tokenIndex637
+				l662:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l661
+					}
+					position++
 					{
-						position668, tokenIndex668 := position, tokenIndex
-						if buffer[position] != rune('n') {
+						position669, tokenIndex669 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l669
 						}
 						position++
-						goto l668
-					l669:
-						position, tokenIndex = position668, tokenIndex668
-						if buffer[position] != rune('N') {
-							goto l667
-						}
-						position++
-					}
-				l668:
-					{
-						position670, tokenIndex670 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l671
-						}
-						position++
 						goto l670
-					l671:
-						position, tokenIndex = position670, tokenIndex670
-						if buffer[position] != rune('Z') {
-							goto l667
-						}
-						position++
+					l669:
+						position, tokenIndex = position669, tokenIndex669
 					}
 				l670:
+					goto l655
+				l661:
+					position, tokenIndex = position655, tokenIndex655
 					{
 						position672, tokenIndex672 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('x') {
 							goto l673
 						}
 						position++
 						goto l672
 					l673:
 						position, tokenIndex = position672, tokenIndex672
-						if buffer[position] != rune('C') {
-							goto l667
+						if buffer[position] != rune('X') {
+							goto l671
 						}
 						position++
 					}
 				l672:
 					{
 						position674, tokenIndex674 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						if buffer[position] != rune('z') {
 							goto l675
 						}
 						position++
 						goto l674
 					l675:
 						position, tokenIndex = position674, tokenIndex674
-						if buffer[position] != rune('V') {
-							goto l667
+						if buffer[position] != rune('Z') {
+							goto l671
 						}
 						position++
 					}
 				l674:
-					goto l637
-				l667:
-					position, tokenIndex = position637, tokenIndex637
-					if !_rules[ruleSVE2PredicateRegister]() {
+					{
+						position676, tokenIndex676 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l677
+						}
+						position++
 						goto l676
+					l677:
+						position, tokenIndex = position676, tokenIndex676
+						if buffer[position] != rune('R') {
+							goto l671
+						}
+						position++
 					}
-					goto l637
 				l676:
-					position, tokenIndex = position637, tokenIndex637
-					if !_rules[ruleARMVectorRegister]() {
-						goto l677
-					}
-					goto l637
-				l677:
-					position, tokenIndex = position637, tokenIndex637
-					if !_rules[ruleSVE2SpecialValue]() {
-						goto l678
-					}
-					goto l637
-				l678:
-					position, tokenIndex = position637, tokenIndex637
-					if buffer[position] != rune('{') {
-						goto l635
-					}
-					position++
+					goto l655
+				l671:
+					position, tokenIndex = position655, tokenIndex655
 					{
 						position679, tokenIndex679 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l679
+						if buffer[position] != rune('w') {
+							goto l680
 						}
-						goto l680
-					l679:
+						position++
+						goto l679
+					l680:
 						position, tokenIndex = position679, tokenIndex679
+						if buffer[position] != rune('W') {
+							goto l678
+						}
+						position++
 					}
-				l680:
-					if !_rules[ruleARMVectorRegister]() {
-						goto l635
+				l679:
+					{
+						position681, tokenIndex681 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l682
+						}
+						position++
+						goto l681
+					l682:
+						position, tokenIndex = position681, tokenIndex681
+						if buffer[position] != rune('Z') {
+							goto l678
+						}
+						position++
 					}
 				l681:
 					{
-						position682, tokenIndex682 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l682
+						position683, tokenIndex683 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l684
 						}
 						position++
-						{
-							position683, tokenIndex683 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l683
-							}
-							goto l684
-						l683:
-							position, tokenIndex = position683, tokenIndex683
-						}
+						goto l683
 					l684:
-						if !_rules[ruleARMVectorRegister]() {
-							goto l682
+						position, tokenIndex = position683, tokenIndex683
+						if buffer[position] != rune('R') {
+							goto l678
 						}
-						goto l681
-					l682:
-						position, tokenIndex = position682, tokenIndex682
+						position++
 					}
+				l683:
+					goto l655
+				l678:
+					position, tokenIndex = position655, tokenIndex655
 					{
-						position685, tokenIndex685 := position, tokenIndex
-						if !_rules[ruleWS]() {
+						position686, tokenIndex686 := position, tokenIndex
+						if buffer[position] != rune('n') {
+							goto l687
+						}
+						position++
+						goto l686
+					l687:
+						position, tokenIndex = position686, tokenIndex686
+						if buffer[position] != rune('N') {
 							goto l685
 						}
-						goto l686
-					l685:
-						position, tokenIndex = position685, tokenIndex685
+						position++
 					}
 				l686:
-					if buffer[position] != rune('}') {
-						goto l635
-					}
-					position++
 					{
-						position687, tokenIndex687 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l687
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l687
-						}
-						position++
-						{
-							position689, tokenIndex689 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l689
-							}
-							position++
-							goto l690
-						l689:
-							position, tokenIndex = position689, tokenIndex689
-						}
-					l690:
-						if buffer[position] != rune(']') {
-							goto l687
+						position688, tokenIndex688 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l689
 						}
 						position++
 						goto l688
-					l687:
-						position, tokenIndex = position687, tokenIndex687
+					l689:
+						position, tokenIndex = position688, tokenIndex688
+						if buffer[position] != rune('Z') {
+							goto l685
+						}
+						position++
 					}
 				l688:
-				}
-			l637:
-				add(ruleARMRegister, position636)
-			}
-			return true
-		l635:
-			position, tokenIndex = position635, tokenIndex635
-			return false
-		},
-		/* 45 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 {
-			position691, tokenIndex691 := position, tokenIndex
-			{
-				position692 := position
-				{
-					position693, tokenIndex693 := position, tokenIndex
-					if buffer[position] != rune('p') {
+					{
+						position690, tokenIndex690 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l691
+						}
+						position++
+						goto l690
+					l691:
+						position, tokenIndex = position690, tokenIndex690
+						if buffer[position] != rune('C') {
+							goto l685
+						}
+						position++
+					}
+				l690:
+					{
+						position692, tokenIndex692 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l693
+						}
+						position++
+						goto l692
+					l693:
+						position, tokenIndex = position692, tokenIndex692
+						if buffer[position] != rune('V') {
+							goto l685
+						}
+						position++
+					}
+				l692:
+					goto l655
+				l685:
+					position, tokenIndex = position655, tokenIndex655
+					if !_rules[ruleSVE2PredicateRegister]() {
 						goto l694
 					}
-					position++
-					goto l693
+					goto l655
 				l694:
-					position, tokenIndex = position693, tokenIndex693
-					if buffer[position] != rune('v') {
+					position, tokenIndex = position655, tokenIndex655
+					if !_rules[ruleARMVectorRegister]() {
 						goto l695
 					}
-					position++
-					goto l693
+					goto l655
 				l695:
-					position, tokenIndex = position693, tokenIndex693
-					if buffer[position] != rune('z') {
-						goto l691
-					}
-					position++
-				}
-			l693:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l691
-				}
-				position++
-				{
-					position696, tokenIndex696 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
+					position, tokenIndex = position655, tokenIndex655
+					if !_rules[ruleSVE2SpecialValue]() {
 						goto l696
 					}
-					position++
-					goto l697
+					goto l655
 				l696:
-					position, tokenIndex = position696, tokenIndex696
-				}
-			l697:
-				{
-					position698, tokenIndex698 := position, tokenIndex
+					position, tokenIndex = position655, tokenIndex655
+					if buffer[position] != rune('{') {
+						goto l653
+					}
+					position++
 					{
-						position699, tokenIndex699 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position697, tokenIndex697 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l697
+						}
+						goto l698
+					l697:
+						position, tokenIndex = position697, tokenIndex697
+					}
+				l698:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l653
+					}
+				l699:
+					{
+						position700, tokenIndex700 := position, tokenIndex
+						if buffer[position] != rune(',') {
 							goto l700
 						}
 						position++
+						{
+							position701, tokenIndex701 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l701
+							}
+							goto l702
+						l701:
+							position, tokenIndex = position701, tokenIndex701
+						}
+					l702:
+						if !_rules[ruleARMVectorRegister]() {
+							goto l700
+						}
 						goto l699
 					l700:
-						position, tokenIndex = position699, tokenIndex699
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l701
-						}
-						position++
-						goto l699
-					l701:
-						position, tokenIndex = position699, tokenIndex699
-						{
-							position703, tokenIndex703 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l704
-							}
-							position++
-							goto l703
-						l704:
-							position, tokenIndex = position703, tokenIndex703
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l702
-							}
-							position++
-						}
-					l703:
-						goto l699
-					l702:
-						position, tokenIndex = position699, tokenIndex699
-						if buffer[position] != rune('_') {
-							goto l698
-						}
-						position++
+						position, tokenIndex = position700, tokenIndex700
 					}
-				l699:
-					goto l691
-				l698:
-					position, tokenIndex = position698, tokenIndex698
-				}
-				{
-					position705, tokenIndex705 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l705
+					{
+						position703, tokenIndex703 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l703
+						}
+						goto l704
+					l703:
+						position, tokenIndex = position703, tokenIndex703
+					}
+				l704:
+					if buffer[position] != rune('}') {
+						goto l653
 					}
 					position++
-				l707:
 					{
-						position708, tokenIndex708 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l708
-						}
-						position++
-						goto l707
-					l708:
-						position, tokenIndex = position708, tokenIndex708
-					}
-					{
-						position709, tokenIndex709 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l710
-						}
-						position++
-						goto l709
-					l710:
-						position, tokenIndex = position709, tokenIndex709
-						if buffer[position] != rune('s') {
-							goto l711
-						}
-						position++
-						goto l709
-					l711:
-						position, tokenIndex = position709, tokenIndex709
-						if buffer[position] != rune('d') {
-							goto l712
-						}
-						position++
-						goto l709
-					l712:
-						position, tokenIndex = position709, tokenIndex709
-						if buffer[position] != rune('h') {
-							goto l713
-						}
-						position++
-						goto l709
-					l713:
-						position, tokenIndex = position709, tokenIndex709
-						if buffer[position] != rune('q') {
+						position705, tokenIndex705 := position, tokenIndex
+						if buffer[position] != rune('[') {
 							goto l705
 						}
 						position++
-					}
-				l709:
-					{
-						position714, tokenIndex714 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l714
-						}
-						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l714
+							goto l705
 						}
 						position++
 						{
-							position716, tokenIndex716 := position, tokenIndex
+							position707, tokenIndex707 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l716
+								goto l707
 							}
 							position++
-							goto l717
-						l716:
-							position, tokenIndex = position716, tokenIndex716
+							goto l708
+						l707:
+							position, tokenIndex = position707, tokenIndex707
 						}
-					l717:
+					l708:
 						if buffer[position] != rune(']') {
-							goto l714
+							goto l705
 						}
 						position++
-						goto l715
-					l714:
-						position, tokenIndex = position714, tokenIndex714
+						goto l706
+					l705:
+						position, tokenIndex = position705, tokenIndex705
 					}
-				l715:
-					goto l706
-				l705:
-					position, tokenIndex = position705, tokenIndex705
+				l706:
 				}
-			l706:
-				add(ruleARMVectorRegister, position692)
+			l655:
+				add(ruleARMRegister, position654)
 			}
 			return true
-		l691:
-			position, tokenIndex = position691, tokenIndex691
+		l653:
+			position, tokenIndex = position653, tokenIndex653
 			return false
 		},
-		/* 46 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
+		/* 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]? ']')?)?)> */
 		func() bool {
-			position718, tokenIndex718 := position, tokenIndex
+			position709, tokenIndex709 := position, tokenIndex
 			{
-				position719 := position
+				position710 := position
 				{
-					position720, tokenIndex720 := position, tokenIndex
+					position711, tokenIndex711 := position, tokenIndex
 					if buffer[position] != rune('p') {
-						goto l721
+						goto l712
 					}
 					position++
-					goto l720
-				l721:
-					position, tokenIndex = position720, tokenIndex720
-					if buffer[position] != rune('P') {
-						goto l718
+					goto l711
+				l712:
+					position, tokenIndex = position711, tokenIndex711
+					if buffer[position] != rune('v') {
+						goto l713
+					}
+					position++
+					goto l711
+				l713:
+					position, tokenIndex = position711, tokenIndex711
+					if buffer[position] != rune('z') {
+						goto l709
 					}
 					position++
 				}
-			l720:
+			l711:
 				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l718
+					goto l709
 				}
 				position++
 				{
-					position722, tokenIndex722 := position, tokenIndex
+					position714, tokenIndex714 := position, tokenIndex
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l722
+						goto l714
 					}
 					position++
-					goto l723
-				l722:
-					position, tokenIndex = position722, tokenIndex722
+					goto l715
+				l714:
+					position, tokenIndex = position714, tokenIndex714
 				}
-			l723:
-				if buffer[position] != rune('/') {
-					goto l718
-				}
-				position++
+			l715:
 				{
-					position724, tokenIndex724 := position, tokenIndex
-					if buffer[position] != rune('m') {
-						goto l725
+					position716, tokenIndex716 := position, tokenIndex
+					{
+						position717, tokenIndex717 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l718
+						}
+						position++
+						goto l717
+					l718:
+						position, tokenIndex = position717, tokenIndex717
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l719
+						}
+						position++
+						goto l717
+					l719:
+						position, tokenIndex = position717, tokenIndex717
+						{
+							position721, tokenIndex721 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l722
+							}
+							position++
+							goto l721
+						l722:
+							position, tokenIndex = position721, tokenIndex721
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l720
+							}
+							position++
+						}
+					l721:
+						goto l717
+					l720:
+						position, tokenIndex = position717, tokenIndex717
+						if buffer[position] != rune('_') {
+							goto l716
+						}
+						position++
+					}
+				l717:
+					goto l709
+				l716:
+					position, tokenIndex = position716, tokenIndex716
+				}
+				{
+					position723, tokenIndex723 := position, tokenIndex
+					if buffer[position] != rune('.') {
+						goto l723
 					}
 					position++
-					goto l724
 				l725:
-					position, tokenIndex = position724, tokenIndex724
-					if buffer[position] != rune('M') {
-						goto l726
+					{
+						position726, tokenIndex726 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l726
+						}
+						position++
+						goto l725
+					l726:
+						position, tokenIndex = position726, tokenIndex726
 					}
-					position++
-					goto l724
-				l726:
-					position, tokenIndex = position724, tokenIndex724
 					{
 						position727, tokenIndex727 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('b') {
 							goto l728
 						}
 						position++
 						goto l727
 					l728:
 						position, tokenIndex = position727, tokenIndex727
-						if buffer[position] != rune('Z') {
-							goto l718
+						if buffer[position] != rune('s') {
+							goto l729
+						}
+						position++
+						goto l727
+					l729:
+						position, tokenIndex = position727, tokenIndex727
+						if buffer[position] != rune('d') {
+							goto l730
+						}
+						position++
+						goto l727
+					l730:
+						position, tokenIndex = position727, tokenIndex727
+						if buffer[position] != rune('h') {
+							goto l731
+						}
+						position++
+						goto l727
+					l731:
+						position, tokenIndex = position727, tokenIndex727
+						if buffer[position] != rune('q') {
+							goto l723
 						}
 						position++
 					}
 				l727:
-				}
-			l724:
-				add(ruleSVE2PredicateRegister, position719)
-			}
-			return true
-		l718:
-			position, tokenIndex = position718, tokenIndex718
-			return false
-		},
-		/* 47 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 {
-			position729, tokenIndex729 := position, tokenIndex
-			{
-				position730 := position
-				{
-					position731, tokenIndex731 := position, tokenIndex
 					{
-						position733, tokenIndex733 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l734
+						position732, tokenIndex732 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l732
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l732
+						}
+						position++
+						{
+							position734, tokenIndex734 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l734
+							}
+							position++
+							goto l735
+						l734:
+							position, tokenIndex = position734, tokenIndex734
+						}
+					l735:
+						if buffer[position] != rune(']') {
+							goto l732
 						}
 						position++
 						goto l733
-					l734:
-						position, tokenIndex = position733, tokenIndex733
-						if buffer[position] != rune('P') {
-							goto l732
-						}
-						position++
+					l732:
+						position, tokenIndex = position732, tokenIndex732
 					}
 				l733:
-					{
-						position735, tokenIndex735 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l736
-						}
-						position++
-						goto l735
-					l736:
-						position, tokenIndex = position735, tokenIndex735
-						if buffer[position] != rune('O') {
-							goto l732
-						}
-						position++
-					}
-				l735:
-					{
-						position737, tokenIndex737 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l738
-						}
-						position++
-						goto l737
-					l738:
-						position, tokenIndex = position737, tokenIndex737
-						if buffer[position] != rune('W') {
-							goto l732
-						}
-						position++
-					}
-				l737:
-					if buffer[position] != rune('2') {
-						goto l732
+					goto l724
+				l723:
+					position, tokenIndex = position723, tokenIndex723
+				}
+			l724:
+				add(ruleARMVectorRegister, position710)
+			}
+			return true
+		l709:
+			position, tokenIndex = position709, tokenIndex709
+			return false
+		},
+		/* 47 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
+		func() bool {
+			position736, tokenIndex736 := position, tokenIndex
+			{
+				position737 := position
+				{
+					position738, tokenIndex738 := position, tokenIndex
+					if buffer[position] != rune('p') {
+						goto l739
 					}
 					position++
-					goto l731
-				l732:
-					position, tokenIndex = position731, tokenIndex731
-					{
-						position740, tokenIndex740 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l741
-						}
-						position++
+					goto l738
+				l739:
+					position, tokenIndex = position738, tokenIndex738
+					if buffer[position] != rune('P') {
+						goto l736
+					}
+					position++
+				}
+			l738:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l736
+				}
+				position++
+				{
+					position740, tokenIndex740 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l740
-					l741:
-						position, tokenIndex = position740, tokenIndex740
-						if buffer[position] != rune('V') {
-							goto l739
-						}
-						position++
 					}
+					position++
+					goto l741
 				l740:
-					{
-						position742, tokenIndex742 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l743
-						}
-						position++
-						goto l742
-					l743:
-						position, tokenIndex = position742, tokenIndex742
-						if buffer[position] != rune('L') {
-							goto l739
-						}
-						position++
+					position, tokenIndex = position740, tokenIndex740
+				}
+			l741:
+				if buffer[position] != rune('/') {
+					goto l736
+				}
+				position++
+				{
+					position742, tokenIndex742 := position, tokenIndex
+					if buffer[position] != rune('m') {
+						goto l743
 					}
-				l742:
-					{
-						position744, tokenIndex744 := position, tokenIndex
-						if buffer[position] != rune('1') {
-							goto l745
-						}
-						position++
+					position++
+					goto l742
+				l743:
+					position, tokenIndex = position742, tokenIndex742
+					if buffer[position] != rune('M') {
 						goto l744
-					l745:
-						position, tokenIndex = position744, tokenIndex744
-						if buffer[position] != rune('2') {
+					}
+					position++
+					goto l742
+				l744:
+					position, tokenIndex = position742, tokenIndex742
+					{
+						position745, tokenIndex745 := position, tokenIndex
+						if buffer[position] != rune('z') {
 							goto l746
 						}
 						position++
-						goto l744
+						goto l745
 					l746:
-						position, tokenIndex = position744, tokenIndex744
-						if buffer[position] != rune('3') {
-							goto l747
-						}
-						position++
-						goto l744
-					l747:
-						position, tokenIndex = position744, tokenIndex744
-						if buffer[position] != rune('4') {
-							goto l748
-						}
-						position++
-						goto l744
-					l748:
-						position, tokenIndex = position744, tokenIndex744
-						if buffer[position] != rune('5') {
-							goto l749
-						}
-						position++
-						goto l744
-					l749:
-						position, tokenIndex = position744, tokenIndex744
-						if buffer[position] != rune('6') {
-							goto l750
-						}
-						position++
-						goto l744
-					l750:
-						position, tokenIndex = position744, tokenIndex744
-						if buffer[position] != rune('7') {
-							goto l751
-						}
-						position++
-						goto l744
-					l751:
-						position, tokenIndex = position744, tokenIndex744
-						if buffer[position] != rune('8') {
-							goto l739
+						position, tokenIndex = position745, tokenIndex745
+						if buffer[position] != rune('Z') {
+							goto l736
 						}
 						position++
 					}
-				l744:
+				l745:
+				}
+			l742:
+				add(ruleSVE2PredicateRegister, position737)
+			}
+			return true
+		l736:
+			position, tokenIndex = position736, tokenIndex736
+			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]) / '_'))> */
+		func() bool {
+			position747, tokenIndex747 := position, tokenIndex
+			{
+				position748 := position
+				{
+					position749, tokenIndex749 := position, tokenIndex
 					{
-						position752, tokenIndex752 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position751, tokenIndex751 := position, tokenIndex
+						if buffer[position] != rune('p') {
 							goto l752
 						}
 						position++
-						goto l739
+						goto l751
 					l752:
-						position, tokenIndex = position752, tokenIndex752
+						position, tokenIndex = position751, tokenIndex751
+						if buffer[position] != rune('P') {
+							goto l750
+						}
+						position++
 					}
-					goto l731
-				l739:
-					position, tokenIndex = position731, tokenIndex731
+				l751:
 					{
-						position754, tokenIndex754 := position, tokenIndex
+						position753, tokenIndex753 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l754
+						}
+						position++
+						goto l753
+					l754:
+						position, tokenIndex = position753, tokenIndex753
+						if buffer[position] != rune('O') {
+							goto l750
+						}
+						position++
+					}
+				l753:
+					{
+						position755, tokenIndex755 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l756
+						}
+						position++
+						goto l755
+					l756:
+						position, tokenIndex = position755, tokenIndex755
+						if buffer[position] != rune('W') {
+							goto l750
+						}
+						position++
+					}
+				l755:
+					if buffer[position] != rune('2') {
+						goto l750
+					}
+					position++
+					goto l749
+				l750:
+					position, tokenIndex = position749, tokenIndex749
+					{
+						position758, tokenIndex758 := position, tokenIndex
 						if buffer[position] != rune('v') {
-							goto l755
+							goto l759
 						}
 						position++
-						goto l754
-					l755:
-						position, tokenIndex = position754, tokenIndex754
+						goto l758
+					l759:
+						position, tokenIndex = position758, tokenIndex758
 						if buffer[position] != rune('V') {
-							goto l753
-						}
-						position++
-					}
-				l754:
-					{
-						position756, tokenIndex756 := position, tokenIndex
-						if buffer[position] != rune('l') {
 							goto l757
 						}
 						position++
-						goto l756
-					l757:
-						position, tokenIndex = position756, tokenIndex756
-						if buffer[position] != rune('L') {
-							goto l753
-						}
-						position++
 					}
-				l756:
-					if buffer[position] != rune('1') {
-						goto l753
-					}
-					position++
-					if buffer[position] != rune('6') {
-						goto l753
-					}
-					position++
-					goto l731
-				l753:
-					position, tokenIndex = position731, tokenIndex731
-					{
-						position759, tokenIndex759 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l760
-						}
-						position++
-						goto l759
-					l760:
-						position, tokenIndex = position759, tokenIndex759
-						if buffer[position] != rune('V') {
-							goto l758
-						}
-						position++
-					}
-				l759:
-					{
-						position761, tokenIndex761 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l762
-						}
-						position++
-						goto l761
-					l762:
-						position, tokenIndex = position761, tokenIndex761
-						if buffer[position] != rune('L') {
-							goto l758
-						}
-						position++
-					}
-				l761:
-					if buffer[position] != rune('3') {
-						goto l758
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l758
-					}
-					position++
-					goto l731
 				l758:
-					position, tokenIndex = position731, tokenIndex731
 					{
-						position764, tokenIndex764 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						position760, tokenIndex760 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l761
+						}
+						position++
+						goto l760
+					l761:
+						position, tokenIndex = position760, tokenIndex760
+						if buffer[position] != rune('L') {
+							goto l757
+						}
+						position++
+					}
+				l760:
+					{
+						position762, tokenIndex762 := position, tokenIndex
+						if buffer[position] != rune('1') {
+							goto l763
+						}
+						position++
+						goto l762
+					l763:
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('2') {
+							goto l764
+						}
+						position++
+						goto l762
+					l764:
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('3') {
 							goto l765
 						}
 						position++
-						goto l764
+						goto l762
 					l765:
-						position, tokenIndex = position764, tokenIndex764
-						if buffer[position] != rune('V') {
-							goto l763
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('4') {
+							goto l766
 						}
 						position++
-					}
-				l764:
-					{
-						position766, tokenIndex766 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						goto l762
+					l766:
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('5') {
 							goto l767
 						}
 						position++
-						goto l766
+						goto l762
 					l767:
-						position, tokenIndex = position766, tokenIndex766
-						if buffer[position] != rune('L') {
-							goto l763
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('6') {
+							goto l768
+						}
+						position++
+						goto l762
+					l768:
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('7') {
+							goto l769
+						}
+						position++
+						goto l762
+					l769:
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('8') {
+							goto l757
 						}
 						position++
 					}
-				l766:
-					if buffer[position] != rune('6') {
-						goto l763
-					}
-					position++
-					if buffer[position] != rune('4') {
-						goto l763
-					}
-					position++
-					goto l731
-				l763:
-					position, tokenIndex = position731, tokenIndex731
+				l762:
 					{
-						position769, tokenIndex769 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						position770, tokenIndex770 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l770
 						}
 						position++
-						goto l769
+						goto l757
 					l770:
-						position, tokenIndex = position769, tokenIndex769
-						if buffer[position] != rune('V') {
-							goto l768
-						}
-						position++
+						position, tokenIndex = position770, tokenIndex770
 					}
-				l769:
+					goto l749
+				l757:
+					position, tokenIndex = position749, tokenIndex749
 					{
-						position771, tokenIndex771 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l772
+						position772, tokenIndex772 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l773
 						}
 						position++
-						goto l771
-					l772:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('L') {
-							goto l768
+						goto l772
+					l773:
+						position, tokenIndex = position772, tokenIndex772
+						if buffer[position] != rune('V') {
+							goto l771
 						}
 						position++
 					}
-				l771:
-					if buffer[position] != rune('1') {
-						goto l768
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l768
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l768
-					}
-					position++
-					goto l731
-				l768:
-					position, tokenIndex = position731, tokenIndex731
+				l772:
 					{
 						position774, tokenIndex774 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						if buffer[position] != rune('l') {
 							goto l775
 						}
 						position++
 						goto l774
 					l775:
 						position, tokenIndex = position774, tokenIndex774
-						if buffer[position] != rune('V') {
-							goto l773
+						if buffer[position] != rune('L') {
+							goto l771
 						}
 						position++
 					}
 				l774:
-					{
-						position776, tokenIndex776 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l777
-						}
-						position++
-						goto l776
-					l777:
-						position, tokenIndex = position776, tokenIndex776
-						if buffer[position] != rune('L') {
-							goto l773
-						}
-						position++
-					}
-				l776:
-					if buffer[position] != rune('2') {
-						goto l773
-					}
-					position++
-					if buffer[position] != rune('5') {
-						goto l773
+					if buffer[position] != rune('1') {
+						goto l771
 					}
 					position++
 					if buffer[position] != rune('6') {
-						goto l773
+						goto l771
 					}
 					position++
-					goto l731
-				l773:
-					position, tokenIndex = position731, tokenIndex731
+					goto l749
+				l771:
+					position, tokenIndex = position749, tokenIndex749
+					{
+						position777, tokenIndex777 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l778
+						}
+						position++
+						goto l777
+					l778:
+						position, tokenIndex = position777, tokenIndex777
+						if buffer[position] != rune('V') {
+							goto l776
+						}
+						position++
+					}
+				l777:
 					{
 						position779, tokenIndex779 := position, tokenIndex
-						if buffer[position] != rune('m') {
+						if buffer[position] != rune('l') {
 							goto l780
 						}
 						position++
 						goto l779
 					l780:
 						position, tokenIndex = position779, tokenIndex779
-						if buffer[position] != rune('M') {
-							goto l778
+						if buffer[position] != rune('L') {
+							goto l776
 						}
 						position++
 					}
 				l779:
-					{
-						position781, tokenIndex781 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l782
-						}
-						position++
-						goto l781
-					l782:
-						position, tokenIndex = position781, tokenIndex781
-						if buffer[position] != rune('U') {
-							goto l778
-						}
-						position++
-					}
-				l781:
-					{
-						position783, tokenIndex783 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l784
-						}
-						position++
-						goto l783
-					l784:
-						position, tokenIndex = position783, tokenIndex783
-						if buffer[position] != rune('L') {
-							goto l778
-						}
-						position++
-					}
-				l783:
 					if buffer[position] != rune('3') {
-						goto l778
+						goto l776
 					}
 					position++
-					goto l731
-				l778:
-					position, tokenIndex = position731, tokenIndex731
+					if buffer[position] != rune('2') {
+						goto l776
+					}
+					position++
+					goto l749
+				l776:
+					position, tokenIndex = position749, tokenIndex749
 					{
-						position786, tokenIndex786 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l787
+						position782, tokenIndex782 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l783
 						}
 						position++
-						goto l786
-					l787:
-						position, tokenIndex = position786, tokenIndex786
-						if buffer[position] != rune('M') {
-							goto l785
+						goto l782
+					l783:
+						position, tokenIndex = position782, tokenIndex782
+						if buffer[position] != rune('V') {
+							goto l781
 						}
 						position++
 					}
-				l786:
+				l782:
 					{
-						position788, tokenIndex788 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l789
-						}
-						position++
-						goto l788
-					l789:
-						position, tokenIndex = position788, tokenIndex788
-						if buffer[position] != rune('U') {
-							goto l785
-						}
-						position++
-					}
-				l788:
-					{
-						position790, tokenIndex790 := position, tokenIndex
+						position784, tokenIndex784 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l791
-						}
-						position++
-						goto l790
-					l791:
-						position, tokenIndex = position790, tokenIndex790
-						if buffer[position] != rune('L') {
 							goto l785
 						}
 						position++
+						goto l784
+					l785:
+						position, tokenIndex = position784, tokenIndex784
+						if buffer[position] != rune('L') {
+							goto l781
+						}
+						position++
 					}
-				l790:
-					if buffer[position] != rune('4') {
-						goto l785
+				l784:
+					if buffer[position] != rune('6') {
+						goto l781
 					}
 					position++
-					goto l731
-				l785:
-					position, tokenIndex = position731, tokenIndex731
+					if buffer[position] != rune('4') {
+						goto l781
+					}
+					position++
+					goto l749
+				l781:
+					position, tokenIndex = position749, tokenIndex749
+					{
+						position787, tokenIndex787 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l788
+						}
+						position++
+						goto l787
+					l788:
+						position, tokenIndex = position787, tokenIndex787
+						if buffer[position] != rune('V') {
+							goto l786
+						}
+						position++
+					}
+				l787:
+					{
+						position789, tokenIndex789 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l790
+						}
+						position++
+						goto l789
+					l790:
+						position, tokenIndex = position789, tokenIndex789
+						if buffer[position] != rune('L') {
+							goto l786
+						}
+						position++
+					}
+				l789:
+					if buffer[position] != rune('1') {
+						goto l786
+					}
+					position++
+					if buffer[position] != rune('2') {
+						goto l786
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l786
+					}
+					position++
+					goto l749
+				l786:
+					position, tokenIndex = position749, tokenIndex749
 					{
 						position792, tokenIndex792 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('v') {
 							goto l793
 						}
 						position++
 						goto l792
 					l793:
 						position, tokenIndex = position792, tokenIndex792
-						if buffer[position] != rune('A') {
-							goto l729
+						if buffer[position] != rune('V') {
+							goto l791
 						}
 						position++
 					}
@@ -6359,231 +6342,258 @@
 					l795:
 						position, tokenIndex = position794, tokenIndex794
 						if buffer[position] != rune('L') {
-							goto l729
+							goto l791
 						}
 						position++
 					}
 				l794:
+					if buffer[position] != rune('2') {
+						goto l791
+					}
+					position++
+					if buffer[position] != rune('5') {
+						goto l791
+					}
+					position++
+					if buffer[position] != rune('6') {
+						goto l791
+					}
+					position++
+					goto l749
+				l791:
+					position, tokenIndex = position749, tokenIndex749
 					{
-						position796, tokenIndex796 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l797
+						position797, tokenIndex797 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l798
 						}
 						position++
-						goto l796
-					l797:
-						position, tokenIndex = position796, tokenIndex796
-						if buffer[position] != rune('L') {
-							goto l729
+						goto l797
+					l798:
+						position, tokenIndex = position797, tokenIndex797
+						if buffer[position] != rune('M') {
+							goto l796
 						}
 						position++
 					}
-				l796:
-				}
-			l731:
-				{
-					position798, tokenIndex798 := position, tokenIndex
+				l797:
 					{
 						position799, tokenIndex799 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						if buffer[position] != rune('u') {
 							goto l800
 						}
 						position++
 						goto l799
 					l800:
 						position, tokenIndex = position799, tokenIndex799
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l801
-						}
-						position++
-						goto l799
-					l801:
-						position, tokenIndex = position799, tokenIndex799
-						{
-							position803, tokenIndex803 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l804
-							}
-							position++
-							goto l803
-						l804:
-							position, tokenIndex = position803, tokenIndex803
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l802
-							}
-							position++
-						}
-					l803:
-						goto l799
-					l802:
-						position, tokenIndex = position799, tokenIndex799
-						if buffer[position] != rune('_') {
-							goto l798
+						if buffer[position] != rune('U') {
+							goto l796
 						}
 						position++
 					}
 				l799:
-					goto l729
-				l798:
-					position, tokenIndex = position798, tokenIndex798
-				}
-				add(ruleSVE2SpecialValue, position730)
-			}
-			return true
-		l729:
-			position, tokenIndex = position729, tokenIndex729
-			return false
-		},
-		/* 48 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
-		func() bool {
-			position805, tokenIndex805 := position, tokenIndex
-			{
-				position806 := position
-				{
-					position807, tokenIndex807 := position, tokenIndex
-					if !_rules[ruleSymbolRef]() {
-						goto l808
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l808
-					}
-					goto l807
-				l808:
-					position, tokenIndex = position807, tokenIndex807
-					if !_rules[ruleSymbolRef]() {
-						goto l809
-					}
-					goto l807
-				l809:
-					position, tokenIndex = position807, tokenIndex807
-					if !_rules[ruleLow12BitsSymbolRef]() {
-						goto l810
-					}
-					goto l807
-				l810:
-					position, tokenIndex = position807, tokenIndex807
-				l812:
 					{
-						position813, tokenIndex813 := position, tokenIndex
-						if !_rules[ruleOffset]() {
+						position801, tokenIndex801 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l802
+						}
+						position++
+						goto l801
+					l802:
+						position, tokenIndex = position801, tokenIndex801
+						if buffer[position] != rune('L') {
+							goto l796
+						}
+						position++
+					}
+				l801:
+					if buffer[position] != rune('3') {
+						goto l796
+					}
+					position++
+					goto l749
+				l796:
+					position, tokenIndex = position749, tokenIndex749
+					{
+						position804, tokenIndex804 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l805
+						}
+						position++
+						goto l804
+					l805:
+						position, tokenIndex = position804, tokenIndex804
+						if buffer[position] != rune('M') {
+							goto l803
+						}
+						position++
+					}
+				l804:
+					{
+						position806, tokenIndex806 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l807
+						}
+						position++
+						goto l806
+					l807:
+						position, tokenIndex = position806, tokenIndex806
+						if buffer[position] != rune('U') {
+							goto l803
+						}
+						position++
+					}
+				l806:
+					{
+						position808, tokenIndex808 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l809
+						}
+						position++
+						goto l808
+					l809:
+						position, tokenIndex = position808, tokenIndex808
+						if buffer[position] != rune('L') {
+							goto l803
+						}
+						position++
+					}
+				l808:
+					if buffer[position] != rune('4') {
+						goto l803
+					}
+					position++
+					goto l749
+				l803:
+					position, tokenIndex = position749, tokenIndex749
+					{
+						position810, tokenIndex810 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l811
+						}
+						position++
+						goto l810
+					l811:
+						position, tokenIndex = position810, tokenIndex810
+						if buffer[position] != rune('A') {
+							goto l747
+						}
+						position++
+					}
+				l810:
+					{
+						position812, tokenIndex812 := position, tokenIndex
+						if buffer[position] != rune('l') {
 							goto l813
 						}
+						position++
 						goto l812
 					l813:
-						position, tokenIndex = position813, tokenIndex813
+						position, tokenIndex = position812, tokenIndex812
+						if buffer[position] != rune('L') {
+							goto l747
+						}
+						position++
 					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l811
-					}
-					goto l807
-				l811:
-					position, tokenIndex = position807, tokenIndex807
-					if !_rules[ruleSegmentRegister]() {
+				l812:
+					{
+						position814, tokenIndex814 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l815
+						}
+						position++
 						goto l814
+					l815:
+						position, tokenIndex = position814, tokenIndex814
+						if buffer[position] != rune('L') {
+							goto l747
+						}
+						position++
 					}
-					if !_rules[ruleOffset]() {
-						goto l814
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l814
-					}
-					goto l807
 				l814:
-					position, tokenIndex = position807, tokenIndex807
-					if !_rules[ruleSegmentRegister]() {
-						goto l815
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l815
-					}
-					goto l807
-				l815:
-					position, tokenIndex = position807, tokenIndex807
-					if !_rules[ruleSegmentRegister]() {
-						goto l816
-					}
-					if !_rules[ruleOffset]() {
-						goto l816
-					}
-					goto l807
-				l816:
-					position, tokenIndex = position807, tokenIndex807
-					if !_rules[ruleARMBaseIndexScale]() {
-						goto l817
-					}
-					goto l807
-				l817:
-					position, tokenIndex = position807, tokenIndex807
-					if !_rules[ruleBaseIndexScale]() {
-						goto l805
-					}
 				}
-			l807:
-				add(ruleMemoryRef, position806)
+			l749:
+				{
+					position816, tokenIndex816 := position, tokenIndex
+					{
+						position817, tokenIndex817 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l818
+						}
+						position++
+						goto l817
+					l818:
+						position, tokenIndex = position817, tokenIndex817
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l819
+						}
+						position++
+						goto l817
+					l819:
+						position, tokenIndex = position817, tokenIndex817
+						{
+							position821, tokenIndex821 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l822
+							}
+							position++
+							goto l821
+						l822:
+							position, tokenIndex = position821, tokenIndex821
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l820
+							}
+							position++
+						}
+					l821:
+						goto l817
+					l820:
+						position, tokenIndex = position817, tokenIndex817
+						if buffer[position] != rune('_') {
+							goto l816
+						}
+						position++
+					}
+				l817:
+					goto l747
+				l816:
+					position, tokenIndex = position816, tokenIndex816
+				}
+				add(ruleSVE2SpecialValue, position748)
 			}
 			return true
-		l805:
-			position, tokenIndex = position805, tokenIndex805
+		l747:
+			position, tokenIndex = position747, tokenIndex747
 			return false
 		},
-		/* 49 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
+		/* 49 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position818, tokenIndex818 := position, tokenIndex
+			position823, tokenIndex823 := position, tokenIndex
 			{
-				position819 := position
+				position824 := position
 				{
-					position820, tokenIndex820 := position, tokenIndex
-				l822:
-					{
-						position823, tokenIndex823 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l823
-						}
-						goto l822
-					l823:
-						position, tokenIndex = position823, tokenIndex823
+					position825, tokenIndex825 := position, tokenIndex
+					if !_rules[ruleSymbolRef]() {
+						goto l826
 					}
-					if buffer[position] != rune('+') {
-						goto l820
+					if !_rules[ruleBaseIndexScale]() {
+						goto l826
 					}
-					position++
-					goto l821
-				l820:
-					position, tokenIndex = position820, tokenIndex820
-				}
-			l821:
-				{
-					position824, tokenIndex824 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l825
-					}
-					goto l824
-				l825:
-					position, tokenIndex = position824, tokenIndex824
-					if !_rules[ruleSymbolName]() {
-						goto l818
-					}
-				}
-			l824:
-			l826:
-				{
-					position827, tokenIndex827 := position, tokenIndex
-					if !_rules[ruleOffset]() {
+					goto l825
+				l826:
+					position, tokenIndex = position825, tokenIndex825
+					if !_rules[ruleSymbolRef]() {
 						goto l827
 					}
-					goto l826
+					goto l825
 				l827:
-					position, tokenIndex = position827, tokenIndex827
-				}
-				{
-					position828, tokenIndex828 := position, tokenIndex
-					if buffer[position] != rune('@') {
+					position, tokenIndex = position825, tokenIndex825
+					if !_rules[ruleLow12BitsSymbolRef]() {
 						goto l828
 					}
-					position++
-					if !_rules[ruleSection]() {
-						goto l828
-					}
+					goto l825
+				l828:
+					position, tokenIndex = position825, tokenIndex825
 				l830:
 					{
 						position831, tokenIndex831 := position, tokenIndex
@@ -6594,451 +6604,421 @@
 					l831:
 						position, tokenIndex = position831, tokenIndex831
 					}
-					goto l829
-				l828:
-					position, tokenIndex = position828, tokenIndex828
-				}
-			l829:
-				add(ruleSymbolRef, position819)
-			}
-			return true
-		l818:
-			position, tokenIndex = position818, tokenIndex818
-			return false
-		},
-		/* 50 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
-		func() bool {
-			position832, tokenIndex832 := position, tokenIndex
-			{
-				position833 := position
-				if buffer[position] != rune(':') {
-					goto l832
-				}
-				position++
-				{
-					position834, tokenIndex834 := position, tokenIndex
-					if buffer[position] != rune('l') {
+					if !_rules[ruleBaseIndexScale]() {
+						goto l829
+					}
+					goto l825
+				l829:
+					position, tokenIndex = position825, tokenIndex825
+					if !_rules[ruleSegmentRegister]() {
+						goto l832
+					}
+					if !_rules[ruleOffset]() {
+						goto l832
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l832
+					}
+					goto l825
+				l832:
+					position, tokenIndex = position825, tokenIndex825
+					if !_rules[ruleSegmentRegister]() {
+						goto l833
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l833
+					}
+					goto l825
+				l833:
+					position, tokenIndex = position825, tokenIndex825
+					if !_rules[ruleSegmentRegister]() {
+						goto l834
+					}
+					if !_rules[ruleOffset]() {
+						goto l834
+					}
+					goto l825
+				l834:
+					position, tokenIndex = position825, tokenIndex825
+					if !_rules[ruleARMBaseIndexScale]() {
 						goto l835
 					}
-					position++
-					goto l834
+					goto l825
 				l835:
-					position, tokenIndex = position834, tokenIndex834
-					if buffer[position] != rune('L') {
-						goto l832
-					}
-					position++
-				}
-			l834:
-				{
-					position836, tokenIndex836 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l837
-					}
-					position++
-					goto l836
-				l837:
-					position, tokenIndex = position836, tokenIndex836
-					if buffer[position] != rune('O') {
-						goto l832
-					}
-					position++
-				}
-			l836:
-				if buffer[position] != rune('1') {
-					goto l832
-				}
-				position++
-				if buffer[position] != rune('2') {
-					goto l832
-				}
-				position++
-				if buffer[position] != rune(':') {
-					goto l832
-				}
-				position++
-				{
-					position838, tokenIndex838 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l839
-					}
-					goto l838
-				l839:
-					position, tokenIndex = position838, tokenIndex838
-					if !_rules[ruleSymbolName]() {
-						goto l832
+					position, tokenIndex = position825, tokenIndex825
+					if !_rules[ruleBaseIndexScale]() {
+						goto l823
 					}
 				}
-			l838:
-				{
-					position840, tokenIndex840 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l840
-					}
-					goto l841
-				l840:
-					position, tokenIndex = position840, tokenIndex840
-				}
-			l841:
-				add(ruleLow12BitsSymbolRef, position833)
+			l825:
+				add(ruleMemoryRef, position824)
 			}
 			return true
-		l832:
-			position, tokenIndex = position832, tokenIndex832
+		l823:
+			position, tokenIndex = position823, tokenIndex823
 			return false
 		},
-		/* 51 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		/* 50 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
 		func() bool {
-			position842, tokenIndex842 := position, tokenIndex
+			position836, tokenIndex836 := position, tokenIndex
 			{
-				position843 := position
-				if buffer[position] != rune('[') {
-					goto l842
-				}
-				position++
-				if !_rules[ruleARMRegister]() {
-					goto l842
-				}
+				position837 := position
 				{
-					position844, tokenIndex844 := position, tokenIndex
-					if buffer[position] != rune(',') {
-						goto l844
+					position838, tokenIndex838 := position, tokenIndex
+				l840:
+					{
+						position841, tokenIndex841 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l841
+						}
+						goto l840
+					l841:
+						position, tokenIndex = position841, tokenIndex841
+					}
+					if buffer[position] != rune('+') {
+						goto l838
 					}
 					position++
-					{
-						position846, tokenIndex846 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l846
-						}
-						goto l847
-					l846:
-						position, tokenIndex = position846, tokenIndex846
+					goto l839
+				l838:
+					position, tokenIndex = position838, tokenIndex838
+				}
+			l839:
+				{
+					position842, tokenIndex842 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l843
 					}
-				l847:
-					{
-						position848, tokenIndex848 := position, tokenIndex
-						if buffer[position] != rune('#') {
-							goto l849
-						}
-						position++
-						if !_rules[ruleOffset]() {
-							goto l849
-						}
-						{
-							position850, tokenIndex850 := position, tokenIndex
-							{
-								position852, tokenIndex852 := position, tokenIndex
-								if buffer[position] != rune('*') {
-									goto l853
-								}
-								position++
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l853
-								}
-								position++
-							l854:
-								{
-									position855, tokenIndex855 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l855
-									}
-									position++
-									goto l854
-								l855:
-									position, tokenIndex = position855, tokenIndex855
-								}
-								goto l852
-							l853:
-								position, tokenIndex = position852, tokenIndex852
-								if buffer[position] != rune('*') {
-									goto l856
-								}
-								position++
-								if buffer[position] != rune('(') {
-									goto l856
-								}
-								position++
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l856
-								}
-								position++
-							l857:
-								{
-									position858, tokenIndex858 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l858
-									}
-									position++
-									goto l857
-								l858:
-									position, tokenIndex = position858, tokenIndex858
-								}
-								if !_rules[ruleOperator]() {
-									goto l856
-								}
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l856
-								}
-								position++
-							l859:
-								{
-									position860, tokenIndex860 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l860
-									}
-									position++
-									goto l859
-								l860:
-									position, tokenIndex = position860, tokenIndex860
-								}
-								if buffer[position] != rune(')') {
-									goto l856
-								}
-								position++
-								goto l852
-							l856:
-								position, tokenIndex = position852, tokenIndex852
-							l861:
-								{
-									position862, tokenIndex862 := position, tokenIndex
-									if buffer[position] != rune('+') {
-										goto l862
-									}
-									position++
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l862
-									}
-									position++
-								l863:
-									{
-										position864, tokenIndex864 := position, tokenIndex
-										if c := buffer[position]; c < rune('0') || c > rune('9') {
-											goto l864
-										}
-										position++
-										goto l863
-									l864:
-										position, tokenIndex = position864, tokenIndex864
-									}
-									goto l861
-								l862:
-									position, tokenIndex = position862, tokenIndex862
-								}
-							}
-						l852:
-							goto l851
-
-							position, tokenIndex = position850, tokenIndex850
-						}
-					l851:
-						goto l848
-					l849:
-						position, tokenIndex = position848, tokenIndex848
-						if !_rules[ruleARMGOTLow12]() {
-							goto l865
-						}
-						goto l848
-					l865:
-						position, tokenIndex = position848, tokenIndex848
-						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l866
-						}
-						goto l848
-					l866:
-						position, tokenIndex = position848, tokenIndex848
-						if !_rules[ruleARMRegister]() {
-							goto l844
-						}
+					goto l842
+				l843:
+					position, tokenIndex = position842, tokenIndex842
+					if !_rules[ruleSymbolName]() {
+						goto l836
+					}
+				}
+			l842:
+			l844:
+				{
+					position845, tokenIndex845 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l845
+					}
+					goto l844
+				l845:
+					position, tokenIndex = position845, tokenIndex845
+				}
+				{
+					position846, tokenIndex846 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l846
+					}
+					position++
+					if !_rules[ruleSection]() {
+						goto l846
 					}
 				l848:
 					{
-						position867, tokenIndex867 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l867
+						position849, tokenIndex849 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l849
 						}
-						position++
-						{
-							position869, tokenIndex869 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l869
-							}
-							goto l870
-						l869:
-							position, tokenIndex = position869, tokenIndex869
-						}
-					l870:
-						if !_rules[ruleARMConstantTweak]() {
-							goto l867
-						}
-						goto l868
-					l867:
-						position, tokenIndex = position867, tokenIndex867
+						goto l848
+					l849:
+						position, tokenIndex = position849, tokenIndex849
 					}
-				l868:
-					goto l845
-				l844:
-					position, tokenIndex = position844, tokenIndex844
+					goto l847
+				l846:
+					position, tokenIndex = position846, tokenIndex846
 				}
-			l845:
-				if buffer[position] != rune(']') {
-					goto l842
-				}
-				position++
-				{
-					position871, tokenIndex871 := position, tokenIndex
-					if !_rules[ruleARMPostincrement]() {
-						goto l871
-					}
-					goto l872
-				l871:
-					position, tokenIndex = position871, tokenIndex871
-				}
-			l872:
-				add(ruleARMBaseIndexScale, position843)
+			l847:
+				add(ruleSymbolRef, position837)
 			}
 			return true
-		l842:
-			position, tokenIndex = position842, tokenIndex842
+		l836:
+			position, tokenIndex = position836, tokenIndex836
 			return false
 		},
-		/* 52 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		/* 51 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
 		func() bool {
-			position873, tokenIndex873 := position, tokenIndex
+			position850, tokenIndex850 := position, tokenIndex
 			{
-				position874 := position
+				position851 := position
 				if buffer[position] != rune(':') {
-					goto l873
+					goto l850
 				}
 				position++
 				{
-					position875, tokenIndex875 := position, tokenIndex
-					if buffer[position] != rune('g') {
-						goto l876
-					}
-					position++
-					goto l875
-				l876:
-					position, tokenIndex = position875, tokenIndex875
-					if buffer[position] != rune('G') {
-						goto l873
-					}
-					position++
-				}
-			l875:
-				{
-					position877, tokenIndex877 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l878
-					}
-					position++
-					goto l877
-				l878:
-					position, tokenIndex = position877, tokenIndex877
-					if buffer[position] != rune('O') {
-						goto l873
-					}
-					position++
-				}
-			l877:
-				{
-					position879, tokenIndex879 := position, tokenIndex
-					if buffer[position] != rune('t') {
-						goto l880
-					}
-					position++
-					goto l879
-				l880:
-					position, tokenIndex = position879, tokenIndex879
-					if buffer[position] != rune('T') {
-						goto l873
-					}
-					position++
-				}
-			l879:
-				if buffer[position] != rune('_') {
-					goto l873
-				}
-				position++
-				{
-					position881, tokenIndex881 := position, tokenIndex
+					position852, tokenIndex852 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l882
+						goto l853
 					}
 					position++
-					goto l881
-				l882:
-					position, tokenIndex = position881, tokenIndex881
+					goto l852
+				l853:
+					position, tokenIndex = position852, tokenIndex852
 					if buffer[position] != rune('L') {
-						goto l873
+						goto l850
 					}
 					position++
 				}
-			l881:
+			l852:
 				{
-					position883, tokenIndex883 := position, tokenIndex
+					position854, tokenIndex854 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l884
+						goto l855
 					}
 					position++
-					goto l883
-				l884:
-					position, tokenIndex = position883, tokenIndex883
+					goto l854
+				l855:
+					position, tokenIndex = position854, tokenIndex854
 					if buffer[position] != rune('O') {
-						goto l873
+						goto l850
 					}
 					position++
 				}
-			l883:
+			l854:
 				if buffer[position] != rune('1') {
-					goto l873
+					goto l850
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l873
+					goto l850
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l873
+					goto l850
 				}
 				position++
-				if !_rules[ruleSymbolName]() {
-					goto l873
+				{
+					position856, tokenIndex856 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l857
+					}
+					goto l856
+				l857:
+					position, tokenIndex = position856, tokenIndex856
+					if !_rules[ruleSymbolName]() {
+						goto l850
+					}
 				}
-				add(ruleARMGOTLow12, position874)
+			l856:
+				{
+					position858, tokenIndex858 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l858
+					}
+					goto l859
+				l858:
+					position, tokenIndex = position858, tokenIndex858
+				}
+			l859:
+				add(ruleLow12BitsSymbolRef, position851)
 			}
 			return true
-		l873:
-			position, tokenIndex = position873, tokenIndex873
+		l850:
+			position, tokenIndex = position850, tokenIndex850
 			return false
 		},
-		/* 53 ARMPostincrement <- <'!'> */
+		/* 52 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
 		func() bool {
-			position885, tokenIndex885 := position, tokenIndex
+			position860, tokenIndex860 := position, tokenIndex
 			{
-				position886 := position
-				if buffer[position] != rune('!') {
-					goto l885
+				position861 := position
+				if buffer[position] != rune('[') {
+					goto l860
 				}
 				position++
-				add(ruleARMPostincrement, position886)
-			}
-			return true
-		l885:
-			position, tokenIndex = position885, tokenIndex885
-			return false
-		},
-		/* 54 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
-		func() bool {
-			position887, tokenIndex887 := position, tokenIndex
-			{
-				position888 := position
-				if buffer[position] != rune('(') {
-					goto l887
+				if !_rules[ruleARMRegister]() {
+					goto l860
+				}
+				{
+					position862, tokenIndex862 := position, tokenIndex
+					if buffer[position] != rune(',') {
+						goto l862
+					}
+					position++
+					{
+						position864, tokenIndex864 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l864
+						}
+						goto l865
+					l864:
+						position, tokenIndex = position864, tokenIndex864
+					}
+				l865:
+					{
+						position866, tokenIndex866 := position, tokenIndex
+						if buffer[position] != rune('#') {
+							goto l867
+						}
+						position++
+						if !_rules[ruleOffset]() {
+							goto l867
+						}
+						{
+							position868, tokenIndex868 := position, tokenIndex
+							{
+								position870, tokenIndex870 := position, tokenIndex
+								if buffer[position] != rune('*') {
+									goto l871
+								}
+								position++
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l871
+								}
+								position++
+							l872:
+								{
+									position873, tokenIndex873 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l873
+									}
+									position++
+									goto l872
+								l873:
+									position, tokenIndex = position873, tokenIndex873
+								}
+								goto l870
+							l871:
+								position, tokenIndex = position870, tokenIndex870
+								if buffer[position] != rune('*') {
+									goto l874
+								}
+								position++
+								if buffer[position] != rune('(') {
+									goto l874
+								}
+								position++
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l874
+								}
+								position++
+							l875:
+								{
+									position876, tokenIndex876 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l876
+									}
+									position++
+									goto l875
+								l876:
+									position, tokenIndex = position876, tokenIndex876
+								}
+								if !_rules[ruleOperator]() {
+									goto l874
+								}
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l874
+								}
+								position++
+							l877:
+								{
+									position878, tokenIndex878 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l878
+									}
+									position++
+									goto l877
+								l878:
+									position, tokenIndex = position878, tokenIndex878
+								}
+								if buffer[position] != rune(')') {
+									goto l874
+								}
+								position++
+								goto l870
+							l874:
+								position, tokenIndex = position870, tokenIndex870
+							l879:
+								{
+									position880, tokenIndex880 := position, tokenIndex
+									if buffer[position] != rune('+') {
+										goto l880
+									}
+									position++
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l880
+									}
+									position++
+								l881:
+									{
+										position882, tokenIndex882 := position, tokenIndex
+										if c := buffer[position]; c < rune('0') || c > rune('9') {
+											goto l882
+										}
+										position++
+										goto l881
+									l882:
+										position, tokenIndex = position882, tokenIndex882
+									}
+									goto l879
+								l880:
+									position, tokenIndex = position880, tokenIndex880
+								}
+							}
+						l870:
+							goto l869
+
+							position, tokenIndex = position868, tokenIndex868
+						}
+					l869:
+						goto l866
+					l867:
+						position, tokenIndex = position866, tokenIndex866
+						if !_rules[ruleARMGOTLow12]() {
+							goto l883
+						}
+						goto l866
+					l883:
+						position, tokenIndex = position866, tokenIndex866
+						if !_rules[ruleLow12BitsSymbolRef]() {
+							goto l884
+						}
+						goto l866
+					l884:
+						position, tokenIndex = position866, tokenIndex866
+						if !_rules[ruleARMRegister]() {
+							goto l862
+						}
+					}
+				l866:
+					{
+						position885, tokenIndex885 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l885
+						}
+						position++
+						{
+							position887, tokenIndex887 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l887
+							}
+							goto l888
+						l887:
+							position, tokenIndex = position887, tokenIndex887
+						}
+					l888:
+						if !_rules[ruleARMConstantTweak]() {
+							goto l885
+						}
+						goto l886
+					l885:
+						position, tokenIndex = position885, tokenIndex885
+					}
+				l886:
+					goto l863
+				l862:
+					position, tokenIndex = position862, tokenIndex862
+				}
+			l863:
+				if buffer[position] != rune(']') {
+					goto l860
 				}
 				position++
 				{
 					position889, tokenIndex889 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
+					if !_rules[ruleARMPostincrement]() {
 						goto l889
 					}
 					goto l890
@@ -7046,125 +7026,163 @@
 					position, tokenIndex = position889, tokenIndex889
 				}
 			l890:
-				{
-					position891, tokenIndex891 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l891
-					}
-					goto l892
-				l891:
-					position, tokenIndex = position891, tokenIndex891
-				}
-			l892:
-				{
-					position893, tokenIndex893 := position, tokenIndex
-					if buffer[position] != rune(',') {
-						goto l893
-					}
-					position++
-					{
-						position895, tokenIndex895 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l895
-						}
-						goto l896
-					l895:
-						position, tokenIndex = position895, tokenIndex895
-					}
-				l896:
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l893
-					}
-					{
-						position897, tokenIndex897 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l897
-						}
-						goto l898
-					l897:
-						position, tokenIndex = position897, tokenIndex897
-					}
-				l898:
-					{
-						position899, tokenIndex899 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l899
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l899
-						}
-						position++
-					l901:
-						{
-							position902, tokenIndex902 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l902
-							}
-							position++
-							goto l901
-						l902:
-							position, tokenIndex = position902, tokenIndex902
-						}
-						goto l900
-					l899:
-						position, tokenIndex = position899, tokenIndex899
-					}
-				l900:
-					goto l894
-				l893:
-					position, tokenIndex = position893, tokenIndex893
-				}
-			l894:
-				if buffer[position] != rune(')') {
-					goto l887
-				}
-				position++
-				add(ruleBaseIndexScale, position888)
+				add(ruleARMBaseIndexScale, position861)
 			}
 			return true
-		l887:
-			position, tokenIndex = position887, tokenIndex887
+		l860:
+			position, tokenIndex = position860, tokenIndex860
 			return false
 		},
-		/* 55 Operator <- <('+' / '-')> */
+		/* 53 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		func() bool {
+			position891, tokenIndex891 := position, tokenIndex
+			{
+				position892 := position
+				if buffer[position] != rune(':') {
+					goto l891
+				}
+				position++
+				{
+					position893, tokenIndex893 := position, tokenIndex
+					if buffer[position] != rune('g') {
+						goto l894
+					}
+					position++
+					goto l893
+				l894:
+					position, tokenIndex = position893, tokenIndex893
+					if buffer[position] != rune('G') {
+						goto l891
+					}
+					position++
+				}
+			l893:
+				{
+					position895, tokenIndex895 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l896
+					}
+					position++
+					goto l895
+				l896:
+					position, tokenIndex = position895, tokenIndex895
+					if buffer[position] != rune('O') {
+						goto l891
+					}
+					position++
+				}
+			l895:
+				{
+					position897, tokenIndex897 := position, tokenIndex
+					if buffer[position] != rune('t') {
+						goto l898
+					}
+					position++
+					goto l897
+				l898:
+					position, tokenIndex = position897, tokenIndex897
+					if buffer[position] != rune('T') {
+						goto l891
+					}
+					position++
+				}
+			l897:
+				if buffer[position] != rune('_') {
+					goto l891
+				}
+				position++
+				{
+					position899, tokenIndex899 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l900
+					}
+					position++
+					goto l899
+				l900:
+					position, tokenIndex = position899, tokenIndex899
+					if buffer[position] != rune('L') {
+						goto l891
+					}
+					position++
+				}
+			l899:
+				{
+					position901, tokenIndex901 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l902
+					}
+					position++
+					goto l901
+				l902:
+					position, tokenIndex = position901, tokenIndex901
+					if buffer[position] != rune('O') {
+						goto l891
+					}
+					position++
+				}
+			l901:
+				if buffer[position] != rune('1') {
+					goto l891
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l891
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l891
+				}
+				position++
+				if !_rules[ruleSymbolName]() {
+					goto l891
+				}
+				add(ruleARMGOTLow12, position892)
+			}
+			return true
+		l891:
+			position, tokenIndex = position891, tokenIndex891
+			return false
+		},
+		/* 54 ARMPostincrement <- <'!'> */
 		func() bool {
 			position903, tokenIndex903 := position, tokenIndex
 			{
 				position904 := position
-				{
-					position905, tokenIndex905 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l906
-					}
-					position++
-					goto l905
-				l906:
-					position, tokenIndex = position905, tokenIndex905
-					if buffer[position] != rune('-') {
-						goto l903
-					}
-					position++
+				if buffer[position] != rune('!') {
+					goto l903
 				}
-			l905:
-				add(ruleOperator, position904)
+				position++
+				add(ruleARMPostincrement, position904)
 			}
 			return true
 		l903:
 			position, tokenIndex = position903, tokenIndex903
 			return false
 		},
-		/* 56 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		/* 55 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
 		func() bool {
-			position907, tokenIndex907 := position, tokenIndex
+			position905, tokenIndex905 := position, tokenIndex
 			{
-				position908 := position
+				position906 := position
+				if buffer[position] != rune('(') {
+					goto l905
+				}
+				position++
+				{
+					position907, tokenIndex907 := position, tokenIndex
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l907
+					}
+					goto l908
+				l907:
+					position, tokenIndex = position907, tokenIndex907
+				}
+			l908:
 				{
 					position909, tokenIndex909 := position, tokenIndex
-					if buffer[position] != rune('+') {
+					if !_rules[ruleWS]() {
 						goto l909
 					}
-					position++
 					goto l910
 				l909:
 					position, tokenIndex = position909, tokenIndex909
@@ -7172,295 +7190,409 @@
 			l910:
 				{
 					position911, tokenIndex911 := position, tokenIndex
-					if buffer[position] != rune('-') {
+					if buffer[position] != rune(',') {
 						goto l911
 					}
 					position++
+					{
+						position913, tokenIndex913 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l913
+						}
+						goto l914
+					l913:
+						position, tokenIndex = position913, tokenIndex913
+					}
+				l914:
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l911
+					}
+					{
+						position915, tokenIndex915 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l915
+						}
+						goto l916
+					l915:
+						position, tokenIndex = position915, tokenIndex915
+					}
+				l916:
+					{
+						position917, tokenIndex917 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l917
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l917
+						}
+						position++
+					l919:
+						{
+							position920, tokenIndex920 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l920
+							}
+							position++
+							goto l919
+						l920:
+							position, tokenIndex = position920, tokenIndex920
+						}
+						goto l918
+					l917:
+						position, tokenIndex = position917, tokenIndex917
+					}
+				l918:
 					goto l912
 				l911:
 					position, tokenIndex = position911, tokenIndex911
 				}
 			l912:
-				{
-					position913, tokenIndex913 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l914
-					}
-					position++
-					{
-						position915, tokenIndex915 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l916
-						}
-						position++
-						goto l915
-					l916:
-						position, tokenIndex = position915, tokenIndex915
-						if buffer[position] != rune('B') {
-							goto l914
-						}
-						position++
-					}
-				l915:
-					{
-						position919, tokenIndex919 := position, tokenIndex
-						if buffer[position] != rune('0') {
-							goto l920
-						}
-						position++
-						goto l919
-					l920:
-						position, tokenIndex = position919, tokenIndex919
-						if buffer[position] != rune('1') {
-							goto l914
-						}
-						position++
-					}
-				l919:
-				l917:
-					{
-						position918, tokenIndex918 := position, tokenIndex
-						{
-							position921, tokenIndex921 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l922
-							}
-							position++
-							goto l921
-						l922:
-							position, tokenIndex = position921, tokenIndex921
-							if buffer[position] != rune('1') {
-								goto l918
-							}
-							position++
-						}
-					l921:
-						goto l917
-					l918:
-						position, tokenIndex = position918, tokenIndex918
-					}
-					goto l913
-				l914:
-					position, tokenIndex = position913, tokenIndex913
-					if buffer[position] != rune('0') {
-						goto l923
-					}
-					position++
-					{
-						position924, tokenIndex924 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l925
-						}
-						position++
-						goto l924
-					l925:
-						position, tokenIndex = position924, tokenIndex924
-						if buffer[position] != rune('X') {
-							goto l923
-						}
-						position++
-					}
-				l924:
-					{
-						position928, tokenIndex928 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l929
-						}
-						position++
-						goto l928
-					l929:
-						position, tokenIndex = position928, tokenIndex928
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l930
-						}
-						position++
-						goto l928
-					l930:
-						position, tokenIndex = position928, tokenIndex928
-						{
-							position931, tokenIndex931 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l932
-							}
-							position++
-							goto l931
-						l932:
-							position, tokenIndex = position931, tokenIndex931
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l923
-							}
-							position++
-						}
-					l931:
-					}
-				l928:
-				l926:
-					{
-						position927, tokenIndex927 := position, tokenIndex
-						{
-							position933, tokenIndex933 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l934
-							}
-							position++
-							goto l933
-						l934:
-							position, tokenIndex = position933, tokenIndex933
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l935
-							}
-							position++
-							goto l933
-						l935:
-							position, tokenIndex = position933, tokenIndex933
-							{
-								position936, tokenIndex936 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l937
-								}
-								position++
-								goto l936
-							l937:
-								position, tokenIndex = position936, tokenIndex936
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l927
-								}
-								position++
-							}
-						l936:
-						}
-					l933:
-						goto l926
-					l927:
-						position, tokenIndex = position927, tokenIndex927
-					}
-					goto l913
-				l923:
-					position, tokenIndex = position913, tokenIndex913
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l907
-					}
-					position++
-				l938:
-					{
-						position939, tokenIndex939 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l939
-						}
-						position++
-						goto l938
-					l939:
-						position, tokenIndex = position939, tokenIndex939
-					}
+				if buffer[position] != rune(')') {
+					goto l905
 				}
-			l913:
-				add(ruleOffset, position908)
+				position++
+				add(ruleBaseIndexScale, position906)
 			}
 			return true
-		l907:
-			position, tokenIndex = position907, tokenIndex907
+		l905:
+			position, tokenIndex = position905, tokenIndex905
 			return false
 		},
-		/* 57 Section <- <([a-z] / [A-Z] / '@')+> */
+		/* 56 Operator <- <('+' / '-')> */
 		func() bool {
-			position940, tokenIndex940 := position, tokenIndex
+			position921, tokenIndex921 := position, tokenIndex
 			{
-				position941 := position
+				position922 := position
 				{
-					position944, tokenIndex944 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l945
+					position923, tokenIndex923 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l924
 					}
 					position++
-					goto l944
-				l945:
-					position, tokenIndex = position944, tokenIndex944
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l946
-					}
-					position++
-					goto l944
-				l946:
-					position, tokenIndex = position944, tokenIndex944
-					if buffer[position] != rune('@') {
-						goto l940
+					goto l923
+				l924:
+					position, tokenIndex = position923, tokenIndex923
+					if buffer[position] != rune('-') {
+						goto l921
 					}
 					position++
 				}
-			l944:
-			l942:
+			l923:
+				add(ruleOperator, position922)
+			}
+			return true
+		l921:
+			position, tokenIndex = position921, tokenIndex921
+			return false
+		},
+		/* 57 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position925, tokenIndex925 := position, tokenIndex
+			{
+				position926 := position
 				{
-					position943, tokenIndex943 := position, tokenIndex
+					position927, tokenIndex927 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l927
+					}
+					position++
+					goto l928
+				l927:
+					position, tokenIndex = position927, tokenIndex927
+				}
+			l928:
+				{
+					position929, tokenIndex929 := position, tokenIndex
+					if buffer[position] != rune('-') {
+						goto l929
+					}
+					position++
+					goto l930
+				l929:
+					position, tokenIndex = position929, tokenIndex929
+				}
+			l930:
+				{
+					position931, tokenIndex931 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l932
+					}
+					position++
 					{
-						position947, tokenIndex947 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l948
+						position933, tokenIndex933 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l934
 						}
 						position++
-						goto l947
-					l948:
-						position, tokenIndex = position947, tokenIndex947
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l949
+						goto l933
+					l934:
+						position, tokenIndex = position933, tokenIndex933
+						if buffer[position] != rune('B') {
+							goto l932
 						}
 						position++
-						goto l947
-					l949:
-						position, tokenIndex = position947, tokenIndex947
-						if buffer[position] != rune('@') {
+					}
+				l933:
+					{
+						position937, tokenIndex937 := position, tokenIndex
+						if buffer[position] != rune('0') {
+							goto l938
+						}
+						position++
+						goto l937
+					l938:
+						position, tokenIndex = position937, tokenIndex937
+						if buffer[position] != rune('1') {
+							goto l932
+						}
+						position++
+					}
+				l937:
+				l935:
+					{
+						position936, tokenIndex936 := position, tokenIndex
+						{
+							position939, tokenIndex939 := position, tokenIndex
+							if buffer[position] != rune('0') {
+								goto l940
+							}
+							position++
+							goto l939
+						l940:
+							position, tokenIndex = position939, tokenIndex939
+							if buffer[position] != rune('1') {
+								goto l936
+							}
+							position++
+						}
+					l939:
+						goto l935
+					l936:
+						position, tokenIndex = position936, tokenIndex936
+					}
+					goto l931
+				l932:
+					position, tokenIndex = position931, tokenIndex931
+					if buffer[position] != rune('0') {
+						goto l941
+					}
+					position++
+					{
+						position942, tokenIndex942 := position, tokenIndex
+						if buffer[position] != rune('x') {
 							goto l943
 						}
 						position++
+						goto l942
+					l943:
+						position, tokenIndex = position942, tokenIndex942
+						if buffer[position] != rune('X') {
+							goto l941
+						}
+						position++
 					}
-				l947:
-					goto l942
-				l943:
-					position, tokenIndex = position943, tokenIndex943
+				l942:
+					{
+						position946, tokenIndex946 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l947
+						}
+						position++
+						goto l946
+					l947:
+						position, tokenIndex = position946, tokenIndex946
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l948
+						}
+						position++
+						goto l946
+					l948:
+						position, tokenIndex = position946, tokenIndex946
+						{
+							position949, tokenIndex949 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('f') {
+								goto l950
+							}
+							position++
+							goto l949
+						l950:
+							position, tokenIndex = position949, tokenIndex949
+							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l941
+							}
+							position++
+						}
+					l949:
+					}
+				l946:
+				l944:
+					{
+						position945, tokenIndex945 := position, tokenIndex
+						{
+							position951, tokenIndex951 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l952
+							}
+							position++
+							goto l951
+						l952:
+							position, tokenIndex = position951, tokenIndex951
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l953
+							}
+							position++
+							goto l951
+						l953:
+							position, tokenIndex = position951, tokenIndex951
+							{
+								position954, tokenIndex954 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('f') {
+									goto l955
+								}
+								position++
+								goto l954
+							l955:
+								position, tokenIndex = position954, tokenIndex954
+								if c := buffer[position]; c < rune('A') || c > rune('F') {
+									goto l945
+								}
+								position++
+							}
+						l954:
+						}
+					l951:
+						goto l944
+					l945:
+						position, tokenIndex = position945, tokenIndex945
+					}
+					goto l931
+				l941:
+					position, tokenIndex = position931, tokenIndex931
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l925
+					}
+					position++
+				l956:
+					{
+						position957, tokenIndex957 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l957
+						}
+						position++
+						goto l956
+					l957:
+						position, tokenIndex = position957, tokenIndex957
+					}
 				}
-				add(ruleSection, position941)
+			l931:
+				add(ruleOffset, position926)
 			}
 			return true
-		l940:
-			position, tokenIndex = position940, tokenIndex940
+		l925:
+			position, tokenIndex = position925, tokenIndex925
 			return false
 		},
-		/* 58 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		/* 58 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position950, tokenIndex950 := position, tokenIndex
+			position958, tokenIndex958 := position, tokenIndex
 			{
-				position951 := position
+				position959 := position
+				{
+					position962, tokenIndex962 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l963
+					}
+					position++
+					goto l962
+				l963:
+					position, tokenIndex = position962, tokenIndex962
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l964
+					}
+					position++
+					goto l962
+				l964:
+					position, tokenIndex = position962, tokenIndex962
+					if buffer[position] != rune('@') {
+						goto l958
+					}
+					position++
+				}
+			l962:
+			l960:
+				{
+					position961, tokenIndex961 := position, tokenIndex
+					{
+						position965, tokenIndex965 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l966
+						}
+						position++
+						goto l965
+					l966:
+						position, tokenIndex = position965, tokenIndex965
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l967
+						}
+						position++
+						goto l965
+					l967:
+						position, tokenIndex = position965, tokenIndex965
+						if buffer[position] != rune('@') {
+							goto l961
+						}
+						position++
+					}
+				l965:
+					goto l960
+				l961:
+					position, tokenIndex = position961, tokenIndex961
+				}
+				add(ruleSection, position959)
+			}
+			return true
+		l958:
+			position, tokenIndex = position958, tokenIndex958
+			return false
+		},
+		/* 59 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		func() bool {
+			position968, tokenIndex968 := position, tokenIndex
+			{
+				position969 := position
 				if buffer[position] != rune('%') {
-					goto l950
+					goto l968
 				}
 				position++
 				{
-					position952, tokenIndex952 := position, tokenIndex
+					position970, tokenIndex970 := position, tokenIndex
 					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l953
+						goto l971
 					}
 					position++
-					goto l952
-				l953:
-					position, tokenIndex = position952, tokenIndex952
+					goto l970
+				l971:
+					position, tokenIndex = position970, tokenIndex970
 					if buffer[position] != rune('s') {
-						goto l950
+						goto l968
 					}
 					position++
 				}
-			l952:
+			l970:
 				if buffer[position] != rune('s') {
-					goto l950
+					goto l968
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l950
+					goto l968
 				}
 				position++
-				add(ruleSegmentRegister, position951)
+				add(ruleSegmentRegister, position969)
 			}
 			return true
-		l950:
-			position, tokenIndex = position950, tokenIndex950
+		l968:
+			position, tokenIndex = position968, tokenIndex968
 			return false
 		},
 	}
diff --git a/util/fipstools/delocate/testdata/x86_64-Basic/in.s b/util/fipstools/delocate/testdata/x86_64-Basic/in.s
index 7e48e27..eb86c70 100644
--- a/util/fipstools/delocate/testdata/x86_64-Basic/in.s
+++ b/util/fipstools/delocate/testdata/x86_64-Basic/in.s
@@ -20,6 +20,7 @@
 	.loc 1 168 0 is_stmt 0 discriminator 1
 	cmpq	-8(%rbp), %rax
 	jmpq *%rax
+	notrack jmp *%rax
         movdqa  %xmm3,%xmm10
 	psrlq   $1,%xmm3
 	pxor    %xmm6,%xmm5
diff --git a/util/fipstools/delocate/testdata/x86_64-Basic/out.s b/util/fipstools/delocate/testdata/x86_64-Basic/out.s
index 657d090..f9c9fce 100644
--- a/util/fipstools/delocate/testdata/x86_64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-Basic/out.s
@@ -25,6 +25,7 @@
 	.loc 1 168 0 is_stmt 0 discriminator 1
 	cmpq	-8(%rbp), %rax
 	jmpq *%rax
+	notrack jmp *%rax
         movdqa  %xmm3,%xmm10
 	psrlq   $1,%xmm3
 	pxor    %xmm6,%xmm5
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
index 8ee70896..54f3526 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
@@ -8,17 +8,20 @@
 	# References to globals must be rewritten to their local targets.
 	call foo
 	jmp foo
+	notrack jmp foo
 	jbe foo
 	jne foo
 
 	# Jumps to PLT symbols are rewritten through redirectors.
 	call memcpy@PLT
 	jmp memcpy@PLT
+	notrack jmp memcpy@PLT
 	jbe memcpy@PLT
 
 	# Jumps to local PLT symbols use their local targets.
 	call foo@PLT
 	jmp foo@PLT
+	notrack jmp foo@PLT
 	jbe foo@PLT
 
 	# Synthesized symbols are treated as local ones.
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
index 03580d1..70d0338 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
@@ -16,6 +16,8 @@
 	call	.Lfoo_local_target
 # WAS jmp foo
 	jmp	.Lfoo_local_target
+# WAS notrack jmp foo
+	notrack	jmp	.Lfoo_local_target
 # WAS jbe foo
 	jbe	.Lfoo_local_target
 # WAS jne foo
@@ -26,6 +28,8 @@
 	call	bcm_redirector_memcpy
 # WAS jmp memcpy@PLT
 	jmp	bcm_redirector_memcpy
+# WAS notrack jmp memcpy@PLT
+	notrack	jmp	bcm_redirector_memcpy
 # WAS jbe memcpy@PLT
 	jbe	bcm_redirector_memcpy
 
@@ -34,6 +38,8 @@
 	call	.Lfoo_local_target
 # WAS jmp foo@PLT
 	jmp	.Lfoo_local_target
+# WAS notrack jmp foo@PLT
+	notrack	jmp	.Lfoo_local_target
 # WAS jbe foo@PLT
 	jbe	.Lfoo_local_target