delocate: handle Aarch64 assembly in parser.

Aarch64 assembly is quite different from x86-64 or POWER. But the system
of directives is the same so there's quite a lot of utility from being
able to use the same delocate framework.

Unfortunately, with peg, there's no obvious way to be able to parse
instructions differently without breaking the parsing into two stages.
Thus the parser is extended here to support all three ISAs. This seems
to work ok without breaking either of the other two.

Change-Id: Iced0f651e556e6ffae3eb35f2edfc0bf84167967
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/44846
Commit-Queue: Adam Langley <agl@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 34dd3f6..4392949 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -30,13 +30,15 @@
 GlobalDirective <- (".global" / ".globl") WS SymbolName
 Directive <- '.' DirectiveName (WS Args)?
 DirectiveName <- [[A-Z0-9_]]+
-LocationDirective <- (".file" / ".loc") WS [^#\n]+
+LocationDirective <- FileDirective / LocDirective
+FileDirective <- ".file" WS [^#\n]+
+LocDirective <- ".loc" WS [^#/\n]+
 Args <- Arg ((WS? ',' WS?) Arg)*
 Arg <- QuotedArg / [[0-9a-z%+\-*_@.]]*
 QuotedArg <- '"' QuotedText '"'
 QuotedText <- (EscapedChar / [^"])*
 LabelContainingDirective <- LabelContainingDirectiveName WS SymbolArgs
-LabelContainingDirectiveName <- ".long" / ".set" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
+LabelContainingDirectiveName <- ".xword" / ".word" / ".long" / ".set" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
 SymbolArgs <- SymbolArg ((WS? ',' WS?) SymbolArg)*
 SymbolArg <- Offset /
              SymbolType /
@@ -44,38 +46,53 @@
              LocalSymbol TCMarker? /
              SymbolName Offset /
              SymbolName TCMarker?
-SymbolType <- '@function' / '@object'
+SymbolType <- [@%] ('function' / 'object')
 Dot <- '.'
 TCMarker <- '[TC]'
 EscapedChar <- '\\' .
 WS <- [ \t]+
-Comment <- '#' [^\n]*
+Comment <- ("//" / '#') [^\n]*
 Label <- (LocalSymbol / LocalLabel / SymbolName) ':'
 SymbolName <- [[A-Z._]][[A-Z.0-9$_]]*
 LocalSymbol <- '.L' [[A-Za-z.0-9$_]]+
 LocalLabel <- [0-9][0-9$]*
 LocalLabelRef <- [0-9][0-9$]*[bf]
 Instruction <- InstructionName (WS InstructionArg ((WS? ',' WS?) InstructionArg)*)?
-InstructionName <- [[A-Z]][[A-Z0-9]]* [.+\-]?
-InstructionArg <- IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*
+InstructionName <- [[A-Z]][[A-Z.0-9]]* [.+\-]?
+InstructionArg <- IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*
 GOTLocation <- '$_GLOBAL_OFFSET_TABLE_-' LocalSymbol
-GOTSymbolOffset <- '$' SymbolName '@GOT' 'OFF'?
+GOTSymbolOffset <- ('$' SymbolName '@GOT' 'OFF'?) / (":got:" SymbolName)
 AVX512Token <- WS? '{' '%'? [0-9a-z]* '}'
 TOCRefHigh <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@ha"
 TOCRefLow <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@l"
 IndirectionIndicator <- '*'
-RegisterOrConstant <- (('%'[[A-Z]][[A-Z0-9]]*) / ('$'? ((Offset Offset) / Offset))) ![fb:(+\-]
+RegisterOrConstant <- (('%'[[A-Z]][[A-Z0-9]]*) /
+                       ('$'? ((Offset Offset) / Offset)) /
+                       ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)? ) /
+                       ('#' '~'? '(' [0-9] WS? "<<" WS? [0-9] ')' ) /
+                       ARMRegister)
+                      ![fb:(+\-]
+ARMConstantTweak <- ("lsl" / "sxtw" / "uxtw" / "uxtb" / "lsr" / "ror" / "asr") (WS '#' Offset)?
+ARMRegister <- "sp" / ([xwdqs] [0-9] [0-9]?) / "xzr" / "wzr" / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] ']')? )
+ARMVectorRegister <- "v" [0-9] [0-9]? ('.' [0-9]* [bsdhq] ('[' [0-9] [0-9]? ']')? )?
 # Compilers only output a very limited number of expression forms. Rather than
 # implement a full expression parser, this enumerate those forms plus a few
 # that appear in our hand-written assembly.
 MemoryRef <- (SymbolRef BaseIndexScale /
               SymbolRef /
+              Low12BitsSymbolRef /
               Offset* BaseIndexScale /
               SegmentRegister Offset BaseIndexScale /
               SegmentRegister BaseIndexScale /
               SegmentRegister Offset /
+              ARMBaseIndexScale /
               BaseIndexScale)
 SymbolRef <- (Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?
+Low12BitsSymbolRef <- ":lo12:" (LocalSymbol / SymbolName) Offset?
+ARMBaseIndexScale <- '[' ARMRegister (',' WS? (('#' Offset ('*' [0-9]+)? ) / ARMGOTLow12 / ARMCapReference / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?
+ARMGOTLow12 <- ":got_lo12:" SymbolName
+ARMCapReference <- ":lo12:OPENSSL_armcap_P"
+ARMPostincrement <- '!'
 BaseIndexScale <- '(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)? )? ')'
 Operator <- [+\-]
 Offset <- '+'? '-'? (("0b" [01]+) / ("0x" [[0-9A-F]]+) / [0-9]+)
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index 3007352..85858e5 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -20,6 +20,8 @@
 	ruleDirective
 	ruleDirectiveName
 	ruleLocationDirective
+	ruleFileDirective
+	ruleLocDirective
 	ruleArgs
 	ruleArg
 	ruleQuotedArg
@@ -49,8 +51,16 @@
 	ruleTOCRefLow
 	ruleIndirectionIndicator
 	ruleRegisterOrConstant
+	ruleARMConstantTweak
+	ruleARMRegister
+	ruleARMVectorRegister
 	ruleMemoryRef
 	ruleSymbolRef
+	ruleLow12BitsSymbolRef
+	ruleARMBaseIndexScale
+	ruleARMGOTLow12
+	ruleARMCapReference
+	ruleARMPostincrement
 	ruleBaseIndexScale
 	ruleOperator
 	ruleOffset
@@ -66,6 +76,8 @@
 	"Directive",
 	"DirectiveName",
 	"LocationDirective",
+	"FileDirective",
+	"LocDirective",
 	"Args",
 	"Arg",
 	"QuotedArg",
@@ -95,8 +107,16 @@
 	"TOCRefLow",
 	"IndirectionIndicator",
 	"RegisterOrConstant",
+	"ARMConstantTweak",
+	"ARMRegister",
+	"ARMVectorRegister",
 	"MemoryRef",
 	"SymbolRef",
+	"Low12BitsSymbolRef",
+	"ARMBaseIndexScale",
+	"ARMGOTLow12",
+	"ARMCapReference",
+	"ARMPostincrement",
 	"BaseIndexScale",
 	"Operator",
 	"Offset",
@@ -216,7 +236,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [43]func() bool
+	rules  [53]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -834,189 +854,24 @@
 			position, tokenIndex = position54, tokenIndex54
 			return false
 		},
-		/* 5 LocationDirective <- <((('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C'))) WS (!('#' / '\n') .)+)> */
+		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
 		func() bool {
 			position70, tokenIndex70 := position, tokenIndex
 			{
 				position71 := position
 				{
 					position72, tokenIndex72 := position, tokenIndex
-					if buffer[position] != rune('.') {
+					if !_rules[ruleFileDirective]() {
 						goto l73
 					}
-					position++
-					{
-						position74, tokenIndex74 := position, tokenIndex
-						if buffer[position] != rune('f') {
-							goto l75
-						}
-						position++
-						goto l74
-					l75:
-						position, tokenIndex = position74, tokenIndex74
-						if buffer[position] != rune('F') {
-							goto l73
-						}
-						position++
-					}
-				l74:
-					{
-						position76, tokenIndex76 := position, tokenIndex
-						if buffer[position] != rune('i') {
-							goto l77
-						}
-						position++
-						goto l76
-					l77:
-						position, tokenIndex = position76, tokenIndex76
-						if buffer[position] != rune('I') {
-							goto l73
-						}
-						position++
-					}
-				l76:
-					{
-						position78, tokenIndex78 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l79
-						}
-						position++
-						goto l78
-					l79:
-						position, tokenIndex = position78, tokenIndex78
-						if buffer[position] != rune('L') {
-							goto l73
-						}
-						position++
-					}
-				l78:
-					{
-						position80, tokenIndex80 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l81
-						}
-						position++
-						goto l80
-					l81:
-						position, tokenIndex = position80, tokenIndex80
-						if buffer[position] != rune('E') {
-							goto l73
-						}
-						position++
-					}
-				l80:
 					goto l72
 				l73:
 					position, tokenIndex = position72, tokenIndex72
-					if buffer[position] != rune('.') {
+					if !_rules[ruleLocDirective]() {
 						goto l70
 					}
-					position++
-					{
-						position82, tokenIndex82 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l83
-						}
-						position++
-						goto l82
-					l83:
-						position, tokenIndex = position82, tokenIndex82
-						if buffer[position] != rune('L') {
-							goto l70
-						}
-						position++
-					}
-				l82:
-					{
-						position84, tokenIndex84 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l85
-						}
-						position++
-						goto l84
-					l85:
-						position, tokenIndex = position84, tokenIndex84
-						if buffer[position] != rune('O') {
-							goto l70
-						}
-						position++
-					}
-				l84:
-					{
-						position86, tokenIndex86 := position, tokenIndex
-						if buffer[position] != rune('c') {
-							goto l87
-						}
-						position++
-						goto l86
-					l87:
-						position, tokenIndex = position86, tokenIndex86
-						if buffer[position] != rune('C') {
-							goto l70
-						}
-						position++
-					}
-				l86:
 				}
 			l72:
-				if !_rules[ruleWS]() {
-					goto l70
-				}
-				{
-					position90, tokenIndex90 := position, tokenIndex
-					{
-						position91, tokenIndex91 := position, tokenIndex
-						if buffer[position] != rune('#') {
-							goto l92
-						}
-						position++
-						goto l91
-					l92:
-						position, tokenIndex = position91, tokenIndex91
-						if buffer[position] != rune('\n') {
-							goto l90
-						}
-						position++
-					}
-				l91:
-					goto l70
-				l90:
-					position, tokenIndex = position90, tokenIndex90
-				}
-				if !matchDot() {
-					goto l70
-				}
-			l88:
-				{
-					position89, tokenIndex89 := position, tokenIndex
-					{
-						position93, tokenIndex93 := position, tokenIndex
-						{
-							position94, tokenIndex94 := position, tokenIndex
-							if buffer[position] != rune('#') {
-								goto l95
-							}
-							position++
-							goto l94
-						l95:
-							position, tokenIndex = position94, tokenIndex94
-							if buffer[position] != rune('\n') {
-								goto l93
-							}
-							position++
-						}
-					l94:
-						goto l89
-					l93:
-						position, tokenIndex = position93, tokenIndex93
-					}
-					if !matchDot() {
-						goto l89
-					}
-					goto l88
-				l89:
-					position, tokenIndex = position89, tokenIndex89
-				}
 				add(ruleLocationDirective, position71)
 			}
 			return true
@@ -1024,459 +879,614 @@
 			position, tokenIndex = position70, tokenIndex70
 			return false
 		},
-		/* 6 Args <- <(Arg (WS? ',' WS? Arg)*)> */
+		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
 		func() bool {
-			position96, tokenIndex96 := position, tokenIndex
+			position74, tokenIndex74 := position, tokenIndex
 			{
-				position97 := position
-				if !_rules[ruleArg]() {
-					goto l96
+				position75 := position
+				if buffer[position] != rune('.') {
+					goto l74
 				}
-			l98:
+				position++
 				{
-					position99, tokenIndex99 := position, tokenIndex
-					{
-						position100, tokenIndex100 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l100
-						}
-						goto l101
-					l100:
-						position, tokenIndex = position100, tokenIndex100
+					position76, tokenIndex76 := position, tokenIndex
+					if buffer[position] != rune('f') {
+						goto l77
 					}
-				l101:
-					if buffer[position] != rune(',') {
+					position++
+					goto l76
+				l77:
+					position, tokenIndex = position76, tokenIndex76
+					if buffer[position] != rune('F') {
+						goto l74
+					}
+					position++
+				}
+			l76:
+				{
+					position78, tokenIndex78 := position, tokenIndex
+					if buffer[position] != rune('i') {
+						goto l79
+					}
+					position++
+					goto l78
+				l79:
+					position, tokenIndex = position78, tokenIndex78
+					if buffer[position] != rune('I') {
+						goto l74
+					}
+					position++
+				}
+			l78:
+				{
+					position80, tokenIndex80 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l81
+					}
+					position++
+					goto l80
+				l81:
+					position, tokenIndex = position80, tokenIndex80
+					if buffer[position] != rune('L') {
+						goto l74
+					}
+					position++
+				}
+			l80:
+				{
+					position82, tokenIndex82 := position, tokenIndex
+					if buffer[position] != rune('e') {
+						goto l83
+					}
+					position++
+					goto l82
+				l83:
+					position, tokenIndex = position82, tokenIndex82
+					if buffer[position] != rune('E') {
+						goto l74
+					}
+					position++
+				}
+			l82:
+				if !_rules[ruleWS]() {
+					goto l74
+				}
+				{
+					position86, tokenIndex86 := position, tokenIndex
+					{
+						position87, tokenIndex87 := position, tokenIndex
+						if buffer[position] != rune('#') {
+							goto l88
+						}
+						position++
+						goto l87
+					l88:
+						position, tokenIndex = position87, tokenIndex87
+						if buffer[position] != rune('\n') {
+							goto l86
+						}
+						position++
+					}
+				l87:
+					goto l74
+				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)
+			}
+			return true
+		l74:
+			position, tokenIndex = position74, tokenIndex74
+			return false
+		},
+		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
+		func() bool {
+			position92, tokenIndex92 := position, tokenIndex
+			{
+				position93 := position
+				if buffer[position] != rune('.') {
+					goto l92
+				}
+				position++
+				{
+					position94, tokenIndex94 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l95
+					}
+					position++
+					goto l94
+				l95:
+					position, tokenIndex = position94, tokenIndex94
+					if buffer[position] != rune('L') {
+						goto l92
+					}
+					position++
+				}
+			l94:
+				{
+					position96, tokenIndex96 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l97
+					}
+					position++
+					goto l96
+				l97:
+					position, tokenIndex = position96, tokenIndex96
+					if buffer[position] != rune('O') {
+						goto l92
+					}
+					position++
+				}
+			l96:
+				{
+					position98, tokenIndex98 := position, tokenIndex
+					if buffer[position] != rune('c') {
 						goto l99
 					}
 					position++
-					{
-						position102, tokenIndex102 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l102
-						}
-						goto l103
-					l102:
-						position, tokenIndex = position102, tokenIndex102
-					}
-				l103:
-					if !_rules[ruleArg]() {
-						goto l99
-					}
 					goto l98
 				l99:
-					position, tokenIndex = position99, tokenIndex99
-				}
-				add(ruleArgs, position97)
-			}
-			return true
-		l96:
-			position, tokenIndex = position96, tokenIndex96
-			return false
-		},
-		/* 7 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
-		func() bool {
-			{
-				position105 := position
-				{
-					position106, tokenIndex106 := position, tokenIndex
-					if !_rules[ruleQuotedArg]() {
-						goto l107
+					position, tokenIndex = position98, tokenIndex98
+					if buffer[position] != rune('C') {
+						goto l92
 					}
-					goto l106
-				l107:
-					position, tokenIndex = position106, tokenIndex106
-				l108:
+					position++
+				}
+			l98:
+				if !_rules[ruleWS]() {
+					goto l92
+				}
+				{
+					position102, tokenIndex102 := position, tokenIndex
 					{
-						position109, tokenIndex109 := position, tokenIndex
+						position103, tokenIndex103 := 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
+					l105:
+						position, tokenIndex = position103, tokenIndex103
+						if buffer[position] != rune('\n') {
+							goto l102
+						}
+						position++
+					}
+				l103:
+					goto l92
+				l102:
+					position, tokenIndex = position102, tokenIndex102
+				}
+				if !matchDot() {
+					goto l92
+				}
+			l100:
+				{
+					position101, tokenIndex101 := position, tokenIndex
+					{
+						position106, tokenIndex106 := position, tokenIndex
 						{
-							position110, tokenIndex110 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l111
+							position107, tokenIndex107 := position, tokenIndex
+							if buffer[position] != rune('#') {
+								goto l108
 							}
 							position++
-							goto l110
-						l111:
-							position, tokenIndex = position110, tokenIndex110
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l112
-							}
-							position++
-							goto l110
-						l112:
-							position, tokenIndex = position110, tokenIndex110
-							{
-								position114, tokenIndex114 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('z') {
-									goto l115
-								}
-								position++
-								goto l114
-							l115:
-								position, tokenIndex = position114, tokenIndex114
-								if c := buffer[position]; c < rune('A') || c > rune('Z') {
-									goto l113
-								}
-								position++
-							}
-						l114:
-							goto l110
-						l113:
-							position, tokenIndex = position110, tokenIndex110
-							if buffer[position] != rune('%') {
-								goto l116
-							}
-							position++
-							goto l110
-						l116:
-							position, tokenIndex = position110, tokenIndex110
-							if buffer[position] != rune('+') {
-								goto l117
-							}
-							position++
-							goto l110
-						l117:
-							position, tokenIndex = position110, tokenIndex110
-							if buffer[position] != rune('-') {
-								goto l118
-							}
-							position++
-							goto l110
-						l118:
-							position, tokenIndex = position110, tokenIndex110
-							if buffer[position] != rune('*') {
-								goto l119
-							}
-							position++
-							goto l110
-						l119:
-							position, tokenIndex = position110, tokenIndex110
-							if buffer[position] != rune('_') {
-								goto l120
-							}
-							position++
-							goto l110
-						l120:
-							position, tokenIndex = position110, tokenIndex110
-							if buffer[position] != rune('@') {
-								goto l121
-							}
-							position++
-							goto l110
-						l121:
-							position, tokenIndex = position110, tokenIndex110
-							if buffer[position] != rune('.') {
+							goto l107
+						l108:
+							position, tokenIndex = position107, tokenIndex107
+							if buffer[position] != rune('/') {
 								goto l109
 							}
 							position++
+							goto l107
+						l109:
+							position, tokenIndex = position107, tokenIndex107
+							if buffer[position] != rune('\n') {
+								goto l106
+							}
+							position++
 						}
-					l110:
-						goto l108
-					l109:
-						position, tokenIndex = position109, tokenIndex109
+					l107:
+						goto l101
+					l106:
+						position, tokenIndex = position106, tokenIndex106
 					}
+					if !matchDot() {
+						goto l101
+					}
+					goto l100
+				l101:
+					position, tokenIndex = position101, tokenIndex101
 				}
-			l106:
-				add(ruleArg, position105)
+				add(ruleLocDirective, position93)
 			}
 			return true
-		},
-		/* 8 QuotedArg <- <('"' QuotedText '"')> */
-		func() bool {
-			position122, tokenIndex122 := position, tokenIndex
-			{
-				position123 := position
-				if buffer[position] != rune('"') {
-					goto l122
-				}
-				position++
-				if !_rules[ruleQuotedText]() {
-					goto l122
-				}
-				if buffer[position] != rune('"') {
-					goto l122
-				}
-				position++
-				add(ruleQuotedArg, position123)
-			}
-			return true
-		l122:
-			position, tokenIndex = position122, tokenIndex122
+		l92:
+			position, tokenIndex = position92, tokenIndex92
 			return false
 		},
-		/* 9 QuotedText <- <(EscapedChar / (!'"' .))*> */
+		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
+		func() bool {
+			position110, tokenIndex110 := position, tokenIndex
+			{
+				position111 := position
+				if !_rules[ruleArg]() {
+					goto l110
+				}
+			l112:
+				{
+					position113, tokenIndex113 := position, tokenIndex
+					{
+						position114, tokenIndex114 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l114
+						}
+						goto l115
+					l114:
+						position, tokenIndex = position114, tokenIndex114
+					}
+				l115:
+					if buffer[position] != rune(',') {
+						goto l113
+					}
+					position++
+					{
+						position116, tokenIndex116 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l116
+						}
+						goto l117
+					l116:
+						position, tokenIndex = position116, tokenIndex116
+					}
+				l117:
+					if !_rules[ruleArg]() {
+						goto l113
+					}
+					goto l112
+				l113:
+					position, tokenIndex = position113, tokenIndex113
+				}
+				add(ruleArgs, position111)
+			}
+			return true
+		l110:
+			position, tokenIndex = position110, tokenIndex110
+			return false
+		},
+		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
 		func() bool {
 			{
-				position125 := position
-			l126:
+				position119 := position
 				{
-					position127, tokenIndex127 := position, tokenIndex
+					position120, tokenIndex120 := position, tokenIndex
+					if !_rules[ruleQuotedArg]() {
+						goto l121
+					}
+					goto l120
+				l121:
+					position, tokenIndex = position120, tokenIndex120
+				l122:
 					{
-						position128, tokenIndex128 := position, tokenIndex
-						if !_rules[ruleEscapedChar]() {
-							goto l129
-						}
-						goto l128
-					l129:
-						position, tokenIndex = position128, tokenIndex128
+						position123, tokenIndex123 := position, tokenIndex
 						{
-							position130, tokenIndex130 := position, tokenIndex
-							if buffer[position] != rune('"') {
+							position124, tokenIndex124 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l125
+							}
+							position++
+							goto l124
+						l125:
+							position, tokenIndex = position124, tokenIndex124
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l126
+							}
+							position++
+							goto l124
+						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++
-							goto l127
+							goto l124
 						l130:
-							position, tokenIndex = position130, tokenIndex130
+							position, tokenIndex = position124, tokenIndex124
+							if buffer[position] != rune('+') {
+								goto l131
+							}
+							position++
+							goto l124
+						l131:
+							position, tokenIndex = position124, tokenIndex124
+							if buffer[position] != rune('-') {
+								goto l132
+							}
+							position++
+							goto l124
+						l132:
+							position, tokenIndex = position124, tokenIndex124
+							if buffer[position] != rune('*') {
+								goto l133
+							}
+							position++
+							goto l124
+						l133:
+							position, tokenIndex = position124, tokenIndex124
+							if buffer[position] != rune('_') {
+								goto l134
+							}
+							position++
+							goto l124
+						l134:
+							position, tokenIndex = position124, tokenIndex124
+							if buffer[position] != rune('@') {
+								goto l135
+							}
+							position++
+							goto l124
+						l135:
+							position, tokenIndex = position124, tokenIndex124
+							if buffer[position] != rune('.') {
+								goto l123
+							}
+							position++
 						}
-						if !matchDot() {
-							goto l127
-						}
+					l124:
+						goto l122
+					l123:
+						position, tokenIndex = position123, tokenIndex123
 					}
-				l128:
-					goto l126
-				l127:
-					position, tokenIndex = position127, tokenIndex127
 				}
-				add(ruleQuotedText, position125)
+			l120:
+				add(ruleArg, position119)
 			}
 			return true
 		},
-		/* 10 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
+		/* 10 QuotedArg <- <('"' QuotedText '"')> */
 		func() bool {
-			position131, tokenIndex131 := position, tokenIndex
+			position136, tokenIndex136 := position, tokenIndex
 			{
-				position132 := position
-				if !_rules[ruleLabelContainingDirectiveName]() {
-					goto l131
+				position137 := position
+				if buffer[position] != rune('"') {
+					goto l136
 				}
-				if !_rules[ruleWS]() {
-					goto l131
+				position++
+				if !_rules[ruleQuotedText]() {
+					goto l136
 				}
-				if !_rules[ruleSymbolArgs]() {
-					goto l131
+				if buffer[position] != rune('"') {
+					goto l136
 				}
-				add(ruleLabelContainingDirective, position132)
+				position++
+				add(ruleQuotedArg, position137)
 			}
 			return true
-		l131:
-			position, tokenIndex = position131, tokenIndex131
+		l136:
+			position, tokenIndex = position136, tokenIndex136
 			return false
 		},
-		/* 11 LabelContainingDirectiveName <- <(('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' '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'))> */
+		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
 		func() bool {
-			position133, tokenIndex133 := position, tokenIndex
 			{
-				position134 := position
+				position139 := position
+			l140:
 				{
-					position135, tokenIndex135 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l136
-					}
-					position++
+					position141, tokenIndex141 := position, tokenIndex
 					{
-						position137, tokenIndex137 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l138
+						position142, tokenIndex142 := position, tokenIndex
+						if !_rules[ruleEscapedChar]() {
+							goto l143
 						}
-						position++
-						goto l137
-					l138:
-						position, tokenIndex = position137, tokenIndex137
-						if buffer[position] != rune('L') {
-							goto l136
+						goto l142
+					l143:
+						position, tokenIndex = position142, tokenIndex142
+						{
+							position144, tokenIndex144 := position, tokenIndex
+							if buffer[position] != rune('"') {
+								goto l144
+							}
+							position++
+							goto l141
+						l144:
+							position, tokenIndex = position144, tokenIndex144
 						}
-						position++
+						if !matchDot() {
+							goto l141
+						}
 					}
-				l137:
-					{
-						position139, tokenIndex139 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l140
-						}
-						position++
-						goto l139
-					l140:
-						position, tokenIndex = position139, tokenIndex139
-						if buffer[position] != rune('O') {
-							goto l136
-						}
-						position++
-					}
-				l139:
-					{
-						position141, tokenIndex141 := position, tokenIndex
-						if buffer[position] != rune('n') {
-							goto l142
-						}
-						position++
-						goto l141
-					l142:
-						position, tokenIndex = position141, tokenIndex141
-						if buffer[position] != rune('N') {
-							goto l136
-						}
-						position++
-					}
+				l142:
+					goto l140
 				l141:
-					{
-						position143, tokenIndex143 := position, tokenIndex
-						if buffer[position] != rune('g') {
-							goto l144
-						}
-						position++
-						goto l143
-					l144:
-						position, tokenIndex = position143, tokenIndex143
-						if buffer[position] != rune('G') {
-							goto l136
-						}
-						position++
-					}
-				l143:
-					goto l135
-				l136:
-					position, tokenIndex = position135, tokenIndex135
+					position, tokenIndex = position141, tokenIndex141
+				}
+				add(ruleQuotedText, position139)
+			}
+			return true
+		},
+		/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
+		func() bool {
+			position145, tokenIndex145 := position, tokenIndex
+			{
+				position146 := position
+				if !_rules[ruleLabelContainingDirectiveName]() {
+					goto l145
+				}
+				if !_rules[ruleWS]() {
+					goto l145
+				}
+				if !_rules[ruleSymbolArgs]() {
+					goto l145
+				}
+				add(ruleLabelContainingDirective, position146)
+			}
+			return true
+		l145:
+			position, tokenIndex = position145, tokenIndex145
+			return false
+		},
+		/* 13 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' '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 {
+			position147, tokenIndex147 := position, tokenIndex
+			{
+				position148 := position
+				{
+					position149, tokenIndex149 := position, tokenIndex
 					if buffer[position] != rune('.') {
-						goto l145
-					}
-					position++
-					{
-						position146, tokenIndex146 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l147
-						}
-						position++
-						goto l146
-					l147:
-						position, tokenIndex = position146, tokenIndex146
-						if buffer[position] != rune('S') {
-							goto l145
-						}
-						position++
-					}
-				l146:
-					{
-						position148, tokenIndex148 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l149
-						}
-						position++
-						goto l148
-					l149:
-						position, tokenIndex = position148, tokenIndex148
-						if buffer[position] != rune('E') {
-							goto l145
-						}
-						position++
-					}
-				l148:
-					{
-						position150, tokenIndex150 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l151
-						}
-						position++
 						goto l150
-					l151:
-						position, tokenIndex = position150, tokenIndex150
-						if buffer[position] != rune('T') {
-							goto l145
+					}
+					position++
+					{
+						position151, tokenIndex151 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l152
+						}
+						position++
+						goto l151
+					l152:
+						position, tokenIndex = position151, tokenIndex151
+						if buffer[position] != rune('X') {
+							goto l150
 						}
 						position++
 					}
-				l150:
-					goto l135
-				l145:
-					position, tokenIndex = position135, tokenIndex135
-					if buffer[position] != rune('.') {
-						goto l152
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l152
-					}
-					position++
+				l151:
 					{
 						position153, tokenIndex153 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						if buffer[position] != rune('w') {
 							goto l154
 						}
 						position++
 						goto l153
 					l154:
 						position, tokenIndex = position153, tokenIndex153
-						if buffer[position] != rune('B') {
-							goto l152
+						if buffer[position] != rune('W') {
+							goto l150
 						}
 						position++
 					}
 				l153:
 					{
 						position155, tokenIndex155 := position, tokenIndex
-						if buffer[position] != rune('y') {
+						if buffer[position] != rune('o') {
 							goto l156
 						}
 						position++
 						goto l155
 					l156:
 						position, tokenIndex = position155, tokenIndex155
-						if buffer[position] != rune('Y') {
-							goto l152
+						if buffer[position] != rune('O') {
+							goto l150
 						}
 						position++
 					}
 				l155:
 					{
 						position157, tokenIndex157 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('r') {
 							goto l158
 						}
 						position++
 						goto l157
 					l158:
 						position, tokenIndex = position157, tokenIndex157
-						if buffer[position] != rune('T') {
-							goto l152
+						if buffer[position] != rune('R') {
+							goto l150
 						}
 						position++
 					}
 				l157:
 					{
 						position159, tokenIndex159 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('d') {
 							goto l160
 						}
 						position++
 						goto l159
 					l160:
 						position, tokenIndex = position159, tokenIndex159
-						if buffer[position] != rune('E') {
-							goto l152
+						if buffer[position] != rune('D') {
+							goto l150
 						}
 						position++
 					}
 				l159:
-					goto l135
-				l152:
-					position, tokenIndex = position135, tokenIndex135
+					goto l149
+				l150:
+					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
 						goto l161
 					}
 					position++
-					if buffer[position] != rune('4') {
-						goto l161
-					}
-					position++
 					{
 						position162, tokenIndex162 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						if buffer[position] != rune('w') {
 							goto l163
 						}
 						position++
 						goto l162
 					l163:
 						position, tokenIndex = position162, tokenIndex162
-						if buffer[position] != rune('B') {
+						if buffer[position] != rune('W') {
 							goto l161
 						}
 						position++
@@ -1484,14 +1494,14 @@
 				l162:
 					{
 						position164, tokenIndex164 := position, tokenIndex
-						if buffer[position] != rune('y') {
+						if buffer[position] != rune('o') {
 							goto l165
 						}
 						position++
 						goto l164
 					l165:
 						position, tokenIndex = position164, tokenIndex164
-						if buffer[position] != rune('Y') {
+						if buffer[position] != rune('O') {
 							goto l161
 						}
 						position++
@@ -1499,14 +1509,14 @@
 				l164:
 					{
 						position166, tokenIndex166 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('r') {
 							goto l167
 						}
 						position++
 						goto l166
 					l167:
 						position, tokenIndex = position166, tokenIndex166
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('R') {
 							goto l161
 						}
 						position++
@@ -1514,36 +1524,36 @@
 				l166:
 					{
 						position168, tokenIndex168 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('d') {
 							goto l169
 						}
 						position++
 						goto l168
 					l169:
 						position, tokenIndex = position168, tokenIndex168
-						if buffer[position] != rune('E') {
+						if buffer[position] != rune('D') {
 							goto l161
 						}
 						position++
 					}
 				l168:
-					goto l135
+					goto l149
 				l161:
-					position, tokenIndex = position135, tokenIndex135
+					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
 						goto l170
 					}
 					position++
 					{
 						position171, tokenIndex171 := position, tokenIndex
-						if buffer[position] != rune('q') {
+						if buffer[position] != rune('l') {
 							goto l172
 						}
 						position++
 						goto l171
 					l172:
 						position, tokenIndex = position171, tokenIndex171
-						if buffer[position] != rune('Q') {
+						if buffer[position] != rune('L') {
 							goto l170
 						}
 						position++
@@ -1551,14 +1561,14 @@
 				l171:
 					{
 						position173, tokenIndex173 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('o') {
 							goto l174
 						}
 						position++
 						goto l173
 					l174:
 						position, tokenIndex = position173, tokenIndex173
-						if buffer[position] != rune('U') {
+						if buffer[position] != rune('O') {
 							goto l170
 						}
 						position++
@@ -1566,14 +1576,14 @@
 				l173:
 					{
 						position175, tokenIndex175 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('n') {
 							goto l176
 						}
 						position++
 						goto l175
 					l176:
 						position, tokenIndex = position175, tokenIndex175
-						if buffer[position] != rune('A') {
+						if buffer[position] != rune('N') {
 							goto l170
 						}
 						position++
@@ -1581,36 +1591,36 @@
 				l175:
 					{
 						position177, tokenIndex177 := position, tokenIndex
-						if buffer[position] != rune('d') {
+						if buffer[position] != rune('g') {
 							goto l178
 						}
 						position++
 						goto l177
 					l178:
 						position, tokenIndex = position177, tokenIndex177
-						if buffer[position] != rune('D') {
+						if buffer[position] != rune('G') {
 							goto l170
 						}
 						position++
 					}
 				l177:
-					goto l135
+					goto l149
 				l170:
-					position, tokenIndex = position135, tokenIndex135
+					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
 						goto l179
 					}
 					position++
 					{
 						position180, tokenIndex180 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('s') {
 							goto l181
 						}
 						position++
 						goto l180
 					l181:
 						position, tokenIndex = position180, tokenIndex180
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('S') {
 							goto l179
 						}
 						position++
@@ -1618,1223 +1628,1297 @@
 				l180:
 					{
 						position182, tokenIndex182 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('e') {
 							goto l183
 						}
 						position++
 						goto l182
 					l183:
 						position, tokenIndex = position182, tokenIndex182
-						if buffer[position] != rune('C') {
+						if buffer[position] != rune('E') {
 							goto l179
 						}
 						position++
 					}
 				l182:
-					goto l135
-				l179:
-					position, tokenIndex = position135, tokenIndex135
-					if buffer[position] != rune('.') {
+					{
+						position184, tokenIndex184 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l185
+						}
+						position++
 						goto l184
+					l185:
+						position, tokenIndex = position184, tokenIndex184
+						if buffer[position] != rune('T') {
+							goto l179
+						}
+						position++
+					}
+				l184:
+					goto l149
+				l179:
+					position, tokenIndex = position149, tokenIndex149
+					if buffer[position] != rune('.') {
+						goto l186
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l186
 					}
 					position++
 					{
-						position185, tokenIndex185 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l186
-						}
-						position++
-						goto l185
-					l186:
-						position, tokenIndex = position185, tokenIndex185
-						if buffer[position] != rune('L') {
-							goto l184
-						}
-						position++
-					}
-				l185:
-					{
 						position187, tokenIndex187 := position, tokenIndex
-						if buffer[position] != rune('o') {
+						if buffer[position] != rune('b') {
 							goto l188
 						}
 						position++
 						goto l187
 					l188:
 						position, tokenIndex = position187, tokenIndex187
-						if buffer[position] != rune('O') {
-							goto l184
+						if buffer[position] != rune('B') {
+							goto l186
 						}
 						position++
 					}
 				l187:
 					{
 						position189, tokenIndex189 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('y') {
 							goto l190
 						}
 						position++
 						goto l189
 					l190:
 						position, tokenIndex = position189, tokenIndex189
-						if buffer[position] != rune('C') {
-							goto l184
+						if buffer[position] != rune('Y') {
+							goto l186
 						}
 						position++
 					}
 				l189:
 					{
 						position191, tokenIndex191 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('t') {
 							goto l192
 						}
 						position++
 						goto l191
 					l192:
 						position, tokenIndex = position191, tokenIndex191
-						if buffer[position] != rune('A') {
-							goto l184
+						if buffer[position] != rune('T') {
+							goto l186
 						}
 						position++
 					}
 				l191:
 					{
 						position193, tokenIndex193 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('e') {
 							goto l194
 						}
 						position++
 						goto l193
 					l194:
 						position, tokenIndex = position193, tokenIndex193
-						if buffer[position] != rune('L') {
-							goto l184
+						if buffer[position] != rune('E') {
+							goto l186
 						}
 						position++
 					}
 				l193:
-					{
-						position195, tokenIndex195 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l196
-						}
-						position++
+					goto l149
+				l186:
+					position, tokenIndex = position149, tokenIndex149
+					if buffer[position] != rune('.') {
 						goto l195
-					l196:
-						position, tokenIndex = position195, tokenIndex195
-						if buffer[position] != rune('E') {
-							goto l184
+					}
+					position++
+					if buffer[position] != rune('4') {
+						goto l195
+					}
+					position++
+					{
+						position196, tokenIndex196 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l197
+						}
+						position++
+						goto l196
+					l197:
+						position, tokenIndex = position196, tokenIndex196
+						if buffer[position] != rune('B') {
+							goto l195
 						}
 						position++
 					}
-				l195:
+				l196:
 					{
-						position197, tokenIndex197 := position, tokenIndex
-						if buffer[position] != rune('n') {
-							goto l198
-						}
-						position++
-						goto l197
-					l198:
-						position, tokenIndex = position197, tokenIndex197
-						if buffer[position] != rune('N') {
-							goto l184
-						}
-						position++
-					}
-				l197:
-					{
-						position199, tokenIndex199 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l200
-						}
-						position++
-						goto l199
-					l200:
-						position, tokenIndex = position199, tokenIndex199
-						if buffer[position] != rune('T') {
-							goto l184
-						}
-						position++
-					}
-				l199:
-					{
-						position201, tokenIndex201 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l202
-						}
-						position++
-						goto l201
-					l202:
-						position, tokenIndex = position201, tokenIndex201
-						if buffer[position] != rune('R') {
-							goto l184
-						}
-						position++
-					}
-				l201:
-					{
-						position203, tokenIndex203 := position, tokenIndex
+						position198, tokenIndex198 := position, tokenIndex
 						if buffer[position] != rune('y') {
+							goto l199
+						}
+						position++
+						goto l198
+					l199:
+						position, tokenIndex = position198, tokenIndex198
+						if buffer[position] != rune('Y') {
+							goto l195
+						}
+						position++
+					}
+				l198:
+					{
+						position200, tokenIndex200 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l201
+						}
+						position++
+						goto l200
+					l201:
+						position, tokenIndex = position200, tokenIndex200
+						if buffer[position] != rune('T') {
+							goto l195
+						}
+						position++
+					}
+				l200:
+					{
+						position202, tokenIndex202 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l203
+						}
+						position++
+						goto l202
+					l203:
+						position, tokenIndex = position202, tokenIndex202
+						if buffer[position] != rune('E') {
+							goto l195
+						}
+						position++
+					}
+				l202:
+					goto l149
+				l195:
+					position, tokenIndex = position149, tokenIndex149
+					if buffer[position] != rune('.') {
+						goto l204
+					}
+					position++
+					{
+						position205, tokenIndex205 := position, tokenIndex
+						if buffer[position] != rune('q') {
+							goto l206
+						}
+						position++
+						goto l205
+					l206:
+						position, tokenIndex = position205, tokenIndex205
+						if buffer[position] != rune('Q') {
 							goto l204
 						}
 						position++
-						goto l203
-					l204:
-						position, tokenIndex = position203, tokenIndex203
-						if buffer[position] != rune('Y') {
-							goto l184
+					}
+				l205:
+					{
+						position207, tokenIndex207 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l208
+						}
+						position++
+						goto l207
+					l208:
+						position, tokenIndex = position207, tokenIndex207
+						if buffer[position] != rune('U') {
+							goto l204
 						}
 						position++
 					}
-				l203:
-					goto l135
-				l184:
-					position, tokenIndex = position135, tokenIndex135
+				l207:
+					{
+						position209, tokenIndex209 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l210
+						}
+						position++
+						goto l209
+					l210:
+						position, tokenIndex = position209, tokenIndex209
+						if buffer[position] != rune('A') {
+							goto l204
+						}
+						position++
+					}
+				l209:
+					{
+						position211, tokenIndex211 := position, tokenIndex
+						if buffer[position] != rune('d') {
+							goto l212
+						}
+						position++
+						goto l211
+					l212:
+						position, tokenIndex = position211, tokenIndex211
+						if buffer[position] != rune('D') {
+							goto l204
+						}
+						position++
+					}
+				l211:
+					goto l149
+				l204:
+					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
-						goto l205
+						goto l213
 					}
 					position++
 					{
-						position206, tokenIndex206 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l207
+						position214, tokenIndex214 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l215
 						}
 						position++
-						goto l206
-					l207:
-						position, tokenIndex = position206, tokenIndex206
-						if buffer[position] != rune('S') {
-							goto l205
-						}
-						position++
-					}
-				l206:
-					{
-						position208, tokenIndex208 := position, tokenIndex
-						if buffer[position] != rune('i') {
-							goto l209
-						}
-						position++
-						goto l208
-					l209:
-						position, tokenIndex = position208, tokenIndex208
-						if buffer[position] != rune('I') {
-							goto l205
-						}
-						position++
-					}
-				l208:
-					{
-						position210, tokenIndex210 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l211
-						}
-						position++
-						goto l210
-					l211:
-						position, tokenIndex = position210, tokenIndex210
-						if buffer[position] != rune('Z') {
-							goto l205
-						}
-						position++
-					}
-				l210:
-					{
-						position212, tokenIndex212 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						goto l214
+					l215:
+						position, tokenIndex = position214, tokenIndex214
+						if buffer[position] != rune('T') {
 							goto l213
 						}
 						position++
-						goto l212
-					l213:
-						position, tokenIndex = position212, tokenIndex212
-						if buffer[position] != rune('E') {
-							goto l205
+					}
+				l214:
+					{
+						position216, tokenIndex216 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l217
+						}
+						position++
+						goto l216
+					l217:
+						position, tokenIndex = position216, tokenIndex216
+						if buffer[position] != rune('C') {
+							goto l213
 						}
 						position++
 					}
-				l212:
-					goto l135
-				l205:
-					position, tokenIndex = position135, tokenIndex135
+				l216:
+					goto l149
+				l213:
+					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
-						goto l214
+						goto l218
 					}
 					position++
 					{
-						position215, tokenIndex215 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l216
-						}
-						position++
-						goto l215
-					l216:
-						position, tokenIndex = position215, tokenIndex215
-						if buffer[position] != rune('T') {
-							goto l214
-						}
-						position++
-					}
-				l215:
-					{
-						position217, tokenIndex217 := position, tokenIndex
-						if buffer[position] != rune('y') {
-							goto l218
-						}
-						position++
-						goto l217
-					l218:
-						position, tokenIndex = position217, tokenIndex217
-						if buffer[position] != rune('Y') {
-							goto l214
-						}
-						position++
-					}
-				l217:
-					{
 						position219, tokenIndex219 := position, tokenIndex
-						if buffer[position] != rune('p') {
+						if buffer[position] != rune('l') {
 							goto l220
 						}
 						position++
 						goto l219
 					l220:
 						position, tokenIndex = position219, tokenIndex219
-						if buffer[position] != rune('P') {
-							goto l214
+						if buffer[position] != rune('L') {
+							goto l218
 						}
 						position++
 					}
 				l219:
 					{
 						position221, tokenIndex221 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('o') {
 							goto l222
 						}
 						position++
 						goto l221
 					l222:
 						position, tokenIndex = position221, tokenIndex221
-						if buffer[position] != rune('E') {
-							goto l214
+						if buffer[position] != rune('O') {
+							goto l218
 						}
 						position++
 					}
 				l221:
-					goto l135
-				l214:
-					position, tokenIndex = position135, tokenIndex135
-					if buffer[position] != rune('.') {
-						goto l223
-					}
-					position++
 					{
-						position224, tokenIndex224 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l225
+						position223, tokenIndex223 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l224
 						}
 						position++
-						goto l224
-					l225:
-						position, tokenIndex = position224, tokenIndex224
-						if buffer[position] != rune('U') {
-							goto l223
-						}
-						position++
-					}
-				l224:
-					{
-						position226, tokenIndex226 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l227
-						}
-						position++
-						goto l226
-					l227:
-						position, tokenIndex = position226, tokenIndex226
-						if buffer[position] != rune('L') {
-							goto l223
-						}
-						position++
-					}
-				l226:
-					{
-						position228, tokenIndex228 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l229
-						}
-						position++
-						goto l228
-					l229:
-						position, tokenIndex = position228, tokenIndex228
-						if buffer[position] != rune('E') {
-							goto l223
-						}
-						position++
-					}
-				l228:
-					{
-						position230, tokenIndex230 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l231
-						}
-						position++
-						goto l230
-					l231:
-						position, tokenIndex = position230, tokenIndex230
-						if buffer[position] != rune('B') {
-							goto l223
-						}
-						position++
-					}
-				l230:
-					if buffer[position] != rune('1') {
 						goto l223
+					l224:
+						position, tokenIndex = position223, tokenIndex223
+						if buffer[position] != rune('C') {
+							goto l218
+						}
+						position++
 					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l223
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l223
-					}
-					position++
-					goto l135
 				l223:
-					position, tokenIndex = position135, tokenIndex135
+					{
+						position225, tokenIndex225 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l226
+						}
+						position++
+						goto l225
+					l226:
+						position, tokenIndex = position225, tokenIndex225
+						if buffer[position] != rune('A') {
+							goto l218
+						}
+						position++
+					}
+				l225:
+					{
+						position227, tokenIndex227 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l228
+						}
+						position++
+						goto l227
+					l228:
+						position, tokenIndex = position227, tokenIndex227
+						if buffer[position] != rune('L') {
+							goto l218
+						}
+						position++
+					}
+				l227:
+					{
+						position229, tokenIndex229 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l230
+						}
+						position++
+						goto l229
+					l230:
+						position, tokenIndex = position229, tokenIndex229
+						if buffer[position] != rune('E') {
+							goto l218
+						}
+						position++
+					}
+				l229:
+					{
+						position231, tokenIndex231 := position, tokenIndex
+						if buffer[position] != rune('n') {
+							goto l232
+						}
+						position++
+						goto l231
+					l232:
+						position, tokenIndex = position231, tokenIndex231
+						if buffer[position] != rune('N') {
+							goto l218
+						}
+						position++
+					}
+				l231:
+					{
+						position233, tokenIndex233 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l234
+						}
+						position++
+						goto l233
+					l234:
+						position, tokenIndex = position233, tokenIndex233
+						if buffer[position] != rune('T') {
+							goto l218
+						}
+						position++
+					}
+				l233:
+					{
+						position235, tokenIndex235 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l236
+						}
+						position++
+						goto l235
+					l236:
+						position, tokenIndex = position235, tokenIndex235
+						if buffer[position] != rune('R') {
+							goto l218
+						}
+						position++
+					}
+				l235:
+					{
+						position237, tokenIndex237 := position, tokenIndex
+						if buffer[position] != rune('y') {
+							goto l238
+						}
+						position++
+						goto l237
+					l238:
+						position, tokenIndex = position237, tokenIndex237
+						if buffer[position] != rune('Y') {
+							goto l218
+						}
+						position++
+					}
+				l237:
+					goto l149
+				l218:
+					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
-						goto l133
+						goto l239
 					}
 					position++
 					{
-						position232, tokenIndex232 := position, tokenIndex
+						position240, tokenIndex240 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l233
+							goto l241
 						}
 						position++
-						goto l232
-					l233:
-						position, tokenIndex = position232, tokenIndex232
+						goto l240
+					l241:
+						position, tokenIndex = position240, tokenIndex240
 						if buffer[position] != rune('S') {
-							goto l133
-						}
-						position++
-					}
-				l232:
-					{
-						position234, tokenIndex234 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l235
-						}
-						position++
-						goto l234
-					l235:
-						position, tokenIndex = position234, tokenIndex234
-						if buffer[position] != rune('L') {
-							goto l133
-						}
-						position++
-					}
-				l234:
-					{
-						position236, tokenIndex236 := position, tokenIndex
-						if buffer[position] != rune('e') {
-							goto l237
-						}
-						position++
-						goto l236
-					l237:
-						position, tokenIndex = position236, tokenIndex236
-						if buffer[position] != rune('E') {
-							goto l133
-						}
-						position++
-					}
-				l236:
-					{
-						position238, tokenIndex238 := position, tokenIndex
-						if buffer[position] != rune('b') {
 							goto l239
 						}
 						position++
-						goto l238
-					l239:
-						position, tokenIndex = position238, tokenIndex238
-						if buffer[position] != rune('B') {
-							goto l133
+					}
+				l240:
+					{
+						position242, tokenIndex242 := position, tokenIndex
+						if buffer[position] != rune('i') {
+							goto l243
+						}
+						position++
+						goto l242
+					l243:
+						position, tokenIndex = position242, tokenIndex242
+						if buffer[position] != rune('I') {
+							goto l239
 						}
 						position++
 					}
-				l238:
-					if buffer[position] != rune('1') {
-						goto l133
-					}
-					position++
-					if buffer[position] != rune('2') {
-						goto l133
-					}
-					position++
-					if buffer[position] != rune('8') {
-						goto l133
-					}
-					position++
-				}
-			l135:
-				add(ruleLabelContainingDirectiveName, position134)
-			}
-			return true
-		l133:
-			position, tokenIndex = position133, tokenIndex133
-			return false
-		},
-		/* 12 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
-		func() bool {
-			position240, tokenIndex240 := position, tokenIndex
-			{
-				position241 := position
-				if !_rules[ruleSymbolArg]() {
-					goto l240
-				}
-			l242:
-				{
-					position243, tokenIndex243 := position, tokenIndex
+				l242:
 					{
 						position244, tokenIndex244 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l244
+						if buffer[position] != rune('z') {
+							goto l245
 						}
-						goto l245
-					l244:
+						position++
+						goto l244
+					l245:
 						position, tokenIndex = position244, tokenIndex244
+						if buffer[position] != rune('Z') {
+							goto l239
+						}
+						position++
 					}
-				l245:
-					if buffer[position] != rune(',') {
-						goto l243
+				l244:
+					{
+						position246, tokenIndex246 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l247
+						}
+						position++
+						goto l246
+					l247:
+						position, tokenIndex = position246, tokenIndex246
+						if buffer[position] != rune('E') {
+							goto l239
+						}
+						position++
+					}
+				l246:
+					goto l149
+				l239:
+					position, tokenIndex = position149, tokenIndex149
+					if buffer[position] != rune('.') {
+						goto l248
 					}
 					position++
 					{
-						position246, tokenIndex246 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l246
+						position249, tokenIndex249 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l250
 						}
-						goto l247
-					l246:
-						position, tokenIndex = position246, tokenIndex246
+						position++
+						goto l249
+					l250:
+						position, tokenIndex = position249, tokenIndex249
+						if buffer[position] != rune('T') {
+							goto l248
+						}
+						position++
 					}
-				l247:
-					if !_rules[ruleSymbolArg]() {
-						goto l243
-					}
-					goto l242
-				l243:
-					position, tokenIndex = position243, tokenIndex243
-				}
-				add(ruleSymbolArgs, position241)
-			}
-			return true
-		l240:
-			position, tokenIndex = position240, tokenIndex240
-			return false
-		},
-		/* 13 SymbolArg <- <(Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?))> */
-		func() bool {
-			position248, tokenIndex248 := position, tokenIndex
-			{
-				position249 := position
-				{
-					position250, tokenIndex250 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l251
-					}
-					goto l250
-				l251:
-					position, tokenIndex = position250, tokenIndex250
-					if !_rules[ruleSymbolType]() {
-						goto l252
-					}
-					goto l250
-				l252:
-					position, tokenIndex = position250, tokenIndex250
+				l249:
 					{
-						position254, tokenIndex254 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l255
+						position251, tokenIndex251 := position, tokenIndex
+						if buffer[position] != rune('y') {
+							goto l252
 						}
-						goto l254
-					l255:
-						position, tokenIndex = position254, tokenIndex254
-						if !_rules[ruleLocalSymbol]() {
+						position++
+						goto l251
+					l252:
+						position, tokenIndex = position251, tokenIndex251
+						if buffer[position] != rune('Y') {
+							goto l248
+						}
+						position++
+					}
+				l251:
+					{
+						position253, tokenIndex253 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l254
+						}
+						position++
+						goto l253
+					l254:
+						position, tokenIndex = position253, tokenIndex253
+						if buffer[position] != rune('P') {
+							goto l248
+						}
+						position++
+					}
+				l253:
+					{
+						position255, tokenIndex255 := position, tokenIndex
+						if buffer[position] != rune('e') {
 							goto l256
 						}
-						goto l254
+						position++
+						goto l255
 					l256:
-						position, tokenIndex = position254, tokenIndex254
-						if !_rules[ruleSymbolName]() {
-							goto l257
+						position, tokenIndex = position255, tokenIndex255
+						if buffer[position] != rune('E') {
+							goto l248
 						}
-						goto l254
-					l257:
-						position, tokenIndex = position254, tokenIndex254
-						if !_rules[ruleDot]() {
-							goto l253
-						}
+						position++
 					}
-				l254:
+				l255:
+					goto l149
+				l248:
+					position, tokenIndex = position149, tokenIndex149
+					if buffer[position] != rune('.') {
+						goto l257
+					}
+					position++
 					{
 						position258, tokenIndex258 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l258
+						if buffer[position] != rune('u') {
+							goto l259
 						}
-						goto l259
-					l258:
+						position++
+						goto l258
+					l259:
 						position, tokenIndex = position258, tokenIndex258
+						if buffer[position] != rune('U') {
+							goto l257
+						}
+						position++
 					}
-				l259:
-					if !_rules[ruleOperator]() {
-						goto l253
-					}
+				l258:
 					{
 						position260, tokenIndex260 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l260
+						if buffer[position] != rune('l') {
+							goto l261
 						}
-						goto l261
-					l260:
+						position++
+						goto l260
+					l261:
 						position, tokenIndex = position260, tokenIndex260
+						if buffer[position] != rune('L') {
+							goto l257
+						}
+						position++
 					}
-				l261:
+				l260:
 					{
 						position262, tokenIndex262 := position, tokenIndex
-						if !_rules[ruleOffset]() {
+						if buffer[position] != rune('e') {
 							goto l263
 						}
+						position++
 						goto l262
 					l263:
 						position, tokenIndex = position262, tokenIndex262
-						if !_rules[ruleLocalSymbol]() {
-							goto l264
+						if buffer[position] != rune('E') {
+							goto l257
 						}
-						goto l262
-					l264:
-						position, tokenIndex = position262, tokenIndex262
-						if !_rules[ruleSymbolName]() {
-							goto l253
-						}
+						position++
 					}
 				l262:
-					goto l250
-				l253:
-					position, tokenIndex = position250, tokenIndex250
-					if !_rules[ruleLocalSymbol]() {
-						goto l265
-					}
 					{
-						position266, tokenIndex266 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
-							goto l266
+						position264, tokenIndex264 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l265
 						}
-						goto l267
-					l266:
-						position, tokenIndex = position266, tokenIndex266
-					}
-				l267:
-					goto l250
-				l265:
-					position, tokenIndex = position250, tokenIndex250
-					if !_rules[ruleSymbolName]() {
-						goto l268
-					}
-					if !_rules[ruleOffset]() {
-						goto l268
-					}
-					goto l250
-				l268:
-					position, tokenIndex = position250, tokenIndex250
-					if !_rules[ruleSymbolName]() {
-						goto l248
-					}
-					{
-						position269, tokenIndex269 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
-							goto l269
+						position++
+						goto l264
+					l265:
+						position, tokenIndex = position264, tokenIndex264
+						if buffer[position] != rune('B') {
+							goto l257
 						}
-						goto l270
-					l269:
-						position, tokenIndex = position269, tokenIndex269
+						position++
 					}
-				l270:
-				}
-			l250:
-				add(ruleSymbolArg, position249)
-			}
-			return true
-		l248:
-			position, tokenIndex = position248, tokenIndex248
-			return false
-		},
-		/* 14 SymbolType <- <(('@' 'f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('@' 'o' 'b' 'j' 'e' 'c' 't'))> */
-		func() bool {
-			position271, tokenIndex271 := position, tokenIndex
-			{
-				position272 := position
-				{
-					position273, tokenIndex273 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l274
+				l264:
+					if buffer[position] != rune('1') {
+						goto l257
 					}
 					position++
+					if buffer[position] != rune('2') {
+						goto l257
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l257
+					}
+					position++
+					goto l149
+				l257:
+					position, tokenIndex = position149, tokenIndex149
+					if buffer[position] != rune('.') {
+						goto l147
+					}
+					position++
+					{
+						position266, tokenIndex266 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l267
+						}
+						position++
+						goto l266
+					l267:
+						position, tokenIndex = position266, tokenIndex266
+						if buffer[position] != rune('S') {
+							goto l147
+						}
+						position++
+					}
+				l266:
+					{
+						position268, tokenIndex268 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l269
+						}
+						position++
+						goto l268
+					l269:
+						position, tokenIndex = position268, tokenIndex268
+						if buffer[position] != rune('L') {
+							goto l147
+						}
+						position++
+					}
+				l268:
+					{
+						position270, tokenIndex270 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l271
+						}
+						position++
+						goto l270
+					l271:
+						position, tokenIndex = position270, tokenIndex270
+						if buffer[position] != rune('E') {
+							goto l147
+						}
+						position++
+					}
+				l270:
+					{
+						position272, tokenIndex272 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l273
+						}
+						position++
+						goto l272
+					l273:
+						position, tokenIndex = position272, tokenIndex272
+						if buffer[position] != rune('B') {
+							goto l147
+						}
+						position++
+					}
+				l272:
+					if buffer[position] != rune('1') {
+						goto l147
+					}
+					position++
+					if buffer[position] != rune('2') {
+						goto l147
+					}
+					position++
+					if buffer[position] != rune('8') {
+						goto l147
+					}
+					position++
+				}
+			l149:
+				add(ruleLabelContainingDirectiveName, position148)
+			}
+			return true
+		l147:
+			position, tokenIndex = position147, tokenIndex147
+			return false
+		},
+		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
+		func() bool {
+			position274, tokenIndex274 := position, tokenIndex
+			{
+				position275 := position
+				if !_rules[ruleSymbolArg]() {
+					goto l274
+				}
+			l276:
+				{
+					position277, tokenIndex277 := position, tokenIndex
+					{
+						position278, tokenIndex278 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l278
+						}
+						goto l279
+					l278:
+						position, tokenIndex = position278, tokenIndex278
+					}
+				l279:
+					if buffer[position] != rune(',') {
+						goto l277
+					}
+					position++
+					{
+						position280, tokenIndex280 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l280
+						}
+						goto l281
+					l280:
+						position, tokenIndex = position280, tokenIndex280
+					}
+				l281:
+					if !_rules[ruleSymbolArg]() {
+						goto l277
+					}
+					goto l276
+				l277:
+					position, tokenIndex = position277, tokenIndex277
+				}
+				add(ruleSymbolArgs, position275)
+			}
+			return true
+		l274:
+			position, tokenIndex = position274, tokenIndex274
+			return false
+		},
+		/* 15 SymbolArg <- <(Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?))> */
+		func() bool {
+			position282, tokenIndex282 := position, tokenIndex
+			{
+				position283 := position
+				{
+					position284, tokenIndex284 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l285
+					}
+					goto l284
+				l285:
+					position, tokenIndex = position284, tokenIndex284
+					if !_rules[ruleSymbolType]() {
+						goto l286
+					}
+					goto l284
+				l286:
+					position, tokenIndex = position284, tokenIndex284
+					{
+						position288, tokenIndex288 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l289
+						}
+						goto l288
+					l289:
+						position, tokenIndex = position288, tokenIndex288
+						if !_rules[ruleLocalSymbol]() {
+							goto l290
+						}
+						goto l288
+					l290:
+						position, tokenIndex = position288, tokenIndex288
+						if !_rules[ruleSymbolName]() {
+							goto l291
+						}
+						goto l288
+					l291:
+						position, tokenIndex = position288, tokenIndex288
+						if !_rules[ruleDot]() {
+							goto l287
+						}
+					}
+				l288:
+					{
+						position292, tokenIndex292 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l292
+						}
+						goto l293
+					l292:
+						position, tokenIndex = position292, tokenIndex292
+					}
+				l293:
+					if !_rules[ruleOperator]() {
+						goto l287
+					}
+					{
+						position294, tokenIndex294 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l294
+						}
+						goto l295
+					l294:
+						position, tokenIndex = position294, tokenIndex294
+					}
+				l295:
+					{
+						position296, tokenIndex296 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l297
+						}
+						goto l296
+					l297:
+						position, tokenIndex = position296, tokenIndex296
+						if !_rules[ruleLocalSymbol]() {
+							goto l298
+						}
+						goto l296
+					l298:
+						position, tokenIndex = position296, tokenIndex296
+						if !_rules[ruleSymbolName]() {
+							goto l287
+						}
+					}
+				l296:
+					goto l284
+				l287:
+					position, tokenIndex = position284, tokenIndex284
+					if !_rules[ruleLocalSymbol]() {
+						goto l299
+					}
+					{
+						position300, tokenIndex300 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l300
+						}
+						goto l301
+					l300:
+						position, tokenIndex = position300, tokenIndex300
+					}
+				l301:
+					goto l284
+				l299:
+					position, tokenIndex = position284, tokenIndex284
+					if !_rules[ruleSymbolName]() {
+						goto l302
+					}
+					if !_rules[ruleOffset]() {
+						goto l302
+					}
+					goto l284
+				l302:
+					position, tokenIndex = position284, tokenIndex284
+					if !_rules[ruleSymbolName]() {
+						goto l282
+					}
+					{
+						position303, tokenIndex303 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l303
+						}
+						goto l304
+					l303:
+						position, tokenIndex = position303, tokenIndex303
+					}
+				l304:
+				}
+			l284:
+				add(ruleSymbolArg, position283)
+			}
+			return true
+		l282:
+			position, tokenIndex = position282, tokenIndex282
+			return false
+		},
+		/* 16 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
+		func() bool {
+			position305, tokenIndex305 := position, tokenIndex
+			{
+				position306 := position
+				{
+					position307, tokenIndex307 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l308
+					}
+					position++
+					goto l307
+				l308:
+					position, tokenIndex = position307, tokenIndex307
+					if buffer[position] != rune('%') {
+						goto l305
+					}
+					position++
+				}
+			l307:
+				{
+					position309, tokenIndex309 := position, tokenIndex
 					if buffer[position] != rune('f') {
-						goto l274
+						goto l310
 					}
 					position++
 					if buffer[position] != rune('u') {
-						goto l274
+						goto l310
 					}
 					position++
 					if buffer[position] != rune('n') {
-						goto l274
+						goto l310
 					}
 					position++
 					if buffer[position] != rune('c') {
-						goto l274
+						goto l310
 					}
 					position++
 					if buffer[position] != rune('t') {
-						goto l274
+						goto l310
 					}
 					position++
 					if buffer[position] != rune('i') {
-						goto l274
+						goto l310
 					}
 					position++
 					if buffer[position] != rune('o') {
-						goto l274
+						goto l310
 					}
 					position++
 					if buffer[position] != rune('n') {
-						goto l274
+						goto l310
 					}
 					position++
-					goto l273
-				l274:
-					position, tokenIndex = position273, tokenIndex273
-					if buffer[position] != rune('@') {
-						goto l271
-					}
-					position++
+					goto l309
+				l310:
+					position, tokenIndex = position309, tokenIndex309
 					if buffer[position] != rune('o') {
-						goto l271
+						goto l305
 					}
 					position++
 					if buffer[position] != rune('b') {
-						goto l271
+						goto l305
 					}
 					position++
 					if buffer[position] != rune('j') {
-						goto l271
+						goto l305
 					}
 					position++
 					if buffer[position] != rune('e') {
-						goto l271
+						goto l305
 					}
 					position++
 					if buffer[position] != rune('c') {
-						goto l271
+						goto l305
 					}
 					position++
 					if buffer[position] != rune('t') {
-						goto l271
+						goto l305
 					}
 					position++
 				}
-			l273:
-				add(ruleSymbolType, position272)
+			l309:
+				add(ruleSymbolType, position306)
 			}
 			return true
-		l271:
-			position, tokenIndex = position271, tokenIndex271
+		l305:
+			position, tokenIndex = position305, tokenIndex305
 			return false
 		},
-		/* 15 Dot <- <'.'> */
+		/* 17 Dot <- <'.'> */
 		func() bool {
-			position275, tokenIndex275 := position, tokenIndex
+			position311, tokenIndex311 := position, tokenIndex
 			{
-				position276 := position
+				position312 := position
 				if buffer[position] != rune('.') {
-					goto l275
+					goto l311
 				}
 				position++
-				add(ruleDot, position276)
+				add(ruleDot, position312)
 			}
 			return true
-		l275:
-			position, tokenIndex = position275, tokenIndex275
+		l311:
+			position, tokenIndex = position311, tokenIndex311
 			return false
 		},
-		/* 16 TCMarker <- <('[' 'T' 'C' ']')> */
+		/* 18 TCMarker <- <('[' 'T' 'C' ']')> */
 		func() bool {
-			position277, tokenIndex277 := position, tokenIndex
+			position313, tokenIndex313 := position, tokenIndex
 			{
-				position278 := position
+				position314 := position
 				if buffer[position] != rune('[') {
-					goto l277
+					goto l313
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l277
+					goto l313
 				}
 				position++
 				if buffer[position] != rune('C') {
-					goto l277
+					goto l313
 				}
 				position++
 				if buffer[position] != rune(']') {
-					goto l277
+					goto l313
 				}
 				position++
-				add(ruleTCMarker, position278)
+				add(ruleTCMarker, position314)
 			}
 			return true
-		l277:
-			position, tokenIndex = position277, tokenIndex277
+		l313:
+			position, tokenIndex = position313, tokenIndex313
 			return false
 		},
-		/* 17 EscapedChar <- <('\\' .)> */
-		func() bool {
-			position279, tokenIndex279 := position, tokenIndex
-			{
-				position280 := position
-				if buffer[position] != rune('\\') {
-					goto l279
-				}
-				position++
-				if !matchDot() {
-					goto l279
-				}
-				add(ruleEscapedChar, position280)
-			}
-			return true
-		l279:
-			position, tokenIndex = position279, tokenIndex279
-			return false
-		},
-		/* 18 WS <- <(' ' / '\t')+> */
-		func() bool {
-			position281, tokenIndex281 := position, tokenIndex
-			{
-				position282 := position
-				{
-					position285, tokenIndex285 := position, tokenIndex
-					if buffer[position] != rune(' ') {
-						goto l286
-					}
-					position++
-					goto l285
-				l286:
-					position, tokenIndex = position285, tokenIndex285
-					if buffer[position] != rune('\t') {
-						goto l281
-					}
-					position++
-				}
-			l285:
-			l283:
-				{
-					position284, tokenIndex284 := position, tokenIndex
-					{
-						position287, tokenIndex287 := position, tokenIndex
-						if buffer[position] != rune(' ') {
-							goto l288
-						}
-						position++
-						goto l287
-					l288:
-						position, tokenIndex = position287, tokenIndex287
-						if buffer[position] != rune('\t') {
-							goto l284
-						}
-						position++
-					}
-				l287:
-					goto l283
-				l284:
-					position, tokenIndex = position284, tokenIndex284
-				}
-				add(ruleWS, position282)
-			}
-			return true
-		l281:
-			position, tokenIndex = position281, tokenIndex281
-			return false
-		},
-		/* 19 Comment <- <('#' (!'\n' .)*)> */
-		func() bool {
-			position289, tokenIndex289 := position, tokenIndex
-			{
-				position290 := position
-				if buffer[position] != rune('#') {
-					goto l289
-				}
-				position++
-			l291:
-				{
-					position292, tokenIndex292 := position, tokenIndex
-					{
-						position293, tokenIndex293 := position, tokenIndex
-						if buffer[position] != rune('\n') {
-							goto l293
-						}
-						position++
-						goto l292
-					l293:
-						position, tokenIndex = position293, tokenIndex293
-					}
-					if !matchDot() {
-						goto l292
-					}
-					goto l291
-				l292:
-					position, tokenIndex = position292, tokenIndex292
-				}
-				add(ruleComment, position290)
-			}
-			return true
-		l289:
-			position, tokenIndex = position289, tokenIndex289
-			return false
-		},
-		/* 20 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
-		func() bool {
-			position294, tokenIndex294 := position, tokenIndex
-			{
-				position295 := position
-				{
-					position296, tokenIndex296 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l297
-					}
-					goto l296
-				l297:
-					position, tokenIndex = position296, tokenIndex296
-					if !_rules[ruleLocalLabel]() {
-						goto l298
-					}
-					goto l296
-				l298:
-					position, tokenIndex = position296, tokenIndex296
-					if !_rules[ruleSymbolName]() {
-						goto l294
-					}
-				}
-			l296:
-				if buffer[position] != rune(':') {
-					goto l294
-				}
-				position++
-				add(ruleLabel, position295)
-			}
-			return true
-		l294:
-			position, tokenIndex = position294, tokenIndex294
-			return false
-		},
-		/* 21 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
-		func() bool {
-			position299, tokenIndex299 := position, tokenIndex
-			{
-				position300 := position
-				{
-					position301, tokenIndex301 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l302
-					}
-					position++
-					goto l301
-				l302:
-					position, tokenIndex = position301, tokenIndex301
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l303
-					}
-					position++
-					goto l301
-				l303:
-					position, tokenIndex = position301, tokenIndex301
-					if buffer[position] != rune('.') {
-						goto l304
-					}
-					position++
-					goto l301
-				l304:
-					position, tokenIndex = position301, tokenIndex301
-					if buffer[position] != rune('_') {
-						goto l299
-					}
-					position++
-				}
-			l301:
-			l305:
-				{
-					position306, tokenIndex306 := position, tokenIndex
-					{
-						position307, tokenIndex307 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l308
-						}
-						position++
-						goto l307
-					l308:
-						position, tokenIndex = position307, tokenIndex307
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l309
-						}
-						position++
-						goto l307
-					l309:
-						position, tokenIndex = position307, tokenIndex307
-						if buffer[position] != rune('.') {
-							goto l310
-						}
-						position++
-						goto l307
-					l310:
-						position, tokenIndex = position307, tokenIndex307
-						{
-							position312, tokenIndex312 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l313
-							}
-							position++
-							goto l312
-						l313:
-							position, tokenIndex = position312, tokenIndex312
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l311
-							}
-							position++
-						}
-					l312:
-						goto l307
-					l311:
-						position, tokenIndex = position307, tokenIndex307
-						if buffer[position] != rune('$') {
-							goto l314
-						}
-						position++
-						goto l307
-					l314:
-						position, tokenIndex = position307, tokenIndex307
-						if buffer[position] != rune('_') {
-							goto l306
-						}
-						position++
-					}
-				l307:
-					goto l305
-				l306:
-					position, tokenIndex = position306, tokenIndex306
-				}
-				add(ruleSymbolName, position300)
-			}
-			return true
-		l299:
-			position, tokenIndex = position299, tokenIndex299
-			return false
-		},
-		/* 22 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
+		/* 19 EscapedChar <- <('\\' .)> */
 		func() bool {
 			position315, tokenIndex315 := position, tokenIndex
 			{
 				position316 := position
-				if buffer[position] != rune('.') {
+				if buffer[position] != rune('\\') {
 					goto l315
 				}
 				position++
-				if buffer[position] != rune('L') {
+				if !matchDot() {
 					goto l315
 				}
-				position++
-				{
-					position319, tokenIndex319 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l320
-					}
-					position++
-					goto l319
-				l320:
-					position, tokenIndex = position319, tokenIndex319
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l321
-					}
-					position++
-					goto l319
-				l321:
-					position, tokenIndex = position319, tokenIndex319
-					{
-						position323, tokenIndex323 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l324
-						}
-						position++
-						goto l323
-					l324:
-						position, tokenIndex = position323, tokenIndex323
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l322
-						}
-						position++
-					}
-				l323:
-					goto l319
-				l322:
-					position, tokenIndex = position319, tokenIndex319
-					if buffer[position] != rune('.') {
-						goto l325
-					}
-					position++
-					goto l319
-				l325:
-					position, tokenIndex = position319, tokenIndex319
-					{
-						position327, tokenIndex327 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l328
-						}
-						position++
-						goto l327
-					l328:
-						position, tokenIndex = position327, tokenIndex327
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l326
-						}
-						position++
-					}
-				l327:
-					goto l319
-				l326:
-					position, tokenIndex = position319, tokenIndex319
-					if buffer[position] != rune('$') {
-						goto l329
-					}
-					position++
-					goto l319
-				l329:
-					position, tokenIndex = position319, tokenIndex319
-					if buffer[position] != rune('_') {
-						goto l315
-					}
-					position++
-				}
-			l319:
-			l317:
-				{
-					position318, tokenIndex318 := position, tokenIndex
-					{
-						position330, tokenIndex330 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l331
-						}
-						position++
-						goto l330
-					l331:
-						position, tokenIndex = position330, tokenIndex330
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l332
-						}
-						position++
-						goto l330
-					l332:
-						position, tokenIndex = position330, tokenIndex330
-						{
-							position334, tokenIndex334 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l335
-							}
-							position++
-							goto l334
-						l335:
-							position, tokenIndex = position334, tokenIndex334
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l333
-							}
-							position++
-						}
-					l334:
-						goto l330
-					l333:
-						position, tokenIndex = position330, tokenIndex330
-						if buffer[position] != rune('.') {
-							goto l336
-						}
-						position++
-						goto l330
-					l336:
-						position, tokenIndex = position330, tokenIndex330
-						{
-							position338, tokenIndex338 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l339
-							}
-							position++
-							goto l338
-						l339:
-							position, tokenIndex = position338, tokenIndex338
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l337
-							}
-							position++
-						}
-					l338:
-						goto l330
-					l337:
-						position, tokenIndex = position330, tokenIndex330
-						if buffer[position] != rune('$') {
-							goto l340
-						}
-						position++
-						goto l330
-					l340:
-						position, tokenIndex = position330, tokenIndex330
-						if buffer[position] != rune('_') {
-							goto l318
-						}
-						position++
-					}
-				l330:
-					goto l317
-				l318:
-					position, tokenIndex = position318, tokenIndex318
-				}
-				add(ruleLocalSymbol, position316)
+				add(ruleEscapedChar, position316)
 			}
 			return true
 		l315:
 			position, tokenIndex = position315, tokenIndex315
 			return false
 		},
-		/* 23 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
+		/* 20 WS <- <(' ' / '\t')+> */
 		func() bool {
-			position341, tokenIndex341 := position, tokenIndex
+			position317, tokenIndex317 := position, tokenIndex
 			{
-				position342 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l341
+				position318 := position
+				{
+					position321, tokenIndex321 := position, tokenIndex
+					if buffer[position] != rune(' ') {
+						goto l322
+					}
+					position++
+					goto l321
+				l322:
+					position, tokenIndex = position321, tokenIndex321
+					if buffer[position] != rune('\t') {
+						goto l317
+					}
+					position++
+				}
+			l321:
+			l319:
+				{
+					position320, tokenIndex320 := position, tokenIndex
+					{
+						position323, tokenIndex323 := position, tokenIndex
+						if buffer[position] != rune(' ') {
+							goto l324
+						}
+						position++
+						goto l323
+					l324:
+						position, tokenIndex = position323, tokenIndex323
+						if buffer[position] != rune('\t') {
+							goto l320
+						}
+						position++
+					}
+				l323:
+					goto l319
+				l320:
+					position, tokenIndex = position320, tokenIndex320
+				}
+				add(ruleWS, position318)
+			}
+			return true
+		l317:
+			position, tokenIndex = position317, tokenIndex317
+			return false
+		},
+		/* 21 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
+		func() bool {
+			position325, tokenIndex325 := position, tokenIndex
+			{
+				position326 := position
+				{
+					position327, tokenIndex327 := position, tokenIndex
+					if buffer[position] != rune('/') {
+						goto l328
+					}
+					position++
+					if buffer[position] != rune('/') {
+						goto l328
+					}
+					position++
+					goto l327
+				l328:
+					position, tokenIndex = position327, tokenIndex327
+					if buffer[position] != rune('#') {
+						goto l325
+					}
+					position++
+				}
+			l327:
+			l329:
+				{
+					position330, tokenIndex330 := position, tokenIndex
+					{
+						position331, tokenIndex331 := position, tokenIndex
+						if buffer[position] != rune('\n') {
+							goto l331
+						}
+						position++
+						goto l330
+					l331:
+						position, tokenIndex = position331, tokenIndex331
+					}
+					if !matchDot() {
+						goto l330
+					}
+					goto l329
+				l330:
+					position, tokenIndex = position330, tokenIndex330
+				}
+				add(ruleComment, position326)
+			}
+			return true
+		l325:
+			position, tokenIndex = position325, tokenIndex325
+			return false
+		},
+		/* 22 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		func() bool {
+			position332, tokenIndex332 := position, tokenIndex
+			{
+				position333 := position
+				{
+					position334, tokenIndex334 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l335
+					}
+					goto l334
+				l335:
+					position, tokenIndex = position334, tokenIndex334
+					if !_rules[ruleLocalLabel]() {
+						goto l336
+					}
+					goto l334
+				l336:
+					position, tokenIndex = position334, tokenIndex334
+					if !_rules[ruleSymbolName]() {
+						goto l332
+					}
+				}
+			l334:
+				if buffer[position] != rune(':') {
+					goto l332
 				}
 				position++
+				add(ruleLabel, position333)
+			}
+			return true
+		l332:
+			position, tokenIndex = position332, tokenIndex332
+			return false
+		},
+		/* 23 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		func() bool {
+			position337, tokenIndex337 := position, tokenIndex
+			{
+				position338 := position
+				{
+					position339, tokenIndex339 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l340
+					}
+					position++
+					goto l339
+				l340:
+					position, tokenIndex = position339, tokenIndex339
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l341
+					}
+					position++
+					goto l339
+				l341:
+					position, tokenIndex = position339, tokenIndex339
+					if buffer[position] != rune('.') {
+						goto l342
+					}
+					position++
+					goto l339
+				l342:
+					position, tokenIndex = position339, tokenIndex339
+					if buffer[position] != rune('_') {
+						goto l337
+					}
+					position++
+				}
+			l339:
 			l343:
 				{
 					position344, tokenIndex344 := position, tokenIndex
 					{
 						position345, tokenIndex345 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
 							goto l346
 						}
 						position++
 						goto l345
 					l346:
 						position, tokenIndex = position345, tokenIndex345
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l347
+						}
+						position++
+						goto l345
+					l347:
+						position, tokenIndex = position345, tokenIndex345
+						if buffer[position] != rune('.') {
+							goto l348
+						}
+						position++
+						goto l345
+					l348:
+						position, tokenIndex = position345, tokenIndex345
+						{
+							position350, tokenIndex350 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l351
+							}
+							position++
+							goto l350
+						l351:
+							position, tokenIndex = position350, tokenIndex350
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l349
+							}
+							position++
+						}
+					l350:
+						goto l345
+					l349:
+						position, tokenIndex = position345, tokenIndex345
 						if buffer[position] != rune('$') {
+							goto l352
+						}
+						position++
+						goto l345
+					l352:
+						position, tokenIndex = position345, tokenIndex345
+						if buffer[position] != rune('_') {
 							goto l344
 						}
 						position++
@@ -2844,1588 +2928,3457 @@
 				l344:
 					position, tokenIndex = position344, tokenIndex344
 				}
-				add(ruleLocalLabel, position342)
+				add(ruleSymbolName, position338)
 			}
 			return true
-		l341:
-			position, tokenIndex = position341, tokenIndex341
+		l337:
+			position, tokenIndex = position337, tokenIndex337
 			return false
 		},
-		/* 24 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
+		/* 24 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
 		func() bool {
-			position347, tokenIndex347 := position, tokenIndex
+			position353, tokenIndex353 := position, tokenIndex
 			{
-				position348 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l347
+				position354 := position
+				if buffer[position] != rune('.') {
+					goto l353
 				}
 				position++
-			l349:
-				{
-					position350, tokenIndex350 := position, tokenIndex
-					{
-						position351, tokenIndex351 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l352
-						}
-						position++
-						goto l351
-					l352:
-						position, tokenIndex = position351, tokenIndex351
-						if buffer[position] != rune('$') {
-							goto l350
-						}
-						position++
-					}
-				l351:
-					goto l349
-				l350:
-					position, tokenIndex = position350, tokenIndex350
-				}
-				{
-					position353, tokenIndex353 := position, tokenIndex
-					if buffer[position] != rune('b') {
-						goto l354
-					}
-					position++
+				if buffer[position] != rune('L') {
 					goto l353
-				l354:
-					position, tokenIndex = position353, tokenIndex353
-					if buffer[position] != rune('f') {
-						goto l347
-					}
-					position++
 				}
-			l353:
-				add(ruleLocalLabelRef, position348)
-			}
-			return true
-		l347:
-			position, tokenIndex = position347, tokenIndex347
-			return false
-		},
-		/* 25 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
-		func() bool {
-			position355, tokenIndex355 := position, tokenIndex
-			{
-				position356 := position
-				if !_rules[ruleInstructionName]() {
-					goto l355
-				}
+				position++
 				{
 					position357, tokenIndex357 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l357
-					}
-					if !_rules[ruleInstructionArg]() {
-						goto l357
-					}
-				l359:
-					{
-						position360, tokenIndex360 := position, tokenIndex
-						{
-							position361, tokenIndex361 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l361
-							}
-							goto l362
-						l361:
-							position, tokenIndex = position361, tokenIndex361
-						}
-					l362:
-						if buffer[position] != rune(',') {
-							goto l360
-						}
-						position++
-						{
-							position363, tokenIndex363 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l363
-							}
-							goto l364
-						l363:
-							position, tokenIndex = position363, tokenIndex363
-						}
-					l364:
-						if !_rules[ruleInstructionArg]() {
-							goto l360
-						}
-						goto l359
-					l360:
-						position, tokenIndex = position360, tokenIndex360
-					}
-					goto l358
-				l357:
-					position, tokenIndex = position357, tokenIndex357
-				}
-			l358:
-				add(ruleInstruction, position356)
-			}
-			return true
-		l355:
-			position, tokenIndex = position355, tokenIndex355
-			return false
-		},
-		/* 26 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
-		func() bool {
-			position365, tokenIndex365 := position, tokenIndex
-			{
-				position366 := position
-				{
-					position367, tokenIndex367 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l368
+						goto l358
 					}
 					position++
-					goto l367
-				l368:
-					position, tokenIndex = position367, tokenIndex367
+					goto l357
+				l358:
+					position, tokenIndex = position357, tokenIndex357
 					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l359
+					}
+					position++
+					goto l357
+				l359:
+					position, tokenIndex = position357, tokenIndex357
+					{
+						position361, tokenIndex361 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l362
+						}
+						position++
+						goto l361
+					l362:
+						position, tokenIndex = position361, tokenIndex361
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l360
+						}
+						position++
+					}
+				l361:
+					goto l357
+				l360:
+					position, tokenIndex = position357, tokenIndex357
+					if buffer[position] != rune('.') {
+						goto l363
+					}
+					position++
+					goto l357
+				l363:
+					position, tokenIndex = position357, tokenIndex357
+					{
+						position365, tokenIndex365 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l366
+						}
+						position++
 						goto l365
+					l366:
+						position, tokenIndex = position365, tokenIndex365
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l364
+						}
+						position++
+					}
+				l365:
+					goto l357
+				l364:
+					position, tokenIndex = position357, tokenIndex357
+					if buffer[position] != rune('$') {
+						goto l367
+					}
+					position++
+					goto l357
+				l367:
+					position, tokenIndex = position357, tokenIndex357
+					if buffer[position] != rune('_') {
+						goto l353
 					}
 					position++
 				}
-			l367:
-			l369:
+			l357:
+			l355:
 				{
-					position370, tokenIndex370 := position, tokenIndex
+					position356, tokenIndex356 := position, tokenIndex
 					{
-						position371, tokenIndex371 := position, tokenIndex
+						position368, tokenIndex368 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l372
+							goto l369
 						}
 						position++
-						goto l371
-					l372:
-						position, tokenIndex = position371, tokenIndex371
+						goto l368
+					l369:
+						position, tokenIndex = position368, tokenIndex368
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l373
+							goto l370
 						}
 						position++
-						goto l371
-					l373:
-						position, tokenIndex = position371, tokenIndex371
+						goto l368
+					l370:
+						position, tokenIndex = position368, tokenIndex368
 						{
-							position374, tokenIndex374 := position, tokenIndex
+							position372, tokenIndex372 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l373
+							}
+							position++
+							goto l372
+						l373:
+							position, tokenIndex = position372, tokenIndex372
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l371
+							}
+							position++
+						}
+					l372:
+						goto l368
+					l371:
+						position, tokenIndex = position368, tokenIndex368
+						if buffer[position] != rune('.') {
+							goto l374
+						}
+						position++
+						goto l368
+					l374:
+						position, tokenIndex = position368, tokenIndex368
+						{
+							position376, tokenIndex376 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l377
+							}
+							position++
+							goto l376
+						l377:
+							position, tokenIndex = position376, tokenIndex376
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l375
 							}
 							position++
-							goto l374
-						l375:
-							position, tokenIndex = position374, tokenIndex374
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l370
-							}
-							position++
 						}
-					l374:
+					l376:
+						goto l368
+					l375:
+						position, tokenIndex = position368, tokenIndex368
+						if buffer[position] != rune('$') {
+							goto l378
+						}
+						position++
+						goto l368
+					l378:
+						position, tokenIndex = position368, tokenIndex368
+						if buffer[position] != rune('_') {
+							goto l356
+						}
+						position++
 					}
-				l371:
-					goto l369
-				l370:
-					position, tokenIndex = position370, tokenIndex370
+				l368:
+					goto l355
+				l356:
+					position, tokenIndex = position356, tokenIndex356
 				}
+				add(ruleLocalSymbol, position354)
+			}
+			return true
+		l353:
+			position, tokenIndex = position353, tokenIndex353
+			return false
+		},
+		/* 25 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
+		func() bool {
+			position379, tokenIndex379 := position, tokenIndex
+			{
+				position380 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l379
+				}
+				position++
+			l381:
 				{
-					position376, tokenIndex376 := position, tokenIndex
+					position382, tokenIndex382 := position, tokenIndex
 					{
-						position378, tokenIndex378 := position, tokenIndex
-						if buffer[position] != rune('.') {
-							goto l379
+						position383, tokenIndex383 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l384
 						}
 						position++
-						goto l378
-					l379:
-						position, tokenIndex = position378, tokenIndex378
-						if buffer[position] != rune('+') {
-							goto l380
-						}
-						position++
-						goto l378
-					l380:
-						position, tokenIndex = position378, tokenIndex378
-						if buffer[position] != rune('-') {
-							goto l376
-						}
-						position++
-					}
-				l378:
-					goto l377
-				l376:
-					position, tokenIndex = position376, tokenIndex376
-				}
-			l377:
-				add(ruleInstructionName, position366)
-			}
-			return true
-		l365:
-			position, tokenIndex = position365, tokenIndex365
-			return false
-		},
-		/* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
-		func() bool {
-			position381, tokenIndex381 := position, tokenIndex
-			{
-				position382 := position
-				{
-					position383, tokenIndex383 := position, tokenIndex
-					if !_rules[ruleIndirectionIndicator]() {
 						goto l383
+					l384:
+						position, tokenIndex = position383, tokenIndex383
+						if buffer[position] != rune('$') {
+							goto l382
+						}
+						position++
 					}
-					goto l384
 				l383:
-					position, tokenIndex = position383, tokenIndex383
+					goto l381
+				l382:
+					position, tokenIndex = position382, tokenIndex382
 				}
-			l384:
+				add(ruleLocalLabel, position380)
+			}
+			return true
+		l379:
+			position, tokenIndex = position379, tokenIndex379
+			return false
+		},
+		/* 26 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
+		func() bool {
+			position385, tokenIndex385 := position, tokenIndex
+			{
+				position386 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l385
+				}
+				position++
+			l387:
 				{
-					position385, tokenIndex385 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l386
-					}
-					goto l385
-				l386:
-					position, tokenIndex = position385, tokenIndex385
-					if !_rules[ruleLocalLabelRef]() {
-						goto l387
-					}
-					goto l385
-				l387:
-					position, tokenIndex = position385, tokenIndex385
-					if !_rules[ruleTOCRefHigh]() {
-						goto l388
-					}
-					goto l385
-				l388:
-					position, tokenIndex = position385, tokenIndex385
-					if !_rules[ruleTOCRefLow]() {
+					position388, tokenIndex388 := position, tokenIndex
+					{
+						position389, tokenIndex389 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l390
+						}
+						position++
 						goto l389
+					l390:
+						position, tokenIndex = position389, tokenIndex389
+						if buffer[position] != rune('$') {
+							goto l388
+						}
+						position++
 					}
-					goto l385
 				l389:
-					position, tokenIndex = position385, tokenIndex385
-					if !_rules[ruleGOTLocation]() {
-						goto l390
-					}
-					goto l385
-				l390:
-					position, tokenIndex = position385, tokenIndex385
-					if !_rules[ruleGOTSymbolOffset]() {
-						goto l391
-					}
-					goto l385
-				l391:
-					position, tokenIndex = position385, tokenIndex385
-					if !_rules[ruleMemoryRef]() {
-						goto l381
-					}
+					goto l387
+				l388:
+					position, tokenIndex = position388, tokenIndex388
 				}
-			l385:
-			l392:
 				{
-					position393, tokenIndex393 := position, tokenIndex
-					if !_rules[ruleAVX512Token]() {
-						goto l393
-					}
-					goto l392
-				l393:
-					position, tokenIndex = position393, tokenIndex393
-				}
-				add(ruleInstructionArg, position382)
-			}
-			return true
-		l381:
-			position, tokenIndex = position381, tokenIndex381
-			return false
-		},
-		/* 28 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
-		func() bool {
-			position394, tokenIndex394 := position, tokenIndex
-			{
-				position395 := position
-				if buffer[position] != rune('$') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('G') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('F') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('S') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('A') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('E') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l394
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l394
-				}
-				position++
-				if !_rules[ruleLocalSymbol]() {
-					goto l394
-				}
-				add(ruleGOTLocation, position395)
-			}
-			return true
-		l394:
-			position, tokenIndex = position394, tokenIndex394
-			return false
-		},
-		/* 29 GOTSymbolOffset <- <('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?)> */
-		func() bool {
-			position396, tokenIndex396 := position, tokenIndex
-			{
-				position397 := position
-				if buffer[position] != rune('$') {
-					goto l396
-				}
-				position++
-				if !_rules[ruleSymbolName]() {
-					goto l396
-				}
-				if buffer[position] != rune('@') {
-					goto l396
-				}
-				position++
-				if buffer[position] != rune('G') {
-					goto l396
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l396
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l396
-				}
-				position++
-				{
-					position398, tokenIndex398 := position, tokenIndex
-					if buffer[position] != rune('O') {
-						goto l398
+					position391, tokenIndex391 := position, tokenIndex
+					if buffer[position] != rune('b') {
+						goto l392
 					}
 					position++
-					if buffer[position] != rune('F') {
-						goto l398
+					goto l391
+				l392:
+					position, tokenIndex = position391, tokenIndex391
+					if buffer[position] != rune('f') {
+						goto l385
 					}
 					position++
-					if buffer[position] != rune('F') {
-						goto l398
-					}
-					position++
-					goto l399
-				l398:
-					position, tokenIndex = position398, tokenIndex398
 				}
-			l399:
-				add(ruleGOTSymbolOffset, position397)
+			l391:
+				add(ruleLocalLabelRef, position386)
 			}
 			return true
-		l396:
-			position, tokenIndex = position396, tokenIndex396
+		l385:
+			position, tokenIndex = position385, tokenIndex385
 			return false
 		},
-		/* 30 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
+		/* 27 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
 		func() bool {
-			position400, tokenIndex400 := position, tokenIndex
+			position393, tokenIndex393 := position, tokenIndex
 			{
-				position401 := position
+				position394 := position
+				if !_rules[ruleInstructionName]() {
+					goto l393
+				}
 				{
-					position402, tokenIndex402 := position, tokenIndex
+					position395, tokenIndex395 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l402
+						goto l395
 					}
-					goto l403
-				l402:
-					position, tokenIndex = position402, tokenIndex402
+					if !_rules[ruleInstructionArg]() {
+						goto l395
+					}
+				l397:
+					{
+						position398, tokenIndex398 := position, tokenIndex
+						{
+							position399, tokenIndex399 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l399
+							}
+							goto l400
+						l399:
+							position, tokenIndex = position399, tokenIndex399
+						}
+					l400:
+						if buffer[position] != rune(',') {
+							goto l398
+						}
+						position++
+						{
+							position401, tokenIndex401 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l401
+							}
+							goto l402
+						l401:
+							position, tokenIndex = position401, tokenIndex401
+						}
+					l402:
+						if !_rules[ruleInstructionArg]() {
+							goto l398
+						}
+						goto l397
+					l398:
+						position, tokenIndex = position398, tokenIndex398
+					}
+					goto l396
+				l395:
+					position, tokenIndex = position395, tokenIndex395
 				}
-			l403:
-				if buffer[position] != rune('{') {
-					goto l400
-				}
-				position++
+			l396:
+				add(ruleInstruction, position394)
+			}
+			return true
+		l393:
+			position, tokenIndex = position393, tokenIndex393
+			return false
+		},
+		/* 28 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
+		func() bool {
+			position403, tokenIndex403 := position, tokenIndex
+			{
+				position404 := position
 				{
-					position404, tokenIndex404 := position, tokenIndex
-					if buffer[position] != rune('%') {
-						goto l404
+					position405, tokenIndex405 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l406
 					}
 					position++
 					goto l405
-				l404:
-					position, tokenIndex = position404, tokenIndex404
+				l406:
+					position, tokenIndex = position405, tokenIndex405
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l403
+					}
+					position++
 				}
 			l405:
-			l406:
+			l407:
 				{
-					position407, tokenIndex407 := position, tokenIndex
+					position408, tokenIndex408 := position, tokenIndex
 					{
-						position408, tokenIndex408 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l409
-						}
-						position++
-						goto l408
-					l409:
-						position, tokenIndex = position408, tokenIndex408
+						position409, tokenIndex409 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l407
-						}
-						position++
-					}
-				l408:
-					goto l406
-				l407:
-					position, tokenIndex = position407, tokenIndex407
-				}
-				if buffer[position] != rune('}') {
-					goto l400
-				}
-				position++
-				add(ruleAVX512Token, position401)
-			}
-			return true
-		l400:
-			position, tokenIndex = position400, tokenIndex400
-			return false
-		},
-		/* 31 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
-		func() bool {
-			position410, tokenIndex410 := position, tokenIndex
-			{
-				position411 := position
-				if buffer[position] != rune('.') {
-					goto l410
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l410
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l410
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l410
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l410
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l410
-				}
-				position++
-				{
-					position412, tokenIndex412 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l413
-					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l413
-					}
-					position++
-					goto l412
-				l413:
-					position, tokenIndex = position412, tokenIndex412
-					if buffer[position] != rune('.') {
-						goto l410
-					}
-					position++
-					if buffer[position] != rune('L') {
-						goto l410
-					}
-					position++
-					{
-						position416, tokenIndex416 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l417
-						}
-						position++
-						goto l416
-					l417:
-						position, tokenIndex = position416, tokenIndex416
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l418
-						}
-						position++
-						goto l416
-					l418:
-						position, tokenIndex = position416, tokenIndex416
-						if buffer[position] != rune('_') {
-							goto l419
-						}
-						position++
-						goto l416
-					l419:
-						position, tokenIndex = position416, tokenIndex416
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l410
 						}
 						position++
-					}
-				l416:
-				l414:
-					{
-						position415, tokenIndex415 := position, tokenIndex
+						goto l409
+					l410:
+						position, tokenIndex = position409, tokenIndex409
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l411
+						}
+						position++
+						goto l409
+					l411:
+						position, tokenIndex = position409, tokenIndex409
+						if buffer[position] != rune('.') {
+							goto l412
+						}
+						position++
+						goto l409
+					l412:
+						position, tokenIndex = position409, tokenIndex409
 						{
-							position420, tokenIndex420 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l421
-							}
-							position++
-							goto l420
-						l421:
-							position, tokenIndex = position420, tokenIndex420
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l422
-							}
-							position++
-							goto l420
-						l422:
-							position, tokenIndex = position420, tokenIndex420
-							if buffer[position] != rune('_') {
-								goto l423
-							}
-							position++
-							goto l420
-						l423:
-							position, tokenIndex = position420, tokenIndex420
+							position413, tokenIndex413 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l415
+								goto l414
+							}
+							position++
+							goto l413
+						l414:
+							position, tokenIndex = position413, tokenIndex413
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l408
 							}
 							position++
 						}
-					l420:
-						goto l414
-					l415:
-						position, tokenIndex = position415, tokenIndex415
+					l413:
 					}
+				l409:
+					goto l407
+				l408:
+					position, tokenIndex = position408, tokenIndex408
 				}
-			l412:
-				if buffer[position] != rune('@') {
-					goto l410
+				{
+					position415, tokenIndex415 := position, tokenIndex
+					{
+						position417, tokenIndex417 := position, tokenIndex
+						if buffer[position] != rune('.') {
+							goto l418
+						}
+						position++
+						goto l417
+					l418:
+						position, tokenIndex = position417, tokenIndex417
+						if buffer[position] != rune('+') {
+							goto l419
+						}
+						position++
+						goto l417
+					l419:
+						position, tokenIndex = position417, tokenIndex417
+						if buffer[position] != rune('-') {
+							goto l415
+						}
+						position++
+					}
+				l417:
+					goto l416
+				l415:
+					position, tokenIndex = position415, tokenIndex415
 				}
-				position++
+			l416:
+				add(ruleInstructionName, position404)
+			}
+			return true
+		l403:
+			position, tokenIndex = position403, tokenIndex403
+			return false
+		},
+		/* 29 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
+		func() bool {
+			position420, tokenIndex420 := position, tokenIndex
+			{
+				position421 := position
+				{
+					position422, tokenIndex422 := position, tokenIndex
+					if !_rules[ruleIndirectionIndicator]() {
+						goto l422
+					}
+					goto l423
+				l422:
+					position, tokenIndex = position422, tokenIndex422
+				}
+			l423:
 				{
 					position424, tokenIndex424 := position, tokenIndex
-					if buffer[position] != rune('h') {
+					if !_rules[ruleARMConstantTweak]() {
 						goto l425
 					}
-					position++
 					goto l424
 				l425:
 					position, tokenIndex = position424, tokenIndex424
-					if buffer[position] != rune('H') {
-						goto l410
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l426
 					}
-					position++
-				}
-			l424:
-				{
-					position426, tokenIndex426 := position, tokenIndex
-					if buffer[position] != rune('a') {
+					goto l424
+				l426:
+					position, tokenIndex = position424, tokenIndex424
+					if !_rules[ruleLocalLabelRef]() {
 						goto l427
 					}
-					position++
-					goto l426
+					goto l424
 				l427:
-					position, tokenIndex = position426, tokenIndex426
-					if buffer[position] != rune('A') {
-						goto l410
+					position, tokenIndex = position424, tokenIndex424
+					if !_rules[ruleTOCRefHigh]() {
+						goto l428
 					}
-					position++
+					goto l424
+				l428:
+					position, tokenIndex = position424, tokenIndex424
+					if !_rules[ruleTOCRefLow]() {
+						goto l429
+					}
+					goto l424
+				l429:
+					position, tokenIndex = position424, tokenIndex424
+					if !_rules[ruleGOTLocation]() {
+						goto l430
+					}
+					goto l424
+				l430:
+					position, tokenIndex = position424, tokenIndex424
+					if !_rules[ruleGOTSymbolOffset]() {
+						goto l431
+					}
+					goto l424
+				l431:
+					position, tokenIndex = position424, tokenIndex424
+					if !_rules[ruleMemoryRef]() {
+						goto l420
+					}
 				}
-			l426:
-				add(ruleTOCRefHigh, position411)
+			l424:
+			l432:
+				{
+					position433, tokenIndex433 := position, tokenIndex
+					if !_rules[ruleAVX512Token]() {
+						goto l433
+					}
+					goto l432
+				l433:
+					position, tokenIndex = position433, tokenIndex433
+				}
+				add(ruleInstructionArg, position421)
 			}
 			return true
-		l410:
-			position, tokenIndex = position410, tokenIndex410
+		l420:
+			position, tokenIndex = position420, tokenIndex420
 			return false
 		},
-		/* 32 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		/* 30 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
 		func() bool {
-			position428, tokenIndex428 := position, tokenIndex
+			position434, tokenIndex434 := position, tokenIndex
 			{
-				position429 := position
-				if buffer[position] != rune('.') {
-					goto l428
+				position435 := position
+				if buffer[position] != rune('$') {
+					goto l434
 				}
 				position++
-				if buffer[position] != rune('T') {
-					goto l428
+				if buffer[position] != rune('_') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('G') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l434
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l428
+					goto l434
 				}
 				position++
-				if buffer[position] != rune('C') {
-					goto l428
+				if buffer[position] != rune('B') {
+					goto l434
 				}
 				position++
-				if buffer[position] != rune('.') {
-					goto l428
+				if buffer[position] != rune('A') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('S') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l434
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l434
 				}
 				position++
 				if buffer[position] != rune('-') {
-					goto l428
+					goto l434
 				}
 				position++
+				if !_rules[ruleLocalSymbol]() {
+					goto l434
+				}
+				add(ruleGOTLocation, position435)
+			}
+			return true
+		l434:
+			position, tokenIndex = position434, tokenIndex434
+			return false
+		},
+		/* 31 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
+		func() bool {
+			position436, tokenIndex436 := position, tokenIndex
+			{
+				position437 := position
 				{
-					position430, tokenIndex430 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l431
+					position438, tokenIndex438 := position, tokenIndex
+					if buffer[position] != rune('$') {
+						goto l439
 					}
 					position++
-					if buffer[position] != rune('b') {
-						goto l431
+					if !_rules[ruleSymbolName]() {
+						goto l439
+					}
+					if buffer[position] != rune('@') {
+						goto l439
 					}
 					position++
-					goto l430
-				l431:
-					position, tokenIndex = position430, tokenIndex430
-					if buffer[position] != rune('.') {
-						goto l428
+					if buffer[position] != rune('G') {
+						goto l439
 					}
 					position++
-					if buffer[position] != rune('L') {
-						goto l428
+					if buffer[position] != rune('O') {
+						goto l439
+					}
+					position++
+					if buffer[position] != rune('T') {
+						goto l439
 					}
 					position++
 					{
-						position434, tokenIndex434 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l435
+						position440, tokenIndex440 := position, tokenIndex
+						if buffer[position] != rune('O') {
+							goto l440
 						}
 						position++
-						goto l434
-					l435:
-						position, tokenIndex = position434, tokenIndex434
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						if buffer[position] != rune('F') {
+							goto l440
+						}
+						position++
+						if buffer[position] != rune('F') {
+							goto l440
+						}
+						position++
+						goto l441
+					l440:
+						position, tokenIndex = position440, tokenIndex440
+					}
+				l441:
+					goto l438
+				l439:
+					position, tokenIndex = position438, tokenIndex438
+					if buffer[position] != rune(':') {
+						goto l436
+					}
+					position++
+					{
+						position442, tokenIndex442 := position, tokenIndex
+						if buffer[position] != rune('g') {
+							goto l443
+						}
+						position++
+						goto l442
+					l443:
+						position, tokenIndex = position442, tokenIndex442
+						if buffer[position] != rune('G') {
 							goto l436
 						}
 						position++
-						goto l434
-					l436:
-						position, tokenIndex = position434, tokenIndex434
-						if buffer[position] != rune('_') {
-							goto l437
-						}
-						position++
-						goto l434
-					l437:
-						position, tokenIndex = position434, tokenIndex434
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l428
-						}
-						position++
 					}
-				l434:
-				l432:
+				l442:
 					{
-						position433, tokenIndex433 := position, tokenIndex
-						{
-							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 l440
-							}
-							position++
-							goto l438
-						l440:
-							position, tokenIndex = position438, tokenIndex438
-							if buffer[position] != rune('_') {
-								goto l441
-							}
-							position++
-							goto l438
-						l441:
-							position, tokenIndex = position438, tokenIndex438
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l433
-							}
-							position++
+						position444, tokenIndex444 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l445
 						}
-					l438:
-						goto l432
-					l433:
-						position, tokenIndex = position433, tokenIndex433
+						position++
+						goto l444
+					l445:
+						position, tokenIndex = position444, tokenIndex444
+						if buffer[position] != rune('O') {
+							goto l436
+						}
+						position++
 					}
-				}
-			l430:
-				if buffer[position] != rune('@') {
-					goto l428
-				}
-				position++
-				{
-					position442, tokenIndex442 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l443
+				l444:
+					{
+						position446, tokenIndex446 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l447
+						}
+						position++
+						goto l446
+					l447:
+						position, tokenIndex = position446, tokenIndex446
+						if buffer[position] != rune('T') {
+							goto l436
+						}
+						position++
+					}
+				l446:
+					if buffer[position] != rune(':') {
+						goto l436
 					}
 					position++
-					goto l442
-				l443:
-					position, tokenIndex = position442, tokenIndex442
-					if buffer[position] != rune('L') {
-						goto l428
+					if !_rules[ruleSymbolName]() {
+						goto l436
 					}
-					position++
 				}
-			l442:
-				add(ruleTOCRefLow, position429)
+			l438:
+				add(ruleGOTSymbolOffset, position437)
 			}
 			return true
-		l428:
-			position, tokenIndex = position428, tokenIndex428
+		l436:
+			position, tokenIndex = position436, tokenIndex436
 			return false
 		},
-		/* 33 IndirectionIndicator <- <'*'> */
+		/* 32 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
 		func() bool {
-			position444, tokenIndex444 := position, tokenIndex
+			position448, tokenIndex448 := position, tokenIndex
 			{
-				position445 := position
-				if buffer[position] != rune('*') {
-					goto l444
-				}
-				position++
-				add(ruleIndirectionIndicator, position445)
-			}
-			return true
-		l444:
-			position, tokenIndex = position444, tokenIndex444
-			return false
-		},
-		/* 34 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
-		func() bool {
-			position446, tokenIndex446 := position, tokenIndex
-			{
-				position447 := position
+				position449 := position
 				{
-					position448, tokenIndex448 := position, tokenIndex
-					if buffer[position] != rune('%') {
-						goto l449
-					}
-					position++
-					{
-						position450, tokenIndex450 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l451
-						}
-						position++
+					position450, tokenIndex450 := position, tokenIndex
+					if !_rules[ruleWS]() {
 						goto l450
-					l451:
-						position, tokenIndex = position450, tokenIndex450
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l449
-						}
-						position++
 					}
+					goto l451
 				l450:
-				l452:
-					{
-						position453, tokenIndex453 := position, tokenIndex
-						{
-							position454, tokenIndex454 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l455
-							}
-							position++
-							goto l454
-						l455:
-							position, tokenIndex = position454, tokenIndex454
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l456
-							}
-							position++
-							goto l454
-						l456:
-							position, tokenIndex = position454, tokenIndex454
-							{
-								position457, tokenIndex457 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l458
-								}
-								position++
-								goto l457
-							l458:
-								position, tokenIndex = position457, tokenIndex457
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l453
-								}
-								position++
-							}
-						l457:
-						}
-					l454:
-						goto l452
-					l453:
-						position, tokenIndex = position453, tokenIndex453
-					}
+					position, tokenIndex = position450, tokenIndex450
+				}
+			l451:
+				if buffer[position] != rune('{') {
 					goto l448
-				l449:
-					position, tokenIndex = position448, tokenIndex448
+				}
+				position++
+				{
+					position452, tokenIndex452 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l452
+					}
+					position++
+					goto l453
+				l452:
+					position, tokenIndex = position452, tokenIndex452
+				}
+			l453:
+			l454:
+				{
+					position455, tokenIndex455 := position, tokenIndex
 					{
-						position459, tokenIndex459 := position, tokenIndex
-						if buffer[position] != rune('$') {
-							goto l459
+						position456, tokenIndex456 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l457
 						}
 						position++
-						goto l460
-					l459:
-						position, tokenIndex = position459, tokenIndex459
+						goto l456
+					l457:
+						position, tokenIndex = position456, tokenIndex456
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l455
+						}
+						position++
 					}
-				l460:
-					{
-						position461, tokenIndex461 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l462
-						}
-						if !_rules[ruleOffset]() {
-							goto l462
-						}
-						goto l461
-					l462:
-						position, tokenIndex = position461, tokenIndex461
-						if !_rules[ruleOffset]() {
-							goto l446
-						}
-					}
-				l461:
+				l456:
+					goto l454
+				l455:
+					position, tokenIndex = position455, tokenIndex455
 				}
-			l448:
+				if buffer[position] != rune('}') {
+					goto l448
+				}
+				position++
+				add(ruleAVX512Token, position449)
+			}
+			return true
+		l448:
+			position, tokenIndex = position448, tokenIndex448
+			return false
+		},
+		/* 33 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
+		func() bool {
+			position458, tokenIndex458 := position, tokenIndex
+			{
+				position459 := position
+				if buffer[position] != rune('.') {
+					goto l458
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l458
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l458
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l458
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l458
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l458
+				}
+				position++
 				{
-					position463, tokenIndex463 := position, tokenIndex
+					position460, tokenIndex460 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l461
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l461
+					}
+					position++
+					goto l460
+				l461:
+					position, tokenIndex = position460, tokenIndex460
+					if buffer[position] != rune('.') {
+						goto l458
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l458
+					}
+					position++
 					{
 						position464, tokenIndex464 := position, tokenIndex
-						if buffer[position] != rune('f') {
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
 							goto l465
 						}
 						position++
 						goto l464
 					l465:
 						position, tokenIndex = position464, tokenIndex464
-						if buffer[position] != rune('b') {
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
 							goto l466
 						}
 						position++
 						goto l464
 					l466:
 						position, tokenIndex = position464, tokenIndex464
-						if buffer[position] != rune(':') {
+						if buffer[position] != rune('_') {
 							goto l467
 						}
 						position++
 						goto l464
 					l467:
 						position, tokenIndex = position464, tokenIndex464
-						if buffer[position] != rune('(') {
-							goto l468
-						}
-						position++
-						goto l464
-					l468:
-						position, tokenIndex = position464, tokenIndex464
-						if buffer[position] != rune('+') {
-							goto l469
-						}
-						position++
-						goto l464
-					l469:
-						position, tokenIndex = position464, tokenIndex464
-						if buffer[position] != rune('-') {
-							goto l463
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l458
 						}
 						position++
 					}
 				l464:
-					goto l446
-				l463:
-					position, tokenIndex = position463, tokenIndex463
+				l462:
+					{
+						position463, tokenIndex463 := position, tokenIndex
+						{
+							position468, tokenIndex468 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l469
+							}
+							position++
+							goto l468
+						l469:
+							position, tokenIndex = position468, tokenIndex468
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l470
+							}
+							position++
+							goto l468
+						l470:
+							position, tokenIndex = position468, tokenIndex468
+							if buffer[position] != rune('_') {
+								goto l471
+							}
+							position++
+							goto l468
+						l471:
+							position, tokenIndex = position468, tokenIndex468
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l463
+							}
+							position++
+						}
+					l468:
+						goto l462
+					l463:
+						position, tokenIndex = position463, tokenIndex463
+					}
 				}
-				add(ruleRegisterOrConstant, position447)
-			}
-			return true
-		l446:
-			position, tokenIndex = position446, tokenIndex446
-			return false
-		},
-		/* 35 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */
-		func() bool {
-			position470, tokenIndex470 := position, tokenIndex
-			{
-				position471 := position
+			l460:
+				if buffer[position] != rune('@') {
+					goto l458
+				}
+				position++
 				{
 					position472, tokenIndex472 := position, tokenIndex
-					if !_rules[ruleSymbolRef]() {
+					if buffer[position] != rune('h') {
 						goto l473
 					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l473
-					}
+					position++
 					goto l472
 				l473:
 					position, tokenIndex = position472, tokenIndex472
-					if !_rules[ruleSymbolRef]() {
-						goto l474
+					if buffer[position] != rune('H') {
+						goto l458
 					}
-					goto l472
-				l474:
-					position, tokenIndex = position472, tokenIndex472
-				l476:
-					{
-						position477, tokenIndex477 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l477
-						}
-						goto l476
-					l477:
-						position, tokenIndex = position477, tokenIndex477
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l475
-					}
-					goto l472
-				l475:
-					position, tokenIndex = position472, tokenIndex472
-					if !_rules[ruleSegmentRegister]() {
-						goto l478
-					}
-					if !_rules[ruleOffset]() {
-						goto l478
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l478
-					}
-					goto l472
-				l478:
-					position, tokenIndex = position472, tokenIndex472
-					if !_rules[ruleSegmentRegister]() {
-						goto l479
-					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l479
-					}
-					goto l472
-				l479:
-					position, tokenIndex = position472, tokenIndex472
-					if !_rules[ruleSegmentRegister]() {
-						goto l480
-					}
-					if !_rules[ruleOffset]() {
-						goto l480
-					}
-					goto l472
-				l480:
-					position, tokenIndex = position472, tokenIndex472
-					if !_rules[ruleBaseIndexScale]() {
-						goto l470
-					}
+					position++
 				}
 			l472:
-				add(ruleMemoryRef, position471)
-			}
-			return true
-		l470:
-			position, tokenIndex = position470, tokenIndex470
-			return false
-		},
-		/* 36 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
-		func() bool {
-			position481, tokenIndex481 := position, tokenIndex
-			{
-				position482 := position
 				{
-					position483, tokenIndex483 := position, tokenIndex
-				l485:
-					{
-						position486, tokenIndex486 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l486
-						}
-						goto l485
-					l486:
-						position, tokenIndex = position486, tokenIndex486
-					}
-					if buffer[position] != rune('+') {
-						goto l483
+					position474, tokenIndex474 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l475
 					}
 					position++
-					goto l484
-				l483:
-					position, tokenIndex = position483, tokenIndex483
-				}
-			l484:
-				{
-					position487, tokenIndex487 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l488
-					}
-					goto l487
-				l488:
-					position, tokenIndex = position487, tokenIndex487
-					if !_rules[ruleSymbolName]() {
-						goto l481
-					}
-				}
-			l487:
-			l489:
-				{
-					position490, tokenIndex490 := position, tokenIndex
-					if !_rules[ruleOffset]() {
-						goto l490
-					}
-					goto l489
-				l490:
-					position, tokenIndex = position490, tokenIndex490
-				}
-				{
-					position491, tokenIndex491 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l491
+					goto l474
+				l475:
+					position, tokenIndex = position474, tokenIndex474
+					if buffer[position] != rune('A') {
+						goto l458
 					}
 					position++
-					if !_rules[ruleSection]() {
-						goto l491
-					}
-				l493:
-					{
-						position494, tokenIndex494 := position, tokenIndex
-						if !_rules[ruleOffset]() {
-							goto l494
-						}
-						goto l493
-					l494:
-						position, tokenIndex = position494, tokenIndex494
-					}
-					goto l492
-				l491:
-					position, tokenIndex = position491, tokenIndex491
 				}
-			l492:
-				add(ruleSymbolRef, position482)
+			l474:
+				add(ruleTOCRefHigh, position459)
 			}
 			return true
-		l481:
-			position, tokenIndex = position481, tokenIndex481
+		l458:
+			position, tokenIndex = position458, tokenIndex458
 			return false
 		},
-		/* 37 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		/* 34 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
 		func() bool {
-			position495, tokenIndex495 := position, tokenIndex
+			position476, tokenIndex476 := position, tokenIndex
 			{
-				position496 := position
-				if buffer[position] != rune('(') {
-					goto l495
+				position477 := position
+				if buffer[position] != rune('.') {
+					goto l476
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l476
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l476
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l476
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l476
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l476
 				}
 				position++
 				{
-					position497, tokenIndex497 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l497
+					position478, tokenIndex478 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l479
 					}
-					goto l498
-				l497:
-					position, tokenIndex = position497, tokenIndex497
-				}
-			l498:
-				{
-					position499, tokenIndex499 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l499
+					position++
+					if buffer[position] != rune('b') {
+						goto l479
 					}
-					goto l500
-				l499:
-					position, tokenIndex = position499, tokenIndex499
-				}
-			l500:
-				{
-					position501, tokenIndex501 := position, tokenIndex
-					if buffer[position] != rune(',') {
-						goto l501
+					position++
+					goto l478
+				l479:
+					position, tokenIndex = position478, tokenIndex478
+					if buffer[position] != rune('.') {
+						goto l476
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l476
 					}
 					position++
 					{
-						position503, tokenIndex503 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l503
+						position482, tokenIndex482 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l483
 						}
-						goto l504
-					l503:
-						position, tokenIndex = position503, tokenIndex503
-					}
-				l504:
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l501
-					}
-					{
-						position505, tokenIndex505 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l505
+						position++
+						goto l482
+					l483:
+						position, tokenIndex = position482, tokenIndex482
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l484
 						}
-						goto l506
-					l505:
-						position, tokenIndex = position505, tokenIndex505
+						position++
+						goto l482
+					l484:
+						position, tokenIndex = position482, tokenIndex482
+						if buffer[position] != rune('_') {
+							goto l485
+						}
+						position++
+						goto l482
+					l485:
+						position, tokenIndex = position482, tokenIndex482
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l476
+						}
+						position++
 					}
-				l506:
+				l482:
+				l480:
 					{
-						position507, tokenIndex507 := position, tokenIndex
-						if buffer[position] != rune(',') {
+						position481, tokenIndex481 := position, tokenIndex
+						{
+							position486, tokenIndex486 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l487
+							}
+							position++
+							goto l486
+						l487:
+							position, tokenIndex = position486, tokenIndex486
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l488
+							}
+							position++
+							goto l486
+						l488:
+							position, tokenIndex = position486, tokenIndex486
+							if buffer[position] != rune('_') {
+								goto l489
+							}
+							position++
+							goto l486
+						l489:
+							position, tokenIndex = position486, tokenIndex486
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l481
+							}
+							position++
+						}
+					l486:
+						goto l480
+					l481:
+						position, tokenIndex = position481, tokenIndex481
+					}
+				}
+			l478:
+				if buffer[position] != rune('@') {
+					goto l476
+				}
+				position++
+				{
+					position490, tokenIndex490 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l491
+					}
+					position++
+					goto l490
+				l491:
+					position, tokenIndex = position490, tokenIndex490
+					if buffer[position] != rune('L') {
+						goto l476
+					}
+					position++
+				}
+			l490:
+				add(ruleTOCRefLow, position477)
+			}
+			return true
+		l476:
+			position, tokenIndex = position476, tokenIndex476
+			return false
+		},
+		/* 35 IndirectionIndicator <- <'*'> */
+		func() bool {
+			position492, tokenIndex492 := position, tokenIndex
+			{
+				position493 := position
+				if buffer[position] != rune('*') {
+					goto l492
+				}
+				position++
+				add(ruleIndirectionIndicator, position493)
+			}
+			return true
+		l492:
+			position, tokenIndex = position492, tokenIndex492
+			return false
+		},
+		/* 36 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
+		func() bool {
+			position494, tokenIndex494 := position, tokenIndex
+			{
+				position495 := position
+				{
+					position496, tokenIndex496 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l497
+					}
+					position++
+					{
+						position498, tokenIndex498 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l499
+						}
+						position++
+						goto l498
+					l499:
+						position, tokenIndex = position498, tokenIndex498
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l497
+						}
+						position++
+					}
+				l498:
+				l500:
+					{
+						position501, tokenIndex501 := position, tokenIndex
+						{
+							position502, tokenIndex502 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l503
+							}
+							position++
+							goto l502
+						l503:
+							position, tokenIndex = position502, tokenIndex502
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l504
+							}
+							position++
+							goto l502
+						l504:
+							position, tokenIndex = position502, tokenIndex502
+							{
+								position505, tokenIndex505 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l506
+								}
+								position++
+								goto l505
+							l506:
+								position, tokenIndex = position505, tokenIndex505
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l501
+								}
+								position++
+							}
+						l505:
+						}
+					l502:
+						goto l500
+					l501:
+						position, tokenIndex = position501, tokenIndex501
+					}
+					goto l496
+				l497:
+					position, tokenIndex = position496, tokenIndex496
+					{
+						position508, tokenIndex508 := position, tokenIndex
+						if buffer[position] != rune('$') {
+							goto l508
+						}
+						position++
+						goto l509
+					l508:
+						position, tokenIndex = position508, tokenIndex508
+					}
+				l509:
+					{
+						position510, tokenIndex510 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l511
+						}
+						if !_rules[ruleOffset]() {
+							goto l511
+						}
+						goto l510
+					l511:
+						position, tokenIndex = position510, tokenIndex510
+						if !_rules[ruleOffset]() {
 							goto l507
 						}
+					}
+				l510:
+					goto l496
+				l507:
+					position, tokenIndex = position496, tokenIndex496
+					if buffer[position] != rune('#') {
+						goto l512
+					}
+					position++
+					if !_rules[ruleOffset]() {
+						goto l512
+					}
+					{
+						position513, tokenIndex513 := position, tokenIndex
+						if buffer[position] != rune('*') {
+							goto l513
+						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l507
+							goto l513
 						}
 						position++
-					l509:
+					l515:
 						{
-							position510, tokenIndex510 := position, tokenIndex
+							position516, tokenIndex516 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l510
+								goto l516
 							}
 							position++
-							goto l509
-						l510:
-							position, tokenIndex = position510, tokenIndex510
+							goto l515
+						l516:
+							position, tokenIndex = position516, tokenIndex516
 						}
-						goto l508
-					l507:
-						position, tokenIndex = position507, tokenIndex507
-					}
-				l508:
-					goto l502
-				l501:
-					position, tokenIndex = position501, tokenIndex501
-				}
-			l502:
-				if buffer[position] != rune(')') {
-					goto l495
-				}
-				position++
-				add(ruleBaseIndexScale, position496)
-			}
-			return true
-		l495:
-			position, tokenIndex = position495, tokenIndex495
-			return false
-		},
-		/* 38 Operator <- <('+' / '-')> */
-		func() bool {
-			position511, tokenIndex511 := position, tokenIndex
-			{
-				position512 := position
-				{
-					position513, tokenIndex513 := position, tokenIndex
-					if buffer[position] != rune('+') {
+						{
+							position517, tokenIndex517 := position, tokenIndex
+							if buffer[position] != rune('-') {
+								goto l517
+							}
+							position++
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l517
+							}
+							position++
+						l519:
+							{
+								position520, tokenIndex520 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l520
+								}
+								position++
+								goto l519
+							l520:
+								position, tokenIndex = position520, tokenIndex520
+							}
+							goto l518
+						l517:
+							position, tokenIndex = position517, tokenIndex517
+						}
+					l518:
 						goto l514
+					l513:
+						position, tokenIndex = position513, tokenIndex513
 					}
-					position++
-					goto l513
 				l514:
-					position, tokenIndex = position513, tokenIndex513
-					if buffer[position] != rune('-') {
-						goto l511
-					}
-					position++
-				}
-			l513:
-				add(ruleOperator, position512)
-			}
-			return true
-		l511:
-			position, tokenIndex = position511, tokenIndex511
-			return false
-		},
-		/* 39 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
-		func() bool {
-			position515, tokenIndex515 := position, tokenIndex
-			{
-				position516 := position
-				{
-					position517, tokenIndex517 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l517
-					}
-					position++
-					goto l518
-				l517:
-					position, tokenIndex = position517, tokenIndex517
-				}
-			l518:
-				{
-					position519, tokenIndex519 := position, tokenIndex
-					if buffer[position] != rune('-') {
-						goto l519
-					}
-					position++
-					goto l520
-				l519:
-					position, tokenIndex = position519, tokenIndex519
-				}
-			l520:
-				{
-					position521, tokenIndex521 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l522
+					goto l496
+				l512:
+					position, tokenIndex = position496, tokenIndex496
+					if buffer[position] != rune('#') {
+						goto l521
 					}
 					position++
 					{
-						position523, tokenIndex523 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l524
+						position522, tokenIndex522 := position, tokenIndex
+						if buffer[position] != rune('~') {
+							goto l522
 						}
 						position++
 						goto l523
-					l524:
-						position, tokenIndex = position523, tokenIndex523
-						if buffer[position] != rune('B') {
-							goto l522
-						}
-						position++
+					l522:
+						position, tokenIndex = position522, tokenIndex522
 					}
 				l523:
-					{
-						position527, tokenIndex527 := position, tokenIndex
-						if buffer[position] != rune('0') {
-							goto l528
-						}
-						position++
-						goto l527
-					l528:
-						position, tokenIndex = position527, tokenIndex527
-						if buffer[position] != rune('1') {
-							goto l522
-						}
-						position++
+					if buffer[position] != rune('(') {
+						goto l521
 					}
-				l527:
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l521
+					}
+					position++
+					{
+						position524, tokenIndex524 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l524
+						}
+						goto l525
+					l524:
+						position, tokenIndex = position524, tokenIndex524
+					}
 				l525:
+					if buffer[position] != rune('<') {
+						goto l521
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l521
+					}
+					position++
 					{
 						position526, tokenIndex526 := position, tokenIndex
-						{
-							position529, tokenIndex529 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l530
-							}
-							position++
-							goto l529
-						l530:
-							position, tokenIndex = position529, tokenIndex529
-							if buffer[position] != rune('1') {
-								goto l526
-							}
-							position++
+						if !_rules[ruleWS]() {
+							goto l526
 						}
-					l529:
-						goto l525
+						goto l527
 					l526:
 						position, tokenIndex = position526, tokenIndex526
 					}
-					goto l521
-				l522:
-					position, tokenIndex = position521, tokenIndex521
-					if buffer[position] != rune('0') {
-						goto l531
+				l527:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l521
 					}
 					position++
+					if buffer[position] != rune(')') {
+						goto l521
+					}
+					position++
+					goto l496
+				l521:
+					position, tokenIndex = position496, tokenIndex496
+					if !_rules[ruleARMRegister]() {
+						goto l494
+					}
+				}
+			l496:
+				{
+					position528, tokenIndex528 := position, tokenIndex
 					{
-						position532, tokenIndex532 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l533
+						position529, tokenIndex529 := position, tokenIndex
+						if buffer[position] != rune('f') {
+							goto l530
 						}
 						position++
-						goto l532
-					l533:
-						position, tokenIndex = position532, tokenIndex532
-						if buffer[position] != rune('X') {
+						goto l529
+					l530:
+						position, tokenIndex = position529, tokenIndex529
+						if buffer[position] != rune('b') {
 							goto l531
 						}
 						position++
-					}
-				l532:
-					{
-						position536, tokenIndex536 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l537
+						goto l529
+					l531:
+						position, tokenIndex = position529, tokenIndex529
+						if buffer[position] != rune(':') {
+							goto l532
 						}
 						position++
-						goto l536
-					l537:
-						position, tokenIndex = position536, tokenIndex536
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l529
+					l532:
+						position, tokenIndex = position529, tokenIndex529
+						if buffer[position] != rune('(') {
+							goto l533
+						}
+						position++
+						goto l529
+					l533:
+						position, tokenIndex = position529, tokenIndex529
+						if buffer[position] != rune('+') {
+							goto l534
+						}
+						position++
+						goto l529
+					l534:
+						position, tokenIndex = position529, tokenIndex529
+						if buffer[position] != rune('-') {
+							goto l528
+						}
+						position++
+					}
+				l529:
+					goto l494
+				l528:
+					position, tokenIndex = position528, tokenIndex528
+				}
+				add(ruleRegisterOrConstant, position495)
+			}
+			return true
+		l494:
+			position, tokenIndex = position494, tokenIndex494
+			return false
+		},
+		/* 37 ARMConstantTweak <- <(((('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('s' / 'S') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('b' / 'B')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
+		func() bool {
+			position535, tokenIndex535 := position, tokenIndex
+			{
+				position536 := position
+				{
+					position537, tokenIndex537 := position, tokenIndex
+					{
+						position539, tokenIndex539 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l540
+						}
+						position++
+						goto l539
+					l540:
+						position, tokenIndex = position539, tokenIndex539
+						if buffer[position] != rune('L') {
 							goto l538
 						}
 						position++
-						goto l536
-					l538:
-						position, tokenIndex = position536, tokenIndex536
-						{
-							position539, tokenIndex539 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l540
-							}
-							position++
-							goto l539
-						l540:
-							position, tokenIndex = position539, tokenIndex539
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l531
-							}
-							position++
-						}
-					l539:
 					}
-				l536:
-				l534:
+				l539:
 					{
-						position535, tokenIndex535 := position, tokenIndex
-						{
-							position541, tokenIndex541 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l542
-							}
-							position++
-							goto l541
-						l542:
-							position, tokenIndex = position541, tokenIndex541
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l543
-							}
-							position++
-							goto l541
-						l543:
-							position, tokenIndex = position541, tokenIndex541
-							{
-								position544, tokenIndex544 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l545
-								}
-								position++
-								goto l544
-							l545:
-								position, tokenIndex = position544, tokenIndex544
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l535
-								}
-								position++
-							}
-						l544:
+						position541, tokenIndex541 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l542
 						}
-					l541:
-						goto l534
-					l535:
-						position, tokenIndex = position535, tokenIndex535
+						position++
+						goto l541
+					l542:
+						position, tokenIndex = position541, tokenIndex541
+						if buffer[position] != rune('S') {
+							goto l538
+						}
+						position++
 					}
-					goto l521
-				l531:
-					position, tokenIndex = position521, tokenIndex521
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l515
-					}
-					position++
-				l546:
+				l541:
 					{
-						position547, tokenIndex547 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						position543, tokenIndex543 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l544
+						}
+						position++
+						goto l543
+					l544:
+						position, tokenIndex = position543, tokenIndex543
+						if buffer[position] != rune('L') {
+							goto l538
+						}
+						position++
+					}
+				l543:
+					goto l537
+				l538:
+					position, tokenIndex = position537, tokenIndex537
+					{
+						position546, tokenIndex546 := position, tokenIndex
+						if buffer[position] != rune('s') {
 							goto l547
 						}
 						position++
 						goto l546
 					l547:
-						position, tokenIndex = position547, tokenIndex547
+						position, tokenIndex = position546, tokenIndex546
+						if buffer[position] != rune('S') {
+							goto l545
+						}
+						position++
 					}
-				}
-			l521:
-				add(ruleOffset, position516)
-			}
-			return true
-		l515:
-			position, tokenIndex = position515, tokenIndex515
-			return false
-		},
-		/* 40 Section <- <([a-z] / [A-Z] / '@')+> */
-		func() bool {
-			position548, tokenIndex548 := position, tokenIndex
-			{
-				position549 := position
-				{
-					position552, tokenIndex552 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l553
-					}
-					position++
-					goto l552
-				l553:
-					position, tokenIndex = position552, tokenIndex552
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l554
-					}
-					position++
-					goto l552
-				l554:
-					position, tokenIndex = position552, tokenIndex552
-					if buffer[position] != rune('@') {
+				l546:
+					{
+						position548, tokenIndex548 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l549
+						}
+						position++
 						goto l548
+					l549:
+						position, tokenIndex = position548, tokenIndex548
+						if buffer[position] != rune('X') {
+							goto l545
+						}
+						position++
 					}
-					position++
-				}
-			l552:
-			l550:
-				{
-					position551, tokenIndex551 := position, tokenIndex
+				l548:
+					{
+						position550, tokenIndex550 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l551
+						}
+						position++
+						goto l550
+					l551:
+						position, tokenIndex = position550, tokenIndex550
+						if buffer[position] != rune('T') {
+							goto l545
+						}
+						position++
+					}
+				l550:
+					{
+						position552, tokenIndex552 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l553
+						}
+						position++
+						goto l552
+					l553:
+						position, tokenIndex = position552, tokenIndex552
+						if buffer[position] != rune('W') {
+							goto l545
+						}
+						position++
+					}
+				l552:
+					goto l537
+				l545:
+					position, tokenIndex = position537, tokenIndex537
 					{
 						position555, tokenIndex555 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
+						if buffer[position] != rune('u') {
 							goto l556
 						}
 						position++
 						goto l555
 					l556:
 						position, tokenIndex = position555, tokenIndex555
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l557
-						}
-						position++
-						goto l555
-					l557:
-						position, tokenIndex = position555, tokenIndex555
-						if buffer[position] != rune('@') {
-							goto l551
+						if buffer[position] != rune('U') {
+							goto l554
 						}
 						position++
 					}
 				l555:
-					goto l550
-				l551:
-					position, tokenIndex = position551, tokenIndex551
+					{
+						position557, tokenIndex557 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l558
+						}
+						position++
+						goto l557
+					l558:
+						position, tokenIndex = position557, tokenIndex557
+						if buffer[position] != rune('X') {
+							goto l554
+						}
+						position++
+					}
+				l557:
+					{
+						position559, tokenIndex559 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l560
+						}
+						position++
+						goto l559
+					l560:
+						position, tokenIndex = position559, tokenIndex559
+						if buffer[position] != rune('T') {
+							goto l554
+						}
+						position++
+					}
+				l559:
+					{
+						position561, tokenIndex561 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l562
+						}
+						position++
+						goto l561
+					l562:
+						position, tokenIndex = position561, tokenIndex561
+						if buffer[position] != rune('W') {
+							goto l554
+						}
+						position++
+					}
+				l561:
+					goto l537
+				l554:
+					position, tokenIndex = position537, tokenIndex537
+					{
+						position564, tokenIndex564 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l565
+						}
+						position++
+						goto l564
+					l565:
+						position, tokenIndex = position564, tokenIndex564
+						if buffer[position] != rune('U') {
+							goto l563
+						}
+						position++
+					}
+				l564:
+					{
+						position566, tokenIndex566 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l567
+						}
+						position++
+						goto l566
+					l567:
+						position, tokenIndex = position566, tokenIndex566
+						if buffer[position] != rune('X') {
+							goto l563
+						}
+						position++
+					}
+				l566:
+					{
+						position568, tokenIndex568 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l569
+						}
+						position++
+						goto l568
+					l569:
+						position, tokenIndex = position568, tokenIndex568
+						if buffer[position] != rune('T') {
+							goto l563
+						}
+						position++
+					}
+				l568:
+					{
+						position570, tokenIndex570 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l571
+						}
+						position++
+						goto l570
+					l571:
+						position, tokenIndex = position570, tokenIndex570
+						if buffer[position] != rune('B') {
+							goto l563
+						}
+						position++
+					}
+				l570:
+					goto l537
+				l563:
+					position, tokenIndex = position537, tokenIndex537
+					{
+						position573, tokenIndex573 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l574
+						}
+						position++
+						goto l573
+					l574:
+						position, tokenIndex = position573, tokenIndex573
+						if buffer[position] != rune('L') {
+							goto l572
+						}
+						position++
+					}
+				l573:
+					{
+						position575, tokenIndex575 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l576
+						}
+						position++
+						goto l575
+					l576:
+						position, tokenIndex = position575, tokenIndex575
+						if buffer[position] != rune('S') {
+							goto l572
+						}
+						position++
+					}
+				l575:
+					{
+						position577, tokenIndex577 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l578
+						}
+						position++
+						goto l577
+					l578:
+						position, tokenIndex = position577, tokenIndex577
+						if buffer[position] != rune('R') {
+							goto l572
+						}
+						position++
+					}
+				l577:
+					goto l537
+				l572:
+					position, tokenIndex = position537, tokenIndex537
+					{
+						position580, tokenIndex580 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l581
+						}
+						position++
+						goto l580
+					l581:
+						position, tokenIndex = position580, tokenIndex580
+						if buffer[position] != rune('R') {
+							goto l579
+						}
+						position++
+					}
+				l580:
+					{
+						position582, tokenIndex582 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l583
+						}
+						position++
+						goto l582
+					l583:
+						position, tokenIndex = position582, tokenIndex582
+						if buffer[position] != rune('O') {
+							goto l579
+						}
+						position++
+					}
+				l582:
+					{
+						position584, tokenIndex584 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l585
+						}
+						position++
+						goto l584
+					l585:
+						position, tokenIndex = position584, tokenIndex584
+						if buffer[position] != rune('R') {
+							goto l579
+						}
+						position++
+					}
+				l584:
+					goto l537
+				l579:
+					position, tokenIndex = position537, tokenIndex537
+					{
+						position586, tokenIndex586 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l587
+						}
+						position++
+						goto l586
+					l587:
+						position, tokenIndex = position586, tokenIndex586
+						if buffer[position] != rune('A') {
+							goto l535
+						}
+						position++
+					}
+				l586:
+					{
+						position588, tokenIndex588 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l589
+						}
+						position++
+						goto l588
+					l589:
+						position, tokenIndex = position588, tokenIndex588
+						if buffer[position] != rune('S') {
+							goto l535
+						}
+						position++
+					}
+				l588:
+					{
+						position590, tokenIndex590 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l591
+						}
+						position++
+						goto l590
+					l591:
+						position, tokenIndex = position590, tokenIndex590
+						if buffer[position] != rune('R') {
+							goto l535
+						}
+						position++
+					}
+				l590:
 				}
-				add(ruleSection, position549)
+			l537:
+				{
+					position592, tokenIndex592 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l592
+					}
+					if buffer[position] != rune('#') {
+						goto l592
+					}
+					position++
+					if !_rules[ruleOffset]() {
+						goto l592
+					}
+					goto l593
+				l592:
+					position, tokenIndex = position592, tokenIndex592
+				}
+			l593:
+				add(ruleARMConstantTweak, position536)
 			}
 			return true
-		l548:
-			position, tokenIndex = position548, tokenIndex548
+		l535:
+			position, tokenIndex = position535, tokenIndex535
 			return false
 		},
-		/* 41 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		/* 38 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] ']')?))> */
 		func() bool {
-			position558, tokenIndex558 := position, tokenIndex
+			position594, tokenIndex594 := position, tokenIndex
 			{
-				position559 := position
-				if buffer[position] != rune('%') {
-					goto l558
+				position595 := position
+				{
+					position596, tokenIndex596 := position, tokenIndex
+					{
+						position598, tokenIndex598 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l599
+						}
+						position++
+						goto l598
+					l599:
+						position, tokenIndex = position598, tokenIndex598
+						if buffer[position] != rune('S') {
+							goto l597
+						}
+						position++
+					}
+				l598:
+					{
+						position600, tokenIndex600 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l601
+						}
+						position++
+						goto l600
+					l601:
+						position, tokenIndex = position600, tokenIndex600
+						if buffer[position] != rune('P') {
+							goto l597
+						}
+						position++
+					}
+				l600:
+					goto l596
+				l597:
+					position, tokenIndex = position596, tokenIndex596
+					{
+						position603, tokenIndex603 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l604
+						}
+						position++
+						goto l603
+					l604:
+						position, tokenIndex = position603, tokenIndex603
+						if buffer[position] != rune('w') {
+							goto l605
+						}
+						position++
+						goto l603
+					l605:
+						position, tokenIndex = position603, tokenIndex603
+						if buffer[position] != rune('d') {
+							goto l606
+						}
+						position++
+						goto l603
+					l606:
+						position, tokenIndex = position603, tokenIndex603
+						if buffer[position] != rune('q') {
+							goto l607
+						}
+						position++
+						goto l603
+					l607:
+						position, tokenIndex = position603, tokenIndex603
+						if buffer[position] != rune('s') {
+							goto l602
+						}
+						position++
+					}
+				l603:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l602
+					}
+					position++
+					{
+						position608, tokenIndex608 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l608
+						}
+						position++
+						goto l609
+					l608:
+						position, tokenIndex = position608, tokenIndex608
+					}
+				l609:
+					goto l596
+				l602:
+					position, tokenIndex = position596, tokenIndex596
+					{
+						position611, tokenIndex611 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l612
+						}
+						position++
+						goto l611
+					l612:
+						position, tokenIndex = position611, tokenIndex611
+						if buffer[position] != rune('X') {
+							goto l610
+						}
+						position++
+					}
+				l611:
+					{
+						position613, tokenIndex613 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l614
+						}
+						position++
+						goto l613
+					l614:
+						position, tokenIndex = position613, tokenIndex613
+						if buffer[position] != rune('Z') {
+							goto l610
+						}
+						position++
+					}
+				l613:
+					{
+						position615, tokenIndex615 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l616
+						}
+						position++
+						goto l615
+					l616:
+						position, tokenIndex = position615, tokenIndex615
+						if buffer[position] != rune('R') {
+							goto l610
+						}
+						position++
+					}
+				l615:
+					goto l596
+				l610:
+					position, tokenIndex = position596, tokenIndex596
+					{
+						position618, tokenIndex618 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l619
+						}
+						position++
+						goto l618
+					l619:
+						position, tokenIndex = position618, tokenIndex618
+						if buffer[position] != rune('W') {
+							goto l617
+						}
+						position++
+					}
+				l618:
+					{
+						position620, tokenIndex620 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l621
+						}
+						position++
+						goto l620
+					l621:
+						position, tokenIndex = position620, tokenIndex620
+						if buffer[position] != rune('Z') {
+							goto l617
+						}
+						position++
+					}
+				l620:
+					{
+						position622, tokenIndex622 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l623
+						}
+						position++
+						goto l622
+					l623:
+						position, tokenIndex = position622, tokenIndex622
+						if buffer[position] != rune('R') {
+							goto l617
+						}
+						position++
+					}
+				l622:
+					goto l596
+				l617:
+					position, tokenIndex = position596, tokenIndex596
+					if !_rules[ruleARMVectorRegister]() {
+						goto l624
+					}
+					goto l596
+				l624:
+					position, tokenIndex = position596, tokenIndex596
+					if buffer[position] != rune('{') {
+						goto l594
+					}
+					position++
+					{
+						position625, tokenIndex625 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l625
+						}
+						goto l626
+					l625:
+						position, tokenIndex = position625, tokenIndex625
+					}
+				l626:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l594
+					}
+				l627:
+					{
+						position628, tokenIndex628 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l628
+						}
+						position++
+						{
+							position629, tokenIndex629 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l629
+							}
+							goto l630
+						l629:
+							position, tokenIndex = position629, tokenIndex629
+						}
+					l630:
+						if !_rules[ruleARMVectorRegister]() {
+							goto l628
+						}
+						goto l627
+					l628:
+						position, tokenIndex = position628, tokenIndex628
+					}
+					{
+						position631, tokenIndex631 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l631
+						}
+						goto l632
+					l631:
+						position, tokenIndex = position631, tokenIndex631
+					}
+				l632:
+					if buffer[position] != rune('}') {
+						goto l594
+					}
+					position++
+					{
+						position633, tokenIndex633 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l633
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l633
+						}
+						position++
+						if buffer[position] != rune(']') {
+							goto l633
+						}
+						position++
+						goto l634
+					l633:
+						position, tokenIndex = position633, tokenIndex633
+					}
+				l634:
+				}
+			l596:
+				add(ruleARMRegister, position595)
+			}
+			return true
+		l594:
+			position, tokenIndex = position594, tokenIndex594
+			return false
+		},
+		/* 39 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
+		func() bool {
+			position635, tokenIndex635 := position, tokenIndex
+			{
+				position636 := position
+				{
+					position637, tokenIndex637 := position, tokenIndex
+					if buffer[position] != rune('v') {
+						goto l638
+					}
+					position++
+					goto l637
+				l638:
+					position, tokenIndex = position637, tokenIndex637
+					if buffer[position] != rune('V') {
+						goto l635
+					}
+					position++
+				}
+			l637:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l635
 				}
 				position++
 				{
-					position560, tokenIndex560 := position, tokenIndex
-					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l561
+					position639, tokenIndex639 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l639
 					}
 					position++
-					goto l560
-				l561:
-					position, tokenIndex = position560, tokenIndex560
-					if buffer[position] != rune('s') {
-						goto l558
+					goto l640
+				l639:
+					position, tokenIndex = position639, tokenIndex639
+				}
+			l640:
+				{
+					position641, tokenIndex641 := position, tokenIndex
+					if buffer[position] != rune('.') {
+						goto l641
+					}
+					position++
+				l643:
+					{
+						position644, tokenIndex644 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l644
+						}
+						position++
+						goto l643
+					l644:
+						position, tokenIndex = position644, tokenIndex644
+					}
+					{
+						position645, tokenIndex645 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l646
+						}
+						position++
+						goto l645
+					l646:
+						position, tokenIndex = position645, tokenIndex645
+						if buffer[position] != rune('s') {
+							goto l647
+						}
+						position++
+						goto l645
+					l647:
+						position, tokenIndex = position645, tokenIndex645
+						if buffer[position] != rune('d') {
+							goto l648
+						}
+						position++
+						goto l645
+					l648:
+						position, tokenIndex = position645, tokenIndex645
+						if buffer[position] != rune('h') {
+							goto l649
+						}
+						position++
+						goto l645
+					l649:
+						position, tokenIndex = position645, tokenIndex645
+						if buffer[position] != rune('q') {
+							goto l641
+						}
+						position++
+					}
+				l645:
+					{
+						position650, tokenIndex650 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l650
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l650
+						}
+						position++
+						{
+							position652, tokenIndex652 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l652
+							}
+							position++
+							goto l653
+						l652:
+							position, tokenIndex = position652, tokenIndex652
+						}
+					l653:
+						if buffer[position] != rune(']') {
+							goto l650
+						}
+						position++
+						goto l651
+					l650:
+						position, tokenIndex = position650, tokenIndex650
+					}
+				l651:
+					goto l642
+				l641:
+					position, tokenIndex = position641, tokenIndex641
+				}
+			l642:
+				add(ruleARMVectorRegister, position636)
+			}
+			return true
+		l635:
+			position, tokenIndex = position635, tokenIndex635
+			return false
+		},
+		/* 40 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
+		func() bool {
+			position654, tokenIndex654 := position, tokenIndex
+			{
+				position655 := position
+				{
+					position656, tokenIndex656 := position, tokenIndex
+					if !_rules[ruleSymbolRef]() {
+						goto l657
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l657
+					}
+					goto l656
+				l657:
+					position, tokenIndex = position656, tokenIndex656
+					if !_rules[ruleSymbolRef]() {
+						goto l658
+					}
+					goto l656
+				l658:
+					position, tokenIndex = position656, tokenIndex656
+					if !_rules[ruleLow12BitsSymbolRef]() {
+						goto l659
+					}
+					goto l656
+				l659:
+					position, tokenIndex = position656, tokenIndex656
+				l661:
+					{
+						position662, tokenIndex662 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l662
+						}
+						goto l661
+					l662:
+						position, tokenIndex = position662, tokenIndex662
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l660
+					}
+					goto l656
+				l660:
+					position, tokenIndex = position656, tokenIndex656
+					if !_rules[ruleSegmentRegister]() {
+						goto l663
+					}
+					if !_rules[ruleOffset]() {
+						goto l663
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l663
+					}
+					goto l656
+				l663:
+					position, tokenIndex = position656, tokenIndex656
+					if !_rules[ruleSegmentRegister]() {
+						goto l664
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l664
+					}
+					goto l656
+				l664:
+					position, tokenIndex = position656, tokenIndex656
+					if !_rules[ruleSegmentRegister]() {
+						goto l665
+					}
+					if !_rules[ruleOffset]() {
+						goto l665
+					}
+					goto l656
+				l665:
+					position, tokenIndex = position656, tokenIndex656
+					if !_rules[ruleARMBaseIndexScale]() {
+						goto l666
+					}
+					goto l656
+				l666:
+					position, tokenIndex = position656, tokenIndex656
+					if !_rules[ruleBaseIndexScale]() {
+						goto l654
+					}
+				}
+			l656:
+				add(ruleMemoryRef, position655)
+			}
+			return true
+		l654:
+			position, tokenIndex = position654, tokenIndex654
+			return false
+		},
+		/* 41 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
+		func() bool {
+			position667, tokenIndex667 := position, tokenIndex
+			{
+				position668 := position
+				{
+					position669, tokenIndex669 := position, tokenIndex
+				l671:
+					{
+						position672, tokenIndex672 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l672
+						}
+						goto l671
+					l672:
+						position, tokenIndex = position672, tokenIndex672
+					}
+					if buffer[position] != rune('+') {
+						goto l669
+					}
+					position++
+					goto l670
+				l669:
+					position, tokenIndex = position669, tokenIndex669
+				}
+			l670:
+				{
+					position673, tokenIndex673 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l674
+					}
+					goto l673
+				l674:
+					position, tokenIndex = position673, tokenIndex673
+					if !_rules[ruleSymbolName]() {
+						goto l667
+					}
+				}
+			l673:
+			l675:
+				{
+					position676, tokenIndex676 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l676
+					}
+					goto l675
+				l676:
+					position, tokenIndex = position676, tokenIndex676
+				}
+				{
+					position677, tokenIndex677 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l677
+					}
+					position++
+					if !_rules[ruleSection]() {
+						goto l677
+					}
+				l679:
+					{
+						position680, tokenIndex680 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l680
+						}
+						goto l679
+					l680:
+						position, tokenIndex = position680, tokenIndex680
+					}
+					goto l678
+				l677:
+					position, tokenIndex = position677, tokenIndex677
+				}
+			l678:
+				add(ruleSymbolRef, position668)
+			}
+			return true
+		l667:
+			position, tokenIndex = position667, tokenIndex667
+			return false
+		},
+		/* 42 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		func() bool {
+			position681, tokenIndex681 := position, tokenIndex
+			{
+				position682 := position
+				if buffer[position] != rune(':') {
+					goto l681
+				}
+				position++
+				{
+					position683, tokenIndex683 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l684
+					}
+					position++
+					goto l683
+				l684:
+					position, tokenIndex = position683, tokenIndex683
+					if buffer[position] != rune('L') {
+						goto l681
 					}
 					position++
 				}
-			l560:
-				if buffer[position] != rune('s') {
-					goto l558
+			l683:
+				{
+					position685, tokenIndex685 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l686
+					}
+					position++
+					goto l685
+				l686:
+					position, tokenIndex = position685, tokenIndex685
+					if buffer[position] != rune('O') {
+						goto l681
+					}
+					position++
+				}
+			l685:
+				if buffer[position] != rune('1') {
+					goto l681
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l681
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l558
+					goto l681
 				}
 				position++
-				add(ruleSegmentRegister, position559)
+				{
+					position687, tokenIndex687 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l688
+					}
+					goto l687
+				l688:
+					position, tokenIndex = position687, tokenIndex687
+					if !_rules[ruleSymbolName]() {
+						goto l681
+					}
+				}
+			l687:
+				{
+					position689, tokenIndex689 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l689
+					}
+					goto l690
+				l689:
+					position, tokenIndex = position689, tokenIndex689
+				}
+			l690:
+				add(ruleLow12BitsSymbolRef, position682)
 			}
 			return true
-		l558:
-			position, tokenIndex = position558, tokenIndex558
+		l681:
+			position, tokenIndex = position681, tokenIndex681
+			return false
+		},
+		/* 43 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset ('*' [0-9]+)?) / ARMGOTLow12 / ARMCapReference / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		func() bool {
+			position691, tokenIndex691 := position, tokenIndex
+			{
+				position692 := position
+				if buffer[position] != rune('[') {
+					goto l691
+				}
+				position++
+				if !_rules[ruleARMRegister]() {
+					goto l691
+				}
+				{
+					position693, tokenIndex693 := position, tokenIndex
+					if buffer[position] != rune(',') {
+						goto l693
+					}
+					position++
+					{
+						position695, tokenIndex695 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l695
+						}
+						goto l696
+					l695:
+						position, tokenIndex = position695, tokenIndex695
+					}
+				l696:
+					{
+						position697, tokenIndex697 := position, tokenIndex
+						if buffer[position] != rune('#') {
+							goto l698
+						}
+						position++
+						if !_rules[ruleOffset]() {
+							goto l698
+						}
+						{
+							position699, tokenIndex699 := position, tokenIndex
+							if buffer[position] != rune('*') {
+								goto l699
+							}
+							position++
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l699
+							}
+							position++
+						l701:
+							{
+								position702, tokenIndex702 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l702
+								}
+								position++
+								goto l701
+							l702:
+								position, tokenIndex = position702, tokenIndex702
+							}
+							goto l700
+						l699:
+							position, tokenIndex = position699, tokenIndex699
+						}
+					l700:
+						goto l697
+					l698:
+						position, tokenIndex = position697, tokenIndex697
+						if !_rules[ruleARMGOTLow12]() {
+							goto l703
+						}
+						goto l697
+					l703:
+						position, tokenIndex = position697, tokenIndex697
+						if !_rules[ruleARMCapReference]() {
+							goto l704
+						}
+						goto l697
+					l704:
+						position, tokenIndex = position697, tokenIndex697
+						if !_rules[ruleLow12BitsSymbolRef]() {
+							goto l705
+						}
+						goto l697
+					l705:
+						position, tokenIndex = position697, tokenIndex697
+						if !_rules[ruleARMRegister]() {
+							goto l693
+						}
+					}
+				l697:
+					{
+						position706, tokenIndex706 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l706
+						}
+						position++
+						{
+							position708, tokenIndex708 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l708
+							}
+							goto l709
+						l708:
+							position, tokenIndex = position708, tokenIndex708
+						}
+					l709:
+						if !_rules[ruleARMConstantTweak]() {
+							goto l706
+						}
+						goto l707
+					l706:
+						position, tokenIndex = position706, tokenIndex706
+					}
+				l707:
+					goto l694
+				l693:
+					position, tokenIndex = position693, tokenIndex693
+				}
+			l694:
+				if buffer[position] != rune(']') {
+					goto l691
+				}
+				position++
+				{
+					position710, tokenIndex710 := position, tokenIndex
+					if !_rules[ruleARMPostincrement]() {
+						goto l710
+					}
+					goto l711
+				l710:
+					position, tokenIndex = position710, tokenIndex710
+				}
+			l711:
+				add(ruleARMBaseIndexScale, position692)
+			}
+			return true
+		l691:
+			position, tokenIndex = position691, tokenIndex691
+			return false
+		},
+		/* 44 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		func() bool {
+			position712, tokenIndex712 := position, tokenIndex
+			{
+				position713 := position
+				if buffer[position] != rune(':') {
+					goto l712
+				}
+				position++
+				{
+					position714, tokenIndex714 := position, tokenIndex
+					if buffer[position] != rune('g') {
+						goto l715
+					}
+					position++
+					goto l714
+				l715:
+					position, tokenIndex = position714, tokenIndex714
+					if buffer[position] != rune('G') {
+						goto l712
+					}
+					position++
+				}
+			l714:
+				{
+					position716, tokenIndex716 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l717
+					}
+					position++
+					goto l716
+				l717:
+					position, tokenIndex = position716, tokenIndex716
+					if buffer[position] != rune('O') {
+						goto l712
+					}
+					position++
+				}
+			l716:
+				{
+					position718, tokenIndex718 := position, tokenIndex
+					if buffer[position] != rune('t') {
+						goto l719
+					}
+					position++
+					goto l718
+				l719:
+					position, tokenIndex = position718, tokenIndex718
+					if buffer[position] != rune('T') {
+						goto l712
+					}
+					position++
+				}
+			l718:
+				if buffer[position] != rune('_') {
+					goto l712
+				}
+				position++
+				{
+					position720, tokenIndex720 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l721
+					}
+					position++
+					goto l720
+				l721:
+					position, tokenIndex = position720, tokenIndex720
+					if buffer[position] != rune('L') {
+						goto l712
+					}
+					position++
+				}
+			l720:
+				{
+					position722, tokenIndex722 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l723
+					}
+					position++
+					goto l722
+				l723:
+					position, tokenIndex = position722, tokenIndex722
+					if buffer[position] != rune('O') {
+						goto l712
+					}
+					position++
+				}
+			l722:
+				if buffer[position] != rune('1') {
+					goto l712
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l712
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l712
+				}
+				position++
+				if !_rules[ruleSymbolName]() {
+					goto l712
+				}
+				add(ruleARMGOTLow12, position713)
+			}
+			return true
+		l712:
+			position, tokenIndex = position712, tokenIndex712
+			return false
+		},
+		/* 45 ARMCapReference <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' ('o' / 'O') ('p' / 'P') ('e' / 'E') ('n' / 'N') ('s' / 'S') ('s' / 'S') ('l' / 'L') '_' ('a' / 'A') ('r' / 'R') ('m' / 'M') ('c' / 'C') ('a' / 'A') ('p' / 'P') '_' ('p' / 'P'))> */
+		func() bool {
+			position724, tokenIndex724 := position, tokenIndex
+			{
+				position725 := position
+				if buffer[position] != rune(':') {
+					goto l724
+				}
+				position++
+				{
+					position726, tokenIndex726 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l727
+					}
+					position++
+					goto l726
+				l727:
+					position, tokenIndex = position726, tokenIndex726
+					if buffer[position] != rune('L') {
+						goto l724
+					}
+					position++
+				}
+			l726:
+				{
+					position728, tokenIndex728 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l729
+					}
+					position++
+					goto l728
+				l729:
+					position, tokenIndex = position728, tokenIndex728
+					if buffer[position] != rune('O') {
+						goto l724
+					}
+					position++
+				}
+			l728:
+				if buffer[position] != rune('1') {
+					goto l724
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l724
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l724
+				}
+				position++
+				{
+					position730, tokenIndex730 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l731
+					}
+					position++
+					goto l730
+				l731:
+					position, tokenIndex = position730, tokenIndex730
+					if buffer[position] != rune('O') {
+						goto l724
+					}
+					position++
+				}
+			l730:
+				{
+					position732, tokenIndex732 := position, tokenIndex
+					if buffer[position] != rune('p') {
+						goto l733
+					}
+					position++
+					goto l732
+				l733:
+					position, tokenIndex = position732, tokenIndex732
+					if buffer[position] != rune('P') {
+						goto l724
+					}
+					position++
+				}
+			l732:
+				{
+					position734, tokenIndex734 := position, tokenIndex
+					if buffer[position] != rune('e') {
+						goto l735
+					}
+					position++
+					goto l734
+				l735:
+					position, tokenIndex = position734, tokenIndex734
+					if buffer[position] != rune('E') {
+						goto l724
+					}
+					position++
+				}
+			l734:
+				{
+					position736, tokenIndex736 := position, tokenIndex
+					if buffer[position] != rune('n') {
+						goto l737
+					}
+					position++
+					goto l736
+				l737:
+					position, tokenIndex = position736, tokenIndex736
+					if buffer[position] != rune('N') {
+						goto l724
+					}
+					position++
+				}
+			l736:
+				{
+					position738, tokenIndex738 := position, tokenIndex
+					if buffer[position] != rune('s') {
+						goto l739
+					}
+					position++
+					goto l738
+				l739:
+					position, tokenIndex = position738, tokenIndex738
+					if buffer[position] != rune('S') {
+						goto l724
+					}
+					position++
+				}
+			l738:
+				{
+					position740, tokenIndex740 := position, tokenIndex
+					if buffer[position] != rune('s') {
+						goto l741
+					}
+					position++
+					goto l740
+				l741:
+					position, tokenIndex = position740, tokenIndex740
+					if buffer[position] != rune('S') {
+						goto l724
+					}
+					position++
+				}
+			l740:
+				{
+					position742, tokenIndex742 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l743
+					}
+					position++
+					goto l742
+				l743:
+					position, tokenIndex = position742, tokenIndex742
+					if buffer[position] != rune('L') {
+						goto l724
+					}
+					position++
+				}
+			l742:
+				if buffer[position] != rune('_') {
+					goto l724
+				}
+				position++
+				{
+					position744, tokenIndex744 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l745
+					}
+					position++
+					goto l744
+				l745:
+					position, tokenIndex = position744, tokenIndex744
+					if buffer[position] != rune('A') {
+						goto l724
+					}
+					position++
+				}
+			l744:
+				{
+					position746, tokenIndex746 := position, tokenIndex
+					if buffer[position] != rune('r') {
+						goto l747
+					}
+					position++
+					goto l746
+				l747:
+					position, tokenIndex = position746, tokenIndex746
+					if buffer[position] != rune('R') {
+						goto l724
+					}
+					position++
+				}
+			l746:
+				{
+					position748, tokenIndex748 := position, tokenIndex
+					if buffer[position] != rune('m') {
+						goto l749
+					}
+					position++
+					goto l748
+				l749:
+					position, tokenIndex = position748, tokenIndex748
+					if buffer[position] != rune('M') {
+						goto l724
+					}
+					position++
+				}
+			l748:
+				{
+					position750, tokenIndex750 := position, tokenIndex
+					if buffer[position] != rune('c') {
+						goto l751
+					}
+					position++
+					goto l750
+				l751:
+					position, tokenIndex = position750, tokenIndex750
+					if buffer[position] != rune('C') {
+						goto l724
+					}
+					position++
+				}
+			l750:
+				{
+					position752, tokenIndex752 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l753
+					}
+					position++
+					goto l752
+				l753:
+					position, tokenIndex = position752, tokenIndex752
+					if buffer[position] != rune('A') {
+						goto l724
+					}
+					position++
+				}
+			l752:
+				{
+					position754, tokenIndex754 := position, tokenIndex
+					if buffer[position] != rune('p') {
+						goto l755
+					}
+					position++
+					goto l754
+				l755:
+					position, tokenIndex = position754, tokenIndex754
+					if buffer[position] != rune('P') {
+						goto l724
+					}
+					position++
+				}
+			l754:
+				if buffer[position] != rune('_') {
+					goto l724
+				}
+				position++
+				{
+					position756, tokenIndex756 := position, tokenIndex
+					if buffer[position] != rune('p') {
+						goto l757
+					}
+					position++
+					goto l756
+				l757:
+					position, tokenIndex = position756, tokenIndex756
+					if buffer[position] != rune('P') {
+						goto l724
+					}
+					position++
+				}
+			l756:
+				add(ruleARMCapReference, position725)
+			}
+			return true
+		l724:
+			position, tokenIndex = position724, tokenIndex724
+			return false
+		},
+		/* 46 ARMPostincrement <- <'!'> */
+		func() bool {
+			position758, tokenIndex758 := position, tokenIndex
+			{
+				position759 := position
+				if buffer[position] != rune('!') {
+					goto l758
+				}
+				position++
+				add(ruleARMPostincrement, position759)
+			}
+			return true
+		l758:
+			position, tokenIndex = position758, tokenIndex758
+			return false
+		},
+		/* 47 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		func() bool {
+			position760, tokenIndex760 := position, tokenIndex
+			{
+				position761 := position
+				if buffer[position] != rune('(') {
+					goto l760
+				}
+				position++
+				{
+					position762, tokenIndex762 := position, tokenIndex
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l762
+					}
+					goto l763
+				l762:
+					position, tokenIndex = position762, tokenIndex762
+				}
+			l763:
+				{
+					position764, tokenIndex764 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l764
+					}
+					goto l765
+				l764:
+					position, tokenIndex = position764, tokenIndex764
+				}
+			l765:
+				{
+					position766, tokenIndex766 := position, tokenIndex
+					if buffer[position] != rune(',') {
+						goto l766
+					}
+					position++
+					{
+						position768, tokenIndex768 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l768
+						}
+						goto l769
+					l768:
+						position, tokenIndex = position768, tokenIndex768
+					}
+				l769:
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l766
+					}
+					{
+						position770, tokenIndex770 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l770
+						}
+						goto l771
+					l770:
+						position, tokenIndex = position770, tokenIndex770
+					}
+				l771:
+					{
+						position772, tokenIndex772 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l772
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l772
+						}
+						position++
+					l774:
+						{
+							position775, tokenIndex775 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l775
+							}
+							position++
+							goto l774
+						l775:
+							position, tokenIndex = position775, tokenIndex775
+						}
+						goto l773
+					l772:
+						position, tokenIndex = position772, tokenIndex772
+					}
+				l773:
+					goto l767
+				l766:
+					position, tokenIndex = position766, tokenIndex766
+				}
+			l767:
+				if buffer[position] != rune(')') {
+					goto l760
+				}
+				position++
+				add(ruleBaseIndexScale, position761)
+			}
+			return true
+		l760:
+			position, tokenIndex = position760, tokenIndex760
+			return false
+		},
+		/* 48 Operator <- <('+' / '-')> */
+		func() bool {
+			position776, tokenIndex776 := position, tokenIndex
+			{
+				position777 := position
+				{
+					position778, tokenIndex778 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l779
+					}
+					position++
+					goto l778
+				l779:
+					position, tokenIndex = position778, tokenIndex778
+					if buffer[position] != rune('-') {
+						goto l776
+					}
+					position++
+				}
+			l778:
+				add(ruleOperator, position777)
+			}
+			return true
+		l776:
+			position, tokenIndex = position776, tokenIndex776
+			return false
+		},
+		/* 49 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position780, tokenIndex780 := position, tokenIndex
+			{
+				position781 := position
+				{
+					position782, tokenIndex782 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l782
+					}
+					position++
+					goto l783
+				l782:
+					position, tokenIndex = position782, tokenIndex782
+				}
+			l783:
+				{
+					position784, tokenIndex784 := position, tokenIndex
+					if buffer[position] != rune('-') {
+						goto l784
+					}
+					position++
+					goto l785
+				l784:
+					position, tokenIndex = position784, tokenIndex784
+				}
+			l785:
+				{
+					position786, tokenIndex786 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l787
+					}
+					position++
+					{
+						position788, tokenIndex788 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l789
+						}
+						position++
+						goto l788
+					l789:
+						position, tokenIndex = position788, tokenIndex788
+						if buffer[position] != rune('B') {
+							goto l787
+						}
+						position++
+					}
+				l788:
+					{
+						position792, tokenIndex792 := position, tokenIndex
+						if buffer[position] != rune('0') {
+							goto l793
+						}
+						position++
+						goto l792
+					l793:
+						position, tokenIndex = position792, tokenIndex792
+						if buffer[position] != rune('1') {
+							goto l787
+						}
+						position++
+					}
+				l792:
+				l790:
+					{
+						position791, tokenIndex791 := position, tokenIndex
+						{
+							position794, tokenIndex794 := position, tokenIndex
+							if buffer[position] != rune('0') {
+								goto l795
+							}
+							position++
+							goto l794
+						l795:
+							position, tokenIndex = position794, tokenIndex794
+							if buffer[position] != rune('1') {
+								goto l791
+							}
+							position++
+						}
+					l794:
+						goto l790
+					l791:
+						position, tokenIndex = position791, tokenIndex791
+					}
+					goto l786
+				l787:
+					position, tokenIndex = position786, tokenIndex786
+					if buffer[position] != rune('0') {
+						goto l796
+					}
+					position++
+					{
+						position797, tokenIndex797 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l798
+						}
+						position++
+						goto l797
+					l798:
+						position, tokenIndex = position797, tokenIndex797
+						if buffer[position] != rune('X') {
+							goto l796
+						}
+						position++
+					}
+				l797:
+					{
+						position801, tokenIndex801 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l802
+						}
+						position++
+						goto l801
+					l802:
+						position, tokenIndex = position801, tokenIndex801
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l803
+						}
+						position++
+						goto l801
+					l803:
+						position, tokenIndex = position801, tokenIndex801
+						{
+							position804, tokenIndex804 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('f') {
+								goto l805
+							}
+							position++
+							goto l804
+						l805:
+							position, tokenIndex = position804, tokenIndex804
+							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l796
+							}
+							position++
+						}
+					l804:
+					}
+				l801:
+				l799:
+					{
+						position800, tokenIndex800 := position, tokenIndex
+						{
+							position806, tokenIndex806 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l807
+							}
+							position++
+							goto l806
+						l807:
+							position, tokenIndex = position806, tokenIndex806
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l808
+							}
+							position++
+							goto l806
+						l808:
+							position, tokenIndex = position806, tokenIndex806
+							{
+								position809, tokenIndex809 := position, tokenIndex
+								if c := buffer[position]; c < rune('a') || c > rune('f') {
+									goto l810
+								}
+								position++
+								goto l809
+							l810:
+								position, tokenIndex = position809, tokenIndex809
+								if c := buffer[position]; c < rune('A') || c > rune('F') {
+									goto l800
+								}
+								position++
+							}
+						l809:
+						}
+					l806:
+						goto l799
+					l800:
+						position, tokenIndex = position800, tokenIndex800
+					}
+					goto l786
+				l796:
+					position, tokenIndex = position786, tokenIndex786
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l780
+					}
+					position++
+				l811:
+					{
+						position812, tokenIndex812 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l812
+						}
+						position++
+						goto l811
+					l812:
+						position, tokenIndex = position812, tokenIndex812
+					}
+				}
+			l786:
+				add(ruleOffset, position781)
+			}
+			return true
+		l780:
+			position, tokenIndex = position780, tokenIndex780
+			return false
+		},
+		/* 50 Section <- <([a-z] / [A-Z] / '@')+> */
+		func() bool {
+			position813, tokenIndex813 := position, tokenIndex
+			{
+				position814 := position
+				{
+					position817, tokenIndex817 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l818
+					}
+					position++
+					goto l817
+				l818:
+					position, tokenIndex = position817, tokenIndex817
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l819
+					}
+					position++
+					goto l817
+				l819:
+					position, tokenIndex = position817, tokenIndex817
+					if buffer[position] != rune('@') {
+						goto l813
+					}
+					position++
+				}
+			l817:
+			l815:
+				{
+					position816, tokenIndex816 := position, tokenIndex
+					{
+						position820, tokenIndex820 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l821
+						}
+						position++
+						goto l820
+					l821:
+						position, tokenIndex = position820, tokenIndex820
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l822
+						}
+						position++
+						goto l820
+					l822:
+						position, tokenIndex = position820, tokenIndex820
+						if buffer[position] != rune('@') {
+							goto l816
+						}
+						position++
+					}
+				l820:
+					goto l815
+				l816:
+					position, tokenIndex = position816, tokenIndex816
+				}
+				add(ruleSection, position814)
+			}
+			return true
+		l813:
+			position, tokenIndex = position813, tokenIndex813
+			return false
+		},
+		/* 51 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		func() bool {
+			position823, tokenIndex823 := position, tokenIndex
+			{
+				position824 := position
+				if buffer[position] != rune('%') {
+					goto l823
+				}
+				position++
+				{
+					position825, tokenIndex825 := position, tokenIndex
+					if c := buffer[position]; c < rune('c') || c > rune('g') {
+						goto l826
+					}
+					position++
+					goto l825
+				l826:
+					position, tokenIndex = position825, tokenIndex825
+					if buffer[position] != rune('s') {
+						goto l823
+					}
+					position++
+				}
+			l825:
+				if buffer[position] != rune('s') {
+					goto l823
+				}
+				position++
+				if buffer[position] != rune(':') {
+					goto l823
+				}
+				position++
+				add(ruleSegmentRegister, position824)
+			}
+			return true
+		l823:
+			position, tokenIndex = position823, tokenIndex823
 			return false
 		},
 	}