delocate: Support three-argument .prefalign

LLVM added a new kind of label-containing directive in
https://github.com/llvm/llvm-project/commit/193d7a6ace9f7016e03c90c63626fdb7fdf99bc0

Bug: 503846153
Change-Id: I9a6d5557f72d24acbecc06781d886144f2c034d7
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/93047
Presubmit-BoringSSL-Verified: boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com <boringssl-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Adam Langley <agl@google.com>
Commit-Queue: Adam Langley <agl@google.com>
Auto-Submit: David Benjamin <davidben@google.com>
diff --git a/util/fipstools/delocate/delocate.go b/util/fipstools/delocate/delocate.go
index fc529db..cc7e312 100644
--- a/util/fipstools/delocate/delocate.go
+++ b/util/fipstools/delocate/delocate.go
@@ -147,6 +147,8 @@
 			statement, err = d.processDirective(statement, node.up)
 		case ruleLabelContainingDirective:
 			statement, err = d.processLabelContainingDirective(statement, node.up)
+		case rulePrefAlignDirective:
+			statement, err = d.processPrefAlignDirective(statement, node.up)
 		case ruleSymbolDefiningDirective:
 			statement, err = d.processSymbolDefiningDirective(statement, node.up)
 		case ruleLabel:
@@ -377,6 +379,36 @@
 	return statement, nil
 }
 
+func (d *delocation) processPrefAlignDirective(statement, directive *node32) (*node32, error) {
+	assertNodeType(directive, ruleWS)
+	arg1 := directive.next
+	assertNodeType(arg1, ruleArg)
+
+	arg2 := skipWS(arg1.next)
+	if arg2 == nil {
+		d.writeNode(statement)
+		return statement, nil
+	}
+	assertNodeType(arg2, ruleSymbolArg)
+
+	arg3 := skipWS(arg2.next)
+	assertNodeType(arg3, ruleArg)
+
+	if arg3.next != nil {
+		panic("unexpected nodes")
+	}
+
+	assertNodeType(arg2.up, ruleSymbolExpr)
+	var b strings.Builder
+	if d.processSymbolExpr(arg2.up, &b) {
+		fmt.Fprintf(d.output, "\t.prefalign\t%s, %s, %s\n", d.contents(arg1), b.String(), d.contents(arg3))
+	} else {
+		d.writeNode(statement)
+	}
+
+	return statement, nil
+}
+
 func (d *delocation) processSymbolDefiningDirective(statement, directive *node32) (*node32, error) {
 	changed := false
 
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 7c1f7dc..aea46fc 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -32,6 +32,7 @@
                             LocationDirective /
                             SymbolDefiningDirective /
                             LabelContainingDirective /
+                            PrefAlignDirective /
                             Instruction /
                             Directive /
                             Comment / ) WS? ((Comment? '\n') / ';')))
@@ -50,6 +51,10 @@
 SymbolDefiningDirectiveName <- ".equiv" / ".equ" / ".set"
 LabelContainingDirective <- LabelContainingDirectiveName WS SymbolArgs
 LabelContainingDirectiveName <- ".xword" / ".word" / ".hword" / ".long" / ".byte" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
+# Prior to https://github.com/llvm/llvm-project/commit/193d7a6ace9f7016e03c90c63626fdb7fdf99bc0,
+# .prefalign took a single integer. Afterwards, it took three parameters with a
+# symbol as the second argument. Parse both forms.
+PrefAlignDirective <- ".prefalign" WS Arg (WS? ',' WS? SymbolArg WS? ',' WS? Arg)?
 SymbolArgs <- SymbolArg ((WS? ',' WS?) SymbolArg)*
 
 SymbolArg <- SymbolExpr
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index be08c33..55843db 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -34,6 +34,7 @@
 	ruleSymbolDefiningDirectiveName
 	ruleLabelContainingDirective
 	ruleLabelContainingDirectiveName
+	rulePrefAlignDirective
 	ruleSymbolArgs
 	ruleSymbolArg
 	ruleSymbolExpr
@@ -101,6 +102,7 @@
 	"SymbolDefiningDirectiveName",
 	"LabelContainingDirective",
 	"LabelContainingDirectiveName",
+	"PrefAlignDirective",
 	"SymbolArgs",
 	"SymbolArg",
 	"SymbolExpr",
@@ -262,7 +264,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [64]func() bool
+	rules  [65]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -473,7 +475,7 @@
 			position, tokenIndex = position0, tokenIndex0
 			return false
 		},
-		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / SymbolDefiningDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
+		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / SymbolDefiningDirective / LabelContainingDirective / PrefAlignDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
 		func() bool {
 			position5, tokenIndex5 := position, tokenIndex
 			{
@@ -522,61 +524,67 @@
 						goto l11
 					l15:
 						position, tokenIndex = position11, tokenIndex11
-						if !_rules[ruleInstruction]() {
+						if !_rules[rulePrefAlignDirective]() {
 							goto l16
 						}
 						goto l11
 					l16:
 						position, tokenIndex = position11, tokenIndex11
-						if !_rules[ruleDirective]() {
+						if !_rules[ruleInstruction]() {
 							goto l17
 						}
 						goto l11
 					l17:
 						position, tokenIndex = position11, tokenIndex11
-						if !_rules[ruleComment]() {
+						if !_rules[ruleDirective]() {
 							goto l18
 						}
 						goto l11
 					l18:
 						position, tokenIndex = position11, tokenIndex11
+						if !_rules[ruleComment]() {
+							goto l19
+						}
+						goto l11
+					l19:
+						position, tokenIndex = position11, tokenIndex11
 					}
 				l11:
 					{
-						position19, tokenIndex19 := position, tokenIndex
+						position20, tokenIndex20 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l19
+							goto l20
 						}
-						goto l20
-					l19:
-						position, tokenIndex = position19, tokenIndex19
+						goto l21
+					l20:
+						position, tokenIndex = position20, tokenIndex20
 					}
-				l20:
+				l21:
 					{
-						position21, tokenIndex21 := position, tokenIndex
+						position22, tokenIndex22 := position, tokenIndex
 						{
-							position23, tokenIndex23 := position, tokenIndex
+							position24, tokenIndex24 := position, tokenIndex
 							if !_rules[ruleComment]() {
-								goto l23
+								goto l24
 							}
-							goto l24
-						l23:
-							position, tokenIndex = position23, tokenIndex23
+							goto l25
+						l24:
+							position, tokenIndex = position24, tokenIndex24
 						}
-					l24:
+					l25:
 						if buffer[position] != rune('\n') {
-							goto l22
+							goto l23
 						}
 						position++
-						goto l21
-					l22:
-						position, tokenIndex = position21, tokenIndex21
+						goto l22
+					l23:
+						position, tokenIndex = position22, tokenIndex22
 						if buffer[position] != rune(';') {
 							goto l5
 						}
 						position++
 					}
-				l21:
+				l22:
 				}
 			l9:
 				add(ruleStatement, position6)
@@ -588,2390 +596,2416 @@
 		},
 		/* 2 GlobalDirective <- <((('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('a' / 'A') ('l' / 'L')) / ('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('l' / 'L'))) WS SymbolName)> */
 		func() bool {
-			position25, tokenIndex25 := position, tokenIndex
+			position26, tokenIndex26 := position, tokenIndex
 			{
-				position26 := position
+				position27 := position
 				{
-					position27, tokenIndex27 := position, tokenIndex
+					position28, tokenIndex28 := position, tokenIndex
 					if buffer[position] != rune('.') {
-						goto l28
-					}
-					position++
-					{
-						position29, tokenIndex29 := position, tokenIndex
-						if buffer[position] != rune('g') {
-							goto l30
-						}
-						position++
 						goto l29
-					l30:
-						position, tokenIndex = position29, tokenIndex29
-						if buffer[position] != rune('G') {
-							goto l28
-						}
-						position++
-					}
-				l29:
-					{
-						position31, tokenIndex31 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l32
-						}
-						position++
-						goto l31
-					l32:
-						position, tokenIndex = position31, tokenIndex31
-						if buffer[position] != rune('L') {
-							goto l28
-						}
-						position++
-					}
-				l31:
-					{
-						position33, tokenIndex33 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l34
-						}
-						position++
-						goto l33
-					l34:
-						position, tokenIndex = position33, tokenIndex33
-						if buffer[position] != rune('O') {
-							goto l28
-						}
-						position++
-					}
-				l33:
-					{
-						position35, tokenIndex35 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l36
-						}
-						position++
-						goto l35
-					l36:
-						position, tokenIndex = position35, tokenIndex35
-						if buffer[position] != rune('B') {
-							goto l28
-						}
-						position++
-					}
-				l35:
-					{
-						position37, tokenIndex37 := position, tokenIndex
-						if buffer[position] != rune('a') {
-							goto l38
-						}
-						position++
-						goto l37
-					l38:
-						position, tokenIndex = position37, tokenIndex37
-						if buffer[position] != rune('A') {
-							goto l28
-						}
-						position++
-					}
-				l37:
-					{
-						position39, tokenIndex39 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l40
-						}
-						position++
-						goto l39
-					l40:
-						position, tokenIndex = position39, tokenIndex39
-						if buffer[position] != rune('L') {
-							goto l28
-						}
-						position++
-					}
-				l39:
-					goto l27
-				l28:
-					position, tokenIndex = position27, tokenIndex27
-					if buffer[position] != rune('.') {
-						goto l25
 					}
 					position++
 					{
-						position41, tokenIndex41 := position, tokenIndex
+						position30, tokenIndex30 := position, tokenIndex
 						if buffer[position] != rune('g') {
-							goto l42
+							goto l31
 						}
 						position++
-						goto l41
-					l42:
-						position, tokenIndex = position41, tokenIndex41
+						goto l30
+					l31:
+						position, tokenIndex = position30, tokenIndex30
 						if buffer[position] != rune('G') {
-							goto l25
+							goto l29
 						}
 						position++
 					}
-				l41:
+				l30:
 					{
-						position43, tokenIndex43 := position, tokenIndex
+						position32, tokenIndex32 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l44
+							goto l33
 						}
 						position++
-						goto l43
-					l44:
-						position, tokenIndex = position43, tokenIndex43
+						goto l32
+					l33:
+						position, tokenIndex = position32, tokenIndex32
 						if buffer[position] != rune('L') {
-							goto l25
+							goto l29
 						}
 						position++
 					}
-				l43:
+				l32:
 					{
-						position45, tokenIndex45 := position, tokenIndex
+						position34, tokenIndex34 := position, tokenIndex
 						if buffer[position] != rune('o') {
-							goto l46
+							goto l35
 						}
 						position++
-						goto l45
-					l46:
-						position, tokenIndex = position45, tokenIndex45
+						goto l34
+					l35:
+						position, tokenIndex = position34, tokenIndex34
 						if buffer[position] != rune('O') {
-							goto l25
+							goto l29
 						}
 						position++
 					}
-				l45:
+				l34:
 					{
-						position47, tokenIndex47 := position, tokenIndex
+						position36, tokenIndex36 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l48
+							goto l37
 						}
 						position++
-						goto l47
-					l48:
-						position, tokenIndex = position47, tokenIndex47
+						goto l36
+					l37:
+						position, tokenIndex = position36, tokenIndex36
 						if buffer[position] != rune('B') {
-							goto l25
+							goto l29
 						}
 						position++
 					}
-				l47:
+				l36:
 					{
-						position49, tokenIndex49 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l50
+						position38, tokenIndex38 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l39
 						}
 						position++
-						goto l49
-					l50:
-						position, tokenIndex = position49, tokenIndex49
-						if buffer[position] != rune('L') {
-							goto l25
+						goto l38
+					l39:
+						position, tokenIndex = position38, tokenIndex38
+						if buffer[position] != rune('A') {
+							goto l29
 						}
 						position++
 					}
-				l49:
+				l38:
+					{
+						position40, tokenIndex40 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l41
+						}
+						position++
+						goto l40
+					l41:
+						position, tokenIndex = position40, tokenIndex40
+						if buffer[position] != rune('L') {
+							goto l29
+						}
+						position++
+					}
+				l40:
+					goto l28
+				l29:
+					position, tokenIndex = position28, tokenIndex28
+					if buffer[position] != rune('.') {
+						goto l26
+					}
+					position++
+					{
+						position42, tokenIndex42 := position, tokenIndex
+						if buffer[position] != rune('g') {
+							goto l43
+						}
+						position++
+						goto l42
+					l43:
+						position, tokenIndex = position42, tokenIndex42
+						if buffer[position] != rune('G') {
+							goto l26
+						}
+						position++
+					}
+				l42:
+					{
+						position44, tokenIndex44 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l45
+						}
+						position++
+						goto l44
+					l45:
+						position, tokenIndex = position44, tokenIndex44
+						if buffer[position] != rune('L') {
+							goto l26
+						}
+						position++
+					}
+				l44:
+					{
+						position46, tokenIndex46 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l47
+						}
+						position++
+						goto l46
+					l47:
+						position, tokenIndex = position46, tokenIndex46
+						if buffer[position] != rune('O') {
+							goto l26
+						}
+						position++
+					}
+				l46:
+					{
+						position48, tokenIndex48 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l49
+						}
+						position++
+						goto l48
+					l49:
+						position, tokenIndex = position48, tokenIndex48
+						if buffer[position] != rune('B') {
+							goto l26
+						}
+						position++
+					}
+				l48:
+					{
+						position50, tokenIndex50 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l51
+						}
+						position++
+						goto l50
+					l51:
+						position, tokenIndex = position50, tokenIndex50
+						if buffer[position] != rune('L') {
+							goto l26
+						}
+						position++
+					}
+				l50:
 				}
-			l27:
+			l28:
 				if !_rules[ruleWS]() {
-					goto l25
+					goto l26
 				}
 				if !_rules[ruleSymbolName]() {
-					goto l25
+					goto l26
 				}
-				add(ruleGlobalDirective, position26)
+				add(ruleGlobalDirective, position27)
 			}
 			return true
-		l25:
-			position, tokenIndex = position25, tokenIndex25
+		l26:
+			position, tokenIndex = position26, tokenIndex26
 			return false
 		},
 		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
 		func() bool {
-			position51, tokenIndex51 := position, tokenIndex
+			position52, tokenIndex52 := position, tokenIndex
 			{
-				position52 := position
+				position53 := position
 				if buffer[position] != rune('.') {
-					goto l51
+					goto l52
 				}
 				position++
 				if !_rules[ruleDirectiveName]() {
-					goto l51
+					goto l52
 				}
 				{
-					position53, tokenIndex53 := position, tokenIndex
+					position54, tokenIndex54 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l53
+						goto l54
 					}
 					if !_rules[ruleArgs]() {
-						goto l53
+						goto l54
 					}
-					goto l54
-				l53:
-					position, tokenIndex = position53, tokenIndex53
+					goto l55
+				l54:
+					position, tokenIndex = position54, tokenIndex54
 				}
-			l54:
-				add(ruleDirective, position52)
+			l55:
+				add(ruleDirective, position53)
 			}
 			return true
-		l51:
-			position, tokenIndex = position51, tokenIndex51
+		l52:
+			position, tokenIndex = position52, tokenIndex52
 			return false
 		},
 		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
 		func() bool {
-			position55, tokenIndex55 := position, tokenIndex
+			position56, tokenIndex56 := position, tokenIndex
 			{
-				position56 := position
+				position57 := position
 				{
-					position59, tokenIndex59 := position, tokenIndex
+					position60, tokenIndex60 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l60
-					}
-					position++
-					goto l59
-				l60:
-					position, tokenIndex = position59, tokenIndex59
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l61
 					}
 					position++
-					goto l59
+					goto l60
 				l61:
-					position, tokenIndex = position59, tokenIndex59
+					position, tokenIndex = position60, tokenIndex60
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l62
+					}
+					position++
+					goto l60
+				l62:
+					position, tokenIndex = position60, tokenIndex60
 					{
-						position63, tokenIndex63 := position, tokenIndex
+						position64, tokenIndex64 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l64
+							goto l65
 						}
 						position++
-						goto l63
-					l64:
-						position, tokenIndex = position63, tokenIndex63
+						goto l64
+					l65:
+						position, tokenIndex = position64, tokenIndex64
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l62
+							goto l63
 						}
 						position++
 					}
+				l64:
+					goto l60
 				l63:
-					goto l59
-				l62:
-					position, tokenIndex = position59, tokenIndex59
+					position, tokenIndex = position60, tokenIndex60
 					if buffer[position] != rune('_') {
-						goto l55
+						goto l56
 					}
 					position++
 				}
-			l59:
-			l57:
+			l60:
+			l58:
 				{
-					position58, tokenIndex58 := position, tokenIndex
+					position59, tokenIndex59 := position, tokenIndex
 					{
-						position65, tokenIndex65 := position, tokenIndex
+						position66, tokenIndex66 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l66
-						}
-						position++
-						goto l65
-					l66:
-						position, tokenIndex = position65, tokenIndex65
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
 							goto l67
 						}
 						position++
-						goto l65
+						goto l66
 					l67:
-						position, tokenIndex = position65, tokenIndex65
+						position, tokenIndex = position66, tokenIndex66
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l68
+						}
+						position++
+						goto l66
+					l68:
+						position, tokenIndex = position66, tokenIndex66
 						{
-							position69, tokenIndex69 := position, tokenIndex
+							position70, tokenIndex70 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l70
+								goto l71
 							}
 							position++
-							goto l69
-						l70:
-							position, tokenIndex = position69, tokenIndex69
+							goto l70
+						l71:
+							position, tokenIndex = position70, tokenIndex70
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l68
+								goto l69
 							}
 							position++
 						}
+					l70:
+						goto l66
 					l69:
-						goto l65
-					l68:
-						position, tokenIndex = position65, tokenIndex65
+						position, tokenIndex = position66, tokenIndex66
 						if buffer[position] != rune('_') {
-							goto l58
+							goto l59
 						}
 						position++
 					}
-				l65:
-					goto l57
-				l58:
-					position, tokenIndex = position58, tokenIndex58
+				l66:
+					goto l58
+				l59:
+					position, tokenIndex = position59, tokenIndex59
 				}
-				add(ruleDirectiveName, position56)
+				add(ruleDirectiveName, position57)
 			}
 			return true
-		l55:
-			position, tokenIndex = position55, tokenIndex55
+		l56:
+			position, tokenIndex = position56, tokenIndex56
 			return false
 		},
 		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
 		func() bool {
-			position71, tokenIndex71 := position, tokenIndex
+			position72, tokenIndex72 := position, tokenIndex
 			{
-				position72 := position
+				position73 := position
 				{
-					position73, tokenIndex73 := position, tokenIndex
+					position74, tokenIndex74 := position, tokenIndex
 					if !_rules[ruleFileDirective]() {
-						goto l74
+						goto l75
 					}
-					goto l73
-				l74:
-					position, tokenIndex = position73, tokenIndex73
+					goto l74
+				l75:
+					position, tokenIndex = position74, tokenIndex74
 					if !_rules[ruleLocDirective]() {
-						goto l71
+						goto l72
 					}
 				}
-			l73:
-				add(ruleLocationDirective, position72)
+			l74:
+				add(ruleLocationDirective, position73)
 			}
 			return true
-		l71:
-			position, tokenIndex = position71, tokenIndex71
+		l72:
+			position, tokenIndex = position72, tokenIndex72
 			return false
 		},
 		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
 		func() bool {
-			position75, tokenIndex75 := position, tokenIndex
+			position76, tokenIndex76 := position, tokenIndex
 			{
-				position76 := position
+				position77 := position
 				if buffer[position] != rune('.') {
-					goto l75
+					goto l76
 				}
 				position++
 				{
-					position77, tokenIndex77 := position, tokenIndex
+					position78, tokenIndex78 := position, tokenIndex
 					if buffer[position] != rune('f') {
-						goto l78
+						goto l79
 					}
 					position++
-					goto l77
-				l78:
-					position, tokenIndex = position77, tokenIndex77
+					goto l78
+				l79:
+					position, tokenIndex = position78, tokenIndex78
 					if buffer[position] != rune('F') {
-						goto l75
+						goto l76
 					}
 					position++
 				}
-			l77:
+			l78:
 				{
-					position79, tokenIndex79 := position, tokenIndex
+					position80, tokenIndex80 := position, tokenIndex
 					if buffer[position] != rune('i') {
-						goto l80
+						goto l81
 					}
 					position++
-					goto l79
-				l80:
-					position, tokenIndex = position79, tokenIndex79
+					goto l80
+				l81:
+					position, tokenIndex = position80, tokenIndex80
 					if buffer[position] != rune('I') {
-						goto l75
+						goto l76
 					}
 					position++
 				}
-			l79:
+			l80:
 				{
-					position81, tokenIndex81 := position, tokenIndex
+					position82, tokenIndex82 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l82
+						goto l83
 					}
 					position++
-					goto l81
-				l82:
-					position, tokenIndex = position81, tokenIndex81
+					goto l82
+				l83:
+					position, tokenIndex = position82, tokenIndex82
 					if buffer[position] != rune('L') {
-						goto l75
+						goto l76
 					}
 					position++
 				}
-			l81:
+			l82:
 				{
-					position83, tokenIndex83 := position, tokenIndex
+					position84, tokenIndex84 := position, tokenIndex
 					if buffer[position] != rune('e') {
-						goto l84
+						goto l85
 					}
 					position++
-					goto l83
-				l84:
-					position, tokenIndex = position83, tokenIndex83
+					goto l84
+				l85:
+					position, tokenIndex = position84, tokenIndex84
 					if buffer[position] != rune('E') {
-						goto l75
+						goto l76
 					}
 					position++
 				}
-			l83:
+			l84:
 				if !_rules[ruleWS]() {
-					goto l75
+					goto l76
 				}
 				{
+					position88, tokenIndex88 := position, tokenIndex
+					{
+						position89, tokenIndex89 := position, tokenIndex
+						if buffer[position] != rune('#') {
+							goto l90
+						}
+						position++
+						goto l89
+					l90:
+						position, tokenIndex = position89, tokenIndex89
+						if buffer[position] != rune('\n') {
+							goto l88
+						}
+						position++
+					}
+				l89:
+					goto l76
+				l88:
+					position, tokenIndex = position88, tokenIndex88
+				}
+				if !matchDot() {
+					goto l76
+				}
+			l86:
+				{
 					position87, tokenIndex87 := position, tokenIndex
 					{
-						position88, tokenIndex88 := position, tokenIndex
-						if buffer[position] != rune('#') {
-							goto l89
+						position91, tokenIndex91 := position, tokenIndex
+						{
+							position92, tokenIndex92 := position, tokenIndex
+							if buffer[position] != rune('#') {
+								goto l93
+							}
+							position++
+							goto l92
+						l93:
+							position, tokenIndex = position92, tokenIndex92
+							if buffer[position] != rune('\n') {
+								goto l91
+							}
+							position++
 						}
-						position++
-						goto l88
-					l89:
-						position, tokenIndex = position88, tokenIndex88
-						if buffer[position] != rune('\n') {
-							goto l87
-						}
-						position++
+					l92:
+						goto l87
+					l91:
+						position, tokenIndex = position91, tokenIndex91
 					}
-				l88:
-					goto l75
+					if !matchDot() {
+						goto l87
+					}
+					goto l86
 				l87:
 					position, tokenIndex = position87, tokenIndex87
 				}
-				if !matchDot() {
-					goto l75
-				}
-			l85:
-				{
-					position86, tokenIndex86 := position, tokenIndex
-					{
-						position90, tokenIndex90 := position, tokenIndex
-						{
-							position91, tokenIndex91 := position, tokenIndex
-							if buffer[position] != rune('#') {
-								goto l92
-							}
-							position++
-							goto l91
-						l92:
-							position, tokenIndex = position91, tokenIndex91
-							if buffer[position] != rune('\n') {
-								goto l90
-							}
-							position++
-						}
-					l91:
-						goto l86
-					l90:
-						position, tokenIndex = position90, tokenIndex90
-					}
-					if !matchDot() {
-						goto l86
-					}
-					goto l85
-				l86:
-					position, tokenIndex = position86, tokenIndex86
-				}
-				add(ruleFileDirective, position76)
+				add(ruleFileDirective, position77)
 			}
 			return true
-		l75:
-			position, tokenIndex = position75, tokenIndex75
+		l76:
+			position, tokenIndex = position76, tokenIndex76
 			return false
 		},
 		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
 		func() bool {
-			position93, tokenIndex93 := position, tokenIndex
+			position94, tokenIndex94 := position, tokenIndex
 			{
-				position94 := position
+				position95 := position
 				if buffer[position] != rune('.') {
-					goto l93
+					goto l94
 				}
 				position++
 				{
-					position95, tokenIndex95 := position, tokenIndex
+					position96, tokenIndex96 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l96
+						goto l97
 					}
 					position++
-					goto l95
-				l96:
-					position, tokenIndex = position95, tokenIndex95
+					goto l96
+				l97:
+					position, tokenIndex = position96, tokenIndex96
 					if buffer[position] != rune('L') {
-						goto l93
+						goto l94
 					}
 					position++
 				}
-			l95:
+			l96:
 				{
-					position97, tokenIndex97 := position, tokenIndex
+					position98, tokenIndex98 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l98
+						goto l99
 					}
 					position++
-					goto l97
-				l98:
-					position, tokenIndex = position97, tokenIndex97
+					goto l98
+				l99:
+					position, tokenIndex = position98, tokenIndex98
 					if buffer[position] != rune('O') {
-						goto l93
+						goto l94
 					}
 					position++
 				}
-			l97:
+			l98:
 				{
-					position99, tokenIndex99 := position, tokenIndex
+					position100, tokenIndex100 := position, tokenIndex
 					if buffer[position] != rune('c') {
-						goto l100
+						goto l101
 					}
 					position++
-					goto l99
-				l100:
-					position, tokenIndex = position99, tokenIndex99
+					goto l100
+				l101:
+					position, tokenIndex = position100, tokenIndex100
 					if buffer[position] != rune('C') {
-						goto l93
+						goto l94
 					}
 					position++
 				}
-			l99:
+			l100:
 				if !_rules[ruleWS]() {
-					goto l93
+					goto l94
 				}
 				{
-					position103, tokenIndex103 := position, tokenIndex
+					position104, tokenIndex104 := position, tokenIndex
 					{
-						position104, tokenIndex104 := position, tokenIndex
+						position105, tokenIndex105 := position, tokenIndex
 						if buffer[position] != rune('#') {
-							goto l105
-						}
-						position++
-						goto l104
-					l105:
-						position, tokenIndex = position104, tokenIndex104
-						if buffer[position] != rune('/') {
 							goto l106
 						}
 						position++
-						goto l104
+						goto l105
 					l106:
-						position, tokenIndex = position104, tokenIndex104
+						position, tokenIndex = position105, tokenIndex105
+						if buffer[position] != rune('/') {
+							goto l107
+						}
+						position++
+						goto l105
+					l107:
+						position, tokenIndex = position105, tokenIndex105
 						if buffer[position] != rune('\n') {
-							goto l103
+							goto l104
 						}
 						position++
 					}
+				l105:
+					goto l94
 				l104:
-					goto l93
-				l103:
-					position, tokenIndex = position103, tokenIndex103
+					position, tokenIndex = position104, tokenIndex104
 				}
 				if !matchDot() {
-					goto l93
+					goto l94
 				}
-			l101:
+			l102:
 				{
-					position102, tokenIndex102 := position, tokenIndex
+					position103, tokenIndex103 := position, tokenIndex
 					{
-						position107, tokenIndex107 := position, tokenIndex
+						position108, tokenIndex108 := position, tokenIndex
 						{
-							position108, tokenIndex108 := position, tokenIndex
+							position109, tokenIndex109 := position, tokenIndex
 							if buffer[position] != rune('#') {
-								goto l109
-							}
-							position++
-							goto l108
-						l109:
-							position, tokenIndex = position108, tokenIndex108
-							if buffer[position] != rune('/') {
 								goto l110
 							}
 							position++
-							goto l108
+							goto l109
 						l110:
-							position, tokenIndex = position108, tokenIndex108
+							position, tokenIndex = position109, tokenIndex109
+							if buffer[position] != rune('/') {
+								goto l111
+							}
+							position++
+							goto l109
+						l111:
+							position, tokenIndex = position109, tokenIndex109
 							if buffer[position] != rune('\n') {
-								goto l107
+								goto l108
 							}
 							position++
 						}
+					l109:
+						goto l103
 					l108:
-						goto l102
-					l107:
-						position, tokenIndex = position107, tokenIndex107
+						position, tokenIndex = position108, tokenIndex108
 					}
 					if !matchDot() {
-						goto l102
+						goto l103
 					}
-					goto l101
-				l102:
-					position, tokenIndex = position102, tokenIndex102
+					goto l102
+				l103:
+					position, tokenIndex = position103, tokenIndex103
 				}
-				add(ruleLocDirective, position94)
+				add(ruleLocDirective, position95)
 			}
 			return true
-		l93:
-			position, tokenIndex = position93, tokenIndex93
+		l94:
+			position, tokenIndex = position94, tokenIndex94
 			return false
 		},
 		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
 		func() bool {
-			position111, tokenIndex111 := position, tokenIndex
+			position112, tokenIndex112 := position, tokenIndex
 			{
-				position112 := position
+				position113 := position
 				if !_rules[ruleArg]() {
-					goto l111
+					goto l112
 				}
-			l113:
+			l114:
 				{
-					position114, tokenIndex114 := position, tokenIndex
+					position115, tokenIndex115 := position, tokenIndex
 					{
-						position115, tokenIndex115 := position, tokenIndex
+						position116, tokenIndex116 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l115
+							goto l116
 						}
-						goto l116
-					l115:
-						position, tokenIndex = position115, tokenIndex115
+						goto l117
+					l116:
+						position, tokenIndex = position116, tokenIndex116
 					}
-				l116:
+				l117:
 					if buffer[position] != rune(',') {
-						goto l114
+						goto l115
 					}
 					position++
 					{
-						position117, tokenIndex117 := position, tokenIndex
+						position118, tokenIndex118 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l117
+							goto l118
 						}
-						goto l118
-					l117:
-						position, tokenIndex = position117, tokenIndex117
+						goto l119
+					l118:
+						position, tokenIndex = position118, tokenIndex118
 					}
-				l118:
+				l119:
 					if !_rules[ruleArg]() {
-						goto l114
+						goto l115
 					}
-					goto l113
-				l114:
-					position, tokenIndex = position114, tokenIndex114
+					goto l114
+				l115:
+					position, tokenIndex = position115, tokenIndex115
 				}
-				add(ruleArgs, position112)
+				add(ruleArgs, position113)
 			}
 			return true
