Add local targets to .set directives in delocate

Originally I thought the problem was that weak symbols need renaming,
but actually delocate is fine with those. The local_target business
(somewhat accidentally) routes around this problem.

The problem is that GCC emits C1 and C2 constructors for unique_ptr as
aliases of each other using .set foo, bar and we don't recognize that
pattern as defining a symbol.

The linker script version of this pipeline will need to do it with
renaming instead, but we'll get to that later. Renaming symbols is
actually quite annoying in delocate.

Fixed: 397980180
Change-Id: I378c759c07a41af1155acf3f41889a0bd52b002f
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/76967
Reviewed-by: Adam Langley <agl@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/util/fipstools/delocate/delocate.go b/util/fipstools/delocate/delocate.go
index e4b6111..2ea8f38 100644
--- a/util/fipstools/delocate/delocate.go
+++ b/util/fipstools/delocate/delocate.go
@@ -21,6 +21,7 @@
 	"errors"
 	"flag"
 	"fmt"
+	"io"
 	"os"
 	"os/exec"
 	"path/filepath"
@@ -48,6 +49,7 @@
 }
 
 type stringWriter interface {
+	io.Writer
 	WriteString(string) (int, error)
 }
 
@@ -145,6 +147,8 @@
 			statement, err = d.processDirective(statement, node.up)
 		case ruleLabelContainingDirective:
 			statement, err = d.processLabelContainingDirective(statement, node.up)
+		case ruleSymbolDefiningDirective:
+			statement, err = d.processSymbolDefiningDirective(statement, node.up)
 		case ruleLabel:
 			statement, err = d.processLabel(statement, node.up)
 		case ruleInstruction:
@@ -343,6 +347,45 @@
 	return statement, nil
 }
 
+func (d *delocation) processSymbolDefiningDirective(statement, directive *node32) (*node32, error) {
+	changed := false
+	assertNodeType(directive, ruleSymbolDefiningDirectiveName)
+	name := d.contents(directive)
+
+	node := directive.next
+	assertNodeType(node, ruleWS)
+
+	node = node.next
+	symbol := d.contents(node)
+	isLocal := node.pegRule == ruleLocalSymbol
+	if isLocal {
+		symbol = d.mapLocalSymbol(symbol)
+		changed = true
+	} else {
+		assertNodeType(node, ruleSymbolName)
+	}
+
+	node = skipWS(node.next)
+	assertNodeType(node, ruleSymbolArg)
+	assertNodeType(node.up, ruleSymbolExpr)
+	var b strings.Builder
+	changed = d.processSymbolExpr(node.up, &b) || changed
+	arg := b.String()
+
+	if !changed {
+		d.writeNode(statement)
+	} else {
+		d.writeCommentedNode(statement)
+		fmt.Fprintf(d.output, "\t%s\t%s, %s\n", name, symbol, arg)
+	}
+
+	if !isLocal {
+		fmt.Fprintf(d.output, "\t%s\t%s, %s\n", name, localTargetName(symbol), arg)
+	}
+
+	return statement, nil
+}
+
 func (d *delocation) processLabel(statement, label *node32) (*node32, error) {
 	symbol := d.contents(label)
 
@@ -1273,6 +1316,13 @@
 				return nil, err
 			}
 
+		case ruleSymbolDefiningDirective:
+			var err error
+			statement, err = d.processSymbolDefiningDirective(statement, node.up)
+			if err != nil {
+				return nil, err
+			}
+
 		default:
 			return nil, fmt.Errorf("unknown BSS statement type %q in %q", rul3s[node.pegRule], d.contents(statement))
 		}
@@ -1324,6 +1374,18 @@
 			symbols[symbol] = struct{}{}
 		}, ruleStatement, ruleLabel, ruleSymbolName)
 
+		// Some directives also define symbols.
+		forEachPath(input.ast.up, func(node *node32) {
+			node = skipWS(node.next)
+			if node.pegRule == ruleLocalSymbol {
+				return
+			}
+			assertNodeType(node, ruleSymbolName)
+			symbol := input.contents[node.begin:node.end]
+			// Allow duplicates. A symbol may be set multiple times with .set.
+			symbols[symbol] = struct{}{}
+		}, ruleStatement, ruleSymbolDefiningDirective, ruleSymbolDefiningDirectiveName)
+
 		forEachPath(input.ast.up, func(node *node32) {
 			assertNodeType(node, ruleLocationDirective)
 			directive := input.contents[node.begin:node.end]
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 8fac2d6..2112a33 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -30,6 +30,7 @@
 AsmFile <- Statement* !.
 Statement <- WS? (Label / ((GlobalDirective /
                             LocationDirective /
+                            SymbolDefiningDirective /
                             LabelContainingDirective /
                             Instruction /
                             Directive /
@@ -44,8 +45,10 @@
 Arg <- QuotedArg / [[0-9a-z%+\-*_@.$]]*
 QuotedArg <- '"' QuotedText '"'
 QuotedText <- (EscapedChar / [^"])*
+SymbolDefiningDirective <- SymbolDefiningDirectiveName WS (LocalSymbol / SymbolName) WS? ',' WS? SymbolArg
+SymbolDefiningDirectiveName <- ".equiv" / ".equ" / ".set"
 LabelContainingDirective <- LabelContainingDirectiveName WS SymbolArgs
-LabelContainingDirectiveName <- ".xword" / ".word" / ".hword" / ".long" / ".set" / ".byte" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
+LabelContainingDirectiveName <- ".xword" / ".word" / ".hword" / ".long" / ".byte" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
 SymbolArgs <- SymbolArg ((WS? ',' WS?) SymbolArg)*
 
 SymbolArg <- SymbolExpr
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index 0f8ac01..b8b3fc9 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -1,6 +1,6 @@
 package main
 
-// Code generated by peg delocate.peg DO NOT EDIT.
+// Code generated by /usr/local/google/home/davidben/go/bin/peg delocate.peg DO NOT EDIT.
 
 import (
 	"fmt"
@@ -30,6 +30,8 @@
 	ruleArg
 	ruleQuotedArg
 	ruleQuotedText
+	ruleSymbolDefiningDirective
+	ruleSymbolDefiningDirectiveName
 	ruleLabelContainingDirective
 	ruleLabelContainingDirectiveName
 	ruleSymbolArgs
@@ -95,6 +97,8 @@
 	"Arg",
 	"QuotedArg",
 	"QuotedText",
+	"SymbolDefiningDirective",
+	"SymbolDefiningDirectiveName",
 	"LabelContainingDirective",
 	"LabelContainingDirectiveName",
 	"SymbolArgs",
@@ -258,7 +262,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [62]func() bool
+	rules  [64]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -364,7 +368,6 @@
 		return nil
 	}
 }
-
 func (p *Asm) Init(options ...func(*Asm) error) error {
 	var (
 		max                  token32
@@ -470,7 +473,7 @@
 			position, tokenIndex = position0, tokenIndex0
 			return false
 		},
-		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
+		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / SymbolDefiningDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
 		func() bool {
 			position5, tokenIndex5 := position, tokenIndex
 			{
@@ -507,67 +510,73 @@
 						goto l11
 					l13:
 						position, tokenIndex = position11, tokenIndex11
-						if !_rules[ruleLabelContainingDirective]() {
+						if !_rules[ruleSymbolDefiningDirective]() {
 							goto l14
 						}
 						goto l11
 					l14:
 						position, tokenIndex = position11, tokenIndex11
-						if !_rules[ruleInstruction]() {
+						if !_rules[ruleLabelContainingDirective]() {
 							goto l15
 						}
 						goto l11
 					l15:
 						position, tokenIndex = position11, tokenIndex11
-						if !_rules[ruleDirective]() {
+						if !_rules[ruleInstruction]() {
 							goto l16
 						}
 						goto l11
 					l16:
 						position, tokenIndex = position11, tokenIndex11
-						if !_rules[ruleComment]() {
+						if !_rules[ruleDirective]() {
 							goto l17
 						}
 						goto l11
 					l17:
 						position, tokenIndex = position11, tokenIndex11
+						if !_rules[ruleComment]() {
+							goto l18
+						}
+						goto l11
+					l18:
+						position, tokenIndex = position11, tokenIndex11
 					}
 				l11:
 					{
-						position18, tokenIndex18 := position, tokenIndex
+						position19, tokenIndex19 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l18
+							goto l19
 						}
-						goto l19
-					l18:
-						position, tokenIndex = position18, tokenIndex18
+						goto l20
+					l19:
+						position, tokenIndex = position19, tokenIndex19
 					}
-				l19:
+				l20:
 					{
-						position20, tokenIndex20 := position, tokenIndex
+						position21, tokenIndex21 := position, tokenIndex
 						{
-							position22, tokenIndex22 := position, tokenIndex
+							position23, tokenIndex23 := position, tokenIndex
 							if !_rules[ruleComment]() {
-								goto l22
+								goto l23
 							}
-							goto l23
-						l22:
-							position, tokenIndex = position22, tokenIndex22
+							goto l24
+						l23:
+							position, tokenIndex = position23, tokenIndex23
 						}
-					l23:
+					l24:
 						if buffer[position] != rune('\n') {
-							goto l21
+							goto l22
 						}
 						position++
-						goto l20
-					l21:
-						position, tokenIndex = position20, tokenIndex20
+						goto l21
+					l22:
+						position, tokenIndex = position21, tokenIndex21
 						if buffer[position] != rune(';') {
 							goto l5
 						}
 						position++
 					}
-				l20:
+				l21:
 				}
 			l9:
 				add(ruleStatement, position6)
@@ -579,1241 +588,1230 @@
 		},
 		/* 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 {
-			position24, tokenIndex24 := position, tokenIndex
+			position25, tokenIndex25 := position, tokenIndex
 			{
-				position25 := position
+				position26 := position
 				{
-					position26, tokenIndex26 := position, tokenIndex
+					position27, tokenIndex27 := position, tokenIndex
 					if buffer[position] != rune('.') {
-						goto l27
-					}
-					position++
-					{
-						position28, tokenIndex28 := position, tokenIndex
-						if buffer[position] != rune('g') {
-							goto l29
-						}
-						position++
 						goto l28
-					l29:
-						position, tokenIndex = position28, tokenIndex28
-						if buffer[position] != rune('G') {
-							goto l27
-						}
-						position++
-					}
-				l28:
-					{
-						position30, tokenIndex30 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l31
-						}
-						position++
-						goto l30
-					l31:
-						position, tokenIndex = position30, tokenIndex30
-						if buffer[position] != rune('L') {
-							goto l27
-						}
-						position++
-					}
-				l30:
-					{
-						position32, tokenIndex32 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l33
-						}
-						position++
-						goto l32
-					l33:
-						position, tokenIndex = position32, tokenIndex32
-						if buffer[position] != rune('O') {
-							goto l27
-						}
-						position++
-					}
-				l32:
-					{
-						position34, tokenIndex34 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l35
-						}
-						position++
-						goto l34
-					l35:
-						position, tokenIndex = position34, tokenIndex34
-						if buffer[position] != rune('B') {
-							goto l27
-						}
-						position++
-					}
-				l34:
-					{
-						position36, tokenIndex36 := position, tokenIndex
-						if buffer[position] != rune('a') {
-							goto l37
-						}
-						position++
-						goto l36
-					l37:
-						position, tokenIndex = position36, tokenIndex36
-						if buffer[position] != rune('A') {
-							goto l27
-						}
-						position++
-					}
-				l36:
-					{
-						position38, tokenIndex38 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l39
-						}
-						position++
-						goto l38
-					l39:
-						position, tokenIndex = position38, tokenIndex38
-						if buffer[position] != rune('L') {
-							goto l27
-						}
-						position++
-					}
-				l38:
-					goto l26
-				l27:
-					position, tokenIndex = position26, tokenIndex26
-					if buffer[position] != rune('.') {
-						goto l24
 					}
 					position++
 					{
-						position40, tokenIndex40 := position, tokenIndex
+						position29, tokenIndex29 := position, tokenIndex
 						if buffer[position] != rune('g') {
-							goto l41
+							goto l30
 						}
 						position++
-						goto l40
-					l41:
-						position, tokenIndex = position40, tokenIndex40
+						goto l29
+					l30:
+						position, tokenIndex = position29, tokenIndex29
 						if buffer[position] != rune('G') {
-							goto l24
+							goto l28
 						}
 						position++
 					}
-				l40:
+				l29:
 					{
-						position42, tokenIndex42 := position, tokenIndex
+						position31, tokenIndex31 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l43
+							goto l32
 						}
 						position++
-						goto l42
-					l43:
-						position, tokenIndex = position42, tokenIndex42
+						goto l31
+					l32:
+						position, tokenIndex = position31, tokenIndex31
 						if buffer[position] != rune('L') {
-							goto l24
+							goto l28
 						}
 						position++
 					}
-				l42:
+				l31:
 					{
-						position44, tokenIndex44 := position, tokenIndex
+						position33, tokenIndex33 := position, tokenIndex
 						if buffer[position] != rune('o') {
-							goto l45
+							goto l34
 						}
 						position++
-						goto l44
-					l45:
-						position, tokenIndex = position44, tokenIndex44
+						goto l33
+					l34:
+						position, tokenIndex = position33, tokenIndex33
 						if buffer[position] != rune('O') {
-							goto l24
+							goto l28
 						}
 						position++
 					}
-				l44:
+				l33:
 					{
-						position46, tokenIndex46 := position, tokenIndex
+						position35, tokenIndex35 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l47
+							goto l36
 						}
 						position++
-						goto l46
-					l47:
-						position, tokenIndex = position46, tokenIndex46
+						goto l35
+					l36:
+						position, tokenIndex = position35, tokenIndex35
 						if buffer[position] != rune('B') {
-							goto l24
+							goto l28
 						}
 						position++
 					}
-				l46:
+				l35:
 					{
-						position48, tokenIndex48 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l49
+						position37, tokenIndex37 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l38
 						}
 						position++
-						goto l48
-					l49:
-						position, tokenIndex = position48, tokenIndex48
-						if buffer[position] != rune('L') {
-							goto l24
+						goto l37
+					l38:
+						position, tokenIndex = position37, tokenIndex37
+						if buffer[position] != rune('A') {
+							goto l28
 						}
 						position++
 					}
-				l48:
+				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
+						if buffer[position] != rune('g') {
+							goto l42
+						}
+						position++
+						goto l41
+					l42:
+						position, tokenIndex = position41, tokenIndex41
+						if buffer[position] != rune('G') {
+							goto l25
+						}
+						position++
+					}
+				l41:
+					{
+						position43, tokenIndex43 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l44
+						}
+						position++
+						goto l43
+					l44:
+						position, tokenIndex = position43, tokenIndex43
+						if buffer[position] != rune('L') {
+							goto l25
+						}
+						position++
+					}
+				l43:
+					{
+						position45, tokenIndex45 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l46
+						}
+						position++
+						goto l45
+					l46:
+						position, tokenIndex = position45, tokenIndex45
+						if buffer[position] != rune('O') {
+							goto l25
+						}
+						position++
+					}
+				l45:
+					{
+						position47, tokenIndex47 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l48
+						}
+						position++
+						goto l47
+					l48:
+						position, tokenIndex = position47, tokenIndex47
+						if buffer[position] != rune('B') {
+							goto l25
+						}
+						position++
+					}
+				l47:
+					{
+						position49, tokenIndex49 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l50
+						}
+						position++
+						goto l49
+					l50:
+						position, tokenIndex = position49, tokenIndex49
+						if buffer[position] != rune('L') {
+							goto l25
+						}
+						position++
+					}
+				l49:
 				}
-			l26:
+			l27:
 				if !_rules[ruleWS]() {
-					goto l24
+					goto l25
 				}
 				if !_rules[ruleSymbolName]() {
-					goto l24
+					goto l25
 				}
-				add(ruleGlobalDirective, position25)
+				add(ruleGlobalDirective, position26)
 			}
 			return true
-		l24:
-			position, tokenIndex = position24, tokenIndex24
+		l25:
+			position, tokenIndex = position25, tokenIndex25
 			return false
 		},
 		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
 		func() bool {
-			position50, tokenIndex50 := position, tokenIndex
+			position51, tokenIndex51 := position, tokenIndex
 			{
-				position51 := position
+				position52 := position
 				if buffer[position] != rune('.') {
-					goto l50
+					goto l51
 				}
 				position++
 				if !_rules[ruleDirectiveName]() {
-					goto l50
+					goto l51
 				}
 				{
-					position52, tokenIndex52 := position, tokenIndex
+					position53, tokenIndex53 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l52
+						goto l53
 					}
 					if !_rules[ruleArgs]() {
-						goto l52
+						goto l53
 					}
-					goto l53
-				l52:
-					position, tokenIndex = position52, tokenIndex52
+					goto l54
+				l53:
+					position, tokenIndex = position53, tokenIndex53
 				}
-			l53:
-				add(ruleDirective, position51)
+			l54:
+				add(ruleDirective, position52)
 			}
 			return true
-		l50:
-			position, tokenIndex = position50, tokenIndex50
+		l51:
+			position, tokenIndex = position51, tokenIndex51
 			return false
 		},
 		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
 		func() bool {
-			position54, tokenIndex54 := position, tokenIndex
+			position55, tokenIndex55 := position, tokenIndex
 			{
-				position55 := position
+				position56 := position
 				{
-					position58, tokenIndex58 := position, tokenIndex
+					position59, tokenIndex59 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l59
-					}
-					position++
-					goto l58
-				l59:
-					position, tokenIndex = position58, tokenIndex58
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l60
 					}
 					position++
-					goto l58
+					goto l59
 				l60:
-					position, tokenIndex = position58, tokenIndex58
+					position, tokenIndex = position59, tokenIndex59
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l61
+					}
+					position++
+					goto l59
+				l61:
+					position, tokenIndex = position59, tokenIndex59
 					{
-						position62, tokenIndex62 := position, tokenIndex
+						position63, tokenIndex63 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l63
+							goto l64
 						}
 						position++
-						goto l62
-					l63:
-						position, tokenIndex = position62, tokenIndex62
+						goto l63
+					l64:
+						position, tokenIndex = position63, tokenIndex63
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l61
+							goto l62
 						}
 						position++
 					}
+				l63:
+					goto l59
 				l62:
-					goto l58
-				l61:
-					position, tokenIndex = position58, tokenIndex58
+					position, tokenIndex = position59, tokenIndex59
 					if buffer[position] != rune('_') {
-						goto l54
+						goto l55
 					}
 					position++
 				}
-			l58:
-			l56:
+			l59:
+			l57:
 				{
-					position57, tokenIndex57 := position, tokenIndex
+					position58, tokenIndex58 := position, tokenIndex
 					{
-						position64, tokenIndex64 := position, tokenIndex
+						position65, tokenIndex65 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l65
-						}
-						position++
-						goto l64
-					l65:
-						position, tokenIndex = position64, tokenIndex64
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
 							goto l66
 						}
 						position++
-						goto l64
+						goto l65
 					l66:
-						position, tokenIndex = position64, tokenIndex64
+						position, tokenIndex = position65, tokenIndex65
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l67
+						}
+						position++
+						goto l65
+					l67:
+						position, tokenIndex = position65, tokenIndex65
 						{
-							position68, tokenIndex68 := position, tokenIndex
+							position69, tokenIndex69 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l69
+								goto l70
 							}
 							position++
-							goto l68
-						l69:
-							position, tokenIndex = position68, tokenIndex68
+							goto l69
+						l70:
+							position, tokenIndex = position69, tokenIndex69
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l67
+								goto l68
 							}
 							position++
 						}
+					l69:
+						goto l65
 					l68:
-						goto l64
-					l67:
-						position, tokenIndex = position64, tokenIndex64
+						position, tokenIndex = position65, tokenIndex65
 						if buffer[position] != rune('_') {
-							goto l57
+							goto l58
 						}
 						position++
 					}
-				l64:
-					goto l56
-				l57:
-					position, tokenIndex = position57, tokenIndex57
+				l65:
+					goto l57
+				l58:
+					position, tokenIndex = position58, tokenIndex58
 				}
-				add(ruleDirectiveName, position55)
+				add(ruleDirectiveName, position56)
 			}
 			return true
-		l54:
-			position, tokenIndex = position54, tokenIndex54
+		l55:
+			position, tokenIndex = position55, tokenIndex55
 			return false
 		},
 		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
 		func() bool {
-			position70, tokenIndex70 := position, tokenIndex
+			position71, tokenIndex71 := position, tokenIndex
 			{
-				position71 := position
+				position72 := position
 				{
-					position72, tokenIndex72 := position, tokenIndex
+					position73, tokenIndex73 := position, tokenIndex
 					if !_rules[ruleFileDirective]() {
-						goto l73
+						goto l74
 					}
-					goto l72
-				l73:
-					position, tokenIndex = position72, tokenIndex72
+					goto l73
+				l74:
+					position, tokenIndex = position73, tokenIndex73
 					if !_rules[ruleLocDirective]() {
-						goto l70
+						goto l71
 					}
 				}
-			l72:
-				add(ruleLocationDirective, position71)
+			l73:
+				add(ruleLocationDirective, position72)
 			}
 			return true
-		l70:
-			position, tokenIndex = position70, tokenIndex70
+		l71:
+			position, tokenIndex = position71, tokenIndex71
 			return false
 		},
 		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
 		func() bool {
-			position74, tokenIndex74 := position, tokenIndex
+			position75, tokenIndex75 := position, tokenIndex
 			{
-				position75 := position
+				position76 := position
 				if buffer[position] != rune('.') {
-					goto l74
+					goto l75
 				}
 				position++
 				{
-					position76, tokenIndex76 := position, tokenIndex
+					position77, tokenIndex77 := position, tokenIndex
 					if buffer[position] != rune('f') {
-						goto l77
+						goto l78
 					}
 					position++
-					goto l76
-				l77:
-					position, tokenIndex = position76, tokenIndex76
+					goto l77
+				l78:
+					position, tokenIndex = position77, tokenIndex77
 					if buffer[position] != rune('F') {
-						goto l74
+						goto l75
 					}
 					position++
 				}
-			l76:
+			l77:
 				{
-					position78, tokenIndex78 := position, tokenIndex
+					position79, tokenIndex79 := position, tokenIndex
 					if buffer[position] != rune('i') {
-						goto l79
+						goto l80
 					}
 					position++
-					goto l78
-				l79:
-					position, tokenIndex = position78, tokenIndex78
+					goto l79
+				l80:
+					position, tokenIndex = position79, tokenIndex79
 					if buffer[position] != rune('I') {
-						goto l74
+						goto l75
 					}
 					position++
 				}
-			l78:
+			l79:
 				{
-					position80, tokenIndex80 := position, tokenIndex
+					position81, tokenIndex81 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l81
+						goto l82
 					}
 					position++
-					goto l80
-				l81:
-					position, tokenIndex = position80, tokenIndex80
+					goto l81
+				l82:
+					position, tokenIndex = position81, tokenIndex81
 					if buffer[position] != rune('L') {
-						goto l74
+						goto l75
 					}
 					position++
 				}
-			l80:
+			l81:
 				{
-					position82, tokenIndex82 := position, tokenIndex
+					position83, tokenIndex83 := position, tokenIndex
 					if buffer[position] != rune('e') {
-						goto l83
+						goto l84
 					}
 					position++
-					goto l82
-				l83:
-					position, tokenIndex = position82, tokenIndex82
+					goto l83
+				l84:
+					position, tokenIndex = position83, tokenIndex83
 					if buffer[position] != rune('E') {
-						goto l74
+						goto l75
 					}
 					position++
 				}
-			l82:
+			l83:
 				if !_rules[ruleWS]() {
-					goto l74
+					goto l75
 				}
 				{
+					position87, tokenIndex87 := position, tokenIndex
+					{
+						position88, tokenIndex88 := position, tokenIndex
+						if buffer[position] != rune('#') {
+							goto l89
+						}
+						position++
+						goto l88
+					l89:
+						position, tokenIndex = position88, tokenIndex88
+						if buffer[position] != rune('\n') {
+							goto l87
+						}
+						position++
+					}
+				l88:
+					goto l75
+				l87:
+					position, tokenIndex = position87, tokenIndex87
+				}
+				if !matchDot() {
+					goto l75
+				}
+			l85:
+				{
 					position86, tokenIndex86 := position, tokenIndex
 					{
-						position87, tokenIndex87 := position, tokenIndex
-						if buffer[position] != rune('#') {
-							goto l88
+						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++
 						}
-						position++
-						goto l87
-					l88:
-						position, tokenIndex = position87, tokenIndex87
-						if buffer[position] != rune('\n') {
-							goto l86
-						}
-						position++
+					l91:
+						goto l86
+					l90:
+						position, tokenIndex = position90, tokenIndex90
 					}
-				l87:
-					goto l74
+					if !matchDot() {
+						goto l86
+					}
+					goto l85
 				l86:
 					position, tokenIndex = position86, tokenIndex86
 				}
-				if !matchDot() {
-					goto l74
-				}
-			l84:
-				{
-					position85, tokenIndex85 := position, tokenIndex
-					{
-						position89, tokenIndex89 := position, tokenIndex
-						{
-							position90, tokenIndex90 := position, tokenIndex
-							if buffer[position] != rune('#') {
-								goto l91
-							}
-							position++
-							goto l90
-						l91:
-							position, tokenIndex = position90, tokenIndex90
-							if buffer[position] != rune('\n') {
-								goto l89
-							}
-							position++
-						}
-					l90:
-						goto l85
-					l89:
-						position, tokenIndex = position89, tokenIndex89
-					}
-					if !matchDot() {
-						goto l85
-					}
-					goto l84
-				l85:
-					position, tokenIndex = position85, tokenIndex85
-				}
-				add(ruleFileDirective, position75)
+				add(ruleFileDirective, position76)
 			}
 			return true
-		l74:
-			position, tokenIndex = position74, tokenIndex74
+		l75:
+			position, tokenIndex = position75, tokenIndex75
 			return false
 		},
 		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
 		func() bool {
-			position92, tokenIndex92 := position, tokenIndex
+			position93, tokenIndex93 := position, tokenIndex
 			{
-				position93 := position
+				position94 := position
 				if buffer[position] != rune('.') {
-					goto l92
+					goto l93
 				}
 				position++
 				{
-					position94, tokenIndex94 := position, tokenIndex
+					position95, tokenIndex95 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l95
+						goto l96
 					}
 					position++
-					goto l94
-				l95:
-					position, tokenIndex = position94, tokenIndex94
+					goto l95
+				l96:
+					position, tokenIndex = position95, tokenIndex95
 					if buffer[position] != rune('L') {
-						goto l92
+						goto l93
 					}
 					position++
 				}
-			l94:
+			l95:
 				{
-					position96, tokenIndex96 := position, tokenIndex
+					position97, tokenIndex97 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l97
+						goto l98
 					}
 					position++
-					goto l96
-				l97:
-					position, tokenIndex = position96, tokenIndex96
+					goto l97
+				l98:
+					position, tokenIndex = position97, tokenIndex97
 					if buffer[position] != rune('O') {
-						goto l92
+						goto l93
 					}
 					position++
 				}
-			l96:
+			l97:
 				{
-					position98, tokenIndex98 := position, tokenIndex
+					position99, tokenIndex99 := position, tokenIndex
 					if buffer[position] != rune('c') {
-						goto l99
+						goto l100
 					}
 					position++
-					goto l98
-				l99:
-					position, tokenIndex = position98, tokenIndex98
+					goto l99
+				l100:
+					position, tokenIndex = position99, tokenIndex99
 					if buffer[position] != rune('C') {
-						goto l92
+						goto l93
 					}
 					position++
 				}
-			l98:
+			l99:
 				if !_rules[ruleWS]() {
-					goto l92
+					goto l93
 				}
 				{
-					position102, tokenIndex102 := position, tokenIndex
+					position103, tokenIndex103 := position, tokenIndex
 					{
-						position103, tokenIndex103 := position, tokenIndex
+						position104, tokenIndex104 := position, tokenIndex
 						if buffer[position] != rune('#') {
-							goto l104
-						}
-						position++
-						goto l103
-					l104:
-						position, tokenIndex = position103, tokenIndex103
-						if buffer[position] != rune('/') {
 							goto l105
 						}
 						position++
-						goto l103
+						goto l104
 					l105:
-						position, tokenIndex = position103, tokenIndex103
+						position, tokenIndex = position104, tokenIndex104
+						if buffer[position] != rune('/') {
+							goto l106
+						}
+						position++
+						goto l104
+					l106:
+						position, tokenIndex = position104, tokenIndex104
 						if buffer[position] != rune('\n') {
-							goto l102
+							goto l103
 						}
 						position++
 					}
+				l104:
+					goto l93
 				l103:
-					goto l92
-				l102:
-					position, tokenIndex = position102, tokenIndex102
+					position, tokenIndex = position103, tokenIndex103
 				}
 				if !matchDot() {
-					goto l92
+					goto l93
 				}
-			l100:
+			l101:
 				{
-					position101, tokenIndex101 := position, tokenIndex
+					position102, tokenIndex102 := position, tokenIndex
 					{
-						position106, tokenIndex106 := position, tokenIndex
+						position107, tokenIndex107 := position, tokenIndex
 						{
-							position107, tokenIndex107 := position, tokenIndex
+							position108, tokenIndex108 := position, tokenIndex
 							if buffer[position] != rune('#') {
-								goto l108
-							}
-							position++
-							goto l107
-						l108:
-							position, tokenIndex = position107, tokenIndex107
-							if buffer[position] != rune('/') {
 								goto l109
 							}
 							position++
-							goto l107
+							goto l108
 						l109:
-							position, tokenIndex = position107, tokenIndex107
+							position, tokenIndex = position108, tokenIndex108
+							if buffer[position] != rune('/') {
+								goto l110
+							}
+							position++
+							goto l108
+						l110:
+							position, tokenIndex = position108, tokenIndex108
 							if buffer[position] != rune('\n') {
-								goto l106
+								goto l107
 							}
 							position++
 						}
+					l108:
+						goto l102
 					l107:
-						goto l101
-					l106:
-						position, tokenIndex = position106, tokenIndex106
+						position, tokenIndex = position107, tokenIndex107
 					}
 					if !matchDot() {
-						goto l101
+						goto l102
 					}
-					goto l100
-				l101:
-					position, tokenIndex = position101, tokenIndex101
+					goto l101
+				l102:
+					position, tokenIndex = position102, tokenIndex102
 				}
-				add(ruleLocDirective, position93)
+				add(ruleLocDirective, position94)
 			}
 			return true
-		l92:
-			position, tokenIndex = position92, tokenIndex92
+		l93:
+			position, tokenIndex = position93, tokenIndex93
 			return false
 		},
 		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
 		func() bool {
-			position110, tokenIndex110 := position, tokenIndex
+			position111, tokenIndex111 := position, tokenIndex
 			{
-				position111 := position
+				position112 := position
 				if !_rules[ruleArg]() {
-					goto l110
+					goto l111
 				}
-			l112:
+			l113:
 				{
-					position113, tokenIndex113 := position, tokenIndex
+					position114, tokenIndex114 := position, tokenIndex
 					{
-						position114, tokenIndex114 := position, tokenIndex
+						position115, tokenIndex115 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l114
+							goto l115
 						}
-						goto l115
-					l114:
-						position, tokenIndex = position114, tokenIndex114
+						goto l116
+					l115:
+						position, tokenIndex = position115, tokenIndex115
 					}
-				l115:
+				l116:
 					if buffer[position] != rune(',') {
-						goto l113
+						goto l114
 					}
 					position++
 					{
-						position116, tokenIndex116 := position, tokenIndex
+						position117, tokenIndex117 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l116
+							goto l117
 						}
-						goto l117
-					l116:
-						position, tokenIndex = position116, tokenIndex116
+						goto l118
+					l117:
+						position, tokenIndex = position117, tokenIndex117
 					}
-				l117:
+				l118:
 					if !_rules[ruleArg]() {
-						goto l113
+						goto l114
 					}
-					goto l112
-				l113:
-					position, tokenIndex = position113, tokenIndex113
+					goto l113
+				l114:
+					position, tokenIndex = position114, tokenIndex114
 				}
-				add(ruleArgs, position111)
+				add(ruleArgs, position112)
 			}
 			return true
-		l110:
-			position, tokenIndex = position110, tokenIndex110
+		l111:
+			position, tokenIndex = position111, tokenIndex111
 			return false
 		},
 		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.' / '$')*)> */
 		func() bool {
 			{
-				position119 := position
+				position120 := position
 				{
-					position120, tokenIndex120 := position, tokenIndex
+					position121, tokenIndex121 := position, tokenIndex
 					if !_rules[ruleQuotedArg]() {
-						goto l121
+						goto l122
 					}
-					goto l120
-				l121:
-					position, tokenIndex = position120, tokenIndex120
+					goto l121
 				l122:
+					position, tokenIndex = position121, tokenIndex121
+				l123:
 					{
-						position123, tokenIndex123 := position, tokenIndex
+						position124, tokenIndex124 := position, tokenIndex
 						{
-							position124, tokenIndex124 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l125
-							}
-							position++
-							goto l124
-						l125:
-							position, tokenIndex = position124, tokenIndex124
+							position125, tokenIndex125 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l126
 							}
 							position++
-							goto l124
+							goto l125
 						l126:
-							position, tokenIndex = position124, tokenIndex124
-							{
-								position128, tokenIndex128 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('z') {
-									goto l129
-								}
-								position++
-								goto l128
-							l129:
-								position, tokenIndex = position128, tokenIndex128
-								if c := buffer[position]; c < rune('A') || c > rune('Z') {
-									goto l127
-								}
-								position++
-							}
-						l128:
-							goto l124
-						l127:
-							position, tokenIndex = position124, tokenIndex124
-							if buffer[position] != rune('%') {
-								goto l130
+							position, tokenIndex = position125, tokenIndex125
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l127
 							}
 							position++
-							goto l124
-						l130:
-							position, tokenIndex = position124, tokenIndex124
-							if buffer[position] != rune('+') {
+							goto l125
+						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++
-							goto l124
+							goto l125
 						l131:
-							position, tokenIndex = position124, tokenIndex124
-							if buffer[position] != rune('-') {
+							position, tokenIndex = position125, tokenIndex125
+							if buffer[position] != rune('+') {
 								goto l132
 							}
 							position++
-							goto l124
+							goto l125
 						l132:
-							position, tokenIndex = position124, tokenIndex124
-							if buffer[position] != rune('*') {
+							position, tokenIndex = position125, tokenIndex125
+							if buffer[position] != rune('-') {
 								goto l133
 							}
 							position++
-							goto l124
+							goto l125
 						l133:
-							position, tokenIndex = position124, tokenIndex124
-							if buffer[position] != rune('_') {
+							position, tokenIndex = position125, tokenIndex125
+							if buffer[position] != rune('*') {
 								goto l134
 							}
 							position++
-							goto l124
+							goto l125
 						l134:
-							position, tokenIndex = position124, tokenIndex124
-							if buffer[position] != rune('@') {
+							position, tokenIndex = position125, tokenIndex125
+							if buffer[position] != rune('_') {
 								goto l135
 							}
 							position++
-							goto l124
+							goto l125
 						l135:
-							position, tokenIndex = position124, tokenIndex124
-							if buffer[position] != rune('.') {
+							position, tokenIndex = position125, tokenIndex125
+							if buffer[position] != rune('@') {
 								goto l136
 							}
 							position++
-							goto l124
+							goto l125
 						l136:
-							position, tokenIndex = position124, tokenIndex124
+							position, tokenIndex = position125, tokenIndex125
+							if buffer[position] != rune('.') {
+								goto l137
+							}
+							position++
+							goto l125
+						l137:
+							position, tokenIndex = position125, tokenIndex125
 							if buffer[position] != rune('$') {
-								goto l123
+								goto l124
 							}
 							position++
 						}
+					l125:
+						goto l123
 					l124:
-						goto l122
-					l123:
-						position, tokenIndex = position123, tokenIndex123
+						position, tokenIndex = position124, tokenIndex124
 					}
 				}
-			l120:
-				add(ruleArg, position119)
+			l121:
+				add(ruleArg, position120)
 			}
 			return true
 		},
 		/* 10 QuotedArg <- <('"' QuotedText '"')> */
 		func() bool {
-			position137, tokenIndex137 := position, tokenIndex
+			position138, tokenIndex138 := position, tokenIndex
 			{
-				position138 := position
+				position139 := position
 				if buffer[position] != rune('"') {
-					goto l137
+					goto l138
 				}
 				position++
 				if !_rules[ruleQuotedText]() {
-					goto l137
+					goto l138
 				}
 				if buffer[position] != rune('"') {
-					goto l137
+					goto l138
 				}
 				position++
-				add(ruleQuotedArg, position138)
+				add(ruleQuotedArg, position139)
 			}
 			return true
-		l137:
-			position, tokenIndex = position137, tokenIndex137
+		l138:
+			position, tokenIndex = position138, tokenIndex138
 			return false
 		},
 		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
 		func() bool {
 			{
-				position140 := position
-			l141:
+				position141 := position
+			l142:
 				{
-					position142, tokenIndex142 := position, tokenIndex
+					position143, tokenIndex143 := position, tokenIndex
 					{
-						position143, tokenIndex143 := position, tokenIndex
+						position144, tokenIndex144 := position, tokenIndex
 						if !_rules[ruleEscapedChar]() {
-							goto l144
+							goto l145
 						}
-						goto l143
-					l144:
-						position, tokenIndex = position143, tokenIndex143
+						goto l144
+					l145:
+						position, tokenIndex = position144, tokenIndex144
 						{
-							position145, tokenIndex145 := position, tokenIndex
+							position146, tokenIndex146 := position, tokenIndex
 							if buffer[position] != rune('"') {
-								goto l145
+								goto l146
 							}
 							position++
-							goto l142
-						l145:
-							position, tokenIndex = position145, tokenIndex145
+							goto l143
+						l146:
+							position, tokenIndex = position146, tokenIndex146
 						}
 						if !matchDot() {
-							goto l142
+							goto l143
 						}
 					}
+				l144:
+					goto l142
 				l143:
-					goto l141
-				l142:
-					position, tokenIndex = position142, tokenIndex142
+					position, tokenIndex = position143, tokenIndex143
 				}
-				add(ruleQuotedText, position140)
+				add(ruleQuotedText, position141)
 			}
 			return true
 		},
-		/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
+		/* 12 SymbolDefiningDirective <- <(SymbolDefiningDirectiveName WS (LocalSymbol / SymbolName) WS? ',' WS? SymbolArg)> */
 		func() bool {
-			position146, tokenIndex146 := position, tokenIndex
+			position147, tokenIndex147 := position, tokenIndex
 			{
-				position147 := position
-				if !_rules[ruleLabelContainingDirectiveName]() {
-					goto l146
+				position148 := position
+				if !_rules[ruleSymbolDefiningDirectiveName]() {
+					goto l147
 				}
 				if !_rules[ruleWS]() {
-					goto l146
+					goto l147
 				}
-				if !_rules[ruleSymbolArgs]() {
-					goto l146
-				}
-				add(ruleLabelContainingDirective, position147)
-			}
-			return true
-		l146:
-			position, tokenIndex = position146, tokenIndex146
-			return false
-		},
-		/* 13 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')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' ('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 {
-			position148, tokenIndex148 := position, tokenIndex
-			{
-				position149 := position
 				{
-					position150, tokenIndex150 := position, tokenIndex
-					if buffer[position] != rune('.') {
+					position149, tokenIndex149 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l150
+					}
+					goto l149
+				l150:
+					position, tokenIndex = position149, tokenIndex149
+					if !_rules[ruleSymbolName]() {
+						goto l147
+					}
+				}
+			l149:
+				{
+					position151, tokenIndex151 := position, tokenIndex
+					if !_rules[ruleWS]() {
 						goto l151
 					}
-					position++
-					{
-						position152, tokenIndex152 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l153
-						}
-						position++
-						goto l152
-					l153:
-						position, tokenIndex = position152, tokenIndex152
-						if buffer[position] != rune('X') {
-							goto l151
-						}
-						position++
-					}
-				l152:
-					{
-						position154, tokenIndex154 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l155
-						}
-						position++
-						goto l154
-					l155:
-						position, tokenIndex = position154, tokenIndex154
-						if buffer[position] != rune('W') {
-							goto l151
-						}
-						position++
-					}
-				l154:
-					{
-						position156, tokenIndex156 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l157
-						}
-						position++
-						goto l156
-					l157:
-						position, tokenIndex = position156, tokenIndex156
-						if buffer[position] != rune('O') {
-							goto l151
-						}
-						position++
-					}
-				l156:
-					{
-						position158, tokenIndex158 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l159
-						}
-						position++
-						goto l158
-					l159:
-						position, tokenIndex = position158, tokenIndex158
-						if buffer[position] != rune('R') {
-							goto l151
-						}
-						position++
-					}
-				l158:
-					{
-						position160, tokenIndex160 := position, tokenIndex
-						if buffer[position] != rune('d') {
-							goto l161
-						}
-						position++
-						goto l160
-					l161:
-						position, tokenIndex = position160, tokenIndex160
-						if buffer[position] != rune('D') {
-							goto l151
-						}
-						position++
-					}
-				l160:
-					goto l150
+					goto l152
 				l151:
-					position, tokenIndex = position150, tokenIndex150
+					position, tokenIndex = position151, tokenIndex151
+				}
+			l152:
+				if buffer[position] != rune(',') {
+					goto l147
+				}
+				position++
+				{
+					position153, tokenIndex153 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l153
+					}
+					goto l154
+				l153:
+					position, tokenIndex = position153, tokenIndex153
+				}
+			l154:
+				if !_rules[ruleSymbolArg]() {
+					goto l147
+				}
+				add(ruleSymbolDefiningDirective, position148)
+			}
+			return true
+		l147:
+			position, tokenIndex = position147, tokenIndex147
+			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 {
+			position155, tokenIndex155 := position, tokenIndex
+			{
+				position156 := position
+				{
+					position157, tokenIndex157 := position, tokenIndex
 					if buffer[position] != rune('.') {
-						goto l162
+						goto l158
 					}
 					position++
 					{
+						position159, tokenIndex159 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l160
+						}
+						position++
+						goto l159
+					l160:
+						position, tokenIndex = position159, tokenIndex159
+						if buffer[position] != rune('E') {
+							goto l158
+						}
+						position++
+					}
+				l159:
+					{
+						position161, tokenIndex161 := position, tokenIndex
+						if buffer[position] != rune('q') {
+							goto l162
+						}
+						position++
+						goto l161
+					l162:
+						position, tokenIndex = position161, tokenIndex161
+						if buffer[position] != rune('Q') {
+							goto l158
+						}
+						position++
+					}
+				l161:
+					{
 						position163, tokenIndex163 := position, tokenIndex
-						if buffer[position] != rune('w') {
+						if buffer[position] != rune('u') {
 							goto l164
 						}
 						position++
 						goto l163
 					l164:
 						position, tokenIndex = position163, tokenIndex163
-						if buffer[position] != rune('W') {
-							goto l162
+						if buffer[position] != rune('U') {
+							goto l158
 						}
 						position++
 					}
 				l163:
 					{
 						position165, tokenIndex165 := position, tokenIndex
-						if buffer[position] != rune('o') {
+						if buffer[position] != rune('i') {
 							goto l166
 						}
 						position++
 						goto l165
 					l166:
 						position, tokenIndex = position165, tokenIndex165
-						if buffer[position] != rune('O') {
-							goto l162
+						if buffer[position] != rune('I') {
+							goto l158
 						}
 						position++
 					}
 				l165:
 					{
 						position167, tokenIndex167 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						if buffer[position] != rune('v') {
 							goto l168
 						}
 						position++
 						goto l167
 					l168:
 						position, tokenIndex = position167, tokenIndex167
-						if buffer[position] != rune('R') {
-							goto l162
+						if buffer[position] != rune('V') {
+							goto l158
 						}
 						position++
 					}
 				l167:
-					{
-						position169, tokenIndex169 := position, tokenIndex
-						if buffer[position] != rune('d') {
-							goto l170
-						}
-						position++
-						goto l169
-					l170:
-						position, tokenIndex = position169, tokenIndex169
-						if buffer[position] != rune('D') {
-							goto l162
-						}
-						position++
-					}
-				l169:
-					goto l150
-				l162:
-					position, tokenIndex = position150, tokenIndex150
+					goto l157
+				l158:
+					position, tokenIndex = position157, tokenIndex157
 					if buffer[position] != rune('.') {
-						goto l171
+						goto l169
 					}
 					position++
 					{
+						position170, tokenIndex170 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l171
+						}
+						position++
+						goto l170
+					l171:
+						position, tokenIndex = position170, tokenIndex170
+						if buffer[position] != rune('E') {
+							goto l169
+						}
+						position++
+					}
+				l170:
+					{
 						position172, tokenIndex172 := position, tokenIndex
-						if buffer[position] != rune('h') {
+						if buffer[position] != rune('q') {
 							goto l173
 						}
 						position++
 						goto l172
 					l173:
 						position, tokenIndex = position172, tokenIndex172
-						if buffer[position] != rune('H') {
-							goto l171
+						if buffer[position] != rune('Q') {
+							goto l169
 						}
 						position++
 					}
 				l172:
 					{
 						position174, tokenIndex174 := position, tokenIndex
-						if buffer[position] != rune('w') {
+						if buffer[position] != rune('u') {
 							goto l175
 						}
 						position++
 						goto l174
 					l175:
 						position, tokenIndex = position174, tokenIndex174
-						if buffer[position] != rune('W') {
-							goto l171
+						if buffer[position] != rune('U') {
+							goto l169
 						}
 						position++
 					}
 				l174:
+					goto l157
+				l169:
+					position, tokenIndex = position157, tokenIndex157
+					if buffer[position] != rune('.') {
+						goto l155
+					}
+					position++
 					{
 						position176, tokenIndex176 := position, tokenIndex
-						if buffer[position] != rune('o') {
+						if buffer[position] != rune('s') {
 							goto l177
 						}
 						position++
 						goto l176
 					l177:
 						position, tokenIndex = position176, tokenIndex176
-						if buffer[position] != rune('O') {
-							goto l171
+						if buffer[position] != rune('S') {
+							goto l155
 						}
 						position++
 					}
 				l176:
 					{
 						position178, tokenIndex178 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						if buffer[position] != rune('e') {
 							goto l179
 						}
 						position++
 						goto l178
 					l179:
 						position, tokenIndex = position178, tokenIndex178
-						if buffer[position] != rune('R') {
-							goto l171
+						if buffer[position] != rune('E') {
+							goto l155
 						}
 						position++
 					}
 				l178:
 					{
 						position180, tokenIndex180 := position, tokenIndex
-						if buffer[position] != rune('d') {
+						if buffer[position] != rune('t') {
 							goto l181
 						}
 						position++
 						goto l180
 					l181:
 						position, tokenIndex = position180, tokenIndex180
-						if buffer[position] != rune('D') {
-							goto l171
+						if buffer[position] != rune('T') {
+							goto l155
 						}
 						position++
 					}
 				l180:
-					goto l150
-				l171:
-					position, tokenIndex = position150, tokenIndex150
+				}
+			l157:
+				add(ruleSymbolDefiningDirectiveName, position156)
+			}
+			return true
+		l155:
+			position, tokenIndex = position155, tokenIndex155
+			return false
+		},
+		/* 14 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
+		func() bool {
+			position182, tokenIndex182 := position, tokenIndex
+			{
+				position183 := position
+				if !_rules[ruleLabelContainingDirectiveName]() {
+					goto l182
+				}
+				if !_rules[ruleWS]() {
+					goto l182
+				}
+				if !_rules[ruleSymbolArgs]() {
+					goto l182
+				}
+				add(ruleLabelContainingDirective, position183)
+			}
+			return true
+		l182:
+			position, tokenIndex = position182, tokenIndex182
+			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 {
+			position184, tokenIndex184 := position, tokenIndex
+			{
+				position185 := position
+				{
+					position186, tokenIndex186 := position, tokenIndex
 					if buffer[position] != rune('.') {
-						goto l182
-					}
-					position++
-					{
-						position183, tokenIndex183 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l184
-						}
-						position++
-						goto l183
-					l184:
-						position, tokenIndex = position183, tokenIndex183
-						if buffer[position] != rune('L') {
-							goto l182
-						}
-						position++
-					}
-				l183:
-					{
-						position185, tokenIndex185 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l186
-						}
-						position++
-						goto l185
-					l186:
-						position, tokenIndex = position185, tokenIndex185
-						if buffer[position] != rune('O') {
-							goto l182
-						}
-						position++
-					}
-				l185:
-					{
-						position187, tokenIndex187 := position, tokenIndex
-						if buffer[position] != rune('n') {
-							goto l188
-						}
-						position++
 						goto l187
-					l188:
-						position, tokenIndex = position187, tokenIndex187
-						if buffer[position] != rune('N') {
-							goto l182
-						}
-						position++
-					}
-				l187:
-					{
-						position189, tokenIndex189 := position, tokenIndex
-						if buffer[position] != rune('g') {
-							goto l190
-						}
-						position++
-						goto l189
-					l190:
-						position, tokenIndex = position189, tokenIndex189
-						if buffer[position] != rune('G') {
-							goto l182
-						}
-						position++
-					}
-				l189:
-					goto l150
-				l182:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
-						goto l191
 					}
 					position++
 					{
+						position188, tokenIndex188 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l189
+						}
+						position++
+						goto l188
+					l189:
+						position, tokenIndex = position188, tokenIndex188
+						if buffer[position] != rune('X') {
+							goto l187
+						}
+						position++
+					}
+				l188:
+					{
+						position190, tokenIndex190 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l191
+						}
+						position++
+						goto l190
+					l191:
+						position, tokenIndex = position190, tokenIndex190
+						if buffer[position] != rune('W') {
+							goto l187
+						}
+						position++
+					}
+				l190:
+					{
 						position192, tokenIndex192 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('o') {
 							goto l193
 						}
 						position++
 						goto l192
 					l193:
 						position, tokenIndex = position192, tokenIndex192
-						if buffer[position] != rune('S') {
-							goto l191
+						if buffer[position] != rune('O') {
+							goto l187
 						}
 						position++
 					}
 				l192:
 					{
 						position194, tokenIndex194 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('r') {
 							goto l195
 						}
 						position++
 						goto l194
 					l195:
 						position, tokenIndex = position194, tokenIndex194
-						if buffer[position] != rune('E') {
-							goto l191
+						if buffer[position] != rune('R') {
+							goto l187
 						}
 						position++
 					}
 				l194:
 					{
 						position196, tokenIndex196 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('d') {
 							goto l197
 						}
 						position++
 						goto l196
 					l197:
 						position, tokenIndex = position196, tokenIndex196
-						if buffer[position] != rune('T') {
-							goto l191
+						if buffer[position] != rune('D') {
+							goto l187
 						}
 						position++
 					}
 				l196:
-					goto l150
-				l191:
-					position, tokenIndex = position150, tokenIndex150
+					goto l186
+				l187:
+					position, tokenIndex = position186, tokenIndex186
 					if buffer[position] != rune('.') {
 						goto l198
 					}
 					position++
 					{
 						position199, tokenIndex199 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						if buffer[position] != rune('w') {
 							goto l200
 						}
 						position++
 						goto l199
 					l200:
 						position, tokenIndex = position199, tokenIndex199
-						if buffer[position] != rune('B') {
+						if buffer[position] != rune('W') {
 							goto l198
 						}
 						position++
@@ -1821,14 +1819,14 @@
 				l199:
 					{
 						position201, tokenIndex201 := position, tokenIndex
-						if buffer[position] != rune('y') {
+						if buffer[position] != rune('o') {
 							goto l202
 						}
 						position++
 						goto l201
 					l202:
 						position, tokenIndex = position201, tokenIndex201
-						if buffer[position] != rune('Y') {
+						if buffer[position] != rune('O') {
 							goto l198
 						}
 						position++
@@ -1836,14 +1834,14 @@
 				l201:
 					{
 						position203, tokenIndex203 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('r') {
 							goto l204
 						}
 						position++
 						goto l203
 					l204:
 						position, tokenIndex = position203, tokenIndex203
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('R') {
 							goto l198
 						}
 						position++
@@ -1851,40 +1849,36 @@
 				l203:
 					{
 						position205, tokenIndex205 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('d') {
 							goto l206
 						}
 						position++
 						goto l205
 					l206:
 						position, tokenIndex = position205, tokenIndex205
-						if buffer[position] != rune('E') {
+						if buffer[position] != rune('D') {
 							goto l198
 						}
 						position++
 					}
 				l205:
-					goto l150
+					goto l186
 				l198:
-					position, tokenIndex = position150, tokenIndex150
+					position, tokenIndex = position186, tokenIndex186
 					if buffer[position] != rune('.') {
 						goto l207
 					}
 					position++
-					if buffer[position] != rune('8') {
-						goto l207
-					}
-					position++
 					{
 						position208, tokenIndex208 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						if buffer[position] != rune('h') {
 							goto l209
 						}
 						position++
 						goto l208
 					l209:
 						position, tokenIndex = position208, tokenIndex208
-						if buffer[position] != rune('B') {
+						if buffer[position] != rune('H') {
 							goto l207
 						}
 						position++
@@ -1892,14 +1886,14 @@
 				l208:
 					{
 						position210, tokenIndex210 := position, tokenIndex
-						if buffer[position] != rune('y') {
+						if buffer[position] != rune('w') {
 							goto l211
 						}
 						position++
 						goto l210
 					l211:
 						position, tokenIndex = position210, tokenIndex210
-						if buffer[position] != rune('Y') {
+						if buffer[position] != rune('W') {
 							goto l207
 						}
 						position++
@@ -1907,14 +1901,14 @@
 				l210:
 					{
 						position212, tokenIndex212 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('o') {
 							goto l213
 						}
 						position++
 						goto l212
 					l213:
 						position, tokenIndex = position212, tokenIndex212
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('O') {
 							goto l207
 						}
 						position++
@@ -1922,1917 +1916,1962 @@
 				l212:
 					{
 						position214, tokenIndex214 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('r') {
 							goto l215
 						}
 						position++
 						goto l214
 					l215:
 						position, tokenIndex = position214, tokenIndex214
-						if buffer[position] != rune('E') {
+						if buffer[position] != rune('R') {
 							goto l207
 						}
 						position++
 					}
 				l214:
-					goto l150
-				l207:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
-						goto l216
-					}
-					position++
-					if buffer[position] != rune('4') {
-						goto l216
-					}
-					position++
 					{
-						position217, tokenIndex217 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l218
+						position216, tokenIndex216 := position, tokenIndex
+						if buffer[position] != rune('d') {
+							goto l217
 						}
 						position++
-						goto l217
-					l218:
-						position, tokenIndex = position217, tokenIndex217
-						if buffer[position] != rune('B') {
-							goto l216
+						goto l216
+					l217:
+						position, tokenIndex = position216, tokenIndex216
+						if buffer[position] != rune('D') {
+							goto l207
 						}
 						position++
 					}
-				l217:
+				l216:
+					goto l186
+				l207:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l218
+					}
+					position++
 					{
 						position219, tokenIndex219 := position, tokenIndex
-						if buffer[position] != rune('y') {
+						if buffer[position] != rune('l') {
 							goto l220
 						}
 						position++
 						goto l219
 					l220:
 						position, tokenIndex = position219, tokenIndex219
-						if buffer[position] != rune('Y') {
-							goto l216
+						if buffer[position] != rune('L') {
+							goto l218
 						}
 						position++
 					}
 				l219:
 					{
 						position221, tokenIndex221 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('o') {
 							goto l222
 						}
 						position++
 						goto l221
 					l222:
 						position, tokenIndex = position221, tokenIndex221
-						if buffer[position] != rune('T') {
-							goto l216
+						if buffer[position] != rune('O') {
+							goto l218
 						}
 						position++
 					}
 				l221:
 					{
 						position223, tokenIndex223 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('n') {
 							goto l224
 						}
 						position++
 						goto l223
 					l224:
 						position, tokenIndex = position223, tokenIndex223
-						if buffer[position] != rune('E') {
-							goto l216
+						if buffer[position] != rune('N') {
+							goto l218
 						}
 						position++
 					}
 				l223:
-					goto l150
-				l216:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
+					{
+						position225, tokenIndex225 := position, tokenIndex
+						if buffer[position] != rune('g') {
+							goto l226
+						}
+						position++
 						goto l225
+					l226:
+						position, tokenIndex = position225, tokenIndex225
+						if buffer[position] != rune('G') {
+							goto l218
+						}
+						position++
+					}
+				l225:
+					goto l186
+				l218:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l227
 					}
 					position++
 					{
-						position226, tokenIndex226 := position, tokenIndex
-						if buffer[position] != rune('q') {
-							goto l227
-						}
-						position++
-						goto l226
-					l227:
-						position, tokenIndex = position226, tokenIndex226
-						if buffer[position] != rune('Q') {
-							goto l225
-						}
-						position++
-					}
-				l226:
-					{
 						position228, tokenIndex228 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('b') {
 							goto l229
 						}
 						position++
 						goto l228
 					l229:
 						position, tokenIndex = position228, tokenIndex228
-						if buffer[position] != rune('U') {
-							goto l225
+						if buffer[position] != rune('B') {
+							goto l227
 						}
 						position++
 					}
 				l228:
 					{
 						position230, tokenIndex230 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('y') {
 							goto l231
 						}
 						position++
 						goto l230
 					l231:
 						position, tokenIndex = position230, tokenIndex230
-						if buffer[position] != rune('A') {
-							goto l225
+						if buffer[position] != rune('Y') {
+							goto l227
 						}
 						position++
 					}
 				l230:
 					{
 						position232, tokenIndex232 := position, tokenIndex
-						if buffer[position] != rune('d') {
+						if buffer[position] != rune('t') {
 							goto l233
 						}
 						position++
 						goto l232
 					l233:
 						position, tokenIndex = position232, tokenIndex232
-						if buffer[position] != rune('D') {
-							goto l225
+						if buffer[position] != rune('T') {
+							goto l227
 						}
 						position++
 					}
 				l232:
-					goto l150
-				l225:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
+					{
+						position234, tokenIndex234 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l235
+						}
+						position++
 						goto l234
+					l235:
+						position, tokenIndex = position234, tokenIndex234
+						if buffer[position] != rune('E') {
+							goto l227
+						}
+						position++
+					}
+				l234:
+					goto l186
+				l227:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l236
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l236
 					}
 					position++
 					{
-						position235, tokenIndex235 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l236
-						}
-						position++
-						goto l235
-					l236:
-						position, tokenIndex = position235, tokenIndex235
-						if buffer[position] != rune('T') {
-							goto l234
-						}
-						position++
-					}
-				l235:
-					{
 						position237, tokenIndex237 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('b') {
 							goto l238
 						}
 						position++
 						goto l237
 					l238:
 						position, tokenIndex = position237, tokenIndex237
-						if buffer[position] != rune('C') {
-							goto l234
+						if buffer[position] != rune('B') {
+							goto l236
 						}
 						position++
 					}
 				l237:
-					goto l150
-				l234:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
+					{
+						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 l186
+				l236:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l245
+					}
+					position++
+					if buffer[position] != rune('4') {
+						goto l245
 					}
 					position++
 					{
-						position240, tokenIndex240 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l241
-						}
-						position++
-						goto l240
-					l241:
-						position, tokenIndex = position240, tokenIndex240
-						if buffer[position] != rune('L') {
-							goto l239
-						}
-						position++
-					}
-				l240:
-					{
-						position242, tokenIndex242 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l243
-						}
-						position++
-						goto l242
-					l243:
-						position, tokenIndex = position242, tokenIndex242
-						if buffer[position] != rune('O') {
-							goto l239
-						}
-						position++
-					}
-				l242:
-					{
-						position244, tokenIndex244 := position, tokenIndex
-						if buffer[position] != rune('c') {
-							goto l245
-						}
-						position++
-						goto l244
-					l245:
-						position, tokenIndex = position244, tokenIndex244
-						if buffer[position] != rune('C') {
-							goto l239
-						}
-						position++
-					}
-				l244:
-					{
 						position246, tokenIndex246 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('b') {
 							goto l247
 						}
 						position++
 						goto l246
 					l247:
 						position, tokenIndex = position246, tokenIndex246
-						if buffer[position] != rune('A') {
-							goto l239
+						if buffer[position] != rune('B') {
+							goto l245
 						}
 						position++
 					}
 				l246:
 					{
 						position248, tokenIndex248 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('y') {
 							goto l249
 						}
 						position++
 						goto l248
 					l249:
 						position, tokenIndex = position248, tokenIndex248
-						if buffer[position] != rune('L') {
-							goto l239
+						if buffer[position] != rune('Y') {
+							goto l245
 						}
 						position++
 					}
 				l248:
 					{
 						position250, tokenIndex250 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('t') {
 							goto l251
 						}
 						position++
 						goto l250
 					l251:
 						position, tokenIndex = position250, tokenIndex250
-						if buffer[position] != rune('E') {
-							goto l239
+						if buffer[position] != rune('T') {
+							goto l245
 						}
 						position++
 					}
 				l250:
 					{
 						position252, tokenIndex252 := position, tokenIndex
-						if buffer[position] != rune('n') {
+						if buffer[position] != rune('e') {
 							goto l253
 						}
 						position++
 						goto l252
 					l253:
 						position, tokenIndex = position252, tokenIndex252
-						if buffer[position] != rune('N') {
-							goto l239
+						if buffer[position] != rune('E') {
+							goto l245
 						}
 						position++
 					}
 				l252:
-					{
-						position254, tokenIndex254 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l255
-						}
-						position++
-						goto l254
-					l255:
-						position, tokenIndex = position254, tokenIndex254
-						if buffer[position] != rune('T') {
-							goto l239
-						}
-						position++
-					}
-				l254:
-					{
-						position256, tokenIndex256 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l257
-						}
-						position++
-						goto l256
-					l257:
-						position, tokenIndex = position256, tokenIndex256
-						if buffer[position] != rune('R') {
-							goto l239
-						}
-						position++
-					}
-				l256:
-					{
-						position258, tokenIndex258 := position, tokenIndex
-						if buffer[position] != rune('y') {
-							goto l259
-						}
-						position++
-						goto l258
-					l259:
-						position, tokenIndex = position258, tokenIndex258
-						if buffer[position] != rune('Y') {
-							goto l239
-						}
-						position++
-					}
-				l258:
-					goto l150
-				l239:
-					position, tokenIndex = position150, tokenIndex150
+					goto l186
+				l245:
+					position, tokenIndex = position186, tokenIndex186
 					if buffer[position] != rune('.') {
-						goto l260
+						goto l254
 					}
 					position++
 					{
+						position255, tokenIndex255 := position, tokenIndex
+						if buffer[position] != rune('q') {
+							goto l256
+						}
+						position++
+						goto l255
+					l256:
+						position, tokenIndex = position255, tokenIndex255
+						if buffer[position] != rune('Q') {
+							goto l254
+						}
+						position++
+					}
+				l255:
+					{
+						position257, tokenIndex257 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l258
+						}
+						position++
+						goto l257
+					l258:
+						position, tokenIndex = position257, tokenIndex257
+						if buffer[position] != rune('U') {
+							goto l254
+						}
+						position++
+					}
+				l257:
+					{
+						position259, tokenIndex259 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l260
+						}
+						position++
+						goto l259
+					l260:
+						position, tokenIndex = position259, tokenIndex259
+						if buffer[position] != rune('A') {
+							goto l254
+						}
+						position++
+					}
+				l259:
+					{
 						position261, tokenIndex261 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('d') {
 							goto l262
 						}
 						position++
 						goto l261
 					l262:
 						position, tokenIndex = position261, tokenIndex261
-						if buffer[position] != rune('S') {
-							goto l260
+						if buffer[position] != rune('D') {
+							goto l254
 						}
 						position++
 					}
 				l261:
-					{
-						position263, tokenIndex263 := position, tokenIndex
-						if buffer[position] != rune('i') {
-							goto l264
-						}
-						position++
+					goto l186
+				l254:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
 						goto l263
-					l264:
-						position, tokenIndex = position263, tokenIndex263
-						if buffer[position] != rune('I') {
-							goto l260
+					}
+					position++
+					{
+						position264, tokenIndex264 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l265
+						}
+						position++
+						goto l264
+					l265:
+						position, tokenIndex = position264, tokenIndex264
+						if buffer[position] != rune('T') {
+							goto l263
 						}
 						position++
 					}
+				l264:
+					{
+						position266, tokenIndex266 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l267
+						}
+						position++
+						goto l266
+					l267:
+						position, tokenIndex = position266, tokenIndex266
+						if buffer[position] != rune('C') {
+							goto l263
+						}
+						position++
+					}
+				l266:
+					goto l186
 				l263:
-					{
-						position265, tokenIndex265 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l266
-						}
-						position++
-						goto l265
-					l266:
-						position, tokenIndex = position265, tokenIndex265
-						if buffer[position] != rune('Z') {
-							goto l260
-						}
-						position++
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l268
 					}
-				l265:
+					position++
 					{
-						position267, tokenIndex267 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						position269, tokenIndex269 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l270
+						}
+						position++
+						goto l269
+					l270:
+						position, tokenIndex = position269, tokenIndex269
+						if buffer[position] != rune('L') {
 							goto l268
 						}
 						position++
-						goto l267
-					l268:
-						position, tokenIndex = position267, tokenIndex267
-						if buffer[position] != rune('E') {
-							goto l260
-						}
-						position++
 					}
-				l267:
-					goto l150
-				l260:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
-						goto l269
-					}
-					position++
-					{
-						position270, tokenIndex270 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l271
-						}
-						position++
-						goto l270
-					l271:
-						position, tokenIndex = position270, tokenIndex270
-						if buffer[position] != rune('T') {
-							goto l269
-						}
-						position++
-					}
-				l270:
-					{
-						position272, tokenIndex272 := position, tokenIndex
-						if buffer[position] != rune('y') {
-							goto l273
-						}
-						position++
-						goto l272
-					l273:
-						position, tokenIndex = position272, tokenIndex272
-						if buffer[position] != rune('Y') {
-							goto l269
-						}
-						position++
-					}
-				l272:
-					{
-						position274, tokenIndex274 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l275
-						}
-						position++
-						goto l274
-					l275:
-						position, tokenIndex = position274, tokenIndex274
-						if buffer[position] != rune('P') {
-							goto l269
-						}
-						position++
-					}
-				l274:
-					{
-						position276, tokenIndex276 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l277
-						}
-						position++
-						goto l276
-					l277:
-						position, tokenIndex = position276, tokenIndex276
-						if buffer[position] != rune('E') {
-							goto l269
-						}
-						position++
-					}
-				l276:
-					goto l150
 				l269:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
-						goto l278
+					{
+						position271, tokenIndex271 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l272
+						}
+						position++
+						goto l271
+					l272:
+						position, tokenIndex = position271, tokenIndex271
+						if buffer[position] != rune('O') {
+							goto l268
+						}
+						position++
 					}
-					position++
+				l271:
+					{
+						position273, tokenIndex273 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l274
+						}
+						position++
+						goto l273
+					l274:
+						position, tokenIndex = position273, tokenIndex273
+						if buffer[position] != rune('C') {
+							goto l268
+						}
+						position++
+					}
+				l273:
+					{
+						position275, tokenIndex275 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l276
+						}
+						position++
+						goto l275
+					l276:
+						position, tokenIndex = position275, tokenIndex275
+						if buffer[position] != rune('A') {
+							goto l268
+						}
+						position++
+					}
+				l275:
+					{
+						position277, tokenIndex277 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l278
+						}
+						position++
+						goto l277
+					l278:
+						position, tokenIndex = position277, tokenIndex277
+						if buffer[position] != rune('L') {
+							goto l268
+						}
+						position++
+					}
+				l277:
 					{
 						position279, tokenIndex279 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('e') {
 							goto l280
 						}
 						position++
 						goto l279
 					l280:
 						position, tokenIndex = position279, tokenIndex279
-						if buffer[position] != rune('U') {
-							goto l278
+						if buffer[position] != rune('E') {
+							goto l268
 						}
 						position++
 					}
 				l279:
 					{
 						position281, tokenIndex281 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('n') {
 							goto l282
 						}
 						position++
 						goto l281
 					l282:
 						position, tokenIndex = position281, tokenIndex281
-						if buffer[position] != rune('L') {
-							goto l278
+						if buffer[position] != rune('N') {
+							goto l268
 						}
 						position++
 					}
 				l281:
 					{
 						position283, tokenIndex283 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('t') {
 							goto l284
 						}
 						position++
 						goto l283
 					l284:
 						position, tokenIndex = position283, tokenIndex283
-						if buffer[position] != rune('E') {
-							goto l278
+						if buffer[position] != rune('T') {
+							goto l268
 						}
 						position++
 					}
 				l283:
 					{
 						position285, tokenIndex285 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						if buffer[position] != rune('r') {
 							goto l286
 						}
 						position++
 						goto l285
 					l286:
 						position, tokenIndex = position285, tokenIndex285
-						if buffer[position] != rune('B') {
-							goto l278
+						if buffer[position] != rune('R') {
+							goto l268
 						}
 						position++
 					}
 				l285:
-					if buffer[position] != rune('1') {
-						goto l278
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l278
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l278
-					}
-					position++
-					goto l150
-				l278:
-					position, tokenIndex = position150, tokenIndex150
-					if buffer[position] != rune('.') {
-						goto l148
-					}
-					position++
 					{
 						position287, tokenIndex287 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('y') {
 							goto l288
 						}
 						position++
 						goto l287
 					l288:
 						position, tokenIndex = position287, tokenIndex287
-						if buffer[position] != rune('S') {
-							goto l148
+						if buffer[position] != rune('Y') {
+							goto l268
 						}
 						position++
 					}
 				l287:
-					{
-						position289, tokenIndex289 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l290
-						}
-						position++
+					goto l186
+				l268:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
 						goto l289
-					l290:
-						position, tokenIndex = position289, tokenIndex289
-						if buffer[position] != rune('L') {
-							goto l148
+					}
+					position++
+					{
+						position290, tokenIndex290 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l291
+						}
+						position++
+						goto l290
+					l291:
+						position, tokenIndex = position290, tokenIndex290
+						if buffer[position] != rune('S') {
+							goto l289
 						}
 						position++
 					}
-				l289:
+				l290:
 					{
-						position291, tokenIndex291 := position, tokenIndex
+						position292, tokenIndex292 := position, tokenIndex
+						if buffer[position] != rune('i') {
+							goto l293
+						}
+						position++
+						goto l292
+					l293:
+						position, tokenIndex = position292, tokenIndex292
+						if buffer[position] != rune('I') {
+							goto l289
+						}
+						position++
+					}
+				l292:
+					{
+						position294, tokenIndex294 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l295
+						}
+						position++
+						goto l294
+					l295:
+						position, tokenIndex = position294, tokenIndex294
+						if buffer[position] != rune('Z') {
+							goto l289
+						}
+						position++
+					}
+				l294:
+					{
+						position296, tokenIndex296 := position, tokenIndex
 						if buffer[position] != rune('e') {
-							goto l292
+							goto l297
 						}
 						position++
-						goto l291
-					l292:
-						position, tokenIndex = position291, tokenIndex291
+						goto l296
+					l297:
+						position, tokenIndex = position296, tokenIndex296
 						if buffer[position] != rune('E') {
-							goto l148
+							goto l289
 						}
 						position++
 					}
-				l291:
+				l296:
+					goto l186
+				l289:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l298
+					}
+					position++
 					{
-						position293, tokenIndex293 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l294
+						position299, tokenIndex299 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l300
 						}
 						position++
-						goto l293
-					l294:
-						position, tokenIndex = position293, tokenIndex293
-						if buffer[position] != rune('B') {
-							goto l148
+						goto l299
+					l300:
+						position, tokenIndex = position299, tokenIndex299
+						if buffer[position] != rune('T') {
+							goto l298
 						}
 						position++
 					}
-				l293:
+				l299:
+					{
+						position301, tokenIndex301 := position, tokenIndex
+						if buffer[position] != rune('y') {
+							goto l302
+						}
+						position++
+						goto l301
+					l302:
+						position, tokenIndex = position301, tokenIndex301
+						if buffer[position] != rune('Y') {
+							goto l298
+						}
+						position++
+					}
+				l301:
+					{
+						position303, tokenIndex303 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l304
+						}
+						position++
+						goto l303
+					l304:
+						position, tokenIndex = position303, tokenIndex303
+						if buffer[position] != rune('P') {
+							goto l298
+						}
+						position++
+					}
+				l303:
+					{
+						position305, tokenIndex305 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l306
+						}
+						position++
+						goto l305
+					l306:
+						position, tokenIndex = position305, tokenIndex305
+						if buffer[position] != rune('E') {
+							goto l298
+						}
+						position++
+					}
+				l305:
+					goto l186
+				l298:
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l307
+					}
+					position++
+					{
+						position308, tokenIndex308 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l309
+						}
+						position++
+						goto l308
+					l309:
+						position, tokenIndex = position308, tokenIndex308
+						if buffer[position] != rune('U') {
+							goto l307
+						}
+						position++
+					}
+				l308:
+					{
+						position310, tokenIndex310 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l311
+						}
+						position++
+						goto l310
+					l311:
+						position, tokenIndex = position310, tokenIndex310
+						if buffer[position] != rune('L') {
+							goto l307
+						}
+						position++
+					}
+				l310:
+					{
+						position312, tokenIndex312 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l313
+						}
+						position++
+						goto l312
+					l313:
+						position, tokenIndex = position312, tokenIndex312
+						if buffer[position] != rune('E') {
+							goto l307
+						}
+						position++
+					}
+				l312:
+					{
+						position314, tokenIndex314 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l315
+						}
+						position++
+						goto l314
+					l315:
+						position, tokenIndex = position314, tokenIndex314
+						if buffer[position] != rune('B') {
+							goto l307
+						}
+						position++
+					}
+				l314:
 					if buffer[position] != rune('1') {
-						goto l148
+						goto l307
 					}
 					position++
 					if buffer[position] != rune('2') {
-						goto l148
+						goto l307
 					}
 					position++
 					if buffer[position] != rune('8') {
-						goto l148
-					}
-					position++
-				}
-			l150:
-				add(ruleLabelContainingDirectiveName, position149)
-			}
-			return true
-		l148:
-			position, tokenIndex = position148, tokenIndex148
-			return false
-		},
-		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
-		func() bool {
-			position295, tokenIndex295 := position, tokenIndex
-			{
-				position296 := position
-				if !_rules[ruleSymbolArg]() {
-					goto l295
-				}
-			l297:
-				{
-					position298, tokenIndex298 := position, tokenIndex
-					{
-						position299, tokenIndex299 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l299
-						}
-						goto l300
-					l299:
-						position, tokenIndex = position299, tokenIndex299
-					}
-				l300:
-					if buffer[position] != rune(',') {
-						goto l298
-					}
-					position++
-					{
-						position301, tokenIndex301 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l301
-						}
-						goto l302
-					l301:
-						position, tokenIndex = position301, tokenIndex301
-					}
-				l302:
-					if !_rules[ruleSymbolArg]() {
-						goto l298
-					}
-					goto l297
-				l298:
-					position, tokenIndex = position298, tokenIndex298
-				}
-				add(ruleSymbolArgs, position296)
-			}
-			return true
-		l295:
-			position, tokenIndex = position295, tokenIndex295
-			return false
-		},
-		/* 15 SymbolArg <- <SymbolExpr> */
-		func() bool {
-			position303, tokenIndex303 := position, tokenIndex
-			{
-				position304 := position
-				if !_rules[ruleSymbolExpr]() {
-					goto l303
-				}
-				add(ruleSymbolArg, position304)
-			}
-			return true
-		l303:
-			position, tokenIndex = position303, tokenIndex303
-			return false
-		},
-		/* 16 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
-		func() bool {
-			position305, tokenIndex305 := position, tokenIndex
-			{
-				position306 := position
-				if !_rules[ruleSymbolAtom]() {
-					goto l305
-				}
-				{
-					position307, tokenIndex307 := position, tokenIndex
-					{
-						position309, tokenIndex309 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l309
-						}
-						goto l310
-					l309:
-						position, tokenIndex = position309, tokenIndex309
-					}
-				l310:
-					if !_rules[ruleSymbolOperator]() {
 						goto l307
 					}
-					{
-						position311, tokenIndex311 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l311
-						}
-						goto l312
-					l311:
-						position, tokenIndex = position311, tokenIndex311
-					}
-				l312:
-					if !_rules[ruleSymbolExpr]() {
-						goto l307
-					}
-					goto l308
+					position++
+					goto l186
 				l307:
-					position, tokenIndex = position307, tokenIndex307
-				}
-			l308:
-				add(ruleSymbolExpr, position306)
-			}
-			return true
-		l305:
-			position, tokenIndex = position305, tokenIndex305
-			return false
-		},
-		/* 17 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
-		func() bool {
-			position313, tokenIndex313 := position, tokenIndex
-			{
-				position314 := position
-				{
-					position315, tokenIndex315 := position, tokenIndex
-					if !_rules[ruleLocalLabelRef]() {
+					position, tokenIndex = position186, tokenIndex186
+					if buffer[position] != rune('.') {
+						goto l184
+					}
+					position++
+					{
+						position316, tokenIndex316 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l317
+						}
+						position++
 						goto l316
+					l317:
+						position, tokenIndex = position316, tokenIndex316
+						if buffer[position] != rune('S') {
+							goto l184
+						}
+						position++
 					}
-					goto l315
 				l316:
-					position, tokenIndex = position315, tokenIndex315
-					if !_rules[ruleOffset]() {
-						goto l317
-					}
-					goto l315
-				l317:
-					position, tokenIndex = position315, tokenIndex315
-					if !_rules[ruleSymbolType]() {
+					{
+						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 l184
+						}
+						position++
 					}
-					goto l315
 				l318:
-					position, tokenIndex = position315, tokenIndex315
-					if !_rules[ruleLocalSymbol]() {
-						goto l319
-					}
 					{
 						position320, tokenIndex320 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
-							goto l320
+						if buffer[position] != rune('e') {
+							goto l321
 						}
-						goto l321
-					l320:
+						position++
+						goto l320
+					l321:
 						position, tokenIndex = position320, tokenIndex320
+						if buffer[position] != rune('E') {
+							goto l184
+						}
+						position++
 					}
-				l321:
-					goto l315
-				l319:
-					position, tokenIndex = position315, tokenIndex315
-					if !_rules[ruleSymbolName]() {
+				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 l184
+						}
+						position++
 					}
-					if !_rules[ruleOffset]() {
-						goto l322
-					}
-					goto l315
 				l322:
-					position, tokenIndex = position315, tokenIndex315
-					if !_rules[ruleSymbolName]() {
-						goto l323
+					if buffer[position] != rune('1') {
+						goto l184
 					}
-					{
-						position324, tokenIndex324 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
-							goto l324
-						}
-						goto l325
-					l324:
-						position, tokenIndex = position324, tokenIndex324
+					position++
+					if buffer[position] != rune('2') {
+						goto l184
 					}
-				l325:
-					goto l315
-				l323:
-					position, tokenIndex = position315, tokenIndex315
-					if !_rules[ruleDot]() {
-						goto l326
+					position++
+					if buffer[position] != rune('8') {
+						goto l184
 					}
-					goto l315
-				l326:
-					position, tokenIndex = position315, tokenIndex315
-					if !_rules[ruleOpenParen]() {
-						goto l313
-					}
-					{
-						position327, tokenIndex327 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l327
-						}
-						goto l328
-					l327:
-						position, tokenIndex = position327, tokenIndex327
-					}
-				l328:
-					if !_rules[ruleSymbolExpr]() {
-						goto l313
-					}
-					{
-						position329, tokenIndex329 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l329
-						}
-						goto l330
-					l329:
-						position, tokenIndex = position329, tokenIndex329
-					}
-				l330:
-					if !_rules[ruleCloseParen]() {
-						goto l313
-					}
+					position++
 				}
-			l315:
-				add(ruleSymbolAtom, position314)
+			l186:
+				add(ruleLabelContainingDirectiveName, position185)
 			}
 			return true
-		l313:
-			position, tokenIndex = position313, tokenIndex313
+		l184:
+			position, tokenIndex = position184, tokenIndex184
 			return false
 		},
-		/* 18 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
+		/* 16 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
 		func() bool {
-			position331, tokenIndex331 := position, tokenIndex
+			position324, tokenIndex324 := position, tokenIndex
 			{
-				position332 := position
+				position325 := position
+				if !_rules[ruleSymbolArg]() {
+					goto l324
+				}
+			l326:
 				{
-					position333, tokenIndex333 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l334
+					position327, tokenIndex327 := position, tokenIndex
+					{
+						position328, tokenIndex328 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l328
+						}
+						goto l329
+					l328:
+						position, tokenIndex = position328, tokenIndex328
+					}
+				l329:
+					if buffer[position] != rune(',') {
+						goto l327
 					}
 					position++
-					goto l333
-				l334:
-					position, tokenIndex = position333, tokenIndex333
-					if buffer[position] != rune('-') {
-						goto l335
+					{
+						position330, tokenIndex330 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l330
+						}
+						goto l331
+					l330:
+						position, tokenIndex = position330, tokenIndex330
 					}
-					position++
-					goto l333
-				l335:
-					position, tokenIndex = position333, tokenIndex333
-					if buffer[position] != rune('|') {
+				l331:
+					if !_rules[ruleSymbolArg]() {
+						goto l327
+					}
+					goto l326
+				l327:
+					position, tokenIndex = position327, tokenIndex327
+				}
+				add(ruleSymbolArgs, position325)
+			}
+			return true
+		l324:
+			position, tokenIndex = position324, tokenIndex324
+			return false
+		},
+		/* 17 SymbolArg <- <SymbolExpr> */
+		func() bool {
+			position332, tokenIndex332 := position, tokenIndex
+			{
+				position333 := position
+				if !_rules[ruleSymbolExpr]() {
+					goto l332
+				}
+				add(ruleSymbolArg, position333)
+			}
+			return true
+		l332:
+			position, tokenIndex = position332, tokenIndex332
+			return false
+		},
+		/* 18 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
+		func() bool {
+			position334, tokenIndex334 := position, tokenIndex
+			{
+				position335 := position
+				if !_rules[ruleSymbolAtom]() {
+					goto l334
+				}
+				{
+					position336, tokenIndex336 := position, tokenIndex
+					{
+						position338, tokenIndex338 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l338
+						}
+						goto l339
+					l338:
+						position, tokenIndex = position338, tokenIndex338
+					}
+				l339:
+					if !_rules[ruleSymbolOperator]() {
 						goto l336
 					}
-					position++
-					goto l333
+					{
+						position340, tokenIndex340 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l340
+						}
+						goto l341
+					l340:
+						position, tokenIndex = position340, tokenIndex340
+					}
+				l341:
+					if !_rules[ruleSymbolExpr]() {
+						goto l336
+					}
+					goto l337
 				l336:
-					position, tokenIndex = position333, tokenIndex333
-					if buffer[position] != rune('<') {
-						goto l337
-					}
-					position++
-					if buffer[position] != rune('<') {
-						goto l337
-					}
-					position++
-					goto l333
-				l337:
-					position, tokenIndex = position333, tokenIndex333
-					if buffer[position] != rune('>') {
-						goto l331
-					}
-					position++
-					if buffer[position] != rune('>') {
-						goto l331
-					}
-					position++
+					position, tokenIndex = position336, tokenIndex336
 				}
-			l333:
-				add(ruleSymbolOperator, position332)
+			l337:
+				add(ruleSymbolExpr, position335)
 			}
 			return true
-		l331:
-			position, tokenIndex = position331, tokenIndex331
+		l334:
+			position, tokenIndex = position334, tokenIndex334
 			return false
 		},
-		/* 19 OpenParen <- <'('> */
-		func() bool {
-			position338, tokenIndex338 := position, tokenIndex
-			{
-				position339 := position
-				if buffer[position] != rune('(') {
-					goto l338
-				}
-				position++
-				add(ruleOpenParen, position339)
-			}
-			return true
-		l338:
-			position, tokenIndex = position338, tokenIndex338
-			return false
-		},
-		/* 20 CloseParen <- <')'> */
-		func() bool {
-			position340, tokenIndex340 := position, tokenIndex
-			{
-				position341 := position
-				if buffer[position] != rune(')') {
-					goto l340
-				}
-				position++
-				add(ruleCloseParen, position341)
-			}
-			return true
-		l340:
-			position, tokenIndex = position340, tokenIndex340
-			return false
-		},
-		/* 21 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
+		/* 19 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
 		func() bool {
 			position342, tokenIndex342 := position, tokenIndex
 			{
 				position343 := position
 				{
 					position344, tokenIndex344 := position, tokenIndex
-					if buffer[position] != rune('@') {
+					if !_rules[ruleLocalLabelRef]() {
 						goto l345
 					}
-					position++
 					goto l344
 				l345:
 					position, tokenIndex = position344, tokenIndex344
-					if buffer[position] != rune('%') {
+					if !_rules[ruleOffset]() {
+						goto l346
+					}
+					goto l344
+				l346:
+					position, tokenIndex = position344, tokenIndex344
+					if !_rules[ruleSymbolType]() {
+						goto l347
+					}
+					goto l344
+				l347:
+					position, tokenIndex = position344, tokenIndex344
+					if !_rules[ruleLocalSymbol]() {
+						goto l348
+					}
+					{
+						position349, tokenIndex349 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l349
+						}
+						goto l350
+					l349:
+						position, tokenIndex = position349, tokenIndex349
+					}
+				l350:
+					goto l344
+				l348:
+					position, tokenIndex = position344, tokenIndex344
+					if !_rules[ruleSymbolName]() {
+						goto l351
+					}
+					if !_rules[ruleOffset]() {
+						goto l351
+					}
+					goto l344
+				l351:
+					position, tokenIndex = position344, tokenIndex344
+					if !_rules[ruleSymbolName]() {
+						goto l352
+					}
+					{
+						position353, tokenIndex353 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l353
+						}
+						goto l354
+					l353:
+						position, tokenIndex = position353, tokenIndex353
+					}
+				l354:
+					goto l344
+				l352:
+					position, tokenIndex = position344, tokenIndex344
+					if !_rules[ruleDot]() {
+						goto l355
+					}
+					goto l344
+				l355:
+					position, tokenIndex = position344, tokenIndex344
+					if !_rules[ruleOpenParen]() {
 						goto l342
 					}
-					position++
+					{
+						position356, tokenIndex356 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l356
+						}
+						goto l357
+					l356:
+						position, tokenIndex = position356, tokenIndex356
+					}
+				l357:
+					if !_rules[ruleSymbolExpr]() {
+						goto l342
+					}
+					{
+						position358, tokenIndex358 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l358
+						}
+						goto l359
+					l358:
+						position, tokenIndex = position358, tokenIndex358
+					}
+				l359:
+					if !_rules[ruleCloseParen]() {
+						goto l342
+					}
 				}
 			l344:
-				{
-					position346, tokenIndex346 := position, tokenIndex
-					if buffer[position] != rune('f') {
-						goto l347
-					}
-					position++
-					if buffer[position] != rune('u') {
-						goto l347
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l347
-					}
-					position++
-					if buffer[position] != rune('c') {
-						goto l347
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l347
-					}
-					position++
-					if buffer[position] != rune('i') {
-						goto l347
-					}
-					position++
-					if buffer[position] != rune('o') {
-						goto l347
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l347
-					}
-					position++
-					goto l346
-				l347:
-					position, tokenIndex = position346, tokenIndex346
-					if buffer[position] != rune('o') {
-						goto l342
-					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l342
-					}
-					position++
-					if buffer[position] != rune('j') {
-						goto l342
-					}
-					position++
-					if buffer[position] != rune('e') {
-						goto l342
-					}
-					position++
-					if buffer[position] != rune('c') {
-						goto l342
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l342
-					}
-					position++
-				}
-			l346:
-				add(ruleSymbolType, position343)
+				add(ruleSymbolAtom, position343)
 			}
 			return true
 		l342:
 			position, tokenIndex = position342, tokenIndex342
 			return false
 		},
-		/* 22 Dot <- <'.'> */
+		/* 20 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
 		func() bool {
-			position348, tokenIndex348 := position, tokenIndex
+			position360, tokenIndex360 := position, tokenIndex
 			{
-				position349 := position
-				if buffer[position] != rune('.') {
-					goto l348
-				}
-				position++
-				add(ruleDot, position349)
-			}
-			return true
-		l348:
-			position, tokenIndex = position348, tokenIndex348
-			return false
-		},
-		/* 23 TCMarker <- <('[' 'T' 'C' ']')> */
-		func() bool {
-			position350, tokenIndex350 := position, tokenIndex
-			{
-				position351 := position
-				if buffer[position] != rune('[') {
-					goto l350
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l350
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l350
-				}
-				position++
-				if buffer[position] != rune(']') {
-					goto l350
-				}
-				position++
-				add(ruleTCMarker, position351)
-			}
-			return true
-		l350:
-			position, tokenIndex = position350, tokenIndex350
-			return false
-		},
-		/* 24 EscapedChar <- <('\\' .)> */
-		func() bool {
-			position352, tokenIndex352 := position, tokenIndex
-			{
-				position353 := position
-				if buffer[position] != rune('\\') {
-					goto l352
-				}
-				position++
-				if !matchDot() {
-					goto l352
-				}
-				add(ruleEscapedChar, position353)
-			}
-			return true
-		l352:
-			position, tokenIndex = position352, tokenIndex352
-			return false
-		},
-		/* 25 WS <- <(' ' / '\t')+> */
-		func() bool {
-			position354, tokenIndex354 := position, tokenIndex
-			{
-				position355 := position
+				position361 := position
 				{
-					position358, tokenIndex358 := position, tokenIndex
-					if buffer[position] != rune(' ') {
-						goto l359
+					position362, tokenIndex362 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l363
 					}
 					position++
-					goto l358
-				l359:
-					position, tokenIndex = position358, tokenIndex358
-					if buffer[position] != rune('\t') {
-						goto l354
+					goto l362
+				l363:
+					position, tokenIndex = position362, tokenIndex362
+					if buffer[position] != rune('-') {
+						goto l364
 					}
 					position++
-				}
-			l358:
-			l356:
-				{
-					position357, tokenIndex357 := position, tokenIndex
-					{
-						position360, tokenIndex360 := position, tokenIndex
-						if buffer[position] != rune(' ') {
-							goto l361
-						}
-						position++
-						goto l360
-					l361:
-						position, tokenIndex = position360, tokenIndex360
-						if buffer[position] != rune('\t') {
-							goto l357
-						}
-						position++
-					}
-				l360:
-					goto l356
-				l357:
-					position, tokenIndex = position357, tokenIndex357
-				}
-				add(ruleWS, position355)
-			}
-			return true
-		l354:
-			position, tokenIndex = position354, tokenIndex354
-			return false
-		},
-		/* 26 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
-		func() bool {
-			position362, tokenIndex362 := position, tokenIndex
-			{
-				position363 := position
-				{
-					position364, tokenIndex364 := position, tokenIndex
-					if buffer[position] != rune('/') {
+					goto l362
+				l364:
+					position, tokenIndex = position362, tokenIndex362
+					if buffer[position] != rune('|') {
 						goto l365
 					}
 					position++
-					if buffer[position] != rune('/') {
-						goto l365
-					}
-					position++
-					goto l364
+					goto l362
 				l365:
-					position, tokenIndex = position364, tokenIndex364
-					if buffer[position] != rune('#') {
-						goto l362
+					position, tokenIndex = position362, tokenIndex362
+					if buffer[position] != rune('<') {
+						goto l366
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l366
+					}
+					position++
+					goto l362
+				l366:
+					position, tokenIndex = position362, tokenIndex362
+					if buffer[position] != rune('>') {
+						goto l360
+					}
+					position++
+					if buffer[position] != rune('>') {
+						goto l360
 					}
 					position++
 				}
-			l364:
-			l366:
-				{
-					position367, tokenIndex367 := position, tokenIndex
-					{
-						position368, tokenIndex368 := position, tokenIndex
-						if buffer[position] != rune('\n') {
-							goto l368
-						}
-						position++
-						goto l367
-					l368:
-						position, tokenIndex = position368, tokenIndex368
-					}
-					if !matchDot() {
-						goto l367
-					}
-					goto l366
-				l367:
-					position, tokenIndex = position367, tokenIndex367
-				}
-				add(ruleComment, position363)
+			l362:
+				add(ruleSymbolOperator, position361)
 			}
 			return true
-		l362:
-			position, tokenIndex = position362, tokenIndex362
+		l360:
+			position, tokenIndex = position360, tokenIndex360
 			return false
 		},
-		/* 27 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		/* 21 OpenParen <- <'('> */
+		func() bool {
+			position367, tokenIndex367 := position, tokenIndex
+			{
+				position368 := position
+				if buffer[position] != rune('(') {
+					goto l367
+				}
+				position++
+				add(ruleOpenParen, position368)
+			}
+			return true
+		l367:
+			position, tokenIndex = position367, tokenIndex367
+			return false
+		},
+		/* 22 CloseParen <- <')'> */
 		func() bool {
 			position369, tokenIndex369 := position, tokenIndex
 			{
 				position370 := position
-				{
-					position371, tokenIndex371 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l372
-					}
-					goto l371
-				l372:
-					position, tokenIndex = position371, tokenIndex371
-					if !_rules[ruleLocalLabel]() {
-						goto l373
-					}
-					goto l371
-				l373:
-					position, tokenIndex = position371, tokenIndex371
-					if !_rules[ruleSymbolName]() {
-						goto l369
-					}
-				}
-			l371:
-				if buffer[position] != rune(':') {
+				if buffer[position] != rune(')') {
 					goto l369
 				}
 				position++
-				add(ruleLabel, position370)
+				add(ruleCloseParen, position370)
 			}
 			return true
 		l369:
 			position, tokenIndex = position369, tokenIndex369
 			return false
 		},
-		/* 28 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		/* 23 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
 		func() bool {
-			position374, tokenIndex374 := position, tokenIndex
+			position371, tokenIndex371 := position, tokenIndex
 			{
-				position375 := position
+				position372 := position
 				{
-					position376, tokenIndex376 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l377
-					}
-					position++
-					goto l376
-				l377:
-					position, tokenIndex = position376, tokenIndex376
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l378
-					}
-					position++
-					goto l376
-				l378:
-					position, tokenIndex = position376, tokenIndex376
-					if buffer[position] != rune('.') {
-						goto l379
-					}
-					position++
-					goto l376
-				l379:
-					position, tokenIndex = position376, tokenIndex376
-					if buffer[position] != rune('_') {
+					position373, tokenIndex373 := position, tokenIndex
+					if buffer[position] != rune('@') {
 						goto l374
 					}
 					position++
-				}
-			l376:
-			l380:
-				{
-					position381, tokenIndex381 := position, tokenIndex
-					{
-						position382, tokenIndex382 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l383
-						}
-						position++
-						goto l382
-					l383:
-						position, tokenIndex = position382, tokenIndex382
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l384
-						}
-						position++
-						goto l382
-					l384:
-						position, tokenIndex = position382, tokenIndex382
-						if buffer[position] != rune('.') {
-							goto l385
-						}
-						position++
-						goto l382
-					l385:
-						position, tokenIndex = position382, tokenIndex382
-						{
-							position387, tokenIndex387 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l388
-							}
-							position++
-							goto l387
-						l388:
-							position, tokenIndex = position387, tokenIndex387
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l386
-							}
-							position++
-						}
-					l387:
-						goto l382
-					l386:
-						position, tokenIndex = position382, tokenIndex382
-						if buffer[position] != rune('$') {
-							goto l389
-						}
-						position++
-						goto l382
-					l389:
-						position, tokenIndex = position382, tokenIndex382
-						if buffer[position] != rune('_') {
-							goto l381
-						}
-						position++
+					goto l373
+				l374:
+					position, tokenIndex = position373, tokenIndex373
+					if buffer[position] != rune('%') {
+						goto l371
 					}
-				l382:
-					goto l380
-				l381:
-					position, tokenIndex = position381, tokenIndex381
+					position++
 				}
-				add(ruleSymbolName, position375)
+			l373:
+				{
+					position375, tokenIndex375 := position, tokenIndex
+					if buffer[position] != rune('f') {
+						goto l376
+					}
+					position++
+					if buffer[position] != rune('u') {
+						goto l376
+					}
+					position++
+					if buffer[position] != rune('n') {
+						goto l376
+					}
+					position++
+					if buffer[position] != rune('c') {
+						goto l376
+					}
+					position++
+					if buffer[position] != rune('t') {
+						goto l376
+					}
+					position++
+					if buffer[position] != rune('i') {
+						goto l376
+					}
+					position++
+					if buffer[position] != rune('o') {
+						goto l376
+					}
+					position++
+					if buffer[position] != rune('n') {
+						goto l376
+					}
+					position++
+					goto l375
+				l376:
+					position, tokenIndex = position375, tokenIndex375
+					if buffer[position] != rune('o') {
+						goto l371
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l371
+					}
+					position++
+					if buffer[position] != rune('j') {
+						goto l371
+					}
+					position++
+					if buffer[position] != rune('e') {
+						goto l371
+					}
+					position++
+					if buffer[position] != rune('c') {
+						goto l371
+					}
+					position++
+					if buffer[position] != rune('t') {
+						goto l371
+					}
+					position++
+				}
+			l375:
+				add(ruleSymbolType, position372)
 			}
 			return true
-		l374:
-			position, tokenIndex = position374, tokenIndex374
+		l371:
+			position, tokenIndex = position371, tokenIndex371
 			return false
 		},
-		/* 29 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
+		/* 24 Dot <- <'.'> */
 		func() bool {
-			position390, tokenIndex390 := position, tokenIndex
+			position377, tokenIndex377 := position, tokenIndex
 			{
-				position391 := position
+				position378 := position
 				if buffer[position] != rune('.') {
-					goto l390
+					goto l377
 				}
 				position++
-				if buffer[position] != rune('L') {
-					goto l390
+				add(ruleDot, position378)
+			}
+			return true
+		l377:
+			position, tokenIndex = position377, tokenIndex377
+			return false
+		},
+		/* 25 TCMarker <- <('[' 'T' 'C' ']')> */
+		func() bool {
+			position379, tokenIndex379 := position, tokenIndex
+			{
+				position380 := position
+				if buffer[position] != rune('[') {
+					goto l379
 				}
 				position++
+				if buffer[position] != rune('T') {
+					goto l379
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l379
+				}
+				position++
+				if buffer[position] != rune(']') {
+					goto l379
+				}
+				position++
+				add(ruleTCMarker, position380)
+			}
+			return true
+		l379:
+			position, tokenIndex = position379, tokenIndex379
+			return false
+		},
+		/* 26 EscapedChar <- <('\\' .)> */
+		func() bool {
+			position381, tokenIndex381 := position, tokenIndex
+			{
+				position382 := position
+				if buffer[position] != rune('\\') {
+					goto l381
+				}
+				position++
+				if !matchDot() {
+					goto l381
+				}
+				add(ruleEscapedChar, position382)
+			}
+			return true
+		l381:
+			position, tokenIndex = position381, tokenIndex381
+			return false
+		},
+		/* 27 WS <- <(' ' / '\t')+> */
+		func() bool {
+			position383, tokenIndex383 := position, tokenIndex
+			{
+				position384 := position
 				{
-					position394, tokenIndex394 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l395
+					position387, tokenIndex387 := position, tokenIndex
+					if buffer[position] != rune(' ') {
+						goto l388
 					}
 					position++
-					goto l394
-				l395:
-					position, tokenIndex = position394, tokenIndex394
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l396
+					goto l387
+				l388:
+					position, tokenIndex = position387, tokenIndex387
+					if buffer[position] != rune('\t') {
+						goto l383
 					}
 					position++
-					goto l394
-				l396:
-					position, tokenIndex = position394, tokenIndex394
+				}
+			l387:
+			l385:
+				{
+					position386, tokenIndex386 := position, tokenIndex
 					{
-						position398, tokenIndex398 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l399
+						position389, tokenIndex389 := position, tokenIndex
+						if buffer[position] != rune(' ') {
+							goto l390
 						}
 						position++
-						goto l398
-					l399:
-						position, tokenIndex = position398, tokenIndex398
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l389
+					l390:
+						position, tokenIndex = position389, tokenIndex389
+						if buffer[position] != rune('\t') {
+							goto l386
+						}
+						position++
+					}
+				l389:
+					goto l385
+				l386:
+					position, tokenIndex = position386, tokenIndex386
+				}
+				add(ruleWS, position384)
+			}
+			return true
+		l383:
+			position, tokenIndex = position383, tokenIndex383
+			return false
+		},
+		/* 28 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
+		func() bool {
+			position391, tokenIndex391 := position, tokenIndex
+			{
+				position392 := position
+				{
+					position393, tokenIndex393 := position, tokenIndex
+					if buffer[position] != rune('/') {
+						goto l394
+					}
+					position++
+					if buffer[position] != rune('/') {
+						goto l394
+					}
+					position++
+					goto l393
+				l394:
+					position, tokenIndex = position393, tokenIndex393
+					if buffer[position] != rune('#') {
+						goto l391
+					}
+					position++
+				}
+			l393:
+			l395:
+				{
+					position396, tokenIndex396 := position, tokenIndex
+					{
+						position397, tokenIndex397 := position, tokenIndex
+						if buffer[position] != rune('\n') {
 							goto l397
 						}
 						position++
+						goto l396
+					l397:
+						position, tokenIndex = position397, tokenIndex397
 					}
-				l398:
-					goto l394
-				l397:
-					position, tokenIndex = position394, tokenIndex394
-					if buffer[position] != rune('.') {
-						goto l400
+					if !matchDot() {
+						goto l396
 					}
-					position++
-					goto l394
-				l400:
-					position, tokenIndex = position394, tokenIndex394
-					{
-						position402, tokenIndex402 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l403
-						}
-						position++
-						goto l402
-					l403:
-						position, tokenIndex = position402, tokenIndex402
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l401
-						}
-						position++
+					goto l395
+				l396:
+					position, tokenIndex = position396, tokenIndex396
+				}
+				add(ruleComment, position392)
+			}
+			return true
+		l391:
+			position, tokenIndex = position391, tokenIndex391
+			return false
+		},
+		/* 29 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		func() bool {
+			position398, tokenIndex398 := position, tokenIndex
+			{
+				position399 := position
+				{
+					position400, tokenIndex400 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l401
 					}
-				l402:
-					goto l394
+					goto l400
 				l401:
-					position, tokenIndex = position394, tokenIndex394
-					if buffer[position] != rune('$') {
-						goto l404
+					position, tokenIndex = position400, tokenIndex400
+					if !_rules[ruleLocalLabel]() {
+						goto l402
+					}
+					goto l400
+				l402:
+					position, tokenIndex = position400, tokenIndex400
+					if !_rules[ruleSymbolName]() {
+						goto l398
+					}
+				}
+			l400:
+				if buffer[position] != rune(':') {
+					goto l398
+				}
+				position++
+				add(ruleLabel, position399)
+			}
+			return true
+		l398:
+			position, tokenIndex = position398, tokenIndex398
+			return false
+		},
+		/* 30 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		func() bool {
+			position403, tokenIndex403 := position, tokenIndex
+			{
+				position404 := position
+				{
+					position405, tokenIndex405 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l406
 					}
 					position++
-					goto l394
-				l404:
-					position, tokenIndex = position394, tokenIndex394
+					goto l405
+				l406:
+					position, tokenIndex = position405, tokenIndex405
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l407
+					}
+					position++
+					goto l405
+				l407:
+					position, tokenIndex = position405, tokenIndex405
+					if buffer[position] != rune('.') {
+						goto l408
+					}
+					position++
+					goto l405
+				l408:
+					position, tokenIndex = position405, tokenIndex405
 					if buffer[position] != rune('_') {
-						goto l390
+						goto l403
 					}
 					position++
 				}
-			l394:
-			l392:
+			l405:
+			l409:
 				{
-					position393, tokenIndex393 := position, tokenIndex
+					position410, tokenIndex410 := position, tokenIndex
 					{
-						position405, tokenIndex405 := position, tokenIndex
+						position411, tokenIndex411 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l406
+							goto l412
 						}
 						position++
-						goto l405
-					l406:
-						position, tokenIndex = position405, tokenIndex405
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l407
-						}
-						position++
-						goto l405
-					l407:
-						position, tokenIndex = position405, tokenIndex405
-						{
-							position409, tokenIndex409 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l410
-							}
-							position++
-							goto l409
-						l410:
-							position, tokenIndex = position409, tokenIndex409
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l408
-							}
-							position++
-						}
-					l409:
-						goto l405
-					l408:
-						position, tokenIndex = position405, tokenIndex405
-						if buffer[position] != rune('.') {
-							goto l411
-						}
-						position++
-						goto l405
-					l411:
-						position, tokenIndex = position405, tokenIndex405
-						{
-							position413, tokenIndex413 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l414
-							}
-							position++
-							goto l413
-						l414:
-							position, tokenIndex = position413, tokenIndex413
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l412
-							}
-							position++
-						}
-					l413:
-						goto l405
+						goto l411
 					l412:
-						position, tokenIndex = position405, tokenIndex405
-						if buffer[position] != rune('$') {
-							goto l415
+						position, tokenIndex = position411, tokenIndex411
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l413
 						}
 						position++
-						goto l405
+						goto l411
+					l413:
+						position, tokenIndex = position411, tokenIndex411
+						if buffer[position] != rune('.') {
+							goto l414
+						}
+						position++
+						goto l411
+					l414:
+						position, tokenIndex = position411, tokenIndex411
+						{
+							position416, tokenIndex416 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l417
+							}
+							position++
+							goto l416
+						l417:
+							position, tokenIndex = position416, tokenIndex416
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l415
+							}
+							position++
+						}
+					l416:
+						goto l411
 					l415:
-						position, tokenIndex = position405, tokenIndex405
+						position, tokenIndex = position411, tokenIndex411
+						if buffer[position] != rune('$') {
+							goto l418
+						}
+						position++
+						goto l411
+					l418:
+						position, tokenIndex = position411, tokenIndex411
 						if buffer[position] != rune('_') {
-							goto l393
+							goto l410
 						}
 						position++
 					}
-				l405:
-					goto l392
-				l393:
-					position, tokenIndex = position393, tokenIndex393
+				l411:
+					goto l409
+				l410:
+					position, tokenIndex = position410, tokenIndex410
 				}
-				add(ruleLocalSymbol, position391)
+				add(ruleSymbolName, position404)
 			}
 			return true
-		l390:
-			position, tokenIndex = position390, tokenIndex390
+		l403:
+			position, tokenIndex = position403, tokenIndex403
 			return false
 		},
-		/* 30 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
+		/* 31 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
 		func() bool {
-			position416, tokenIndex416 := position, tokenIndex
+			position419, tokenIndex419 := position, tokenIndex
 			{
-				position417 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l416
+				position420 := position
+				if buffer[position] != rune('.') {
+					goto l419
 				}
 				position++
-			l418:
-				{
-					position419, tokenIndex419 := position, tokenIndex
-					{
-						position420, tokenIndex420 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l421
-						}
-						position++
-						goto l420
-					l421:
-						position, tokenIndex = position420, tokenIndex420
-						if buffer[position] != rune('$') {
-							goto l419
-						}
-						position++
-					}
-				l420:
-					goto l418
-				l419:
-					position, tokenIndex = position419, tokenIndex419
-				}
-				add(ruleLocalLabel, position417)
-			}
-			return true
-		l416:
-			position, tokenIndex = position416, tokenIndex416
-			return false
-		},
-		/* 31 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
-		func() bool {
-			position422, tokenIndex422 := position, tokenIndex
-			{
-				position423 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l422
+				if buffer[position] != rune('L') {
+					goto l419
 				}
 				position++
-			l424:
 				{
-					position425, tokenIndex425 := position, tokenIndex
-					{
-						position426, tokenIndex426 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l427
-						}
-						position++
-						goto l426
-					l427:
-						position, tokenIndex = position426, tokenIndex426
-						if buffer[position] != rune('$') {
-							goto l425
-						}
-						position++
+					position423, tokenIndex423 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l424
 					}
-				l426:
-					goto l424
+					position++
+					goto l423
+				l424:
+					position, tokenIndex = position423, tokenIndex423
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l425
+					}
+					position++
+					goto l423
 				l425:
-					position, tokenIndex = position425, tokenIndex425
-				}
-				{
-					position428, tokenIndex428 := position, tokenIndex
-					if buffer[position] != rune('b') {
+					position, tokenIndex = position423, tokenIndex423
+					{
+						position427, tokenIndex427 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l428
+						}
+						position++
+						goto l427
+					l428:
+						position, tokenIndex = position427, tokenIndex427
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l426
+						}
+						position++
+					}
+				l427:
+					goto l423
+				l426:
+					position, tokenIndex = position423, tokenIndex423
+					if buffer[position] != rune('.') {
 						goto l429
 					}
 					position++
-					goto l428
+					goto l423
 				l429:
-					position, tokenIndex = position428, tokenIndex428
-					if buffer[position] != rune('f') {
-						goto l422
+					position, tokenIndex = position423, tokenIndex423
+					{
+						position431, tokenIndex431 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l432
+						}
+						position++
+						goto l431
+					l432:
+						position, tokenIndex = position431, tokenIndex431
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l430
+						}
+						position++
 					}
-					position++
-				}
-			l428:
-				add(ruleLocalLabelRef, position423)
-			}
-			return true
-		l422:
-			position, tokenIndex = position422, tokenIndex422
-			return false
-		},
-		/* 32 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
-		func() bool {
-			position430, tokenIndex430 := position, tokenIndex
-			{
-				position431 := position
-				{
-					position432, tokenIndex432 := position, tokenIndex
-					if buffer[position] != rune('n') {
+				l431:
+					goto l423
+				l430:
+					position, tokenIndex = position423, tokenIndex423
+					if buffer[position] != rune('$') {
 						goto l433
 					}
 					position++
-					goto l432
+					goto l423
 				l433:
-					position, tokenIndex = position432, tokenIndex432
-					if buffer[position] != rune('N') {
-						goto l430
+					position, tokenIndex = position423, tokenIndex423
+					if buffer[position] != rune('_') {
+						goto l419
 					}
 					position++
 				}
-			l432:
+			l423:
+			l421:
 				{
-					position434, tokenIndex434 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l435
+					position422, tokenIndex422 := position, tokenIndex
+					{
+						position434, tokenIndex434 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l435
+						}
+						position++
+						goto l434
+					l435:
+						position, tokenIndex = position434, tokenIndex434
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l436
+						}
+						position++
+						goto l434
+					l436:
+						position, tokenIndex = position434, tokenIndex434
+						{
+							position438, tokenIndex438 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l439
+							}
+							position++
+							goto l438
+						l439:
+							position, tokenIndex = position438, tokenIndex438
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l437
+							}
+							position++
+						}
+					l438:
+						goto l434
+					l437:
+						position, tokenIndex = position434, tokenIndex434
+						if buffer[position] != rune('.') {
+							goto l440
+						}
+						position++
+						goto l434
+					l440:
+						position, tokenIndex = position434, tokenIndex434
+						{
+							position442, tokenIndex442 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l443
+							}
+							position++
+							goto l442
+						l443:
+							position, tokenIndex = position442, tokenIndex442
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l441
+							}
+							position++
+						}
+					l442:
+						goto l434
+					l441:
+						position, tokenIndex = position434, tokenIndex434
+						if buffer[position] != rune('$') {
+							goto l444
+						}
+						position++
+						goto l434
+					l444:
+						position, tokenIndex = position434, tokenIndex434
+						if buffer[position] != rune('_') {
+							goto l422
+						}
+						position++
 					}
-					position++
-					goto l434
-				l435:
-					position, tokenIndex = position434, tokenIndex434
-					if buffer[position] != rune('O') {
-						goto l430
-					}
-					position++
+				l434:
+					goto l421
+				l422:
+					position, tokenIndex = position422, tokenIndex422
 				}
-			l434:
-				{
-					position436, tokenIndex436 := position, tokenIndex
-					if buffer[position] != rune('t') {
-						goto l437
-					}
-					position++
-					goto l436
-				l437:
-					position, tokenIndex = position436, tokenIndex436
-					if buffer[position] != rune('T') {
-						goto l430
-					}
-					position++
-				}
-			l436:
-				{
-					position438, tokenIndex438 := position, tokenIndex
-					if buffer[position] != rune('r') {
-						goto l439
-					}
-					position++
-					goto l438
-				l439:
-					position, tokenIndex = position438, tokenIndex438
-					if buffer[position] != rune('R') {
-						goto l430
-					}
-					position++
-				}
-			l438:
-				{
-					position440, tokenIndex440 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l441
-					}
-					position++
-					goto l440
-				l441:
-					position, tokenIndex = position440, tokenIndex440
-					if buffer[position] != rune('A') {
-						goto l430
-					}
-					position++
-				}
-			l440:
-				{
-					position442, tokenIndex442 := position, tokenIndex
-					if buffer[position] != rune('c') {
-						goto l443
-					}
-					position++
-					goto l442
-				l443:
-					position, tokenIndex = position442, tokenIndex442
-					if buffer[position] != rune('C') {
-						goto l430
-					}
-					position++
-				}
-			l442:
-				{
-					position444, tokenIndex444 := position, tokenIndex
-					if buffer[position] != rune('k') {
-						goto l445
-					}
-					position++
-					goto l444
-				l445:
-					position, tokenIndex = position444, tokenIndex444
-					if buffer[position] != rune('K') {
-						goto l430
-					}
-					position++
-				}
-			l444:
-				add(ruleInstructionPrefix, position431)
+				add(ruleLocalSymbol, position420)
 			}
 			return true
-		l430:
-			position, tokenIndex = position430, tokenIndex430
+		l419:
+			position, tokenIndex = position419, tokenIndex419
 			return false
 		},
-		/* 33 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
+		/* 32 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
 		func() bool {
-			position446, tokenIndex446 := position, tokenIndex
+			position445, tokenIndex445 := position, tokenIndex
 			{
-				position447 := position
+				position446 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l445
+				}
+				position++
+			l447:
 				{
 					position448, tokenIndex448 := position, tokenIndex
-					if !_rules[ruleInstructionPrefix]() {
-						goto l448
+					{
+						position449, tokenIndex449 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l450
+						}
+						position++
+						goto l449
+					l450:
+						position, tokenIndex = position449, tokenIndex449
+						if buffer[position] != rune('$') {
+							goto l448
+						}
+						position++
 					}
-					if !_rules[ruleWS]() {
-						goto l448
-					}
-					goto l449
+				l449:
+					goto l447
 				l448:
 					position, tokenIndex = position448, tokenIndex448
 				}
-			l449:
-				if !_rules[ruleInstructionName]() {
-					goto l446
-				}
-				{
-					position450, tokenIndex450 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l450
-					}
-					if !_rules[ruleInstructionArg]() {
-						goto l450
-					}
-				l452:
-					{
-						position453, tokenIndex453 := position, tokenIndex
-						{
-							position454, tokenIndex454 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l454
-							}
-							goto l455
-						l454:
-							position, tokenIndex = position454, tokenIndex454
-						}
-					l455:
-						if buffer[position] != rune(',') {
-							goto l453
-						}
-						position++
-						{
-							position456, tokenIndex456 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l456
-							}
-							goto l457
-						l456:
-							position, tokenIndex = position456, tokenIndex456
-						}
-					l457:
-						if !_rules[ruleInstructionArg]() {
-							goto l453
-						}
-						goto l452
-					l453:
-						position, tokenIndex = position453, tokenIndex453
-					}
-					goto l451
-				l450:
-					position, tokenIndex = position450, tokenIndex450
-				}
-			l451:
-				add(ruleInstruction, position447)
+				add(ruleLocalLabel, position446)
 			}
 			return true
-		l446:
-			position, tokenIndex = position446, tokenIndex446
+		l445:
+			position, tokenIndex = position445, tokenIndex445
 			return false
 		},
-		/* 34 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
+		/* 33 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
 		func() bool {
-			position458, tokenIndex458 := position, tokenIndex
+			position451, tokenIndex451 := position, tokenIndex
 			{
-				position459 := position
+				position452 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l451
+				}
+				position++
+			l453:
 				{
-					position460, tokenIndex460 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l461
+					position454, tokenIndex454 := position, tokenIndex
+					{
+						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 buffer[position] != rune('$') {
+							goto l454
+						}
+						position++
 					}
-					position++
-					goto l460
-				l461:
-					position, tokenIndex = position460, tokenIndex460
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+				l455:
+					goto l453
+				l454:
+					position, tokenIndex = position454, tokenIndex454
+				}
+				{
+					position457, tokenIndex457 := position, tokenIndex
+					if buffer[position] != rune('b') {
 						goto l458
 					}
 					position++
-				}
-			l460:
-			l462:
-				{
-					position463, tokenIndex463 := position, tokenIndex
-					{
-						position464, tokenIndex464 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l465
-						}
-						position++
-						goto l464
-					l465:
-						position, tokenIndex = position464, tokenIndex464
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l466
-						}
-						position++
-						goto l464
-					l466:
-						position, tokenIndex = position464, tokenIndex464
-						if buffer[position] != rune('.') {
-							goto l467
-						}
-						position++
-						goto l464
-					l467:
-						position, tokenIndex = position464, tokenIndex464
-						{
-							position468, tokenIndex468 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l469
-							}
-							position++
-							goto l468
-						l469:
-							position, tokenIndex = position468, tokenIndex468
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l463
-							}
-							position++
-						}
-					l468:
+					goto l457
+				l458:
+					position, tokenIndex = position457, tokenIndex457
+					if buffer[position] != rune('f') {
+						goto l451
 					}
-				l464:
-					goto l462
-				l463:
-					position, tokenIndex = position463, tokenIndex463
+					position++
 				}
-				{
-					position470, tokenIndex470 := position, tokenIndex
-					{
-						position472, tokenIndex472 := position, tokenIndex
-						if buffer[position] != rune('.') {
-							goto l473
-						}
-						position++
-						goto l472
-					l473:
-						position, tokenIndex = position472, tokenIndex472
-						if buffer[position] != rune('+') {
-							goto l474
-						}
-						position++
-						goto l472
-					l474:
-						position, tokenIndex = position472, tokenIndex472
-						if buffer[position] != rune('-') {
-							goto l470
-						}
-						position++
-					}
-				l472:
-					goto l471
-				l470:
-					position, tokenIndex = position470, tokenIndex470
-				}
-			l471:
-				add(ruleInstructionName, position459)
+			l457:
+				add(ruleLocalLabelRef, position452)
 			}
 			return true
-		l458:
-			position, tokenIndex = position458, tokenIndex458
+		l451:
+			position, tokenIndex = position451, tokenIndex451
 			return false
 		},
-		/* 35 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
+		/* 34 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
+		func() bool {
+			position459, tokenIndex459 := position, tokenIndex
+			{
+				position460 := position
+				{
+					position461, tokenIndex461 := position, tokenIndex
+					if buffer[position] != rune('n') {
+						goto l462
+					}
+					position++
+					goto l461
+				l462:
+					position, tokenIndex = position461, tokenIndex461
+					if buffer[position] != rune('N') {
+						goto l459
+					}
+					position++
+				}
+			l461:
+				{
+					position463, tokenIndex463 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l464
+					}
+					position++
+					goto l463
+				l464:
+					position, tokenIndex = position463, tokenIndex463
+					if buffer[position] != rune('O') {
+						goto l459
+					}
+					position++
+				}
+			l463:
+				{
+					position465, tokenIndex465 := position, tokenIndex
+					if buffer[position] != rune('t') {
+						goto l466
+					}
+					position++
+					goto l465
+				l466:
+					position, tokenIndex = position465, tokenIndex465
+					if buffer[position] != rune('T') {
+						goto l459
+					}
+					position++
+				}
+			l465:
+				{
+					position467, tokenIndex467 := position, tokenIndex
+					if buffer[position] != rune('r') {
+						goto l468
+					}
+					position++
+					goto l467
+				l468:
+					position, tokenIndex = position467, tokenIndex467
+					if buffer[position] != rune('R') {
+						goto l459
+					}
+					position++
+				}
+			l467:
+				{
+					position469, tokenIndex469 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l470
+					}
+					position++
+					goto l469
+				l470:
+					position, tokenIndex = position469, tokenIndex469
+					if buffer[position] != rune('A') {
+						goto l459
+					}
+					position++
+				}
+			l469:
+				{
+					position471, tokenIndex471 := position, tokenIndex
+					if buffer[position] != rune('c') {
+						goto l472
+					}
+					position++
+					goto l471
+				l472:
+					position, tokenIndex = position471, tokenIndex471
+					if buffer[position] != rune('C') {
+						goto l459
+					}
+					position++
+				}
+			l471:
+				{
+					position473, tokenIndex473 := position, tokenIndex
+					if buffer[position] != rune('k') {
+						goto l474
+					}
+					position++
+					goto l473
+				l474:
+					position, tokenIndex = position473, tokenIndex473
+					if buffer[position] != rune('K') {
+						goto l459
+					}
+					position++
+				}
+			l473:
+				add(ruleInstructionPrefix, position460)
+			}
+			return true
+		l459:
+			position, tokenIndex = position459, tokenIndex459
+			return false
+		},
+		/* 35 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
 		func() bool {
 			position475, tokenIndex475 := position, tokenIndex
 			{
 				position476 := position
 				{
 					position477, tokenIndex477 := position, tokenIndex
-					if !_rules[ruleIndirectionIndicator]() {
+					if !_rules[ruleInstructionPrefix]() {
+						goto l477
+					}
+					if !_rules[ruleWS]() {
 						goto l477
 					}
 					goto l478
@@ -3840,1797 +3879,1775 @@
 					position, tokenIndex = position477, tokenIndex477
 				}
 			l478:
+				if !_rules[ruleInstructionName]() {
+					goto l475
+				}
 				{
 					position479, tokenIndex479 := position, tokenIndex
-					if !_rules[ruleARMConstantTweak]() {
-						goto l480
+					if !_rules[ruleWS]() {
+						goto l479
 					}
-					goto l479
-				l480:
-					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l481
+					if !_rules[ruleInstructionArg]() {
+						goto l479
 					}
-					goto l479
 				l481:
-					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleLocalLabelRef]() {
-						goto l482
+					{
+						position482, tokenIndex482 := position, tokenIndex
+						{
+							position483, tokenIndex483 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l483
+							}
+							goto l484
+						l483:
+							position, tokenIndex = position483, tokenIndex483
+						}
+					l484:
+						if buffer[position] != rune(',') {
+							goto l482
+						}
+						position++
+						{
+							position485, tokenIndex485 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l485
+							}
+							goto l486
+						l485:
+							position, tokenIndex = position485, tokenIndex485
+						}
+					l486:
+						if !_rules[ruleInstructionArg]() {
+							goto l482
+						}
+						goto l481
+					l482:
+						position, tokenIndex = position482, tokenIndex482
 					}
-					goto l479
-				l482:
+					goto l480
+				l479:
 					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleTOCRefHigh]() {
-						goto l483
-					}
-					goto l479
-				l483:
-					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleTOCRefLow]() {
-						goto l484
-					}
-					goto l479
-				l484:
-					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleGOTLocation]() {
-						goto l485
-					}
-					goto l479
-				l485:
-					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleGOTAddress]() {
-						goto l486
-					}
-					goto l479
-				l486:
-					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleGOTSymbolOffset]() {
-						goto l487
-					}
-					goto l479
-				l487:
-					position, tokenIndex = position479, tokenIndex479
-					if !_rules[ruleMemoryRef]() {
-						goto l475
-					}
 				}
-			l479:
-			l488:
-				{
-					position489, tokenIndex489 := position, tokenIndex
-					if !_rules[ruleAVX512Token]() {
-						goto l489
-					}
-					goto l488
-				l489:
-					position, tokenIndex = position489, tokenIndex489
-				}
-				add(ruleInstructionArg, position476)
+			l480:
+				add(ruleInstruction, position476)
 			}
 			return true
 		l475:
 			position, tokenIndex = position475, tokenIndex475
 			return false
 		},
-		/* 36 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
+		/* 36 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
 		func() bool {
-			position490, tokenIndex490 := position, tokenIndex
+			position487, tokenIndex487 := position, tokenIndex
 			{
-				position491 := position
-				if buffer[position] != rune('$') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('G') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('S') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l490
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l490
-				}
-				position++
-				if !_rules[ruleLocalSymbol]() {
-					goto l490
-				}
-				add(ruleGOTLocation, position491)
-			}
-			return true
-		l490:
-			position, tokenIndex = position490, tokenIndex490
-			return false
-		},
-		/* 37 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
-		func() bool {
-			position492, tokenIndex492 := position, tokenIndex
-			{
-				position493 := position
-				if buffer[position] != rune('_') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('G') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('S') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('(') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('%') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('r') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('i') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune('p') {
-					goto l492
-				}
-				position++
-				if buffer[position] != rune(')') {
-					goto l492
-				}
-				position++
-				add(ruleGOTAddress, position493)
-			}
-			return true
-		l492:
-			position, tokenIndex = position492, tokenIndex492
-			return false
-		},
-		/* 38 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
-		func() bool {
-			position494, tokenIndex494 := position, tokenIndex
-			{
-				position495 := position
+				position488 := position
 				{
-					position496, tokenIndex496 := position, tokenIndex
-					if buffer[position] != rune('$') {
-						goto l497
+					position489, tokenIndex489 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l490
 					}
 					position++
-					if !_rules[ruleSymbolName]() {
-						goto l497
-					}
-					if buffer[position] != rune('@') {
-						goto l497
+					goto l489
+				l490:
+					position, tokenIndex = position489, tokenIndex489
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l487
 					}
 					position++
-					if buffer[position] != rune('G') {
-						goto l497
-					}
-					position++
-					if buffer[position] != rune('O') {
-						goto l497
-					}
-					position++
-					if buffer[position] != rune('T') {
-						goto l497
-					}
-					position++
+				}
+			l489:
+			l491:
+				{
+					position492, tokenIndex492 := position, tokenIndex
 					{
-						position498, tokenIndex498 := position, tokenIndex
-						if buffer[position] != rune('O') {
-							goto l498
-						}
-						position++
-						if buffer[position] != rune('F') {
-							goto l498
-						}
-						position++
-						if buffer[position] != rune('F') {
-							goto l498
-						}
-						position++
-						goto l499
-					l498:
-						position, tokenIndex = position498, tokenIndex498
-					}
-				l499:
-					goto l496
-				l497:
-					position, tokenIndex = position496, tokenIndex496
-					if buffer[position] != rune(':') {
-						goto l494
-					}
-					position++
-					{
-						position500, tokenIndex500 := position, tokenIndex
-						if buffer[position] != rune('g') {
-							goto l501
-						}
-						position++
-						goto l500
-					l501:
-						position, tokenIndex = position500, tokenIndex500
-						if buffer[position] != rune('G') {
+						position493, tokenIndex493 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
 							goto l494
 						}
 						position++
+						goto l493
+					l494:
+						position, tokenIndex = position493, tokenIndex493
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l495
+						}
+						position++
+						goto l493
+					l495:
+						position, tokenIndex = position493, tokenIndex493
+						if buffer[position] != rune('.') {
+							goto l496
+						}
+						position++
+						goto l493
+					l496:
+						position, tokenIndex = position493, tokenIndex493
+						{
+							position497, tokenIndex497 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l498
+							}
+							position++
+							goto l497
+						l498:
+							position, tokenIndex = position497, tokenIndex497
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l492
+							}
+							position++
+						}
+					l497:
 					}
-				l500:
+				l493:
+					goto l491
+				l492:
+					position, tokenIndex = position492, tokenIndex492
+				}
+				{
+					position499, tokenIndex499 := position, tokenIndex
 					{
-						position502, tokenIndex502 := position, tokenIndex
-						if buffer[position] != rune('o') {
+						position501, tokenIndex501 := position, tokenIndex
+						if buffer[position] != rune('.') {
+							goto l502
+						}
+						position++
+						goto l501
+					l502:
+						position, tokenIndex = position501, tokenIndex501
+						if buffer[position] != rune('+') {
 							goto l503
 						}
 						position++
-						goto l502
+						goto l501
 					l503:
-						position, tokenIndex = position502, tokenIndex502
-						if buffer[position] != rune('O') {
-							goto l494
+						position, tokenIndex = position501, tokenIndex501
+						if buffer[position] != rune('-') {
+							goto l499
 						}
 						position++
 					}
-				l502:
-					{
-						position504, tokenIndex504 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l505
-						}
-						position++
+				l501:
+					goto l500
+				l499:
+					position, tokenIndex = position499, tokenIndex499
+				}
+			l500:
+				add(ruleInstructionName, position488)
+			}
+			return true
+		l487:
+			position, tokenIndex = position487, tokenIndex487
+			return false
+		},
+		/* 37 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
+		func() bool {
+			position504, tokenIndex504 := position, tokenIndex
+			{
+				position505 := position
+				{
+					position506, tokenIndex506 := position, tokenIndex
+					if !_rules[ruleIndirectionIndicator]() {
+						goto l506
+					}
+					goto l507
+				l506:
+					position, tokenIndex = position506, tokenIndex506
+				}
+			l507:
+				{
+					position508, tokenIndex508 := position, tokenIndex
+					if !_rules[ruleARMConstantTweak]() {
+						goto l509
+					}
+					goto l508
+				l509:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l510
+					}
+					goto l508
+				l510:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleLocalLabelRef]() {
+						goto l511
+					}
+					goto l508
+				l511:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleTOCRefHigh]() {
+						goto l512
+					}
+					goto l508
+				l512:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleTOCRefLow]() {
+						goto l513
+					}
+					goto l508
+				l513:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleGOTLocation]() {
+						goto l514
+					}
+					goto l508
+				l514:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleGOTAddress]() {
+						goto l515
+					}
+					goto l508
+				l515:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleGOTSymbolOffset]() {
+						goto l516
+					}
+					goto l508
+				l516:
+					position, tokenIndex = position508, tokenIndex508
+					if !_rules[ruleMemoryRef]() {
 						goto l504
-					l505:
-						position, tokenIndex = position504, tokenIndex504
-						if buffer[position] != rune('T') {
-							goto l494
-						}
-						position++
 					}
-				l504:
-					if buffer[position] != rune(':') {
-						goto l494
+				}
+			l508:
+			l517:
+				{
+					position518, tokenIndex518 := position, tokenIndex
+					if !_rules[ruleAVX512Token]() {
+						goto l518
+					}
+					goto l517
+				l518:
+					position, tokenIndex = position518, tokenIndex518
+				}
+				add(ruleInstructionArg, position505)
+			}
+			return true
+		l504:
+			position, tokenIndex = position504, tokenIndex504
+			return false
+		},
+		/* 38 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
+		func() bool {
+			position519, tokenIndex519 := position, tokenIndex
+			{
+				position520 := position
+				if buffer[position] != rune('$') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('G') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('S') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l519
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l519
+				}
+				position++
+				if !_rules[ruleLocalSymbol]() {
+					goto l519
+				}
+				add(ruleGOTLocation, position520)
+			}
+			return true
+		l519:
+			position, tokenIndex = position519, tokenIndex519
+			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 {
+			position521, tokenIndex521 := position, tokenIndex
+			{
+				position522 := position
+				if buffer[position] != rune('_') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('G') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('S') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('(') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('%') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('r') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('i') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune('p') {
+					goto l521
+				}
+				position++
+				if buffer[position] != rune(')') {
+					goto l521
+				}
+				position++
+				add(ruleGOTAddress, position522)
+			}
+			return true
+		l521:
+			position, tokenIndex = position521, tokenIndex521
+			return false
+		},
+		/* 40 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
+		func() bool {
+			position523, tokenIndex523 := position, tokenIndex
+			{
+				position524 := position
+				{
+					position525, tokenIndex525 := position, tokenIndex
+					if buffer[position] != rune('$') {
+						goto l526
 					}
 					position++
 					if !_rules[ruleSymbolName]() {
-						goto l494
+						goto l526
 					}
-				}
-			l496:
-				add(ruleGOTSymbolOffset, position495)
-			}
-			return true
-		l494:
-			position, tokenIndex = position494, tokenIndex494
-			return false
-		},
-		/* 39 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
-		func() bool {
-			position506, tokenIndex506 := position, tokenIndex
-			{
-				position507 := position
-				{
-					position508, tokenIndex508 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l508
-					}
-					goto l509
-				l508:
-					position, tokenIndex = position508, tokenIndex508
-				}
-			l509:
-				if buffer[position] != rune('{') {
-					goto l506
-				}
-				position++
-				{
-					position510, tokenIndex510 := position, tokenIndex
-					if buffer[position] != rune('%') {
-						goto l510
+					if buffer[position] != rune('@') {
+						goto l526
 					}
 					position++
-					goto l511
-				l510:
-					position, tokenIndex = position510, tokenIndex510
-				}
-			l511:
-			l512:
-				{
-					position513, tokenIndex513 := position, tokenIndex
-					{
-						position514, tokenIndex514 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l515
-						}
-						position++
-						goto l514
-					l515:
-						position, tokenIndex = position514, tokenIndex514
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l513
-						}
-						position++
-					}
-				l514:
-					goto l512
-				l513:
-					position, tokenIndex = position513, tokenIndex513
-				}
-				if buffer[position] != rune('}') {
-					goto l506
-				}
-				position++
-				add(ruleAVX512Token, position507)
-			}
-			return true
-		l506:
-			position, tokenIndex = position506, tokenIndex506
-			return false
-		},
-		/* 40 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
-		func() bool {
-			position516, tokenIndex516 := position, tokenIndex
-			{
-				position517 := position
-				if buffer[position] != rune('.') {
-					goto l516
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l516
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l516
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l516
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l516
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l516
-				}
-				position++
-				{
-					position518, tokenIndex518 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l519
+					if buffer[position] != rune('G') {
+						goto l526
 					}
 					position++
-					if buffer[position] != rune('b') {
-						goto l519
+					if buffer[position] != rune('O') {
+						goto l526
 					}
 					position++
-					goto l518
-				l519:
-					position, tokenIndex = position518, tokenIndex518
-					if buffer[position] != rune('.') {
-						goto l516
-					}
-					position++
-					if buffer[position] != rune('L') {
-						goto l516
+					if buffer[position] != rune('T') {
+						goto l526
 					}
 					position++
 					{
-						position522, tokenIndex522 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
+						position527, tokenIndex527 := position, tokenIndex
+						if buffer[position] != rune('O') {
+							goto l527
+						}
+						position++
+						if buffer[position] != rune('F') {
+							goto l527
+						}
+						position++
+						if buffer[position] != rune('F') {
+							goto l527
+						}
+						position++
+						goto l528
+					l527:
+						position, tokenIndex = position527, tokenIndex527
+					}
+				l528:
+					goto l525
+				l526:
+					position, tokenIndex = position525, tokenIndex525
+					if buffer[position] != rune(':') {
+						goto l523
+					}
+					position++
+					{
+						position529, tokenIndex529 := position, tokenIndex
+						if buffer[position] != rune('g') {
+							goto l530
+						}
+						position++
+						goto l529
+					l530:
+						position, tokenIndex = position529, tokenIndex529
+						if buffer[position] != rune('G') {
 							goto l523
 						}
 						position++
-						goto l522
-					l523:
-						position, tokenIndex = position522, tokenIndex522
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l524
-						}
-						position++
-						goto l522
-					l524:
-						position, tokenIndex = position522, tokenIndex522
-						if buffer[position] != rune('_') {
-							goto l525
-						}
-						position++
-						goto l522
-					l525:
-						position, tokenIndex = position522, tokenIndex522
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l516
-						}
-						position++
 					}
-				l522:
-				l520:
+				l529:
 					{
-						position521, tokenIndex521 := position, tokenIndex
-						{
-							position526, tokenIndex526 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l527
-							}
-							position++
-							goto l526
-						l527:
-							position, tokenIndex = position526, tokenIndex526
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l528
-							}
-							position++
-							goto l526
-						l528:
-							position, tokenIndex = position526, tokenIndex526
-							if buffer[position] != rune('_') {
-								goto l529
-							}
-							position++
-							goto l526
-						l529:
-							position, tokenIndex = position526, tokenIndex526
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l521
-							}
-							position++
+						position531, tokenIndex531 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l532
 						}
-					l526:
-						goto l520
-					l521:
-						position, tokenIndex = position521, tokenIndex521
-					}
-				}
-			l518:
-				if buffer[position] != rune('@') {
-					goto l516
-				}
-				position++
-				{
-					position530, tokenIndex530 := position, tokenIndex
-					if buffer[position] != rune('h') {
+						position++
 						goto l531
+					l532:
+						position, tokenIndex = position531, tokenIndex531
+						if buffer[position] != rune('O') {
+							goto l523
+						}
+						position++
 					}
-					position++
-					goto l530
 				l531:
-					position, tokenIndex = position530, tokenIndex530
-					if buffer[position] != rune('H') {
-						goto l516
-					}
-					position++
-				}
-			l530:
-				{
-					position532, tokenIndex532 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l533
-					}
-					position++
-					goto l532
-				l533:
-					position, tokenIndex = position532, tokenIndex532
-					if buffer[position] != rune('A') {
-						goto l516
-					}
-					position++
-				}
-			l532:
-				add(ruleTOCRefHigh, position517)
-			}
-			return true
-		l516:
-			position, tokenIndex = position516, tokenIndex516
-			return false
-		},
-		/* 41 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
-		func() bool {
-			position534, tokenIndex534 := position, tokenIndex
-			{
-				position535 := position
-				if buffer[position] != rune('.') {
-					goto l534
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l534
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l534
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l534
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l534
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l534
-				}
-				position++
-				{
-					position536, tokenIndex536 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l537
-					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l537
-					}
-					position++
-					goto l536
-				l537:
-					position, tokenIndex = position536, tokenIndex536
-					if buffer[position] != rune('.') {
-						goto l534
-					}
-					position++
-					if buffer[position] != rune('L') {
-						goto l534
-					}
-					position++
 					{
-						position540, tokenIndex540 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l541
-						}
-						position++
-						goto l540
-					l541:
-						position, tokenIndex = position540, tokenIndex540
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l542
-						}
-						position++
-						goto l540
-					l542:
-						position, tokenIndex = position540, tokenIndex540
-						if buffer[position] != rune('_') {
-							goto l543
-						}
-						position++
-						goto l540
-					l543:
-						position, tokenIndex = position540, tokenIndex540
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position533, tokenIndex533 := position, tokenIndex
+						if buffer[position] != rune('t') {
 							goto l534
 						}
 						position++
-					}
-				l540:
-				l538:
-					{
-						position539, tokenIndex539 := position, tokenIndex
-						{
-							position544, tokenIndex544 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l545
-							}
-							position++
-							goto l544
-						l545:
-							position, tokenIndex = position544, tokenIndex544
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l546
-							}
-							position++
-							goto l544
-						l546:
-							position, tokenIndex = position544, tokenIndex544
-							if buffer[position] != rune('_') {
-								goto l547
-							}
-							position++
-							goto l544
-						l547:
-							position, tokenIndex = position544, tokenIndex544
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l539
-							}
-							position++
+						goto l533
+					l534:
+						position, tokenIndex = position533, tokenIndex533
+						if buffer[position] != rune('T') {
+							goto l523
 						}
-					l544:
-						goto l538
-					l539:
-						position, tokenIndex = position539, tokenIndex539
+						position++
 					}
-				}
-			l536:
-				if buffer[position] != rune('@') {
-					goto l534
-				}
-				position++
-				{
-					position548, tokenIndex548 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l549
+				l533:
+					if buffer[position] != rune(':') {
+						goto l523
 					}
 					position++
-					goto l548
-				l549:
-					position, tokenIndex = position548, tokenIndex548
-					if buffer[position] != rune('L') {
-						goto l534
+					if !_rules[ruleSymbolName]() {
+						goto l523
 					}
-					position++
 				}
-			l548:
-				add(ruleTOCRefLow, position535)
+			l525:
+				add(ruleGOTSymbolOffset, position524)
 			}
 			return true
-		l534:
-			position, tokenIndex = position534, tokenIndex534
+		l523:
+			position, tokenIndex = position523, tokenIndex523
 			return false
 		},
-		/* 42 IndirectionIndicator <- <'*'> */
+		/* 41 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
 		func() bool {
-			position550, tokenIndex550 := position, tokenIndex
+			position535, tokenIndex535 := position, tokenIndex
 			{
-				position551 := position
-				if buffer[position] != rune('*') {
-					goto l550
-				}
-				position++
-				add(ruleIndirectionIndicator, position551)
-			}
-			return true
-		l550:
-			position, tokenIndex = position550, tokenIndex550
-			return false
-		},
-		/* 43 Float <- <([0-9]+ '.' [0-9]*)> */
-		func() bool {
-			position552, tokenIndex552 := position, tokenIndex
-			{
-				position553 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l552
-				}
-				position++
-			l554:
+				position536 := position
 				{
-					position555, tokenIndex555 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l555
+					position537, tokenIndex537 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l537
 					}
-					position++
-					goto l554
-				l555:
-					position, tokenIndex = position555, tokenIndex555
+					goto l538
+				l537:
+					position, tokenIndex = position537, tokenIndex537
 				}
-				if buffer[position] != rune('.') {
-					goto l552
+			l538:
+				if buffer[position] != rune('{') {
+					goto l535
 				}
 				position++
-			l556:
 				{
-					position557, tokenIndex557 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l557
-					}
-					position++
-					goto l556
-				l557:
-					position, tokenIndex = position557, tokenIndex557
-				}
-				add(ruleFloat, position553)
-			}
-			return true
-		l552:
-			position, tokenIndex = position552, tokenIndex552
-			return false
-		},
-		/* 44 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
-		func() bool {
-			position558, tokenIndex558 := position, tokenIndex
-			{
-				position559 := position
-				{
-					position560, tokenIndex560 := position, tokenIndex
+					position539, tokenIndex539 := position, tokenIndex
 					if buffer[position] != rune('%') {
-						goto l561
+						goto l539
+					}
+					position++
+					goto l540
+				l539:
+					position, tokenIndex = position539, tokenIndex539
+				}
+			l540:
+			l541:
+				{
+					position542, tokenIndex542 := position, tokenIndex
+					{
+						position543, tokenIndex543 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l544
+						}
+						position++
+						goto l543
+					l544:
+						position, tokenIndex = position543, tokenIndex543
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l542
+						}
+						position++
+					}
+				l543:
+					goto l541
+				l542:
+					position, tokenIndex = position542, tokenIndex542
+				}
+				if buffer[position] != rune('}') {
+					goto l535
+				}
+				position++
+				add(ruleAVX512Token, position536)
+			}
+			return true
+		l535:
+			position, tokenIndex = position535, tokenIndex535
+			return false
+		},
+		/* 42 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
+		func() bool {
+			position545, tokenIndex545 := position, tokenIndex
+			{
+				position546 := position
+				if buffer[position] != rune('.') {
+					goto l545
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l545
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l545
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l545
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l545
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l545
+				}
+				position++
+				{
+					position547, tokenIndex547 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l548
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l548
+					}
+					position++
+					goto l547
+				l548:
+					position, tokenIndex = position547, tokenIndex547
+					if buffer[position] != rune('.') {
+						goto l545
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l545
 					}
 					position++
 					{
-						position562, tokenIndex562 := position, tokenIndex
+						position551, tokenIndex551 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l563
+							goto l552
 						}
 						position++
-						goto l562
-					l563:
-						position, tokenIndex = position562, tokenIndex562
+						goto l551
+					l552:
+						position, tokenIndex = position551, tokenIndex551
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l561
+							goto l553
+						}
+						position++
+						goto l551
+					l553:
+						position, tokenIndex = position551, tokenIndex551
+						if buffer[position] != rune('_') {
+							goto l554
+						}
+						position++
+						goto l551
+					l554:
+						position, tokenIndex = position551, tokenIndex551
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l545
 						}
 						position++
 					}
-				l562:
-				l564:
+				l551:
+				l549:
 					{
-						position565, tokenIndex565 := position, tokenIndex
+						position550, tokenIndex550 := position, tokenIndex
 						{
-							position566, tokenIndex566 := position, tokenIndex
+							position555, tokenIndex555 := position, tokenIndex
 							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l567
+								goto l556
 							}
 							position++
-							goto l566
-						l567:
-							position, tokenIndex = position566, tokenIndex566
+							goto l555
+						l556:
+							position, tokenIndex = position555, tokenIndex555
 							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l568
+								goto l557
 							}
 							position++
-							goto l566
-						l568:
-							position, tokenIndex = position566, tokenIndex566
-							{
-								position569, tokenIndex569 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l570
-								}
-								position++
-								goto l569
-							l570:
-								position, tokenIndex = position569, tokenIndex569
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l565
-								}
-								position++
+							goto l555
+						l557:
+							position, tokenIndex = position555, tokenIndex555
+							if buffer[position] != rune('_') {
+								goto l558
 							}
-						l569:
+							position++
+							goto l555
+						l558:
+							position, tokenIndex = position555, tokenIndex555
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l550
+							}
+							position++
 						}
-					l566:
-						goto l564
-					l565:
-						position, tokenIndex = position565, tokenIndex565
+					l555:
+						goto l549
+					l550:
+						position, tokenIndex = position550, tokenIndex550
 					}
-					goto l560
-				l561:
-					position, tokenIndex = position560, tokenIndex560
+				}
+			l547:
+				if buffer[position] != rune('@') {
+					goto l545
+				}
+				position++
+				{
+					position559, tokenIndex559 := position, tokenIndex
+					if buffer[position] != rune('h') {
+						goto l560
+					}
+					position++
+					goto l559
+				l560:
+					position, tokenIndex = position559, tokenIndex559
+					if buffer[position] != rune('H') {
+						goto l545
+					}
+					position++
+				}
+			l559:
+				{
+					position561, tokenIndex561 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l562
+					}
+					position++
+					goto l561
+				l562:
+					position, tokenIndex = position561, tokenIndex561
+					if buffer[position] != rune('A') {
+						goto l545
+					}
+					position++
+				}
+			l561:
+				add(ruleTOCRefHigh, position546)
+			}
+			return true
+		l545:
+			position, tokenIndex = position545, tokenIndex545
+			return false
+		},
+		/* 43 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		func() bool {
+			position563, tokenIndex563 := position, tokenIndex
+			{
+				position564 := position
+				if buffer[position] != rune('.') {
+					goto l563
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l563
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l563
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l563
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l563
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l563
+				}
+				position++
+				{
+					position565, tokenIndex565 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l566
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l566
+					}
+					position++
+					goto l565
+				l566:
+					position, tokenIndex = position565, tokenIndex565
+					if buffer[position] != rune('.') {
+						goto l563
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l563
+					}
+					position++
 					{
-						position572, tokenIndex572 := position, tokenIndex
-						if buffer[position] != rune('$') {
+						position569, tokenIndex569 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l570
+						}
+						position++
+						goto l569
+					l570:
+						position, tokenIndex = position569, tokenIndex569
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l571
+						}
+						position++
+						goto l569
+					l571:
+						position, tokenIndex = position569, tokenIndex569
+						if buffer[position] != rune('_') {
 							goto l572
 						}
 						position++
-						goto l573
+						goto l569
 					l572:
-						position, tokenIndex = position572, tokenIndex572
-					}
-				l573:
-					{
-						position574, tokenIndex574 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l575
-						}
-						if !_rules[ruleOffset]() {
-							goto l575
-						}
-						goto l574
-					l575:
-						position, tokenIndex = position574, tokenIndex574
-						if !_rules[ruleOffset]() {
-							goto l571
-						}
-					}
-				l574:
-					goto l560
-				l571:
-					position, tokenIndex = position560, tokenIndex560
-					if buffer[position] != rune('#') {
-						goto l576
-					}
-					position++
-					if !_rules[ruleFloat]() {
-						goto l576
-					}
-					goto l560
-				l576:
-					position, tokenIndex = position560, tokenIndex560
-					if buffer[position] != rune('#') {
-						goto l577
-					}
-					position++
-					if !_rules[ruleOffset]() {
-						goto l577
-					}
-					{
-						position578, tokenIndex578 := position, tokenIndex
-						if buffer[position] != rune('*') {
-							goto l578
-						}
-						position++
+						position, tokenIndex = position569, tokenIndex569
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l578
+							goto l563
 						}
 						position++
-					l580:
-						{
-							position581, tokenIndex581 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l581
-							}
-							position++
-							goto l580
-						l581:
-							position, tokenIndex = position581, tokenIndex581
-						}
-						{
-							position582, tokenIndex582 := position, tokenIndex
-							if buffer[position] != rune('-') {
-								goto l582
-							}
-							position++
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l582
-							}
-							position++
-						l584:
-							{
-								position585, tokenIndex585 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l585
-								}
-								position++
-								goto l584
-							l585:
-								position, tokenIndex = position585, tokenIndex585
-							}
-							goto l583
-						l582:
-							position, tokenIndex = position582, tokenIndex582
-						}
-					l583:
-						goto l579
-					l578:
-						position, tokenIndex = position578, tokenIndex578
 					}
-				l579:
-					goto l560
-				l577:
-					position, tokenIndex = position560, tokenIndex560
-					if buffer[position] != rune('#') {
-						goto l586
-					}
-					position++
+				l569:
+				l567:
 					{
-						position587, tokenIndex587 := position, tokenIndex
-						if buffer[position] != rune('~') {
-							goto l587
+						position568, tokenIndex568 := position, tokenIndex
+						{
+							position573, tokenIndex573 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l574
+							}
+							position++
+							goto l573
+						l574:
+							position, tokenIndex = position573, tokenIndex573
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l575
+							}
+							position++
+							goto l573
+						l575:
+							position, tokenIndex = position573, tokenIndex573
+							if buffer[position] != rune('_') {
+								goto l576
+							}
+							position++
+							goto l573
+						l576:
+							position, tokenIndex = position573, tokenIndex573
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l568
+							}
+							position++
 						}
-						position++
-						goto l588
-					l587:
-						position, tokenIndex = position587, tokenIndex587
+					l573:
+						goto l567
+					l568:
+						position, tokenIndex = position568, tokenIndex568
 					}
-				l588:
-					if buffer[position] != rune('(') {
-						goto l586
+				}
+			l565:
+				if buffer[position] != rune('@') {
+					goto l563
+				}
+				position++
+				{
+					position577, tokenIndex577 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l578
 					}
 					position++
+					goto l577
+				l578:
+					position, tokenIndex = position577, tokenIndex577
+					if buffer[position] != rune('L') {
+						goto l563
+					}
+					position++
+				}
+			l577:
+				add(ruleTOCRefLow, position564)
+			}
+			return true
+		l563:
+			position, tokenIndex = position563, tokenIndex563
+			return false
+		},
+		/* 44 IndirectionIndicator <- <'*'> */
+		func() bool {
+			position579, tokenIndex579 := position, tokenIndex
+			{
+				position580 := position
+				if buffer[position] != rune('*') {
+					goto l579
+				}
+				position++
+				add(ruleIndirectionIndicator, position580)
+			}
+			return true
+		l579:
+			position, tokenIndex = position579, tokenIndex579
+			return false
+		},
+		/* 45 Float <- <([0-9]+ '.' [0-9]*)> */
+		func() bool {
+			position581, tokenIndex581 := position, tokenIndex
+			{
+				position582 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l581
+				}
+				position++
+			l583:
+				{
+					position584, tokenIndex584 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l584
+					}
+					position++
+					goto l583
+				l584:
+					position, tokenIndex = position584, tokenIndex584
+				}
+				if buffer[position] != rune('.') {
+					goto l581
+				}
+				position++
+			l585:
+				{
+					position586, tokenIndex586 := position, tokenIndex
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l586
 					}
 					position++
-					{
-						position589, tokenIndex589 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l589
-						}
+					goto l585
+				l586:
+					position, tokenIndex = position586, tokenIndex586
+				}
+				add(ruleFloat, position582)
+			}
+			return true
+		l581:
+			position, tokenIndex = position581, tokenIndex581
+			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 {
+			position587, tokenIndex587 := position, tokenIndex
+			{
+				position588 := position
+				{
+					position589, tokenIndex589 := position, tokenIndex
+					if buffer[position] != rune('%') {
 						goto l590
-					l589:
-						position, tokenIndex = position589, tokenIndex589
-					}
-				l590:
-					if buffer[position] != rune('<') {
-						goto l586
-					}
-					position++
-					if buffer[position] != rune('<') {
-						goto l586
 					}
 					position++
 					{
 						position591, tokenIndex591 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l591
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l592
 						}
-						goto l592
-					l591:
+						position++
+						goto l591
+					l592:
 						position, tokenIndex = position591, tokenIndex591
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l590
+						}
+						position++
 					}
-				l592:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l586
-					}
-					position++
-					if buffer[position] != rune(')') {
-						goto l586
-					}
-					position++
-					goto l560
-				l586:
-					position, tokenIndex = position560, tokenIndex560
-					if !_rules[ruleARMRegister]() {
-						goto l558
-					}
-				}
-			l560:
-				{
-					position593, tokenIndex593 := position, tokenIndex
+				l591:
+				l593:
 					{
 						position594, tokenIndex594 := position, tokenIndex
-						if buffer[position] != rune('f') {
+						{
+							position595, tokenIndex595 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l596
+							}
+							position++
 							goto l595
+						l596:
+							position, tokenIndex = position595, tokenIndex595
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l597
+							}
+							position++
+							goto l595
+						l597:
+							position, tokenIndex = position595, tokenIndex595
+							{
+								position598, tokenIndex598 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l599
+								}
+								position++
+								goto l598
+							l599:
+								position, tokenIndex = position598, tokenIndex598
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l594
+								}
+								position++
+							}
+						l598:
 						}
-						position++
-						goto l594
 					l595:
+						goto l593
+					l594:
 						position, tokenIndex = position594, tokenIndex594
-						if buffer[position] != rune('b') {
-							goto l596
-						}
-						position++
-						goto l594
-					l596:
-						position, tokenIndex = position594, tokenIndex594
-						if buffer[position] != rune(':') {
-							goto l597
-						}
-						position++
-						goto l594
-					l597:
-						position, tokenIndex = position594, tokenIndex594
-						if buffer[position] != rune('(') {
-							goto l598
-						}
-						position++
-						goto l594
-					l598:
-						position, tokenIndex = position594, tokenIndex594
-						if buffer[position] != rune('+') {
-							goto l599
-						}
-						position++
-						goto l594
-					l599:
-						position, tokenIndex = position594, tokenIndex594
-						if buffer[position] != rune('-') {
-							goto l593
-						}
-						position++
 					}
-				l594:
-					goto l558
-				l593:
-					position, tokenIndex = position593, tokenIndex593
-				}
-				add(ruleRegisterOrConstant, position559)
-			}
-			return true
-		l558:
-			position, tokenIndex = position558, tokenIndex558
-			return false
-		},
-		/* 45 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9]))> */
-		func() bool {
-			position600, tokenIndex600 := position, tokenIndex
-			{
-				position601 := position
-				{
-					position602, tokenIndex602 := position, tokenIndex
+					goto l589
+				l590:
+					position, tokenIndex = position589, tokenIndex589
 					{
-						position604, tokenIndex604 := position, tokenIndex
-						{
-							position606, tokenIndex606 := position, tokenIndex
-							if buffer[position] != rune('u') {
-								goto l607
-							}
-							position++
-							goto l606
-						l607:
-							position, tokenIndex = position606, tokenIndex606
-							if buffer[position] != rune('s') {
-								goto l605
-							}
-							position++
+						position601, tokenIndex601 := position, tokenIndex
+						if buffer[position] != rune('$') {
+							goto l601
 						}
-					l606:
-						{
-							position608, tokenIndex608 := position, tokenIndex
-							if buffer[position] != rune('x') {
-								goto l609
-							}
-							position++
-							goto l608
-						l609:
-							position, tokenIndex = position608, tokenIndex608
-							if buffer[position] != rune('X') {
-								goto l605
-							}
-							position++
+						position++
+						goto l602
+					l601:
+						position, tokenIndex = position601, tokenIndex601
+					}
+				l602:
+					{
+						position603, tokenIndex603 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l604
 						}
-					l608:
+						if !_rules[ruleOffset]() {
+							goto l604
+						}
+						goto l603
+					l604:
+						position, tokenIndex = position603, tokenIndex603
+						if !_rules[ruleOffset]() {
+							goto l600
+						}
+					}
+				l603:
+					goto l589
+				l600:
+					position, tokenIndex = position589, tokenIndex589
+					if buffer[position] != rune('#') {
+						goto l605
+					}
+					position++
+					if !_rules[ruleFloat]() {
+						goto l605
+					}
+					goto l589
+				l605:
+					position, tokenIndex = position589, tokenIndex589
+					if buffer[position] != rune('#') {
+						goto l606
+					}
+					position++
+					if !_rules[ruleOffset]() {
+						goto l606
+					}
+					{
+						position607, tokenIndex607 := position, tokenIndex
+						if buffer[position] != rune('*') {
+							goto l607
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l607
+						}
+						position++
+					l609:
 						{
 							position610, tokenIndex610 := position, tokenIndex
-							if buffer[position] != rune('t') {
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l610
+							}
+							position++
+							goto l609
+						l610:
+							position, tokenIndex = position610, tokenIndex610
+						}
+						{
+							position611, tokenIndex611 := position, tokenIndex
+							if buffer[position] != rune('-') {
 								goto l611
 							}
 							position++
-							goto l610
-						l611:
-							position, tokenIndex = position610, tokenIndex610
-							if buffer[position] != rune('T') {
-								goto l605
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l611
 							}
 							position++
-						}
-					l610:
-						{
-							position612, tokenIndex612 := position, tokenIndex
-							if buffer[position] != rune('x') {
-								goto l613
-							}
-							position++
-							goto l612
 						l613:
-							position, tokenIndex = position612, tokenIndex612
-							if buffer[position] != rune('w') {
-								goto l614
+							{
+								position614, tokenIndex614 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l614
+								}
+								position++
+								goto l613
+							l614:
+								position, tokenIndex = position614, tokenIndex614
 							}
-							position++
 							goto l612
-						l614:
-							position, tokenIndex = position612, tokenIndex612
-							if buffer[position] != rune('h') {
-								goto l615
-							}
-							position++
-							goto l612
-						l615:
-							position, tokenIndex = position612, tokenIndex612
-							if buffer[position] != rune('b') {
-								goto l605
-							}
-							position++
+						l611:
+							position, tokenIndex = position611, tokenIndex611
 						}
 					l612:
-						goto l604
-					l605:
-						position, tokenIndex = position604, tokenIndex604
-						{
-							position617, tokenIndex617 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l618
-							}
-							position++
-							goto l617
-						l618:
-							position, tokenIndex = position617, tokenIndex617
-							if buffer[position] != rune('L') {
-								goto l616
-							}
-							position++
+						goto l608
+					l607:
+						position, tokenIndex = position607, tokenIndex607
+					}
+				l608:
+					goto l589
+				l606:
+					position, tokenIndex = position589, tokenIndex589
+					if buffer[position] != rune('#') {
+						goto l615
+					}
+					position++
+					{
+						position616, tokenIndex616 := position, tokenIndex
+						if buffer[position] != rune('~') {
+							goto l616
 						}
-					l617:
-						{
-							position619, tokenIndex619 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l620
-							}
-							position++
-							goto l619
-						l620:
-							position, tokenIndex = position619, tokenIndex619
-							if buffer[position] != rune('S') {
-								goto l616
-							}
-							position++
-						}
-					l619:
-						{
-							position621, tokenIndex621 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l622
-							}
-							position++
-							goto l621
-						l622:
-							position, tokenIndex = position621, tokenIndex621
-							if buffer[position] != rune('L') {
-								goto l616
-							}
-							position++
-						}
-					l621:
-						goto l604
+						position++
+						goto l617
 					l616:
-						position, tokenIndex = position604, tokenIndex604
-						{
-							position624, tokenIndex624 := position, tokenIndex
-							if buffer[position] != rune('l') {
-								goto l625
-							}
-							position++
+						position, tokenIndex = position616, tokenIndex616
+					}
+				l617:
+					if buffer[position] != rune('(') {
+						goto l615
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l615
+					}
+					position++
+					{
+						position618, tokenIndex618 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l618
+						}
+						goto l619
+					l618:
+						position, tokenIndex = position618, tokenIndex618
+					}
+				l619:
+					if buffer[position] != rune('<') {
+						goto l615
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l615
+					}
+					position++
+					{
+						position620, tokenIndex620 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l620
+						}
+						goto l621
+					l620:
+						position, tokenIndex = position620, tokenIndex620
+					}
+				l621:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l615
+					}
+					position++
+					if buffer[position] != rune(')') {
+						goto l615
+					}
+					position++
+					goto l589
+				l615:
+					position, tokenIndex = position589, tokenIndex589
+					if !_rules[ruleARMRegister]() {
+						goto l587
+					}
+				}
+			l589:
+				{
+					position622, tokenIndex622 := position, tokenIndex
+					{
+						position623, tokenIndex623 := position, tokenIndex
+						if buffer[position] != rune('f') {
 							goto l624
-						l625:
-							position, tokenIndex = position624, tokenIndex624
-							if buffer[position] != rune('L') {
-								goto l623
-							}
-							position++
 						}
+						position++
+						goto l623
 					l624:
-						{
-							position626, tokenIndex626 := position, tokenIndex
-							if buffer[position] != rune('s') {
-								goto l627
-							}
-							position++
+						position, tokenIndex = position623, tokenIndex623
+						if buffer[position] != rune('b') {
+							goto l625
+						}
+						position++
+						goto l623
+					l625:
+						position, tokenIndex = position623, tokenIndex623
+						if buffer[position] != rune(':') {
 							goto l626
-						l627:
-							position, tokenIndex = position626, tokenIndex626
-							if buffer[position] != rune('S') {
-								goto l623
-							}
-							position++
 						}
+						position++
+						goto l623
 					l626:
-						{
-							position628, tokenIndex628 := position, tokenIndex
-							if buffer[position] != rune('r') {
-								goto l629
-							}
-							position++
+						position, tokenIndex = position623, tokenIndex623
+						if buffer[position] != rune('(') {
+							goto l627
+						}
+						position++
+						goto l623
+					l627:
+						position, tokenIndex = position623, tokenIndex623
+						if buffer[position] != rune('+') {
 							goto l628
-						l629:
-							position, tokenIndex = position628, tokenIndex628
-							if buffer[position] != rune('R') {
-								goto l623
-							}
-							position++
 						}
+						position++
+						goto l623
 					l628:
-						goto l604
-					l623:
-						position, tokenIndex = position604, tokenIndex604
-						{
-							position631, tokenIndex631 := position, tokenIndex
-							if buffer[position] != rune('r') {
-								goto l632
-							}
-							position++
-							goto l631
-						l632:
-							position, tokenIndex = position631, tokenIndex631
-							if buffer[position] != rune('R') {
-								goto l630
-							}
-							position++
+						position, tokenIndex = position623, tokenIndex623
+						if buffer[position] != rune('-') {
+							goto l622
 						}
-					l631:
-						{
-							position633, tokenIndex633 := position, tokenIndex
-							if buffer[position] != rune('o') {
-								goto l634
-							}
-							position++
-							goto l633
-						l634:
-							position, tokenIndex = position633, tokenIndex633
-							if buffer[position] != rune('O') {
-								goto l630
-							}
-							position++
-						}
-					l633:
+						position++
+					}
+				l623:
+					goto l587
+				l622:
+					position, tokenIndex = position622, tokenIndex622
+				}
+				add(ruleRegisterOrConstant, position588)
+			}
+			return true
+		l587:
+			position, tokenIndex = position587, tokenIndex587
+			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'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9]))> */
+		func() bool {
+			position629, tokenIndex629 := position, tokenIndex
+			{
+				position630 := position
+				{
+					position631, tokenIndex631 := position, tokenIndex
+					{
+						position633, tokenIndex633 := position, tokenIndex
 						{
 							position635, tokenIndex635 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							if buffer[position] != rune('u') {
 								goto l636
 							}
 							position++
 							goto l635
 						l636:
 							position, tokenIndex = position635, tokenIndex635
-							if buffer[position] != rune('R') {
-								goto l630
+							if buffer[position] != rune('s') {
+								goto l634
 							}
 							position++
 						}
 					l635:
-						goto l604
-					l630:
-						position, tokenIndex = position604, tokenIndex604
 						{
 							position637, tokenIndex637 := position, tokenIndex
-							if buffer[position] != rune('a') {
+							if buffer[position] != rune('x') {
 								goto l638
 							}
 							position++
 							goto l637
 						l638:
 							position, tokenIndex = position637, tokenIndex637
-							if buffer[position] != rune('A') {
-								goto l603
+							if buffer[position] != rune('X') {
+								goto l634
 							}
 							position++
 						}
 					l637:
 						{
 							position639, tokenIndex639 := position, tokenIndex
-							if buffer[position] != rune('s') {
+							if buffer[position] != rune('t') {
 								goto l640
 							}
 							position++
 							goto l639
 						l640:
 							position, tokenIndex = position639, tokenIndex639
-							if buffer[position] != rune('S') {
-								goto l603
+							if buffer[position] != rune('T') {
+								goto l634
 							}
 							position++
 						}
 					l639:
 						{
 							position641, tokenIndex641 := position, tokenIndex
-							if buffer[position] != rune('r') {
+							if buffer[position] != rune('x') {
 								goto l642
 							}
 							position++
 							goto l641
 						l642:
 							position, tokenIndex = position641, tokenIndex641
-							if buffer[position] != rune('R') {
-								goto l603
+							if buffer[position] != rune('w') {
+								goto l643
+							}
+							position++
+							goto l641
+						l643:
+							position, tokenIndex = position641, tokenIndex641
+							if buffer[position] != rune('h') {
+								goto l644
+							}
+							position++
+							goto l641
+						l644:
+							position, tokenIndex = position641, tokenIndex641
+							if buffer[position] != rune('b') {
+								goto l634
 							}
 							position++
 						}
 					l641:
+						goto l633
+					l634:
+						position, tokenIndex = position633, tokenIndex633
+						{
+							position646, tokenIndex646 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l647
+							}
+							position++
+							goto l646
+						l647:
+							position, tokenIndex = position646, tokenIndex646
+							if buffer[position] != rune('L') {
+								goto l645
+							}
+							position++
+						}
+					l646:
+						{
+							position648, tokenIndex648 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l649
+							}
+							position++
+							goto l648
+						l649:
+							position, tokenIndex = position648, tokenIndex648
+							if buffer[position] != rune('S') {
+								goto l645
+							}
+							position++
+						}
+					l648:
+						{
+							position650, tokenIndex650 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l651
+							}
+							position++
+							goto l650
+						l651:
+							position, tokenIndex = position650, tokenIndex650
+							if buffer[position] != rune('L') {
+								goto l645
+							}
+							position++
+						}
+					l650:
+						goto l633
+					l645:
+						position, tokenIndex = position633, tokenIndex633
+						{
+							position653, tokenIndex653 := position, tokenIndex
+							if buffer[position] != rune('l') {
+								goto l654
+							}
+							position++
+							goto l653
+						l654:
+							position, tokenIndex = position653, tokenIndex653
+							if buffer[position] != rune('L') {
+								goto l652
+							}
+							position++
+						}
+					l653:
+						{
+							position655, tokenIndex655 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l656
+							}
+							position++
+							goto l655
+						l656:
+							position, tokenIndex = position655, tokenIndex655
+							if buffer[position] != rune('S') {
+								goto l652
+							}
+							position++
+						}
+					l655:
+						{
+							position657, tokenIndex657 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l658
+							}
+							position++
+							goto l657
+						l658:
+							position, tokenIndex = position657, tokenIndex657
+							if buffer[position] != rune('R') {
+								goto l652
+							}
+							position++
+						}
+					l657:
+						goto l633
+					l652:
+						position, tokenIndex = position633, tokenIndex633
+						{
+							position660, tokenIndex660 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l661
+							}
+							position++
+							goto l660
+						l661:
+							position, tokenIndex = position660, tokenIndex660
+							if buffer[position] != rune('R') {
+								goto l659
+							}
+							position++
+						}
+					l660:
+						{
+							position662, tokenIndex662 := position, tokenIndex
+							if buffer[position] != rune('o') {
+								goto l663
+							}
+							position++
+							goto l662
+						l663:
+							position, tokenIndex = position662, tokenIndex662
+							if buffer[position] != rune('O') {
+								goto l659
+							}
+							position++
+						}
+					l662:
+						{
+							position664, tokenIndex664 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l665
+							}
+							position++
+							goto l664
+						l665:
+							position, tokenIndex = position664, tokenIndex664
+							if buffer[position] != rune('R') {
+								goto l659
+							}
+							position++
+						}
+					l664:
+						goto l633
+					l659:
+						position, tokenIndex = position633, tokenIndex633
+						{
+							position666, tokenIndex666 := position, tokenIndex
+							if buffer[position] != rune('a') {
+								goto l667
+							}
+							position++
+							goto l666
+						l667:
+							position, tokenIndex = position666, tokenIndex666
+							if buffer[position] != rune('A') {
+								goto l632
+							}
+							position++
+						}
+					l666:
+						{
+							position668, tokenIndex668 := position, tokenIndex
+							if buffer[position] != rune('s') {
+								goto l669
+							}
+							position++
+							goto l668
+						l669:
+							position, tokenIndex = position668, tokenIndex668
+							if buffer[position] != rune('S') {
+								goto l632
+							}
+							position++
+						}
+					l668:
+						{
+							position670, tokenIndex670 := position, tokenIndex
+							if buffer[position] != rune('r') {
+								goto l671
+							}
+							position++
+							goto l670
+						l671:
+							position, tokenIndex = position670, tokenIndex670
+							if buffer[position] != rune('R') {
+								goto l632
+							}
+							position++
+						}
+					l670:
 					}
-				l604:
+				l633:
 					{
-						position643, tokenIndex643 := position, tokenIndex
+						position672, tokenIndex672 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l643
+							goto l672
 						}
 						if buffer[position] != rune('#') {
-							goto l643
-						}
-						position++
-						if !_rules[ruleOffset]() {
-							goto l643
-						}
-						goto l644
-					l643:
-						position, tokenIndex = position643, tokenIndex643
-					}
-				l644:
-					goto l602
-				l603:
-					position, tokenIndex = position602, tokenIndex602
-					{
-						position646, tokenIndex646 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l647
-						}
-						position++
-						goto l646
-					l647:
-						position, tokenIndex = position646, tokenIndex646
-						if buffer[position] != rune('M') {
-							goto l645
-						}
-						position++
-					}
-				l646:
-					{
-						position648, tokenIndex648 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l649
-						}
-						position++
-						goto l648
-					l649:
-						position, tokenIndex = position648, tokenIndex648
-						if buffer[position] != rune('U') {
-							goto l645
-						}
-						position++
-					}
-				l648:
-					{
-						position650, tokenIndex650 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l651
-						}
-						position++
-						goto l650
-					l651:
-						position, tokenIndex = position650, tokenIndex650
-						if buffer[position] != rune('L') {
-							goto l645
-						}
-						position++
-					}
-				l650:
-					if buffer[position] != rune(' ') {
-						goto l645
-					}
-					position++
-					{
-						position652, tokenIndex652 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l653
-						}
-						position++
-						goto l652
-					l653:
-						position, tokenIndex = position652, tokenIndex652
-						if buffer[position] != rune('V') {
-							goto l645
-						}
-						position++
-					}
-				l652:
-					{
-						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 l645
-						}
-						position++
-					}
-				l654:
-					goto l602
-				l645:
-					position, tokenIndex = position602, tokenIndex602
-					{
-						position656, tokenIndex656 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l657
-						}
-						position++
-						goto l656
-					l657:
-						position, tokenIndex = position656, tokenIndex656
-						if buffer[position] != rune('M') {
-							goto l600
-						}
-						position++
-					}
-				l656:
-					{
-						position658, tokenIndex658 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l659
-						}
-						position++
-						goto l658
-					l659:
-						position, tokenIndex = position658, tokenIndex658
-						if buffer[position] != rune('U') {
-							goto l600
-						}
-						position++
-					}
-				l658:
-					{
-						position660, tokenIndex660 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l661
-						}
-						position++
-						goto l660
-					l661:
-						position, tokenIndex = position660, tokenIndex660
-						if buffer[position] != rune('L') {
-							goto l600
-						}
-						position++
-					}
-				l660:
-					if buffer[position] != rune(' ') {
-						goto l600
-					}
-					position++
-					if buffer[position] != rune('#') {
-						goto l600
-					}
-					position++
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l600
-					}
-					position++
-				}
-			l602:
-				add(ruleARMConstantTweak, position601)
-			}
-			return true
-		l600:
-			position, tokenIndex = position600, tokenIndex600
-			return false
-		},
-		/* 46 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / SVE2PredicateRegister / ARMVectorRegister / SVE2SpecialValue / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
-		func() bool {
-			position662, tokenIndex662 := position, tokenIndex
-			{
-				position663 := position
-				{
-					position664, tokenIndex664 := position, tokenIndex
-					{
-						position666, tokenIndex666 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l667
-						}
-						position++
-						goto l666
-					l667:
-						position, tokenIndex = position666, tokenIndex666
-						if buffer[position] != rune('S') {
-							goto l665
-						}
-						position++
-					}
-				l666:
-					{
-						position668, tokenIndex668 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l669
-						}
-						position++
-						goto l668
-					l669:
-						position, tokenIndex = position668, tokenIndex668
-						if buffer[position] != rune('P') {
-							goto l665
-						}
-						position++
-					}
-				l668:
-					goto l664
-				l665:
-					position, tokenIndex = position664, tokenIndex664
-					{
-						position671, tokenIndex671 := position, tokenIndex
-						if buffer[position] != rune('x') {
 							goto l672
 						}
 						position++
-						goto l671
+						if !_rules[ruleOffset]() {
+							goto l672
+						}
+						goto l673
 					l672:
-						position, tokenIndex = position671, tokenIndex671
-						if buffer[position] != rune('w') {
-							goto l673
-						}
-						position++
-						goto l671
-					l673:
-						position, tokenIndex = position671, tokenIndex671
-						if buffer[position] != rune('d') {
-							goto l674
-						}
-						position++
-						goto l671
-					l674:
-						position, tokenIndex = position671, tokenIndex671
-						if buffer[position] != rune('q') {
-							goto l675
-						}
-						position++
-						goto l671
-					l675:
-						position, tokenIndex = position671, tokenIndex671
-						if buffer[position] != rune('s') {
+						position, tokenIndex = position672, tokenIndex672
+					}
+				l673:
+					goto l631
+				l632:
+					position, tokenIndex = position631, tokenIndex631
+					{
+						position675, tokenIndex675 := position, tokenIndex
+						if buffer[position] != rune('m') {
 							goto l676
 						}
 						position++
-						goto l671
+						goto l675
 					l676:
-						position, tokenIndex = position671, tokenIndex671
-						if buffer[position] != rune('h') {
-							goto l677
-						}
-						position++
-						goto l671
-					l677:
-						position, tokenIndex = position671, tokenIndex671
-						if buffer[position] != rune('b') {
-							goto l670
+						position, tokenIndex = position675, tokenIndex675
+						if buffer[position] != rune('M') {
+							goto l674
 						}
 						position++
 					}
-				l671:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l670
-					}
-					position++
+				l675:
 					{
-						position678, tokenIndex678 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position677, tokenIndex677 := position, tokenIndex
+						if buffer[position] != rune('u') {
 							goto l678
 						}
 						position++
-						goto l679
+						goto l677
 					l678:
-						position, tokenIndex = position678, tokenIndex678
+						position, tokenIndex = position677, tokenIndex677
+						if buffer[position] != rune('U') {
+							goto l674
+						}
+						position++
+					}
+				l677:
+					{
+						position679, tokenIndex679 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l680
+						}
+						position++
+						goto l679
+					l680:
+						position, tokenIndex = position679, tokenIndex679
+						if buffer[position] != rune('L') {
+							goto l674
+						}
+						position++
 					}
 				l679:
-					goto l664
-				l670:
-					position, tokenIndex = position664, tokenIndex664
+					if buffer[position] != rune(' ') {
+						goto l674
+					}
+					position++
 					{
 						position681, tokenIndex681 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('v') {
 							goto l682
 						}
 						position++
 						goto l681
 					l682:
 						position, tokenIndex = position681, tokenIndex681
-						if buffer[position] != rune('X') {
-							goto l680
+						if buffer[position] != rune('V') {
+							goto l674
 						}
 						position++
 					}
 				l681:
 					{
 						position683, tokenIndex683 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('l') {
 							goto l684
 						}
 						position++
 						goto l683
 					l684:
 						position, tokenIndex = position683, tokenIndex683
-						if buffer[position] != rune('Z') {
-							goto l680
+						if buffer[position] != rune('L') {
+							goto l674
 						}
 						position++
 					}
 				l683:
+					goto l631
+				l674:
+					position, tokenIndex = position631, tokenIndex631
 					{
 						position685, tokenIndex685 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						if buffer[position] != rune('m') {
 							goto l686
 						}
 						position++
 						goto l685
 					l686:
 						position, tokenIndex = position685, tokenIndex685
-						if buffer[position] != rune('R') {
-							goto l680
+						if buffer[position] != rune('M') {
+							goto l629
 						}
 						position++
 					}
 				l685:
-					goto l664
-				l680:
-					position, tokenIndex = position664, tokenIndex664
 					{
-						position688, tokenIndex688 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l689
+						position687, tokenIndex687 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l688
 						}
 						position++
-						goto l688
-					l689:
-						position, tokenIndex = position688, tokenIndex688
-						if buffer[position] != rune('W') {
-							goto l687
+						goto l687
+					l688:
+						position, tokenIndex = position687, tokenIndex687
+						if buffer[position] != rune('U') {
+							goto l629
 						}
 						position++
 					}
-				l688:
-					{
-						position690, tokenIndex690 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l691
-						}
-						position++
-						goto l690
-					l691:
-						position, tokenIndex = position690, tokenIndex690
-						if buffer[position] != rune('Z') {
-							goto l687
-						}
-						position++
-					}
-				l690:
-					{
-						position692, tokenIndex692 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l693
-						}
-						position++
-						goto l692
-					l693:
-						position, tokenIndex = position692, tokenIndex692
-						if buffer[position] != rune('R') {
-							goto l687
-						}
-						position++
-					}
-				l692:
-					goto l664
 				l687:
-					position, tokenIndex = position664, tokenIndex664
+					{
+						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 l629
+						}
+						position++
+					}
+				l689:
+					if buffer[position] != rune(' ') {
+						goto l629
+					}
+					position++
+					if buffer[position] != rune('#') {
+						goto l629
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l629
+					}
+					position++
+				}
+			l631:
+				add(ruleARMConstantTweak, position630)
+			}
+			return true
+		l629:
+			position, tokenIndex = position629, tokenIndex629
+			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 {
+			position691, tokenIndex691 := position, tokenIndex
+			{
+				position692 := position
+				{
+					position693, tokenIndex693 := position, tokenIndex
 					{
 						position695, tokenIndex695 := position, tokenIndex
-						if buffer[position] != rune('n') {
+						if buffer[position] != rune('s') {
 							goto l696
 						}
 						position++
 						goto l695
 					l696:
 						position, tokenIndex = position695, tokenIndex695
-						if buffer[position] != rune('N') {
+						if buffer[position] != rune('S') {
 							goto l694
 						}
 						position++
@@ -5638,708 +5655,682 @@
 				l695:
 					{
 						position697, tokenIndex697 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('p') {
 							goto l698
 						}
 						position++
 						goto l697
 					l698:
 						position, tokenIndex = position697, tokenIndex697
-						if buffer[position] != rune('Z') {
+						if buffer[position] != rune('P') {
 							goto l694
 						}
 						position++
 					}
 				l697:
+					goto l693
+				l694:
+					position, tokenIndex = position693, tokenIndex693
 					{
-						position699, tokenIndex699 := position, tokenIndex
-						if buffer[position] != rune('c') {
-							goto l700
+						position700, tokenIndex700 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l701
 						}
 						position++
-						goto l699
-					l700:
-						position, tokenIndex = position699, tokenIndex699
-						if buffer[position] != rune('C') {
-							goto l694
-						}
-						position++
-					}
-				l699:
-					{
-						position701, tokenIndex701 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						goto l700
+					l701:
+						position, tokenIndex = position700, tokenIndex700
+						if buffer[position] != rune('w') {
 							goto l702
 						}
 						position++
-						goto l701
+						goto l700
 					l702:
-						position, tokenIndex = position701, tokenIndex701
-						if buffer[position] != rune('V') {
-							goto l694
+						position, tokenIndex = position700, tokenIndex700
+						if buffer[position] != rune('d') {
+							goto l703
 						}
 						position++
-					}
-				l701:
-					goto l664
-				l694:
-					position, tokenIndex = position664, tokenIndex664
-					if !_rules[ruleSVE2PredicateRegister]() {
-						goto l703
-					}
-					goto l664
-				l703:
-					position, tokenIndex = position664, tokenIndex664
-					if !_rules[ruleARMVectorRegister]() {
-						goto l704
-					}
-					goto l664
-				l704:
-					position, tokenIndex = position664, tokenIndex664
-					if !_rules[ruleSVE2SpecialValue]() {
-						goto l705
-					}
-					goto l664
-				l705:
-					position, tokenIndex = position664, tokenIndex664
-					if buffer[position] != rune('{') {
-						goto l662
-					}
-					position++
-					{
-						position706, tokenIndex706 := position, tokenIndex
-						if !_rules[ruleWS]() {
+						goto l700
+					l703:
+						position, tokenIndex = position700, tokenIndex700
+						if buffer[position] != rune('q') {
+							goto l704
+						}
+						position++
+						goto l700
+					l704:
+						position, tokenIndex = position700, tokenIndex700
+						if buffer[position] != rune('s') {
+							goto l705
+						}
+						position++
+						goto l700
+					l705:
+						position, tokenIndex = position700, tokenIndex700
+						if buffer[position] != rune('h') {
 							goto l706
 						}
-						goto l707
+						position++
+						goto l700
 					l706:
-						position, tokenIndex = position706, tokenIndex706
+						position, tokenIndex = position700, tokenIndex700
+						if buffer[position] != rune('b') {
+							goto l699
+						}
+						position++
 					}
-				l707:
-					if !_rules[ruleARMVectorRegister]() {
-						goto l662
+				l700:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l699
+					}
+					position++
+					{
+						position707, tokenIndex707 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l707
+						}
+						position++
+						goto l708
+					l707:
+						position, tokenIndex = position707, tokenIndex707
 					}
 				l708:
+					goto l693
+				l699:
+					position, tokenIndex = position693, tokenIndex693
 					{
-						position709, tokenIndex709 := position, tokenIndex
-						if buffer[position] != rune(',') {
+						position710, tokenIndex710 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l711
+						}
+						position++
+						goto l710
+					l711:
+						position, tokenIndex = position710, tokenIndex710
+						if buffer[position] != rune('X') {
 							goto l709
 						}
 						position++
-						{
-							position710, tokenIndex710 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l710
-							}
-							goto l711
-						l710:
-							position, tokenIndex = position710, tokenIndex710
-						}
-					l711:
-						if !_rules[ruleARMVectorRegister]() {
-							goto l709
-						}
-						goto l708
-					l709:
-						position, tokenIndex = position709, tokenIndex709
 					}
+				l710:
 					{
 						position712, tokenIndex712 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l712
+						if buffer[position] != rune('z') {
+							goto l713
 						}
-						goto l713
-					l712:
+						position++
+						goto l712
+					l713:
 						position, tokenIndex = position712, tokenIndex712
+						if buffer[position] != rune('Z') {
+							goto l709
+						}
+						position++
 					}
-				l713:
-					if buffer[position] != rune('}') {
-						goto l662
-					}
-					position++
+				l712:
 					{
 						position714, tokenIndex714 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l714
+						if buffer[position] != rune('r') {
+							goto l715
 						}
 						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l714
-						}
-						position++
-						{
-							position716, tokenIndex716 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l716
-							}
-							position++
-							goto l717
-						l716:
-							position, tokenIndex = position716, tokenIndex716
-						}
-					l717:
-						if buffer[position] != rune(']') {
-							goto l714
-						}
-						position++
-						goto l715
-					l714:
+						goto l714
+					l715:
 						position, tokenIndex = position714, tokenIndex714
+						if buffer[position] != rune('R') {
+							goto l709
+						}
+						position++
 					}
-				l715:
-				}
-			l664:
-				add(ruleARMRegister, position663)
-			}
-			return true
-		l662:
-			position, tokenIndex = position662, tokenIndex662
-			return false
-		},
-		/* 47 ARMVectorRegister <- <(('p' / 'v' / 'z') [0-9] [0-9]? !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_') ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
-		func() bool {
-			position718, tokenIndex718 := position, tokenIndex
-			{
-				position719 := position
-				{
-					position720, tokenIndex720 := position, tokenIndex
-					if buffer[position] != rune('p') {
+				l714:
+					goto l693
+				l709:
+					position, tokenIndex = position693, tokenIndex693
+					{
+						position717, tokenIndex717 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l718
+						}
+						position++
+						goto l717
+					l718:
+						position, tokenIndex = position717, tokenIndex717
+						if buffer[position] != rune('W') {
+							goto l716
+						}
+						position++
+					}
+				l717:
+					{
+						position719, tokenIndex719 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l720
+						}
+						position++
+						goto l719
+					l720:
+						position, tokenIndex = position719, tokenIndex719
+						if buffer[position] != rune('Z') {
+							goto l716
+						}
+						position++
+					}
+				l719:
+					{
+						position721, tokenIndex721 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l722
+						}
+						position++
 						goto l721
+					l722:
+						position, tokenIndex = position721, tokenIndex721
+						if buffer[position] != rune('R') {
+							goto l716
+						}
+						position++
 					}
-					position++
-					goto l720
 				l721:
-					position, tokenIndex = position720, tokenIndex720
-					if buffer[position] != rune('v') {
-						goto l722
+					goto l693
+				l716:
+					position, tokenIndex = position693, tokenIndex693
+					{
+						position724, tokenIndex724 := position, tokenIndex
+						if buffer[position] != rune('n') {
+							goto l725
+						}
+						position++
+						goto l724
+					l725:
+						position, tokenIndex = position724, tokenIndex724
+						if buffer[position] != rune('N') {
+							goto l723
+						}
+						position++
 					}
-					position++
-					goto l720
-				l722:
-					position, tokenIndex = position720, tokenIndex720
-					if buffer[position] != rune('z') {
-						goto l718
-					}
-					position++
-				}
-			l720:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l718
-				}
-				position++
-				{
-					position723, tokenIndex723 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l723
-					}
-					position++
-					goto l724
-				l723:
-					position, tokenIndex = position723, tokenIndex723
-				}
-			l724:
-				{
-					position725, tokenIndex725 := position, tokenIndex
+				l724:
 					{
 						position726, tokenIndex726 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						if buffer[position] != rune('z') {
 							goto l727
 						}
 						position++
 						goto l726
 					l727:
 						position, tokenIndex = position726, tokenIndex726
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l728
-						}
-						position++
-						goto l726
-					l728:
-						position, tokenIndex = position726, tokenIndex726
-						{
-							position730, tokenIndex730 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l731
-							}
-							position++
-							goto l730
-						l731:
-							position, tokenIndex = position730, tokenIndex730
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l729
-							}
-							position++
-						}
-					l730:
-						goto l726
-					l729:
-						position, tokenIndex = position726, tokenIndex726
-						if buffer[position] != rune('_') {
-							goto l725
+						if buffer[position] != rune('Z') {
+							goto l723
 						}
 						position++
 					}
 				l726:
-					goto l718
-				l725:
-					position, tokenIndex = position725, tokenIndex725
-				}
-				{
-					position732, tokenIndex732 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l732
-					}
-					position++
-				l734:
 					{
-						position735, tokenIndex735 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l735
+						position728, tokenIndex728 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l729
 						}
 						position++
+						goto l728
+					l729:
+						position, tokenIndex = position728, tokenIndex728
+						if buffer[position] != rune('C') {
+							goto l723
+						}
+						position++
+					}
+				l728:
+					{
+						position730, tokenIndex730 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l731
+						}
+						position++
+						goto l730
+					l731:
+						position, tokenIndex = position730, tokenIndex730
+						if buffer[position] != rune('V') {
+							goto l723
+						}
+						position++
+					}
+				l730:
+					goto l693
+				l723:
+					position, tokenIndex = position693, tokenIndex693
+					if !_rules[ruleSVE2PredicateRegister]() {
+						goto l732
+					}
+					goto l693
+				l732:
+					position, tokenIndex = position693, tokenIndex693
+					if !_rules[ruleARMVectorRegister]() {
+						goto l733
+					}
+					goto l693
+				l733:
+					position, tokenIndex = position693, tokenIndex693
+					if !_rules[ruleSVE2SpecialValue]() {
 						goto l734
+					}
+					goto l693
+				l734:
+					position, tokenIndex = position693, tokenIndex693
+					if buffer[position] != rune('{') {
+						goto l691
+					}
+					position++
+					{
+						position735, tokenIndex735 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l735
+						}
+						goto l736
 					l735:
 						position, tokenIndex = position735, tokenIndex735
 					}
+				l736:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l691
+					}
+				l737:
 					{
-						position736, tokenIndex736 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l737
-						}
-						position++
-						goto l736
-					l737:
-						position, tokenIndex = position736, tokenIndex736
-						if buffer[position] != rune('s') {
+						position738, tokenIndex738 := position, tokenIndex
+						if buffer[position] != rune(',') {
 							goto l738
 						}
 						position++
-						goto l736
-					l738:
-						position, tokenIndex = position736, tokenIndex736
-						if buffer[position] != rune('d') {
-							goto l739
-						}
-						position++
-						goto l736
-					l739:
-						position, tokenIndex = position736, tokenIndex736
-						if buffer[position] != rune('h') {
+						{
+							position739, tokenIndex739 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l739
+							}
 							goto l740
+						l739:
+							position, tokenIndex = position739, tokenIndex739
 						}
-						position++
-						goto l736
 					l740:
-						position, tokenIndex = position736, tokenIndex736
-						if buffer[position] != rune('q') {
-							goto l732
+						if !_rules[ruleARMVectorRegister]() {
+							goto l738
 						}
-						position++
+						goto l737
+					l738:
+						position, tokenIndex = position738, tokenIndex738
 					}
-				l736:
 					{
 						position741, tokenIndex741 := position, tokenIndex
-						if buffer[position] != rune('[') {
+						if !_rules[ruleWS]() {
 							goto l741
 						}
-						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l741
-						}
-						position++
-						{
-							position743, tokenIndex743 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l743
-							}
-							position++
-							goto l744
-						l743:
-							position, tokenIndex = position743, tokenIndex743
-						}
-					l744:
-						if buffer[position] != rune(']') {
-							goto l741
-						}
-						position++
 						goto l742
 					l741:
 						position, tokenIndex = position741, tokenIndex741
 					}
 				l742:
-					goto l733
-				l732:
-					position, tokenIndex = position732, tokenIndex732
+					if buffer[position] != rune('}') {
+						goto l691
+					}
+					position++
+					{
+						position743, tokenIndex743 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l743
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l743
+						}
+						position++
+						{
+							position745, tokenIndex745 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l745
+							}
+							position++
+							goto l746
+						l745:
+							position, tokenIndex = position745, tokenIndex745
+						}
+					l746:
+						if buffer[position] != rune(']') {
+							goto l743
+						}
+						position++
+						goto l744
+					l743:
+						position, tokenIndex = position743, tokenIndex743
+					}
+				l744:
 				}
-			l733:
-				add(ruleARMVectorRegister, position719)
+			l693:
+				add(ruleARMRegister, position692)
 			}
 			return true
-		l718:
-			position, tokenIndex = position718, tokenIndex718
+		l691:
+			position, tokenIndex = position691, tokenIndex691
 			return false
 		},
-		/* 48 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
+		/* 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 {
-			position745, tokenIndex745 := position, tokenIndex
+			position747, tokenIndex747 := position, tokenIndex
 			{
-				position746 := position
-				{
-					position747, tokenIndex747 := position, tokenIndex
-					if buffer[position] != rune('p') {
-						goto l748
-					}
-					position++
-					goto l747
-				l748:
-					position, tokenIndex = position747, tokenIndex747
-					if buffer[position] != rune('P') {
-						goto l745
-					}
-					position++
-				}
-			l747:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l745
-				}
-				position++
+				position748 := position
 				{
 					position749, tokenIndex749 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l749
+					if buffer[position] != rune('p') {
+						goto l750
 					}
 					position++
-					goto l750
-				l749:
+					goto l749
+				l750:
 					position, tokenIndex = position749, tokenIndex749
+					if buffer[position] != rune('v') {
+						goto l751
+					}
+					position++
+					goto l749
+				l751:
+					position, tokenIndex = position749, tokenIndex749
+					if buffer[position] != rune('z') {
+						goto l747
+					}
+					position++
 				}
-			l750:
-				if buffer[position] != rune('/') {
-					goto l745
+			l749:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l747
 				}
 				position++
 				{
-					position751, tokenIndex751 := position, tokenIndex
-					if buffer[position] != rune('m') {
+					position752, tokenIndex752 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l752
 					}
 					position++
-					goto l751
+					goto l753
 				l752:
-					position, tokenIndex = position751, tokenIndex751
-					if buffer[position] != rune('M') {
-						goto l753
+					position, tokenIndex = position752, tokenIndex752
+				}
+			l753:
+				{
+					position754, tokenIndex754 := position, tokenIndex
+					{
+						position755, tokenIndex755 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l756
+						}
+						position++
+						goto l755
+					l756:
+						position, tokenIndex = position755, tokenIndex755
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l757
+						}
+						position++
+						goto l755
+					l757:
+						position, tokenIndex = position755, tokenIndex755
+						{
+							position759, tokenIndex759 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l760
+							}
+							position++
+							goto l759
+						l760:
+							position, tokenIndex = position759, tokenIndex759
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l758
+							}
+							position++
+						}
+					l759:
+						goto l755
+					l758:
+						position, tokenIndex = position755, tokenIndex755
+						if buffer[position] != rune('_') {
+							goto l754
+						}
+						position++
+					}
+				l755:
+					goto l747
+				l754:
+					position, tokenIndex = position754, tokenIndex754
+				}
+				{
+					position761, tokenIndex761 := position, tokenIndex
+					if buffer[position] != rune('.') {
+						goto l761
 					}
 					position++
-					goto l751
-				l753:
-					position, tokenIndex = position751, tokenIndex751
-					{
-						position754, tokenIndex754 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l755
-						}
-						position++
-						goto l754
-					l755:
-						position, tokenIndex = position754, tokenIndex754
-						if buffer[position] != rune('Z') {
-							goto l745
-						}
-						position++
-					}
-				l754:
-				}
-			l751:
-				add(ruleSVE2PredicateRegister, position746)
-			}
-			return true
-		l745:
-			position, tokenIndex = position745, tokenIndex745
-			return false
-		},
-		/* 49 SVE2SpecialValue <- <(((('p' / 'P') ('o' / 'O') ('w' / 'W') '2') / (('v' / 'V') ('l' / 'L') ('1' / '2' / '3' / '4' / '5' / '6' / '7' / '8') ![0-9]) / (('v' / 'V') ('l' / 'L') '1' '6') / (('v' / 'V') ('l' / 'L') '3' '2') / (('v' / 'V') ('l' / 'L') '6' '4') / (('v' / 'V') ('l' / 'L') '1' '2' '8') / (('v' / 'V') ('l' / 'L') '2' '5' '6') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '3') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '4') / (('a' / 'A') ('l' / 'L') ('l' / 'L'))) !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_'))> */
-		func() bool {
-			position756, tokenIndex756 := position, tokenIndex
-			{
-				position757 := position
-				{
-					position758, tokenIndex758 := position, tokenIndex
-					{
-						position760, tokenIndex760 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l761
-						}
-						position++
-						goto l760
-					l761:
-						position, tokenIndex = position760, tokenIndex760
-						if buffer[position] != rune('P') {
-							goto l759
-						}
-						position++
-					}
-				l760:
-					{
-						position762, tokenIndex762 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l763
-						}
-						position++
-						goto l762
-					l763:
-						position, tokenIndex = position762, tokenIndex762
-						if buffer[position] != rune('O') {
-							goto l759
-						}
-						position++
-					}
-				l762:
+				l763:
 					{
 						position764, tokenIndex764 := position, tokenIndex
-						if buffer[position] != rune('w') {
-							goto l765
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l764
 						}
 						position++
-						goto l764
-					l765:
+						goto l763
+					l764:
 						position, tokenIndex = position764, tokenIndex764
-						if buffer[position] != rune('W') {
-							goto l759
+					}
+					{
+						position765, tokenIndex765 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l766
 						}
 						position++
-					}
-				l764:
-					if buffer[position] != rune('2') {
-						goto l759
-					}
-					position++
-					goto l758
-				l759:
-					position, tokenIndex = position758, tokenIndex758
-					{
-						position767, tokenIndex767 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						goto l765
+					l766:
+						position, tokenIndex = position765, tokenIndex765
+						if buffer[position] != rune('s') {
+							goto l767
+						}
+						position++
+						goto l765
+					l767:
+						position, tokenIndex = position765, tokenIndex765
+						if buffer[position] != rune('d') {
 							goto l768
 						}
 						position++
-						goto l767
+						goto l765
 					l768:
-						position, tokenIndex = position767, tokenIndex767
-						if buffer[position] != rune('V') {
-							goto l766
+						position, tokenIndex = position765, tokenIndex765
+						if buffer[position] != rune('h') {
+							goto l769
+						}
+						position++
+						goto l765
+					l769:
+						position, tokenIndex = position765, tokenIndex765
+						if buffer[position] != rune('q') {
+							goto l761
 						}
 						position++
 					}
-				l767:
+				l765:
 					{
-						position769, tokenIndex769 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						position770, tokenIndex770 := position, tokenIndex
+						if buffer[position] != rune('[') {
 							goto l770
 						}
 						position++
-						goto l769
-					l770:
-						position, tokenIndex = position769, tokenIndex769
-						if buffer[position] != rune('L') {
-							goto l766
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l770
 						}
 						position++
-					}
-				l769:
-					{
-						position771, tokenIndex771 := position, tokenIndex
-						if buffer[position] != rune('1') {
-							goto l772
-						}
-						position++
-						goto l771
-					l772:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('2') {
+						{
+							position772, tokenIndex772 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l772
+							}
+							position++
 							goto l773
+						l772:
+							position, tokenIndex = position772, tokenIndex772
 						}
-						position++
-						goto l771
 					l773:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('3') {
-							goto l774
+						if buffer[position] != rune(']') {
+							goto l770
 						}
 						position++
 						goto l771
-					l774:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('4') {
-							goto l775
-						}
-						position++
-						goto l771
-					l775:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('5') {
-							goto l776
-						}
-						position++
-						goto l771
-					l776:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('6') {
-							goto l777
-						}
-						position++
-						goto l771
-					l777:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('7') {
-							goto l778
-						}
-						position++
-						goto l771
-					l778:
-						position, tokenIndex = position771, tokenIndex771
-						if buffer[position] != rune('8') {
-							goto l766
-						}
-						position++
+					l770:
+						position, tokenIndex = position770, tokenIndex770
 					}
 				l771:
-					{
-						position779, tokenIndex779 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l779
-						}
-						position++
-						goto l766
-					l779:
-						position, tokenIndex = position779, tokenIndex779
+					goto l762
+				l761:
+					position, tokenIndex = position761, tokenIndex761
+				}
+			l762:
+				add(ruleARMVectorRegister, position748)
+			}
+			return true
+		l747:
+			position, tokenIndex = position747, tokenIndex747
+			return false
+		},
+		/* 50 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
+		func() bool {
+			position774, tokenIndex774 := position, tokenIndex
+			{
+				position775 := position
+				{
+					position776, tokenIndex776 := position, tokenIndex
+					if buffer[position] != rune('p') {
+						goto l777
 					}
-					goto l758
-				l766:
-					position, tokenIndex = position758, tokenIndex758
-					{
-						position781, tokenIndex781 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l782
-						}
-						position++
+					position++
+					goto l776
+				l777:
+					position, tokenIndex = position776, tokenIndex776
+					if buffer[position] != rune('P') {
+						goto l774
+					}
+					position++
+				}
+			l776:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l774
+				}
+				position++
+				{
+					position778, tokenIndex778 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l778
+					}
+					position++
+					goto l779
+				l778:
+					position, tokenIndex = position778, tokenIndex778
+				}
+			l779:
+				if buffer[position] != rune('/') {
+					goto l774
+				}
+				position++
+				{
+					position780, tokenIndex780 := position, tokenIndex
+					if buffer[position] != rune('m') {
 						goto l781
-					l782:
-						position, tokenIndex = position781, tokenIndex781
-						if buffer[position] != rune('V') {
-							goto l780
-						}
-						position++
 					}
+					position++
+					goto l780
 				l781:
+					position, tokenIndex = position780, tokenIndex780
+					if buffer[position] != rune('M') {
+						goto l782
+					}
+					position++
+					goto l780
+				l782:
+					position, tokenIndex = position780, tokenIndex780
 					{
 						position783, tokenIndex783 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('z') {
 							goto l784
 						}
 						position++
 						goto l783
 					l784:
 						position, tokenIndex = position783, tokenIndex783
-						if buffer[position] != rune('L') {
-							goto l780
+						if buffer[position] != rune('Z') {
+							goto l774
 						}
 						position++
 					}
 				l783:
-					if buffer[position] != rune('1') {
-						goto l780
-					}
-					position++
-					if buffer[position] != rune('6') {
-						goto l780
-					}
-					position++
-					goto l758
-				l780:
-					position, tokenIndex = position758, tokenIndex758
+				}
+			l780:
+				add(ruleSVE2PredicateRegister, position775)
+			}
+			return true
+		l774:
+			position, tokenIndex = position774, tokenIndex774
+			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 {
+			position785, tokenIndex785 := position, tokenIndex
+			{
+				position786 := position
+				{
+					position787, tokenIndex787 := position, tokenIndex
 					{
-						position786, tokenIndex786 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l787
+						position789, tokenIndex789 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l790
 						}
 						position++
-						goto l786
-					l787:
-						position, tokenIndex = position786, tokenIndex786
-						if buffer[position] != rune('V') {
-							goto l785
+						goto l789
+					l790:
+						position, tokenIndex = position789, tokenIndex789
+						if buffer[position] != rune('P') {
+							goto l788
 						}
 						position++
 					}
-				l786:
-					{
-						position788, tokenIndex788 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l789
-						}
-						position++
-						goto l788
-					l789:
-						position, tokenIndex = position788, tokenIndex788
-						if buffer[position] != rune('L') {
-							goto l785
-						}
-						position++
-					}
-				l788:
-					if buffer[position] != rune('3') {
-						goto l785
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l785
-					}
-					position++
-					goto l758
-				l785:
-					position, tokenIndex = position758, tokenIndex758
+				l789:
 					{
 						position791, tokenIndex791 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						if buffer[position] != rune('o') {
 							goto l792
 						}
 						position++
 						goto l791
 					l792:
 						position, tokenIndex = position791, tokenIndex791
-						if buffer[position] != rune('V') {
-							goto l790
+						if buffer[position] != rune('O') {
+							goto l788
 						}
 						position++
 					}
 				l791:
 					{
 						position793, tokenIndex793 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('w') {
 							goto l794
 						}
 						position++
 						goto l793
 					l794:
 						position, tokenIndex = position793, tokenIndex793
-						if buffer[position] != rune('L') {
-							goto l790
+						if buffer[position] != rune('W') {
+							goto l788
 						}
 						position++
 					}
 				l793:
-					if buffer[position] != rune('6') {
-						goto l790
+					if buffer[position] != rune('2') {
+						goto l788
 					}
 					position++
-					if buffer[position] != rune('4') {
-						goto l790
-					}
-					position++
-					goto l758
-				l790:
-					position, tokenIndex = position758, tokenIndex758
+					goto l787
+				l788:
+					position, tokenIndex = position787, tokenIndex787
 					{
 						position796, tokenIndex796 := position, tokenIndex
 						if buffer[position] != rune('v') {
@@ -6370,144 +6361,128 @@
 						position++
 					}
 				l798:
-					if buffer[position] != rune('1') {
-						goto l795
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l795
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l795
-					}
-					position++
-					goto l758
-				l795:
-					position, tokenIndex = position758, tokenIndex758
 					{
-						position801, tokenIndex801 := position, tokenIndex
-						if buffer[position] != rune('v') {
+						position800, tokenIndex800 := position, tokenIndex
+						if buffer[position] != rune('1') {
+							goto l801
+						}
+						position++
+						goto l800
+					l801:
+						position, tokenIndex = position800, tokenIndex800
+						if buffer[position] != rune('2') {
 							goto l802
 						}
 						position++
-						goto l801
+						goto l800
 					l802:
-						position, tokenIndex = position801, tokenIndex801
-						if buffer[position] != rune('V') {
-							goto l800
+						position, tokenIndex = position800, tokenIndex800
+						if buffer[position] != rune('3') {
+							goto l803
 						}
 						position++
-					}
-				l801:
-					{
-						position803, tokenIndex803 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						goto l800
+					l803:
+						position, tokenIndex = position800, tokenIndex800
+						if buffer[position] != rune('4') {
 							goto l804
 						}
 						position++
-						goto l803
+						goto l800
 					l804:
-						position, tokenIndex = position803, tokenIndex803
-						if buffer[position] != rune('L') {
-							goto l800
+						position, tokenIndex = position800, tokenIndex800
+						if buffer[position] != rune('5') {
+							goto l805
 						}
 						position++
-					}
-				l803:
-					if buffer[position] != rune('2') {
 						goto l800
-					}
-					position++
-					if buffer[position] != rune('5') {
+					l805:
+						position, tokenIndex = position800, tokenIndex800
+						if buffer[position] != rune('6') {
+							goto l806
+						}
+						position++
 						goto l800
-					}
-					position++
-					if buffer[position] != rune('6') {
-						goto l800
-					}
-					position++
-					goto l758
-				l800:
-					position, tokenIndex = position758, tokenIndex758
-					{
-						position806, tokenIndex806 := position, tokenIndex
-						if buffer[position] != rune('m') {
+					l806:
+						position, tokenIndex = position800, tokenIndex800
+						if buffer[position] != rune('7') {
 							goto l807
 						}
 						position++
-						goto l806
+						goto l800
 					l807:
-						position, tokenIndex = position806, tokenIndex806
-						if buffer[position] != rune('M') {
-							goto l805
+						position, tokenIndex = position800, tokenIndex800
+						if buffer[position] != rune('8') {
+							goto l795
 						}
 						position++
 					}
-				l806:
+				l800:
 					{
 						position808, tokenIndex808 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l809
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l808
 						}
 						position++
-						goto l808
-					l809:
+						goto l795
+					l808:
 						position, tokenIndex = position808, tokenIndex808
-						if buffer[position] != rune('U') {
-							goto l805
-						}
-						position++
 					}
-				l808:
+					goto l787
+				l795:
+					position, tokenIndex = position787, tokenIndex787
 					{
 						position810, tokenIndex810 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('v') {
 							goto l811
 						}
 						position++
 						goto l810
 					l811:
 						position, tokenIndex = position810, tokenIndex810
-						if buffer[position] != rune('L') {
-							goto l805
+						if buffer[position] != rune('V') {
+							goto l809
 						}
 						position++
 					}
 				l810:
-					if buffer[position] != rune('3') {
-						goto l805
+					{
+						position812, tokenIndex812 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l813
+						}
+						position++
+						goto l812
+					l813:
+						position, tokenIndex = position812, tokenIndex812
+						if buffer[position] != rune('L') {
+							goto l809
+						}
+						position++
+					}
+				l812:
+					if buffer[position] != rune('1') {
+						goto l809
 					}
 					position++
-					goto l758
-				l805:
-					position, tokenIndex = position758, tokenIndex758
-					{
-						position813, tokenIndex813 := position, tokenIndex
-						if buffer[position] != rune('m') {
-							goto l814
-						}
-						position++
-						goto l813
-					l814:
-						position, tokenIndex = position813, tokenIndex813
-						if buffer[position] != rune('M') {
-							goto l812
-						}
-						position++
+					if buffer[position] != rune('6') {
+						goto l809
 					}
-				l813:
+					position++
+					goto l787
+				l809:
+					position, tokenIndex = position787, tokenIndex787
 					{
 						position815, tokenIndex815 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('v') {
 							goto l816
 						}
 						position++
 						goto l815
 					l816:
 						position, tokenIndex = position815, tokenIndex815
-						if buffer[position] != rune('U') {
-							goto l812
+						if buffer[position] != rune('V') {
+							goto l814
 						}
 						position++
 					}
@@ -6522,1145 +6497,1384 @@
 					l818:
 						position, tokenIndex = position817, tokenIndex817
 						if buffer[position] != rune('L') {
-							goto l812
+							goto l814
 						}
 						position++
 					}
 				l817:
-					if buffer[position] != rune('4') {
-						goto l812
+					if buffer[position] != rune('3') {
+						goto l814
 					}
 					position++
-					goto l758
-				l812:
-					position, tokenIndex = position758, tokenIndex758
+					if buffer[position] != rune('2') {
+						goto l814
+					}
+					position++
+					goto l787
+				l814:
+					position, tokenIndex = position787, tokenIndex787
 					{
-						position819, tokenIndex819 := position, tokenIndex
-						if buffer[position] != rune('a') {
-							goto l820
+						position820, tokenIndex820 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l821
 						}
 						position++
-						goto l819
-					l820:
-						position, tokenIndex = position819, tokenIndex819
-						if buffer[position] != rune('A') {
-							goto l756
+						goto l820
+					l821:
+						position, tokenIndex = position820, tokenIndex820
+						if buffer[position] != rune('V') {
+							goto l819
 						}
 						position++
 					}
-				l819:
+				l820:
 					{
-						position821, tokenIndex821 := position, tokenIndex
+						position822, tokenIndex822 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l822
+							goto l823
 						}
 						position++
-						goto l821
-					l822:
-						position, tokenIndex = position821, tokenIndex821
+						goto l822
+					l823:
+						position, tokenIndex = position822, tokenIndex822
 						if buffer[position] != rune('L') {
-							goto l756
+							goto l819
 						}
 						position++
 					}
-				l821:
+				l822:
+					if buffer[position] != rune('6') {
+						goto l819
+					}
+					position++
+					if buffer[position] != rune('4') {
+						goto l819
+					}
+					position++
+					goto l787
+				l819:
+					position, tokenIndex = position787, tokenIndex787
 					{
-						position823, tokenIndex823 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						position825, tokenIndex825 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l826
+						}
+						position++
+						goto l825
+					l826:
+						position, tokenIndex = position825, tokenIndex825
+						if buffer[position] != rune('V') {
 							goto l824
 						}
 						position++
-						goto l823
-					l824:
-						position, tokenIndex = position823, tokenIndex823
-						if buffer[position] != rune('L') {
-							goto l756
-						}
-						position++
 					}
-				l823:
-				}
-			l758:
-				{
-					position825, tokenIndex825 := position, tokenIndex
+				l825:
 					{
-						position826, tokenIndex826 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l827
-						}
-						position++
-						goto l826
-					l827:
-						position, tokenIndex = position826, tokenIndex826
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position827, tokenIndex827 := position, tokenIndex
+						if buffer[position] != rune('l') {
 							goto l828
 						}
 						position++
-						goto l826
+						goto l827
 					l828:
-						position, tokenIndex = position826, tokenIndex826
-						{
-							position830, tokenIndex830 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l831
-							}
-							position++
-							goto l830
-						l831:
-							position, tokenIndex = position830, tokenIndex830
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l829
-							}
-							position++
-						}
-					l830:
-						goto l826
-					l829:
-						position, tokenIndex = position826, tokenIndex826
-						if buffer[position] != rune('_') {
-							goto l825
+						position, tokenIndex = position827, tokenIndex827
+						if buffer[position] != rune('L') {
+							goto l824
 						}
 						position++
 					}
-				l826:
-					goto l756
-				l825:
-					position, tokenIndex = position825, tokenIndex825
-				}
-				add(ruleSVE2SpecialValue, position757)
-			}
-			return true
-		l756:
-			position, tokenIndex = position756, tokenIndex756
-			return false
-		},
-		/* 50 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
-		func() bool {
-			position832, tokenIndex832 := position, tokenIndex
-			{
-				position833 := position
-				{
-					position834, tokenIndex834 := position, tokenIndex
-					if !_rules[ruleSymbolRef]() {
-						goto l835
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l835
-					}
-					goto l834
-				l835:
-					position, tokenIndex = position834, tokenIndex834
-					if !_rules[ruleSymbolRef]() {
-						goto l836
-					}
-					goto l834
-				l836:
-					position, tokenIndex = position834, tokenIndex834
-					if !_rules[ruleLow12BitsSymbolRef]() {
-						goto l837
-					}
-					goto l834
-				l837:
-					position, tokenIndex = position834, tokenIndex834
-				l839:
-					{
-						position840, tokenIndex840 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l840
-						}
-						goto l839
-					l840:
-						position, tokenIndex = position840, tokenIndex840
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l838
-					}
-					goto l834
-				l838:
-					position, tokenIndex = position834, tokenIndex834
-					if !_rules[ruleSegmentRegister]() {
-						goto l841
-					}
-					if !_rules[ruleOffset]() {
-						goto l841
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l841
-					}
-					goto l834
-				l841:
-					position, tokenIndex = position834, tokenIndex834
-					if !_rules[ruleSegmentRegister]() {
-						goto l842
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l842
-					}
-					goto l834
-				l842:
-					position, tokenIndex = position834, tokenIndex834
-					if !_rules[ruleSegmentRegister]() {
-						goto l843
-					}
-					if !_rules[ruleOffset]() {
-						goto l843
-					}
-					goto l834
-				l843:
-					position, tokenIndex = position834, tokenIndex834
-					if !_rules[ruleARMBaseIndexScale]() {
-						goto l844
-					}
-					goto l834
-				l844:
-					position, tokenIndex = position834, tokenIndex834
-					if !_rules[ruleBaseIndexScale]() {
-						goto l832
-					}
-				}
-			l834:
-				add(ruleMemoryRef, position833)
-			}
-			return true
-		l832:
-			position, tokenIndex = position832, tokenIndex832
-			return false
-		},
-		/* 51 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
-		func() bool {
-			position845, tokenIndex845 := position, tokenIndex
-			{
-				position846 := position
-				{
-					position847, tokenIndex847 := position, tokenIndex
-				l849:
-					{
-						position850, tokenIndex850 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l850
-						}
-						goto l849
-					l850:
-						position, tokenIndex = position850, tokenIndex850
-					}
-					if buffer[position] != rune('+') {
-						goto l847
+				l827:
+					if buffer[position] != rune('1') {
+						goto l824
 					}
 					position++
-					goto l848
-				l847:
-					position, tokenIndex = position847, tokenIndex847
-				}
-			l848:
-				{
-					position851, tokenIndex851 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
+					if buffer[position] != rune('2') {
+						goto l824
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l824
+					}
+					position++
+					goto l787
+				l824:
+					position, tokenIndex = position787, tokenIndex787
+					{
+						position830, tokenIndex830 := position, tokenIndex
+						if buffer[position] != rune('v') {
+							goto l831
+						}
+						position++
+						goto l830
+					l831:
+						position, tokenIndex = position830, tokenIndex830
+						if buffer[position] != rune('V') {
+							goto l829
+						}
+						position++
+					}
+				l830:
+					{
+						position832, tokenIndex832 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l833
+						}
+						position++
+						goto l832
+					l833:
+						position, tokenIndex = position832, tokenIndex832
+						if buffer[position] != rune('L') {
+							goto l829
+						}
+						position++
+					}
+				l832:
+					if buffer[position] != rune('2') {
+						goto l829
+					}
+					position++
+					if buffer[position] != rune('5') {
+						goto l829
+					}
+					position++
+					if buffer[position] != rune('6') {
+						goto l829
+					}
+					position++
+					goto l787
+				l829:
+					position, tokenIndex = position787, tokenIndex787
+					{
+						position835, tokenIndex835 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l836
+						}
+						position++
+						goto l835
+					l836:
+						position, tokenIndex = position835, tokenIndex835
+						if buffer[position] != rune('M') {
+							goto l834
+						}
+						position++
+					}
+				l835:
+					{
+						position837, tokenIndex837 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l838
+						}
+						position++
+						goto l837
+					l838:
+						position, tokenIndex = position837, tokenIndex837
+						if buffer[position] != rune('U') {
+							goto l834
+						}
+						position++
+					}
+				l837:
+					{
+						position839, tokenIndex839 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l840
+						}
+						position++
+						goto l839
+					l840:
+						position, tokenIndex = position839, tokenIndex839
+						if buffer[position] != rune('L') {
+							goto l834
+						}
+						position++
+					}
+				l839:
+					if buffer[position] != rune('3') {
+						goto l834
+					}
+					position++
+					goto l787
+				l834:
+					position, tokenIndex = position787, tokenIndex787
+					{
+						position842, tokenIndex842 := position, tokenIndex
+						if buffer[position] != rune('m') {
+							goto l843
+						}
+						position++
+						goto l842
+					l843:
+						position, tokenIndex = position842, tokenIndex842
+						if buffer[position] != rune('M') {
+							goto l841
+						}
+						position++
+					}
+				l842:
+					{
+						position844, tokenIndex844 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l845
+						}
+						position++
+						goto l844
+					l845:
+						position, tokenIndex = position844, tokenIndex844
+						if buffer[position] != rune('U') {
+							goto l841
+						}
+						position++
+					}
+				l844:
+					{
+						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 l841
+						}
+						position++
+					}
+				l846:
+					if buffer[position] != rune('4') {
+						goto l841
+					}
+					position++
+					goto l787
+				l841:
+					position, tokenIndex = position787, tokenIndex787
+					{
+						position848, tokenIndex848 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l849
+						}
+						position++
+						goto l848
+					l849:
+						position, tokenIndex = position848, tokenIndex848
+						if buffer[position] != rune('A') {
+							goto l785
+						}
+						position++
+					}
+				l848:
+					{
+						position850, tokenIndex850 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l851
+						}
+						position++
+						goto l850
+					l851:
+						position, tokenIndex = position850, tokenIndex850
+						if buffer[position] != rune('L') {
+							goto l785
+						}
+						position++
+					}
+				l850:
+					{
+						position852, tokenIndex852 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l853
+						}
+						position++
 						goto l852
+					l853:
+						position, tokenIndex = position852, tokenIndex852
+						if buffer[position] != rune('L') {
+							goto l785
+						}
+						position++
 					}
-					goto l851
 				l852:
-					position, tokenIndex = position851, tokenIndex851
-					if !_rules[ruleSymbolName]() {
-						goto l845
-					}
 				}
-			l851:
-			l853:
+			l787:
 				{
 					position854, tokenIndex854 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l854
+					{
+						position855, tokenIndex855 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l856
+						}
+						position++
+						goto l855
+					l856:
+						position, tokenIndex = position855, tokenIndex855
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l857
+						}
+						position++
+						goto l855
+					l857:
+						position, tokenIndex = position855, tokenIndex855
+						{
+							position859, tokenIndex859 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l860
+							}
+							position++
+							goto l859
+						l860:
+							position, tokenIndex = position859, tokenIndex859
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l858
+							}
+							position++
+						}
+					l859:
+						goto l855
+					l858:
+						position, tokenIndex = position855, tokenIndex855
+						if buffer[position] != rune('_') {
+							goto l854
+						}
+						position++
 					}
-					goto l853
+				l855:
+					goto l785
 				l854:
 					position, tokenIndex = position854, tokenIndex854
 				}
-				{
-					position855, tokenIndex855 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l855
-					}
-					position++
-					if !_rules[ruleSection]() {
-						goto l855
-					}
-				l857:
-					{
-						position858, tokenIndex858 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l858
-						}
-						goto l857
-					l858:
-						position, tokenIndex = position858, tokenIndex858
-					}
-					goto l856
-				l855:
-					position, tokenIndex = position855, tokenIndex855
-				}
-			l856:
-				add(ruleSymbolRef, position846)
+				add(ruleSVE2SpecialValue, position786)
 			}
 			return true
-		l845:
-			position, tokenIndex = position845, tokenIndex845
+		l785:
+			position, tokenIndex = position785, tokenIndex785
 			return false
 		},
-		/* 52 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		/* 52 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position859, tokenIndex859 := position, tokenIndex
+			position861, tokenIndex861 := position, tokenIndex
 			{
-				position860 := position
-				if buffer[position] != rune(':') {
-					goto l859
-				}
-				position++
-				{
-					position861, tokenIndex861 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l862
-					}
-					position++
-					goto l861
-				l862:
-					position, tokenIndex = position861, tokenIndex861
-					if buffer[position] != rune('L') {
-						goto l859
-					}
-					position++
-				}
-			l861:
+				position862 := position
 				{
 					position863, tokenIndex863 := position, tokenIndex
-					if buffer[position] != rune('o') {
+					if !_rules[ruleSymbolRef]() {
 						goto l864
 					}
-					position++
+					if !_rules[ruleBaseIndexScale]() {
+						goto l864
+					}
 					goto l863
 				l864:
 					position, tokenIndex = position863, tokenIndex863
-					if buffer[position] != rune('O') {
-						goto l859
+					if !_rules[ruleSymbolRef]() {
+						goto l865
+					}
+					goto l863
+				l865:
+					position, tokenIndex = position863, tokenIndex863
+					if !_rules[ruleLow12BitsSymbolRef]() {
+						goto l866
+					}
+					goto l863
+				l866:
+					position, tokenIndex = position863, tokenIndex863
+				l868:
+					{
+						position869, tokenIndex869 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l869
+						}
+						goto l868
+					l869:
+						position, tokenIndex = position869, tokenIndex869
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l867
+					}
+					goto l863
+				l867:
+					position, tokenIndex = position863, tokenIndex863
+					if !_rules[ruleSegmentRegister]() {
+						goto l870
+					}
+					if !_rules[ruleOffset]() {
+						goto l870
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l870
+					}
+					goto l863
+				l870:
+					position, tokenIndex = position863, tokenIndex863
+					if !_rules[ruleSegmentRegister]() {
+						goto l871
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l871
+					}
+					goto l863
+				l871:
+					position, tokenIndex = position863, tokenIndex863
+					if !_rules[ruleSegmentRegister]() {
+						goto l872
+					}
+					if !_rules[ruleOffset]() {
+						goto l872
+					}
+					goto l863
+				l872:
+					position, tokenIndex = position863, tokenIndex863
+					if !_rules[ruleARMBaseIndexScale]() {
+						goto l873
+					}
+					goto l863
+				l873:
+					position, tokenIndex = position863, tokenIndex863
+					if !_rules[ruleBaseIndexScale]() {
+						goto l861
+					}
+				}
+			l863:
+				add(ruleMemoryRef, position862)
+			}
+			return true
+		l861:
+			position, tokenIndex = position861, tokenIndex861
+			return false
+		},
+		/* 53 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
+		func() bool {
+			position874, tokenIndex874 := position, tokenIndex
+			{
+				position875 := position
+				{
+					position876, tokenIndex876 := position, tokenIndex
+				l878:
+					{
+						position879, tokenIndex879 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l879
+						}
+						goto l878
+					l879:
+						position, tokenIndex = position879, tokenIndex879
+					}
+					if buffer[position] != rune('+') {
+						goto l876
+					}
+					position++
+					goto l877
+				l876:
+					position, tokenIndex = position876, tokenIndex876
+				}
+			l877:
+				{
+					position880, tokenIndex880 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l881
+					}
+					goto l880
+				l881:
+					position, tokenIndex = position880, tokenIndex880
+					if !_rules[ruleSymbolName]() {
+						goto l874
+					}
+				}
+			l880:
+			l882:
+				{
+					position883, tokenIndex883 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l883
+					}
+					goto l882
+				l883:
+					position, tokenIndex = position883, tokenIndex883
+				}
+				{
+					position884, tokenIndex884 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l884
+					}
+					position++
+					if !_rules[ruleSection]() {
+						goto l884
+					}
+				l886:
+					{
+						position887, tokenIndex887 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l887
+						}
+						goto l886
+					l887:
+						position, tokenIndex = position887, tokenIndex887
+					}
+					goto l885
+				l884:
+					position, tokenIndex = position884, tokenIndex884
+				}
+			l885:
+				add(ruleSymbolRef, position875)
+			}
+			return true
+		l874:
+			position, tokenIndex = position874, tokenIndex874
+			return false
+		},
+		/* 54 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		func() bool {
+			position888, tokenIndex888 := position, tokenIndex
+			{
+				position889 := position
+				if buffer[position] != rune(':') {
+					goto l888
+				}
+				position++
+				{
+					position890, tokenIndex890 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l891
+					}
+					position++
+					goto l890
+				l891:
+					position, tokenIndex = position890, tokenIndex890
+					if buffer[position] != rune('L') {
+						goto l888
 					}
 					position++
 				}
-			l863:
+			l890:
+				{
+					position892, tokenIndex892 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l893
+					}
+					position++
+					goto l892
+				l893:
+					position, tokenIndex = position892, tokenIndex892
+					if buffer[position] != rune('O') {
+						goto l888
+					}
+					position++
+				}
+			l892:
 				if buffer[position] != rune('1') {
-					goto l859
+					goto l888
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l859
+					goto l888
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l859
+					goto l888
 				}
 				position++
 				{
-					position865, tokenIndex865 := position, tokenIndex
+					position894, tokenIndex894 := position, tokenIndex
 					if !_rules[ruleLocalSymbol]() {
-						goto l866
+						goto l895
 					}
-					goto l865
-				l866:
-					position, tokenIndex = position865, tokenIndex865
+					goto l894
+				l895:
+					position, tokenIndex = position894, tokenIndex894
 					if !_rules[ruleSymbolName]() {
-						goto l859
+						goto l888
 					}
 				}
-			l865:
+			l894:
 				{
-					position867, tokenIndex867 := position, tokenIndex
+					position896, tokenIndex896 := position, tokenIndex
 					if !_rules[ruleOffset]() {
-						goto l867
+						goto l896
 					}
-					goto l868
-				l867:
-					position, tokenIndex = position867, tokenIndex867
+					goto l897
+				l896:
+					position, tokenIndex = position896, tokenIndex896
 				}
-			l868:
-				add(ruleLow12BitsSymbolRef, position860)
+			l897:
+				add(ruleLow12BitsSymbolRef, position889)
 			}
 			return true
-		l859:
-			position, tokenIndex = position859, tokenIndex859
+		l888:
+			position, tokenIndex = position888, tokenIndex888
 			return false
 		},
-		/* 53 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		/* 55 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
 		func() bool {
-			position869, tokenIndex869 := position, tokenIndex
+			position898, tokenIndex898 := position, tokenIndex
 			{
-				position870 := position
+				position899 := position
 				if buffer[position] != rune('[') {
-					goto l869
+					goto l898
 				}
 				position++
 				if !_rules[ruleARMRegister]() {
-					goto l869
+					goto l898
 				}
 				{
-					position871, tokenIndex871 := position, tokenIndex
+					position900, tokenIndex900 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l871
+						goto l900
 					}
 					position++
 					{
-						position873, tokenIndex873 := position, tokenIndex
+						position902, tokenIndex902 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l873
+							goto l902
 						}
-						goto l874
-					l873:
-						position, tokenIndex = position873, tokenIndex873
+						goto l903
+					l902:
+						position, tokenIndex = position902, tokenIndex902
 					}
-				l874:
+				l903:
 					{
-						position875, tokenIndex875 := position, tokenIndex
+						position904, tokenIndex904 := position, tokenIndex
 						if buffer[position] != rune('#') {
-							goto l876
+							goto l905
 						}
 						position++
 						if !_rules[ruleOffset]() {
-							goto l876
+							goto l905
 						}
 						{
-							position877, tokenIndex877 := position, tokenIndex
+							position906, tokenIndex906 := position, tokenIndex
 							{
-								position879, tokenIndex879 := position, tokenIndex
+								position908, tokenIndex908 := position, tokenIndex
 								if buffer[position] != rune('*') {
-									goto l880
+									goto l909
 								}
 								position++
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l880
+									goto l909
 								}
 								position++
-							l881:
+							l910:
 								{
-									position882, tokenIndex882 := position, tokenIndex
+									position911, tokenIndex911 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l882
+										goto l911
 									}
 									position++
-									goto l881
-								l882:
-									position, tokenIndex = position882, tokenIndex882
+									goto l910
+								l911:
+									position, tokenIndex = position911, tokenIndex911
 								}
-								goto l879
-							l880:
-								position, tokenIndex = position879, tokenIndex879
+								goto l908
+							l909:
+								position, tokenIndex = position908, tokenIndex908
 								if buffer[position] != rune('*') {
-									goto l883
+									goto l912
 								}
 								position++
 								if buffer[position] != rune('(') {
-									goto l883
+									goto l912
 								}
 								position++
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l883
+									goto l912
 								}
 								position++
-							l884:
+							l913:
 								{
-									position885, tokenIndex885 := position, tokenIndex
+									position914, tokenIndex914 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l885
+										goto l914
 									}
 									position++
-									goto l884
-								l885:
-									position, tokenIndex = position885, tokenIndex885
+									goto l913
+								l914:
+									position, tokenIndex = position914, tokenIndex914
 								}
 								if !_rules[ruleOperator]() {
-									goto l883
+									goto l912
 								}
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l883
+									goto l912
 								}
 								position++
-							l886:
+							l915:
 								{
-									position887, tokenIndex887 := position, tokenIndex
+									position916, tokenIndex916 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l887
+										goto l916
 									}
 									position++
-									goto l886
-								l887:
-									position, tokenIndex = position887, tokenIndex887
+									goto l915
+								l916:
+									position, tokenIndex = position916, tokenIndex916
 								}
 								if buffer[position] != rune(')') {
-									goto l883
+									goto l912
 								}
 								position++
-								goto l879
-							l883:
-								position, tokenIndex = position879, tokenIndex879
-							l888:
+								goto l908
+							l912:
+								position, tokenIndex = position908, tokenIndex908
+							l917:
 								{
-									position889, tokenIndex889 := position, tokenIndex
+									position918, tokenIndex918 := position, tokenIndex
 									if buffer[position] != rune('+') {
-										goto l889
+										goto l918
 									}
 									position++
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l889
+										goto l918
 									}
 									position++
-								l890:
+								l919:
 									{
-										position891, tokenIndex891 := position, tokenIndex
+										position920, tokenIndex920 := position, tokenIndex
 										if c := buffer[position]; c < rune('0') || c > rune('9') {
-											goto l891
+											goto l920
 										}
 										position++
-										goto l890
-									l891:
-										position, tokenIndex = position891, tokenIndex891
+										goto l919
+									l920:
+										position, tokenIndex = position920, tokenIndex920
 									}
-									goto l888
-								l889:
-									position, tokenIndex = position889, tokenIndex889
+									goto l917
+								l918:
+									position, tokenIndex = position918, tokenIndex918
 								}
 							}
-						l879:
-							goto l878
+						l908:
+							goto l907
 
-							position, tokenIndex = position877, tokenIndex877
+							position, tokenIndex = position906, tokenIndex906
 						}
-					l878:
-						goto l875
-					l876:
-						position, tokenIndex = position875, tokenIndex875
+					l907:
+						goto l904
+					l905:
+						position, tokenIndex = position904, tokenIndex904
 						if !_rules[ruleARMGOTLow12]() {
-							goto l892
+							goto l921
 						}
-						goto l875
-					l892:
-						position, tokenIndex = position875, tokenIndex875
+						goto l904
+					l921:
+						position, tokenIndex = position904, tokenIndex904
 						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l893
-						}
-						goto l875
-					l893:
-						position, tokenIndex = position875, tokenIndex875
-						if !_rules[ruleARMRegister]() {
-							goto l871
-						}
-					}
-				l875:
-					{
-						position894, tokenIndex894 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l894
-						}
-						position++
-						{
-							position896, tokenIndex896 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l896
-							}
-							goto l897
-						l896:
-							position, tokenIndex = position896, tokenIndex896
-						}
-					l897:
-						if !_rules[ruleARMConstantTweak]() {
-							goto l894
-						}
-						goto l895
-					l894:
-						position, tokenIndex = position894, tokenIndex894
-					}
-				l895:
-					goto l872
-				l871:
-					position, tokenIndex = position871, tokenIndex871
-				}
-			l872:
-				if buffer[position] != rune(']') {
-					goto l869
-				}
-				position++
-				{
-					position898, tokenIndex898 := position, tokenIndex
-					if !_rules[ruleARMPostincrement]() {
-						goto l898
-					}
-					goto l899
-				l898:
-					position, tokenIndex = position898, tokenIndex898
-				}
-			l899:
-				add(ruleARMBaseIndexScale, position870)
-			}
-			return true
-		l869:
-			position, tokenIndex = position869, tokenIndex869
-			return false
-		},
-		/* 54 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
-		func() bool {
-			position900, tokenIndex900 := position, tokenIndex
-			{
-				position901 := position
-				if buffer[position] != rune(':') {
-					goto l900
-				}
-				position++
-				{
-					position902, tokenIndex902 := position, tokenIndex
-					if buffer[position] != rune('g') {
-						goto l903
-					}
-					position++
-					goto l902
-				l903:
-					position, tokenIndex = position902, tokenIndex902
-					if buffer[position] != rune('G') {
-						goto l900
-					}
-					position++
-				}
-			l902:
-				{
-					position904, tokenIndex904 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l905
-					}
-					position++
-					goto l904
-				l905:
-					position, tokenIndex = position904, tokenIndex904
-					if buffer[position] != rune('O') {
-						goto l900
-					}
-					position++
-				}
-			l904:
-				{
-					position906, tokenIndex906 := position, tokenIndex
-					if buffer[position] != rune('t') {
-						goto l907
-					}
-					position++
-					goto l906
-				l907:
-					position, tokenIndex = position906, tokenIndex906
-					if buffer[position] != rune('T') {
-						goto l900
-					}
-					position++
-				}
-			l906:
-				if buffer[position] != rune('_') {
-					goto l900
-				}
-				position++
-				{
-					position908, tokenIndex908 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l909
-					}
-					position++
-					goto l908
-				l909:
-					position, tokenIndex = position908, tokenIndex908
-					if buffer[position] != rune('L') {
-						goto l900
-					}
-					position++
-				}
-			l908:
-				{
-					position910, tokenIndex910 := position, tokenIndex
-					if buffer[position] != rune('o') {
-						goto l911
-					}
-					position++
-					goto l910
-				l911:
-					position, tokenIndex = position910, tokenIndex910
-					if buffer[position] != rune('O') {
-						goto l900
-					}
-					position++
-				}
-			l910:
-				if buffer[position] != rune('1') {
-					goto l900
-				}
-				position++
-				if buffer[position] != rune('2') {
-					goto l900
-				}
-				position++
-				if buffer[position] != rune(':') {
-					goto l900
-				}
-				position++
-				if !_rules[ruleSymbolName]() {
-					goto l900
-				}
-				add(ruleARMGOTLow12, position901)
-			}
-			return true
-		l900:
-			position, tokenIndex = position900, tokenIndex900
-			return false
-		},
-		/* 55 ARMPostincrement <- <'!'> */
-		func() bool {
-			position912, tokenIndex912 := position, tokenIndex
-			{
-				position913 := position
-				if buffer[position] != rune('!') {
-					goto l912
-				}
-				position++
-				add(ruleARMPostincrement, position913)
-			}
-			return true
-		l912:
-			position, tokenIndex = position912, tokenIndex912
-			return false
-		},
-		/* 56 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
-		func() bool {
-			position914, tokenIndex914 := position, tokenIndex
-			{
-				position915 := position
-				if buffer[position] != rune('(') {
-					goto l914
-				}
-				position++
-				{
-					position916, tokenIndex916 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l916
-					}
-					goto l917
-				l916:
-					position, tokenIndex = position916, tokenIndex916
-				}
-			l917:
-				{
-					position918, tokenIndex918 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l918
-					}
-					goto l919
-				l918:
-					position, tokenIndex = position918, tokenIndex918
-				}
-			l919:
-				{
-					position920, tokenIndex920 := position, tokenIndex
-					if buffer[position] != rune(',') {
-						goto l920
-					}
-					position++
-					{
-						position922, tokenIndex922 := position, tokenIndex
-						if !_rules[ruleWS]() {
 							goto l922
 						}
-						goto l923
+						goto l904
 					l922:
-						position, tokenIndex = position922, tokenIndex922
-					}
-				l923:
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l920
-					}
-					{
-						position924, tokenIndex924 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l924
+						position, tokenIndex = position904, tokenIndex904
+						if !_rules[ruleARMRegister]() {
+							goto l900
 						}
-						goto l925
-					l924:
-						position, tokenIndex = position924, tokenIndex924
 					}
-				l925:
+				l904:
 					{
-						position926, tokenIndex926 := position, tokenIndex
+						position923, tokenIndex923 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l926
+							goto l923
 						}
 						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l926
-						}
-						position++
-					l928:
 						{
-							position929, tokenIndex929 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l929
+							position925, tokenIndex925 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l925
 							}
-							position++
-							goto l928
-						l929:
-							position, tokenIndex = position929, tokenIndex929
+							goto l926
+						l925:
+							position, tokenIndex = position925, tokenIndex925
 						}
-						goto l927
 					l926:
-						position, tokenIndex = position926, tokenIndex926
+						if !_rules[ruleARMConstantTweak]() {
+							goto l923
+						}
+						goto l924
+					l923:
+						position, tokenIndex = position923, tokenIndex923
 					}
-				l927:
-					goto l921
-				l920:
-					position, tokenIndex = position920, tokenIndex920
+				l924:
+					goto l901
+				l900:
+					position, tokenIndex = position900, tokenIndex900
 				}
-			l921:
-				if buffer[position] != rune(')') {
-					goto l914
+			l901:
+				if buffer[position] != rune(']') {
+					goto l898
 				}
 				position++
-				add(ruleBaseIndexScale, position915)
+				{
+					position927, tokenIndex927 := position, tokenIndex
+					if !_rules[ruleARMPostincrement]() {
+						goto l927
+					}
+					goto l928
+				l927:
+					position, tokenIndex = position927, tokenIndex927
+				}
+			l928:
+				add(ruleARMBaseIndexScale, position899)
 			}
 			return true
-		l914:
-			position, tokenIndex = position914, tokenIndex914
+		l898:
+			position, tokenIndex = position898, tokenIndex898
 			return false
 		},
-		/* 57 Operator <- <('+' / '-')> */
+		/* 56 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
 		func() bool {
-			position930, tokenIndex930 := position, tokenIndex
+			position929, tokenIndex929 := position, tokenIndex
 			{
-				position931 := position
+				position930 := position
+				if buffer[position] != rune(':') {
+					goto l929
+				}
+				position++
 				{
-					position932, tokenIndex932 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l933
+					position931, tokenIndex931 := position, tokenIndex
+					if buffer[position] != rune('g') {
+						goto l932
 					}
 					position++
-					goto l932
-				l933:
-					position, tokenIndex = position932, tokenIndex932
-					if buffer[position] != rune('-') {
-						goto l930
+					goto l931
+				l932:
+					position, tokenIndex = position931, tokenIndex931
+					if buffer[position] != rune('G') {
+						goto l929
 					}
 					position++
 				}
-			l932:
-				add(ruleOperator, position931)
-			}
-			return true
-		l930:
-			position, tokenIndex = position930, tokenIndex930
-			return false
-		},
-		/* 58 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
-		func() bool {
-			position934, tokenIndex934 := position, tokenIndex
-			{
-				position935 := position
+			l931:
 				{
-					position936, tokenIndex936 := position, tokenIndex
-					if buffer[position] != rune('+') {
+					position933, tokenIndex933 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l934
+					}
+					position++
+					goto l933
+				l934:
+					position, tokenIndex = position933, tokenIndex933
+					if buffer[position] != rune('O') {
+						goto l929
+					}
+					position++
+				}
+			l933:
+				{
+					position935, tokenIndex935 := position, tokenIndex
+					if buffer[position] != rune('t') {
 						goto l936
 					}
 					position++
-					goto l937
+					goto l935
 				l936:
-					position, tokenIndex = position936, tokenIndex936
+					position, tokenIndex = position935, tokenIndex935
+					if buffer[position] != rune('T') {
+						goto l929
+					}
+					position++
 				}
-			l937:
+			l935:
+				if buffer[position] != rune('_') {
+					goto l929
+				}
+				position++
 				{
-					position938, tokenIndex938 := position, tokenIndex
-					if buffer[position] != rune('-') {
+					position937, tokenIndex937 := position, tokenIndex
+					if buffer[position] != rune('l') {
 						goto l938
 					}
 					position++
-					goto l939
+					goto l937
 				l938:
-					position, tokenIndex = position938, tokenIndex938
-				}
-			l939:
-				{
-					position940, tokenIndex940 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l941
+					position, tokenIndex = position937, tokenIndex937
+					if buffer[position] != rune('L') {
+						goto l929
 					}
 					position++
-					{
-						position942, tokenIndex942 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l943
-						}
-						position++
-						goto l942
-					l943:
-						position, tokenIndex = position942, tokenIndex942
-						if buffer[position] != rune('B') {
-							goto l941
-						}
-						position++
+				}
+			l937:
+				{
+					position939, tokenIndex939 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l940
 					}
-				l942:
-					{
-						position946, tokenIndex946 := position, tokenIndex
-						if buffer[position] != rune('0') {
-							goto l947
-						}
-						position++
-						goto l946
-					l947:
-						position, tokenIndex = position946, tokenIndex946
-						if buffer[position] != rune('1') {
-							goto l941
-						}
-						position++
+					position++
+					goto l939
+				l940:
+					position, tokenIndex = position939, tokenIndex939
+					if buffer[position] != rune('O') {
+						goto l929
 					}
-				l946:
-				l944:
-					{
-						position945, tokenIndex945 := position, tokenIndex
-						{
-							position948, tokenIndex948 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l949
-							}
-							position++
-							goto l948
-						l949:
-							position, tokenIndex = position948, tokenIndex948
-							if buffer[position] != rune('1') {
-								goto l945
-							}
-							position++
-						}
-					l948:
-						goto l944
-					l945:
-						position, tokenIndex = position945, tokenIndex945
+					position++
+				}
+			l939:
+				if buffer[position] != rune('1') {
+					goto l929
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l929
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l929
+				}
+				position++
+				if !_rules[ruleSymbolName]() {
+					goto l929
+				}
+				add(ruleARMGOTLow12, position930)
+			}
+			return true
+		l929:
+			position, tokenIndex = position929, tokenIndex929
+			return false
+		},
+		/* 57 ARMPostincrement <- <'!'> */
+		func() bool {
+			position941, tokenIndex941 := position, tokenIndex
+			{
+				position942 := position
+				if buffer[position] != rune('!') {
+					goto l941
+				}
+				position++
+				add(ruleARMPostincrement, position942)
+			}
+			return true
+		l941:
+			position, tokenIndex = position941, tokenIndex941
+			return false
+		},
+		/* 58 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		func() bool {
+			position943, tokenIndex943 := position, tokenIndex
+			{
+				position944 := position
+				if buffer[position] != rune('(') {
+					goto l943
+				}
+				position++
+				{
+					position945, tokenIndex945 := position, tokenIndex
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l945
 					}
-					goto l940
-				l941:
-					position, tokenIndex = position940, tokenIndex940
-					if buffer[position] != rune('0') {
-						goto l950
+					goto l946
+				l945:
+					position, tokenIndex = position945, tokenIndex945
+				}
+			l946:
+				{
+					position947, tokenIndex947 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l947
+					}
+					goto l948
+				l947:
+					position, tokenIndex = position947, tokenIndex947
+				}
+			l948:
+				{
+					position949, tokenIndex949 := position, tokenIndex
+					if buffer[position] != rune(',') {
+						goto l949
 					}
 					position++
 					{
 						position951, tokenIndex951 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l952
+						if !_rules[ruleWS]() {
+							goto l951
 						}
-						position++
-						goto l951
-					l952:
+						goto l952
+					l951:
 						position, tokenIndex = position951, tokenIndex951
-						if buffer[position] != rune('X') {
-							goto l950
-						}
-						position++
 					}
-				l951:
+				l952:
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l949
+					}
+					{
+						position953, tokenIndex953 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l953
+						}
+						goto l954
+					l953:
+						position, tokenIndex = position953, tokenIndex953
+					}
+				l954:
 					{
 						position955, tokenIndex955 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l956
+						if buffer[position] != rune(',') {
+							goto l955
 						}
 						position++
-						goto l955
-					l956:
-						position, tokenIndex = position955, tokenIndex955
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l957
+							goto l955
 						}
 						position++
-						goto l955
 					l957:
-						position, tokenIndex = position955, tokenIndex955
 						{
 							position958, tokenIndex958 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l959
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l958
 							}
 							position++
-							goto l958
-						l959:
+							goto l957
+						l958:
 							position, tokenIndex = position958, tokenIndex958
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l950
-							}
-							position++
 						}
-					l958:
+						goto l956
+					l955:
+						position, tokenIndex = position955, tokenIndex955
 					}
-				l955:
-				l953:
-					{
-						position954, tokenIndex954 := position, tokenIndex
-						{
-							position960, tokenIndex960 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l961
-							}
-							position++
-							goto l960
-						l961:
-							position, tokenIndex = position960, tokenIndex960
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l962
-							}
-							position++
-							goto l960
-						l962:
-							position, tokenIndex = position960, tokenIndex960
-							{
-								position963, tokenIndex963 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l964
-								}
-								position++
-								goto l963
-							l964:
-								position, tokenIndex = position963, tokenIndex963
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l954
-								}
-								position++
-							}
-						l963:
-						}
-					l960:
-						goto l953
-					l954:
-						position, tokenIndex = position954, tokenIndex954
-					}
-					goto l940
-				l950:
-					position, tokenIndex = position940, tokenIndex940
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l934
-					}
-					position++
-				l965:
-					{
-						position966, tokenIndex966 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l966
-						}
-						position++
-						goto l965
-					l966:
-						position, tokenIndex = position966, tokenIndex966
-					}
+				l956:
+					goto l950
+				l949:
+					position, tokenIndex = position949, tokenIndex949
 				}
-			l940:
-				add(ruleOffset, position935)
+			l950:
+				if buffer[position] != rune(')') {
+					goto l943
+				}
+				position++
+				add(ruleBaseIndexScale, position944)
 			}
 			return true
-		l934:
-			position, tokenIndex = position934, tokenIndex934
+		l943:
+			position, tokenIndex = position943, tokenIndex943
 			return false
 		},
-		/* 59 Section <- <([a-z] / [A-Z] / '@')+> */
+		/* 59 Operator <- <('+' / '-')> */
 		func() bool {
-			position967, tokenIndex967 := position, tokenIndex
+			position959, tokenIndex959 := position, tokenIndex
 			{
-				position968 := position
+				position960 := position
 				{
-					position971, tokenIndex971 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l972
+					position961, tokenIndex961 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l962
 					}
 					position++
-					goto l971
-				l972:
-					position, tokenIndex = position971, tokenIndex971
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l973
+					goto l961
+				l962:
+					position, tokenIndex = position961, tokenIndex961
+					if buffer[position] != rune('-') {
+						goto l959
 					}
 					position++
-					goto l971
-				l973:
-					position, tokenIndex = position971, tokenIndex971
-					if buffer[position] != rune('@') {
+				}
+			l961:
+				add(ruleOperator, position960)
+			}
+			return true
+		l959:
+			position, tokenIndex = position959, tokenIndex959
+			return false
+		},
+		/* 60 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position963, tokenIndex963 := position, tokenIndex
+			{
+				position964 := position
+				{
+					position965, tokenIndex965 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l965
+					}
+					position++
+					goto l966
+				l965:
+					position, tokenIndex = position965, tokenIndex965
+				}
+			l966:
+				{
+					position967, tokenIndex967 := position, tokenIndex
+					if buffer[position] != rune('-') {
 						goto l967
 					}
 					position++
+					goto l968
+				l967:
+					position, tokenIndex = position967, tokenIndex967
 				}
-			l971:
-			l969:
+			l968:
 				{
-					position970, tokenIndex970 := position, tokenIndex
+					position969, tokenIndex969 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l970
+					}
+					position++
 					{
-						position974, tokenIndex974 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l975
+						position971, tokenIndex971 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l972
 						}
 						position++
-						goto l974
-					l975:
-						position, tokenIndex = position974, tokenIndex974
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l976
-						}
-						position++
-						goto l974
-					l976:
-						position, tokenIndex = position974, tokenIndex974
-						if buffer[position] != rune('@') {
+						goto l971
+					l972:
+						position, tokenIndex = position971, tokenIndex971
+						if buffer[position] != rune('B') {
 							goto l970
 						}
 						position++
 					}
-				l974:
+				l971:
+					{
+						position975, tokenIndex975 := position, tokenIndex
+						if buffer[position] != rune('0') {
+							goto l976
+						}
+						position++
+						goto l975
+					l976:
+						position, tokenIndex = position975, tokenIndex975
+						if buffer[position] != rune('1') {
+							goto l970
+						}
+						position++
+					}
+				l975:
+				l973:
+					{
+						position974, tokenIndex974 := position, tokenIndex
+						{
+							position977, tokenIndex977 := position, tokenIndex
+							if buffer[position] != rune('0') {
+								goto l978
+							}
+							position++
+							goto l977
+						l978:
+							position, tokenIndex = position977, tokenIndex977
+							if buffer[position] != rune('1') {
+								goto l974
+							}
+							position++
+						}
+					l977:
+						goto l973
+					l974:
+						position, tokenIndex = position974, tokenIndex974
+					}
 					goto l969
 				l970:
-					position, tokenIndex = position970, tokenIndex970
+					position, tokenIndex = position969, tokenIndex969
+					if buffer[position] != rune('0') {
+						goto l979
+					}
+					position++
+					{
+						position980, tokenIndex980 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l981
+						}
+						position++
+						goto l980
+					l981:
+						position, tokenIndex = position980, tokenIndex980
+						if buffer[position] != rune('X') {
+							goto l979
+						}
+						position++
+					}
+				l980:
+					{
+						position984, tokenIndex984 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l985
+						}
+						position++
+						goto l984
+					l985:
+						position, tokenIndex = position984, tokenIndex984
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l986
+						}
+						position++
+						goto l984
+					l986:
+						position, tokenIndex = position984, tokenIndex984
+						{
+							position987, tokenIndex987 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('f') {
+								goto l988
+							}
+							position++
+							goto l987
+						l988:
+							position, tokenIndex = position987, tokenIndex987
+							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l979
+							}
+							position++
+						}
+					l987:
+					}
+				l984:
+				l982:
+					{
+						position983, tokenIndex983 := position, tokenIndex
+						{
+							position989, tokenIndex989 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l990
+							}
+							position++
+							goto l989
+						l990:
+							position, tokenIndex = position989, tokenIndex989
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l991
+							}
+							position++
+							goto l989
+						l991:
+							position, tokenIndex = position989, tokenIndex989
+							{
+								position992, tokenIndex992 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('f') {
+									goto l993
+								}
+								position++
+								goto l992
+							l993:
+								position, tokenIndex = position992, tokenIndex992
+								if c := buffer[position]; c < rune('A') || c > rune('F') {
+									goto l983
+								}
+								position++
+							}
+						l992:
+						}
+					l989:
+						goto l982
+					l983:
+						position, tokenIndex = position983, tokenIndex983
+					}
+					goto l969
+				l979:
+					position, tokenIndex = position969, tokenIndex969
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l963
+					}
+					position++
+				l994:
+					{
+						position995, tokenIndex995 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l995
+						}
+						position++
+						goto l994
+					l995:
+						position, tokenIndex = position995, tokenIndex995
+					}
 				}
-				add(ruleSection, position968)
+			l969:
+				add(ruleOffset, position964)
 			}
 			return true
-		l967:
-			position, tokenIndex = position967, tokenIndex967
+		l963:
+			position, tokenIndex = position963, tokenIndex963
 			return false
 		},
-		/* 60 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		/* 61 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position977, tokenIndex977 := position, tokenIndex
+			position996, tokenIndex996 := position, tokenIndex
 			{
-				position978 := position
+				position997 := position
+				{
+					position1000, tokenIndex1000 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l1001
+					}
+					position++
+					goto l1000
+				l1001:
+					position, tokenIndex = position1000, tokenIndex1000
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l1002
+					}
+					position++
+					goto l1000
+				l1002:
+					position, tokenIndex = position1000, tokenIndex1000
+					if buffer[position] != rune('@') {
+						goto l996
+					}
+					position++
+				}
+			l1000:
+			l998:
+				{
+					position999, tokenIndex999 := position, tokenIndex
+					{
+						position1003, tokenIndex1003 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l1004
+						}
+						position++
+						goto l1003
+					l1004:
+						position, tokenIndex = position1003, tokenIndex1003
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l1005
+						}
+						position++
+						goto l1003
+					l1005:
+						position, tokenIndex = position1003, tokenIndex1003
+						if buffer[position] != rune('@') {
+							goto l999
+						}
+						position++
+					}
+				l1003:
+					goto l998
+				l999:
+					position, tokenIndex = position999, tokenIndex999
+				}
+				add(ruleSection, position997)
+			}
+			return true
+		l996:
+			position, tokenIndex = position996, tokenIndex996
+			return false
+		},
+		/* 62 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		func() bool {
+			position1006, tokenIndex1006 := position, tokenIndex
+			{
+				position1007 := position
 				if buffer[position] != rune('%') {
-					goto l977
+					goto l1006
 				}
 				position++
 				{
-					position979, tokenIndex979 := position, tokenIndex
+					position1008, tokenIndex1008 := position, tokenIndex
 					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l980
+						goto l1009
 					}
 					position++
-					goto l979
-				l980:
-					position, tokenIndex = position979, tokenIndex979
+					goto l1008
+				l1009:
+					position, tokenIndex = position1008, tokenIndex1008
 					if buffer[position] != rune('s') {
-						goto l977
+						goto l1006
 					}
 					position++
 				}
-			l979:
+			l1008:
 				if buffer[position] != rune('s') {
-					goto l977
+					goto l1006
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l977
+					goto l1006
 				}
 				position++
-				add(ruleSegmentRegister, position978)
+				add(ruleSegmentRegister, position1007)
 			}
 			return true
-		l977:
-			position, tokenIndex = position977, tokenIndex977
+		l1006:
+			position, tokenIndex = position1006, tokenIndex1006
 			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 7d3ce77..5c2bc62 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
@@ -12,6 +12,11 @@
 	jbe foo
 	jne foo
 
+	# This also applies to symbols defined with .set
+	call foo1
+	call foo2
+	call foo3
+
 	# Jumps to PLT symbols are rewritten through redirectors.
 	call memcpy@PLT
 	jmp memcpy@PLT
@@ -47,3 +52,12 @@
 
 	.quad 2b - 1b
 	.quad 2b - .L2
+
+	# .set directives should get local targets and have their references (above)
+	# rewritten.
+	.globl foo1
+	.globl foo2
+	.globl foo3
+	.set foo1, foo
+	.equ foo2, foo
+	.equiv foo3, foo
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
index b925655..8500af9 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
@@ -1,4 +1,4 @@
-	# References to local labels are rewrittenn in subsequent files.
+	# References to local labels are rewritten in subsequent files.
 .Llocal_label:
 	jbe .Llocal_label
 	leaq .Llocal_label+2048(%rip), %r14
@@ -17,3 +17,16 @@
 # will store offsets in it.
 .byte   (.LBB231_40-.LBB231_19)>>2, 4, .Lfoo, (.Lfoo), .Lfoo<<400, (   .Lfoo ) <<  66
 .byte   421
+
+# .set directives defining local symbols should be rewritten.
+.set .Llocally_set_symbol1, 1
+.equ .Llocally_set_symbol2, 2
+.equiv .Llocally_set_symbol3, 3
+
+# References to local symbols in .set directives should be rewritten.
+.set alias_to_local_label, .Llocal_label
+.equ alias_to_local_label, .Llocal_label
+.equiv alias_to_local_label, .Llocal_label
+.set .Llocal_alias_to_local_label, .Llocal_label
+.equ .Llocal_alias_to_local_label, .Llocal_label
+.equiv .Llocal_alias_to_local_label, .Llocal_label
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
index f0039e4..2ce18a7 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
@@ -23,6 +23,14 @@
 # WAS jne foo
 	jne	.Lfoo_local_target
 
+	# This also applies to symbols defined with .set
+# WAS call foo1
+	call	.Lfoo1_local_target
+# WAS call foo2
+	call	.Lfoo2_local_target
+# WAS call foo3
+	call	.Lfoo3_local_target
+
 	# Jumps to PLT symbols are rewritten through redirectors.
 # WAS call memcpy@PLT
 	call	bcm_redirector_memcpy
@@ -72,7 +80,19 @@
 
 	.quad 2b - 1b
 	.quad 2b - .L2
-	# References to local labels are rewrittenn in subsequent files.
+
+	# .set directives should get local targets and have their references (above)
+	# rewritten.
+	.globl foo1
+	.globl foo2
+	.globl foo3
+	.set foo1, foo
+	.set	.Lfoo1_local_target, foo
+	.equ foo2, foo
+	.equ	.Lfoo2_local_target, foo
+	.equiv foo3, foo
+	.equiv	.Lfoo3_local_target, foo
+	# References to local labels are rewritten in subsequent files.
 .Llocal_label_BCM_1:
 
 # WAS jbe .Llocal_label
@@ -102,6 +122,31 @@
 # WAS .byte   (.LBB231_40-.LBB231_19)>>2, 4, .Lfoo, (.Lfoo), .Lfoo<<400, (   .Lfoo ) <<  66
 	.byte	(.LBB231_40_BCM_1-.LBB231_19_BCM_1)>>2, 4, .Lfoo_BCM_1, (.Lfoo_BCM_1), .Lfoo_BCM_1<<400, (.Lfoo_BCM_1)<<66
 .byte   421
+
+# .set directives defining local symbols should be rewritten.
+# WAS .set .Llocally_set_symbol1, 1
+	.set	.Llocally_set_symbol1_BCM_1, 1
+# WAS .equ .Llocally_set_symbol2, 2
+	.equ	.Llocally_set_symbol2_BCM_1, 2
+# WAS .equiv .Llocally_set_symbol3, 3
+	.equiv	.Llocally_set_symbol3_BCM_1, 3
+
+# References to local symbols in .set directives should be rewritten.
+# WAS .set alias_to_local_label, .Llocal_label
+	.set	alias_to_local_label, .Llocal_label_BCM_1
+	.set	.Lalias_to_local_label_local_target, .Llocal_label_BCM_1
+# WAS .equ alias_to_local_label, .Llocal_label
+	.equ	alias_to_local_label, .Llocal_label_BCM_1
+	.equ	.Lalias_to_local_label_local_target, .Llocal_label_BCM_1
+# WAS .equiv alias_to_local_label, .Llocal_label
+	.equiv	alias_to_local_label, .Llocal_label_BCM_1
+	.equiv	.Lalias_to_local_label_local_target, .Llocal_label_BCM_1
+# WAS .set .Llocal_alias_to_local_label, .Llocal_label
+	.set	.Llocal_alias_to_local_label_BCM_1, .Llocal_label_BCM_1
+# WAS .equ .Llocal_alias_to_local_label, .Llocal_label
+	.equ	.Llocal_alias_to_local_label_BCM_1, .Llocal_label_BCM_1
+# WAS .equiv .Llocal_alias_to_local_label, .Llocal_label
+	.equiv	.Llocal_alias_to_local_label_BCM_1, .Llocal_label_BCM_1
 .text
 .loc 1 2 0
 BORINGSSL_bcm_text_end: