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
 