-		l111:
-			position, tokenIndex = position111, tokenIndex111
+		l112:
+			position, tokenIndex = position112, tokenIndex112
 			return false
 		},
 		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.' / '$')*)> */
 		func() bool {
 			{
-				position120 := position
+				position121 := position
 				{
-					position121, tokenIndex121 := position, tokenIndex
+					position122, tokenIndex122 := position, tokenIndex
 					if !_rules[ruleQuotedArg]() {
-						goto l122
+						goto l123
 					}
-					goto l121
-				l122:
-					position, tokenIndex = position121, tokenIndex121
+					goto l122
 				l123:
+					position, tokenIndex = position122, tokenIndex122
+				l124:
 					{
-						position124, tokenIndex124 := position, tokenIndex
+						position125, tokenIndex125 := position, tokenIndex
 						{
-							position125, tokenIndex125 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l126
-							}
-							position++
-							goto l125
-						l126:
-							position, tokenIndex = position125, tokenIndex125
+							position126, tokenIndex126 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l127
 							}
 							position++
-							goto l125
+							goto l126
 						l127:
-							position, tokenIndex = position125, tokenIndex125
-							{
-								position129, tokenIndex129 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('z') {
-									goto l130
-								}
-								position++
-								goto l129
-							l130:
-								position, tokenIndex = position129, tokenIndex129
-								if c := buffer[position]; c < rune('A') || c > rune('Z') {
-									goto l128
-								}
-								position++
-							}
-						l129:
-							goto l125
-						l128:
-							position, tokenIndex = position125, tokenIndex125
-							if buffer[position] != rune('%') {
-								goto l131
+							position, tokenIndex = position126, tokenIndex126
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l128
 							}
 							position++
-							goto l125
-						l131:
-							position, tokenIndex = position125, tokenIndex125
-							if buffer[position] != rune('+') {
+							goto l126
+						l128:
+							position, tokenIndex = position126, tokenIndex126
+							{
+								position130, tokenIndex130 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('z') {
+									goto l131
+								}
+								position++
+								goto l130
+							l131:
+								position, tokenIndex = position130, tokenIndex130
+								if c := buffer[position]; c < rune('A') || c > rune('Z') {
+									goto l129
+								}
+								position++
+							}
+						l130:
+							goto l126
+						l129:
+							position, tokenIndex = position126, tokenIndex126
+							if buffer[position] != rune('%') {
 								goto l132
 							}
 							position++
-							goto l125
+							goto l126
 						l132:
-							position, tokenIndex = position125, tokenIndex125
-							if buffer[position] != rune('-') {
+							position, tokenIndex = position126, tokenIndex126
+							if buffer[position] != rune('+') {
 								goto l133
 							}
 							position++
-							goto l125
+							goto l126
 						l133:
-							position, tokenIndex = position125, tokenIndex125
-							if buffer[position] != rune('*') {
+							position, tokenIndex = position126, tokenIndex126
+							if buffer[position] != rune('-') {
 								goto l134
 							}
 							position++
-							goto l125
+							goto l126
 						l134:
-							position, tokenIndex = position125, tokenIndex125
-							if buffer[position] != rune('_') {
+							position, tokenIndex = position126, tokenIndex126
+							if buffer[position] != rune('*') {
 								goto l135
 							}
 							position++
-							goto l125
+							goto l126
 						l135:
-							position, tokenIndex = position125, tokenIndex125
-							if buffer[position] != rune('@') {
+							position, tokenIndex = position126, tokenIndex126
+							if buffer[position] != rune('_') {
 								goto l136
 							}
 							position++
-							goto l125
+							goto l126
 						l136:
-							position, tokenIndex = position125, tokenIndex125
-							if buffer[position] != rune('.') {
+							position, tokenIndex = position126, tokenIndex126
+							if buffer[position] != rune('@') {
 								goto l137
 							}
 							position++
-							goto l125
+							goto l126
 						l137:
-							position, tokenIndex = position125, tokenIndex125
+							position, tokenIndex = position126, tokenIndex126
+							if buffer[position] != rune('.') {
+								goto l138
+							}
+							position++
+							goto l126
+						l138:
+							position, tokenIndex = position126, tokenIndex126
 							if buffer[position] != rune('$') {
-								goto l124
+								goto l125
 							}
 							position++
 						}
+					l126:
+						goto l124
 					l125:
-						goto l123
-					l124:
-						position, tokenIndex = position124, tokenIndex124
+						position, tokenIndex = position125, tokenIndex125
 					}
 				}
-			l121:
-				add(ruleArg, position120)
+			l122:
+				add(ruleArg, position121)
 			}
 			return true
 		},
 		/* 10 QuotedArg <- <('"' QuotedText '"')> */
 		func() bool {
-			position138, tokenIndex138 := position, tokenIndex
+			position139, tokenIndex139 := position, tokenIndex
 			{
-				position139 := position
+				position140 := position
 				if buffer[position] != rune('"') {
-					goto l138
+					goto l139
 				}
 				position++
 				if !_rules[ruleQuotedText]() {
-					goto l138
+					goto l139
 				}
 				if buffer[position] != rune('"') {
-					goto l138
+					goto l139
 				}
 				position++
-				add(ruleQuotedArg, position139)
+				add(ruleQuotedArg, position140)
 			}
 			return true
-		l138:
-			position, tokenIndex = position138, tokenIndex138
+		l139:
+			position, tokenIndex = position139, tokenIndex139
 			return false
 		},
 		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
 		func() bool {
 			{
-				position141 := position
-			l142:
+				position142 := position
+			l143:
 				{
-					position143, tokenIndex143 := position, tokenIndex
+					position144, tokenIndex144 := position, tokenIndex
 					{
-						position144, tokenIndex144 := position, tokenIndex
+						position145, tokenIndex145 := position, tokenIndex
 						if !_rules[ruleEscapedChar]() {
-							goto l145
+							goto l146
 						}
-						goto l144
-					l145:
-						position, tokenIndex = position144, tokenIndex144
+						goto l145
+					l146:
+						position, tokenIndex = position145, tokenIndex145
 						{
-							position146, tokenIndex146 := position, tokenIndex
+							position147, tokenIndex147 := position, tokenIndex
 							if buffer[position] != rune('"') {
-								goto l146
+								goto l147
 							}
 							position++
-							goto l143
-						l146:
-							position, tokenIndex = position146, tokenIndex146
+							goto l144
+						l147:
+							position, tokenIndex = position147, tokenIndex147
 						}
 						if !matchDot() {
-							goto l143
+							goto l144
 						}
 					}
+				l145:
+					goto l143
 				l144:
-					goto l142
-				l143:
-					position, tokenIndex = position143, tokenIndex143
+					position, tokenIndex = position144, tokenIndex144
 				}
-				add(ruleQuotedText, position141)
+				add(ruleQuotedText, position142)
 			}
 			return true
 		},
 		/* 12 SymbolDefiningDirective <- <((SymbolDefiningDirectiveName WS (LocalSymbol / SymbolName) WS? ',' WS? SymbolArg) / ((LocalSymbol / SymbolName) WS? '=' WS? SymbolArg))> */
 		func() bool {
-			position147, tokenIndex147 := position, tokenIndex
+			position148, tokenIndex148 := position, tokenIndex
 			{
-				position148 := position
+				position149 := position
 				{
-					position149, tokenIndex149 := position, tokenIndex
+					position150, tokenIndex150 := position, tokenIndex
 					if !_rules[ruleSymbolDefiningDirectiveName]() {
-						goto l150
+						goto l151
 					}
 					if !_rules[ruleWS]() {
-						goto l150
-					}
-					{
-						position151, tokenIndex151 := position, tokenIndex
-						if !_rules[ruleLocalSymbol]() {
-							goto l152
-						}
 						goto l151
-					l152:
-						position, tokenIndex = position151, tokenIndex151
-						if !_rules[ruleSymbolName]() {
-							goto l150
-						}
 					}
-				l151:
 					{
-						position153, tokenIndex153 := position, tokenIndex
-						if !_rules[ruleWS]() {
+						position152, tokenIndex152 := position, tokenIndex
+						if !_rules[ruleLocalSymbol]() {
 							goto l153
 						}
-						goto l154
+						goto l152
 					l153:
-						position, tokenIndex = position153, tokenIndex153
+						position, tokenIndex = position152, tokenIndex152
+						if !_rules[ruleSymbolName]() {
+							goto l151
+						}
 					}
-				l154:
+				l152:
+					{
+						position154, tokenIndex154 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l154
+						}
+						goto l155
+					l154:
+						position, tokenIndex = position154, tokenIndex154
+					}
+				l155:
 					if buffer[position] != rune(',') {
-						goto l150
+						goto l151
 					}
 					position++
 					{
-						position155, tokenIndex155 := position, tokenIndex
+						position156, tokenIndex156 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l155
-						}
-						goto l156
-					l155:
-						position, tokenIndex = position155, tokenIndex155
-					}
-				l156:
-					if !_rules[ruleSymbolArg]() {
-						goto l150
-					}
-					goto l149
-				l150:
-					position, tokenIndex = position149, tokenIndex149
-					{
-						position157, tokenIndex157 := position, tokenIndex
-						if !_rules[ruleLocalSymbol]() {
-							goto l158
+							goto l156
 						}
 						goto l157
-					l158:
-						position, tokenIndex = position157, tokenIndex157
-						if !_rules[ruleSymbolName]() {
-							goto l147
-						}
+					l156:
+						position, tokenIndex = position156, tokenIndex156
 					}
 				l157:
+					if !_rules[ruleSymbolArg]() {
+						goto l151
+					}
+					goto l150
+				l151:
+					position, tokenIndex = position150, tokenIndex150
 					{
-						position159, tokenIndex159 := position, tokenIndex
-						if !_rules[ruleWS]() {
+						position158, tokenIndex158 := position, tokenIndex
+						if !_rules[ruleLocalSymbol]() {
 							goto l159
 						}
-						goto l160
+						goto l158
 					l159:
-						position, tokenIndex = position159, tokenIndex159
+						position, tokenIndex = position158, tokenIndex158
+						if !_rules[ruleSymbolName]() {
+							goto l148
+						}
 					}
-				l160:
+				l158:
+					{
+						position160, tokenIndex160 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l160
+						}
+						goto l161
+					l160:
+						position, tokenIndex = position160, tokenIndex160
+					}
+				l161:
 					if buffer[position] != rune('=') {
-						goto l147
+						goto l148
 					}
 					position++
 					{
-						position161, tokenIndex161 := position, tokenIndex
+						position162, tokenIndex162 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l161
+							goto l162
 						}
-						goto l162
-					l161:
-						position, tokenIndex = position161, tokenIndex161
+						goto l163
+					l162:
+						position, tokenIndex = position162, tokenIndex162
 					}
-				l162:
+				l163:
 					if !_rules[ruleSymbolArg]() {
-						goto l147
+						goto l148
 					}
 				}
-			l149:
-				add(ruleSymbolDefiningDirective, position148)
+			l150:
+				add(ruleSymbolDefiningDirective, position149)
 			}
 			return true
-		l147:
-			position, tokenIndex = position147, tokenIndex147
+		l148:
+			position, tokenIndex = position148, tokenIndex148
 			return false
 		},
 		/* 13 SymbolDefiningDirectiveName <- <(('.' ('e' / 'E') ('q' / 'Q') ('u' / 'U') ('i' / 'I') ('v' / 'V')) / ('.' ('e' / 'E') ('q' / 'Q') ('u' / 'U')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')))> */
 		func() bool {
-			position163, tokenIndex163 := position, tokenIndex
+			position164, tokenIndex164 := position, tokenIndex
 			{
-				position164 := position
+				position165 := position
 				{
-					position165, tokenIndex165 := position, tokenIndex
+					position166, tokenIndex166 := position, tokenIndex
 					if buffer[position] != rune('.') {
-						goto l166
-					}
-					position++
-					{
-						position167, tokenIndex167 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l168
-						}
-						position++
 						goto l167
-					l168:
-						position, tokenIndex = position167, tokenIndex167
+					}
+					position++
+					{
+						position168, tokenIndex168 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l169
+						}
+						position++
+						goto l168
+					l169:
+						position, tokenIndex = position168, tokenIndex168
 						if buffer[position] != rune('E') {
-							goto l166
+							goto l167
 						}
 						position++
 					}
-				l167:
+				l168:
 					{
-						position169, tokenIndex169 := position, tokenIndex
+						position170, tokenIndex170 := position, tokenIndex
 						if buffer[position] != rune('q') {
-							goto l170
+							goto l171
 						}
 						position++
-						goto l169
-					l170:
-						position, tokenIndex = position169, tokenIndex169
+						goto l170
+					l171:
+						position, tokenIndex = position170, tokenIndex170
 						if buffer[position] != rune('Q') {
-							goto l166
+							goto l167
 						}
 						position++
 					}
-				l169:
+				l170:
 					{
-						position171, tokenIndex171 := position, tokenIndex
+						position172, tokenIndex172 := position, tokenIndex
 						if buffer[position] != rune('u') {
-							goto l172
+							goto l173
 						}
 						position++
-						goto l171
-					l172:
-						position, tokenIndex = position171, tokenIndex171
+						goto l172
+					l173:
+						position, tokenIndex = position172, tokenIndex172
 						if buffer[position] != rune('U') {
-							goto l166
+							goto l167
 						}
 						position++
 					}
-				l171:
+				l172:
 					{
-						position173, tokenIndex173 := position, tokenIndex
+						position174, tokenIndex174 := position, tokenIndex
 						if buffer[position] != rune('i') {
-							goto l174
+							goto l175
 						}
 						position++
-						goto l173
-					l174:
-						position, tokenIndex = position173, tokenIndex173
+						goto l174
+					l175:
+						position, tokenIndex = position174, tokenIndex174
 						if buffer[position] != rune('I') {
-							goto l166
+							goto l167
 						}
 						position++
 					}
-				l173:
+				l174:
 					{
-						position175, tokenIndex175 := position, tokenIndex
+						position176, tokenIndex176 := position, tokenIndex
 						if buffer[position] != rune('v') {
-							goto l176
+							goto l177
 						}
 						position++
-						goto l175
-					l176:
-						position, tokenIndex = position175, tokenIndex175
+						goto l176
+					l177:
+						position, tokenIndex = position176, tokenIndex176
 						if buffer[position] != rune('V') {
-							goto l166
+							goto l167
 						}
 						position++
 					}
-				l175:
-					goto l165
-				l166:
-					position, tokenIndex = position165, tokenIndex165
+				l176:
+					goto l166
+				l167:
+					position, tokenIndex = position166, tokenIndex166
 					if buffer[position] != rune('.') {
-						goto l177
-					}
-					position++
-					{
-						position178, tokenIndex178 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l179
-						}
-						position++
 						goto l178
-					l179:
-						position, tokenIndex = position178, tokenIndex178
-						if buffer[position] != rune('E') {
-							goto l177
-						}
-						position++
-					}
-				l178:
-					{
-						position180, tokenIndex180 := position, tokenIndex
-						if buffer[position] != rune('q') {
-							goto l181
-						}
-						position++
-						goto l180
-					l181:
-						position, tokenIndex = position180, tokenIndex180
-						if buffer[position] != rune('Q') {
-							goto l177
-						}
-						position++
-					}
-				l180:
-					{
-						position182, tokenIndex182 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l183
-						}
-						position++
-						goto l182
-					l183:
-						position, tokenIndex = position182, tokenIndex182
-						if buffer[position] != rune('U') {
-							goto l177
-						}
-						position++
-					}
-				l182:
-					goto l165
-				l177:
-					position, tokenIndex = position165, tokenIndex165
-					if buffer[position] != rune('.') {
-						goto l163
 					}
 					position++
 					{
-						position184, tokenIndex184 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l185
-						}
-						position++
-						goto l184
-					l185:
-						position, tokenIndex = position184, tokenIndex184
-						if buffer[position] != rune('S') {
-							goto l163
-						}
-						position++
-					}
-				l184:
-					{
-						position186, tokenIndex186 := position, tokenIndex
+						position179, tokenIndex179 := position, tokenIndex
 						if buffer[position] != rune('e') {
-							goto l187
+							goto l180
 						}
 						position++
-						goto l186
-					l187:
-						position, tokenIndex = position186, tokenIndex186
+						goto l179
+					l180:
+						position, tokenIndex = position179, tokenIndex179
 						if buffer[position] != rune('E') {
-							goto l163
+							goto l178
 						}
 						position++
 					}
-				l186:
+				l179:
 					{
-						position188, tokenIndex188 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l189
+						position181, tokenIndex181 := position, tokenIndex
+						if buffer[position] != rune('q') {
+							goto l182
 						}
 						position++
-						goto l188
-					l189:
-						position, tokenIndex = position188, tokenIndex188
-						if buffer[position] != rune('T') {
-							goto l163
+						goto l181
+					l182:
+						position, tokenIndex = position181, tokenIndex181
+						if buffer[position] != rune('Q') {
+							goto l178
 						}
 						position++
 					}
-				l188:
+				l181:
+					{
+						position183, tokenIndex183 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l184
+						}
+						position++
+						goto l183
+					l184:
+						position, tokenIndex = position183, tokenIndex183
+						if buffer[position] != rune('U') {
+							goto l178
+						}
+						position++
+					}
+				l183:
+					goto l166
+				l178:
+					position, tokenIndex = position166, tokenIndex166
+					if buffer[position] != rune('.') {
+						goto l164
+					}
+					position++
+					{
+						position185, tokenIndex185 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l186
+						}
+						position++
+						goto l185
+					l186:
+						position, tokenIndex = position185, tokenIndex185
+						if buffer[position] != rune('S') {
+							goto l164
+						}
+						position++
+					}
+				l185:
+					{
+						position187, tokenIndex187 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l188
+						}
+						position++
+						goto l187
+					l188:
+						position, tokenIndex = position187, tokenIndex187
+						if buffer[position] != rune('E') {
+							goto l164
+						}
+						position++
+					}
+				l187:
+					{
+						position189, tokenIndex189 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l190
+						}
+						position++
+						goto l189
+					l190:
+						position, tokenIndex = position189, tokenIndex189
+						if buffer[position] != rune('T') {
+							goto l164
+						}
+						position++
+					}
+				l189:
 				}
-			l165:
-				add(ruleSymbolDefiningDirectiveName, position164)
+			l166:
+				add(ruleSymbolDefiningDirectiveName, position165)
 			}
 			return true
-		l163:
-			position, tokenIndex = position163, tokenIndex163
+		l164:
+			position, tokenIndex = position164, tokenIndex164
 			return false
 		},
 		/* 14 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
 		func() bool {
-			position190, tokenIndex190 := position, tokenIndex
+			position191, tokenIndex191 := position, tokenIndex
 			{
-				position191 := position
+				position192 := position
 				if !_rules[ruleLabelContainingDirectiveName]() {
-					goto l190
+					goto l191
 				}
 				if !_rules[ruleWS]() {
-					goto l190
+					goto l191
 				}
 				if !_rules[ruleSymbolArgs]() {
-					goto l190
+					goto l191
 				}
-				add(ruleLabelContainingDirective, position191)
+				add(ruleLabelContainingDirective, position192)
 			}
 			return true
-		l190:
-			position, tokenIndex = position190, tokenIndex190
+		l191:
+			position, tokenIndex = position191, tokenIndex191
 			return false
 		},
 		/* 15 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('h' / 'H') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
 		func() bool {
-			position192, tokenIndex192 := position, tokenIndex
+			position193, tokenIndex193 := position, tokenIndex
 			{
-				position193 := position
+				position194 := position
 				{
-					position194, tokenIndex194 := position, tokenIndex
+					position195, tokenIndex195 := position, tokenIndex
 					if buffer[position] != rune('.') {
-						goto l195
-					}
-					position++
-					{
-						position196, tokenIndex196 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l197
-						}
-						position++
 						goto l196
-					l197:
-						position, tokenIndex = position196, tokenIndex196
+					}
+					position++
+					{
+						position197, tokenIndex197 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l198
+						}
+						position++
+						goto l197
+					l198:
+						position, tokenIndex = position197, tokenIndex197
 						if buffer[position] != rune('X') {
-							goto l195
+							goto l196
 						}
 						position++
 					}
+				l197:
+					{
+						position199, tokenIndex199 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l200
+						}
+						position++
+						goto l199
+					l200:
+						position, tokenIndex = position199, tokenIndex199
+						if buffer[position] != rune('W') {
+							goto l196
+						}
+						position++
+					}
+				l199:
+					{
+						position201, tokenIndex201 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l202
+						}
+						position++
+						goto l201
+					l202:
+						position, tokenIndex = position201, tokenIndex201
+						if buffer[position] != rune('O') {
+							goto l196
+						}
+						position++
+					}
+				l201:
+					{
+						position203, tokenIndex203 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l204
+						}
+						position++
+						goto l203
+					l204:
+						position, tokenIndex = position203, tokenIndex203
+						if buffer[position] != rune('R') {
+							goto l196
+						}
+						position++
+					}
+				l203:
+					{
+						position205, tokenIndex205 := position, tokenIndex
+						if buffer[position] != rune('d') {
+							goto l206
+						}
+						position++
+						goto l205
+					l206:
+						position, tokenIndex = position205, tokenIndex205
+						if buffer[position] != rune('D') {
+							goto l196
+						}
+						position++
+					}
+				l205:
+					goto l195
 				l196:
-					{
-						position198, tokenIndex198 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l199
-						}
-						position++
-						goto l198
-					l199:
-						position, tokenIndex = position198, tokenIndex198
-						if buffer[position] != rune('W') {
-							goto l195
-						}
-						position++
-					}
-				l198:
-					{
-						position200, tokenIndex200 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l201
-						}
-						position++
-						goto l200
-					l201:
-						position, tokenIndex = position200, tokenIndex200
-						if buffer[position] != rune('O') {
-							goto l195
-						}
-						position++
-					}
-				l200:
-					{
-						position202, tokenIndex202 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l203
-						}
-						position++
-						goto l202
-					l203:
-						position, tokenIndex = position202, tokenIndex202
-						if buffer[position] != rune('R') {
-							goto l195
-						}
-						position++
-					}
-				l202:
-					{
-						position204, tokenIndex204 := position, tokenIndex
-						if buffer[position] != rune('d') {
-							goto l205
-						}
-						position++
-						goto l204
-					l205:
-						position, tokenIndex = position204, tokenIndex204
-						if buffer[position] != rune('D') {
-							goto l195
-						}
-						position++
-					}
-				l204:
-					goto l194
-				l195:
-					position, tokenIndex = position194, tokenIndex194
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l206
-					}
-					position++
-					{
-						position207, tokenIndex207 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l208
-						}
-						position++
 						goto l207
-					l208:
-						position, tokenIndex = position207, tokenIndex207
-						if buffer[position] != rune('W') {
-							goto l206
-						}
-						position++
-					}
-				l207:
-					{
-						position209, tokenIndex209 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l210
-						}
-						position++
-						goto l209
-					l210:
-						position, tokenIndex = position209, tokenIndex209
-						if buffer[position] != rune('O') {
-							goto l206
-						}
-						position++
-					}
-				l209:
-					{
-						position211, tokenIndex211 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l212
-						}
-						position++
-						goto l211
-					l212:
-						position, tokenIndex = position211, tokenIndex211
-						if buffer[position] != rune('R') {
-							goto l206
-						}
-						position++
-					}
-				l211:
-					{
-						position213, tokenIndex213 := position, tokenIndex
-						if buffer[position] != rune('d') {
-							goto l214
-						}
-						position++
-						goto l213
-					l214:
-						position, tokenIndex = position213, tokenIndex213
-						if buffer[position] != rune('D') {
-							goto l206
-						}
-						position++
-					}
-				l213:
-					goto l194
-				l206:
-					position, tokenIndex = position194, tokenIndex194
-					if buffer[position] != rune('.') {
-						goto l215
 					}
 					position++
 					{
-						position216, tokenIndex216 := position, tokenIndex
-						if buffer[position] != rune('h') {
-							goto l217
-						}
-						position++
-						goto l216
-					l217:
-						position, tokenIndex = position216, tokenIndex216
-						if buffer[position] != rune('H') {
-							goto l215
-						}
-						position++
-					}
-				l216:
-					{
-						position218, tokenIndex218 := position, tokenIndex
+						position208, tokenIndex208 := position, tokenIndex
 						if buffer[position] != rune('w') {
-							goto l219
+							goto l209
 						}
 						position++
-						goto l218
-					l219:
-						position, tokenIndex = position218, tokenIndex218
+						goto l208
+					l209:
+						position, tokenIndex = position208, tokenIndex208
 						if buffer[position] != rune('W') {
-							goto l215
+							goto l207
 						}
 						position++
 					}
-				l218:
+				l208:
 					{
-						position220, tokenIndex220 := position, tokenIndex
+						position210, tokenIndex210 := position, tokenIndex
 						if buffer[position] != rune('o') {
-							goto l221
+							goto l211
 						}
 						position++
-						goto l220
-					l221:
-						position, tokenIndex = position220, tokenIndex220
+						goto l210
+					l211:
+						position, tokenIndex = position210, tokenIndex210
 						if buffer[position] != rune('O') {
-							goto l215
+							goto l207
 						}
 						position++
 					}
-				l220:
+				l210:
 					{
-						position222, tokenIndex222 := position, tokenIndex
+						position212, tokenIndex212 := position, tokenIndex
 						if buffer[position] != rune('r') {
-							goto l223
+							goto l213
 						}
 						position++
-						goto l222
-					l223:
-						position, tokenIndex = position222, tokenIndex222
+						goto l212
+					l213:
+						position, tokenIndex = position212, tokenIndex212
 						if buffer[position] != rune('R') {
-							goto l215
+							goto l207
 						}
 						position++
 					}
-				l222:
+				l212:
 					{
-						position224, tokenIndex224 := position, tokenIndex
+						position214, tokenIndex214 := position, tokenIndex
 						if buffer[position] != rune('d') {
-							goto l225
-						}
-						position++
-						goto l224
-					l225:
-						position, tokenIndex = position224, tokenIndex224
-						if buffer[position] != rune('D') {
 							goto l215
 						}
 						position++
+						goto l214
+					l215:
+						position, tokenIndex = position214, tokenIndex214
+						if buffer[position] != rune('D') {
+							goto l207
+						}
+						position++
 					}
-				l224:
-					goto l194
-				l215:
-					position, tokenIndex = position194, tokenIndex194
+				l214:
+					goto l195
+				l207:
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l226
+						goto l216
 					}
 					position++
 					{
-						position227, tokenIndex227 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l228
+						position217, tokenIndex217 := position, tokenIndex
+						if buffer[position] != rune('h') {
+							goto l218
 						}
 						position++
-						goto l227
-					l228:
-						position, tokenIndex = position227, tokenIndex227
-						if buffer[position] != rune('L') {
-							goto l226
+						goto l217
+					l218:
+						position, tokenIndex = position217, tokenIndex217
+						if buffer[position] != rune('H') {
+							goto l216
 						}
 						position++
 					}
-				l227:
+				l217:
 					{
-						position229, tokenIndex229 := position, tokenIndex
+						position219, tokenIndex219 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l220
+						}
+						position++
+						goto l219
+					l220:
+						position, tokenIndex = position219, tokenIndex219
+						if buffer[position] != rune('W') {
+							goto l216
+						}
+						position++
+					}
+				l219:
+					{
+						position221, tokenIndex221 := position, tokenIndex
 						if buffer[position] != rune('o') {
-							goto l230
+							goto l222
 						}
 						position++
-						goto l229
-					l230:
-						position, tokenIndex = position229, tokenIndex229
+						goto l221
+					l222:
+						position, tokenIndex = position221, tokenIndex221
 						if buffer[position] != rune('O') {
-							goto l226
+							goto l216
 						}
 						position++
 					}
-				l229:
+				l221:
 					{
-						position231, tokenIndex231 := position, tokenIndex
-						if buffer[position] != rune('n') {
-							goto l232
+						position223, tokenIndex223 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l224
 						}
 						position++
-						goto l231
-					l232:
-						position, tokenIndex = position231, tokenIndex231
-						if buffer[position] != rune('N') {
-							goto l226
+						goto l223
+					l224:
+						position, tokenIndex = position223, tokenIndex223
+						if buffer[position] != rune('R') {
+							goto l216
 						}
 						position++
 					}
-				l231:
+				l223:
 					{
-						position233, tokenIndex233 := position, tokenIndex
-						if buffer[position] != rune('g') {
-							goto l234
-						}
-						position++
-						goto l233
-					l234:
-						position, tokenIndex = position233, tokenIndex233
-						if buffer[position] != rune('G') {
+						position225, tokenIndex225 := position, tokenIndex
+						if buffer[position] != rune('d') {
 							goto l226
 						}
 						position++
+						goto l225
+					l226:
+						position, tokenIndex = position225, tokenIndex225
+						if buffer[position] != rune('D') {
+							goto l216
+						}
+						position++
 					}
-				l233:
-					goto l194
-				l226:
-					position, tokenIndex = position194, tokenIndex194
+				l225:
+					goto l195
+				l216:
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l235
+						goto l227
 					}
 					position++
 					{
-						position236, tokenIndex236 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l237
+						position228, tokenIndex228 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l229
 						}
 						position++
-						goto l236
-					l237:
-						position, tokenIndex = position236, tokenIndex236
-						if buffer[position] != rune('B') {
-							goto l235
+						goto l228
+					l229:
+						position, tokenIndex = position228, tokenIndex228
+						if buffer[position] != rune('L') {
+							goto l227
 						}
 						position++
 					}
-				l236:
+				l228:
 					{
-						position238, tokenIndex238 := position, tokenIndex
-						if buffer[position] != rune('y') {
-							goto l239
+						position230, tokenIndex230 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l231
 						}
 						position++
-						goto l238
-					l239:
-						position, tokenIndex = position238, tokenIndex238
-						if buffer[position] != rune('Y') {
-							goto l235
+						goto l230
+					l231:
+						position, tokenIndex = position230, tokenIndex230
+						if buffer[position] != rune('O') {
+							goto l227
 						}
 						position++
 					}
-				l238:
+				l230:
 					{
-						position240, tokenIndex240 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l241
+						position232, tokenIndex232 := position, tokenIndex
+						if buffer[position] != rune('n') {
+							goto l233
 						}
 						position++
-						goto l240
-					l241:
-						position, tokenIndex = position240, tokenIndex240
-						if buffer[position] != rune('T') {
-							goto l235
+						goto l232
+					l233:
+						position, tokenIndex = position232, tokenIndex232
+						if buffer[position] != rune('N') {
+							goto l227
 						}
 						position++
 					}
-				l240:
+				l232:
 					{
-						position242, tokenIndex242 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l243
-						}
-						position++
-						goto l242
-					l243:
-						position, tokenIndex = position242, tokenIndex242
-						if buffer[position] != rune('E') {
+						position234, tokenIndex234 := position, tokenIndex
+						if buffer[position] != rune('g') {
 							goto l235
 						}
 						position++
+						goto l234
+					l235:
+						position, tokenIndex = position234, tokenIndex234
+						if buffer[position] != rune('G') {
+							goto l227
+						}
+						position++
 					}
-				l242:
-					goto l194
-				l235:
-					position, tokenIndex = position194, tokenIndex194
+				l234:
+					goto l195
+				l227:
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l244
+						goto l236
+					}
+					position++
+					{
+						position237, tokenIndex237 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l238
+						}
+						position++
+						goto l237
+					l238:
+						position, tokenIndex = position237, tokenIndex237
+						if buffer[position] != rune('B') {
+							goto l236
+						}
+						position++
+					}
+				l237:
+					{
+						position239, tokenIndex239 := position, tokenIndex
+						if buffer[position] != rune('y') {
+							goto l240
+						}
+						position++
+						goto l239
+					l240:
+						position, tokenIndex = position239, tokenIndex239
+						if buffer[position] != rune('Y') {
+							goto l236
+						}
+						position++
+					}
+				l239:
+					{
+						position241, tokenIndex241 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l242
+						}
+						position++
+						goto l241
+					l242:
+						position, tokenIndex = position241, tokenIndex241
+						if buffer[position] != rune('T') {
+							goto l236
+						}
+						position++
+					}
+				l241:
+					{
+						position243, tokenIndex243 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l244
+						}
+						position++
+						goto l243
+					l244:
+						position, tokenIndex = position243, tokenIndex243
+						if buffer[position] != rune('E') {
+							goto l236
+						}
+						position++
+					}
+				l243:
+					goto l195
+				l236:
+					position, tokenIndex = position195, tokenIndex195
+					if buffer[position] != rune('.') {
+						goto l245
 					}
 					position++
 					if buffer[position] != rune('8') {
-						goto l244
+						goto l245
 					}
 					position++
 					{
-						position245, tokenIndex245 := position, tokenIndex
+						position246, tokenIndex246 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l246
+							goto l247
 						}
 						position++
-						goto l245
-					l246:
-						position, tokenIndex = position245, tokenIndex245
+						goto l246
+					l247:
+						position, tokenIndex = position246, tokenIndex246
 						if buffer[position] != rune('B') {
-							goto l244
+							goto l245
 						}
 						position++
 					}
-				l245:
+				l246:
 					{
-						position247, tokenIndex247 := position, tokenIndex
+						position248, tokenIndex248 := position, tokenIndex
 						if buffer[position] != rune('y') {
-							goto l248
+							goto l249
 						}
 						position++
-						goto l247
-					l248:
-						position, tokenIndex = position247, tokenIndex247
+						goto l248
+					l249:
+						position, tokenIndex = position248, tokenIndex248
 						if buffer[position] != rune('Y') {
-							goto l244
+							goto l245
 						}
 						position++
 					}
-				l247:
+				l248:
 					{
-						position249, tokenIndex249 := position, tokenIndex
+						position250, tokenIndex250 := position, tokenIndex
 						if buffer[position] != rune('t') {
-							goto l250
+							goto l251
 						}
 						position++
-						goto l249
-					l250:
-						position, tokenIndex = position249, tokenIndex249
+						goto l250
+					l251:
+						position, tokenIndex = position250, tokenIndex250
 						if buffer[position] != rune('T') {
-							goto l244
+							goto l245
 						}
 						position++
 					}
-				l249:
+				l250:
 					{
-						position251, tokenIndex251 := position, tokenIndex
+						position252, tokenIndex252 := position, tokenIndex
 						if buffer[position] != rune('e') {
-							goto l252
+							goto l253
 						}
 						position++
-						goto l251
-					l252:
-						position, tokenIndex = position251, tokenIndex251
+						goto l252
+					l253:
+						position, tokenIndex = position252, tokenIndex252
 						if buffer[position] != rune('E') {
-							goto l244
+							goto l245
 						}
 						position++
 					}
-				l251:
-					goto l194
-				l244:
-					position, tokenIndex = position194, tokenIndex194
+				l252:
+					goto l195
+				l245:
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l253
+						goto l254
 					}
 					position++
 					if buffer[position] != rune('4') {
-						goto l253
-					}
-					position++
-					{
-						position254, tokenIndex254 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l255
-						}
-						position++
 						goto l254
-					l255:
-						position, tokenIndex = position254, tokenIndex254
+					}
+					position++
+					{
+						position255, tokenIndex255 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l256
+						}
+						position++
+						goto l255
+					l256:
+						position, tokenIndex = position255, tokenIndex255
 						if buffer[position] != rune('B') {
-							goto l253
+							goto l254
 						}
 						position++
 					}
+				l255:
+					{
+						position257, tokenIndex257 := position, tokenIndex
+						if buffer[position] != rune('y') {
+							goto l258
+						}
+						position++
+						goto l257
+					l258:
+						position, tokenIndex = position257, tokenIndex257
+						if buffer[position] != rune('Y') {
+							goto l254
+						}
+						position++
+					}
+				l257:
+					{
+						position259, tokenIndex259 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l260
+						}
+						position++
+						goto l259
+					l260:
+						position, tokenIndex = position259, tokenIndex259
+						if buffer[position] != rune('T') {
+							goto l254
+						}
+						position++
+					}
+				l259:
+					{
+						position261, tokenIndex261 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l262
+						}
+						position++
+						goto l261
+					l262:
+						position, tokenIndex = position261, tokenIndex261
+						if buffer[position] != rune('E') {
+							goto l254
+						}
+						position++
+					}
+				l261:
+					goto l195
 				l254:
-					{
-						position256, tokenIndex256 := position, tokenIndex
-						if buffer[position] != rune('y') {
-							goto l257
-						}
-						position++
-						goto l256
-					l257:
-						position, tokenIndex = position256, tokenIndex256
-						if buffer[position] != rune('Y') {
-							goto l253
-						}
-						position++
-					}
-				l256:
-					{
-						position258, tokenIndex258 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l259
-						}
-						position++
-						goto l258
-					l259:
-						position, tokenIndex = position258, tokenIndex258
-						if buffer[position] != rune('T') {
-							goto l253
-						}
-						position++
-					}
-				l258:
-					{
-						position260, tokenIndex260 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l261
-						}
-						position++
-						goto l260
-					l261:
-						position, tokenIndex = position260, tokenIndex260
-						if buffer[position] != rune('E') {
-							goto l253
-						}
-						position++
-					}
-				l260:
-					goto l194
-				l253:
-					position, tokenIndex = position194, tokenIndex194
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l262
-					}
-					position++
-					{
-						position263, tokenIndex263 := position, tokenIndex
-						if buffer[position] != rune('q') {
-							goto l264
-						}
-						position++
 						goto l263
-					l264:
-						position, tokenIndex = position263, tokenIndex263
+					}
+					position++
+					{
+						position264, tokenIndex264 := position, tokenIndex
+						if buffer[position] != rune('q') {
+							goto l265
+						}
+						position++
+						goto l264
+					l265:
+						position, tokenIndex = position264, tokenIndex264
 						if buffer[position] != rune('Q') {
-							goto l262
+							goto l263
 						}
 						position++
 					}
-				l263:
+				l264:
 					{
-						position265, tokenIndex265 := position, tokenIndex
+						position266, tokenIndex266 := position, tokenIndex
 						if buffer[position] != rune('u') {
-							goto l266
+							goto l267
 						}
 						position++
-						goto l265
-					l266:
-						position, tokenIndex = position265, tokenIndex265
+						goto l266
+					l267:
+						position, tokenIndex = position266, tokenIndex266
 						if buffer[position] != rune('U') {
-							goto l262
+							goto l263
 						}
 						position++
 					}
-				l265:
+				l266:
 					{
-						position267, tokenIndex267 := position, tokenIndex
+						position268, tokenIndex268 := position, tokenIndex
 						if buffer[position] != rune('a') {
-							goto l268
+							goto l269
 						}
 						position++
-						goto l267
-					l268:
-						position, tokenIndex = position267, tokenIndex267
+						goto l268
+					l269:
+						position, tokenIndex = position268, tokenIndex268
 						if buffer[position] != rune('A') {
-							goto l262
+							goto l263
 						}
 						position++
 					}
-				l267:
+				l268:
 					{
-						position269, tokenIndex269 := position, tokenIndex
+						position270, tokenIndex270 := position, tokenIndex
 						if buffer[position] != rune('d') {
-							goto l270
+							goto l271
 						}
 						position++
-						goto l269
-					l270:
-						position, tokenIndex = position269, tokenIndex269
+						goto l270
+					l271:
+						position, tokenIndex = position270, tokenIndex270
 						if buffer[position] != rune('D') {
-							goto l262
+							goto l263
 						}
 						position++
 					}
-				l269:
-					goto l194
-				l262:
-					position, tokenIndex = position194, tokenIndex194
+				l270:
+					goto l195
+				l263:
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l271
-					}
-					position++
-					{
-						position272, tokenIndex272 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l273
-						}
-						position++
 						goto l272
-					l273:
-						position, tokenIndex = position272, tokenIndex272
+					}
+					position++
+					{
+						position273, tokenIndex273 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l274
+						}
+						position++
+						goto l273
+					l274:
+						position, tokenIndex = position273, tokenIndex273
 						if buffer[position] != rune('T') {
-							goto l271
+							goto l272
 						}
 						position++
 					}
+				l273:
+					{
+						position275, tokenIndex275 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l276
+						}
+						position++
+						goto l275
+					l276:
+						position, tokenIndex = position275, tokenIndex275
+						if buffer[position] != rune('C') {
+							goto l272
+						}
+						position++
+					}
+				l275:
+					goto l195
 				l272:
-					{
-						position274, tokenIndex274 := position, tokenIndex
-						if buffer[position] != rune('c') {
-							goto l275
-						}
-						position++
-						goto l274
-					l275:
-						position, tokenIndex = position274, tokenIndex274
-						if buffer[position] != rune('C') {
-							goto l271
-						}
-						position++
-					}
-				l274:
-					goto l194
-				l271:
-					position, tokenIndex = position194, tokenIndex194
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l276
-					}
-					position++
-					{
-						position277, tokenIndex277 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l278
-						}
-						position++
 						goto l277
-					l278:
-						position, tokenIndex = position277, tokenIndex277
+					}
+					position++
+					{
+						position278, tokenIndex278 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l279
+						}
+						position++
+						goto l278
+					l279:
+						position, tokenIndex = position278, tokenIndex278
 						if buffer[position] != rune('L') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l277:
+				l278:
 					{
-						position279, tokenIndex279 := position, tokenIndex
+						position280, tokenIndex280 := position, tokenIndex
 						if buffer[position] != rune('o') {
-							goto l280
+							goto l281
 						}
 						position++
-						goto l279
-					l280:
-						position, tokenIndex = position279, tokenIndex279
+						goto l280
+					l281:
+						position, tokenIndex = position280, tokenIndex280
 						if buffer[position] != rune('O') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l279:
+				l280:
 					{
-						position281, tokenIndex281 := position, tokenIndex
+						position282, tokenIndex282 := position, tokenIndex
 						if buffer[position] != rune('c') {
-							goto l282
+							goto l283
 						}
 						position++
-						goto l281
-					l282:
-						position, tokenIndex = position281, tokenIndex281
+						goto l282
+					l283:
+						position, tokenIndex = position282, tokenIndex282
 						if buffer[position] != rune('C') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l281:
+				l282:
 					{
-						position283, tokenIndex283 := position, tokenIndex
+						position284, tokenIndex284 := position, tokenIndex
 						if buffer[position] != rune('a') {
-							goto l284
+							goto l285
 						}
 						position++
-						goto l283
-					l284:
-						position, tokenIndex = position283, tokenIndex283
+						goto l284
+					l285:
+						position, tokenIndex = position284, tokenIndex284
 						if buffer[position] != rune('A') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l283:
+				l284:
 					{
-						position285, tokenIndex285 := position, tokenIndex
+						position286, tokenIndex286 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l286
+							goto l287
 						}
 						position++
-						goto l285
-					l286:
-						position, tokenIndex = position285, tokenIndex285
+						goto l286
+					l287:
+						position, tokenIndex = position286, tokenIndex286
 						if buffer[position] != rune('L') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l285:
+				l286:
 					{
-						position287, tokenIndex287 := position, tokenIndex
+						position288, tokenIndex288 := position, tokenIndex
 						if buffer[position] != rune('e') {
-							goto l288
+							goto l289
 						}
 						position++
-						goto l287
-					l288:
-						position, tokenIndex = position287, tokenIndex287
+						goto l288
+					l289:
+						position, tokenIndex = position288, tokenIndex288
 						if buffer[position] != rune('E') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l287:
+				l288:
 					{
-						position289, tokenIndex289 := position, tokenIndex
+						position290, tokenIndex290 := position, tokenIndex
 						if buffer[position] != rune('n') {
-							goto l290
+							goto l291
 						}
 						position++
-						goto l289
-					l290:
-						position, tokenIndex = position289, tokenIndex289
+						goto l290
+					l291:
+						position, tokenIndex = position290, tokenIndex290
 						if buffer[position] != rune('N') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l289:
+				l290:
 					{
-						position291, tokenIndex291 := position, tokenIndex
+						position292, tokenIndex292 := position, tokenIndex
 						if buffer[position] != rune('t') {
-							goto l292
+							goto l293
 						}
 						position++
-						goto l291
-					l292:
-						position, tokenIndex = position291, tokenIndex291
+						goto l292
+					l293:
+						position, tokenIndex = position292, tokenIndex292
 						if buffer[position] != rune('T') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l291:
+				l292:
 					{
-						position293, tokenIndex293 := position, tokenIndex
+						position294, tokenIndex294 := position, tokenIndex
 						if buffer[position] != rune('r') {
-							goto l294
+							goto l295
 						}
 						position++
-						goto l293
-					l294:
-						position, tokenIndex = position293, tokenIndex293
+						goto l294
+					l295:
+						position, tokenIndex = position294, tokenIndex294
 						if buffer[position] != rune('R') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l293:
+				l294:
 					{
-						position295, tokenIndex295 := position, tokenIndex
+						position296, tokenIndex296 := position, tokenIndex
 						if buffer[position] != rune('y') {
-							goto l296
+							goto l297
 						}
 						position++
-						goto l295
-					l296:
-						position, tokenIndex = position295, tokenIndex295
+						goto l296
+					l297:
+						position, tokenIndex = position296, tokenIndex296
 						if buffer[position] != rune('Y') {
-							goto l276
+							goto l277
 						}
 						position++
 					}
-				l295:
-					goto l194
-				l276:
-					position, tokenIndex = position194, tokenIndex194
+				l296:
+					goto l195
+				l277:
+					position, tokenIndex = position195, tokenIndex195
 					if buffer[position] != rune('.') {
-						goto l297
-					}
-					position++
-					{
-						position298, tokenIndex298 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l299
-						}
-						position++
 						goto l298
-					l299:
-						position, tokenIndex = position298, tokenIndex298
-						if buffer[position] != rune('S') {
-							goto l297
-						}
-						position++
-					}
-				l298:
-					{
-						position300, tokenIndex300 := position, tokenIndex
-						if buffer[position] != rune('i') {
-							goto l301
-						}
-						position++
-						goto l300
-					l301:
-						position, tokenIndex = position300, tokenIndex300
-						if buffer[position] != rune('I') {
-							goto l297
-						}
-						position++
-					}
-				l300:
-					{
-						position302, tokenIndex302 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l303
-						}
-						position++
-						goto l302
-					l303:
-						position, tokenIndex = position302, tokenIndex302
-						if buffer[position] != rune('Z') {
-							goto l297
-						}
-						position++
-					}
-				l302:
-					{
-						position304, tokenIndex304 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l305
-						}
-						position++
-						goto l304
-					l305:
-						position, tokenIndex = position304, tokenIndex304
-						if buffer[position] != rune('E') {
-							goto l297
-						}
-						position++
-					}
-				l304:
-					goto l194
-				l297:
-					position, tokenIndex = position194, tokenIndex194
-					if buffer[position] != rune('.') {
-						goto l306
 					}
 					position++
 					{
-						position307, tokenIndex307 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l308
-						}
-						position++
-						goto l307
-					l308:
-						position, tokenIndex = position307, tokenIndex307
-						if buffer[position] != rune('T') {
-							goto l306
-						}
-						position++
-					}
-				l307:
-					{
-						position309, tokenIndex309 := position, tokenIndex
-						if buffer[position] != rune('y') {
-							goto l310
-						}
-						position++
-						goto l309
-					l310:
-						position, tokenIndex = position309, tokenIndex309
-						if buffer[position] != rune('Y') {
-							goto l306
-						}
-						position++
-					}
-				l309:
-					{
-						position311, tokenIndex311 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l312
-						}
-						position++
-						goto l311
-					l312:
-						position, tokenIndex = position311, tokenIndex311
-						if buffer[position] != rune('P') {
-							goto l306
-						}
-						position++
-					}
-				l311:
-					{
-						position313, tokenIndex313 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l314
-						}
-						position++
-						goto l313
-					l314:
-						position, tokenIndex = position313, tokenIndex313
-						if buffer[position] != rune('E') {
-							goto l306
-						}
-						position++
-					}
-				l313:
-					goto l194
-				l306:
-					position, tokenIndex = position194, tokenIndex194
-					if buffer[position] != rune('.') {
-						goto l315
-					}
-					position++
-					{
-						position316, tokenIndex316 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l317
-						}
-						position++
-						goto l316
-					l317:
-						position, tokenIndex = position316, tokenIndex316
-						if buffer[position] != rune('U') {
-							goto l315
-						}
-						position++
-					}
-				l316:
-					{
-						position318, tokenIndex318 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l319
-						}
-						position++
-						goto l318
-					l319:
-						position, tokenIndex = position318, tokenIndex318
-						if buffer[position] != rune('L') {
-							goto l315
-						}
-						position++
-					}
-				l318:
-					{
-						position320, tokenIndex320 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l321
-						}
-						position++
-						goto l320
-					l321:
-						position, tokenIndex = position320, tokenIndex320
-						if buffer[position] != rune('E') {
-							goto l315
-						}
-						position++
-					}
-				l320:
-					{
-						position322, tokenIndex322 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l323
-						}
-						position++
-						goto l322
-					l323:
-						position, tokenIndex = position322, tokenIndex322
-						if buffer[position] != rune('B') {
-							goto l315
-						}
-						position++
-					}
-				l322:
-					if buffer[position] != rune('1') {
-						goto l315
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l315
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l315
-					}
-					position++
-					goto l194
-				l315:
-					position, tokenIndex = position194, tokenIndex194
-					if buffer[position] != rune('.') {
-						goto l192
-					}
-					position++
-					{
-						position324, tokenIndex324 := position, tokenIndex
+						position299, tokenIndex299 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l325
+							goto l300
 						}
 						position++
-						goto l324
-					l325:
-						position, tokenIndex = position324, tokenIndex324
+						goto l299
+					l300:
+						position, tokenIndex = position299, tokenIndex299
 						if buffer[position] != rune('S') {
-							goto l192
+							goto l298
 						}
 						position++
 					}
-				l324:
+				l299:
 					{
-						position326, tokenIndex326 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l327
+						position301, tokenIndex301 := position, tokenIndex
+						if buffer[position] != rune('i') {
+							goto l302
 						}
 						position++
-						goto l326
-					l327:
-						position, tokenIndex = position326, tokenIndex326
-						if buffer[position] != rune('L') {
-							goto l192
+						goto l301
+					l302:
+						position, tokenIndex = position301, tokenIndex301
+						if buffer[position] != rune('I') {
+							goto l298
 						}
 						position++
 					}
-				l326:
+				l301:
 					{
-						position328, tokenIndex328 := position, tokenIndex
+						position303, tokenIndex303 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l304
+						}
+						position++
+						goto l303
+					l304:
+						position, tokenIndex = position303, tokenIndex303
+						if buffer[position] != rune('Z') {
+							goto l298
+						}
+						position++
+					}
+				l303:
+					{
+						position305, tokenIndex305 := position, tokenIndex
 						if buffer[position] != rune('e') {
-							goto l329
+							goto l306
 						}
 						position++
-						goto l328
-					l329:
-						position, tokenIndex = position328, tokenIndex328
+						goto l305
+					l306:
+						position, tokenIndex = position305, tokenIndex305
 						if buffer[position] != rune('E') {
-							goto l192
+							goto l298
 						}
 						position++
 					}
-				l328:
+				l305:
+					goto l195
+				l298:
+					position, tokenIndex = position195, tokenIndex195
+					if buffer[position] != rune('.') {
+						goto l307
+					}
+					position++
 					{
-						position330, tokenIndex330 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l331
+						position308, tokenIndex308 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l309
 						}
 						position++
-						goto l330
-					l331:
-						position, tokenIndex = position330, tokenIndex330
-						if buffer[position] != rune('B') {
-							goto l192
+						goto l308
+					l309:
+						position, tokenIndex = position308, tokenIndex308
+						if buffer[position] != rune('T') {
+							goto l307
 						}
 						position++
 					}
-				l330:
+				l308:
+					{
+						position310, tokenIndex310 := position, tokenIndex
+						if buffer[position] != rune('y') {
+							goto l311
+						}
+						position++
+						goto l310
+					l311:
+						position, tokenIndex = position310, tokenIndex310
+						if buffer[position] != rune('Y') {
+							goto l307
+						}
+						position++
+					}
+				l310:
+					{
+						position312, tokenIndex312 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l313
+						}
+						position++
+						goto l312
+					l313:
+						position, tokenIndex = position312, tokenIndex312
+						if buffer[position] != rune('P') {
+							goto l307
+						}
+						position++
+					}
+				l312:
+					{
+						position314, tokenIndex314 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l315
+						}
+						position++
+						goto l314
+					l315:
+						position, tokenIndex = position314, tokenIndex314
+						if buffer[position] != rune('E') {
+							goto l307
+						}
+						position++
+					}
+				l314:
+					goto l195
+				l307:
+					position, tokenIndex = position195, tokenIndex195
+					if buffer[position] != rune('.') {
+						goto l316
+					}
+					position++
+					{
+						position317, tokenIndex317 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l318
+						}
+						position++
+						goto l317
+					l318:
+						position, tokenIndex = position317, tokenIndex317
+						if buffer[position] != rune('U') {
+							goto l316
+						}
+						position++
+					}
+				l317:
+					{
+						position319, tokenIndex319 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l320
+						}
+						position++
+						goto l319
+					l320:
+						position, tokenIndex = position319, tokenIndex319
+						if buffer[position] != rune('L') {
+							goto l316
+						}
+						position++
+					}
+				l319:
+					{
+						position321, tokenIndex321 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l322
+						}
+						position++
+						goto l321
+					l322:
+						position, tokenIndex = position321, tokenIndex321
+						if buffer[position] != rune('E') {
+							goto l316
+						}
+						position++
+					}
+				l321:
+					{
+						position323, tokenIndex323 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l324
+						}
+						position++
+						goto l323
+					l324:
+						position, tokenIndex = position323, tokenIndex323
+						if buffer[position] != rune('B') {
+							goto l316
+						}
+						position++
+					}
+				l323:
 					if buffer[position] != rune('1') {
-						goto l192
+						goto l316
 					}
 					position++
 					if buffer[position] != rune('2') {
-						goto l192
+						goto l316
 					}
 					position++
 					if buffer[position] != rune('8') {
-						goto l192
+						goto l316
+					}
+					position++
+					goto l195
+				l316:
+					position, tokenIndex = position195, tokenIndex195
+					if buffer[position] != rune('.') {
+						goto l193
+					}
+					position++
+					{
+						position325, tokenIndex325 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l326
+						}
+						position++
+						goto l325
+					l326:
+						position, tokenIndex = position325, tokenIndex325
+						if buffer[position] != rune('S') {
+							goto l193
+						}
+						position++
+					}
+				l325:
+					{
+						position327, tokenIndex327 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l328
+						}
+						position++
+						goto l327
+					l328:
+						position, tokenIndex = position327, tokenIndex327
+						if buffer[position] != rune('L') {
+							goto l193
+						}
+						position++
+					}
+				l327:
+					{
+						position329, tokenIndex329 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l330
+						}
+						position++
+						goto l329
+					l330:
+						position, tokenIndex = position329, tokenIndex329
+						if buffer[position] != rune('E') {
+							goto l193
+						}
+						position++
+					}
+				l329:
+					{
+						position331, tokenIndex331 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l332
+						}
+						position++
+						goto l331
+					l332:
+						position, tokenIndex = position331, tokenIndex331
+						if buffer[position] != rune('B') {
+							goto l193
+						}
+						position++
+					}
+				l331:
+					if buffer[position] != rune('1') {
+						goto l193
+					}
+					position++
+					if buffer[position] != rune('2') {
+						goto l193
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l193
 					}
 					position++
 				}
-			l194:
-				add(ruleLabelContainingDirectiveName, position193)
+			l195:
+				add(ruleLabelContainingDirectiveName, position194)
 			}
 			return true
-		l192:
-			position, tokenIndex = position192, tokenIndex192
+		l193:
+			position, tokenIndex = position193, tokenIndex193
 			return false
 		},
-		/* 16 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
+		/* 16 PrefAlignDirective <- <('.' ('p' / 'P') ('r' / 'R') ('e' / 'E') ('f' / 'F') ('a' / 'A') ('l' / 'L') ('i' / 'I') ('g' / 'G') ('n' / 'N') WS Arg (WS? ',' WS? SymbolArg WS? ',' WS? Arg)?)> */
 		func() bool {
-			position332, tokenIndex332 := position, tokenIndex
+			position333, tokenIndex333 := position, tokenIndex
 			{
-				position333 := position
-				if !_rules[ruleSymbolArg]() {
-					goto l332
+				position334 := position
+				if buffer[position] != rune('.') {
+					goto l333
 				}
-			l334:
+				position++
 				{
 					position335, tokenIndex335 := position, tokenIndex
-					{
-						position336, tokenIndex336 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l336
-						}
-						goto l337
-					l336:
-						position, tokenIndex = position336, tokenIndex336
+					if buffer[position] != rune('p') {
+						goto l336
 					}
-				l337:
+					position++
+					goto l335
+				l336:
+					position, tokenIndex = position335, tokenIndex335
+					if buffer[position] != rune('P') {
+						goto l333
+					}
+					position++
+				}
+			l335:
+				{
+					position337, tokenIndex337 := position, tokenIndex
+					if buffer[position] != rune('r') {
+						goto l338
+					}
+					position++
+					goto l337
+				l338:
+					position, tokenIndex = position337, tokenIndex337
+					if buffer[position] != rune('R') {
+						goto l333
+					}
+					position++
+				}
+			l337:
+				{
+					position339, tokenIndex339 := position, tokenIndex
+					if buffer[position] != rune('e') {
+						goto l340
+					}
+					position++
+					goto l339
+				l340:
+					position, tokenIndex = position339, tokenIndex339
+					if buffer[position] != rune('E') {
+						goto l333
+					}
+					position++
+				}
+			l339:
+				{
+					position341, tokenIndex341 := position, tokenIndex
+					if buffer[position] != rune('f') {
+						goto l342
+					}
+					position++
+					goto l341
+				l342:
+					position, tokenIndex = position341, tokenIndex341
+					if buffer[position] != rune('F') {
+						goto l333
+					}
+					position++
+				}
+			l341:
+				{
+					position343, tokenIndex343 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l344
+					}
+					position++
+					goto l343
+				l344:
+					position, tokenIndex = position343, tokenIndex343
+					if buffer[position] != rune('A') {
+						goto l333
+					}
+					position++
+				}
+			l343:
+				{
+					position345, tokenIndex345 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l346
+					}
+					position++
+					goto l345
+				l346:
+					position, tokenIndex = position345, tokenIndex345
+					if buffer[position] != rune('L') {
+						goto l333
+					}
+					position++
+				}
+			l345:
+				{
+					position347, tokenIndex347 := position, tokenIndex
+					if buffer[position] != rune('i') {
+						goto l348
+					}
+					position++
+					goto l347
+				l348:
+					position, tokenIndex = position347, tokenIndex347
+					if buffer[position] != rune('I') {
+						goto l333
+					}
+					position++
+				}
+			l347:
+				{
+					position349, tokenIndex349 := position, tokenIndex
+					if buffer[position] != rune('g') {
+						goto l350
+					}
+					position++
+					goto l349
+				l350:
+					position, tokenIndex = position349, tokenIndex349
+					if buffer[position] != rune('G') {
+						goto l333
+					}
+					position++
+				}
+			l349:
+				{
+					position351, tokenIndex351 := position, tokenIndex
+					if buffer[position] != rune('n') {
+						goto l352
+					}
+					position++
+					goto l351
+				l352:
+					position, tokenIndex = position351, tokenIndex351
+					if buffer[position] != rune('N') {
+						goto l333
+					}
+					position++
+				}
+			l351:
+				if !_rules[ruleWS]() {
+					goto l333
+				}
+				if !_rules[ruleArg]() {
+					goto l333
+				}
+				{
+					position353, tokenIndex353 := position, tokenIndex
+					{
+						position355, tokenIndex355 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l355
+						}
+						goto l356
+					l355:
+						position, tokenIndex = position355, tokenIndex355
+					}
+				l356:
 					if buffer[position] != rune(',') {
-						goto l335
+						goto l353
 					}
 					position++
 					{
-						position338, tokenIndex338 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l338
-						}
-						goto l339
-					l338:
-						position, tokenIndex = position338, tokenIndex338
-					}
-				l339:
-					if !_rules[ruleSymbolArg]() {
-						goto l335
-					}
-					goto l334
-				l335:
-					position, tokenIndex = position335, tokenIndex335
-				}
-				add(ruleSymbolArgs, position333)
-			}
-			return true
-		l332:
-			position, tokenIndex = position332, tokenIndex332
-			return false
-		},
-		/* 17 SymbolArg <- <SymbolExpr> */
-		func() bool {
-			position340, tokenIndex340 := position, tokenIndex
-			{
-				position341 := position
-				if !_rules[ruleSymbolExpr]() {
-					goto l340
-				}
-				add(ruleSymbolArg, position341)
-			}
-			return true
-		l340:
-			position, tokenIndex = position340, tokenIndex340
-			return false
-		},
-		/* 18 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
-		func() bool {
-			position342, tokenIndex342 := position, tokenIndex
-			{
-				position343 := position
-				if !_rules[ruleSymbolAtom]() {
-					goto l342
-				}
-				{
-					position344, tokenIndex344 := position, tokenIndex
-					{
-						position346, tokenIndex346 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l346
-						}
-						goto l347
-					l346:
-						position, tokenIndex = position346, tokenIndex346
-					}
-				l347:
-					if !_rules[ruleSymbolOperator]() {
-						goto l344
-					}
-					{
-						position348, tokenIndex348 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l348
-						}
-						goto l349
-					l348:
-						position, tokenIndex = position348, tokenIndex348
-					}
-				l349:
-					if !_rules[ruleSymbolExpr]() {
-						goto l344
-					}
-					goto l345
-				l344:
-					position, tokenIndex = position344, tokenIndex344
-				}
-			l345:
-				add(ruleSymbolExpr, position343)
-			}
-			return true
-		l342:
-			position, tokenIndex = position342, tokenIndex342
-			return false
-		},
-		/* 19 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
-		func() bool {
-			position350, tokenIndex350 := position, tokenIndex
-			{
-				position351 := position
-				{
-					position352, tokenIndex352 := position, tokenIndex
-					if !_rules[ruleLocalLabelRef]() {
-						goto l353
-					}
-					goto l352
-				l353:
-					position, tokenIndex = position352, tokenIndex352
-					if !_rules[ruleOffset]() {
-						goto l354
-					}
-					goto l352
-				l354:
-					position, tokenIndex = position352, tokenIndex352
-					if !_rules[ruleSymbolType]() {
-						goto l355
-					}
-					goto l352
-				l355:
-					position, tokenIndex = position352, tokenIndex352
-					if !_rules[ruleLocalSymbol]() {
-						goto l356
-					}
-					{
 						position357, tokenIndex357 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
+						if !_rules[ruleWS]() {
 							goto l357
 						}
 						goto l358
@@ -2979,24 +3013,26 @@
 						position, tokenIndex = position357, tokenIndex357
 					}
 				l358:
-					goto l352
-				l356:
-					position, tokenIndex = position352, tokenIndex352
-					if !_rules[ruleSymbolName]() {
-						goto l359
-					}
-					if !_rules[ruleOffset]() {
-						goto l359
-					}
-					goto l352
-				l359:
-					position, tokenIndex = position352, tokenIndex352
-					if !_rules[ruleSymbolName]() {
-						goto l360
+					if !_rules[ruleSymbolArg]() {
+						goto l353
 					}
 					{
+						position359, tokenIndex359 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l359
+						}
+						goto l360
+					l359:
+						position, tokenIndex = position359, tokenIndex359
+					}
+				l360:
+					if buffer[position] != rune(',') {
+						goto l353
+					}
+					position++
+					{
 						position361, tokenIndex361 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
+						if !_rules[ruleWS]() {
 							goto l361
 						}
 						goto l362
@@ -3004,1527 +3040,1286 @@
 						position, tokenIndex = position361, tokenIndex361
 					}
 				l362:
-					goto l352
-				l360:
-					position, tokenIndex = position352, tokenIndex352
-					if !_rules[ruleDot]() {
-						goto l363
+					if !_rules[ruleArg]() {
+						goto l353
 					}
-					goto l352
-				l363:
-					position, tokenIndex = position352, tokenIndex352
-					if !_rules[ruleOpenParen]() {
-						goto l350
+					goto l354
+				l353:
+					position, tokenIndex = position353, tokenIndex353
+				}
+			l354:
+				add(rulePrefAlignDirective, position334)
+			}
+			return true
+		l333:
+			position, tokenIndex = position333, tokenIndex333
+			return false
+		},
+		/* 17 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
+		func() bool {
+			position363, tokenIndex363 := position, tokenIndex
+			{
+				position364 := position
+				if !_rules[ruleSymbolArg]() {
+					goto l363
+				}
+			l365:
+				{
+					position366, tokenIndex366 := position, tokenIndex
+					{
+						position367, tokenIndex367 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l367
+						}
+						goto l368
+					l367:
+						position, tokenIndex = position367, tokenIndex367
+					}
+				l368:
+					if buffer[position] != rune(',') {
+						goto l366
+					}
+					position++
+					{
+						position369, tokenIndex369 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l369
+						}
+						goto l370
+					l369:
+						position, tokenIndex = position369, tokenIndex369
+					}
+				l370:
+					if !_rules[ruleSymbolArg]() {
+						goto l366
+					}
+					goto l365
+				l366:
+					position, tokenIndex = position366, tokenIndex366
+				}
+				add(ruleSymbolArgs, position364)
+			}
+			return true
+		l363:
+			position, tokenIndex = position363, tokenIndex363
+			return false
+		},
+		/* 18 SymbolArg <- <SymbolExpr> */
+		func() bool {
+			position371, tokenIndex371 := position, tokenIndex
+			{
+				position372 := position
+				if !_rules[ruleSymbolExpr]() {
+					goto l371
+				}
+				add(ruleSymbolArg, position372)
+			}
+			return true
+		l371:
+			position, tokenIndex = position371, tokenIndex371
+			return false
+		},
+		/* 19 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
+		func() bool {
+			position373, tokenIndex373 := position, tokenIndex
+			{
+				position374 := position
+				if !_rules[ruleSymbolAtom]() {
+					goto l373
+				}
+				{
+					position375, tokenIndex375 := position, tokenIndex
+					{
+						position377, tokenIndex377 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l377
+						}
+						goto l378
+					l377:
+						position, tokenIndex = position377, tokenIndex377
+					}
+				l378:
+					if !_rules[ruleSymbolOperator]() {
+						goto l375
 					}
 					{
-						position364, tokenIndex364 := position, tokenIndex
+						position379, tokenIndex379 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l364
+							goto l379
 						}
-						goto l365
-					l364:
-						position, tokenIndex = position364, tokenIndex364
+						goto l380
+					l379:
+						position, tokenIndex = position379, tokenIndex379
 					}
-				l365:
+				l380:
 					if !_rules[ruleSymbolExpr]() {
-						goto l350
+						goto l375
 					}
-					{
-						position366, tokenIndex366 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l366
-						}
-						goto l367
-					l366:
-						position, tokenIndex = position366, tokenIndex366
-					}
-				l367:
-					if !_rules[ruleCloseParen]() {
-						goto l350
-					}
+					goto l376
+				l375:
+					position, tokenIndex = position375, tokenIndex375
 				}
-			l352:
-				add(ruleSymbolAtom, position351)
+			l376:
+				add(ruleSymbolExpr, position374)
 			}
 			return true
-		l350:
-			position, tokenIndex = position350, tokenIndex350
+		l373:
+			position, tokenIndex = position373, tokenIndex373
 			return false
 		},
-		/* 20 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
+		/* 20 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
 		func() bool {
-			position368, tokenIndex368 := position, tokenIndex
+			position381, tokenIndex381 := position, tokenIndex
 			{
-				position369 := position
-				{
-					position370, tokenIndex370 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l371
-					}
-					position++
-					goto l370
-				l371:
-					position, tokenIndex = position370, tokenIndex370
-					if buffer[position] != rune('-') {
-						goto l372
-					}
-					position++
-					goto l370
-				l372:
-					position, tokenIndex = position370, tokenIndex370
-					if buffer[position] != rune('|') {
-						goto l373
-					}
-					position++
-					goto l370
-				l373:
-					position, tokenIndex = position370, tokenIndex370
-					if buffer[position] != rune('<') {
-						goto l374
-					}
-					position++
-					if buffer[position] != rune('<') {
-						goto l374
-					}
-					position++
-					goto l370
-				l374:
-					position, tokenIndex = position370, tokenIndex370
-					if buffer[position] != rune('>') {
-						goto l368
-					}
-					position++
-					if buffer[position] != rune('>') {
-						goto l368
-					}
-					position++
-				}
-			l370:
-				add(ruleSymbolOperator, position369)
-			}
-			return true
-		l368:
-			position, tokenIndex = position368, tokenIndex368
-			return false
-		},
-		/* 21 OpenParen <- <'('> */
-		func() bool {
-			position375, tokenIndex375 := position, tokenIndex
-			{
-				position376 := position
-				if buffer[position] != rune('(') {
-					goto l375
-				}
-				position++
-				add(ruleOpenParen, position376)
-			}
-			return true
-		l375:
-			position, tokenIndex = position375, tokenIndex375
-			return false
-		},
-		/* 22 CloseParen <- <')'> */
-		func() bool {
-			position377, tokenIndex377 := position, tokenIndex
-			{
-				position378 := position
-				if buffer[position] != rune(')') {
-					goto l377
-				}
-				position++
-				add(ruleCloseParen, position378)
-			}
-			return true
-		l377:
-			position, tokenIndex = position377, tokenIndex377
-			return false
-		},
-		/* 23 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
-		func() bool {
-			position379, tokenIndex379 := position, tokenIndex
-			{
-				position380 := position
-				{
-					position381, tokenIndex381 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l382
-					}
-					position++
-					goto l381
-				l382:
-					position, tokenIndex = position381, tokenIndex381
-					if buffer[position] != rune('%') {
-						goto l379
-					}
-					position++
-				}
-			l381:
+				position382 := position
 				{
 					position383, tokenIndex383 := position, tokenIndex
-					if buffer[position] != rune('f') {
+					if !_rules[ruleLocalLabelRef]() {
 						goto l384
 					}
-					position++
-					if buffer[position] != rune('u') {
-						goto l384
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l384
-					}
-					position++
-					if buffer[position] != rune('c') {
-						goto l384
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l384
-					}
-					position++
-					if buffer[position] != rune('i') {
-						goto l384
-					}
-					position++
-					if buffer[position] != rune('o') {
-						goto l384
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l384
-					}
-					position++
 					goto l383
 				l384:
 					position, tokenIndex = position383, tokenIndex383
-					if buffer[position] != rune('o') {
-						goto l379
+					if !_rules[ruleOffset]() {
+						goto l385
 					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l379
+					goto l383
+				l385:
+					position, tokenIndex = position383, tokenIndex383
+					if !_rules[ruleSymbolType]() {
+						goto l386
 					}
-					position++
-					if buffer[position] != rune('j') {
-						goto l379
+					goto l383
+				l386:
+					position, tokenIndex = position383, tokenIndex383
+					if !_rules[ruleLocalSymbol]() {
+						goto l387
 					}
-					position++
-					if buffer[position] != rune('e') {
-						goto l379
+					{
+						position388, tokenIndex388 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l388
+						}
+						goto l389
+					l388:
+						position, tokenIndex = position388, tokenIndex388
 					}
-					position++
-					if buffer[position] != rune('c') {
-						goto l379
+				l389:
+					goto l383
+				l387:
+					position, tokenIndex = position383, tokenIndex383
+					if !_rules[ruleSymbolName]() {
+						goto l390
 					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l379
+					if !_rules[ruleOffset]() {
+						goto l390
 					}
-					position++
-				}
-			l383:
-				add(ruleSymbolType, position380)
-			}
-			return true
-		l379:
-			position, tokenIndex = position379, tokenIndex379
-			return false
-		},
-		/* 24 Dot <- <'.'> */
-		func() bool {
-			position385, tokenIndex385 := position, tokenIndex
-			{
-				position386 := position
-				if buffer[position] != rune('.') {
-					goto l385
-				}
-				position++
-				add(ruleDot, position386)
-			}
-			return true
-		l385:
-			position, tokenIndex = position385, tokenIndex385
-			return false
-		},
-		/* 25 TCMarker <- <('[' 'T' 'C' ']')> */
-		func() bool {
-			position387, tokenIndex387 := position, tokenIndex
-			{
-				position388 := position
-				if buffer[position] != rune('[') {
-					goto l387
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l387
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l387
-				}
-				position++
-				if buffer[position] != rune(']') {
-					goto l387
-				}
-				position++
-				add(ruleTCMarker, position388)
-			}
-			return true
-		l387:
-			position, tokenIndex = position387, tokenIndex387
-			return false
-		},
-		/* 26 EscapedChar <- <('\\' .)> */
-		func() bool {
-			position389, tokenIndex389 := position, tokenIndex
-			{
-				position390 := position
-				if buffer[position] != rune('\\') {
-					goto l389
-				}
-				position++
-				if !matchDot() {
-					goto l389
-				}
-				add(ruleEscapedChar, position390)
-			}
-			return true
-		l389:
-			position, tokenIndex = position389, tokenIndex389
-			return false
-		},
-		/* 27 WS <- <(' ' / '\t')+> */
-		func() bool {
-			position391, tokenIndex391 := position, tokenIndex
-			{
-				position392 := position
-				{
-					position395, tokenIndex395 := position, tokenIndex
-					if buffer[position] != rune(' ') {
-						goto l396
-					}
-					position++
-					goto l395
-				l396:
-					position, tokenIndex = position395, tokenIndex395
-					if buffer[position] != rune('\t') {
+					goto l383
+				l390:
+					position, tokenIndex = position383, tokenIndex383
+					if !_rules[ruleSymbolName]() {
 						goto l391
 					}
-					position++
-				}
-			l395:
-			l393:
-				{
-					position394, tokenIndex394 := position, tokenIndex
+					{
+						position392, tokenIndex392 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l392
+						}
+						goto l393
+					l392:
+						position, tokenIndex = position392, tokenIndex392
+					}
+				l393:
+					goto l383
+				l391:
+					position, tokenIndex = position383, tokenIndex383
+					if !_rules[ruleDot]() {
+						goto l394
+					}
+					goto l383
+				l394:
+					position, tokenIndex = position383, tokenIndex383
+					if !_rules[ruleOpenParen]() {
+						goto l381
+					}
+					{
+						position395, tokenIndex395 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l395
+						}
+						goto l396
+					l395:
+						position, tokenIndex = position395, tokenIndex395
+					}
+				l396:
+					if !_rules[ruleSymbolExpr]() {
+						goto l381
+					}
 					{
 						position397, tokenIndex397 := position, tokenIndex
-						if buffer[position] != rune(' ') {
-							goto l398
+						if !_rules[ruleWS]() {
+							goto l397
 						}
-						position++
-						goto l397
-					l398:
+						goto l398
+					l397:
 						position, tokenIndex = position397, tokenIndex397
-						if buffer[position] != rune('\t') {
-							goto l394
-						}
-						position++
 					}
-				l397:
-					goto l393
-				l394:
-					position, tokenIndex = position394, tokenIndex394
+				l398:
+					if !_rules[ruleCloseParen]() {
+						goto l381
+					}
 				}
-				add(ruleWS, position392)
+			l383:
+				add(ruleSymbolAtom, position382)
 			}
 			return true
-		l391:
-			position, tokenIndex = position391, tokenIndex391
+		l381:
+			position, tokenIndex = position381, tokenIndex381
 			return false
 		},
-		/* 28 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
+		/* 21 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
 		func() bool {
 			position399, tokenIndex399 := position, tokenIndex
 			{
 				position400 := position
 				{
 					position401, tokenIndex401 := position, tokenIndex
-					if buffer[position] != rune('/') {
-						goto l402
-					}
-					position++
-					if buffer[position] != rune('/') {
+					if buffer[position] != rune('+') {
 						goto l402
 					}
 					position++
 					goto l401
 				l402:
 					position, tokenIndex = position401, tokenIndex401
-					if buffer[position] != rune('#') {
+					if buffer[position] != rune('-') {
+						goto l403
+					}
+					position++
+					goto l401
+				l403:
+					position, tokenIndex = position401, tokenIndex401
+					if buffer[position] != rune('|') {
+						goto l404
+					}
+					position++
+					goto l401
+				l404:
+					position, tokenIndex = position401, tokenIndex401
+					if buffer[position] != rune('<') {
+						goto l405
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l405
+					}
+					position++
+					goto l401
+				l405:
+					position, tokenIndex = position401, tokenIndex401
+					if buffer[position] != rune('>') {
+						goto l399
+					}
+					position++
+					if buffer[position] != rune('>') {
 						goto l399
 					}
 					position++
 				}
 			l401:
-			l403:
-				{
-					position404, tokenIndex404 := position, tokenIndex
-					{
-						position405, tokenIndex405 := position, tokenIndex
-						if buffer[position] != rune('\n') {
-							goto l405
-						}
-						position++
-						goto l404
-					l405:
-						position, tokenIndex = position405, tokenIndex405
-					}
-					if !matchDot() {
-						goto l404
-					}
-					goto l403
-				l404:
-					position, tokenIndex = position404, tokenIndex404
-				}
-				add(ruleComment, position400)
+				add(ruleSymbolOperator, position400)
 			}
 			return true
 		l399:
 			position, tokenIndex = position399, tokenIndex399
 			return false
 		},
-		/* 29 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		/* 22 OpenParen <- <'('> */
 		func() bool {
 			position406, tokenIndex406 := position, tokenIndex
 			{
 				position407 := position
-				{
-					position408, tokenIndex408 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l409
-					}
-					goto l408
-				l409:
-					position, tokenIndex = position408, tokenIndex408
-					if !_rules[ruleLocalLabel]() {
-						goto l410
-					}
-					goto l408
-				l410:
-					position, tokenIndex = position408, tokenIndex408
-					if !_rules[ruleSymbolName]() {
-						goto l406
-					}
-				}
-			l408:
-				if buffer[position] != rune(':') {
+				if buffer[position] != rune('(') {
 					goto l406
 				}
 				position++
-				add(ruleLabel, position407)
+				add(ruleOpenParen, position407)
 			}
 			return true
 		l406:
 			position, tokenIndex = position406, tokenIndex406
 			return false
 		},
-		/* 30 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		/* 23 CloseParen <- <')'> */
 		func() bool {
-			position411, tokenIndex411 := position, tokenIndex
+			position408, tokenIndex408 := position, tokenIndex
 			{
-				position412 := position
+				position409 := position
+				if buffer[position] != rune(')') {
+					goto l408
+				}
+				position++
+				add(ruleCloseParen, position409)
+			}
+			return true
+		l408:
+			position, tokenIndex = position408, tokenIndex408
+			return false
+		},
+		/* 24 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
+		func() bool {
+			position410, tokenIndex410 := position, tokenIndex
+			{
+				position411 := position
 				{
-					position413, tokenIndex413 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l414
+					position412, tokenIndex412 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l413
 					}
 					position++
-					goto l413
-				l414:
-					position, tokenIndex = position413, tokenIndex413
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+					goto l412
+				l413:
+					position, tokenIndex = position412, tokenIndex412
+					if buffer[position] != rune('%') {
+						goto l410
+					}
+					position++
+				}
+			l412:
+				{
+					position414, tokenIndex414 := position, tokenIndex
+					if buffer[position] != rune('f') {
 						goto l415
 					}
 					position++
-					goto l413
+					if buffer[position] != rune('u') {
+						goto l415
+					}
+					position++
+					if buffer[position] != rune('n') {
+						goto l415
+					}
+					position++
+					if buffer[position] != rune('c') {
+						goto l415
+					}
+					position++
+					if buffer[position] != rune('t') {
+						goto l415
+					}
+					position++
+					if buffer[position] != rune('i') {
+						goto l415
+					}
+					position++
+					if buffer[position] != rune('o') {
+						goto l415
+					}
+					position++
+					if buffer[position] != rune('n') {
+						goto l415
+					}
+					position++
+					goto l414
 				l415:
-					position, tokenIndex = position413, tokenIndex413
-					if buffer[position] != rune('.') {
-						goto l416
+					position, tokenIndex = position414, tokenIndex414
+					if buffer[position] != rune('o') {
+						goto l410
 					}
 					position++
-					goto l413
-				l416:
-					position, tokenIndex = position413, tokenIndex413
-					if buffer[position] != rune('_') {
-						goto l411
+					if buffer[position] != rune('b') {
+						goto l410
+					}
+					position++
+					if buffer[position] != rune('j') {
+						goto l410
+					}
+					position++
+					if buffer[position] != rune('e') {
+						goto l410
+					}
+					position++
+					if buffer[position] != rune('c') {
+						goto l410
+					}
+					position++
+					if buffer[position] != rune('t') {
+						goto l410
 					}
 					position++
 				}
-			l413:
-			l417:
-				{
-					position418, tokenIndex418 := position, tokenIndex
-					{
-						position419, tokenIndex419 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l420
-						}
-						position++
-						goto l419
-					l420:
-						position, tokenIndex = position419, tokenIndex419
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l421
-						}
-						position++
-						goto l419
-					l421:
-						position, tokenIndex = position419, tokenIndex419
-						if buffer[position] != rune('.') {
-							goto l422
-						}
-						position++
-						goto l419
-					l422:
-						position, tokenIndex = position419, tokenIndex419
-						{
-							position424, tokenIndex424 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l425
-							}
-							position++
-							goto l424
-						l425:
-							position, tokenIndex = position424, tokenIndex424
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l423
-							}
-							position++
-						}
-					l424:
-						goto l419
-					l423:
-						position, tokenIndex = position419, tokenIndex419
-						if buffer[position] != rune('$') {
-							goto l426
-						}
-						position++
-						goto l419
-					l426:
-						position, tokenIndex = position419, tokenIndex419
-						if buffer[position] != rune('_') {
-							goto l418
-						}
-						position++
-					}
-				l419:
-					goto l417
-				l418:
-					position, tokenIndex = position418, tokenIndex418
-				}
-				add(ruleSymbolName, position412)
+			l414:
+				add(ruleSymbolType, position411)
 			}
 			return true
-		l411:
-			position, tokenIndex = position411, tokenIndex411
+		l410:
+			position, tokenIndex = position410, tokenIndex410
 			return false
 		},
-		/* 31 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
+		/* 25 Dot <- <'.'> */
 		func() bool {
-			position427, tokenIndex427 := position, tokenIndex
+			position416, tokenIndex416 := position, tokenIndex
 			{
-				position428 := position
+				position417 := position
 				if buffer[position] != rune('.') {
-					goto l427
+					goto l416
 				}
 				position++
-				if buffer[position] != rune('L') {
-					goto l427
+				add(ruleDot, position417)
+			}
+			return true
+		l416:
+			position, tokenIndex = position416, tokenIndex416
+			return false
+		},
+		/* 26 TCMarker <- <('[' 'T' 'C' ']')> */
+		func() bool {
+			position418, tokenIndex418 := position, tokenIndex
+			{
+				position419 := position
+				if buffer[position] != rune('[') {
+					goto l418
 				}
 				position++
+				if buffer[position] != rune('T') {
+					goto l418
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l418
+				}
+				position++
+				if buffer[position] != rune(']') {
+					goto l418
+				}
+				position++
+				add(ruleTCMarker, position419)
+			}
+			return true
+		l418:
+			position, tokenIndex = position418, tokenIndex418
+			return false
+		},
+		/* 27 EscapedChar <- <('\\' .)> */
+		func() bool {
+			position420, tokenIndex420 := position, tokenIndex
+			{
+				position421 := position
+				if buffer[position] != rune('\\') {
+					goto l420
+				}
+				position++
+				if !matchDot() {
+					goto l420
+				}
+				add(ruleEscapedChar, position421)
+			}
+			return true
+		l420:
+			position, tokenIndex = position420, tokenIndex420
+			return false
+		},
+		/* 28 WS <- <(' ' / '\t')+> */
+		func() bool {
+			position422, tokenIndex422 := position, tokenIndex
+			{
+				position423 := position
 				{
-					position431, tokenIndex431 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l432
+					position426, tokenIndex426 := position, tokenIndex
+					if buffer[position] != rune(' ') {
+						goto l427
 					}
 					position++
-					goto l431
-				l432:
-					position, tokenIndex = position431, tokenIndex431
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+					goto l426
+				l427:
+					position, tokenIndex = position426, tokenIndex426
+					if buffer[position] != rune('\t') {
+						goto l422
+					}
+					position++
+				}
+			l426:
+			l424:
+				{
+					position425, tokenIndex425 := position, tokenIndex
+					{
+						position428, tokenIndex428 := position, tokenIndex
+						if buffer[position] != rune(' ') {
+							goto l429
+						}
+						position++
+						goto l428
+					l429:
+						position, tokenIndex = position428, tokenIndex428
+						if buffer[position] != rune('\t') {
+							goto l425
+						}
+						position++
+					}
+				l428:
+					goto l424
+				l425:
+					position, tokenIndex = position425, tokenIndex425
+				}
+				add(ruleWS, position423)
+			}
+			return true
+		l422:
+			position, tokenIndex = position422, tokenIndex422
+			return false
+		},
+		/* 29 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
+		func() bool {
+			position430, tokenIndex430 := position, tokenIndex
+			{
+				position431 := position
+				{
+					position432, tokenIndex432 := position, tokenIndex
+					if buffer[position] != rune('/') {
 						goto l433
 					}
 					position++
-					goto l431
+					if buffer[position] != rune('/') {
+						goto l433
+					}
+					position++
+					goto l432
 				l433:
-					position, tokenIndex = position431, tokenIndex431
+					position, tokenIndex = position432, tokenIndex432
+					if buffer[position] != rune('#') {
+						goto l430
+					}
+					position++
+				}
+			l432:
+			l434:
+				{
+					position435, tokenIndex435 := position, tokenIndex
 					{
-						position435, tokenIndex435 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
+						position436, tokenIndex436 := position, tokenIndex
+						if buffer[position] != rune('\n') {
 							goto l436
 						}
 						position++
 						goto l435
 					l436:
-						position, tokenIndex = position435, tokenIndex435
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l434
-						}
-						position++
+						position, tokenIndex = position436, tokenIndex436
 					}
+					if !matchDot() {
+						goto l435
+					}
+					goto l434
 				l435:
-					goto l431
-				l434:
-					position, tokenIndex = position431, tokenIndex431
-					if buffer[position] != rune('.') {
-						goto l437
+					position, tokenIndex = position435, tokenIndex435
+				}
+				add(ruleComment, position431)
+			}
+			return true
+		l430:
+			position, tokenIndex = position430, tokenIndex430
+			return false
+		},
+		/* 30 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		func() bool {
+			position437, tokenIndex437 := position, tokenIndex
+			{
+				position438 := position
+				{
+					position439, tokenIndex439 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l440
 					}
-					position++
-					goto l431
-				l437:
-					position, tokenIndex = position431, tokenIndex431
-					{
-						position439, tokenIndex439 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l440
-						}
-						position++
-						goto l439
-					l440:
-						position, tokenIndex = position439, tokenIndex439
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l438
-						}
-						position++
-					}
-				l439:
-					goto l431
-				l438:
-					position, tokenIndex = position431, tokenIndex431
-					if buffer[position] != rune('$') {
+					goto l439
+				l440:
+					position, tokenIndex = position439, tokenIndex439
+					if !_rules[ruleLocalLabel]() {
 						goto l441
 					}
-					position++
-					goto l431
+					goto l439
 				l441:
-					position, tokenIndex = position431, tokenIndex431
+					position, tokenIndex = position439, tokenIndex439
+					if !_rules[ruleSymbolName]() {
+						goto l437
+					}
+				}
+			l439:
+				if buffer[position] != rune(':') {
+					goto l437
+				}
+				position++
+				add(ruleLabel, position438)
+			}
+			return true
+		l437:
+			position, tokenIndex = position437, tokenIndex437
+			return false
+		},
+		/* 31 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		func() bool {
+			position442, tokenIndex442 := position, tokenIndex
+			{
+				position443 := position
+				{
+					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
 					if buffer[position] != rune('_') {
-						goto l427
+						goto l442
 					}
 					position++
 				}
-			l431:
-			l429:
+			l444:
+			l448:
 				{
-					position430, tokenIndex430 := position, tokenIndex
+					position449, tokenIndex449 := position, tokenIndex
 					{
-						position442, tokenIndex442 := position, tokenIndex
+						position450, tokenIndex450 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l443
+							goto l451
 						}
 						position++
-						goto l442
-					l443:
-						position, tokenIndex = position442, tokenIndex442
+						goto l450
+					l451:
+						position, tokenIndex = position450, tokenIndex450
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l444
-						}
-						position++
-						goto l442
-					l444:
-						position, tokenIndex = position442, tokenIndex442
-						{
-							position446, tokenIndex446 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l447
-							}
-							position++
-							goto l446
-						l447:
-							position, tokenIndex = position446, tokenIndex446
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l445
-							}
-							position++
-						}
-					l446:
-						goto l442
-					l445:
-						position, tokenIndex = position442, tokenIndex442
-						if buffer[position] != rune('.') {
-							goto l448
-						}
-						position++
-						goto l442
-					l448:
-						position, tokenIndex = position442, tokenIndex442
-						{
-							position450, tokenIndex450 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l451
-							}
-							position++
-							goto l450
-						l451:
-							position, tokenIndex = position450, tokenIndex450
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l449
-							}
-							position++
-						}
-					l450:
-						goto l442
-					l449:
-						position, tokenIndex = position442, tokenIndex442
-						if buffer[position] != rune('$') {
 							goto l452
 						}
 						position++
-						goto l442
+						goto l450
 					l452:
-						position, tokenIndex = position442, tokenIndex442
-						if buffer[position] != rune('_') {
-							goto l430
+						position, tokenIndex = position450, tokenIndex450
+						if buffer[position] != rune('.') {
+							goto l453
 						}
 						position++
-					}
-				l442:
-					goto l429
-				l430:
-					position, tokenIndex = position430, tokenIndex430
-				}
-				add(ruleLocalSymbol, position428)
-			}
-			return true
-		l427:
-			position, tokenIndex = position427, tokenIndex427
-			return false
-		},
-		/* 32 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
-		func() bool {
-			position453, tokenIndex453 := position, tokenIndex
-			{
-				position454 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l453
-				}
-				position++
-			l455:
-				{
-					position456, tokenIndex456 := position, tokenIndex
-					{
-						position457, tokenIndex457 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l458
+						goto l450
+					l453:
+						position, tokenIndex = position450, tokenIndex450
+						{
+							position455, tokenIndex455 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l456
+							}
+							position++
+							goto l455
+						l456:
+							position, tokenIndex = position455, tokenIndex455
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l454
+							}
+							position++
 						}
-						position++
-						goto l457
-					l458:
-						position, tokenIndex = position457, tokenIndex457
+					l455:
+						goto l450
+					l454:
+						position, tokenIndex = position450, tokenIndex450
 						if buffer[position] != rune('$') {
-							goto l456
+							goto l457
+						}
+						position++
+						goto l450
+					l457:
+						position, tokenIndex = position450, tokenIndex450
+						if buffer[position] != rune('_') {
+							goto l449
 						}
 						position++
 					}
-				l457:
-					goto l455
-				l456:
-					position, tokenIndex = position456, tokenIndex456
+				l450:
+					goto l448
+				l449:
+					position, tokenIndex = position449, tokenIndex449
 				}
-				add(ruleLocalLabel, position454)
+				add(ruleSymbolName, position443)
 			}
 			return true
-		l453:
-			position, tokenIndex = position453, tokenIndex453
+		l442:
+			position, tokenIndex = position442, tokenIndex442
 			return false
 		},
-		/* 33 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
+		/* 32 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
 		func() bool {
-			position459, tokenIndex459 := position, tokenIndex
+			position458, tokenIndex458 := position, tokenIndex
 			{
-				position460 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l459
+				position459 := position
+				if buffer[position] != rune('.') {
+					goto l458
 				}
 				position++
-			l461:
+				if buffer[position] != rune('L') {
+					goto l458
+				}
+				position++
 				{
 					position462, tokenIndex462 := position, tokenIndex
-					{
-						position463, tokenIndex463 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l464
-						}
-						position++
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
 						goto l463
-					l464:
-						position, tokenIndex = position463, tokenIndex463
-						if buffer[position] != rune('$') {
-							goto l462
+					}
+					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
+					{
+						position466, tokenIndex466 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l467
+						}
+						position++
+						goto l466
+					l467:
+						position, tokenIndex = position466, tokenIndex466
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l465
 						}
 						position++
 					}
-				l463:
-					goto l461
-				l462:
-					position, tokenIndex = position462, tokenIndex462
-				}
-				{
-					position465, tokenIndex465 := position, tokenIndex
-					if buffer[position] != rune('b') {
-						goto l466
-					}
-					position++
-					goto l465
 				l466:
-					position, tokenIndex = position465, tokenIndex465
-					if buffer[position] != rune('f') {
-						goto l459
+					goto l462
+				l465:
+					position, tokenIndex = position462, tokenIndex462
+					if buffer[position] != rune('.') {
+						goto l468
 					}
 					position++
-				}
-			l465:
-				add(ruleLocalLabelRef, position460)
-			}
-			return true
-		l459:
-			position, tokenIndex = position459, tokenIndex459
-			return false
-		},
-		/* 34 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
-		func() bool {
-			position467, tokenIndex467 := position, tokenIndex
-			{
-				position468 := position
-				{
-					position469, tokenIndex469 := position, tokenIndex
-					if buffer[position] != rune('n') {
+					goto l462
+				l468:
+					position, tokenIndex = position462, tokenIndex462
+					{
+						position470, tokenIndex470 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l471
+						}
+						position++
 						goto l470
+					l471:
+						position, tokenIndex = position470, tokenIndex470
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l469
+						}
+						position++
 					}
-					position++
-					goto l469
 				l470:
-					position, tokenIndex = position469, tokenIndex469
-					if buffer[position] != rune('N') {
-						goto l467
-					}
-					position++
-				}
-			l469:
-				{
-					position471, tokenIndex471 := position, tokenIndex
-					if buffer[position] != rune('o') {
+					goto l462
+				l469:
+					position, tokenIndex = position462, tokenIndex462
+					if buffer[position] != rune('$') {
 						goto l472
 					}
 					position++
-					goto l471
+					goto l462
 				l472:
-					position, tokenIndex = position471, tokenIndex471
-					if buffer[position] != rune('O') {
-						goto l467
+					position, tokenIndex = position462, tokenIndex462
+					if buffer[position] != rune('_') {
+						goto l458
 					}
 					position++
 				}
-			l471:
+			l462:
+			l460:
 				{
-					position473, tokenIndex473 := position, tokenIndex
-					if buffer[position] != rune('t') {
-						goto l474
-					}
-					position++
-					goto l473
-				l474:
-					position, tokenIndex = position473, tokenIndex473
-					if buffer[position] != rune('T') {
-						goto l467
-					}
-					position++
-				}
-			l473:
-				{
-					position475, tokenIndex475 := position, tokenIndex
-					if buffer[position] != rune('r') {
-						goto l476
-					}
-					position++
-					goto l475
-				l476:
-					position, tokenIndex = position475, tokenIndex475
-					if buffer[position] != rune('R') {
-						goto l467
-					}
-					position++
-				}
-			l475:
-				{
-					position477, tokenIndex477 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l478
-					}
-					position++
-					goto l477
-				l478:
-					position, tokenIndex = position477, tokenIndex477
-					if buffer[position] != rune('A') {
-						goto l467
-					}
-					position++
-				}
-			l477:
-				{
-					position479, tokenIndex479 := position, tokenIndex
-					if buffer[position] != rune('c') {
-						goto l480
-					}
-					position++
-					goto l479
-				l480:
-					position, tokenIndex = position479, tokenIndex479
-					if buffer[position] != rune('C') {
-						goto l467
-					}
-					position++
-				}
-			l479:
-				{
-					position481, tokenIndex481 := position, tokenIndex
-					if buffer[position] != rune('k') {
-						goto l482
-					}
-					position++
-					goto l481
-				l482:
-					position, tokenIndex = position481, tokenIndex481
-					if buffer[position] != rune('K') {
-						goto l467
-					}
-					position++
-				}
-			l481:
-				add(ruleInstructionPrefix, position468)
-			}
-			return true
-		l467:
-			position, tokenIndex = position467, tokenIndex467
-			return false
-		},
-		/* 35 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
-		func() bool {
-			position483, tokenIndex483 := position, tokenIndex
-			{
-				position484 := position
-				{
-					position485, tokenIndex485 := position, tokenIndex
-					if !_rules[ruleInstructionPrefix]() {
-						goto l485
-					}
-					if !_rules[ruleWS]() {
-						goto l485
-					}
-					goto l486
-				l485:
-					position, tokenIndex = position485, tokenIndex485
-				}
-			l486:
-				if !_rules[ruleInstructionName]() {
-					goto l483
-				}
-				{
-					position487, tokenIndex487 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l487
-					}
-					if !_rules[ruleInstructionArg]() {
-						goto l487
-					}
-				l489:
+					position461, tokenIndex461 := position, tokenIndex
 					{
-						position490, tokenIndex490 := position, tokenIndex
-						{
-							position491, tokenIndex491 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l491
-							}
-							goto l492
-						l491:
-							position, tokenIndex = position491, tokenIndex491
-						}
-					l492:
-						if buffer[position] != rune(',') {
-							goto l490
+						position473, tokenIndex473 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l474
 						}
 						position++
+						goto l473
+					l474:
+						position, tokenIndex = position473, tokenIndex473
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l475
+						}
+						position++
+						goto l473
+					l475:
+						position, tokenIndex = position473, tokenIndex473
 						{
-							position493, tokenIndex493 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l493
+							position477, tokenIndex477 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l478
 							}
-							goto l494
-						l493:
-							position, tokenIndex = position493, tokenIndex493
+							position++
+							goto l477
+						l478:
+							position, tokenIndex = position477, tokenIndex477
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l476
+							}
+							position++
 						}
-					l494:
-						if !_rules[ruleInstructionArg]() {
-							goto l490
+					l477:
+						goto l473
+					l476:
+						position, tokenIndex = position473, tokenIndex473
+						if buffer[position] != rune('.') {
+							goto l479
 						}
-						goto l489
-					l490:
-						position, tokenIndex = position490, tokenIndex490
+						position++
+						goto l473
+					l479:
+						position, tokenIndex = position473, tokenIndex473
+						{
+							position481, tokenIndex481 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l482
+							}
+							position++
+							goto l481
+						l482:
+							position, tokenIndex = position481, tokenIndex481
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l480
+							}
+							position++
+						}
+					l481:
+						goto l473
+					l480:
+						position, tokenIndex = position473, tokenIndex473
+						if buffer[position] != rune('$') {
+							goto l483
+						}
+						position++
+						goto l473
+					l483:
+						position, tokenIndex = position473, tokenIndex473
+						if buffer[position] != rune('_') {
+							goto l461
+						}
+						position++
 					}
-					goto l488
+				l473:
+					goto l460
+				l461:
+					position, tokenIndex = position461, tokenIndex461
+				}
+				add(ruleLocalSymbol, position459)
+			}
+			return true
+		l458:
+			position, tokenIndex = position458, tokenIndex458
+			return false
+		},
+		/* 33 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
+		func() bool {
+			position484, tokenIndex484 := position, tokenIndex
+			{
+				position485 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l484
+				}
+				position++
+			l486:
+				{
+					position487, tokenIndex487 := position, tokenIndex
+					{
+						position488, tokenIndex488 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l489
+						}
+						position++
+						goto l488
+					l489:
+						position, tokenIndex = position488, tokenIndex488
+						if buffer[position] != rune('$') {
+							goto l487
+						}
+						position++
+					}
+				l488:
+					goto l486
 				l487:
 					position, tokenIndex = position487, tokenIndex487
 				}
-			l488:
-				add(ruleInstruction, position484)
+				add(ruleLocalLabel, position485)
 			}
 			return true
-		l483:
-			position, tokenIndex = position483, tokenIndex483
+		l484:
+			position, tokenIndex = position484, tokenIndex484
 			return false
 		},
-		/* 36 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
+		/* 34 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
 		func() bool {
-			position495, tokenIndex495 := position, tokenIndex
+			position490, tokenIndex490 := position, tokenIndex
 			{
-				position496 := position
+				position491 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l490
+				}
+				position++
+			l492:
 				{
-					position497, tokenIndex497 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
+					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 buffer[position] != rune('$') {
+							goto l493
+						}
+						position++
+					}
+				l494:
+					goto l492
+				l493:
+					position, tokenIndex = position493, tokenIndex493
+				}
+				{
+					position496, tokenIndex496 := position, tokenIndex
+					if buffer[position] != rune('b') {
+						goto l497
+					}
+					position++
+					goto l496
+				l497:
+					position, tokenIndex = position496, tokenIndex496
+					if buffer[position] != rune('f') {
+						goto l490
+					}
+					position++
+				}
+			l496:
+				add(ruleLocalLabelRef, position491)
+			}
+			return true
+		l490:
+			position, tokenIndex = position490, tokenIndex490
+			return false
+		},
+		/* 35 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
+		func() bool {
+			position498, tokenIndex498 := position, tokenIndex
+			{
+				position499 := position
+				{
+					position500, tokenIndex500 := position, tokenIndex
+					if buffer[position] != rune('n') {
+						goto l501
+					}
+					position++
+					goto l500
+				l501:
+					position, tokenIndex = position500, tokenIndex500
+					if buffer[position] != rune('N') {
 						goto l498
 					}
 					position++
-					goto l497
-				l498:
-					position, tokenIndex = position497, tokenIndex497
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l495
+				}
+			l500:
+				{
+					position502, tokenIndex502 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l503
+					}
+					position++
+					goto l502
+				l503:
+					position, tokenIndex = position502, tokenIndex502
+					if buffer[position] != rune('O') {
+						goto l498
 					}
 					position++
 				}
-			l497:
-			l499:
+			l502:
 				{
-					position500, tokenIndex500 := position, tokenIndex
-					{
-						position501, tokenIndex501 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l502
-						}
-						position++
-						goto l501
-					l502:
-						position, tokenIndex = position501, tokenIndex501
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l503
-						}
-						position++
-						goto l501
-					l503:
-						position, tokenIndex = position501, tokenIndex501
-						if buffer[position] != rune('.') {
-							goto l504
-						}
-						position++
-						goto l501
-					l504:
-						position, tokenIndex = position501, tokenIndex501
-						{
-							position505, tokenIndex505 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l506
-							}
-							position++
-							goto l505
-						l506:
-							position, tokenIndex = position505, tokenIndex505
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l500
-							}
-							position++
-						}
-					l505:
+					position504, tokenIndex504 := position, tokenIndex
+					if buffer[position] != rune('t') {
+						goto l505
 					}
-				l501:
-					goto l499
-				l500:
-					position, tokenIndex = position500, tokenIndex500
+					position++
+					goto l504
+				l505:
+					position, tokenIndex = position504, tokenIndex504
+					if buffer[position] != rune('T') {
+						goto l498
+					}
+					position++
 				}
+			l504:
 				{
-					position507, tokenIndex507 := position, tokenIndex
-					{
-						position509, tokenIndex509 := position, tokenIndex
-						if buffer[position] != rune('.') {
-							goto l510
-						}
-						position++
-						goto l509
-					l510:
-						position, tokenIndex = position509, tokenIndex509
-						if buffer[position] != rune('+') {
-							goto l511
-						}
-						position++
-						goto l509
-					l511:
-						position, tokenIndex = position509, tokenIndex509
-						if buffer[position] != rune('-') {
-							goto l507
-						}
-						position++
+					position506, tokenIndex506 := position, tokenIndex
+					if buffer[position] != rune('r') {
+						goto l507
 					}
-				l509:
-					goto l508
+					position++
+					goto l506
 				l507:
-					position, tokenIndex = position507, tokenIndex507
+					position, tokenIndex = position506, tokenIndex506
+					if buffer[position] != rune('R') {
+						goto l498
+					}
+					position++
+				}
+			l506:
+				{
+					position508, tokenIndex508 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l509
+					}
+					position++
+					goto l508
+				l509:
+					position, tokenIndex = position508, tokenIndex508
+					if buffer[position] != rune('A') {
+						goto l498
+					}
+					position++
 				}
 			l508:
-				add(ruleInstructionName, position496)
+				{
+					position510, tokenIndex510 := position, tokenIndex
+					if buffer[position] != rune('c') {
+						goto l511
+					}
+					position++
+					goto l510
+				l511:
+					position, tokenIndex = position510, tokenIndex510
+					if buffer[position] != rune('C') {
+						goto l498
+					}
+					position++
+				}
+			l510:
+				{
+					position512, tokenIndex512 := position, tokenIndex
+					if buffer[position] != rune('k') {
+						goto l513
+					}
+					position++
+					goto l512
+				l513:
+					position, tokenIndex = position512, tokenIndex512
+					if buffer[position] != rune('K') {
+						goto l498
+					}
+					position++
+				}
+			l512:
+				add(ruleInstructionPrefix, position499)
 			}
 			return true
-		l495:
-			position, tokenIndex = position495, tokenIndex495
+		l498:
+			position, tokenIndex = position498, tokenIndex498
 			return false
 		},
-		/* 37 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
+		/* 36 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
 		func() bool {
-			position512, tokenIndex512 := position, tokenIndex
+			position514, tokenIndex514 := position, tokenIndex
 			{
-				position513 := position
-				{
-					position514, tokenIndex514 := position, tokenIndex
-					if !_rules[ruleIndirectionIndicator]() {
-						goto l514
-					}
-					goto l515
-				l514:
-					position, tokenIndex = position514, tokenIndex514
-				}
-			l515:
+				position515 := position
 				{
 					position516, tokenIndex516 := position, tokenIndex
-					if !_rules[ruleARMConstantTweak]() {
-						goto l517
+					if !_rules[ruleInstructionPrefix]() {
+						goto l516
 					}
-					goto l516
-				l517:
+					if !_rules[ruleWS]() {
+						goto l516
+					}
+					goto l517
+				l516:
 					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleRegisterOrConstant]() {
+				}
+			l517:
+				if !_rules[ruleInstructionName]() {
+					goto l514
+				}
+				{
+					position518, tokenIndex518 := position, tokenIndex
+					if !_rules[ruleWS]() {
 						goto l518
 					}
-					goto l516
-				l518:
-					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleLocalLabelRef]() {
-						goto l519
+					if !_rules[ruleInstructionArg]() {
+						goto l518
 					}
-					goto l516
-				l519:
-					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleTOCRefHigh]() {
-						goto l520
-					}
-					goto l516
 				l520:
-					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleTOCRefLow]() {
-						goto l521
+					{
+						position521, tokenIndex521 := position, tokenIndex
+						{
+							position522, tokenIndex522 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l522
+							}
+							goto l523
+						l522:
+							position, tokenIndex = position522, tokenIndex522
+						}
+					l523:
+						if buffer[position] != rune(',') {
+							goto l521
+						}
+						position++
+						{
+							position524, tokenIndex524 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l524
+							}
+							goto l525
+						l524:
+							position, tokenIndex = position524, tokenIndex524
+						}
+					l525:
+						if !_rules[ruleInstructionArg]() {
+							goto l521
+						}
+						goto l520
+					l521:
+						position, tokenIndex = position521, tokenIndex521
 					}
-					goto l516
-				l521:
-					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleGOTLocation]() {
-						goto l522
-					}
-					goto l516
-				l522:
-					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleGOTAddress]() {
-						goto l523
-					}
-					goto l516
-				l523:
-					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleGOTSymbolOffset]() {
-						goto l524
-					}
-					goto l516
-				l524:
-					position, tokenIndex = position516, tokenIndex516
-					if !_rules[ruleMemoryRef]() {
-						goto l512
-					}
+					goto l519
+				l518:
+					position, tokenIndex = position518, tokenIndex518
 				}
-			l516:
-			l525:
+			l519:
+				add(ruleInstruction, position515)
+			}
+			return true
+		l514:
+			position, tokenIndex = position514, tokenIndex514
+			return false
+		},
+		/* 37 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
+		func() bool {
+			position526, tokenIndex526 := position, tokenIndex
+			{
+				position527 := position
 				{
-					position526, tokenIndex526 := position, tokenIndex
-					if !_rules[ruleAVX512Token]() {
+					position528, tokenIndex528 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l529
+					}
+					position++
+					goto l528
+				l529:
+					position, tokenIndex = position528, tokenIndex528
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l526
 					}
-					goto l525
-				l526:
-					position, tokenIndex = position526, tokenIndex526
+					position++
 				}
-				add(ruleInstructionArg, position513)
-			}
-			return true
-		l512:
-			position, tokenIndex = position512, tokenIndex512
-			return false
-		},
-		/* 38 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
-		func() bool {
-			position527, tokenIndex527 := position, tokenIndex
-			{
-				position528 := position
-				if buffer[position] != rune('$') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('G') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('S') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l527
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l527
-				}
-				position++
-				if !_rules[ruleLocalSymbol]() {
-					goto l527
-				}
-				add(ruleGOTLocation, position528)
-			}
-			return true
-		l527:
-			position, tokenIndex = position527, tokenIndex527
-			return false
-		},
-		/* 39 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
-		func() bool {
-			position529, tokenIndex529 := position, tokenIndex
-			{
-				position530 := position
-				if buffer[position] != rune('_') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('G') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('S') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('(') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('%') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('r') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('i') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune('p') {
-					goto l529
-				}
-				position++
-				if buffer[position] != rune(')') {
-					goto l529
-				}
-				position++
-				add(ruleGOTAddress, position530)
-			}
-			return true
-		l529:
-			position, tokenIndex = position529, tokenIndex529
-			return false
-		},
-		/* 40 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
-		func() bool {
-			position531, tokenIndex531 := position, tokenIndex
-			{
-				position532 := position
+			l528:
+			l530:
 				{
-					position533, tokenIndex533 := position, tokenIndex
-					if buffer[position] != rune('$') {
-						goto l534
-					}
-					position++
-					if !_rules[ruleSymbolName]() {
-						goto l534
-					}
-					if buffer[position] != rune('@') {
-						goto l534
-					}
-					position++
-					if buffer[position] != rune('G') {
-						goto l534
-					}
-					position++
-					if buffer[position] != rune('O') {
-						goto l534
-					}
-					position++
-					if buffer[position] != rune('T') {
-						goto l534
-					}
-					position++
+					position531, tokenIndex531 := position, tokenIndex
 					{
-						position535, tokenIndex535 := position, tokenIndex
-						if buffer[position] != rune('O') {
+						position532, tokenIndex532 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l533
+						}
+						position++
+						goto l532
+					l533:
+						position, tokenIndex = position532, tokenIndex532
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l534
+						}
+						position++
+						goto l532
+					l534:
+						position, tokenIndex = position532, tokenIndex532
+						if buffer[position] != rune('.') {
 							goto l535
 						}
 						position++
-						if buffer[position] != rune('F') {
-							goto l535
-						}
-						position++
-						if buffer[position] != rune('F') {
-							goto l535
-						}
-						position++
-						goto l536
+						goto l532
 					l535:
-						position, tokenIndex = position535, tokenIndex535
+						position, tokenIndex = position532, tokenIndex532
+						{
+							position536, tokenIndex536 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l537
+							}
+							position++
+							goto l536
+						l537:
+							position, tokenIndex = position536, tokenIndex536
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l531
+							}
+							position++
+						}
+					l536:
 					}
-				l536:
-					goto l533
-				l534:
-					position, tokenIndex = position533, tokenIndex533
-					if buffer[position] != rune(':') {
-						goto l531
-					}
-					position++
+				l532:
+					goto l530
+				l531:
+					position, tokenIndex = position531, tokenIndex531
+				}
+				{
+					position538, tokenIndex538 := position, tokenIndex
 					{
-						position537, tokenIndex537 := position, tokenIndex
-						if buffer[position] != rune('g') {
-							goto l538
+						position540, tokenIndex540 := position, tokenIndex
+						if buffer[position] != rune('.') {
+							goto l541
 						}
 						position++
-						goto l537
-					l538:
-						position, tokenIndex = position537, tokenIndex537
-						if buffer[position] != rune('G') {
-							goto l531
-						}
-						position++
-					}
-				l537:
-					{
-						position539, tokenIndex539 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l540
-						}
-						position++
-						goto l539
-					l540:
-						position, tokenIndex = position539, tokenIndex539
-						if buffer[position] != rune('O') {
-							goto l531
-						}
-						position++
-					}
-				l539:
-					{
-						position541, tokenIndex541 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						goto l540
+					l541:
+						position, tokenIndex = position540, tokenIndex540
+						if buffer[position] != rune('+') {
 							goto l542
 						}
 						position++
-						goto l541
+						goto l540
 					l542:
-						position, tokenIndex = position541, tokenIndex541
-						if buffer[position] != rune('T') {
-							goto l531
+						position, tokenIndex = position540, tokenIndex540
+						if buffer[position] != rune('-') {
+							goto l538
 						}
 						position++
 					}
-				l541:
-					if buffer[position] != rune(':') {
-						goto l531
-					}
-					position++
-					if !_rules[ruleSymbolName]() {
-						goto l531
-					}
+				l540:
+					goto l539
+				l538:
+					position, tokenIndex = position538, tokenIndex538
 				}
-			l533:
-				add(ruleGOTSymbolOffset, position532)
+			l539:
+				add(ruleInstructionName, position527)
 			}
 			return true
-		l531:
-			position, tokenIndex = position531, tokenIndex531
+		l526:
+			position, tokenIndex = position526, tokenIndex526
 			return false
 		},
-		/* 41 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
+		/* 38 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
 		func() bool {
 			position543, tokenIndex543 := position, tokenIndex
 			{
 				position544 := position
 				{
 					position545, tokenIndex545 := position, tokenIndex
-					if !_rules[ruleWS]() {
+					if !_rules[ruleIndirectionIndicator]() {
 						goto l545
 					}
 					goto l546
@@ -4532,1015 +4327,1224 @@
 					position, tokenIndex = position545, tokenIndex545
 				}
 			l546:
-				if buffer[position] != rune('{') {
-					goto l543
-				}
-				position++
 				{
 					position547, tokenIndex547 := position, tokenIndex
-					if buffer[position] != rune('%') {
-						goto l547
+					if !_rules[ruleARMConstantTweak]() {
+						goto l548
 					}
-					position++
-					goto l548
-				l547:
+					goto l547
+				l548:
 					position, tokenIndex = position547, tokenIndex547
-				}
-			l548:
-			l549:
-				{
-					position550, tokenIndex550 := position, tokenIndex
-					{
-						position551, tokenIndex551 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l552
-						}
-						position++
-						goto l551
-					l552:
-						position, tokenIndex = position551, tokenIndex551
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l550
-						}
-						position++
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l549
 					}
-				l551:
-					goto l549
+					goto l547
+				l549:
+					position, tokenIndex = position547, tokenIndex547
+					if !_rules[ruleLocalLabelRef]() {
+						goto l550
+					}
+					goto l547
 				l550:
-					position, tokenIndex = position550, tokenIndex550
+					position, tokenIndex = position547, tokenIndex547
+					if !_rules[ruleTOCRefHigh]() {
+						goto l551
+					}
+					goto l547
+				l551:
+					position, tokenIndex = position547, tokenIndex547
+					if !_rules[ruleTOCRefLow]() {
+						goto l552
+					}
+					goto l547
+				l552:
+					position, tokenIndex = position547, tokenIndex547
+					if !_rules[ruleGOTLocation]() {
+						goto l553
+					}
+					goto l547
+				l553:
+					position, tokenIndex = position547, tokenIndex547
+					if !_rules[ruleGOTAddress]() {
+						goto l554
+					}
+					goto l547
+				l554:
+					position, tokenIndex = position547, tokenIndex547
+					if !_rules[ruleGOTSymbolOffset]() {
+						goto l555
+					}
+					goto l547
+				l555:
+					position, tokenIndex = position547, tokenIndex547
+					if !_rules[ruleMemoryRef]() {
+						goto l543
+					}
 				}
-				if buffer[position] != rune('}') {
-					goto l543
+			l547:
+			l556:
+				{
+					position557, tokenIndex557 := position, tokenIndex
+					if !_rules[ruleAVX512Token]() {
+						goto l557
+					}
+					goto l556
+				l557:
+					position, tokenIndex = position557, tokenIndex557
 				}
-				position++
-				add(ruleAVX512Token, position544)
+				add(ruleInstructionArg, position544)
 			}
 			return true
 		l543:
 			position, tokenIndex = position543, tokenIndex543
 			return false
 		},
-		/* 42 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
+		/* 39 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
 		func() bool {
-			position553, tokenIndex553 := position, tokenIndex
+			position558, tokenIndex558 := position, tokenIndex
 			{
-				position554 := position
-				if buffer[position] != rune('.') {
-					goto l553
+				position559 := position
+				if buffer[position] != rune('$') {
+					goto l558
 				}
 				position++
-				if buffer[position] != rune('T') {
-					goto l553
+				if buffer[position] != rune('_') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('G') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l558
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l553
+					goto l558
 				}
 				position++
-				if buffer[position] != rune('C') {
-					goto l553
+				if buffer[position] != rune('B') {
+					goto l558
 				}
 				position++
-				if buffer[position] != rune('.') {
-					goto l553
+				if buffer[position] != rune('A') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('S') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l558
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l558
 				}
 				position++
 				if buffer[position] != rune('-') {
-					goto l553
+					goto l558
 				}
 				position++
+				if !_rules[ruleLocalSymbol]() {
+					goto l558
+				}
+				add(ruleGOTLocation, position559)
+			}
+			return true
+		l558:
+			position, tokenIndex = position558, tokenIndex558
+			return false
+		},
+		/* 40 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
+		func() bool {
+			position560, tokenIndex560 := position, tokenIndex
+			{
+				position561 := position
+				if buffer[position] != rune('_') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('G') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('S') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('(') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('%') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('r') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('i') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune('p') {
+					goto l560
+				}
+				position++
+				if buffer[position] != rune(')') {
+					goto l560
+				}
+				position++
+				add(ruleGOTAddress, position561)
+			}
+			return true
+		l560:
+			position, tokenIndex = position560, tokenIndex560
+			return false
+		},
+		/* 41 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
+		func() bool {
+			position562, tokenIndex562 := position, tokenIndex
+			{
+				position563 := position
 				{
-					position555, tokenIndex555 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l556
+					position564, tokenIndex564 := position, tokenIndex
+					if buffer[position] != rune('$') {
+						goto l565
 					}
 					position++
-					if buffer[position] != rune('b') {
-						goto l556
+					if !_rules[ruleSymbolName]() {
+						goto l565
+					}
+					if buffer[position] != rune('@') {
+						goto l565
 					}
 					position++
-					goto l555
-				l556:
-					position, tokenIndex = position555, tokenIndex555
-					if buffer[position] != rune('.') {
-						goto l553
+					if buffer[position] != rune('G') {
+						goto l565
 					}
 					position++
-					if buffer[position] != rune('L') {
-						goto l553
+					if buffer[position] != rune('O') {
+						goto l565
+					}
+					position++
+					if buffer[position] != rune('T') {
+						goto l565
 					}
 					position++
 					{
-						position559, tokenIndex559 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l560
+						position566, tokenIndex566 := position, tokenIndex
+						if buffer[position] != rune('O') {
+							goto l566
 						}
 						position++
-						goto l559
-					l560:
-						position, tokenIndex = position559, tokenIndex559
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l561
+						if buffer[position] != rune('F') {
+							goto l566
 						}
 						position++
-						goto l559
-					l561:
-						position, tokenIndex = position559, tokenIndex559
-						if buffer[position] != rune('_') {
+						if buffer[position] != rune('F') {
+							goto l566
+						}
+						position++
+						goto l567
+					l566:
+						position, tokenIndex = position566, tokenIndex566
+					}
+				l567:
+					goto l564
+				l565:
+					position, tokenIndex = position564, tokenIndex564
+					if buffer[position] != rune(':') {
+						goto l562
+					}
+					position++
+					{
+						position568, tokenIndex568 := position, tokenIndex
+						if buffer[position] != rune('g') {
+							goto l569
+						}
+						position++
+						goto l568
+					l569:
+						position, tokenIndex = position568, tokenIndex568
+						if buffer[position] != rune('G') {
 							goto l562
 						}
 						position++
-						goto l559
-					l562:
-						position, tokenIndex = position559, tokenIndex559
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l553
-						}
-						position++
 					}
-				l559:
-				l557:
-					{
-						position558, tokenIndex558 := position, tokenIndex
-						{
-							position563, tokenIndex563 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l564
-							}
-							position++
-							goto l563
-						l564:
-							position, tokenIndex = position563, tokenIndex563
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l565
-							}
-							position++
-							goto l563
-						l565:
-							position, tokenIndex = position563, tokenIndex563
-							if buffer[position] != rune('_') {
-								goto l566
-							}
-							position++
-							goto l563
-						l566:
-							position, tokenIndex = position563, tokenIndex563
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l558
-							}
-							position++
-						}
-					l563:
-						goto l557
-					l558:
-						position, tokenIndex = position558, tokenIndex558
-					}
-				}
-			l555:
-				if buffer[position] != rune('@') {
-					goto l553
-				}
-				position++
-				{
-					position567, tokenIndex567 := position, tokenIndex
-					if buffer[position] != rune('h') {
-						goto l568
-					}
-					position++
-					goto l567
 				l568:
-					position, tokenIndex = position567, tokenIndex567
-					if buffer[position] != rune('H') {
-						goto l553
-					}
-					position++
-				}
-			l567:
-				{
-					position569, tokenIndex569 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l570
-					}
-					position++
-					goto l569
-				l570:
-					position, tokenIndex = position569, tokenIndex569
-					if buffer[position] != rune('A') {
-						goto l553
-					}
-					position++
-				}
-			l569:
-				add(ruleTOCRefHigh, position554)
-			}
-			return true
-		l553:
-			position, tokenIndex = position553, tokenIndex553
-			return false
-		},
-		/* 43 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
-		func() bool {
-			position571, tokenIndex571 := position, tokenIndex
-			{
-				position572 := position
-				if buffer[position] != rune('.') {
-					goto l571
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l571
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l571
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l571
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l571
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l571
-				}
-				position++
-				{
-					position573, tokenIndex573 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l574
-					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l574
-					}
-					position++
-					goto l573
-				l574:
-					position, tokenIndex = position573, tokenIndex573
-					if buffer[position] != rune('.') {
-						goto l571
-					}
-					position++
-					if buffer[position] != rune('L') {
-						goto l571
-					}
-					position++
 					{
-						position577, tokenIndex577 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l578
-						}
-						position++
-						goto l577
-					l578:
-						position, tokenIndex = position577, tokenIndex577
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l579
-						}
-						position++
-						goto l577
-					l579:
-						position, tokenIndex = position577, tokenIndex577
-						if buffer[position] != rune('_') {
-							goto l580
-						}
-						position++
-						goto l577
-					l580:
-						position, tokenIndex = position577, tokenIndex577
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position570, tokenIndex570 := position, tokenIndex
+						if buffer[position] != rune('o') {
 							goto l571
 						}
 						position++
-					}
-				l577:
-				l575:
-					{
-						position576, tokenIndex576 := position, tokenIndex
-						{
-							position581, tokenIndex581 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l582
-							}
-							position++
-							goto l581
-						l582:
-							position, tokenIndex = position581, tokenIndex581
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l583
-							}
-							position++
-							goto l581
-						l583:
-							position, tokenIndex = position581, tokenIndex581
-							if buffer[position] != rune('_') {
-								goto l584
-							}
-							position++
-							goto l581
-						l584:
-							position, tokenIndex = position581, tokenIndex581
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l576
-							}
-							position++
+						goto l570
+					l571:
+						position, tokenIndex = position570, tokenIndex570
+						if buffer[position] != rune('O') {
+							goto l562
 						}
-					l581:
-						goto l575
-					l576:
-						position, tokenIndex = position576, tokenIndex576
+						position++
 					}
-				}
-			l573:
-				if buffer[position] != rune('@') {
-					goto l571
-				}
-				position++
-				{
-					position585, tokenIndex585 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l586
+				l570:
+					{
+						position572, tokenIndex572 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l573
+						}
+						position++
+						goto l572
+					l573:
+						position, tokenIndex = position572, tokenIndex572
+						if buffer[position] != rune('T') {
+							goto l562
+						}
+						position++
+					}
+				l572:
+					if buffer[position] != rune(':') {
+						goto l562
 					}
 					position++
-					goto l585
-				l586:
-					position, tokenIndex = position585, tokenIndex585
-					if buffer[position] != rune('L') {
-						goto l571
+					if !_rules[ruleSymbolName]() {
+						goto l562
 					}
-					position++
 				}
-			l585:
-				add(ruleTOCRefLow, position572)
+			l564:
+				add(ruleGOTSymbolOffset, position563)
 			}
 			return true
-		l571:
-			position, tokenIndex = position571, tokenIndex571
+		l562:
+			position, tokenIndex = position562, tokenIndex562
 			return false
 		},
-		/* 44 IndirectionIndicator <- <'*'> */
+		/* 42 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
 		func() bool {
-			position587, tokenIndex587 := position, tokenIndex
+			position574, tokenIndex574 := position, tokenIndex
 			{
-				position588 := position
-				if buffer[position] != rune('*') {
-					goto l587
-				}
-				position++
-				add(ruleIndirectionIndicator, position588)
-			}
-			return true
-		l587:
-			position, tokenIndex = position587, tokenIndex587
-			return false
-		},
-		/* 45 Float <- <([0-9]+ '.' [0-9]*)> */
-		func() bool {
-			position589, tokenIndex589 := position, tokenIndex
-			{
-				position590 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l589
-				}
-				position++
-			l591:
+				position575 := position
 				{
-					position592, tokenIndex592 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l592
+					position576, tokenIndex576 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l576
 					}
-					position++
-					goto l591
-				l592:
-					position, tokenIndex = position592, tokenIndex592
+					goto l577
+				l576:
+					position, tokenIndex = position576, tokenIndex576
 				}
-				if buffer[position] != rune('.') {
-					goto l589
+			l577:
+				if buffer[position] != rune('{') {
+					goto l574
 				}
 				position++
-			l593:
 				{
-					position594, tokenIndex594 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l594
-					}
-					position++
-					goto l593
-				l594:
-					position, tokenIndex = position594, tokenIndex594
-				}
-				add(ruleFloat, position590)
-			}
-			return true
-		l589:
-			position, tokenIndex = position589, tokenIndex589
-			return false
-		},
-		/* 46 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
-		func() bool {
-			position595, tokenIndex595 := position, tokenIndex
-			{
-				position596 := position
-				{
-					position597, tokenIndex597 := position, tokenIndex
+					position578, tokenIndex578 := position, tokenIndex
 					if buffer[position] != rune('%') {
-						goto l598
+						goto l578
+					}
+					position++
+					goto l579
+				l578:
+					position, tokenIndex = position578, tokenIndex578
+				}
+			l579:
+			l580:
+				{
+					position581, tokenIndex581 := position, tokenIndex
+					{
+						position582, tokenIndex582 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l583
+						}
+						position++
+						goto l582
+					l583:
+						position, tokenIndex = position582, tokenIndex582
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l581
+						}
+						position++
+					}
+				l582:
+					goto l580
+				l581:
+					position, tokenIndex = position581, tokenIndex581
+				}
+				if buffer[position] != rune('}') {
+					goto l574
+				}
+				position++
+				add(ruleAVX512Token, position575)
+			}
+			return true
+		l574:
+			position, tokenIndex = position574, tokenIndex574
+			return false
+		},
+		/* 43 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
+		func() bool {
+			position584, tokenIndex584 := position, tokenIndex
+			{
+				position585 := position
+				if buffer[position] != rune('.') {
+					goto l584
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l584
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l584
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l584
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l584
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l584
+				}
+				position++
+				{
+					position586, tokenIndex586 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l587
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l587
+					}
+					position++
+					goto l586
+				l587:
+					position, tokenIndex = position586, tokenIndex586
+					if buffer[position] != rune('.') {
+						goto l584
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l584
 					}
 					position++
 					{
-						position599, tokenIndex599 := position, tokenIndex
+						position590, tokenIndex590 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l600
+							goto l591
 						}
 						position++
-						goto l599
-					l600:
-						position, tokenIndex = position599, tokenIndex599
+						goto l590
+					l591:
+						position, tokenIndex = position590, tokenIndex590
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l598
+							goto l592
+						}
+						position++
+						goto l590
+					l592:
+						position, tokenIndex = position590, tokenIndex590
+						if buffer[position] != rune('_') {
+							goto l593
+						}
+						position++
+						goto l590
+					l593:
+						position, tokenIndex = position590, tokenIndex590
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l584
 						}
 						position++
 					}
-				l599:
-				l601:
+				l590:
+				l588:
 					{
-						position602, tokenIndex602 := position, tokenIndex
+						position589, tokenIndex589 := position, tokenIndex
 						{
-							position603, tokenIndex603 := position, tokenIndex
+							position594, tokenIndex594 := position, tokenIndex
 							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l604
+								goto l595
 							}
 							position++
-							goto l603
-						l604:
-							position, tokenIndex = position603, tokenIndex603
+							goto l594
+						l595:
+							position, tokenIndex = position594, tokenIndex594
 							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l605
+								goto l596
 							}
 							position++
-							goto l603
-						l605:
-							position, tokenIndex = position603, tokenIndex603
-							{
-								position606, tokenIndex606 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l607
-								}
-								position++
-								goto l606
-							l607:
-								position, tokenIndex = position606, tokenIndex606
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l602
-								}
-								position++
+							goto l594
+						l596:
+							position, tokenIndex = position594, tokenIndex594
+							if buffer[position] != rune('_') {
+								goto l597
 							}
-						l606:
+							position++
+							goto l594
+						l597:
+							position, tokenIndex = position594, tokenIndex594
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l589
+							}
+							position++
 						}
-					l603:
-						goto l601
-					l602:
-						position, tokenIndex = position602, tokenIndex602
+					l594:
+						goto l588
+					l589:
+						position, tokenIndex = position589, tokenIndex589
 					}
-					goto l597
-				l598:
-					position, tokenIndex = position597, tokenIndex597
+				}
+			l586:
+				if buffer[position] != rune('@') {
+					goto l584
+				}
+				position++
+				{
+					position598, tokenIndex598 := position, tokenIndex
+					if buffer[position] != rune('h') {
+						goto l599
+					}
+					position++
+					goto l598
+				l599:
+					position, tokenIndex = position598, tokenIndex598
+					if buffer[position] != rune('H') {
+						goto l584
+					}
+					position++
+				}
+			l598:
+				{
+					position600, tokenIndex600 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l601
+					}
+					position++
+					goto l600
+				l601:
+					position, tokenIndex = position600, tokenIndex600
+					if buffer[position] != rune('A') {
+						goto l584
+					}
+					position++
+				}
+			l600:
+				add(ruleTOCRefHigh, position585)
+			}
+			return true
+		l584:
+			position, tokenIndex = position584, tokenIndex584
+			return false
+		},
+		/* 44 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		func() bool {
+			position602, tokenIndex602 := position, tokenIndex
+			{
+				position603 := position
+				if buffer[position] != rune('.') {
+					goto l602
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l602
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l602
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l602
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l602
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l602
+				}
+				position++
+				{
+					position604, tokenIndex604 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l605
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l605
+					}
+					position++
+					goto l604
+				l605:
+					position, tokenIndex = position604, tokenIndex604
+					if buffer[position] != rune('.') {
+						goto l602
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l602
+					}
+					position++
 					{
-						position609, tokenIndex609 := position, tokenIndex
-						if buffer[position] != rune('$') {
+						position608, tokenIndex608 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
 							goto l609
 						}
 						position++
-						goto l610
+						goto l608
 					l609:
-						position, tokenIndex = position609, tokenIndex609
+						position, tokenIndex = position608, tokenIndex608
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l610
+						}
+						position++
+						goto l608
+					l610:
+						position, tokenIndex = position608, tokenIndex608
+						if buffer[position] != rune('_') {
+							goto l611
+						}
+						position++
+						goto l608
+					l611:
+						position, tokenIndex = position608, tokenIndex608
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l602
+						}
+						position++
 					}
-				l610:
-					{
-						position611, tokenIndex611 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l612
-						}
-						if !_rules[ruleOffset]() {
-							goto l612
-						}
-						goto l611
-					l612:
-						position, tokenIndex = position611, tokenIndex611
-						if !_rules[ruleOffset]() {
-							goto l608
-						}
-					}
-				l611:
-					goto l597
 				l608:
-					position, tokenIndex = position597, tokenIndex597
+				l606:
+					{
+						position607, tokenIndex607 := position, tokenIndex
+						{
+							position612, tokenIndex612 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l613
+							}
+							position++
+							goto l612
+						l613:
+							position, tokenIndex = position612, tokenIndex612
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l614
+							}
+							position++
+							goto l612
+						l614:
+							position, tokenIndex = position612, tokenIndex612
+							if buffer[position] != rune('_') {
+								goto l615
+							}
+							position++
+							goto l612
+						l615:
+							position, tokenIndex = position612, tokenIndex612
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l607
+							}
+							position++
+						}
+					l612:
+						goto l606
+					l607:
+						position, tokenIndex = position607, tokenIndex607
+					}
+				}
+			l604:
+				if buffer[position] != rune('@') {
+					goto l602
+				}
+				position++
+				{
+					position616, tokenIndex616 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l617
+					}
+					position++
+					goto l616
+				l617:
+					position, tokenIndex = position616, tokenIndex616
+					if buffer[position] != rune('L') {
+						goto l602
+					}
+					position++
+				}
+			l616:
+				add(ruleTOCRefLow, position603)
+			}
+			return true
+		l602:
+			position, tokenIndex = position602, tokenIndex602
+			return false
+		},
+		/* 45 IndirectionIndicator <- <'*'> */
+		func() bool {
+			position618, tokenIndex618 := position, tokenIndex
+			{
+				position619 := position
+				if buffer[position] != rune('*') {
+					goto l618
+				}
+				position++
+				add(ruleIndirectionIndicator, position619)
+			}
+			return true
+		l618:
+			position, tokenIndex = position618, tokenIndex618
+			return false
+		},
+		/* 46 Float <- <([0-9]+ '.' [0-9]*)> */
+		func() bool {
+			position620, tokenIndex620 := position, tokenIndex
+			{
+				position621 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l620
+				}
+				position++
+			l622:
+				{
+					position623, tokenIndex623 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l623
+					}
+					position++
+					goto l622
+				l623:
+					position, tokenIndex = position623, tokenIndex623
+				}
+				if buffer[position] != rune('.') {
+					goto l620
+				}
+				position++
+			l624:
+				{
+					position625, tokenIndex625 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l625
+					}
+					position++
+					goto l624
+				l625:
+					position, tokenIndex = position625, tokenIndex625
+				}
+				add(ruleFloat, position621)
+			}
+			return true
+		l620:
+			position, tokenIndex = position620, tokenIndex620
+			return false
+		},
+		/* 47 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
+		func() bool {
+			position626, tokenIndex626 := position, tokenIndex
+			{
+				position627 := position
+				{
+					position628, tokenIndex628 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l629
+					}
+					position++
+					{
+						position630, tokenIndex630 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l631
+						}
+						position++
+						goto l630
+					l631:
+						position, tokenIndex = position630, tokenIndex630
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l629
+						}
+						position++
+					}
+				l630:
+				l632:
+					{
+						position633, tokenIndex633 := position, tokenIndex
+						{
+							position634, tokenIndex634 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l635
+							}
+							position++
+							goto l634
+						l635:
+							position, tokenIndex = position634, tokenIndex634
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l636
+							}
+							position++
+							goto l634
+						l636:
+							position, tokenIndex = position634, tokenIndex634
+							{
+								position637, tokenIndex637 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l638
+								}
+								position++
+								goto l637
+							l638:
+								position, tokenIndex = position637, tokenIndex637
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l633
+								}
+								position++
+							}
+						l637:
+						}
+					l634:
+						goto l632
+					l633:
+						position, tokenIndex = position633, tokenIndex633
+					}
+					goto l628
+				l629:
+					position, tokenIndex = position628, tokenIndex628
+					{
+						position640, tokenIndex640 := position, tokenIndex
+						if buffer[position] != rune('$') {
+							goto l640
+						}
+						position++
+						goto l641
+					l640:
+						position, tokenIndex = position640, tokenIndex640
+					}
+				l641:
+					{
+						position642, tokenIndex642 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l643
+						}
+						if !_rules[ruleOffset]() {
+							goto l643
+						}
+						goto l642
+					l643:
+						position, tokenIndex = position642, tokenIndex642
+						if !_rules[ruleOffset]() {
+							goto l639
+						}
+					}
+				l642:
+					goto l628
+				l639:
+					position, tokenIndex = position628, tokenIndex628
 					if buffer[position] != rune('#') {
-						goto l613
+						goto l644
 					}
 					position++
 					if !_rules[ruleFloat]() {
-						goto l613
+						goto l644
 					}
-					goto l597
-				l613:
-					position, tokenIndex = position597, tokenIndex597
+					goto l628
+				l644:
+					position, tokenIndex = position628, tokenIndex628
 					if buffer[position] != rune('#') {
-						goto l614
+						goto l645
 					}
 					position++
 					if !_rules[ruleOffset]() {
-						goto l614
+						goto l645
 					}
 					{
-						position615, tokenIndex615 := position, tokenIndex
+						position646, tokenIndex646 := position, tokenIndex
 						if buffer[position] != rune('*') {
-							goto l615
+							goto l646
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l615
+							goto l646
 						}
 						position++
-					l617:
-						{
-							position618, tokenIndex618 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l618
-							}
-							position++
-							goto l617
-						l618:
-							position, tokenIndex = position618, tokenIndex618
-						}
-						{
-							position619, tokenIndex619 := position, tokenIndex
-							if buffer[position] != rune('-') {
-								goto l619
-							}
-							position++
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l619
-							}
-							position++
-						l621:
-							{
-								position622, tokenIndex622 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l622
-								}
-								position++
-								goto l621
-							l622:
-								position, tokenIndex = position622, tokenIndex622
-							}
-							goto l620
-						l619:
-							position, tokenIndex = position619, tokenIndex619
-						}
-					l620:
-						goto l616
-					l615:
-						position, tokenIndex = position615, tokenIndex615
-					}
-				l616:
-					goto l597
-				l614:
-					position, tokenIndex = position597, tokenIndex597
-					if buffer[position] != rune('#') {
-						goto l623
-					}
-					position++
-					{
-						position624, tokenIndex624 := position, tokenIndex
-						if buffer[position] != rune('~') {
-							goto l624
-						}
-						position++
-						goto l625
-					l624:
-						position, tokenIndex = position624, tokenIndex624
-					}
-				l625:
-					if buffer[position] != rune('(') {
-						goto l623
-					}
-					position++
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l623
-					}
-					position++
-					{
-						position626, tokenIndex626 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l626
-						}
-						goto l627
-					l626:
-						position, tokenIndex = position626, tokenIndex626
-					}
-				l627:
-					if buffer[position] != rune('<') {
-						goto l623
-					}
-					position++
-					if buffer[position] != rune('<') {
-						goto l623
-					}
-					position++
-					{
-						position628, tokenIndex628 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l628
-						}
-						goto l629
-					l628:
-						position, tokenIndex = position628, tokenIndex628
-					}
-				l629:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l623
-					}
-					position++
-					if buffer[position] != rune(')') {
-						goto l623
-					}
-					position++
-					goto l597
-				l623:
-					position, tokenIndex = position597, tokenIndex597
-					if !_rules[ruleARMRegister]() {
-						goto l595
-					}
-				}
-			l597:
-				{
-					position630, tokenIndex630 := position, tokenIndex
-					{
-						position631, tokenIndex631 := position, tokenIndex
-						if buffer[position] != rune('f') {
-							goto l632
-						}
-						position++
-						goto l631
-					l632:
-						position, tokenIndex = position631, tokenIndex631
-						if buffer[position] != rune('b') {
-							goto l633
-						}
-						position++
-						goto l631
-					l633:
-						position, tokenIndex = position631, tokenIndex631
-						if buffer[position] != rune(':') {
-							goto l634
-						}
-						position++
-						goto l631
-					l634:
-						position, tokenIndex = position631, tokenIndex631
-						if buffer[position] != rune('(') {
-							goto l635
-						}
-						position++
-						goto l631
-					l635:
-						position, tokenIndex = position631, tokenIndex631
-						if buffer[position] != rune('+') {
-							goto l636
-						}
-						position++
-						goto l631
-					l636:
-						position, tokenIndex = position631, tokenIndex631
-						if buffer[position] != rune('-') {
-							goto l630
-						}
-						position++
-					}
-				l631:
-					goto l595
-				l630:
-					position, tokenIndex = position630, tokenIndex630
-				}
-				add(ruleRegisterOrConstant, position596)
-			}
-			return true
-		l595:
-			position, tokenIndex = position595, tokenIndex595
-			return false
-		},
-		/* 47 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')) / (('m' / 'M') ('s' / 'S') ('l' / 'L'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9] [0-9]?))> */
-		func() bool {
-			position637, tokenIndex637 := position, tokenIndex
-			{
-				position638 := position
-				{
-					position639, tokenIndex639 := position, tokenIndex
-					{
-						position641, tokenIndex641 := position, tokenIndex
-						{
-							position643, tokenIndex643 := position, tokenIndex
-							if buffer[position] != rune('u') {
-								goto l644
-							}
-							position++
-							goto l643
-						l644:
-							position, tokenIndex = position643, tokenIndex643
-							if buffer[position] != rune('s') {
-								goto l642
-							}
-							position++
-						}
-					l643:
-						{
-							position645, tokenIndex645 := position, tokenIndex
-							if buffer[position] != rune('x') {
-								goto l646
-							}
-							position++
-							goto l645
-						l646:
-							position, tokenIndex = position645, tokenIndex645
-							if buffer[position] != rune('X') {
-								goto l642
-							}
-							position++
-						}
-					l645:
-						{
-							position647, tokenIndex647 := position, tokenIndex
-							if buffer[position] != rune('t') {
-								goto l648
-							}
-							position++
-							goto l647
-						l648:
-							position, tokenIndex = position647, tokenIndex647
-							if buffer[position] != rune('T') {
-								goto l642
-							}
-							position++
-						}
-					l647:
+					l648:
 						{
 							position649, tokenIndex649 := position, tokenIndex
-							if buffer[position] != rune('x') {
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l649
+							}
+							position++
+							goto l648
+						l649:
+							position, tokenIndex = position649, tokenIndex649
+						}
+						{
+							position650, tokenIndex650 := position, tokenIndex
+							if buffer[position] != rune('-') {
 								goto l650
 							}
 							position++
-							goto l649
-						l650:
-							position, tokenIndex = position649, tokenIndex649
-							if buffer[position] != rune('w') {
-								goto l651
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l650
 							}
 							position++
-							goto l649
-						l651:
-							position, tokenIndex = position649, tokenIndex649
-							if buffer[position] != rune('h') {
-								goto l652
-							}
-							position++
-							goto l649
 						l652:
-							position, tokenIndex = position649, tokenIndex649
-							if buffer[position] != rune('b') {
-								goto l642
+							{
+								position653, tokenIndex653 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l653
+								}
+								position++
+								goto l652
+							l653:
+								position, tokenIndex = position653, tokenIndex653
 							}
-							position++
+							goto l651
+						l650:
+							position, tokenIndex = position650, tokenIndex650
 						}
-					l649:
-						goto l641
-					l642:
-						position, tokenIndex = position641, tokenIndex641
-						{
-							position654, tokenIndex654 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l655
-							}
-							position++
-							goto l654
-						l655:
-							position, tokenIndex = position654, tokenIndex654
-							if buffer[position] != rune('L') {
-								goto l653
-							}
-							position++
+					l651:
+						goto l647
+					l646:
+						position, tokenIndex = position646, tokenIndex646
+					}
+				l647:
+					goto l628
+				l645:
+					position, tokenIndex = position628, tokenIndex628
+					if buffer[position] != rune('#') {
+						goto l654
+					}
+					position++
+					{
+						position655, tokenIndex655 := position, tokenIndex
+						if buffer[position] != rune('~') {
+							goto l655
 						}
-					l654:
-						{
-							position656, tokenIndex656 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l657
-							}
-							position++
-							goto l656
-						l657:
-							position, tokenIndex = position656, tokenIndex656
-							if buffer[position] != rune('S') {
-								goto l653
-							}
-							position++
+						position++
+						goto l656
+					l655:
+						position, tokenIndex = position655, tokenIndex655
+					}
+				l656:
+					if buffer[position] != rune('(') {
+						goto l654
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l654
+					}
+					position++
+					{
+						position657, tokenIndex657 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l657
 						}
-					l656:
-						{
-							position658, tokenIndex658 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l659
-							}
-							position++
-							goto l658
-						l659:
-							position, tokenIndex = position658, tokenIndex658
-							if buffer[position] != rune('L') {
-								goto l653
-							}
-							position++
+						goto l658
+					l657:
+						position, tokenIndex = position657, tokenIndex657
+					}
+				l658:
+					if buffer[position] != rune('<') {
+						goto l654
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l654
+					}
+					position++
+					{
+						position659, tokenIndex659 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l659
 						}
-					l658:
-						goto l641
-					l653:
-						position, tokenIndex = position641, tokenIndex641
-						{
-							position661, tokenIndex661 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l662
-							}
-							position++
-							goto l661
-						l662:
-							position, tokenIndex = position661, tokenIndex661
-							if buffer[position] != rune('L') {
-								goto l660
-							}
-							position++
-						}
-					l661:
-						{
-							position663, tokenIndex663 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l664
-							}
-							position++
+						goto l660
+					l659:
+						position, tokenIndex = position659, tokenIndex659
+					}
+				l660:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l654
+					}
+					position++
+					if buffer[position] != rune(')') {
+						goto l654
+					}
+					position++
+					goto l628
+				l654:
+					position, tokenIndex = position628, tokenIndex628
+					if !_rules[ruleARMRegister]() {
+						goto l626
+					}
+				}
+			l628:
+				{
+					position661, tokenIndex661 := position, tokenIndex
+					{
+						position662, tokenIndex662 := position, tokenIndex
+						if buffer[position] != rune('f') {
 							goto l663
-						l664:
-							position, tokenIndex = position663, tokenIndex663
-							if buffer[position] != rune('S') {
-								goto l660
-							}
-							position++
 						}
+						position++
+						goto l662
 					l663:
-						{
-							position665, tokenIndex665 := position, tokenIndex
-							if buffer[position] != rune('r') {
-								goto l666
-							}
-							position++
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('b') {
+							goto l664
+						}
+						position++
+						goto l662
+					l664:
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune(':') {
 							goto l665
-						l666:
-							position, tokenIndex = position665, tokenIndex665
-							if buffer[position] != rune('R') {
-								goto l660
-							}
-							position++
 						}
+						position++
+						goto l662
 					l665:
-						goto l641
-					l660:
-						position, tokenIndex = position641, tokenIndex641
-						{
-							position668, tokenIndex668 := position, tokenIndex
-							if buffer[position] != rune('r') {
-								goto l669
-							}
-							position++
-							goto l668
-						l669:
-							position, tokenIndex = position668, tokenIndex668
-							if buffer[position] != rune('R') {
-								goto l667
-							}
-							position++
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('(') {
+							goto l666
 						}
-					l668:
-						{
-							position670, tokenIndex670 := position, tokenIndex
-							if buffer[position] != rune('o') {
-								goto l671
-							}
-							position++
-							goto l670
-						l671:
-							position, tokenIndex = position670, tokenIndex670
-							if buffer[position] != rune('O') {
-								goto l667
-							}
-							position++
+						position++
+						goto l662
+					l666:
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('+') {
+							goto l667
 						}
-					l670:
+						position++
+						goto l662
+					l667:
+						position, tokenIndex = position662, tokenIndex662
+						if buffer[position] != rune('-') {
+							goto l661
+						}
+						position++
+					}
+				l662:
+					goto l626
+				l661:
+					position, tokenIndex = position661, tokenIndex661
+				}
+				add(ruleRegisterOrConstant, position627)
+			}
+			return true
+		l626:
+			position, tokenIndex = position626, tokenIndex626
+			return false
+		},
+		/* 48 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')) / (('m' / 'M') ('s' / 'S') ('l' / 'L'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9] [0-9]?))> */
+		func() bool {
+			position668, tokenIndex668 := position, tokenIndex
+			{
+				position669 := position
+				{
+					position670, tokenIndex670 := position, tokenIndex
+					{
+						position672, tokenIndex672 := position, tokenIndex
 						{
-							position672, tokenIndex672 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							position674, tokenIndex674 := position, tokenIndex
+							if buffer[position] != rune('u') {
+								goto l675
+							}
+							position++
+							goto l674
+						l675:
+							position, tokenIndex = position674, tokenIndex674
+							if buffer[position] != rune('s') {
 								goto l673
 							}
 							position++
-							goto l672
-						l673:
-							position, tokenIndex = position672, tokenIndex672
-							if buffer[position] != rune('R') {
-								goto l667
-							}
-							position++
 						}
-					l672:
-						goto l641
-					l667:
-						position, tokenIndex = position641, tokenIndex641
-						{
-							position675, tokenIndex675 := position, tokenIndex
-							if buffer[position] != rune('a') {
-								goto l676
-							}
-							position++
-							goto l675
-						l676:
-							position, tokenIndex = position675, tokenIndex675
-							if buffer[position] != rune('A') {
-								goto l674
-							}
-							position++
-						}
-					l675:
-						{
-							position677, tokenIndex677 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l678
-							}
-							position++
-							goto l677
-						l678:
-							position, tokenIndex = position677, tokenIndex677
-							if buffer[position] != rune('S') {
-								goto l674
-							}
-							position++
-						}
-					l677:
-						{
-							position679, tokenIndex679 := position, tokenIndex
-							if buffer[position] != rune('r') {
-								goto l680
-							}
-							position++
-							goto l679
-						l680:
-							position, tokenIndex = position679, tokenIndex679
-							if buffer[position] != rune('R') {
-								goto l674
-							}
-							position++
-						}
-					l679:
-						goto l641
 					l674:
-						position, tokenIndex = position641, tokenIndex641
 						{
-							position681, tokenIndex681 := position, tokenIndex
-							if buffer[position] != rune('m') {
+							position676, tokenIndex676 := position, tokenIndex
+							if buffer[position] != rune('x') {
+								goto l677
+							}
+							position++
+							goto l676
+						l677:
+							position, tokenIndex = position676, tokenIndex676
+							if buffer[position] != rune('X') {
+								goto l673
+							}
+							position++
+						}
+					l676:
+						{
+							position678, tokenIndex678 := position, tokenIndex
+							if buffer[position] != rune('t') {
+								goto l679
+							}
+							position++
+							goto l678
+						l679:
+							position, tokenIndex = position678, tokenIndex678
+							if buffer[position] != rune('T') {
+								goto l673
+							}
+							position++
+						}
+					l678:
+						{
+							position680, tokenIndex680 := position, tokenIndex
+							if buffer[position] != rune('x') {
+								goto l681
+							}
+							position++
+							goto l680
+						l681:
+							position, tokenIndex = position680, tokenIndex680
+							if buffer[position] != rune('w') {
 								goto l682
 							}
 							position++
-							goto l681
+							goto l680
 						l682:
-							position, tokenIndex = position681, tokenIndex681
-							if buffer[position] != rune('M') {
-								goto l640
+							position, tokenIndex = position680, tokenIndex680
+							if buffer[position] != rune('h') {
+								goto l683
+							}
+							position++
+							goto l680
+						l683:
+							position, tokenIndex = position680, tokenIndex680
+							if buffer[position] != rune('b') {
+								goto l673
 							}
 							position++
 						}
-					l681:
-						{
-							position683, tokenIndex683 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l684
-							}
-							position++
-							goto l683
-						l684:
-							position, tokenIndex = position683, tokenIndex683
-							if buffer[position] != rune('S') {
-								goto l640
-							}
-							position++
-						}
-					l683:
+					l680:
+						goto l672
+					l673:
+						position, tokenIndex = position672, tokenIndex672
 						{
 							position685, tokenIndex685 := position, tokenIndex
 							if buffer[position] != rune('l') {
@@ -5551,1084 +5555,1072 @@
 						l686:
 							position, tokenIndex = position685, tokenIndex685
 							if buffer[position] != rune('L') {
-								goto l640
+								goto l684
 							}
 							position++
 						}
 					l685:
-					}
-				l641:
-					{
-						position687, tokenIndex687 := position, tokenIndex
-						if !_rules[ruleWS]() {
+						{
+							position687, tokenIndex687 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l688
+							}
+							position++
 							goto l687
+						l688:
+							position, tokenIndex = position687, tokenIndex687
+							if buffer[position] != rune('S') {
+								goto l684
+							}
+							position++
+						}
+					l687:
+						{
+							position689, tokenIndex689 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l690
+							}
+							position++
+							goto l689
+						l690:
+							position, tokenIndex = position689, tokenIndex689
+							if buffer[position] != rune('L') {
+								goto l684
+							}
+							position++
+						}
+					l689:
+						goto l672
+					l684:
+						position, tokenIndex = position672, tokenIndex672
+						{
+							position692, tokenIndex692 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l693
+							}
+							position++
+							goto l692
+						l693:
+							position, tokenIndex = position692, tokenIndex692
+							if buffer[position] != rune('L') {
+								goto l691
+							}
+							position++
+						}
+					l692:
+						{
+							position694, tokenIndex694 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l695
+							}
+							position++
+							goto l694
+						l695:
+							position, tokenIndex = position694, tokenIndex694
+							if buffer[position] != rune('S') {
+								goto l691
+							}
+							position++
+						}
+					l694:
+						{
+							position696, tokenIndex696 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l697
+							}
+							position++
+							goto l696
+						l697:
+							position, tokenIndex = position696, tokenIndex696
+							if buffer[position] != rune('R') {
+								goto l691
+							}
+							position++
+						}
+					l696:
+						goto l672
+					l691:
+						position, tokenIndex = position672, tokenIndex672
+						{
+							position699, tokenIndex699 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l700
+							}
+							position++
+							goto l699
+						l700:
+							position, tokenIndex = position699, tokenIndex699
+							if buffer[position] != rune('R') {
+								goto l698
+							}
+							position++
+						}
+					l699:
+						{
+							position701, tokenIndex701 := position, tokenIndex
+							if buffer[position] != rune('o') {
+								goto l702
+							}
+							position++
+							goto l701
+						l702:
+							position, tokenIndex = position701, tokenIndex701
+							if buffer[position] != rune('O') {
+								goto l698
+							}
+							position++
+						}
+					l701:
+						{
+							position703, tokenIndex703 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l704
+							}
+							position++
+							goto l703
+						l704:
+							position, tokenIndex = position703, tokenIndex703
+							if buffer[position] != rune('R') {
+								goto l698
+							}
+							position++
+						}
+					l703:
+						goto l672
+					l698:
+						position, tokenIndex = position672, tokenIndex672
+						{
+							position706, tokenIndex706 := position, tokenIndex
+							if buffer[position] != rune('a') {
+								goto l707
+							}
+							position++
+							goto l706
+						l707:
+							position, tokenIndex = position706, tokenIndex706
+							if buffer[position] != rune('A') {
+								goto l705
+							}
+							position++
+						}
+					l706:
+						{
+							position708, tokenIndex708 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l709
+							}
+							position++
+							goto l708
+						l709:
+							position, tokenIndex = position708, tokenIndex708
+							if buffer[position] != rune('S') {
+								goto l705
+							}
+							position++
+						}
+					l708:
+						{
+							position710, tokenIndex710 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l711
+							}
+							position++
+							goto l710
+						l711:
+							position, tokenIndex = position710, tokenIndex710
+							if buffer[position] != rune('R') {
+								goto l705
+							}
+							position++
+						}
+					l710:
+						goto l672
+					l705:
+						position, tokenIndex = position672, tokenIndex672
+						{
+							position712, tokenIndex712 := position, tokenIndex
+							if buffer[position] != rune('m') {
+								goto l713
+							}
+							position++
+							goto l712
+						l713:
+							position, tokenIndex = position712, tokenIndex712
+							if buffer[position] != rune('M') {
+								goto l671
+							}
+							position++
+						}
+					l712:
+						{
+							position714, tokenIndex714 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l715
+							}
+							position++
+							goto l714
+						l715:
+							position, tokenIndex = position714, tokenIndex714
+							if buffer[position] != rune('S') {
+								goto l671
+							}
+							position++
+						}
+					l714:
+						{
+							position716, tokenIndex716 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l717
+							}
+							position++
+							goto l716
+						l717:
+							position, tokenIndex = position716, tokenIndex716
+							if buffer[position] != rune('L') {
+								goto l671
+							}
+							position++
+						}
+					l716:
+					}
+				l672:
+					{
+						position718, tokenIndex718 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l718
 						}
 						if buffer[position] != rune('#') {
-							goto l687
-						}
-						position++
-						if !_rules[ruleOffset]() {
-							goto l687
-						}
-						goto l688
-					l687:
-						position, tokenIndex = position687, tokenIndex687
-					}
-				l688:
-					goto l639
-				l640:
-					position, tokenIndex = position639, tokenIndex639
-					{
-						position690, tokenIndex690 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l691
-						}
-						position++
-						goto l690
-					l691:
-						position, tokenIndex = position690, tokenIndex690
-						if buffer[position] != rune('M') {
-							goto l689
-						}
-						position++
-					}
-				l690:
-					{
-						position692, tokenIndex692 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l693
-						}
-						position++
-						goto l692
-					l693:
-						position, tokenIndex = position692, tokenIndex692
-						if buffer[position] != rune('U') {
-							goto l689
-						}
-						position++
-					}
-				l692:
-					{
-						position694, tokenIndex694 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l695
-						}
-						position++
-						goto l694
-					l695:
-						position, tokenIndex = position694, tokenIndex694
-						if buffer[position] != rune('L') {
-							goto l689
-						}
-						position++
-					}
-				l694:
-					if buffer[position] != rune(' ') {
-						goto l689
-					}
-					position++
-					{
-						position696, tokenIndex696 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l697
-						}
-						position++
-						goto l696
-					l697:
-						position, tokenIndex = position696, tokenIndex696
-						if buffer[position] != rune('V') {
-							goto l689
-						}
-						position++
-					}
-				l696:
-					{
-						position698, tokenIndex698 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l699
-						}
-						position++
-						goto l698
-					l699:
-						position, tokenIndex = position698, tokenIndex698
-						if buffer[position] != rune('L') {
-							goto l689
-						}
-						position++
-					}
-				l698:
-					goto l639
-				l689:
-					position, tokenIndex = position639, tokenIndex639
-					{
-						position700, tokenIndex700 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l701
-						}
-						position++
-						goto l700
-					l701:
-						position, tokenIndex = position700, tokenIndex700
-						if buffer[position] != rune('M') {
-							goto l637
-						}
-						position++
-					}
-				l700:
-					{
-						position702, tokenIndex702 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l703
-						}
-						position++
-						goto l702
-					l703:
-						position, tokenIndex = position702, tokenIndex702
-						if buffer[position] != rune('U') {
-							goto l637
-						}
-						position++
-					}
-				l702:
-					{
-						position704, tokenIndex704 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l705
-						}
-						position++
-						goto l704
-					l705:
-						position, tokenIndex = position704, tokenIndex704
-						if buffer[position] != rune('L') {
-							goto l637
-						}
-						position++
-					}
-				l704:
-					if buffer[position] != rune(' ') {
-						goto l637
-					}
-					position++
-					if buffer[position] != rune('#') {
-						goto l637
-					}
-					position++
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l637
-					}
-					position++
-					{
-						position706, tokenIndex706 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l706
-						}
-						position++
-						goto l707
-					l706:
-						position, tokenIndex = position706, tokenIndex706
-					}
-				l707:
-				}
-			l639:
-				add(ruleARMConstantTweak, position638)
-			}
-			return true
-		l637:
-			position, tokenIndex = position637, tokenIndex637
-			return false
-		},
-		/* 48 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 {
-			position708, tokenIndex708 := position, tokenIndex
-			{
-				position709 := position
-				{
-					position710, tokenIndex710 := position, tokenIndex
-					{
-						position712, tokenIndex712 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l713
-						}
-						position++
-						goto l712
-					l713:
-						position, tokenIndex = position712, tokenIndex712
-						if buffer[position] != rune('S') {
-							goto l711
-						}
-						position++
-					}
-				l712:
-					{
-						position714, tokenIndex714 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l715
-						}
-						position++
-						goto l714
-					l715:
-						position, tokenIndex = position714, tokenIndex714
-						if buffer[position] != rune('P') {
-							goto l711
-						}
-						position++
-					}
-				l714:
-					goto l710
-				l711:
-					position, tokenIndex = position710, tokenIndex710
-					{
-						position717, tokenIndex717 := position, tokenIndex
-						if buffer[position] != rune('x') {
 							goto l718
 						}
 						position++
-						goto l717
+						if !_rules[ruleOffset]() {
+							goto l718
+						}
+						goto l719
 					l718:
-						position, tokenIndex = position717, tokenIndex717
-						if buffer[position] != rune('w') {
-							goto l719
-						}
-						position++
-						goto l717
-					l719:
-						position, tokenIndex = position717, tokenIndex717
-						if buffer[position] != rune('d') {
-							goto l720
-						}
-						position++
-						goto l717
-					l720:
-						position, tokenIndex = position717, tokenIndex717
-						if buffer[position] != rune('q') {
-							goto l721
-						}
-						position++
-						goto l717
-					l721:
-						position, tokenIndex = position717, tokenIndex717
-						if buffer[position] != rune('s') {
+						position, tokenIndex = position718, tokenIndex718
+					}
+				l719:
+					goto l670
+				l671:
+					position, tokenIndex = position670, tokenIndex670
+					{
+						position721, tokenIndex721 := position, tokenIndex
+						if buffer[position] != rune('m') {
 							goto l722
 						}
 						position++
-						goto l717
+						goto l721
 					l722:
-						position, tokenIndex = position717, tokenIndex717
-						if buffer[position] != rune('h') {
-							goto l723
-						}
-						position++
-						goto l717
-					l723:
-						position, tokenIndex = position717, tokenIndex717
-						if buffer[position] != rune('b') {
-							goto l716
+						position, tokenIndex = position721, tokenIndex721
+						if buffer[position] != rune('M') {
+							goto l720
 						}
 						position++
 					}
-				l717:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l716
-					}
-					position++
+				l721:
 					{
-						position724, tokenIndex724 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position723, tokenIndex723 := position, tokenIndex
+						if buffer[position] != rune('u') {
 							goto l724
 						}
 						position++
-						goto l725
+						goto l723
 					l724:
-						position, tokenIndex = position724, tokenIndex724
+						position, tokenIndex = position723, tokenIndex723
+						if buffer[position] != rune('U') {
+							goto l720
+						}
+						position++
+					}
+				l723:
+					{
+						position725, tokenIndex725 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l726
+						}
+						position++
+						goto l725
+					l726:
+						position, tokenIndex = position725, tokenIndex725
+						if buffer[position] != rune('L') {
+							goto l720
+						}
+						position++
 					}
 				l725:
-					goto l710
-				l716:
-					position, tokenIndex = position710, tokenIndex710
+					if buffer[position] != rune(' ') {
+						goto l720
+					}
+					position++
 					{
 						position727, tokenIndex727 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('v') {
 							goto l728
 						}
 						position++
 						goto l727
 					l728:
 						position, tokenIndex = position727, tokenIndex727
-						if buffer[position] != rune('X') {
-							goto l726
+						if buffer[position] != rune('V') {
+							goto l720
 						}
 						position++
 					}
 				l727:
 					{
 						position729, tokenIndex729 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('l') {
 							goto l730
 						}
 						position++
 						goto l729
 					l730:
 						position, tokenIndex = position729, tokenIndex729
-						if buffer[position] != rune('Z') {
-							goto l726
+						if buffer[position] != rune('L') {
+							goto l720
 						}
 						position++
 					}
 				l729:
+					goto l670
+				l720:
+					position, tokenIndex = position670, tokenIndex670
 					{
 						position731, tokenIndex731 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						if buffer[position] != rune('m') {
 							goto l732
 						}
 						position++
 						goto l731
 					l732:
 						position, tokenIndex = position731, tokenIndex731
-						if buffer[position] != rune('R') {
-							goto l726
+						if buffer[position] != rune('M') {
+							goto l668
 						}
 						position++
 					}
 				l731:
-					goto l710
-				l726:
-					position, tokenIndex = position710, tokenIndex710
 					{
-						position734, tokenIndex734 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l735
+						position733, tokenIndex733 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l734
 						}
 						position++
-						goto l734
-					l735:
-						position, tokenIndex = position734, tokenIndex734
-						if buffer[position] != rune('W') {
-							goto l733
+						goto l733
+					l734:
+						position, tokenIndex = position733, tokenIndex733
+						if buffer[position] != rune('U') {
+							goto l668
 						}
 						position++
 					}
-				l734:
+				l733:
 					{
-						position736, tokenIndex736 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						position735, tokenIndex735 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l736
+						}
+						position++
+						goto l735
+					l736:
+						position, tokenIndex = position735, tokenIndex735
+						if buffer[position] != rune('L') {
+							goto l668
+						}
+						position++
+					}
+				l735:
+					if buffer[position] != rune(' ') {
+						goto l668
+					}
+					position++
+					if buffer[position] != rune('#') {
+						goto l668
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l668
+					}
+					position++
+					{
+						position737, tokenIndex737 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l737
 						}
 						position++
-						goto l736
-					l737:
-						position, tokenIndex = position736, tokenIndex736
-						if buffer[position] != rune('Z') {
-							goto l733
-						}
-						position++
-					}
-				l736:
-					{
-						position738, tokenIndex738 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l739
-						}
-						position++
 						goto l738
-					l739:
-						position, tokenIndex = position738, tokenIndex738
-						if buffer[position] != rune('R') {
-							goto l733
-						}
-						position++
+					l737:
+						position, tokenIndex = position737, tokenIndex737
 					}
 				l738:
-					goto l710
-				l733:
-					position, tokenIndex = position710, tokenIndex710
-					{
-						position741, tokenIndex741 := position, tokenIndex
-						if buffer[position] != rune('n') {
-							goto l742
-						}
-						position++
-						goto l741
-					l742:
-						position, tokenIndex = position741, tokenIndex741
-						if buffer[position] != rune('N') {
-							goto l740
-						}
-						position++
-					}
-				l741:
+				}
+			l670:
+				add(ruleARMConstantTweak, position669)
+			}
+			return true
+		l668:
+			position, tokenIndex = position668, tokenIndex668
+			return false
+		},
+		/* 49 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 {
+			position739, tokenIndex739 := position, tokenIndex
+			{
+				position740 := position
+				{
+					position741, tokenIndex741 := position, tokenIndex
 					{
 						position743, tokenIndex743 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('s') {
 							goto l744
 						}
 						position++
 						goto l743
 					l744:
 						position, tokenIndex = position743, tokenIndex743
-						if buffer[position] != rune('Z') {
-							goto l740
+						if buffer[position] != rune('S') {
+							goto l742
 						}
 						position++
 					}
 				l743:
 					{
 						position745, tokenIndex745 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('p') {
 							goto l746
 						}
 						position++
 						goto l745
 					l746:
 						position, tokenIndex = position745, tokenIndex745
-						if buffer[position] != rune('C') {
-							goto l740
+						if buffer[position] != rune('P') {
+							goto l742
 						}
 						position++
 					}
 				l745:
+					goto l741
+				l742:
+					position, tokenIndex = position741, tokenIndex741
 					{
-						position747, tokenIndex747 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l748
+						position748, tokenIndex748 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l749
 						}
 						position++
+						goto l748
+					l749:
+						position, tokenIndex = position748, tokenIndex748
+						if buffer[position] != rune('w') {
+							goto l750
+						}
+						position++
+						goto l748
+					l750:
+						position, tokenIndex = position748, tokenIndex748
+						if buffer[position] != rune('d') {
+							goto l751
+						}
+						position++
+						goto l748
+					l751:
+						position, tokenIndex = position748, tokenIndex748
+						if buffer[position] != rune('q') {
+							goto l752
+						}
+						position++
+						goto l748
+					l752:
+						position, tokenIndex = position748, tokenIndex748
+						if buffer[position] != rune('s') {
+							goto l753
+						}
+						position++
+						goto l748
+					l753:
+						position, tokenIndex = position748, tokenIndex748
+						if buffer[position] != rune('h') {
+							goto l754
+						}
+						position++
+						goto l748
+					l754:
+						position, tokenIndex = position748, tokenIndex748
+						if buffer[position] != rune('b') {
+							goto l747
+						}
+						position++
+					}
+				l748:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l747
-					l748:
-						position, tokenIndex = position747, tokenIndex747
-						if buffer[position] != rune('V') {
-							goto l740
-						}
-						position++
-					}
-				l747:
-					goto l710
-				l740:
-					position, tokenIndex = position710, tokenIndex710
-					if !_rules[ruleSVE2PredicateRegister]() {
-						goto l749
-					}
-					goto l710
-				l749:
-					position, tokenIndex = position710, tokenIndex710
-					if !_rules[ruleARMVectorRegister]() {
-						goto l750
-					}
-					goto l710
-				l750:
-					position, tokenIndex = position710, tokenIndex710
-					if !_rules[ruleSVE2SpecialValue]() {
-						goto l751
-					}
-					goto l710
-				l751:
-					position, tokenIndex = position710, tokenIndex710
-					if buffer[position] != rune('{') {
-						goto l708
 					}
 					position++
 					{
-						position752, tokenIndex752 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l752
-						}
-						goto l753
-					l752:
-						position, tokenIndex = position752, tokenIndex752
-					}
-				l753:
-					if !_rules[ruleARMVectorRegister]() {
-						goto l708
-					}
-				l754:
-					{
 						position755, tokenIndex755 := position, tokenIndex
-						if buffer[position] != rune(',') {
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l755
 						}
 						position++
-						{
-							position756, tokenIndex756 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l756
-							}
-							goto l757
-						l756:
-							position, tokenIndex = position756, tokenIndex756
-						}
-					l757:
-						if !_rules[ruleARMVectorRegister]() {
-							goto l755
-						}
-						goto l754
+						goto l756
 					l755:
 						position, tokenIndex = position755, tokenIndex755
 					}
+				l756:
+					goto l741
+				l747:
+					position, tokenIndex = position741, tokenIndex741
 					{
 						position758, tokenIndex758 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l758
+						if buffer[position] != rune('x') {
+							goto l759
 						}
-						goto l759
-					l758:
+						position++
+						goto l758
+					l759:
 						position, tokenIndex = position758, tokenIndex758
+						if buffer[position] != rune('X') {
+							goto l757
+						}
+						position++
 					}
-				l759:
-					if buffer[position] != rune('}') {
-						goto l708
-					}
-					position++
+				l758:
 					{
 						position760, tokenIndex760 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l760
+						if buffer[position] != rune('z') {
+							goto l761
 						}
 						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l760
-						}
-						position++
-						{
-							position762, tokenIndex762 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l762
-							}
-							position++
-							goto l763
-						l762:
-							position, tokenIndex = position762, tokenIndex762
-						}
-					l763:
-						if buffer[position] != rune(']') {
-							goto l760
-						}
-						position++
-						goto l761
-					l760:
+						goto l760
+					l761:
 						position, tokenIndex = position760, tokenIndex760
+						if buffer[position] != rune('Z') {
+							goto l757
+						}
+						position++
 					}
-				l761:
-				}
-			l710:
-				add(ruleARMRegister, position709)
-			}
-			return true
-		l708:
-			position, tokenIndex = position708, tokenIndex708
-			return false
-		},
-		/* 49 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 {
-			position764, tokenIndex764 := position, tokenIndex
-			{
-				position765 := position
-				{
-					position766, tokenIndex766 := position, tokenIndex
-					if buffer[position] != rune('p') {
+				l760:
+					{
+						position762, tokenIndex762 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l763
+						}
+						position++
+						goto l762
+					l763:
+						position, tokenIndex = position762, tokenIndex762
+						if buffer[position] != rune('R') {
+							goto l757
+						}
+						position++
+					}
+				l762:
+					goto l741
+				l757:
+					position, tokenIndex = position741, tokenIndex741
+					{
+						position765, tokenIndex765 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l766
+						}
+						position++
+						goto l765
+					l766:
+						position, tokenIndex = position765, tokenIndex765
+						if buffer[position] != rune('W') {
+							goto l764
+						}
+						position++
+					}
+				l765:
+					{
+						position767, tokenIndex767 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l768
+						}
+						position++
 						goto l767
+					l768:
+						position, tokenIndex = position767, tokenIndex767
+						if buffer[position] != rune('Z') {
+							goto l764
+						}
+						position++
 					}
-					position++
-					goto l766
 				l767:
-					position, tokenIndex = position766, tokenIndex766
-					if buffer[position] != rune('v') {
-						goto l768
-					}
-					position++
-					goto l766
-				l768:
-					position, tokenIndex = position766, tokenIndex766
-					if buffer[position] != rune('z') {
-						goto l764
-					}
-					position++
-				}
-			l766:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l764
-				}
-				position++
-				{
-					position769, tokenIndex769 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
+					{
+						position769, tokenIndex769 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l770
+						}
+						position++
 						goto l769
+					l770:
+						position, tokenIndex = position769, tokenIndex769
+						if buffer[position] != rune('R') {
+							goto l764
+						}
+						position++
 					}
-					position++
-					goto l770
 				l769:
-					position, tokenIndex = position769, tokenIndex769
-				}
-			l770:
-				{
-					position771, tokenIndex771 := position, tokenIndex
+					goto l741
+				l764:
+					position, tokenIndex = position741, tokenIndex741
 					{
 						position772, tokenIndex772 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						if buffer[position] != rune('n') {
 							goto l773
 						}
 						position++
 						goto l772
 					l773:
 						position, tokenIndex = position772, tokenIndex772
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l774
-						}
-						position++
-						goto l772
-					l774:
-						position, tokenIndex = position772, tokenIndex772
-						{
-							position776, tokenIndex776 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l777
-							}
-							position++
-							goto l776
-						l777:
-							position, tokenIndex = position776, tokenIndex776
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l775
-							}
-							position++
-						}
-					l776:
-						goto l772
-					l775:
-						position, tokenIndex = position772, tokenIndex772
-						if buffer[position] != rune('_') {
+						if buffer[position] != rune('N') {
 							goto l771
 						}
 						position++
 					}
 				l772:
-					goto l764
-				l771:
-					position, tokenIndex = position771, tokenIndex771
-				}
-				{
-					position778, tokenIndex778 := position, tokenIndex
-					if buffer[position] != rune('.') {
+					{
+						position774, tokenIndex774 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l775
+						}
+						position++
+						goto l774
+					l775:
+						position, tokenIndex = position774, tokenIndex774
+						if buffer[position] != rune('Z') {
+							goto l771
+						}
+						position++
+					}
+				l774:
+					{
+						position776, tokenIndex776 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l777
+						}
+						position++
+						goto l776
+					l777:
+						position, tokenIndex = position776, tokenIndex776
+						if buffer[position] != rune('C') {
+							goto l771
+						}
+						position++
+					}
+				l776:
+					{
+						position778, tokenIndex778 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l779
+						}
+						position++
 						goto l778
+					l779:
+						position, tokenIndex = position778, tokenIndex778
+						if buffer[position] != rune('V') {
+							goto l771
+						}
+						position++
+					}
+				l778:
+					goto l741
+				l771:
+					position, tokenIndex = position741, tokenIndex741
+					if !_rules[ruleSVE2PredicateRegister]() {
+						goto l780
+					}
+					goto l741
+				l780:
+					position, tokenIndex = position741, tokenIndex741
+					if !_rules[ruleARMVectorRegister]() {
+						goto l781
+					}
+					goto l741
+				l781:
+					position, tokenIndex = position741, tokenIndex741
+					if !_rules[ruleSVE2SpecialValue]() {
+						goto l782
+					}
+					goto l741
+				l782:
+					position, tokenIndex = position741, tokenIndex741
+					if buffer[position] != rune('{') {
+						goto l739
 					}
 					position++
-				l780:
 					{
-						position781, tokenIndex781 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l781
-						}
-						position++
-						goto l780
-					l781:
-						position, tokenIndex = position781, tokenIndex781
-					}
-					{
-						position782, tokenIndex782 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						position783, tokenIndex783 := position, tokenIndex
+						if !_rules[ruleWS]() {
 							goto l783
 						}
-						position++
-						goto l782
+						goto l784
 					l783:
-						position, tokenIndex = position782, tokenIndex782
-						if buffer[position] != rune('s') {
-							goto l784
-						}
-						position++
-						goto l782
-					l784:
-						position, tokenIndex = position782, tokenIndex782
-						if buffer[position] != rune('d') {
-							goto l785
-						}
-						position++
-						goto l782
-					l785:
-						position, tokenIndex = position782, tokenIndex782
-						if buffer[position] != rune('h') {
+						position, tokenIndex = position783, tokenIndex783
+					}
+				l784:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l739
+					}
+				l785:
+					{
+						position786, tokenIndex786 := position, tokenIndex
+						if buffer[position] != rune(',') {
 							goto l786
 						}
 						position++
-						goto l782
-					l786:
-						position, tokenIndex = position782, tokenIndex782
-						if buffer[position] != rune('q') {
-							goto l778
+						{
+							position787, tokenIndex787 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l787
+							}
+							goto l788
+						l787:
+							position, tokenIndex = position787, tokenIndex787
 						}
-						position++
+					l788:
+						if !_rules[ruleARMVectorRegister]() {
+							goto l786
+						}
+						goto l785
+					l786:
+						position, tokenIndex = position786, tokenIndex786
 					}
-				l782:
 					{
-						position787, tokenIndex787 := position, tokenIndex
+						position789, tokenIndex789 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l789
+						}
+						goto l790
+					l789:
+						position, tokenIndex = position789, tokenIndex789
+					}
+				l790:
+					if buffer[position] != rune('}') {
+						goto l739
+					}
+					position++
+					{
+						position791, tokenIndex791 := position, tokenIndex
 						if buffer[position] != rune('[') {
-							goto l787
+							goto l791
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l787
+							goto l791
 						}
 						position++
 						{
-							position789, tokenIndex789 := position, tokenIndex
+							position793, tokenIndex793 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l789
+								goto l793
 							}
 							position++
-							goto l790
-						l789:
-							position, tokenIndex = position789, tokenIndex789
+							goto l794
+						l793:
+							position, tokenIndex = position793, tokenIndex793
 						}
-					l790:
+					l794:
 						if buffer[position] != rune(']') {
-							goto l787
+							goto l791
 						}
 						position++
-						goto l788
-					l787:
-						position, tokenIndex = position787, tokenIndex787
+						goto l792
+					l791:
+						position, tokenIndex = position791, tokenIndex791
 					}
-				l788:
-					goto l779
-				l778:
-					position, tokenIndex = position778, tokenIndex778
+				l792:
 				}
-			l779:
-				add(ruleARMVectorRegister, position765)
+			l741:
+				add(ruleARMRegister, position740)
 			}
 			return true
-		l764:
-			position, tokenIndex = position764, tokenIndex764
+		l739:
+			position, tokenIndex = position739, tokenIndex739
 			return false
 		},
-		/* 50 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
+		/* 50 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 {
-			position791, tokenIndex791 := position, tokenIndex
+			position795, tokenIndex795 := position, tokenIndex
 			{
-				position792 := position
-				{
-					position793, tokenIndex793 := position, tokenIndex
-					if buffer[position] != rune('p') {
-						goto l794
-					}
-					position++
-					goto l793
-				l794:
-					position, tokenIndex = position793, tokenIndex793
-					if buffer[position] != rune('P') {
-						goto l791
-					}
-					position++
-				}
-			l793:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l791
-				}
-				position++
-				{
-					position795, tokenIndex795 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l795
-					}
-					position++
-					goto l796
-				l795:
-					position, tokenIndex = position795, tokenIndex795
-				}
-			l796:
-				if buffer[position] != rune('/') {
-					goto l791
-				}
-				position++
+				position796 := position
 				{
 					position797, tokenIndex797 := position, tokenIndex
-					if buffer[position] != rune('m') {
+					if buffer[position] != rune('p') {
 						goto l798
 					}
 					position++
 					goto l797
 				l798:
 					position, tokenIndex = position797, tokenIndex797
-					if buffer[position] != rune('M') {
+					if buffer[position] != rune('v') {
 						goto l799
 					}
 					position++
 					goto l797
 				l799:
 					position, tokenIndex = position797, tokenIndex797
-					{
-						position800, tokenIndex800 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l801
-						}
-						position++
-						goto l800
-					l801:
-						position, tokenIndex = position800, tokenIndex800
-						if buffer[position] != rune('Z') {
-							goto l791
-						}
-						position++
-					}
-				l800:
-				}
-			l797:
-				add(ruleSVE2PredicateRegister, position792)
-			}
-			return true
-		l791:
-			position, tokenIndex = position791, tokenIndex791
-			return false
-		},
-		/* 51 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 {
-			position802, tokenIndex802 := position, tokenIndex
-			{
-				position803 := position
-				{
-					position804, tokenIndex804 := position, tokenIndex
-					{
-						position806, tokenIndex806 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l807
-						}
-						position++
-						goto l806
-					l807:
-						position, tokenIndex = position806, tokenIndex806
-						if buffer[position] != rune('P') {
-							goto l805
-						}
-						position++
-					}
-				l806:
-					{
-						position808, tokenIndex808 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l809
-						}
-						position++
-						goto l808
-					l809:
-						position, tokenIndex = position808, tokenIndex808
-						if buffer[position] != rune('O') {
-							goto l805
-						}
-						position++
-					}
-				l808:
-					{
-						position810, tokenIndex810 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l811
-						}
-						position++
-						goto l810
-					l811:
-						position, tokenIndex = position810, tokenIndex810
-						if buffer[position] != rune('W') {
-							goto l805
-						}
-						position++
-					}
-				l810:
-					if buffer[position] != rune('2') {
-						goto l805
+					if buffer[position] != rune('z') {
+						goto l795
 					}
 					position++
-					goto l804
-				l805:
-					position, tokenIndex = position804, tokenIndex804
+				}
+			l797:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l795
+				}
+				position++
+				{
+					position800, tokenIndex800 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l800
+					}
+					position++
+					goto l801
+				l800:
+					position, tokenIndex = position800, tokenIndex800
+				}
+			l801:
+				{
+					position802, tokenIndex802 := position, tokenIndex
+					{
+						position803, tokenIndex803 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l804
+						}
+						position++
+						goto l803
+					l804:
+						position, tokenIndex = position803, tokenIndex803
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l805
+						}
+						position++
+						goto l803
+					l805:
+						position, tokenIndex = position803, tokenIndex803
+						{
+							position807, tokenIndex807 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l808
+							}
+							position++
+							goto l807
+						l808:
+							position, tokenIndex = position807, tokenIndex807
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l806
+							}
+							position++
+						}
+					l807:
+						goto l803
+					l806:
+						position, tokenIndex = position803, tokenIndex803
+						if buffer[position] != rune('_') {
+							goto l802
+						}
+						position++
+					}
+				l803:
+					goto l795
+				l802:
+					position, tokenIndex = position802, tokenIndex802
+				}
+				{
+					position809, tokenIndex809 := position, tokenIndex
+					if buffer[position] != rune('.') {
+						goto l809
+					}
+					position++
+				l811:
+					{
+						position812, tokenIndex812 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l812
+						}
+						position++
+						goto l811
+					l812:
+						position, tokenIndex = position812, tokenIndex812
+					}
 					{
 						position813, tokenIndex813 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						if buffer[position] != rune('b') {
 							goto l814
 						}
 						position++
 						goto l813
 					l814:
 						position, tokenIndex = position813, tokenIndex813
-						if buffer[position] != rune('V') {
-							goto l812
+						if buffer[position] != rune('s') {
+							goto l815
+						}
+						position++
+						goto l813
+					l815:
+						position, tokenIndex = position813, tokenIndex813
+						if buffer[position] != rune('d') {
+							goto l816
+						}
+						position++
+						goto l813
+					l816:
+						position, tokenIndex = position813, tokenIndex813
+						if buffer[position] != rune('h') {
+							goto l817
+						}
+						position++
+						goto l813
+					l817:
+						position, tokenIndex = position813, tokenIndex813
+						if buffer[position] != rune('q') {
+							goto l809
 						}
 						position++
 					}
 				l813:
 					{
-						position815, tokenIndex815 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l816
-						}
-						position++
-						goto l815
-					l816:
-						position, tokenIndex = position815, tokenIndex815
-						if buffer[position] != rune('L') {
-							goto l812
-						}
-						position++
-					}
-				l815:
-					{
-						position817, tokenIndex817 := position, tokenIndex
-						if buffer[position] != rune('1') {
+						position818, tokenIndex818 := position, tokenIndex
+						if buffer[position] != rune('[') {
 							goto l818
 						}
 						position++
-						goto l817
-					l818:
-						position, tokenIndex = position817, tokenIndex817
-						if buffer[position] != rune('2') {
-							goto l819
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l818
 						}
 						position++
-						goto l817
-					l819:
-						position, tokenIndex = position817, tokenIndex817
-						if buffer[position] != rune('3') {
-							goto l820
-						}
-						position++
-						goto l817
-					l820:
-						position, tokenIndex = position817, tokenIndex817
-						if buffer[position] != rune('4') {
+						{
+							position820, tokenIndex820 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l820
+							}
+							position++
 							goto l821
+						l820:
+							position, tokenIndex = position820, tokenIndex820
+						}
+					l821:
+						if buffer[position] != rune(']') {
+							goto l818
 						}
 						position++
-						goto l817
-					l821:
-						position, tokenIndex = position817, tokenIndex817
-						if buffer[position] != rune('5') {
+						goto l819
+					l818:
+						position, tokenIndex = position818, tokenIndex818
+					}
+				l819:
+					goto l810
+				l809:
+					position, tokenIndex = position809, tokenIndex809
+				}
+			l810:
+				add(ruleARMVectorRegister, position796)
+			}
+			return true
+		l795:
+			position, tokenIndex = position795, tokenIndex795
+			return false
+		},
+		/* 51 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
+		func() bool {
+			position822, tokenIndex822 := position, tokenIndex
+			{
+				position823 := position
+				{
+					position824, tokenIndex824 := position, tokenIndex
+					if buffer[position] != rune('p') {
+						goto l825
+					}
+					position++
+					goto l824
+				l825:
+					position, tokenIndex = position824, tokenIndex824
+					if buffer[position] != rune('P') {
+						goto l822
+					}
+					position++
+				}
+			l824:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l822
+				}
+				position++
+				{
+					position826, tokenIndex826 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l826
+					}
+					position++
+					goto l827
+				l826:
+					position, tokenIndex = position826, tokenIndex826
+				}
+			l827:
+				if buffer[position] != rune('/') {
+					goto l822
+				}
+				position++
+				{
+					position828, tokenIndex828 := position, tokenIndex
+					if buffer[position] != rune('m') {
+						goto l829
+					}
+					position++
+					goto l828
+				l829:
+					position, tokenIndex = position828, tokenIndex828
+					if buffer[position] != rune('M') {
+						goto l830
+					}
+					position++
+					goto l828
+				l830:
+					position, tokenIndex = position828, tokenIndex828
+					{
+						position831, tokenIndex831 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l832
+						}
+						position++
+						goto l831
+					l832:
+						position, tokenIndex = position831, tokenIndex831
+						if buffer[position] != rune('Z') {
 							goto l822
 						}
 						position++
-						goto l817
-					l822:
-						position, tokenIndex = position817, tokenIndex817
-						if buffer[position] != rune('6') {
-							goto l823
-						}
-						position++
-						goto l817
-					l823:
-						position, tokenIndex = position817, tokenIndex817
-						if buffer[position] != rune('7') {
-							goto l824
-						}
-						position++
-						goto l817
-					l824:
-						position, tokenIndex = position817, tokenIndex817
-						if buffer[position] != rune('8') {
-							goto l812
-						}
-						position++
 					}
-				l817:
-					{
-						position825, tokenIndex825 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l825
-						}
-						position++
-						goto l812
-					l825:
-						position, tokenIndex = position825, tokenIndex825
-					}
-					goto l804
-				l812:
-					position, tokenIndex = position804, tokenIndex804
-					{
-						position827, tokenIndex827 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l828
-						}
-						position++
-						goto l827
-					l828:
-						position, tokenIndex = position827, tokenIndex827
-						if buffer[position] != rune('V') {
-							goto l826
-						}
-						position++
-					}
-				l827:
-					{
-						position829, tokenIndex829 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l830
-						}
-						position++
-						goto l829
-					l830:
-						position, tokenIndex = position829, tokenIndex829
-						if buffer[position] != rune('L') {
-							goto l826
-						}
-						position++
-					}
-				l829:
-					if buffer[position] != rune('1') {
-						goto l826
-					}
-					position++
-					if buffer[position] != rune('6') {
-						goto l826
-					}
-					position++
-					goto l804
-				l826:
-					position, tokenIndex = position804, tokenIndex804
-					{
-						position832, tokenIndex832 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l833
-						}
-						position++
-						goto l832
-					l833:
-						position, tokenIndex = position832, tokenIndex832
-						if buffer[position] != rune('V') {
-							goto l831
-						}
-						position++
-					}
-				l832:
-					{
-						position834, tokenIndex834 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l835
-						}
-						position++
-						goto l834
-					l835:
-						position, tokenIndex = position834, tokenIndex834
-						if buffer[position] != rune('L') {
-							goto l831
-						}
-						position++
-					}
-				l834:
-					if buffer[position] != rune('3') {
-						goto l831
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l831
-					}
-					position++
-					goto l804
 				l831:
-					position, tokenIndex = position804, tokenIndex804
+				}
+			l828:
+				add(ruleSVE2PredicateRegister, position823)
+			}
+			return true
+		l822:
+			position, tokenIndex = position822, tokenIndex822
+			return false
+		},
+		/* 52 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 {
+			position833, tokenIndex833 := position, tokenIndex
+			{
+				position834 := position
+				{
+					position835, tokenIndex835 := position, tokenIndex
 					{
 						position837, tokenIndex837 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						if buffer[position] != rune('p') {
 							goto l838
 						}
 						position++
 						goto l837
 					l838:
 						position, tokenIndex = position837, tokenIndex837
-						if buffer[position] != rune('V') {
+						if buffer[position] != rune('P') {
 							goto l836
 						}
 						position++
@@ -6636,777 +6628,797 @@
 				l837:
 					{
 						position839, tokenIndex839 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('o') {
 							goto l840
 						}
 						position++
 						goto l839
 					l840:
 						position, tokenIndex = position839, tokenIndex839
-						if buffer[position] != rune('L') {
+						if buffer[position] != rune('O') {
 							goto l836
 						}
 						position++
 					}
 				l839:
-					if buffer[position] != rune('6') {
-						goto l836
-					}
-					position++
-					if buffer[position] != rune('4') {
-						goto l836
-					}
-					position++
-					goto l804
-				l836:
-					position, tokenIndex = position804, tokenIndex804
 					{
-						position842, tokenIndex842 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l843
+						position841, tokenIndex841 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l842
 						}
 						position++
-						goto l842
-					l843:
-						position, tokenIndex = position842, tokenIndex842
-						if buffer[position] != rune('V') {
-							goto l841
+						goto l841
+					l842:
+						position, tokenIndex = position841, tokenIndex841
+						if buffer[position] != rune('W') {
+							goto l836
 						}
 						position++
 					}
-				l842:
+				l841:
+					if buffer[position] != rune('2') {
+						goto l836
+					}
+					position++
+					goto l835
+				l836:
+					position, tokenIndex = position835, tokenIndex835
 					{
 						position844, tokenIndex844 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('v') {
 							goto l845
 						}
 						position++
 						goto l844
 					l845:
 						position, tokenIndex = position844, tokenIndex844
-						if buffer[position] != rune('L') {
-							goto l841
+						if buffer[position] != rune('V') {
+							goto l843
 						}
 						position++
 					}
 				l844:
-					if buffer[position] != rune('1') {
-						goto l841
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l841
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l841
-					}
-					position++
-					goto l804
-				l841:
-					position, tokenIndex = position804, tokenIndex804
 					{
-						position847, tokenIndex847 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l848
-						}
-						position++
-						goto l847
-					l848:
-						position, tokenIndex = position847, tokenIndex847
-						if buffer[position] != rune('V') {
-							goto l846
-						}
-						position++
-					}
-				l847:
-					{
-						position849, tokenIndex849 := position, tokenIndex
+						position846, tokenIndex846 := position, tokenIndex
 						if buffer[position] != rune('l') {
+							goto l847
+						}
+						position++
+						goto l846
+					l847:
+						position, tokenIndex = position846, tokenIndex846
+						if buffer[position] != rune('L') {
+							goto l843
+						}
+						position++
+					}
+				l846:
+					{
+						position848, tokenIndex848 := position, tokenIndex
+						if buffer[position] != rune('1') {
+							goto l849
+						}
+						position++
+						goto l848
+					l849:
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('2') {
 							goto l850
 						}
 						position++
-						goto l849
+						goto l848
 					l850:
-						position, tokenIndex = position849, tokenIndex849
-						if buffer[position] != rune('L') {
-							goto l846
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('3') {
+							goto l851
 						}
 						position++
-					}
-				l849:
-					if buffer[position] != rune('2') {
-						goto l846
-					}
-					position++
-					if buffer[position] != rune('5') {
-						goto l846
-					}
-					position++
-					if buffer[position] != rune('6') {
-						goto l846
-					}
-					position++
-					goto l804
-				l846:
-					position, tokenIndex = position804, tokenIndex804
-					{
-						position852, tokenIndex852 := position, tokenIndex
-						if buffer[position] != rune('m') {
+						goto l848
+					l851:
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('4') {
+							goto l852
+						}
+						position++
+						goto l848
+					l852:
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('5') {
 							goto l853
 						}
 						position++
-						goto l852
+						goto l848
 					l853:
-						position, tokenIndex = position852, tokenIndex852
-						if buffer[position] != rune('M') {
-							goto l851
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('6') {
+							goto l854
 						}
 						position++
-					}
-				l852:
-					{
-						position854, tokenIndex854 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						goto l848
+					l854:
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('7') {
 							goto l855
 						}
 						position++
-						goto l854
+						goto l848
 					l855:
-						position, tokenIndex = position854, tokenIndex854
-						if buffer[position] != rune('U') {
-							goto l851
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('8') {
+							goto l843
 						}
 						position++
 					}
-				l854:
+				l848:
 					{
 						position856, tokenIndex856 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l856
+						}
+						position++
+						goto l843
+					l856:
+						position, tokenIndex = position856, tokenIndex856
+					}
+					goto l835
+				l843:
+					position, tokenIndex = position835, tokenIndex835
+					{
+						position858, tokenIndex858 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l859
+						}
+						position++
+						goto l858
+					l859:
+						position, tokenIndex = position858, tokenIndex858
+						if buffer[position] != rune('V') {
 							goto l857
 						}
 						position++
-						goto l856
-					l857:
-						position, tokenIndex = position856, tokenIndex856
+					}
+				l858:
+					{
+						position860, tokenIndex860 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l861
+						}
+						position++
+						goto l860
+					l861:
+						position, tokenIndex = position860, tokenIndex860
 						if buffer[position] != rune('L') {
-							goto l851
+							goto l857
 						}
 						position++
 					}
-				l856:
-					if buffer[position] != rune('3') {
-						goto l851
+				l860:
+					if buffer[position] != rune('1') {
+						goto l857
 					}
 					position++
-					goto l804
-				l851:
-					position, tokenIndex = position804, tokenIndex804
-					{
-						position859, tokenIndex859 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l860
-						}
-						position++
-						goto l859
-					l860:
-						position, tokenIndex = position859, tokenIndex859
-						if buffer[position] != rune('M') {
-							goto l858
-						}
-						position++
+					if buffer[position] != rune('6') {
+						goto l857
 					}
-				l859:
-					{
-						position861, tokenIndex861 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l862
-						}
-						position++
-						goto l861
-					l862:
-						position, tokenIndex = position861, tokenIndex861
-						if buffer[position] != rune('U') {
-							goto l858
-						}
-						position++
-					}
-				l861:
+					position++
+					goto l835
+				l857:
+					position, tokenIndex = position835, tokenIndex835
 					{
 						position863, tokenIndex863 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('v') {
 							goto l864
 						}
 						position++
 						goto l863
 					l864:
 						position, tokenIndex = position863, tokenIndex863
-						if buffer[position] != rune('L') {
-							goto l858
+						if buffer[position] != rune('V') {
+							goto l862
 						}
 						position++
 					}
 				l863:
-					if buffer[position] != rune('4') {
-						goto l858
-					}
-					position++
-					goto l804
-				l858:
-					position, tokenIndex = position804, tokenIndex804
 					{
 						position865, tokenIndex865 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('l') {
 							goto l866
 						}
 						position++
 						goto l865
 					l866:
 						position, tokenIndex = position865, tokenIndex865
-						if buffer[position] != rune('A') {
-							goto l802
+						if buffer[position] != rune('L') {
+							goto l862
 						}
 						position++
 					}
 				l865:
+					if buffer[position] != rune('3') {
+						goto l862
+					}
+					position++
+					if buffer[position] != rune('2') {
+						goto l862
+					}
+					position++
+					goto l835
+				l862:
+					position, tokenIndex = position835, tokenIndex835
 					{
-						position867, tokenIndex867 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l868
+						position868, tokenIndex868 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l869
 						}
 						position++
-						goto l867
-					l868:
-						position, tokenIndex = position867, tokenIndex867
-						if buffer[position] != rune('L') {
-							goto l802
+						goto l868
+					l869:
+						position, tokenIndex = position868, tokenIndex868
+						if buffer[position] != rune('V') {
+							goto l867
 						}
 						position++
 					}
-				l867:
+				l868:
 					{
-						position869, tokenIndex869 := position, tokenIndex
+						position870, tokenIndex870 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l870
-						}
-						position++
-						goto l869
-					l870:
-						position, tokenIndex = position869, tokenIndex869
-						if buffer[position] != rune('L') {
-							goto l802
-						}
-						position++
-					}
-				l869:
-				}
-			l804:
-				{
-					position871, tokenIndex871 := position, tokenIndex
-					{
-						position872, tokenIndex872 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l873
-						}
-						position++
-						goto l872
-					l873:
-						position, tokenIndex = position872, tokenIndex872
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l874
-						}
-						position++
-						goto l872
-					l874:
-						position, tokenIndex = position872, tokenIndex872
-						{
-							position876, tokenIndex876 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l877
-							}
-							position++
-							goto l876
-						l877:
-							position, tokenIndex = position876, tokenIndex876
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l875
-							}
-							position++
-						}
-					l876:
-						goto l872
-					l875:
-						position, tokenIndex = position872, tokenIndex872
-						if buffer[position] != rune('_') {
 							goto l871
 						}
 						position++
+						goto l870
+					l871:
+						position, tokenIndex = position870, tokenIndex870
+						if buffer[position] != rune('L') {
+							goto l867
+						}
+						position++
 					}
-				l872:
-					goto l802
-				l871:
-					position, tokenIndex = position871, tokenIndex871
-				}
-				add(ruleSVE2SpecialValue, position803)
-			}
-			return true
-		l802:
-			position, tokenIndex = position802, tokenIndex802
-			return false
-		},
-		/* 52 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
-		func() bool {
-			position878, tokenIndex878 := position, tokenIndex
-			{
-				position879 := position
-				{
-					position880, tokenIndex880 := position, tokenIndex
-					if !_rules[ruleSymbolRef]() {
-						goto l881
+				l870:
+					if buffer[position] != rune('6') {
+						goto l867
 					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l881
+					position++
+					if buffer[position] != rune('4') {
+						goto l867
 					}
-					goto l880
-				l881:
-					position, tokenIndex = position880, tokenIndex880
-					if !_rules[ruleSymbolRef]() {
-						goto l882
-					}
-					goto l880
-				l882:
-					position, tokenIndex = position880, tokenIndex880
-					if !_rules[ruleLow12BitsSymbolRef]() {
-						goto l883
-					}
-					goto l880
-				l883:
-					position, tokenIndex = position880, tokenIndex880
-				l885:
+					position++
+					goto l835
+				l867:
+					position, tokenIndex = position835, tokenIndex835
 					{
-						position886, tokenIndex886 := position, tokenIndex
-						if !_rules[ruleOffset]() {
+						position873, tokenIndex873 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l874
+						}
+						position++
+						goto l873
+					l874:
+						position, tokenIndex = position873, tokenIndex873
+						if buffer[position] != rune('V') {
+							goto l872
+						}
+						position++
+					}
+				l873:
+					{
+						position875, tokenIndex875 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l876
+						}
+						position++
+						goto l875
+					l876:
+						position, tokenIndex = position875, tokenIndex875
+						if buffer[position] != rune('L') {
+							goto l872
+						}
+						position++
+					}
+				l875:
+					if buffer[position] != rune('1') {
+						goto l872
+					}
+					position++
+					if buffer[position] != rune('2') {
+						goto l872
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l872
+					}
+					position++
+					goto l835
+				l872:
+					position, tokenIndex = position835, tokenIndex835
+					{
+						position878, tokenIndex878 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l879
+						}
+						position++
+						goto l878
+					l879:
+						position, tokenIndex = position878, tokenIndex878
+						if buffer[position] != rune('V') {
+							goto l877
+						}
+						position++
+					}
+				l878:
+					{
+						position880, tokenIndex880 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l881
+						}
+						position++
+						goto l880
+					l881:
+						position, tokenIndex = position880, tokenIndex880
+						if buffer[position] != rune('L') {
+							goto l877
+						}
+						position++
+					}
+				l880:
+					if buffer[position] != rune('2') {
+						goto l877
+					}
+					position++
+					if buffer[position] != rune('5') {
+						goto l877
+					}
+					position++
+					if buffer[position] != rune('6') {
+						goto l877
+					}
+					position++
+					goto l835
+				l877:
+					position, tokenIndex = position835, tokenIndex835
+					{
+						position883, tokenIndex883 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l884
+						}
+						position++
+						goto l883
+					l884:
+						position, tokenIndex = position883, tokenIndex883
+						if buffer[position] != rune('M') {
+							goto l882
+						}
+						position++
+					}
+				l883:
+					{
+						position885, tokenIndex885 := position, tokenIndex
+						if buffer[position] != rune('u') {
 							goto l886
 						}
+						position++
 						goto l885
 					l886:
-						position, tokenIndex = position886, tokenIndex886
+						position, tokenIndex = position885, tokenIndex885
+						if buffer[position] != rune('U') {
+							goto l882
+						}
+						position++
 					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l884
-					}
-					goto l880
-				l884:
-					position, tokenIndex = position880, tokenIndex880
-					if !_rules[ruleSegmentRegister]() {
+				l885:
+					{
+						position887, tokenIndex887 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l888
+						}
+						position++
 						goto l887
+					l888:
+						position, tokenIndex = position887, tokenIndex887
+						if buffer[position] != rune('L') {
+							goto l882
+						}
+						position++
 					}
-					if !_rules[ruleOffset]() {
-						goto l887
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l887
-					}
-					goto l880
 				l887:
-					position, tokenIndex = position880, tokenIndex880
-					if !_rules[ruleSegmentRegister]() {
-						goto l888
+					if buffer[position] != rune('3') {
+						goto l882
 					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l888
-					}
-					goto l880
-				l888:
-					position, tokenIndex = position880, tokenIndex880
-					if !_rules[ruleSegmentRegister]() {
-						goto l889
-					}
-					if !_rules[ruleOffset]() {
-						goto l889
-					}
-					goto l880
-				l889:
-					position, tokenIndex = position880, tokenIndex880
-					if !_rules[ruleARMBaseIndexScale]() {
+					position++
+					goto l835
+				l882:
+					position, tokenIndex = position835, tokenIndex835
+					{
+						position890, tokenIndex890 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l891
+						}
+						position++
 						goto l890
+					l891:
+						position, tokenIndex = position890, tokenIndex890
+						if buffer[position] != rune('M') {
+							goto l889
+						}
+						position++
 					}
-					goto l880
 				l890:
-					position, tokenIndex = position880, tokenIndex880
-					if !_rules[ruleBaseIndexScale]() {
-						goto l878
+					{
+						position892, tokenIndex892 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l893
+						}
+						position++
+						goto l892
+					l893:
+						position, tokenIndex = position892, tokenIndex892
+						if buffer[position] != rune('U') {
+							goto l889
+						}
+						position++
 					}
-				}
-			l880:
-				add(ruleMemoryRef, position879)
-			}
-			return true
-		l878:
-			position, tokenIndex = position878, tokenIndex878
-			return false
-		},
-		/* 53 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
-		func() bool {
-			position891, tokenIndex891 := position, tokenIndex
-			{
-				position892 := position
-				{
-					position893, tokenIndex893 := position, tokenIndex
-				l895:
+				l892:
+					{
+						position894, tokenIndex894 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l895
+						}
+						position++
+						goto l894
+					l895:
+						position, tokenIndex = position894, tokenIndex894
+						if buffer[position] != rune('L') {
+							goto l889
+						}
+						position++
+					}
+				l894:
+					if buffer[position] != rune('4') {
+						goto l889
+					}
+					position++
+					goto l835
+				l889:
+					position, tokenIndex = position835, tokenIndex835
 					{
 						position896, tokenIndex896 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l896
+						if buffer[position] != rune('a') {
+							goto l897
 						}
-						goto l895
-					l896:
+						position++
+						goto l896
+					l897:
 						position, tokenIndex = position896, tokenIndex896
+						if buffer[position] != rune('A') {
+							goto l833
+						}
+						position++
 					}
-					if buffer[position] != rune('+') {
-						goto l893
-					}
-					position++
-					goto l894
-				l893:
-					position, tokenIndex = position893, tokenIndex893
-				}
-			l894:
-				{
-					position897, tokenIndex897 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l898
-					}
-					goto l897
-				l898:
-					position, tokenIndex = position897, tokenIndex897
-					if !_rules[ruleSymbolName]() {
-						goto l891
-					}
-				}
-			l897:
-			l899:
-				{
-					position900, tokenIndex900 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l900
-					}
-					goto l899
-				l900:
-					position, tokenIndex = position900, tokenIndex900
-				}
-				{
-					position901, tokenIndex901 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l901
-					}
-					position++
-					if !_rules[ruleSection]() {
-						goto l901
-					}
-				l903:
+				l896:
 					{
-						position904, tokenIndex904 := position, tokenIndex
-						if !_rules[ruleOffset]() {
+						position898, tokenIndex898 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l899
+						}
+						position++
+						goto l898
+					l899:
+						position, tokenIndex = position898, tokenIndex898
+						if buffer[position] != rune('L') {
+							goto l833
+						}
+						position++
+					}
+				l898:
+					{
+						position900, tokenIndex900 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l901
+						}
+						position++
+						goto l900
+					l901:
+						position, tokenIndex = position900, tokenIndex900
+						if buffer[position] != rune('L') {
+							goto l833
+						}
+						position++
+					}
+				l900:
+				}
+			l835:
+				{
+					position902, tokenIndex902 := position, tokenIndex
+					{
+						position903, tokenIndex903 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l904
 						}
+						position++
 						goto l903
 					l904:
-						position, tokenIndex = position904, tokenIndex904
+						position, tokenIndex = position903, tokenIndex903
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l905
+						}
+						position++
+						goto l903
+					l905:
+						position, tokenIndex = position903, tokenIndex903
+						{
+							position907, tokenIndex907 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l908
+							}
+							position++
+							goto l907
+						l908:
+							position, tokenIndex = position907, tokenIndex907
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l906
+							}
+							position++
+						}
+					l907:
+						goto l903
+					l906:
+						position, tokenIndex = position903, tokenIndex903
+						if buffer[position] != rune('_') {
+							goto l902
+						}
+						position++
 					}
-					goto l902
-				l901:
-					position, tokenIndex = position901, tokenIndex901
+				l903:
+					goto l833
+				l902:
+					position, tokenIndex = position902, tokenIndex902
 				}
-			l902:
-				add(ruleSymbolRef, position892)
+				add(ruleSVE2SpecialValue, position834)
 			}
 			return true
-		l891:
-			position, tokenIndex = position891, tokenIndex891
+		l833:
+			position, tokenIndex = position833, tokenIndex833
 			return false
 		},
-		/* 54 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		/* 53 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position905, tokenIndex905 := position, tokenIndex
+			position909, tokenIndex909 := position, tokenIndex
 			{
-				position906 := position
-				if buffer[position] != rune(':') {
-					goto l905
-				}
-				position++
-				{
-					position907, tokenIndex907 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l908
-					}
-					position++
-					goto l907
-				l908:
-					position, tokenIndex = position907, tokenIndex907
-					if buffer[position] != rune('L') {
-						goto l905
-					}
-					position++
-				}
-			l907:
-				{
-					position909, tokenIndex909 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l910
-					}
-					position++
-					goto l909
-				l910:
-					position, tokenIndex = position909, tokenIndex909
-					if buffer[position] != rune('O') {
-						goto l905
-					}
-					position++
-				}
-			l909:
-				if buffer[position] != rune('1') {
-					goto l905
-				}
-				position++
-				if buffer[position] != rune('2') {
-					goto l905
-				}
-				position++
-				if buffer[position] != rune(':') {
-					goto l905
-				}
-				position++
+				position910 := position
 				{
 					position911, tokenIndex911 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
+					if !_rules[ruleSymbolRef]() {
+						goto l912
+					}
+					if !_rules[ruleBaseIndexScale]() {
 						goto l912
 					}
 					goto l911
 				l912:
 					position, tokenIndex = position911, tokenIndex911
-					if !_rules[ruleSymbolName]() {
-						goto l905
+					if !_rules[ruleSymbolRef]() {
+						goto l913
+					}
+					goto l911
+				l913:
+					position, tokenIndex = position911, tokenIndex911
+					if !_rules[ruleLow12BitsSymbolRef]() {
+						goto l914
+					}
+					goto l911
+				l914:
+					position, tokenIndex = position911, tokenIndex911
+				l916:
+					{
+						position917, tokenIndex917 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l917
+						}
+						goto l916
+					l917:
+						position, tokenIndex = position917, tokenIndex917
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l915
+					}
+					goto l911
+				l915:
+					position, tokenIndex = position911, tokenIndex911
+					if !_rules[ruleSegmentRegister]() {
+						goto l918
+					}
+					if !_rules[ruleOffset]() {
+						goto l918
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l918
+					}
+					goto l911
+				l918:
+					position, tokenIndex = position911, tokenIndex911
+					if !_rules[ruleSegmentRegister]() {
+						goto l919
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l919
+					}
+					goto l911
+				l919:
+					position, tokenIndex = position911, tokenIndex911
+					if !_rules[ruleSegmentRegister]() {
+						goto l920
+					}
+					if !_rules[ruleOffset]() {
+						goto l920
+					}
+					goto l911
+				l920:
+					position, tokenIndex = position911, tokenIndex911
+					if !_rules[ruleARMBaseIndexScale]() {
+						goto l921
+					}
+					goto l911
+				l921:
+					position, tokenIndex = position911, tokenIndex911
+					if !_rules[ruleBaseIndexScale]() {
+						goto l909
 					}
 				}
 			l911:
-				{
-					position913, tokenIndex913 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l913
-					}
-					goto l914
-				l913:
-					position, tokenIndex = position913, tokenIndex913
-				}
-			l914:
-				add(ruleLow12BitsSymbolRef, position906)
+				add(ruleMemoryRef, position910)
 			}
 			return true
-		l905:
-			position, tokenIndex = position905, tokenIndex905
+		l909:
+			position, tokenIndex = position909, tokenIndex909
 			return false
 		},
-		/* 55 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		/* 54 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
 		func() bool {
-			position915, tokenIndex915 := position, tokenIndex
+			position922, tokenIndex922 := position, tokenIndex
 			{
-				position916 := position
-				if buffer[position] != rune('[') {
-					goto l915
-				}
-				position++
-				if !_rules[ruleARMRegister]() {
-					goto l915
-				}
+				position923 := position
 				{
-					position917, tokenIndex917 := position, tokenIndex
-					if buffer[position] != rune(',') {
-						goto l917
+					position924, tokenIndex924 := position, tokenIndex
+				l926:
+					{
+						position927, tokenIndex927 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l927
+						}
+						goto l926
+					l927:
+						position, tokenIndex = position927, tokenIndex927
+					}
+					if buffer[position] != rune('+') {
+						goto l924
 					}
 					position++
-					{
-						position919, tokenIndex919 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l919
-						}
-						goto l920
-					l919:
-						position, tokenIndex = position919, tokenIndex919
-					}
-				l920:
-					{
-						position921, tokenIndex921 := position, tokenIndex
-						if buffer[position] != rune('#') {
-							goto l922
-						}
-						position++
-						if !_rules[ruleOffset]() {
-							goto l922
-						}
-						{
-							position923, tokenIndex923 := position, tokenIndex
-							{
-								position925, tokenIndex925 := position, tokenIndex
-								if buffer[position] != rune('*') {
-									goto l926
-								}
-								position++
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l926
-								}
-								position++
-							l927:
-								{
-									position928, tokenIndex928 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l928
-									}
-									position++
-									goto l927
-								l928:
-									position, tokenIndex = position928, tokenIndex928
-								}
-								goto l925
-							l926:
-								position, tokenIndex = position925, tokenIndex925
-								if buffer[position] != rune('*') {
-									goto l929
-								}
-								position++
-								if buffer[position] != rune('(') {
-									goto l929
-								}
-								position++
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l929
-								}
-								position++
-							l930:
-								{
-									position931, tokenIndex931 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l931
-									}
-									position++
-									goto l930
-								l931:
-									position, tokenIndex = position931, tokenIndex931
-								}
-								if !_rules[ruleOperator]() {
-									goto l929
-								}
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l929
-								}
-								position++
-							l932:
-								{
-									position933, tokenIndex933 := position, tokenIndex
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l933
-									}
-									position++
-									goto l932
-								l933:
-									position, tokenIndex = position933, tokenIndex933
-								}
-								if buffer[position] != rune(')') {
-									goto l929
-								}
-								position++
-								goto l925
-							l929:
-								position, tokenIndex = position925, tokenIndex925
-							l934:
-								{
-									position935, tokenIndex935 := position, tokenIndex
-									if buffer[position] != rune('+') {
-										goto l935
-									}
-									position++
-									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l935
-									}
-									position++
-								l936:
-									{
-										position937, tokenIndex937 := position, tokenIndex
-										if c := buffer[position]; c < rune('0') || c > rune('9') {
-											goto l937
-										}
-										position++
-										goto l936
-									l937:
-										position, tokenIndex = position937, tokenIndex937
-									}
-									goto l934
-								l935:
-									position, tokenIndex = position935, tokenIndex935
-								}
-							}
-						l925:
-							goto l924
-
-							position, tokenIndex = position923, tokenIndex923
-						}
-					l924:
-						goto l921
-					l922:
-						position, tokenIndex = position921, tokenIndex921
-						if !_rules[ruleARMGOTLow12]() {
-							goto l938
-						}
-						goto l921
-					l938:
-						position, tokenIndex = position921, tokenIndex921
-						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l939
-						}
-						goto l921
-					l939:
-						position, tokenIndex = position921, tokenIndex921
-						if !_rules[ruleARMRegister]() {
-							goto l917
-						}
-					}
-				l921:
-					{
-						position940, tokenIndex940 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l940
-						}
-						position++
-						{
-							position942, tokenIndex942 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l942
-							}
-							goto l943
-						l942:
-							position, tokenIndex = position942, tokenIndex942
-						}
-					l943:
-						if !_rules[ruleARMConstantTweak]() {
-							goto l940
-						}
-						goto l941
-					l940:
-						position, tokenIndex = position940, tokenIndex940
-					}
-				l941:
-					goto l918
-				l917:
-					position, tokenIndex = position917, tokenIndex917
+					goto l925
+				l924:
+					position, tokenIndex = position924, tokenIndex924
 				}
-			l918:
-				if buffer[position] != rune(']') {
-					goto l915
+			l925:
+				{
+					position928, tokenIndex928 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l929
+					}
+					goto l928
+				l929:
+					position, tokenIndex = position928, tokenIndex928
+					if !_rules[ruleSymbolName]() {
+						goto l922
+					}
+				}
+			l928:
+			l930:
+				{
+					position931, tokenIndex931 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l931
+					}
+					goto l930
+				l931:
+					position, tokenIndex = position931, tokenIndex931
+				}
+				{
+					position932, tokenIndex932 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l932
+					}
+					position++
+					if !_rules[ruleSection]() {
+						goto l932
+					}
+				l934:
+					{
+						position935, tokenIndex935 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l935
+						}
+						goto l934
+					l935:
+						position, tokenIndex = position935, tokenIndex935
+					}
+					goto l933
+				l932:
+					position, tokenIndex = position932, tokenIndex932
+				}
+			l933:
+				add(ruleSymbolRef, position923)
+			}
+			return true
+		l922:
+			position, tokenIndex = position922, tokenIndex922
+			return false
+		},
+		/* 55 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		func() bool {
+			position936, tokenIndex936 := position, tokenIndex
+			{
+				position937 := position
+				if buffer[position] != rune(':') {
+					goto l936
 				}
 				position++
 				{
+					position938, tokenIndex938 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l939
+					}
+					position++
+					goto l938
+				l939:
+					position, tokenIndex = position938, tokenIndex938
+					if buffer[position] != rune('L') {
+						goto l936
+					}
+					position++
+				}
+			l938:
+				{
+					position940, tokenIndex940 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l941
+					}
+					position++
+					goto l940
+				l941:
+					position, tokenIndex = position940, tokenIndex940
+					if buffer[position] != rune('O') {
+						goto l936
+					}
+					position++
+				}
+			l940:
+				if buffer[position] != rune('1') {
+					goto l936
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l936
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l936
+				}
+				position++
+				{
+					position942, tokenIndex942 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l943
+					}
+					goto l942
+				l943:
+					position, tokenIndex = position942, tokenIndex942
+					if !_rules[ruleSymbolName]() {
+						goto l936
+					}
+				}
+			l942:
+				{
 					position944, tokenIndex944 := position, tokenIndex
-					if !_rules[ruleARMPostincrement]() {
+					if !_rules[ruleOffset]() {
 						goto l944
 					}
 					goto l945
@@ -7414,573 +7426,787 @@
 					position, tokenIndex = position944, tokenIndex944
 				}
 			l945:
-				add(ruleARMBaseIndexScale, position916)
+				add(ruleLow12BitsSymbolRef, position937)
 			}
 			return true
-		l915:
-			position, tokenIndex = position915, tokenIndex915
+		l936:
+			position, tokenIndex = position936, tokenIndex936
 			return false
 		},
-		/* 56 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		/* 56 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
 		func() bool {
 			position946, tokenIndex946 := position, tokenIndex
 			{
 				position947 := position
-				if buffer[position] != rune(':') {
+				if buffer[position] != rune('[') {
 					goto l946
 				}
 				position++
+				if !_rules[ruleARMRegister]() {
+					goto l946
+				}
 				{
 					position948, tokenIndex948 := position, tokenIndex
-					if buffer[position] != rune('g') {
-						goto l949
+					if buffer[position] != rune(',') {
+						goto l948
 					}
 					position++
-					goto l948
-				l949:
-					position, tokenIndex = position948, tokenIndex948
-					if buffer[position] != rune('G') {
-						goto l946
-					}
-					position++
-				}
-			l948:
-				{
-					position950, tokenIndex950 := position, tokenIndex
-					if buffer[position] != rune('o') {
+					{
+						position950, tokenIndex950 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l950
+						}
 						goto l951
+					l950:
+						position, tokenIndex = position950, tokenIndex950
 					}
-					position++
-					goto l950
 				l951:
-					position, tokenIndex = position950, tokenIndex950
-					if buffer[position] != rune('O') {
-						goto l946
+					{
+						position952, tokenIndex952 := position, tokenIndex
+						if buffer[position] != rune('#') {
+							goto l953
+						}
+						position++
+						if !_rules[ruleOffset]() {
+							goto l953
+						}
+						{
+							position954, tokenIndex954 := position, tokenIndex
+							{
+								position956, tokenIndex956 := position, tokenIndex
+								if buffer[position] != rune('*') {
+									goto l957
+								}
+								position++
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l957
+								}
+								position++
+							l958:
+								{
+									position959, tokenIndex959 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l959
+									}
+									position++
+									goto l958
+								l959:
+									position, tokenIndex = position959, tokenIndex959
+								}
+								goto l956
+							l957:
+								position, tokenIndex = position956, tokenIndex956
+								if buffer[position] != rune('*') {
+									goto l960
+								}
+								position++
+								if buffer[position] != rune('(') {
+									goto l960
+								}
+								position++
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l960
+								}
+								position++
+							l961:
+								{
+									position962, tokenIndex962 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l962
+									}
+									position++
+									goto l961
+								l962:
+									position, tokenIndex = position962, tokenIndex962
+								}
+								if !_rules[ruleOperator]() {
+									goto l960
+								}
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l960
+								}
+								position++
+							l963:
+								{
+									position964, tokenIndex964 := position, tokenIndex
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l964
+									}
+									position++
+									goto l963
+								l964:
+									position, tokenIndex = position964, tokenIndex964
+								}
+								if buffer[position] != rune(')') {
+									goto l960
+								}
+								position++
+								goto l956
+							l960:
+								position, tokenIndex = position956, tokenIndex956
+							l965:
+								{
+									position966, tokenIndex966 := position, tokenIndex
+									if buffer[position] != rune('+') {
+										goto l966
+									}
+									position++
+									if c := buffer[position]; c < rune('0') || c > rune('9') {
+										goto l966
+									}
+									position++
+								l967:
+									{
+										position968, tokenIndex968 := position, tokenIndex
+										if c := buffer[position]; c < rune('0') || c > rune('9') {
+											goto l968
+										}
+										position++
+										goto l967
+									l968:
+										position, tokenIndex = position968, tokenIndex968
+									}
+									goto l965
+								l966:
+									position, tokenIndex = position966, tokenIndex966
+								}
+							}
+						l956:
+							goto l955
+
+							position, tokenIndex = position954, tokenIndex954
+						}
+					l955:
+						goto l952
+					l953:
+						position, tokenIndex = position952, tokenIndex952
+						if !_rules[ruleARMGOTLow12]() {
+							goto l969
+						}
+						goto l952
+					l969:
+						position, tokenIndex = position952, tokenIndex952
+						if !_rules[ruleLow12BitsSymbolRef]() {
+							goto l970
+						}
+						goto l952
+					l970:
+						position, tokenIndex = position952, tokenIndex952
+						if !_rules[ruleARMRegister]() {
+							goto l948
+						}
 					}
-					position++
+				l952:
+					{
+						position971, tokenIndex971 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l971
+						}
+						position++
+						{
+							position973, tokenIndex973 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l973
+							}
+							goto l974
+						l973:
+							position, tokenIndex = position973, tokenIndex973
+						}
+					l974:
+						if !_rules[ruleARMConstantTweak]() {
+							goto l971
+						}
+						goto l972
+					l971:
+						position, tokenIndex = position971, tokenIndex971
+					}
+				l972:
+					goto l949
+				l948:
+					position, tokenIndex = position948, tokenIndex948
 				}
-			l950:
-				{
-					position952, tokenIndex952 := position, tokenIndex
-					if buffer[position] != rune('t') {
-						goto l953
-					}
-					position++
-					goto l952
-				l953:
-					position, tokenIndex = position952, tokenIndex952
-					if buffer[position] != rune('T') {
-						goto l946
-					}
-					position++
-				}
-			l952:
-				if buffer[position] != rune('_') {
+			l949:
+				if buffer[position] != rune(']') {
 					goto l946
 				}
 				position++
 				{
-					position954, tokenIndex954 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l955
+					position975, tokenIndex975 := position, tokenIndex
+					if !_rules[ruleARMPostincrement]() {
+						goto l975
 					}
-					position++
-					goto l954
-				l955:
-					position, tokenIndex = position954, tokenIndex954
-					if buffer[position] != rune('L') {
-						goto l946
-					}
-					position++
+					goto l976
+				l975:
+					position, tokenIndex = position975, tokenIndex975
 				}
-			l954:
-				{
-					position956, tokenIndex956 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l957
-					}
-					position++
-					goto l956
-				l957:
-					position, tokenIndex = position956, tokenIndex956
-					if buffer[position] != rune('O') {
-						goto l946
-					}
-					position++
-				}
-			l956:
-				if buffer[position] != rune('1') {
-					goto l946
-				}
-				position++
-				if buffer[position] != rune('2') {
-					goto l946
-				}
-				position++
-				if buffer[position] != rune(':') {
-					goto l946
-				}
-				position++
-				if !_rules[ruleSymbolName]() {
-					goto l946
-				}
-				add(ruleARMGOTLow12, position947)
+			l976:
+				add(ruleARMBaseIndexScale, position947)
 			}
 			return true
 		l946:
 			position, tokenIndex = position946, tokenIndex946
 			return false
 		},
-		/* 57 ARMPostincrement <- <'!'> */
+		/* 57 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
 		func() bool {
-			position958, tokenIndex958 := position, tokenIndex
+			position977, tokenIndex977 := position, tokenIndex
 			{
-				position959 := position
-				if buffer[position] != rune('!') {
-					goto l958
-				}
-				position++
-				add(ruleARMPostincrement, position959)
-			}
-			return true
-		l958:
-			position, tokenIndex = position958, tokenIndex958
-			return false
-		},
-		/* 58 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
-		func() bool {
-			position960, tokenIndex960 := position, tokenIndex
-			{
-				position961 := position
-				if buffer[position] != rune('(') {
-					goto l960
+				position978 := position
+				if buffer[position] != rune(':') {
+					goto l977
 				}
 				position++
 				{
-					position962, tokenIndex962 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l962
-					}
-					goto l963
-				l962:
-					position, tokenIndex = position962, tokenIndex962
-				}
-			l963:
-				{
-					position964, tokenIndex964 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l964
-					}
-					goto l965
-				l964:
-					position, tokenIndex = position964, tokenIndex964
-				}
-			l965:
-				{
-					position966, tokenIndex966 := position, tokenIndex
-					if buffer[position] != rune(',') {
-						goto l966
+					position979, tokenIndex979 := position, tokenIndex
+					if buffer[position] != rune('g') {
+						goto l980
 					}
 					position++
-					{
-						position968, tokenIndex968 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l968
-						}
-						goto l969
-					l968:
-						position, tokenIndex = position968, tokenIndex968
-					}
-				l969:
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l966
-					}
-					{
-						position970, tokenIndex970 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l970
-						}
-						goto l971
-					l970:
-						position, tokenIndex = position970, tokenIndex970
-					}
-				l971:
-					{
-						position972, tokenIndex972 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l972
-						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l972
-						}
-						position++
-					l974:
-						{
-							position975, tokenIndex975 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l975
-							}
-							position++
-							goto l974
-						l975:
-							position, tokenIndex = position975, tokenIndex975
-						}
-						goto l973
-					l972:
-						position, tokenIndex = position972, tokenIndex972
-					}
-				l973:
-					goto l967
-				l966:
-					position, tokenIndex = position966, tokenIndex966
-				}
-			l967:
-				if buffer[position] != rune(')') {
-					goto l960
-				}
-				position++
-				add(ruleBaseIndexScale, position961)
-			}
-			return true
-		l960:
-			position, tokenIndex = position960, tokenIndex960
-			return false
-		},
-		/* 59 Operator <- <('+' / '-')> */
-		func() bool {
-			position976, tokenIndex976 := position, tokenIndex
-			{
-				position977 := position
-				{
-					position978, tokenIndex978 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l979
-					}
-					position++
-					goto l978
-				l979:
-					position, tokenIndex = position978, tokenIndex978
-					if buffer[position] != rune('-') {
-						goto l976
+					goto l979
+				l980:
+					position, tokenIndex = position979, tokenIndex979
+					if buffer[position] != rune('G') {
+						goto l977
 					}
 					position++
 				}
-			l978:
-				add(ruleOperator, position977)
-			}
-			return true
-		l976:
-			position, tokenIndex = position976, tokenIndex976
-			return false
-		},
-		/* 60 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
-		func() bool {
-			position980, tokenIndex980 := position, tokenIndex
-			{
-				position981 := position
+			l979:
 				{
-					position982, tokenIndex982 := position, tokenIndex
-					if buffer[position] != rune('+') {
+					position981, tokenIndex981 := position, tokenIndex
+					if buffer[position] != rune('o') {
 						goto l982
 					}
 					position++
-					goto l983
+					goto l981
 				l982:
-					position, tokenIndex = position982, tokenIndex982
+					position, tokenIndex = position981, tokenIndex981
+					if buffer[position] != rune('O') {
+						goto l977
+					}
+					position++
 				}
-			l983:
+			l981:
 				{
-					position984, tokenIndex984 := position, tokenIndex
-					if buffer[position] != rune('-') {
+					position983, tokenIndex983 := position, tokenIndex
+					if buffer[position] != rune('t') {
 						goto l984
 					}
 					position++
-					goto l985
+					goto l983
 				l984:
-					position, tokenIndex = position984, tokenIndex984
+					position, tokenIndex = position983, tokenIndex983
+					if buffer[position] != rune('T') {
+						goto l977
+					}
+					position++
+				}
+			l983:
+				if buffer[position] != rune('_') {
+					goto l977
+				}
+				position++
+				{
+					position985, tokenIndex985 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l986
+					}
+					position++
+					goto l985
+				l986:
+					position, tokenIndex = position985, tokenIndex985
+					if buffer[position] != rune('L') {
+						goto l977
+					}
+					position++
 				}
 			l985:
 				{
-					position986, tokenIndex986 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l987
-					}
-					position++
-					{
-						position988, tokenIndex988 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l989
-						}
-						position++
+					position987, tokenIndex987 := position, tokenIndex
+					if buffer[position] != rune('o') {
 						goto l988
-					l989:
-						position, tokenIndex = position988, tokenIndex988
-						if buffer[position] != rune('B') {
-							goto l987
-						}
-						position++
 					}
+					position++
+					goto l987
 				l988:
-					{
-						position992, tokenIndex992 := position, tokenIndex
-						if buffer[position] != rune('0') {
-							goto l993
-						}
-						position++
-						goto l992
-					l993:
-						position, tokenIndex = position992, tokenIndex992
-						if buffer[position] != rune('1') {
-							goto l987
-						}
-						position++
+					position, tokenIndex = position987, tokenIndex987
+					if buffer[position] != rune('O') {
+						goto l977
 					}
-				l992:
-				l990:
-					{
-						position991, tokenIndex991 := position, tokenIndex
-						{
-							position994, tokenIndex994 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l995
-							}
-							position++
-							goto l994
-						l995:
-							position, tokenIndex = position994, tokenIndex994
-							if buffer[position] != rune('1') {
-								goto l991
-							}
-							position++
-						}
-					l994:
-						goto l990
-					l991:
-						position, tokenIndex = position991, tokenIndex991
+					position++
+				}
+			l987:
+				if buffer[position] != rune('1') {
+					goto l977
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l977
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l977
+				}
+				position++
+				if !_rules[ruleSymbolName]() {
+					goto l977
+				}
+				add(ruleARMGOTLow12, position978)
+			}
+			return true
+		l977:
+			position, tokenIndex = position977, tokenIndex977
+			return false
+		},
+		/* 58 ARMPostincrement <- <'!'> */
+		func() bool {
+			position989, tokenIndex989 := position, tokenIndex
+			{
+				position990 := position
+				if buffer[position] != rune('!') {
+					goto l989
+				}
+				position++
+				add(ruleARMPostincrement, position990)
+			}
+			return true
+		l989:
+			position, tokenIndex = position989, tokenIndex989
+			return false
+		},
+		/* 59 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		func() bool {
+			position991, tokenIndex991 := position, tokenIndex
+			{
+				position992 := position
+				if buffer[position] != rune('(') {
+					goto l991
+				}
+				position++
+				{
+					position993, tokenIndex993 := position, tokenIndex
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l993
 					}
-					goto l986
-				l987:
-					position, tokenIndex = position986, tokenIndex986
-					if buffer[position] != rune('0') {
-						goto l996
+					goto l994
+				l993:
+					position, tokenIndex = position993, tokenIndex993
+				}
+			l994:
+				{
+					position995, tokenIndex995 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l995
+					}
+					goto l996
+				l995:
+					position, tokenIndex = position995, tokenIndex995
+				}
+			l996:
+				{
+					position997, tokenIndex997 := position, tokenIndex
+					if buffer[position] != rune(',') {
+						goto l997
 					}
 					position++
 					{
-						position997, tokenIndex997 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l998
+						position999, tokenIndex999 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l999
 						}
-						position++
-						goto l997
-					l998:
-						position, tokenIndex = position997, tokenIndex997
-						if buffer[position] != rune('X') {
-							goto l996
-						}
-						position++
+						goto l1000
+					l999:
+						position, tokenIndex = position999, tokenIndex999
 					}
-				l997:
+				l1000:
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l997
+					}
 					{
 						position1001, tokenIndex1001 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l1002
+						if !_rules[ruleWS]() {
+							goto l1001
+						}
+						goto l1002
+					l1001:
+						position, tokenIndex = position1001, tokenIndex1001
+					}
+				l1002:
+					{
+						position1003, tokenIndex1003 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l1003
 						}
 						position++
-						goto l1001
-					l1002:
-						position, tokenIndex = position1001, tokenIndex1001
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l1003
 						}
 						position++
-						goto l1001
-					l1003:
-						position, tokenIndex = position1001, tokenIndex1001
-						{
-							position1004, tokenIndex1004 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l1005
-							}
-							position++
-							goto l1004
-						l1005:
-							position, tokenIndex = position1004, tokenIndex1004
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l996
-							}
-							position++
-						}
-					l1004:
-					}
-				l1001:
-				l999:
-					{
-						position1000, tokenIndex1000 := position, tokenIndex
+					l1005:
 						{
 							position1006, tokenIndex1006 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l1007
+								goto l1006
 							}
 							position++
-							goto l1006
-						l1007:
+							goto l1005
+						l1006:
 							position, tokenIndex = position1006, tokenIndex1006
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l1008
-							}
-							position++
-							goto l1006
-						l1008:
-							position, tokenIndex = position1006, tokenIndex1006
-							{
-								position1009, tokenIndex1009 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l1010
-								}
-								position++
-								goto l1009
-							l1010:
-								position, tokenIndex = position1009, tokenIndex1009
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l1000
-								}
-								position++
-							}
-						l1009:
 						}
-					l1006:
-						goto l999
-					l1000:
-						position, tokenIndex = position1000, tokenIndex1000
+						goto l1004
+					l1003:
+						position, tokenIndex = position1003, tokenIndex1003
 					}
-					goto l986
-				l996:
-					position, tokenIndex = position986, tokenIndex986
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l980
-					}
-					position++
-				l1011:
-					{
-						position1012, tokenIndex1012 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l1012
-						}
-						position++
-						goto l1011
-					l1012:
-						position, tokenIndex = position1012, tokenIndex1012
-					}
+				l1004:
+					goto l998
+				l997:
+					position, tokenIndex = position997, tokenIndex997
 				}
-			l986:
-				add(ruleOffset, position981)
+			l998:
+				if buffer[position] != rune(')') {
+					goto l991
+				}
+				position++
+				add(ruleBaseIndexScale, position992)
 			}
 			return true
-		l980:
-			position, tokenIndex = position980, tokenIndex980
+		l991:
+			position, tokenIndex = position991, tokenIndex991
 			return false
 		},
-		/* 61 Section <- <([a-z] / [A-Z] / '@')+> */
+		/* 60 Operator <- <('+' / '-')> */
 		func() bool {
-			position1013, tokenIndex1013 := position, tokenIndex
+			position1007, tokenIndex1007 := position, tokenIndex
 			{
-				position1014 := position
+				position1008 := position
 				{
-					position1017, tokenIndex1017 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l1018
+					position1009, tokenIndex1009 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l1010
 					}
 					position++
-					goto l1017
-				l1018:
-					position, tokenIndex = position1017, tokenIndex1017
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l1019
+					goto l1009
+				l1010:
+					position, tokenIndex = position1009, tokenIndex1009
+					if buffer[position] != rune('-') {
+						goto l1007
 					}
 					position++
-					goto l1017
-				l1019:
-					position, tokenIndex = position1017, tokenIndex1017
-					if buffer[position] != rune('@') {
+				}
+			l1009:
+				add(ruleOperator, position1008)
+			}
+			return true
+		l1007:
+			position, tokenIndex = position1007, tokenIndex1007
+			return false
+		},
+		/* 61 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position1011, tokenIndex1011 := position, tokenIndex
+			{
+				position1012 := position
+				{
+					position1013, tokenIndex1013 := position, tokenIndex
+					if buffer[position] != rune('+') {
 						goto l1013
 					}
 					position++
+					goto l1014
+				l1013:
+					position, tokenIndex = position1013, tokenIndex1013
 				}
-			l1017:
-			l1015:
+			l1014:
 				{
-					position1016, tokenIndex1016 := position, tokenIndex
+					position1015, tokenIndex1015 := position, tokenIndex
+					if buffer[position] != rune('-') {
+						goto l1015
+					}
+					position++
+					goto l1016
+				l1015:
+					position, tokenIndex = position1015, tokenIndex1015
+				}
+			l1016:
+				{
+					position1017, tokenIndex1017 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l1018
+					}
+					position++
 					{
-						position1020, tokenIndex1020 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l1021
+						position1019, tokenIndex1019 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l1020
 						}
 						position++
-						goto l1020
-					l1021:
-						position, tokenIndex = position1020, tokenIndex1020
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l1022
-						}
-						position++
-						goto l1020
-					l1022:
-						position, tokenIndex = position1020, tokenIndex1020
-						if buffer[position] != rune('@') {
-							goto l1016
+						goto l1019
+					l1020:
+						position, tokenIndex = position1019, tokenIndex1019
+						if buffer[position] != rune('B') {
+							goto l1018
 						}
 						position++
 					}
-				l1020:
-					goto l1015
-				l1016:
-					position, tokenIndex = position1016, tokenIndex1016
+				l1019:
+					{
+						position1023, tokenIndex1023 := position, tokenIndex
+						if buffer[position] != rune('0') {
+							goto l1024
+						}
+						position++
+						goto l1023
+					l1024:
+						position, tokenIndex = position1023, tokenIndex1023
+						if buffer[position] != rune('1') {
+							goto l1018
+						}
+						position++
+					}
+				l1023:
+				l1021:
+					{
+						position1022, tokenIndex1022 := position, tokenIndex
+						{
+							position1025, tokenIndex1025 := position, tokenIndex
+							if buffer[position] != rune('0') {
+								goto l1026
+							}
+							position++
+							goto l1025
+						l1026:
+							position, tokenIndex = position1025, tokenIndex1025
+							if buffer[position] != rune('1') {
+								goto l1022
+							}
+							position++
+						}
+					l1025:
+						goto l1021
+					l1022:
+						position, tokenIndex = position1022, tokenIndex1022
+					}
+					goto l1017
+				l1018:
+					position, tokenIndex = position1017, tokenIndex1017
+					if buffer[position] != rune('0') {
+						goto l1027
+					}
+					position++
+					{
+						position1028, tokenIndex1028 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l1029
+						}
+						position++
+						goto l1028
+					l1029:
+						position, tokenIndex = position1028, tokenIndex1028
+						if buffer[position] != rune('X') {
+							goto l1027
+						}
+						position++
+					}
+				l1028:
+					{
+						position1032, tokenIndex1032 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l1033
+						}
+						position++
+						goto l1032
+					l1033:
+						position, tokenIndex = position1032, tokenIndex1032
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l1034
+						}
+						position++
+						goto l1032
+					l1034:
+						position, tokenIndex = position1032, tokenIndex1032
+						{
+							position1035, tokenIndex1035 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('f') {
+								goto l1036
+							}
+							position++
+							goto l1035
+						l1036:
+							position, tokenIndex = position1035, tokenIndex1035
+							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l1027
+							}
+							position++
+						}
+					l1035:
+					}
+				l1032:
+				l1030:
+					{
+						position1031, tokenIndex1031 := position, tokenIndex
+						{
+							position1037, tokenIndex1037 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l1038
+							}
+							position++
+							goto l1037
+						l1038:
+							position, tokenIndex = position1037, tokenIndex1037
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l1039
+							}
+							position++
+							goto l1037
+						l1039:
+							position, tokenIndex = position1037, tokenIndex1037
+							{
+								position1040, tokenIndex1040 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('f') {
+									goto l1041
+								}
+								position++
+								goto l1040
+							l1041:
+								position, tokenIndex = position1040, tokenIndex1040
+								if c := buffer[position]; c < rune('A') || c > rune('F') {
+									goto l1031
+								}
+								position++
+							}
+						l1040:
+						}
+					l1037:
+						goto l1030
+					l1031:
+						position, tokenIndex = position1031, tokenIndex1031
+					}
+					goto l1017
+				l1027:
+					position, tokenIndex = position1017, tokenIndex1017
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l1011
+					}
+					position++
+				l1042:
+					{
+						position1043, tokenIndex1043 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l1043
+						}
+						position++
+						goto l1042
+					l1043:
+						position, tokenIndex = position1043, tokenIndex1043
+					}
 				}
-				add(ruleSection, position1014)
+			l1017:
+				add(ruleOffset, position1012)
 			}
 			return true
-		l1013:
-			position, tokenIndex = position1013, tokenIndex1013
+		l1011:
+			position, tokenIndex = position1011, tokenIndex1011
 			return false
 		},
-		/* 62 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		/* 62 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position1023, tokenIndex1023 := position, tokenIndex
+			position1044, tokenIndex1044 := position, tokenIndex
 			{
-				position1024 := position
+				position1045 := position
+				{
+					position1048, tokenIndex1048 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l1049
+					}
+					position++
+					goto l1048
+				l1049:
+					position, tokenIndex = position1048, tokenIndex1048
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l1050
+					}
+					position++
+					goto l1048
+				l1050:
+					position, tokenIndex = position1048, tokenIndex1048
+					if buffer[position] != rune('@') {
+						goto l1044
+					}
+					position++
+				}
+			l1048:
+			l1046:
+				{
+					position1047, tokenIndex1047 := position, tokenIndex
+					{
+						position1051, tokenIndex1051 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l1052
+						}
+						position++
+						goto l1051
+					l1052:
+						position, tokenIndex = position1051, tokenIndex1051
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l1053
+						}
+						position++
+						goto l1051
+					l1053:
+						position, tokenIndex = position1051, tokenIndex1051
+						if buffer[position] != rune('@') {
+							goto l1047
+						}
+						position++
+					}
+				l1051:
+					goto l1046
+				l1047:
+					position, tokenIndex = position1047, tokenIndex1047
+				}
+				add(ruleSection, position1045)
+			}
+			return true
+		l1044:
+			position, tokenIndex = position1044, tokenIndex1044
+			return false
+		},
+		/* 63 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		func() bool {
+			position1054, tokenIndex1054 := position, tokenIndex
+			{
+				position1055 := position
 				if buffer[position] != rune('%') {
-					goto l1023
+					goto l1054
 				}
 				position++
 				{
-					position1025, tokenIndex1025 := position, tokenIndex
+					position1056, tokenIndex1056 := position, tokenIndex
 					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l1026
+						goto l1057
 					}
 					position++
-					goto l1025
-				l1026:
-					position, tokenIndex = position1025, tokenIndex1025
+					goto l1056
+				l1057:
+					position, tokenIndex = position1056, tokenIndex1056
 					if buffer[position] != rune('s') {
-						goto l1023
+						goto l1054
 					}
 					position++
 				}
-			l1025:
+			l1056:
 				if buffer[position] != rune('s') {
-					goto l1023
+					goto l1054
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l1023
+					goto l1054
 				}
 				position++
-				add(ruleSegmentRegister, position1024)
+				add(ruleSegmentRegister, position1055)
 			}
 			return true
-		l1023:
-			position, tokenIndex = position1023, tokenIndex1023
+		l1054:
+			position, tokenIndex = position1054, tokenIndex1054
 			return false
 		},
 	}
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
index 5c2bc62..b252a69 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
@@ -61,3 +61,11 @@
 	.set foo1, foo
 	.equ foo2, foo
 	.equiv foo3, foo
+
+	.prefalign 2
+	.prefalign 4, .Lfunc_end, nop
+	.type prefalign_func, @function
+prefalign_func:
+	ret
+.Lfunc_end:
+	.size prefalign_func, .Lfunc_end-prefalign_func
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
index ec01b4c..14bb118 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
@@ -40,3 +40,11 @@
 .Ltmp0:
 # The first operand (the "place") of a .reloc should be rewritten.
 	.reloc .Ltmp0, R_AARCH64_PATCHINST, ds
+
+	.prefalign 2
+	.prefalign 4, .Lfunc_end, nop
+	.type prefalign_func2, @function
+prefalign_func2:
+	ret
+.Lfunc_end:
+	.size prefalign_func2, .Lfunc_end-prefalign_func2
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
index 36b7aef..f464225 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
@@ -93,6 +93,16 @@
 	.equ	.Lfoo2_local_target, foo
 	.equiv foo3, foo
 	.equiv	.Lfoo3_local_target, foo
+
+	.prefalign 2
+	.prefalign 4, .Lfunc_end, nop
+	.type prefalign_func, @function
+.Lprefalign_func_local_target:
+prefalign_func:
+	ret
+.Lfunc_end:
+
+	.size prefalign_func, .Lfunc_end-prefalign_func
 	# References to local labels are rewritten in subsequent files.
 .Llocal_label_BCM_1:
 
@@ -164,6 +174,17 @@
 
 # The first operand (the "place") of a .reloc should be rewritten.
 .reloc .Ltmp0_BCM_1, R_AARCH64_PATCHINST, ds
+
+	.prefalign 2
+	.prefalign	4, .Lfunc_end_BCM_1, nop
+	.type prefalign_func2, @function
+.Lprefalign_func2_local_target:
+prefalign_func2:
+	ret
+.Lfunc_end_BCM_1:
+
+# WAS .size prefalign_func2, .Lfunc_end-prefalign_func2
+	.size	prefalign_func2, .Lfunc_end_BCM_1-prefalign_func2
 .text
 .loc 1 2 0
 BORINGSSL_bcm_text_end: