A couple of Aarch64 FIPS delocate fixes.

Clang 12 in opt mode produces a couple of assembly patterns that were
not handled by delocate.

Firstly, two-digit vector indexes were just a simple omission. Fixed.

Secondly, Clang puts symbol deltas in .byte directives, and bit-shifts
them. The .byte directive was not considered to be a symbol-containing
directive because it's too small, but it could store deltas.
Additionally, bit-shifting of symbol expressions was not supported.
Fixed.

Change-Id: I796299821f5ac7d3639fa6243c5d9bd5342bbddf
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/47064
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 991cd01..4458e12 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -38,14 +38,19 @@
 QuotedArg <- '"' QuotedText '"'
 QuotedText <- (EscapedChar / [^"])*
 LabelContainingDirective <- LabelContainingDirectiveName WS SymbolArgs
-LabelContainingDirectiveName <- ".xword" / ".word" / ".long" / ".set" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
+LabelContainingDirectiveName <- ".xword" / ".word" / ".long" / ".set" / ".byte" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
 SymbolArgs <- SymbolArg ((WS? ',' WS?) SymbolArg)*
-SymbolArg <- Offset /
-             SymbolType /
-             (Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName) /
-             LocalSymbol TCMarker? /
-             SymbolName Offset /
-             SymbolName TCMarker?
+SymbolShift <- ('<<' / '>>') WS? [0-9]+
+SymbolArg <- (OpenParen WS?)? (
+               Offset /
+               SymbolType /
+               (Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName) /
+               LocalSymbol TCMarker? /
+               SymbolName Offset /
+               SymbolName TCMarker?)
+             (WS? CloseParen)? (WS? SymbolShift)?
+OpenParen <- '('
+CloseParen <- ')'
 SymbolType <- [@%] ('function' / 'object')
 Dot <- '.'
 TCMarker <- '[TC]'
@@ -73,7 +78,7 @@
                        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] ']')? )
+ARMRegister <- "sp" / ([xwdqs] [0-9] [0-9]?) / "xzr" / "wzr" / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [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
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index 6e21346..759b924 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -29,7 +29,10 @@
 	ruleLabelContainingDirective
 	ruleLabelContainingDirectiveName
 	ruleSymbolArgs
+	ruleSymbolShift
 	ruleSymbolArg
+	ruleOpenParen
+	ruleCloseParen
 	ruleSymbolType
 	ruleDot
 	ruleTCMarker
@@ -84,7 +87,10 @@
 	"LabelContainingDirective",
 	"LabelContainingDirectiveName",
 	"SymbolArgs",
+	"SymbolShift",
 	"SymbolArg",
+	"OpenParen",
+	"CloseParen",
 	"SymbolType",
 	"Dot",
 	"TCMarker",
@@ -234,7 +240,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [52]func() bool
+	rules  [55]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -1382,7 +1388,7 @@
 			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'))> */
+		/* 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')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
 		func() bool {
 			position147, tokenIndex147 := position, tokenIndex
 			{
@@ -1661,10 +1667,6 @@
 						goto l186
 					}
 					position++
-					if buffer[position] != rune('8') {
-						goto l186
-					}
-					position++
 					{
 						position187, tokenIndex187 := position, tokenIndex
 						if buffer[position] != rune('b') {
@@ -1732,7 +1734,7 @@
 						goto l195
 					}
 					position++
-					if buffer[position] != rune('4') {
+					if buffer[position] != rune('8') {
 						goto l195
 					}
 					position++
@@ -1803,16 +1805,20 @@
 						goto l204
 					}
 					position++
+					if buffer[position] != rune('4') {
+						goto l204
+					}
+					position++
 					{
 						position205, tokenIndex205 := position, tokenIndex
-						if buffer[position] != rune('q') {
+						if buffer[position] != rune('b') {
 							goto l206
 						}
 						position++
 						goto l205
 					l206:
 						position, tokenIndex = position205, tokenIndex205
-						if buffer[position] != rune('Q') {
+						if buffer[position] != rune('B') {
 							goto l204
 						}
 						position++
@@ -1820,14 +1826,14 @@
 				l205:
 					{
 						position207, tokenIndex207 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('y') {
 							goto l208
 						}
 						position++
 						goto l207
 					l208:
 						position, tokenIndex = position207, tokenIndex207
-						if buffer[position] != rune('U') {
+						if buffer[position] != rune('Y') {
 							goto l204
 						}
 						position++
@@ -1835,14 +1841,14 @@
 				l207:
 					{
 						position209, tokenIndex209 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('t') {
 							goto l210
 						}
 						position++
 						goto l209
 					l210:
 						position, tokenIndex = position209, tokenIndex209
-						if buffer[position] != rune('A') {
+						if buffer[position] != rune('T') {
 							goto l204
 						}
 						position++
@@ -1850,14 +1856,14 @@
 				l209:
 					{
 						position211, tokenIndex211 := position, tokenIndex
-						if buffer[position] != rune('d') {
+						if buffer[position] != rune('e') {
 							goto l212
 						}
 						position++
 						goto l211
 					l212:
 						position, tokenIndex = position211, tokenIndex211
-						if buffer[position] != rune('D') {
+						if buffer[position] != rune('E') {
 							goto l204
 						}
 						position++
@@ -1872,14 +1878,14 @@
 					position++
 					{
 						position214, tokenIndex214 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('q') {
 							goto l215
 						}
 						position++
 						goto l214
 					l215:
 						position, tokenIndex = position214, tokenIndex214
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('Q') {
 							goto l213
 						}
 						position++
@@ -1887,245 +1893,245 @@
 				l214:
 					{
 						position216, tokenIndex216 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('u') {
 							goto l217
 						}
 						position++
 						goto l216
 					l217:
 						position, tokenIndex = position216, tokenIndex216
-						if buffer[position] != rune('C') {
+						if buffer[position] != rune('U') {
 							goto l213
 						}
 						position++
 					}
 				l216:
+					{
+						position218, tokenIndex218 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l219
+						}
+						position++
+						goto l218
+					l219:
+						position, tokenIndex = position218, tokenIndex218
+						if buffer[position] != rune('A') {
+							goto l213
+						}
+						position++
+					}
+				l218:
+					{
+						position220, tokenIndex220 := position, tokenIndex
+						if buffer[position] != rune('d') {
+							goto l221
+						}
+						position++
+						goto l220
+					l221:
+						position, tokenIndex = position220, tokenIndex220
+						if buffer[position] != rune('D') {
+							goto l213
+						}
+						position++
+					}
+				l220:
 					goto l149
 				l213:
 					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
-						goto l218
+						goto l222
 					}
 					position++
 					{
-						position219, tokenIndex219 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l220
-						}
-						position++
-						goto l219
-					l220:
-						position, tokenIndex = position219, tokenIndex219
-						if buffer[position] != rune('L') {
-							goto l218
-						}
-						position++
-					}
-				l219:
-					{
-						position221, tokenIndex221 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l222
-						}
-						position++
-						goto l221
-					l222:
-						position, tokenIndex = position221, tokenIndex221
-						if buffer[position] != rune('O') {
-							goto l218
-						}
-						position++
-					}
-				l221:
-					{
 						position223, tokenIndex223 := position, tokenIndex
-						if buffer[position] != rune('c') {
+						if buffer[position] != rune('t') {
 							goto l224
 						}
 						position++
 						goto l223
 					l224:
 						position, tokenIndex = position223, tokenIndex223
-						if buffer[position] != rune('C') {
-							goto l218
+						if buffer[position] != rune('T') {
+							goto l222
 						}
 						position++
 					}
 				l223:
 					{
 						position225, tokenIndex225 := position, tokenIndex
-						if buffer[position] != rune('a') {
+						if buffer[position] != rune('c') {
 							goto l226
 						}
 						position++
 						goto l225
 					l226:
 						position, tokenIndex = position225, tokenIndex225
-						if buffer[position] != rune('A') {
-							goto l218
+						if buffer[position] != rune('C') {
+							goto l222
 						}
 						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:
+				l222:
 					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
-						goto l239
+						goto l227
 					}
 					position++
 					{
+						position228, tokenIndex228 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l229
+						}
+						position++
+						goto l228
+					l229:
+						position, tokenIndex = position228, tokenIndex228
+						if buffer[position] != rune('L') {
+							goto l227
+						}
+						position++
+					}
+				l228:
+					{
+						position230, tokenIndex230 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l231
+						}
+						position++
+						goto l230
+					l231:
+						position, tokenIndex = position230, tokenIndex230
+						if buffer[position] != rune('O') {
+							goto l227
+						}
+						position++
+					}
+				l230:
+					{
+						position232, tokenIndex232 := position, tokenIndex
+						if buffer[position] != rune('c') {
+							goto l233
+						}
+						position++
+						goto l232
+					l233:
+						position, tokenIndex = position232, tokenIndex232
+						if buffer[position] != rune('C') {
+							goto l227
+						}
+						position++
+					}
+				l232:
+					{
+						position234, tokenIndex234 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l235
+						}
+						position++
+						goto l234
+					l235:
+						position, tokenIndex = position234, tokenIndex234
+						if buffer[position] != rune('A') {
+							goto l227
+						}
+						position++
+					}
+				l234:
+					{
+						position236, tokenIndex236 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l237
+						}
+						position++
+						goto l236
+					l237:
+						position, tokenIndex = position236, tokenIndex236
+						if buffer[position] != rune('L') {
+							goto l227
+						}
+						position++
+					}
+				l236:
+					{
+						position238, tokenIndex238 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l239
+						}
+						position++
+						goto l238
+					l239:
+						position, tokenIndex = position238, tokenIndex238
+						if buffer[position] != rune('E') {
+							goto l227
+						}
+						position++
+					}
+				l238:
+					{
 						position240, tokenIndex240 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('n') {
 							goto l241
 						}
 						position++
 						goto l240
 					l241:
 						position, tokenIndex = position240, tokenIndex240
-						if buffer[position] != rune('S') {
-							goto l239
+						if buffer[position] != rune('N') {
+							goto l227
 						}
 						position++
 					}
 				l240:
 					{
 						position242, tokenIndex242 := position, tokenIndex
-						if buffer[position] != rune('i') {
+						if buffer[position] != rune('t') {
 							goto l243
 						}
 						position++
 						goto l242
 					l243:
 						position, tokenIndex = position242, tokenIndex242
-						if buffer[position] != rune('I') {
-							goto l239
+						if buffer[position] != rune('T') {
+							goto l227
 						}
 						position++
 					}
 				l242:
 					{
 						position244, tokenIndex244 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('r') {
 							goto l245
 						}
 						position++
 						goto l244
 					l245:
 						position, tokenIndex = position244, tokenIndex244
-						if buffer[position] != rune('Z') {
-							goto l239
+						if buffer[position] != rune('R') {
+							goto l227
 						}
 						position++
 					}
 				l244:
 					{
 						position246, tokenIndex246 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('y') {
 							goto l247
 						}
 						position++
 						goto l246
 					l247:
 						position, tokenIndex = position246, tokenIndex246
-						if buffer[position] != rune('E') {
-							goto l239
+						if buffer[position] != rune('Y') {
+							goto l227
 						}
 						position++
 					}
 				l246:
 					goto l149
-				l239:
+				l227:
 					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
 						goto l248
@@ -2133,14 +2139,14 @@
 					position++
 					{
 						position249, tokenIndex249 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('s') {
 							goto l250
 						}
 						position++
 						goto l249
 					l250:
 						position, tokenIndex = position249, tokenIndex249
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('S') {
 							goto l248
 						}
 						position++
@@ -2148,14 +2154,14 @@
 				l249:
 					{
 						position251, tokenIndex251 := position, tokenIndex
-						if buffer[position] != rune('y') {
+						if buffer[position] != rune('i') {
 							goto l252
 						}
 						position++
 						goto l251
 					l252:
 						position, tokenIndex = position251, tokenIndex251
-						if buffer[position] != rune('Y') {
+						if buffer[position] != rune('I') {
 							goto l248
 						}
 						position++
@@ -2163,14 +2169,14 @@
 				l251:
 					{
 						position253, tokenIndex253 := position, tokenIndex
-						if buffer[position] != rune('p') {
+						if buffer[position] != rune('z') {
 							goto l254
 						}
 						position++
 						goto l253
 					l254:
 						position, tokenIndex = position253, tokenIndex253
-						if buffer[position] != rune('P') {
+						if buffer[position] != rune('Z') {
 							goto l248
 						}
 						position++
@@ -2200,14 +2206,14 @@
 					position++
 					{
 						position258, tokenIndex258 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('t') {
 							goto l259
 						}
 						position++
 						goto l258
 					l259:
 						position, tokenIndex = position258, tokenIndex258
-						if buffer[position] != rune('U') {
+						if buffer[position] != rune('T') {
 							goto l257
 						}
 						position++
@@ -2215,14 +2221,14 @@
 				l258:
 					{
 						position260, tokenIndex260 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('y') {
 							goto l261
 						}
 						position++
 						goto l260
 					l261:
 						position, tokenIndex = position260, tokenIndex260
-						if buffer[position] != rune('L') {
+						if buffer[position] != rune('Y') {
 							goto l257
 						}
 						position++
@@ -2230,14 +2236,14 @@
 				l260:
 					{
 						position262, tokenIndex262 := position, tokenIndex
-						if buffer[position] != rune('e') {
+						if buffer[position] != rune('p') {
 							goto l263
 						}
 						position++
 						goto l262
 					l263:
 						position, tokenIndex = position262, tokenIndex262
-						if buffer[position] != rune('E') {
+						if buffer[position] != rune('P') {
 							goto l257
 						}
 						position++
@@ -2245,98 +2251,165 @@
 				l262:
 					{
 						position264, tokenIndex264 := position, tokenIndex
-						if buffer[position] != rune('b') {
+						if buffer[position] != rune('e') {
 							goto l265
 						}
 						position++
 						goto l264
 					l265:
 						position, tokenIndex = position264, tokenIndex264
-						if buffer[position] != rune('B') {
+						if buffer[position] != rune('E') {
 							goto l257
 						}
 						position++
 					}
 				l264:
+					goto l149
+				l257:
+					position, tokenIndex = position149, tokenIndex149
+					if buffer[position] != rune('.') {
+						goto l266
+					}
+					position++
+					{
+						position267, tokenIndex267 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l268
+						}
+						position++
+						goto l267
+					l268:
+						position, tokenIndex = position267, tokenIndex267
+						if buffer[position] != rune('U') {
+							goto l266
+						}
+						position++
+					}
+				l267:
+					{
+						position269, tokenIndex269 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l270
+						}
+						position++
+						goto l269
+					l270:
+						position, tokenIndex = position269, tokenIndex269
+						if buffer[position] != rune('L') {
+							goto l266
+						}
+						position++
+					}
+				l269:
+					{
+						position271, tokenIndex271 := position, tokenIndex
+						if buffer[position] != rune('e') {
+							goto l272
+						}
+						position++
+						goto l271
+					l272:
+						position, tokenIndex = position271, tokenIndex271
+						if buffer[position] != rune('E') {
+							goto l266
+						}
+						position++
+					}
+				l271:
+					{
+						position273, tokenIndex273 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l274
+						}
+						position++
+						goto l273
+					l274:
+						position, tokenIndex = position273, tokenIndex273
+						if buffer[position] != rune('B') {
+							goto l266
+						}
+						position++
+					}
+				l273:
 					if buffer[position] != rune('1') {
-						goto l257
+						goto l266
 					}
 					position++
 					if buffer[position] != rune('2') {
-						goto l257
+						goto l266
 					}
 					position++
 					if buffer[position] != rune('8') {
-						goto l257
+						goto l266
 					}
 					position++
 					goto l149
-				l257:
+				l266:
 					position, tokenIndex = position149, tokenIndex149
 					if buffer[position] != rune('.') {
 						goto l147
 					}
 					position++
 					{
-						position266, tokenIndex266 := position, tokenIndex
+						position275, tokenIndex275 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l267
+							goto l276
 						}
 						position++
-						goto l266
-					l267:
-						position, tokenIndex = position266, tokenIndex266
+						goto l275
+					l276:
+						position, tokenIndex = position275, tokenIndex275
 						if buffer[position] != rune('S') {
 							goto l147
 						}
 						position++
 					}
-				l266:
+				l275:
 					{
-						position268, tokenIndex268 := position, tokenIndex
+						position277, tokenIndex277 := position, tokenIndex
 						if buffer[position] != rune('l') {
-							goto l269
+							goto l278
 						}
 						position++
-						goto l268
-					l269:
-						position, tokenIndex = position268, tokenIndex268
+						goto l277
+					l278:
+						position, tokenIndex = position277, tokenIndex277
 						if buffer[position] != rune('L') {
 							goto l147
 						}
 						position++
 					}
-				l268:
+				l277:
 					{
-						position270, tokenIndex270 := position, tokenIndex
+						position279, tokenIndex279 := position, tokenIndex
 						if buffer[position] != rune('e') {
-							goto l271
+							goto l280
 						}
 						position++
-						goto l270
-					l271:
-						position, tokenIndex = position270, tokenIndex270
+						goto l279
+					l280:
+						position, tokenIndex = position279, tokenIndex279
 						if buffer[position] != rune('E') {
 							goto l147
 						}
 						position++
 					}
-				l270:
+				l279:
 					{
-						position272, tokenIndex272 := position, tokenIndex
+						position281, tokenIndex281 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l273
+							goto l282
 						}
 						position++
-						goto l272
-					l273:
-						position, tokenIndex = position272, tokenIndex272
+						goto l281
+					l282:
+						position, tokenIndex = position281, tokenIndex281
 						if buffer[position] != rune('B') {
 							goto l147
 						}
 						position++
 					}
-				l272:
+				l281:
 					if buffer[position] != rune('1') {
 						goto l147
 					}
@@ -2360,173 +2433,126 @@
 		},
 		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
 		func() bool {
-			position274, tokenIndex274 := position, tokenIndex
+			position283, tokenIndex283 := position, tokenIndex
 			{
-				position275 := position
+				position284 := position
 				if !_rules[ruleSymbolArg]() {
-					goto l274
+					goto l283
 				}
-			l276:
+			l285:
 				{
-					position277, tokenIndex277 := position, tokenIndex
+					position286, tokenIndex286 := position, tokenIndex
 					{
-						position278, tokenIndex278 := position, tokenIndex
+						position287, tokenIndex287 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l278
+							goto l287
 						}
-						goto l279
-					l278:
-						position, tokenIndex = position278, tokenIndex278
+						goto l288
+					l287:
+						position, tokenIndex = position287, tokenIndex287
 					}
-				l279:
+				l288:
 					if buffer[position] != rune(',') {
-						goto l277
+						goto l286
 					}
 					position++
 					{
-						position280, tokenIndex280 := position, tokenIndex
+						position289, tokenIndex289 := 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
+						goto l290
 					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
-						}
+						position, tokenIndex = position289, tokenIndex289
 					}
-				l288:
-					{
-						position292, tokenIndex292 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l292
-						}
-						goto l293
-					l292:
-						position, tokenIndex = position292, tokenIndex292
+				l290:
+					if !_rules[ruleSymbolArg]() {
+						goto l286
 					}
-				l293:
-					if !_rules[ruleOperator]() {
-						goto l287
+					goto l285
+				l286:
+					position, tokenIndex = position286, tokenIndex286
+				}
+				add(ruleSymbolArgs, position284)
+			}
+			return true
+		l283:
+			position, tokenIndex = position283, tokenIndex283
+			return false
+		},
+		/* 15 SymbolShift <- <((('<' '<') / ('>' '>')) WS? [0-9]+)> */
+		func() bool {
+			position291, tokenIndex291 := position, tokenIndex
+			{
+				position292 := position
+				{
+					position293, tokenIndex293 := position, tokenIndex
+					if buffer[position] != rune('<') {
+						goto l294
 					}
-					{
-						position294, tokenIndex294 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l294
-						}
+					position++
+					if buffer[position] != rune('<') {
+						goto l294
+					}
+					position++
+					goto l293
+				l294:
+					position, tokenIndex = position293, tokenIndex293
+					if buffer[position] != rune('>') {
+						goto l291
+					}
+					position++
+					if buffer[position] != rune('>') {
+						goto l291
+					}
+					position++
+				}
+			l293:
+				{
+					position295, tokenIndex295 := position, tokenIndex
+					if !_rules[ruleWS]() {
 						goto l295
-					l294:
-						position, tokenIndex = position294, tokenIndex294
 					}
+					goto l296
 				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
-						}
+					position, tokenIndex = position295, tokenIndex295
+				}
+			l296:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l291
+				}
+				position++
+			l297:
+				{
+					position298, tokenIndex298 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l298
 					}
-				l296:
-					goto l284
-				l287:
-					position, tokenIndex = position284, tokenIndex284
-					if !_rules[ruleLocalSymbol]() {
-						goto l299
-					}
-					{
-						position300, tokenIndex300 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
-							goto l300
-						}
+					position++
+					goto l297
+				l298:
+					position, tokenIndex = position298, tokenIndex298
+				}
+				add(ruleSymbolShift, position292)
+			}
+			return true
+		l291:
+			position, tokenIndex = position291, tokenIndex291
+			return false
+		},
+		/* 16 SymbolArg <- <((OpenParen WS?)? (Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?)) (WS? CloseParen)? (WS? SymbolShift)?)> */
+		func() bool {
+			position299, tokenIndex299 := position, tokenIndex
+			{
+				position300 := position
+				{
+					position301, tokenIndex301 := position, tokenIndex
+					if !_rules[ruleOpenParen]() {
 						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]() {
+						if !_rules[ruleWS]() {
 							goto l303
 						}
 						goto l304
@@ -2534,3567 +2560,3777 @@
 						position, tokenIndex = position303, tokenIndex303
 					}
 				l304:
+					goto l302
+				l301:
+					position, tokenIndex = position301, tokenIndex301
 				}
-			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
+			l302:
 				{
-					position307, tokenIndex307 := position, tokenIndex
-					if buffer[position] != rune('@') {
+					position305, tokenIndex305 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l306
+					}
+					goto l305
+				l306:
+					position, tokenIndex = position305, tokenIndex305
+					if !_rules[ruleSymbolType]() {
+						goto l307
+					}
+					goto l305
+				l307:
+					position, tokenIndex = position305, tokenIndex305
+					{
+						position309, tokenIndex309 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l310
+						}
+						goto l309
+					l310:
+						position, tokenIndex = position309, tokenIndex309
+						if !_rules[ruleLocalSymbol]() {
+							goto l311
+						}
+						goto l309
+					l311:
+						position, tokenIndex = position309, tokenIndex309
+						if !_rules[ruleSymbolName]() {
+							goto l312
+						}
+						goto l309
+					l312:
+						position, tokenIndex = position309, tokenIndex309
+						if !_rules[ruleDot]() {
+							goto l308
+						}
+					}
+				l309:
+					{
+						position313, tokenIndex313 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l313
+						}
+						goto l314
+					l313:
+						position, tokenIndex = position313, tokenIndex313
+					}
+				l314:
+					if !_rules[ruleOperator]() {
 						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 l310
-					}
-					position++
-					if buffer[position] != rune('u') {
-						goto l310
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l310
-					}
-					position++
-					if buffer[position] != rune('c') {
-						goto l310
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l310
-					}
-					position++
-					if buffer[position] != rune('i') {
-						goto l310
-					}
-					position++
-					if buffer[position] != rune('o') {
-						goto l310
-					}
-					position++
-					if buffer[position] != rune('n') {
-						goto l310
-					}
-					position++
-					goto l309
-				l310:
-					position, tokenIndex = position309, tokenIndex309
-					if buffer[position] != rune('o') {
-						goto l305
-					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l305
-					}
-					position++
-					if buffer[position] != rune('j') {
-						goto l305
-					}
-					position++
-					if buffer[position] != rune('e') {
-						goto l305
-					}
-					position++
-					if buffer[position] != rune('c') {
-						goto l305
-					}
-					position++
-					if buffer[position] != rune('t') {
-						goto l305
-					}
-					position++
-				}
-			l309:
-				add(ruleSymbolType, position306)
-			}
-			return true
-		l305:
-			position, tokenIndex = position305, tokenIndex305
-			return false
-		},
-		/* 17 Dot <- <'.'> */
-		func() bool {
-			position311, tokenIndex311 := position, tokenIndex
-			{
-				position312 := position
-				if buffer[position] != rune('.') {
-					goto l311
-				}
-				position++
-				add(ruleDot, position312)
-			}
-			return true
-		l311:
-			position, tokenIndex = position311, tokenIndex311
-			return false
-		},
-		/* 18 TCMarker <- <('[' 'T' 'C' ']')> */
-		func() bool {
-			position313, tokenIndex313 := position, tokenIndex
-			{
-				position314 := position
-				if buffer[position] != rune('[') {
-					goto l313
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l313
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l313
-				}
-				position++
-				if buffer[position] != rune(']') {
-					goto l313
-				}
-				position++
-				add(ruleTCMarker, position314)
-			}
-			return true
-		l313:
-			position, tokenIndex = position313, tokenIndex313
-			return false
-		},
-		/* 19 EscapedChar <- <('\\' .)> */
-		func() bool {
-			position315, tokenIndex315 := position, tokenIndex
-			{
-				position316 := position
-				if buffer[position] != rune('\\') {
-					goto l315
-				}
-				position++
-				if !matchDot() {
-					goto l315
-				}
-				add(ruleEscapedChar, position316)
-			}
-			return true
-		l315:
-			position, tokenIndex = position315, tokenIndex315
-			return false
-		},
-		/* 20 WS <- <(' ' / '\t')+> */
-		func() bool {
-			position317, tokenIndex317 := position, tokenIndex
-			{
-				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(' ') {
+						position315, tokenIndex315 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l315
+						}
+						goto l316
+					l315:
+						position, tokenIndex = position315, tokenIndex315
+					}
+				l316:
+					{
+						position317, tokenIndex317 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l318
+						}
+						goto l317
+					l318:
+						position, tokenIndex = position317, tokenIndex317
+						if !_rules[ruleLocalSymbol]() {
+							goto l319
+						}
+						goto l317
+					l319:
+						position, tokenIndex = position317, tokenIndex317
+						if !_rules[ruleSymbolName]() {
+							goto l308
+						}
+					}
+				l317:
+					goto l305
+				l308:
+					position, tokenIndex = position305, tokenIndex305
+					if !_rules[ruleLocalSymbol]() {
+						goto l320
+					}
+					{
+						position321, tokenIndex321 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l321
+						}
+						goto l322
+					l321:
+						position, tokenIndex = position321, tokenIndex321
+					}
+				l322:
+					goto l305
+				l320:
+					position, tokenIndex = position305, tokenIndex305
+					if !_rules[ruleSymbolName]() {
+						goto l323
+					}
+					if !_rules[ruleOffset]() {
+						goto l323
+					}
+					goto l305
+				l323:
+					position, tokenIndex = position305, tokenIndex305
+					if !_rules[ruleSymbolName]() {
+						goto l299
+					}
+					{
+						position324, tokenIndex324 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
 							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
+					l324:
+						position, tokenIndex = position324, tokenIndex324
 					}
-					position++
+				l325:
+				}
+			l305:
+				{
+					position326, tokenIndex326 := position, tokenIndex
+					{
+						position328, tokenIndex328 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l328
+						}
+						goto l329
+					l328:
+						position, tokenIndex = position328, tokenIndex328
+					}
+				l329:
+					if !_rules[ruleCloseParen]() {
+						goto l326
+					}
+					goto l327
+				l326:
+					position, tokenIndex = position326, tokenIndex326
 				}
 			l327:
-			l329:
 				{
 					position330, tokenIndex330 := position, tokenIndex
 					{
-						position331, tokenIndex331 := position, tokenIndex
-						if buffer[position] != rune('\n') {
-							goto l331
+						position332, tokenIndex332 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l332
 						}
-						position++
-						goto l330
-					l331:
-						position, tokenIndex = position331, tokenIndex331
+						goto l333
+					l332:
+						position, tokenIndex = position332, tokenIndex332
 					}
-					if !matchDot() {
+				l333:
+					if !_rules[ruleSymbolShift]() {
 						goto l330
 					}
-					goto l329
+					goto l331
 				l330:
 					position, tokenIndex = position330, tokenIndex330
 				}
-				add(ruleComment, position326)
+			l331:
+				add(ruleSymbolArg, position300)
 			}
 			return true
-		l325:
-			position, tokenIndex = position325, tokenIndex325
+		l299:
+			position, tokenIndex = position299, tokenIndex299
 			return false
 		},
-		/* 22 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		/* 17 OpenParen <- <'('> */
 		func() bool {
-			position332, tokenIndex332 := position, tokenIndex
+			position334, tokenIndex334 := position, tokenIndex
 			{
-				position333 := position
-				{
-					position334, tokenIndex334 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
-						goto l335
-					}
+				position335 := position
+				if buffer[position] != rune('(') {
 					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)
+				add(ruleOpenParen, position335)
 			}
 			return true
-		l332:
-			position, tokenIndex = position332, tokenIndex332
+		l334:
+			position, tokenIndex = position334, tokenIndex334
 			return false
 		},
-		/* 23 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		/* 18 CloseParen <- <')'> */
 		func() bool {
-			position337, tokenIndex337 := position, tokenIndex
+			position336, tokenIndex336 := position, tokenIndex
 			{
-				position338 := position
+				position337 := position
+				if buffer[position] != rune(')') {
+					goto l336
+				}
+				position++
+				add(ruleCloseParen, position337)
+			}
+			return true
+		l336:
+			position, tokenIndex = position336, tokenIndex336
+			return false
+		},
+		/* 19 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
+		func() bool {
+			position338, tokenIndex338 := position, tokenIndex
+			{
+				position339 := 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') {
+					position340, tokenIndex340 := position, tokenIndex
+					if buffer[position] != rune('@') {
 						goto l341
 					}
 					position++
-					goto l339
+					goto l340
 				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, tokenIndex = position340, tokenIndex340
+					if buffer[position] != rune('%') {
+						goto l338
 					}
 					position++
 				}
-			l339:
-			l343:
+			l340:
 				{
-					position344, tokenIndex344 := position, tokenIndex
-					{
-						position345, tokenIndex345 := position, tokenIndex
-						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++
+					position342, tokenIndex342 := position, tokenIndex
+					if buffer[position] != rune('f') {
+						goto l343
 					}
-				l345:
-					goto l343
-				l344:
-					position, tokenIndex = position344, tokenIndex344
+					position++
+					if buffer[position] != rune('u') {
+						goto l343
+					}
+					position++
+					if buffer[position] != rune('n') {
+						goto l343
+					}
+					position++
+					if buffer[position] != rune('c') {
+						goto l343
+					}
+					position++
+					if buffer[position] != rune('t') {
+						goto l343
+					}
+					position++
+					if buffer[position] != rune('i') {
+						goto l343
+					}
+					position++
+					if buffer[position] != rune('o') {
+						goto l343
+					}
+					position++
+					if buffer[position] != rune('n') {
+						goto l343
+					}
+					position++
+					goto l342
+				l343:
+					position, tokenIndex = position342, tokenIndex342
+					if buffer[position] != rune('o') {
+						goto l338
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l338
+					}
+					position++
+					if buffer[position] != rune('j') {
+						goto l338
+					}
+					position++
+					if buffer[position] != rune('e') {
+						goto l338
+					}
+					position++
+					if buffer[position] != rune('c') {
+						goto l338
+					}
+					position++
+					if buffer[position] != rune('t') {
+						goto l338
+					}
+					position++
 				}
-				add(ruleSymbolName, position338)
+			l342:
+				add(ruleSymbolType, position339)
 			}
 			return true
-		l337:
-			position, tokenIndex = position337, tokenIndex337
+		l338:
+			position, tokenIndex = position338, tokenIndex338
 			return false
 		},
-		/* 24 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
+		/* 20 Dot <- <'.'> */
 		func() bool {
-			position353, tokenIndex353 := position, tokenIndex
+			position344, tokenIndex344 := position, tokenIndex
 			{
-				position354 := position
+				position345 := position
 				if buffer[position] != rune('.') {
-					goto l353
+					goto l344
 				}
 				position++
-				if buffer[position] != rune('L') {
-					goto l353
+				add(ruleDot, position345)
+			}
+			return true
+		l344:
+			position, tokenIndex = position344, tokenIndex344
+			return false
+		},
+		/* 21 TCMarker <- <('[' 'T' 'C' ']')> */
+		func() bool {
+			position346, tokenIndex346 := position, tokenIndex
+			{
+				position347 := position
+				if buffer[position] != rune('[') {
+					goto l346
 				}
 				position++
+				if buffer[position] != rune('T') {
+					goto l346
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l346
+				}
+				position++
+				if buffer[position] != rune(']') {
+					goto l346
+				}
+				position++
+				add(ruleTCMarker, position347)
+			}
+			return true
+		l346:
+			position, tokenIndex = position346, tokenIndex346
+			return false
+		},
+		/* 22 EscapedChar <- <('\\' .)> */
+		func() bool {
+			position348, tokenIndex348 := position, tokenIndex
+			{
+				position349 := position
+				if buffer[position] != rune('\\') {
+					goto l348
+				}
+				position++
+				if !matchDot() {
+					goto l348
+				}
+				add(ruleEscapedChar, position349)
+			}
+			return true
+		l348:
+			position, tokenIndex = position348, tokenIndex348
+			return false
+		},
+		/* 23 WS <- <(' ' / '\t')+> */
+		func() bool {
+			position350, tokenIndex350 := position, tokenIndex
+			{
+				position351 := position
 				{
-					position357, tokenIndex357 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
+					position354, tokenIndex354 := position, tokenIndex
+					if buffer[position] != rune(' ') {
+						goto l355
+					}
+					position++
+					goto l354
+				l355:
+					position, tokenIndex = position354, tokenIndex354
+					if buffer[position] != rune('\t') {
+						goto l350
+					}
+					position++
+				}
+			l354:
+			l352:
+				{
+					position353, tokenIndex353 := position, tokenIndex
+					{
+						position356, tokenIndex356 := position, tokenIndex
+						if buffer[position] != rune(' ') {
+							goto l357
+						}
+						position++
+						goto l356
+					l357:
+						position, tokenIndex = position356, tokenIndex356
+						if buffer[position] != rune('\t') {
+							goto l353
+						}
+						position++
+					}
+				l356:
+					goto l352
+				l353:
+					position, tokenIndex = position353, tokenIndex353
+				}
+				add(ruleWS, position351)
+			}
+			return true
+		l350:
+			position, tokenIndex = position350, tokenIndex350
+			return false
+		},
+		/* 24 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
+		func() bool {
+			position358, tokenIndex358 := position, tokenIndex
+			{
+				position359 := position
+				{
+					position360, tokenIndex360 := position, tokenIndex
+					if buffer[position] != rune('/') {
+						goto l361
+					}
+					position++
+					if buffer[position] != rune('/') {
+						goto l361
+					}
+					position++
+					goto l360
+				l361:
+					position, tokenIndex = position360, tokenIndex360
+					if buffer[position] != rune('#') {
 						goto l358
 					}
 					position++
-					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
+				}
+			l360:
+			l362:
+				{
+					position363, tokenIndex363 := position, tokenIndex
 					{
-						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') {
+						position364, tokenIndex364 := position, tokenIndex
+						if buffer[position] != rune('\n') {
 							goto l364
 						}
 						position++
+						goto l363
+					l364:
+						position, tokenIndex = position364, tokenIndex364
 					}
-				l365:
-					goto l357
-				l364:
-					position, tokenIndex = position357, tokenIndex357
-					if buffer[position] != rune('$') {
-						goto l367
+					if !matchDot() {
+						goto l363
 					}
-					position++
-					goto l357
-				l367:
-					position, tokenIndex = position357, tokenIndex357
-					if buffer[position] != rune('_') {
-						goto l353
-					}
-					position++
+					goto l362
+				l363:
+					position, tokenIndex = position363, tokenIndex363
 				}
-			l357:
-			l355:
+				add(ruleComment, position359)
+			}
+			return true
+		l358:
+			position, tokenIndex = position358, tokenIndex358
+			return false
+		},
+		/* 25 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		func() bool {
+			position365, tokenIndex365 := position, tokenIndex
+			{
+				position366 := position
 				{
-					position356, tokenIndex356 := position, tokenIndex
-					{
-						position368, tokenIndex368 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l369
-						}
-						position++
+					position367, tokenIndex367 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
 						goto l368
-					l369:
-						position, tokenIndex = position368, tokenIndex368
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l370
-						}
-						position++
-						goto l368
-					l370:
-						position, tokenIndex = position368, tokenIndex368
-						{
-							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++
-						}
-					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++
 					}
+					goto l367
 				l368:
-					goto l355
-				l356:
-					position, tokenIndex = position356, tokenIndex356
+					position, tokenIndex = position367, tokenIndex367
+					if !_rules[ruleLocalLabel]() {
+						goto l369
+					}
+					goto l367
+				l369:
+					position, tokenIndex = position367, tokenIndex367
+					if !_rules[ruleSymbolName]() {
+						goto l365
+					}
 				}
-				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
+			l367:
+				if buffer[position] != rune(':') {
+					goto l365
 				}
 				position++
-			l381:
+				add(ruleLabel, position366)
+			}
+			return true
+		l365:
+			position, tokenIndex = position365, tokenIndex365
+			return false
+		},
+		/* 26 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		func() bool {
+			position370, tokenIndex370 := position, tokenIndex
+			{
+				position371 := position
 				{
-					position382, tokenIndex382 := 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 l374
+					}
+					position++
+					goto l372
+				l374:
+					position, tokenIndex = position372, tokenIndex372
+					if buffer[position] != rune('.') {
+						goto l375
+					}
+					position++
+					goto l372
+				l375:
+					position, tokenIndex = position372, tokenIndex372
+					if buffer[position] != rune('_') {
+						goto l370
+					}
+					position++
+				}
+			l372:
+			l376:
+				{
+					position377, tokenIndex377 := position, tokenIndex
 					{
-						position383, tokenIndex383 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l384
+						position378, tokenIndex378 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l379
 						}
 						position++
-						goto l383
-					l384:
-						position, tokenIndex = position383, tokenIndex383
+						goto l378
+					l379:
+						position, tokenIndex = position378, tokenIndex378
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l380
+						}
+						position++
+						goto l378
+					l380:
+						position, tokenIndex = position378, tokenIndex378
+						if buffer[position] != rune('.') {
+							goto l381
+						}
+						position++
+						goto l378
+					l381:
+						position, tokenIndex = position378, tokenIndex378
+						{
+							position383, tokenIndex383 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l384
+							}
+							position++
+							goto l383
+						l384:
+							position, tokenIndex = position383, tokenIndex383
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l382
+							}
+							position++
+						}
+					l383:
+						goto l378
+					l382:
+						position, tokenIndex = position378, tokenIndex378
 						if buffer[position] != rune('$') {
-							goto l382
+							goto l385
+						}
+						position++
+						goto l378
+					l385:
+						position, tokenIndex = position378, tokenIndex378
+						if buffer[position] != rune('_') {
+							goto l377
 						}
 						position++
 					}
-				l383:
-					goto l381
-				l382:
-					position, tokenIndex = position382, tokenIndex382
+				l378:
+					goto l376
+				l377:
+					position, tokenIndex = position377, tokenIndex377
 				}
-				add(ruleLocalLabel, position380)
+				add(ruleSymbolName, position371)
 			}
 			return true
-		l379:
-			position, tokenIndex = position379, tokenIndex379
+		l370:
+			position, tokenIndex = position370, tokenIndex370
 			return false
 		},
-		/* 26 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
+		/* 27 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
 		func() bool {
-			position385, tokenIndex385 := position, tokenIndex
+			position386, tokenIndex386 := position, tokenIndex
 			{
-				position386 := position
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l385
+				position387 := position
+				if buffer[position] != rune('.') {
+					goto l386
 				}
 				position++
-			l387:
-				{
-					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++
-					}
-				l389:
-					goto l387
-				l388:
-					position, tokenIndex = position388, tokenIndex388
+				if buffer[position] != rune('L') {
+					goto l386
 				}
+				position++
 				{
-					position391, tokenIndex391 := position, tokenIndex
-					if buffer[position] != rune('b') {
+					position390, tokenIndex390 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l391
+					}
+					position++
+					goto l390
+				l391:
+					position, tokenIndex = position390, tokenIndex390
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l392
 					}
 					position++
-					goto l391
+					goto l390
 				l392:
-					position, tokenIndex = position391, tokenIndex391
-					if buffer[position] != rune('f') {
-						goto l385
+					position, tokenIndex = position390, tokenIndex390
+					{
+						position394, tokenIndex394 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l395
+						}
+						position++
+						goto l394
+					l395:
+						position, tokenIndex = position394, tokenIndex394
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l393
+						}
+						position++
+					}
+				l394:
+					goto l390
+				l393:
+					position, tokenIndex = position390, tokenIndex390
+					if buffer[position] != rune('.') {
+						goto l396
 					}
 					position++
-				}
-			l391:
-				add(ruleLocalLabelRef, position386)
-			}
-			return true
-		l385:
-			position, tokenIndex = position385, tokenIndex385
-			return false
-		},
-		/* 27 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
-		func() bool {
-			position393, tokenIndex393 := position, tokenIndex
-			{
-				position394 := position
-				if !_rules[ruleInstructionName]() {
-					goto l393
-				}
-				{
-					position395, tokenIndex395 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l395
-					}
-					if !_rules[ruleInstructionArg]() {
-						goto l395
-					}
-				l397:
+					goto l390
+				l396:
+					position, tokenIndex = position390, tokenIndex390
 					{
 						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
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l399
 						}
 						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:
+						goto l398
+					l399:
 						position, tokenIndex = position398, tokenIndex398
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l397
+						}
+						position++
 					}
-					goto l396
-				l395:
-					position, tokenIndex = position395, tokenIndex395
-				}
-			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
-				{
-					position405, tokenIndex405 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l406
+				l398:
+					goto l390
+				l397:
+					position, tokenIndex = position390, tokenIndex390
+					if buffer[position] != rune('$') {
+						goto l400
 					}
 					position++
-					goto l405
-				l406:
-					position, tokenIndex = position405, tokenIndex405
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l403
+					goto l390
+				l400:
+					position, tokenIndex = position390, tokenIndex390
+					if buffer[position] != rune('_') {
+						goto l386
 					}
 					position++
 				}
-			l405:
-			l407:
+			l390:
+			l388:
 				{
-					position408, tokenIndex408 := position, tokenIndex
+					position389, tokenIndex389 := position, tokenIndex
 					{
-						position409, tokenIndex409 := position, tokenIndex
+						position401, tokenIndex401 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l410
+							goto l402
 						}
 						position++
-						goto l409
-					l410:
-						position, tokenIndex = position409, tokenIndex409
+						goto l401
+					l402:
+						position, tokenIndex = position401, tokenIndex401
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l411
+							goto l403
 						}
 						position++
-						goto l409
-					l411:
-						position, tokenIndex = position409, tokenIndex409
-						if buffer[position] != rune('.') {
-							goto l412
-						}
-						position++
-						goto l409
-					l412:
-						position, tokenIndex = position409, tokenIndex409
+						goto l401
+					l403:
+						position, tokenIndex = position401, tokenIndex401
 						{
-							position413, tokenIndex413 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l414
+							position405, tokenIndex405 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l406
 							}
 							position++
-							goto l413
-						l414:
-							position, tokenIndex = position413, tokenIndex413
+							goto l405
+						l406:
+							position, tokenIndex = position405, tokenIndex405
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l404
+							}
+							position++
+						}
+					l405:
+						goto l401
+					l404:
+						position, tokenIndex = position401, tokenIndex401
+						if buffer[position] != rune('.') {
+							goto l407
+						}
+						position++
+						goto l401
+					l407:
+						position, tokenIndex = position401, tokenIndex401
+						{
+							position409, tokenIndex409 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l410
+							}
+							position++
+							goto l409
+						l410:
+							position, tokenIndex = position409, tokenIndex409
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l408
 							}
 							position++
 						}
-					l413:
+					l409:
+						goto l401
+					l408:
+						position, tokenIndex = position401, tokenIndex401
+						if buffer[position] != rune('$') {
+							goto l411
+						}
+						position++
+						goto l401
+					l411:
+						position, tokenIndex = position401, tokenIndex401
+						if buffer[position] != rune('_') {
+							goto l389
+						}
+						position++
 					}
-				l409:
-					goto l407
-				l408:
-					position, tokenIndex = position408, tokenIndex408
+				l401:
+					goto l388
+				l389:
+					position, tokenIndex = position389, tokenIndex389
 				}
+				add(ruleLocalSymbol, position387)
+			}
+			return true
+		l386:
+			position, tokenIndex = position386, tokenIndex386
+			return false
+		},
+		/* 28 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
+		func() bool {
+			position412, tokenIndex412 := position, tokenIndex
+			{
+				position413 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l412
+				}
+				position++
+			l414:
 				{
 					position415, tokenIndex415 := position, tokenIndex
 					{
-						position417, tokenIndex417 := position, tokenIndex
-						if buffer[position] != rune('.') {
-							goto l418
+						position416, tokenIndex416 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l417
 						}
 						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 l416
+					l417:
+						position, tokenIndex = position416, tokenIndex416
+						if buffer[position] != rune('$') {
 							goto l415
 						}
 						position++
 					}
-				l417:
-					goto l416
+				l416:
+					goto l414
 				l415:
 					position, tokenIndex = position415, tokenIndex415
 				}
-			l416:
-				add(ruleInstructionName, position404)
+				add(ruleLocalLabel, position413)
 			}
 			return true
-		l403:
-			position, tokenIndex = position403, tokenIndex403
+		l412:
+			position, tokenIndex = position412, tokenIndex412
 			return false
 		},
-		/* 29 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
+		/* 29 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
 		func() bool {
-			position420, tokenIndex420 := position, tokenIndex
+			position418, tokenIndex418 := position, tokenIndex
 			{
-				position421 := position
-				{
-					position422, tokenIndex422 := position, tokenIndex
-					if !_rules[ruleIndirectionIndicator]() {
-						goto l422
-					}
-					goto l423
-				l422:
-					position, tokenIndex = position422, tokenIndex422
+				position419 := position
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l418
 				}
-			l423:
+				position++
+			l420:
+				{
+					position421, tokenIndex421 := position, tokenIndex
+					{
+						position422, tokenIndex422 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l423
+						}
+						position++
+						goto l422
+					l423:
+						position, tokenIndex = position422, tokenIndex422
+						if buffer[position] != rune('$') {
+							goto l421
+						}
+						position++
+					}
+				l422:
+					goto l420
+				l421:
+					position, tokenIndex = position421, tokenIndex421
+				}
 				{
 					position424, tokenIndex424 := position, tokenIndex
-					if !_rules[ruleARMConstantTweak]() {
+					if buffer[position] != rune('b') {
 						goto l425
 					}
+					position++
 					goto l424
 				l425:
 					position, tokenIndex = position424, tokenIndex424
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l426
+					if buffer[position] != rune('f') {
+						goto l418
 					}
-					goto l424
-				l426:
-					position, tokenIndex = position424, tokenIndex424
-					if !_rules[ruleLocalLabelRef]() {
-						goto l427
-					}
-					goto l424
-				l427:
-					position, tokenIndex = position424, tokenIndex424
-					if !_rules[ruleTOCRefHigh]() {
-						goto l428
-					}
-					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
-					}
+					position++
 				}
 			l424:
-			l432:
-				{
-					position433, tokenIndex433 := position, tokenIndex
-					if !_rules[ruleAVX512Token]() {
-						goto l433
-					}
-					goto l432
-				l433:
-					position, tokenIndex = position433, tokenIndex433
-				}
-				add(ruleInstructionArg, position421)
+				add(ruleLocalLabelRef, position419)
 			}
 			return true
-		l420:
-			position, tokenIndex = position420, tokenIndex420
+		l418:
+			position, tokenIndex = position418, tokenIndex418
 			return false
 		},
-		/* 30 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
+		/* 30 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
 		func() bool {
-			position434, tokenIndex434 := position, tokenIndex
+			position426, tokenIndex426 := position, tokenIndex
 			{
-				position435 := position
-				if buffer[position] != rune('$') {
-					goto l434
+				position427 := position
+				if !_rules[ruleInstructionName]() {
+					goto l426
 				}
-				position++
-				if buffer[position] != rune('_') {
-					goto l434
+				{
+					position428, tokenIndex428 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l428
+					}
+					if !_rules[ruleInstructionArg]() {
+						goto l428
+					}
+				l430:
+					{
+						position431, tokenIndex431 := position, tokenIndex
+						{
+							position432, tokenIndex432 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l432
+							}
+							goto l433
+						l432:
+							position, tokenIndex = position432, tokenIndex432
+						}
+					l433:
+						if buffer[position] != rune(',') {
+							goto l431
+						}
+						position++
+						{
+							position434, tokenIndex434 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l434
+							}
+							goto l435
+						l434:
+							position, tokenIndex = position434, tokenIndex434
+						}
+					l435:
+						if !_rules[ruleInstructionArg]() {
+							goto l431
+						}
+						goto l430
+					l431:
+						position, tokenIndex = position431, tokenIndex431
+					}
+					goto l429
+				l428:
+					position, tokenIndex = position428, tokenIndex428
 				}
-				position++
-				if buffer[position] != rune('G') {
-					goto l434
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l434
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l434
-				}
-				position++
-				if buffer[position] != rune('B') {
-					goto l434
-				}
-				position++
-				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 l434
-				}
-				position++
-				if !_rules[ruleLocalSymbol]() {
-					goto l434
-				}
-				add(ruleGOTLocation, position435)
+			l429:
+				add(ruleInstruction, position427)
 			}
 			return true
-		l434:
-			position, tokenIndex = position434, tokenIndex434
+		l426:
+			position, tokenIndex = position426, tokenIndex426
 			return false
 		},
-		/* 31 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
+		/* 31 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
 		func() bool {
 			position436, tokenIndex436 := position, tokenIndex
 			{
 				position437 := position
 				{
 					position438, tokenIndex438 := position, tokenIndex
-					if buffer[position] != rune('$') {
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
 						goto l439
 					}
 					position++
-					if !_rules[ruleSymbolName]() {
-						goto l439
-					}
-					if buffer[position] != rune('@') {
-						goto l439
-					}
-					position++
-					if buffer[position] != rune('G') {
-						goto l439
-					}
-					position++
-					if buffer[position] != rune('O') {
-						goto l439
-					}
-					position++
-					if buffer[position] != rune('T') {
-						goto l439
-					}
-					position++
-					{
-						position440, tokenIndex440 := position, tokenIndex
-						if buffer[position] != rune('O') {
-							goto l440
-						}
-						position++
-						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(':') {
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l436
 					}
 					position++
+				}
+			l438:
+			l440:
+				{
+					position441, tokenIndex441 := position, tokenIndex
 					{
 						position442, tokenIndex442 := position, tokenIndex
-						if buffer[position] != rune('g') {
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
 							goto l443
 						}
 						position++
 						goto l442
 					l443:
 						position, tokenIndex = position442, tokenIndex442
-						if buffer[position] != rune('G') {
-							goto l436
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l444
 						}
 						position++
-					}
-				l442:
-					{
-						position444, tokenIndex444 := position, tokenIndex
-						if buffer[position] != rune('o') {
+						goto l442
+					l444:
+						position, tokenIndex = position442, tokenIndex442
+						if buffer[position] != rune('.') {
 							goto l445
 						}
 						position++
-						goto l444
+						goto l442
 					l445:
-						position, tokenIndex = position444, tokenIndex444
-						if buffer[position] != rune('O') {
-							goto l436
+						position, tokenIndex = position442, tokenIndex442
+						{
+							position446, tokenIndex446 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l447
+							}
+							position++
+							goto l446
+						l447:
+							position, tokenIndex = position446, tokenIndex446
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l441
+							}
+							position++
 						}
-						position++
+					l446:
 					}
-				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++
-					if !_rules[ruleSymbolName]() {
-						goto l436
-					}
+				l442:
+					goto l440
+				l441:
+					position, tokenIndex = position441, tokenIndex441
 				}
-			l438:
-				add(ruleGOTSymbolOffset, position437)
+				{
+					position448, tokenIndex448 := position, tokenIndex
+					{
+						position450, tokenIndex450 := position, tokenIndex
+						if buffer[position] != rune('.') {
+							goto l451
+						}
+						position++
+						goto l450
+					l451:
+						position, tokenIndex = position450, tokenIndex450
+						if buffer[position] != rune('+') {
+							goto l452
+						}
+						position++
+						goto l450
+					l452:
+						position, tokenIndex = position450, tokenIndex450
+						if buffer[position] != rune('-') {
+							goto l448
+						}
+						position++
+					}
+				l450:
+					goto l449
+				l448:
+					position, tokenIndex = position448, tokenIndex448
+				}
+			l449:
+				add(ruleInstructionName, position437)
 			}
 			return true
 		l436:
 			position, tokenIndex = position436, tokenIndex436
 			return false
 		},
-		/* 32 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
+		/* 32 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
 		func() bool {
-			position448, tokenIndex448 := position, tokenIndex
+			position453, tokenIndex453 := position, tokenIndex
 			{
-				position449 := position
-				{
-					position450, tokenIndex450 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l450
-					}
-					goto l451
-				l450:
-					position, tokenIndex = position450, tokenIndex450
-				}
-			l451:
-				if buffer[position] != rune('{') {
-					goto l448
-				}
-				position++
-				{
-					position452, tokenIndex452 := position, tokenIndex
-					if buffer[position] != rune('%') {
-						goto l452
-					}
-					position++
-					goto l453
-				l452:
-					position, tokenIndex = position452, tokenIndex452
-				}
-			l453:
-			l454:
+				position454 := position
 				{
 					position455, tokenIndex455 := position, tokenIndex
-					{
-						position456, tokenIndex456 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l457
-						}
-						position++
-						goto l456
-					l457:
-						position, tokenIndex = position456, tokenIndex456
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l455
-						}
-						position++
+					if !_rules[ruleIndirectionIndicator]() {
+						goto l455
 					}
-				l456:
-					goto l454
+					goto l456
 				l455:
 					position, tokenIndex = position455, tokenIndex455
 				}
-				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++
+			l456:
 				{
-					position460, tokenIndex460 := position, tokenIndex
-					if buffer[position] != rune('0') {
+					position457, tokenIndex457 := position, tokenIndex
+					if !_rules[ruleARMConstantTweak]() {
+						goto l458
+					}
+					goto l457
+				l458:
+					position, tokenIndex = position457, tokenIndex457
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l459
+					}
+					goto l457
+				l459:
+					position, tokenIndex = position457, tokenIndex457
+					if !_rules[ruleLocalLabelRef]() {
+						goto l460
+					}
+					goto l457
+				l460:
+					position, tokenIndex = position457, tokenIndex457
+					if !_rules[ruleTOCRefHigh]() {
 						goto l461
 					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l461
-					}
-					position++
-					goto l460
+					goto l457
 				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 c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l465
-						}
-						position++
-						goto l464
-					l465:
-						position, tokenIndex = position464, tokenIndex464
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l466
-						}
-						position++
-						goto l464
-					l466:
-						position, tokenIndex = position464, tokenIndex464
-						if buffer[position] != rune('_') {
-							goto l467
-						}
-						position++
-						goto l464
-					l467:
-						position, tokenIndex = position464, tokenIndex464
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l458
-						}
-						position++
-					}
-				l464:
-				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:
+					position, tokenIndex = position457, tokenIndex457
+					if !_rules[ruleTOCRefLow]() {
 						goto l462
-					l463:
-						position, tokenIndex = position463, tokenIndex463
+					}
+					goto l457
+				l462:
+					position, tokenIndex = position457, tokenIndex457
+					if !_rules[ruleGOTLocation]() {
+						goto l463
+					}
+					goto l457
+				l463:
+					position, tokenIndex = position457, tokenIndex457
+					if !_rules[ruleGOTSymbolOffset]() {
+						goto l464
+					}
+					goto l457
+				l464:
+					position, tokenIndex = position457, tokenIndex457
+					if !_rules[ruleMemoryRef]() {
+						goto l453
 					}
 				}
-			l460:
-				if buffer[position] != rune('@') {
-					goto l458
-				}
-				position++
+			l457:
+			l465:
 				{
-					position472, tokenIndex472 := position, tokenIndex
-					if buffer[position] != rune('h') {
-						goto l473
+					position466, tokenIndex466 := position, tokenIndex
+					if !_rules[ruleAVX512Token]() {
+						goto l466
 					}
-					position++
-					goto l472
-				l473:
-					position, tokenIndex = position472, tokenIndex472
-					if buffer[position] != rune('H') {
-						goto l458
-					}
-					position++
+					goto l465
+				l466:
+					position, tokenIndex = position466, tokenIndex466
 				}
-			l472:
-				{
-					position474, tokenIndex474 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l475
-					}
-					position++
-					goto l474
-				l475:
-					position, tokenIndex = position474, tokenIndex474
-					if buffer[position] != rune('A') {
-						goto l458
-					}
-					position++
-				}
-			l474:
-				add(ruleTOCRefHigh, position459)
+				add(ruleInstructionArg, position454)
 			}
 			return true
-		l458:
-			position, tokenIndex = position458, tokenIndex458
+		l453:
+			position, tokenIndex = position453, tokenIndex453
 			return false
 		},
-		/* 34 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		/* 33 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
 		func() bool {
-			position476, tokenIndex476 := position, tokenIndex
+			position467, tokenIndex467 := position, tokenIndex
 			{
-				position477 := position
-				if buffer[position] != rune('.') {
-					goto l476
+				position468 := position
+				if buffer[position] != rune('$') {
+					goto l467
 				}
 				position++
-				if buffer[position] != rune('T') {
-					goto l476
+				if buffer[position] != rune('_') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('G') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l467
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l476
+					goto l467
 				}
 				position++
-				if buffer[position] != rune('C') {
-					goto l476
+				if buffer[position] != rune('B') {
+					goto l467
 				}
 				position++
-				if buffer[position] != rune('.') {
-					goto l476
+				if buffer[position] != rune('A') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('F') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('S') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('A') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('B') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('E') {
+					goto l467
+				}
+				position++
+				if buffer[position] != rune('_') {
+					goto l467
 				}
 				position++
 				if buffer[position] != rune('-') {
-					goto l476
+					goto l467
 				}
 				position++
+				if !_rules[ruleLocalSymbol]() {
+					goto l467
+				}
+				add(ruleGOTLocation, position468)
+			}
+			return true
+		l467:
+			position, tokenIndex = position467, tokenIndex467
+			return false
+		},
+		/* 34 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
+		func() bool {
+			position469, tokenIndex469 := position, tokenIndex
+			{
+				position470 := position
 				{
-					position478, tokenIndex478 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l479
+					position471, tokenIndex471 := position, tokenIndex
+					if buffer[position] != rune('$') {
+						goto l472
 					}
 					position++
-					if buffer[position] != rune('b') {
-						goto l479
+					if !_rules[ruleSymbolName]() {
+						goto l472
+					}
+					if buffer[position] != rune('@') {
+						goto l472
 					}
 					position++
-					goto l478
-				l479:
-					position, tokenIndex = position478, tokenIndex478
-					if buffer[position] != rune('.') {
-						goto l476
+					if buffer[position] != rune('G') {
+						goto l472
 					}
 					position++
-					if buffer[position] != rune('L') {
-						goto l476
+					if buffer[position] != rune('O') {
+						goto l472
+					}
+					position++
+					if buffer[position] != rune('T') {
+						goto l472
 					}
 					position++
 					{
-						position482, tokenIndex482 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l483
+						position473, tokenIndex473 := position, tokenIndex
+						if buffer[position] != rune('O') {
+							goto l473
 						}
 						position++
-						goto l482
-					l483:
-						position, tokenIndex = position482, tokenIndex482
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l484
+						if buffer[position] != rune('F') {
+							goto l473
 						}
 						position++
-						goto l482
-					l484:
-						position, tokenIndex = position482, tokenIndex482
-						if buffer[position] != rune('_') {
-							goto l485
+						if buffer[position] != rune('F') {
+							goto l473
 						}
 						position++
-						goto l482
-					l485:
-						position, tokenIndex = position482, tokenIndex482
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l474
+					l473:
+						position, tokenIndex = position473, tokenIndex473
+					}
+				l474:
+					goto l471
+				l472:
+					position, tokenIndex = position471, tokenIndex471
+					if buffer[position] != rune(':') {
+						goto l469
+					}
+					position++
+					{
+						position475, tokenIndex475 := position, tokenIndex
+						if buffer[position] != rune('g') {
 							goto l476
 						}
 						position++
-					}
-				l482:
-				l480:
-					{
-						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++
+						goto l475
+					l476:
+						position, tokenIndex = position475, tokenIndex475
+						if buffer[position] != rune('G') {
+							goto l469
 						}
-					l486:
-						goto l480
-					l481:
-						position, tokenIndex = position481, tokenIndex481
+						position++
+					}
+				l475:
+					{
+						position477, tokenIndex477 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l478
+						}
+						position++
+						goto l477
+					l478:
+						position, tokenIndex = position477, tokenIndex477
+						if buffer[position] != rune('O') {
+							goto l469
+						}
+						position++
+					}
+				l477:
+					{
+						position479, tokenIndex479 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l480
+						}
+						position++
+						goto l479
+					l480:
+						position, tokenIndex = position479, tokenIndex479
+						if buffer[position] != rune('T') {
+							goto l469
+						}
+						position++
+					}
+				l479:
+					if buffer[position] != rune(':') {
+						goto l469
+					}
+					position++
+					if !_rules[ruleSymbolName]() {
+						goto l469
 					}
 				}
-			l478:
-				if buffer[position] != rune('@') {
-					goto l476
+			l471:
+				add(ruleGOTSymbolOffset, position470)
+			}
+			return true
+		l469:
+			position, tokenIndex = position469, tokenIndex469
+			return false
+		},
+		/* 35 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
+		func() bool {
+			position481, tokenIndex481 := position, tokenIndex
+			{
+				position482 := position
+				{
+					position483, tokenIndex483 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l483
+					}
+					goto l484
+				l483:
+					position, tokenIndex = position483, tokenIndex483
+				}
+			l484:
+				if buffer[position] != rune('{') {
+					goto l481
 				}
 				position++
 				{
-					position490, tokenIndex490 := position, tokenIndex
-					if buffer[position] != rune('l') {
+					position485, tokenIndex485 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l485
+					}
+					position++
+					goto l486
+				l485:
+					position, tokenIndex = position485, tokenIndex485
+				}
+			l486:
+			l487:
+				{
+					position488, tokenIndex488 := position, tokenIndex
+					{
+						position489, tokenIndex489 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l490
+						}
+						position++
+						goto l489
+					l490:
+						position, tokenIndex = position489, tokenIndex489
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l488
+						}
+						position++
+					}
+				l489:
+					goto l487
+				l488:
+					position, tokenIndex = position488, tokenIndex488
+				}
+				if buffer[position] != rune('}') {
+					goto l481
+				}
+				position++
+				add(ruleAVX512Token, position482)
+			}
+			return true
+		l481:
+			position, tokenIndex = position481, tokenIndex481
+			return false
+		},
+		/* 36 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
+		func() bool {
+			position491, tokenIndex491 := position, tokenIndex
+			{
+				position492 := position
+				if buffer[position] != rune('.') {
+					goto l491
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l491
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l491
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l491
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l491
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l491
+				}
+				position++
+				{
+					position493, tokenIndex493 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l494
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l494
+					}
+					position++
+					goto l493
+				l494:
+					position, tokenIndex = position493, tokenIndex493
+					if buffer[position] != rune('.') {
 						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
+						goto l491
 					}
 					position++
 					{
-						position498, tokenIndex498 := position, tokenIndex
+						position497, tokenIndex497 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l498
+						}
+						position++
+						goto l497
+					l498:
+						position, tokenIndex = position497, tokenIndex497
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
 							goto l499
 						}
 						position++
-						goto l498
+						goto l497
 					l499:
-						position, tokenIndex = position498, tokenIndex498
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l497
+						position, tokenIndex = position497, tokenIndex497
+						if buffer[position] != rune('_') {
+							goto l500
+						}
+						position++
+						goto l497
+					l500:
+						position, tokenIndex = position497, tokenIndex497
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l491
 						}
 						position++
 					}
-				l498:
-				l500:
+				l497:
+				l495:
 					{
-						position501, tokenIndex501 := position, tokenIndex
+						position496, tokenIndex496 := position, tokenIndex
 						{
-							position502, tokenIndex502 := position, tokenIndex
+							position501, tokenIndex501 := position, tokenIndex
 							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l502
+							}
+							position++
+							goto l501
+						l502:
+							position, tokenIndex = position501, tokenIndex501
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
 								goto l503
 							}
 							position++
-							goto l502
+							goto l501
 						l503:
-							position, tokenIndex = position502, tokenIndex502
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							position, tokenIndex = position501, tokenIndex501
+							if buffer[position] != rune('_') {
 								goto l504
 							}
 							position++
-							goto l502
+							goto l501
 						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++
+							position, tokenIndex = position501, tokenIndex501
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l496
 							}
-						l505:
+							position++
 						}
-					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 l513
-						}
-						position++
-					l515:
-						{
-							position516, tokenIndex516 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l516
-							}
-							position++
-							goto l515
-						l516:
-							position, tokenIndex = position516, tokenIndex516
-						}
-						{
-							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
-					}
-				l514:
-					goto l496
-				l512:
-					position, tokenIndex = position496, tokenIndex496
-					if buffer[position] != rune('#') {
-						goto l521
-					}
-					position++
-					{
-						position522, tokenIndex522 := position, tokenIndex
-						if buffer[position] != rune('~') {
-							goto l522
-						}
-						position++
-						goto l523
-					l522:
-						position, tokenIndex = position522, tokenIndex522
-					}
-				l523:
-					if buffer[position] != rune('(') {
-						goto l521
-					}
-					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
-						if !_rules[ruleWS]() {
-							goto l526
-						}
-						goto l527
-					l526:
-						position, tokenIndex = position526, tokenIndex526
-					}
-				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
+						goto l495
+					l496:
+						position, tokenIndex = position496, tokenIndex496
 					}
 				}
-			l496:
+			l493:
+				if buffer[position] != rune('@') {
+					goto l491
+				}
+				position++
 				{
-					position528, tokenIndex528 := position, tokenIndex
+					position505, tokenIndex505 := position, tokenIndex
+					if buffer[position] != rune('h') {
+						goto l506
+					}
+					position++
+					goto l505
+				l506:
+					position, tokenIndex = position505, tokenIndex505
+					if buffer[position] != rune('H') {
+						goto l491
+					}
+					position++
+				}
+			l505:
+				{
+					position507, tokenIndex507 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l508
+					}
+					position++
+					goto l507
+				l508:
+					position, tokenIndex = position507, tokenIndex507
+					if buffer[position] != rune('A') {
+						goto l491
+					}
+					position++
+				}
+			l507:
+				add(ruleTOCRefHigh, position492)
+			}
+			return true
+		l491:
+			position, tokenIndex = position491, tokenIndex491
+			return false
+		},
+		/* 37 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		func() bool {
+			position509, tokenIndex509 := position, tokenIndex
+			{
+				position510 := position
+				if buffer[position] != rune('.') {
+					goto l509
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l509
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l509
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l509
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l509
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l509
+				}
+				position++
+				{
+					position511, tokenIndex511 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l512
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l512
+					}
+					position++
+					goto l511
+				l512:
+					position, tokenIndex = position511, tokenIndex511
+					if buffer[position] != rune('.') {
+						goto l509
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l509
+					}
+					position++
 					{
-						position529, tokenIndex529 := position, tokenIndex
-						if buffer[position] != rune('f') {
-							goto l530
+						position515, tokenIndex515 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l516
 						}
 						position++
-						goto l529
-					l530:
-						position, tokenIndex = position529, tokenIndex529
-						if buffer[position] != rune('b') {
-							goto l531
+						goto l515
+					l516:
+						position, tokenIndex = position515, tokenIndex515
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l517
 						}
 						position++
-						goto l529
-					l531:
-						position, tokenIndex = position529, tokenIndex529
-						if buffer[position] != rune(':') {
+						goto l515
+					l517:
+						position, tokenIndex = position515, tokenIndex515
+						if buffer[position] != rune('_') {
+							goto l518
+						}
+						position++
+						goto l515
+					l518:
+						position, tokenIndex = position515, tokenIndex515
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l509
+						}
+						position++
+					}
+				l515:
+				l513:
+					{
+						position514, tokenIndex514 := position, tokenIndex
+						{
+							position519, tokenIndex519 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l520
+							}
+							position++
+							goto l519
+						l520:
+							position, tokenIndex = position519, tokenIndex519
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l521
+							}
+							position++
+							goto l519
+						l521:
+							position, tokenIndex = position519, tokenIndex519
+							if buffer[position] != rune('_') {
+								goto l522
+							}
+							position++
+							goto l519
+						l522:
+							position, tokenIndex = position519, tokenIndex519
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l514
+							}
+							position++
+						}
+					l519:
+						goto l513
+					l514:
+						position, tokenIndex = position514, tokenIndex514
+					}
+				}
+			l511:
+				if buffer[position] != rune('@') {
+					goto l509
+				}
+				position++
+				{
+					position523, tokenIndex523 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l524
+					}
+					position++
+					goto l523
+				l524:
+					position, tokenIndex = position523, tokenIndex523
+					if buffer[position] != rune('L') {
+						goto l509
+					}
+					position++
+				}
+			l523:
+				add(ruleTOCRefLow, position510)
+			}
+			return true
+		l509:
+			position, tokenIndex = position509, tokenIndex509
+			return false
+		},
+		/* 38 IndirectionIndicator <- <'*'> */
+		func() bool {
+			position525, tokenIndex525 := position, tokenIndex
+			{
+				position526 := position
+				if buffer[position] != rune('*') {
+					goto l525
+				}
+				position++
+				add(ruleIndirectionIndicator, position526)
+			}
+			return true
+		l525:
+			position, tokenIndex = position525, tokenIndex525
+			return false
+		},
+		/* 39 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 {
+			position527, tokenIndex527 := position, tokenIndex
+			{
+				position528 := position
+				{
+					position529, tokenIndex529 := position, tokenIndex
+					if buffer[position] != rune('%') {
+						goto l530
+					}
+					position++
+					{
+						position531, tokenIndex531 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
 							goto l532
 						}
 						position++
-						goto l529
+						goto l531
 					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, tokenIndex = position531, tokenIndex531
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l530
 						}
 						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
+				l531:
+				l533:
 					{
-						position539, tokenIndex539 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l540
+						position534, tokenIndex534 := position, tokenIndex
+						{
+							position535, tokenIndex535 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l536
+							}
+							position++
+							goto l535
+						l536:
+							position, tokenIndex = position535, tokenIndex535
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l537
+							}
+							position++
+							goto l535
+						l537:
+							position, tokenIndex = position535, tokenIndex535
+							{
+								position538, tokenIndex538 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l539
+								}
+								position++
+								goto l538
+							l539:
+								position, tokenIndex = position538, tokenIndex538
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l534
+								}
+								position++
+							}
+						l538:
 						}
-						position++
-						goto l539
-					l540:
-						position, tokenIndex = position539, tokenIndex539
-						if buffer[position] != rune('L') {
-							goto l538
-						}
-						position++
+					l535:
+						goto l533
+					l534:
+						position, tokenIndex = position534, tokenIndex534
 					}
-				l539:
+					goto l529
+				l530:
+					position, tokenIndex = position529, tokenIndex529
 					{
 						position541, tokenIndex541 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l542
+						if buffer[position] != rune('$') {
+							goto l541
 						}
 						position++
-						goto l541
-					l542:
+						goto l542
+					l541:
 						position, tokenIndex = position541, tokenIndex541
-						if buffer[position] != rune('S') {
-							goto l538
-						}
-						position++
 					}
-				l541:
+				l542:
 					{
 						position543, tokenIndex543 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if !_rules[ruleOffset]() {
 							goto l544
 						}
-						position++
+						if !_rules[ruleOffset]() {
+							goto l544
+						}
 						goto l543
 					l544:
 						position, tokenIndex = position543, tokenIndex543
-						if buffer[position] != rune('L') {
-							goto l538
+						if !_rules[ruleOffset]() {
+							goto l540
 						}
-						position++
 					}
 				l543:
-					goto l537
-				l538:
-					position, tokenIndex = position537, tokenIndex537
+					goto l529
+				l540:
+					position, tokenIndex = position529, tokenIndex529
+					if buffer[position] != rune('#') {
+						goto l545
+					}
+					position++
+					if !_rules[ruleOffset]() {
+						goto l545
+					}
 					{
 						position546, tokenIndex546 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l547
+						if buffer[position] != rune('*') {
+							goto l546
 						}
 						position++
-						goto l546
-					l547:
-						position, tokenIndex = position546, tokenIndex546
-						if buffer[position] != rune('S') {
-							goto l545
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l546
 						}
 						position++
-					}
-				l546:
-					{
-						position548, tokenIndex548 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l549
+					l548:
+						{
+							position549, tokenIndex549 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l549
+							}
+							position++
+							goto l548
+						l549:
+							position, tokenIndex = position549, tokenIndex549
 						}
-						position++
-						goto l548
-					l549:
-						position, tokenIndex = position548, tokenIndex548
-						if buffer[position] != rune('X') {
-							goto l545
-						}
-						position++
-					}
-				l548:
-					{
-						position550, tokenIndex550 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						{
+							position550, tokenIndex550 := position, tokenIndex
+							if buffer[position] != rune('-') {
+								goto l550
+							}
+							position++
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l550
+							}
+							position++
+						l552:
+							{
+								position553, tokenIndex553 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l553
+								}
+								position++
+								goto l552
+							l553:
+								position, tokenIndex = position553, tokenIndex553
+							}
 							goto l551
+						l550:
+							position, tokenIndex = position550, tokenIndex550
 						}
-						position++
-						goto l550
 					l551:
-						position, tokenIndex = position550, tokenIndex550
-						if buffer[position] != rune('T') {
-							goto l545
-						}
-						position++
+						goto l547
+					l546:
+						position, tokenIndex = position546, tokenIndex546
 					}
-				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
+				l547:
+					goto l529
 				l545:
-					position, tokenIndex = position537, tokenIndex537
+					position, tokenIndex = position529, tokenIndex529
+					if buffer[position] != rune('#') {
+						goto l554
+					}
+					position++
 					{
 						position555, tokenIndex555 := position, tokenIndex
-						if buffer[position] != rune('u') {
-							goto l556
+						if buffer[position] != rune('~') {
+							goto l555
 						}
 						position++
-						goto l555
-					l556:
+						goto l556
+					l555:
 						position, tokenIndex = position555, tokenIndex555
-						if buffer[position] != rune('U') {
-							goto l554
-						}
-						position++
 					}
-				l555:
+				l556:
+					if buffer[position] != rune('(') {
+						goto l554
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l554
+					}
+					position++
 					{
 						position557, tokenIndex557 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l558
+						if !_rules[ruleWS]() {
+							goto l557
 						}
-						position++
-						goto l557
-					l558:
+						goto l558
+					l557:
 						position, tokenIndex = position557, tokenIndex557
-						if buffer[position] != rune('X') {
-							goto l554
-						}
-						position++
 					}
-				l557:
+				l558:
+					if buffer[position] != rune('<') {
+						goto l554
+					}
+					position++
+					if buffer[position] != rune('<') {
+						goto l554
+					}
+					position++
 					{
 						position559, tokenIndex559 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l560
+						if !_rules[ruleWS]() {
+							goto l559
 						}
-						position++
-						goto l559
-					l560:
+						goto l560
+					l559:
 						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++
+				l560:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l554
 					}
-				l561:
-					goto l537
+					position++
+					if buffer[position] != rune(')') {
+						goto l554
+					}
+					position++
+					goto l529
 				l554:
-					position, tokenIndex = position537, tokenIndex537
+					position, tokenIndex = position529, tokenIndex529
+					if !_rules[ruleARMRegister]() {
+						goto l527
+					}
+				}
+			l529:
+				{
+					position561, tokenIndex561 := position, tokenIndex
 					{
-						position564, tokenIndex564 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						position562, tokenIndex562 := position, tokenIndex
+						if buffer[position] != rune('f') {
+							goto l563
+						}
+						position++
+						goto l562
+					l563:
+						position, tokenIndex = position562, tokenIndex562
+						if buffer[position] != rune('b') {
+							goto l564
+						}
+						position++
+						goto l562
+					l564:
+						position, tokenIndex = position562, tokenIndex562
+						if buffer[position] != rune(':') {
 							goto l565
 						}
 						position++
-						goto l564
+						goto l562
 					l565:
-						position, tokenIndex = position564, tokenIndex564
-						if buffer[position] != rune('U') {
-							goto l563
+						position, tokenIndex = position562, tokenIndex562
+						if buffer[position] != rune('(') {
+							goto l566
 						}
 						position++
-					}
-				l564:
-					{
-						position566, tokenIndex566 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						goto l562
+					l566:
+						position, tokenIndex = position562, tokenIndex562
+						if buffer[position] != rune('+') {
 							goto l567
 						}
 						position++
-						goto l566
+						goto l562
 					l567:
-						position, tokenIndex = position566, tokenIndex566
-						if buffer[position] != rune('X') {
-							goto l563
+						position, tokenIndex = position562, tokenIndex562
+						if buffer[position] != rune('-') {
+							goto l561
 						}
 						position++
 					}
-				l566:
+				l562:
+					goto l527
+				l561:
+					position, tokenIndex = position561, tokenIndex561
+				}
+				add(ruleRegisterOrConstant, position528)
+			}
+			return true
+		l527:
+			position, tokenIndex = position527, tokenIndex527
+			return false
+		},
+		/* 40 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 {
+			position568, tokenIndex568 := position, tokenIndex
+			{
+				position569 := position
+				{
+					position570, tokenIndex570 := position, tokenIndex
 					{
-						position568, tokenIndex568 := position, tokenIndex
-						if buffer[position] != rune('t') {
-							goto l569
+						position572, tokenIndex572 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l573
 						}
 						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 l572
+					l573:
+						position, tokenIndex = position572, tokenIndex572
+						if buffer[position] != rune('L') {
 							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
+				l572:
 					{
-						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
+						position574, tokenIndex574 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l576
+							goto l575
 						}
 						position++
-						goto l575
-					l576:
-						position, tokenIndex = position575, tokenIndex575
+						goto l574
+					l575:
+						position, tokenIndex = position574, tokenIndex574
 						if buffer[position] != rune('S') {
-							goto l572
+							goto l571
 						}
 						position++
 					}
-				l575:
+				l574:
 					{
-						position577, tokenIndex577 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						position576, tokenIndex576 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l577
+						}
+						position++
+						goto l576
+					l577:
+						position, tokenIndex = position576, tokenIndex576
+						if buffer[position] != rune('L') {
+							goto l571
+						}
+						position++
+					}
+				l576:
+					goto l570
+				l571:
+					position, tokenIndex = position570, tokenIndex570
+					{
+						position579, tokenIndex579 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l580
+						}
+						position++
+						goto l579
+					l580:
+						position, tokenIndex = position579, tokenIndex579
+						if buffer[position] != rune('S') {
 							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
+						position581, tokenIndex581 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l582
 						}
 						position++
-						goto l586
-					l587:
-						position, tokenIndex = position586, tokenIndex586
-						if buffer[position] != rune('A') {
-							goto l535
+						goto l581
+					l582:
+						position, tokenIndex = position581, tokenIndex581
+						if buffer[position] != rune('X') {
+							goto l578
 						}
 						position++
 					}
-				l586:
+				l581:
+					{
+						position583, tokenIndex583 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l584
+						}
+						position++
+						goto l583
+					l584:
+						position, tokenIndex = position583, tokenIndex583
+						if buffer[position] != rune('T') {
+							goto l578
+						}
+						position++
+					}
+				l583:
+					{
+						position585, tokenIndex585 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l586
+						}
+						position++
+						goto l585
+					l586:
+						position, tokenIndex = position585, tokenIndex585
+						if buffer[position] != rune('W') {
+							goto l578
+						}
+						position++
+					}
+				l585:
+					goto l570
+				l578:
+					position, tokenIndex = position570, tokenIndex570
 					{
 						position588, tokenIndex588 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('u') {
 							goto l589
 						}
 						position++
 						goto l588
 					l589:
 						position, tokenIndex = position588, tokenIndex588
-						if buffer[position] != rune('S') {
-							goto l535
+						if buffer[position] != rune('U') {
+							goto l587
 						}
 						position++
 					}
 				l588:
 					{
 						position590, tokenIndex590 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						if buffer[position] != rune('x') {
 							goto l591
 						}
 						position++
 						goto l590
 					l591:
 						position, tokenIndex = position590, tokenIndex590
-						if buffer[position] != rune('R') {
-							goto l535
+						if buffer[position] != rune('X') {
+							goto l587
 						}
 						position++
 					}
 				l590:
-				}
-			l537:
-				{
-					position592, tokenIndex592 := position, tokenIndex
-					if !_rules[ruleWS]() {
+					{
+						position592, tokenIndex592 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l593
+						}
+						position++
 						goto l592
+					l593:
+						position, tokenIndex = position592, tokenIndex592
+						if buffer[position] != rune('T') {
+							goto l587
+						}
+						position++
 					}
-					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
-		l535:
-			position, tokenIndex = position535, tokenIndex535
-			return false
-		},
-		/* 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 {
-			position594, tokenIndex594 := position, tokenIndex
-			{
-				position595 := position
-				{
-					position596, tokenIndex596 := position, tokenIndex
 					{
-						position598, tokenIndex598 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l599
+						position594, tokenIndex594 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l595
 						}
 						position++
-						goto l598
-					l599:
-						position, tokenIndex = position598, tokenIndex598
-						if buffer[position] != rune('S') {
-							goto l597
+						goto l594
+					l595:
+						position, tokenIndex = position594, tokenIndex594
+						if buffer[position] != rune('W') {
+							goto l587
 						}
 						position++
 					}
-				l598:
+				l594:
+					goto l570
+				l587:
+					position, tokenIndex = position570, tokenIndex570
 					{
-						position600, tokenIndex600 := position, tokenIndex
-						if buffer[position] != rune('p') {
-							goto l601
+						position597, tokenIndex597 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l598
 						}
 						position++
-						goto l600
-					l601:
-						position, tokenIndex = position600, tokenIndex600
-						if buffer[position] != rune('P') {
-							goto l597
+						goto l597
+					l598:
+						position, tokenIndex = position597, tokenIndex597
+						if buffer[position] != rune('U') {
+							goto l596
 						}
 						position++
 					}
-				l600:
-					goto l596
 				l597:
-					position, tokenIndex = position596, tokenIndex596
+					{
+						position599, tokenIndex599 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l600
+						}
+						position++
+						goto l599
+					l600:
+						position, tokenIndex = position599, tokenIndex599
+						if buffer[position] != rune('X') {
+							goto l596
+						}
+						position++
+					}
+				l599:
+					{
+						position601, tokenIndex601 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l602
+						}
+						position++
+						goto l601
+					l602:
+						position, tokenIndex = position601, tokenIndex601
+						if buffer[position] != rune('T') {
+							goto l596
+						}
+						position++
+					}
+				l601:
 					{
 						position603, tokenIndex603 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('b') {
 							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
+						if buffer[position] != rune('B') {
+							goto l596
 						}
 						position++
 					}
 				l603:
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l602
+					goto l570
+				l596:
+					position, tokenIndex = position570, tokenIndex570
+					{
+						position606, tokenIndex606 := position, tokenIndex
+						if buffer[position] != rune('l') {
+							goto l607
+						}
+						position++
+						goto l606
+					l607:
+						position, tokenIndex = position606, tokenIndex606
+						if buffer[position] != rune('L') {
+							goto l605
+						}
+						position++
 					}
-					position++
+				l606:
 					{
 						position608, tokenIndex608 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l608
+						if buffer[position] != rune('s') {
+							goto l609
 						}
 						position++
-						goto l609
-					l608:
+						goto l608
+					l609:
 						position, tokenIndex = position608, tokenIndex608
+						if buffer[position] != rune('S') {
+							goto l605
+						}
+						position++
 					}
-				l609:
-					goto l596
-				l602:
-					position, tokenIndex = position596, tokenIndex596
+				l608:
 					{
-						position611, tokenIndex611 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l612
+						position610, tokenIndex610 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l611
 						}
 						position++
-						goto l611
-					l612:
-						position, tokenIndex = position611, tokenIndex611
-						if buffer[position] != rune('X') {
-							goto l610
+						goto l610
+					l611:
+						position, tokenIndex = position610, tokenIndex610
+						if buffer[position] != rune('R') {
+							goto l605
 						}
 						position++
 					}
-				l611:
+				l610:
+					goto l570
+				l605:
+					position, tokenIndex = position570, tokenIndex570
 					{
 						position613, tokenIndex613 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('r') {
 							goto l614
 						}
 						position++
 						goto l613
 					l614:
 						position, tokenIndex = position613, tokenIndex613
-						if buffer[position] != rune('Z') {
-							goto l610
+						if buffer[position] != rune('R') {
+							goto l612
 						}
 						position++
 					}
 				l613:
 					{
 						position615, tokenIndex615 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						if buffer[position] != rune('o') {
 							goto l616
 						}
 						position++
 						goto l615
 					l616:
 						position, tokenIndex = position615, tokenIndex615
-						if buffer[position] != rune('R') {
-							goto l610
+						if buffer[position] != rune('O') {
+							goto l612
 						}
 						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
+						position617, tokenIndex617 := position, tokenIndex
 						if buffer[position] != rune('r') {
-							goto l623
+							goto l618
 						}
 						position++
-						goto l622
-					l623:
-						position, tokenIndex = position622, tokenIndex622
+						goto l617
+					l618:
+						position, tokenIndex = position617, tokenIndex617
 						if buffer[position] != rune('R') {
-							goto l617
+							goto l612
 						}
 						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++
+					goto l570
+				l612:
+					position, tokenIndex = position570, tokenIndex570
 					{
-						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
+						position619, tokenIndex619 := position, tokenIndex
+						if buffer[position] != rune('a') {
+							goto l620
 						}
 						position++
-						{
-							position629, tokenIndex629 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l629
-							}
-							goto l630
-						l629:
-							position, tokenIndex = position629, tokenIndex629
+						goto l619
+					l620:
+						position, tokenIndex = position619, tokenIndex619
+						if buffer[position] != rune('A') {
+							goto l568
 						}
-					l630:
-						if !_rules[ruleARMVectorRegister]() {
-							goto l628
-						}
-						goto l627
-					l628:
-						position, tokenIndex = position628, tokenIndex628
+						position++
 					}
+				l619:
 					{
-						position631, tokenIndex631 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l631
+						position621, tokenIndex621 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l622
 						}
-						goto l632
-					l631:
-						position, tokenIndex = position631, tokenIndex631
+						position++
+						goto l621
+					l622:
+						position, tokenIndex = position621, tokenIndex621
+						if buffer[position] != rune('S') {
+							goto l568
+						}
+						position++
 					}
-				l632:
-					if buffer[position] != rune('}') {
-						goto l594
-					}
-					position++
+				l621:
 					{
-						position633, tokenIndex633 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l633
+						position623, tokenIndex623 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l624
 						}
 						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l633
+						goto l623
+					l624:
+						position, tokenIndex = position623, tokenIndex623
+						if buffer[position] != rune('R') {
+							goto l568
 						}
 						position++
-						if buffer[position] != rune(']') {
-							goto l633
-						}
-						position++
-						goto l634
-					l633:
-						position, tokenIndex = position633, tokenIndex633
 					}
-				l634:
+				l623:
 				}
-			l596:
-				add(ruleARMRegister, position595)
+			l570:
+				{
+					position625, tokenIndex625 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l625
+					}
+					if buffer[position] != rune('#') {
+						goto l625
+					}
+					position++
+					if !_rules[ruleOffset]() {
+						goto l625
+					}
+					goto l626
+				l625:
+					position, tokenIndex = position625, tokenIndex625
+				}
+			l626:
+				add(ruleARMConstantTweak, position569)
 			}
 			return true
-		l594:
-			position, tokenIndex = position594, tokenIndex594
+		l568:
+			position, tokenIndex = position568, tokenIndex568
 			return false
 		},
-		/* 39 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
+		/* 41 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] [0-9]? ']')?))> */
 		func() bool {
-			position635, tokenIndex635 := position, tokenIndex
+			position627, tokenIndex627 := position, tokenIndex
 			{
-				position636 := position
+				position628 := position
 				{
-					position637, tokenIndex637 := position, tokenIndex
-					if buffer[position] != rune('v') {
-						goto l638
+					position629, tokenIndex629 := position, tokenIndex
+					{
+						position631, tokenIndex631 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l632
+						}
+						position++
+						goto l631
+					l632:
+						position, tokenIndex = position631, tokenIndex631
+						if buffer[position] != rune('S') {
+							goto l630
+						}
+						position++
 					}
-					position++
-					goto l637
-				l638:
-					position, tokenIndex = position637, tokenIndex637
-					if buffer[position] != rune('V') {
+				l631:
+					{
+						position633, tokenIndex633 := position, tokenIndex
+						if buffer[position] != rune('p') {
+							goto l634
+						}
+						position++
+						goto l633
+					l634:
+						position, tokenIndex = position633, tokenIndex633
+						if buffer[position] != rune('P') {
+							goto l630
+						}
+						position++
+					}
+				l633:
+					goto l629
+				l630:
+					position, tokenIndex = position629, tokenIndex629
+					{
+						position636, tokenIndex636 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l637
+						}
+						position++
+						goto l636
+					l637:
+						position, tokenIndex = position636, tokenIndex636
+						if buffer[position] != rune('w') {
+							goto l638
+						}
+						position++
+						goto l636
+					l638:
+						position, tokenIndex = position636, tokenIndex636
+						if buffer[position] != rune('d') {
+							goto l639
+						}
+						position++
+						goto l636
+					l639:
+						position, tokenIndex = position636, tokenIndex636
+						if buffer[position] != rune('q') {
+							goto l640
+						}
+						position++
+						goto l636
+					l640:
+						position, tokenIndex = position636, tokenIndex636
+						if buffer[position] != rune('s') {
+							goto l635
+						}
+						position++
+					}
+				l636:
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l635
 					}
 					position++
-				}
-			l637:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l635
-				}
-				position++
-				{
-					position639, tokenIndex639 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l639
-					}
-					position++
-					goto l640
-				l639:
-					position, tokenIndex = position639, tokenIndex639
-				}
-			l640:
-				{
-					position641, tokenIndex641 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l641
-					}
-					position++
-				l643:
 					{
-						position644, tokenIndex644 := position, tokenIndex
+						position641, tokenIndex641 := 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++
+						goto l642
+					l641:
+						position, tokenIndex = position641, tokenIndex641
 					}
-				l645:
+				l642:
+					goto l629
+				l635:
+					position, tokenIndex = position629, tokenIndex629
 					{
-						position650, tokenIndex650 := position, tokenIndex
-						if buffer[position] != rune('[') {
-							goto l650
+						position644, tokenIndex644 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l645
 						}
 						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l650
+						goto l644
+					l645:
+						position, tokenIndex = position644, tokenIndex644
+						if buffer[position] != rune('X') {
+							goto l643
 						}
 						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
+					}
+				l644:
+					{
+						position646, tokenIndex646 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l647
 						}
-					l653:
-						if buffer[position] != rune(']') {
-							goto l650
+						position++
+						goto l646
+					l647:
+						position, tokenIndex = position646, tokenIndex646
+						if buffer[position] != rune('Z') {
+							goto l643
+						}
+						position++
+					}
+				l646:
+					{
+						position648, tokenIndex648 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l649
+						}
+						position++
+						goto l648
+					l649:
+						position, tokenIndex = position648, tokenIndex648
+						if buffer[position] != rune('R') {
+							goto l643
+						}
+						position++
+					}
+				l648:
+					goto l629
+				l643:
+					position, tokenIndex = position629, tokenIndex629
+					{
+						position651, tokenIndex651 := position, tokenIndex
+						if buffer[position] != rune('w') {
+							goto l652
 						}
 						position++
 						goto l651
-					l650:
-						position, tokenIndex = position650, tokenIndex650
+					l652:
+						position, tokenIndex = position651, tokenIndex651
+						if buffer[position] != rune('W') {
+							goto l650
+						}
+						position++
 					}
 				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]() {
+					{
+						position653, tokenIndex653 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l654
+						}
+						position++
+						goto l653
+					l654:
+						position, tokenIndex = position653, tokenIndex653
+						if buffer[position] != rune('Z') {
+							goto l650
+						}
+						position++
+					}
+				l653:
+					{
+						position655, tokenIndex655 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l656
+						}
+						position++
+						goto l655
+					l656:
+						position, tokenIndex = position655, tokenIndex655
+						if buffer[position] != rune('R') {
+							goto l650
+						}
+						position++
+					}
+				l655:
+					goto l629
+				l650:
+					position, tokenIndex = position629, tokenIndex629
+					if !_rules[ruleARMVectorRegister]() {
 						goto l657
 					}
-					if !_rules[ruleBaseIndexScale]() {
-						goto l657
-					}
-					goto l656
+					goto l629
 				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, tokenIndex = position629, tokenIndex629
+					if buffer[position] != rune('{') {
+						goto l627
 					}
 					position++
-					goto l670
-				l669:
-					position, tokenIndex = position669, tokenIndex669
+					{
+						position658, tokenIndex658 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l658
+						}
+						goto l659
+					l658:
+						position, tokenIndex = position658, tokenIndex658
+					}
+				l659:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l627
+					}
+				l660:
+					{
+						position661, tokenIndex661 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l661
+						}
+						position++
+						{
+							position662, tokenIndex662 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l662
+							}
+							goto l663
+						l662:
+							position, tokenIndex = position662, tokenIndex662
+						}
+					l663:
+						if !_rules[ruleARMVectorRegister]() {
+							goto l661
+						}
+						goto l660
+					l661:
+						position, tokenIndex = position661, tokenIndex661
+					}
+					{
+						position664, tokenIndex664 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l664
+						}
+						goto l665
+					l664:
+						position, tokenIndex = position664, tokenIndex664
+					}
+				l665:
+					if buffer[position] != rune('}') {
+						goto l627
+					}
+					position++
+					{
+						position666, tokenIndex666 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l666
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l666
+						}
+						position++
+						{
+							position668, tokenIndex668 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l668
+							}
+							position++
+							goto l669
+						l668:
+							position, tokenIndex = position668, tokenIndex668
+						}
+					l669:
+						if buffer[position] != rune(']') {
+							goto l666
+						}
+						position++
+						goto l667
+					l666:
+						position, tokenIndex = position666, tokenIndex666
+					}
+				l667:
 				}
-			l670:
+			l629:
+				add(ruleARMRegister, position628)
+			}
+			return true
+		l627:
+			position, tokenIndex = position627, tokenIndex627
+			return false
+		},
+		/* 42 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
+		func() bool {
+			position670, tokenIndex670 := position, tokenIndex
+			{
+				position671 := position
 				{
-					position673, tokenIndex673 := position, tokenIndex
-					if !_rules[ruleLocalSymbol]() {
+					position672, tokenIndex672 := position, tokenIndex
+					if buffer[position] != rune('v') {
+						goto l673
+					}
+					position++
+					goto l672
+				l673:
+					position, tokenIndex = position672, tokenIndex672
+					if buffer[position] != rune('V') {
+						goto l670
+					}
+					position++
+				}
+			l672:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l670
+				}
+				position++
+				{
+					position674, tokenIndex674 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
 						goto l674
 					}
-					goto l673
+					position++
+					goto l675
 				l674:
-					position, tokenIndex = position673, tokenIndex673
-					if !_rules[ruleSymbolName]() {
-						goto l667
-					}
+					position, tokenIndex = position674, tokenIndex674
 				}
-			l673:
 			l675:
 				{
 					position676, tokenIndex676 := position, tokenIndex
-					if !_rules[ruleOffset]() {
+					if buffer[position] != rune('.') {
 						goto l676
 					}
-					goto l675
+					position++
+				l678:
+					{
+						position679, tokenIndex679 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l679
+						}
+						position++
+						goto l678
+					l679:
+						position, tokenIndex = position679, tokenIndex679
+					}
+					{
+						position680, tokenIndex680 := position, tokenIndex
+						if buffer[position] != rune('b') {
+							goto l681
+						}
+						position++
+						goto l680
+					l681:
+						position, tokenIndex = position680, tokenIndex680
+						if buffer[position] != rune('s') {
+							goto l682
+						}
+						position++
+						goto l680
+					l682:
+						position, tokenIndex = position680, tokenIndex680
+						if buffer[position] != rune('d') {
+							goto l683
+						}
+						position++
+						goto l680
+					l683:
+						position, tokenIndex = position680, tokenIndex680
+						if buffer[position] != rune('h') {
+							goto l684
+						}
+						position++
+						goto l680
+					l684:
+						position, tokenIndex = position680, tokenIndex680
+						if buffer[position] != rune('q') {
+							goto l676
+						}
+						position++
+					}
+				l680:
+					{
+						position685, tokenIndex685 := position, tokenIndex
+						if buffer[position] != rune('[') {
+							goto l685
+						}
+						position++
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l685
+						}
+						position++
+						{
+							position687, tokenIndex687 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l687
+							}
+							position++
+							goto l688
+						l687:
+							position, tokenIndex = position687, tokenIndex687
+						}
+					l688:
+						if buffer[position] != rune(']') {
+							goto l685
+						}
+						position++
+						goto l686
+					l685:
+						position, tokenIndex = position685, tokenIndex685
+					}
+				l686:
+					goto l677
 				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)
+			l677:
+				add(ruleARMVectorRegister, position671)
 			}
 			return true
-		l667:
-			position, tokenIndex = position667, tokenIndex667
+		l670:
+			position, tokenIndex = position670, tokenIndex670
 			return false
 		},
-		/* 42 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		/* 43 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position681, tokenIndex681 := position, tokenIndex
+			position689, tokenIndex689 := position, tokenIndex
 			{
-				position682 := position
-				if buffer[position] != rune(':') {
-					goto l681
-				}
-				position++
+				position690 := position
 				{
-					position683, tokenIndex683 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l684
+					position691, tokenIndex691 := position, tokenIndex
+					if !_rules[ruleSymbolRef]() {
+						goto l692
 					}
-					position++
-					goto l683
-				l684:
-					position, tokenIndex = position683, tokenIndex683
-					if buffer[position] != rune('L') {
-						goto l681
+					if !_rules[ruleBaseIndexScale]() {
+						goto l692
 					}
-					position++
-				}
-			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 l681
-				}
-				position++
-				{
-					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
-		l681:
-			position, tokenIndex = position681, tokenIndex681
-			return false
-		},
-		/* 43 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset ('*' [0-9]+)?) / ARMGOTLow12 / 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(',') {
+				l692:
+					position, tokenIndex = position691, tokenIndex691
+					if !_rules[ruleSymbolRef]() {
 						goto l693
 					}
-					position++
-					{
-						position695, tokenIndex695 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l695
-						}
-						goto l696
-					l695:
-						position, tokenIndex = position695, tokenIndex695
+					goto l691
+				l693:
+					position, tokenIndex = position691, tokenIndex691
+					if !_rules[ruleLow12BitsSymbolRef]() {
+						goto l694
 					}
+					goto l691
+				l694:
+					position, tokenIndex = position691, tokenIndex691
 				l696:
 					{
 						position697, tokenIndex697 := position, tokenIndex
-						if buffer[position] != rune('#') {
-							goto l698
-						}
-						position++
 						if !_rules[ruleOffset]() {
-							goto l698
+							goto l697
 						}
-						{
-							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:
+						goto l696
+					l697:
 						position, tokenIndex = position697, tokenIndex697
-						if !_rules[ruleARMGOTLow12]() {
-							goto l703
-						}
-						goto l697
-					l703:
-						position, tokenIndex = position697, tokenIndex697
-						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l704
-						}
-						goto l697
-					l704:
-						position, tokenIndex = position697, tokenIndex697
-						if !_rules[ruleARMRegister]() {
-							goto l693
-						}
 					}
-				l697:
-					{
-						position705, tokenIndex705 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l705
-						}
-						position++
-						{
-							position707, tokenIndex707 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l707
-							}
-							goto l708
-						l707:
-							position, tokenIndex = position707, tokenIndex707
-						}
-					l708:
-						if !_rules[ruleARMConstantTweak]() {
-							goto l705
-						}
-						goto l706
-					l705:
-						position, tokenIndex = position705, tokenIndex705
+					if !_rules[ruleBaseIndexScale]() {
+						goto l695
 					}
-				l706:
-					goto l694
-				l693:
-					position, tokenIndex = position693, tokenIndex693
-				}
-			l694:
-				if buffer[position] != rune(']') {
 					goto l691
-				}
-				position++
-				{
-					position709, tokenIndex709 := position, tokenIndex
-					if !_rules[ruleARMPostincrement]() {
-						goto l709
+				l695:
+					position, tokenIndex = position691, tokenIndex691
+					if !_rules[ruleSegmentRegister]() {
+						goto l698
 					}
-					goto l710
-				l709:
-					position, tokenIndex = position709, tokenIndex709
+					if !_rules[ruleOffset]() {
+						goto l698
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l698
+					}
+					goto l691
+				l698:
+					position, tokenIndex = position691, tokenIndex691
+					if !_rules[ruleSegmentRegister]() {
+						goto l699
+					}
+					if !_rules[ruleBaseIndexScale]() {
+						goto l699
+					}
+					goto l691
+				l699:
+					position, tokenIndex = position691, tokenIndex691
+					if !_rules[ruleSegmentRegister]() {
+						goto l700
+					}
+					if !_rules[ruleOffset]() {
+						goto l700
+					}
+					goto l691
+				l700:
+					position, tokenIndex = position691, tokenIndex691
+					if !_rules[ruleARMBaseIndexScale]() {
+						goto l701
+					}
+					goto l691
+				l701:
+					position, tokenIndex = position691, tokenIndex691
+					if !_rules[ruleBaseIndexScale]() {
+						goto l689
+					}
 				}
-			l710:
-				add(ruleARMBaseIndexScale, position692)
+			l691:
+				add(ruleMemoryRef, position690)
 			}
 			return true
-		l691:
-			position, tokenIndex = position691, tokenIndex691
+		l689:
+			position, tokenIndex = position689, tokenIndex689
 			return false
 		},
-		/* 44 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		/* 44 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
 		func() bool {
-			position711, tokenIndex711 := position, tokenIndex
+			position702, tokenIndex702 := position, tokenIndex
 			{
-				position712 := position
+				position703 := position
+				{
+					position704, tokenIndex704 := position, tokenIndex
+				l706:
+					{
+						position707, tokenIndex707 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l707
+						}
+						goto l706
+					l707:
+						position, tokenIndex = position707, tokenIndex707
+					}
+					if buffer[position] != rune('+') {
+						goto l704
+					}
+					position++
+					goto l705
+				l704:
+					position, tokenIndex = position704, tokenIndex704
+				}
+			l705:
+				{
+					position708, tokenIndex708 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l709
+					}
+					goto l708
+				l709:
+					position, tokenIndex = position708, tokenIndex708
+					if !_rules[ruleSymbolName]() {
+						goto l702
+					}
+				}
+			l708:
+			l710:
+				{
+					position711, tokenIndex711 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l711
+					}
+					goto l710
+				l711:
+					position, tokenIndex = position711, tokenIndex711
+				}
+				{
+					position712, tokenIndex712 := position, tokenIndex
+					if buffer[position] != rune('@') {
+						goto l712
+					}
+					position++
+					if !_rules[ruleSection]() {
+						goto l712
+					}
+				l714:
+					{
+						position715, tokenIndex715 := position, tokenIndex
+						if !_rules[ruleOffset]() {
+							goto l715
+						}
+						goto l714
+					l715:
+						position, tokenIndex = position715, tokenIndex715
+					}
+					goto l713
+				l712:
+					position, tokenIndex = position712, tokenIndex712
+				}
+			l713:
+				add(ruleSymbolRef, position703)
+			}
+			return true
+		l702:
+			position, tokenIndex = position702, tokenIndex702
+			return false
+		},
+		/* 45 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		func() bool {
+			position716, tokenIndex716 := position, tokenIndex
+			{
+				position717 := position
 				if buffer[position] != rune(':') {
-					goto l711
+					goto l716
 				}
 				position++
 				{
-					position713, tokenIndex713 := position, tokenIndex
-					if buffer[position] != rune('g') {
-						goto l714
+					position718, tokenIndex718 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l719
 					}
 					position++
-					goto l713
-				l714:
-					position, tokenIndex = position713, tokenIndex713
-					if buffer[position] != rune('G') {
-						goto l711
-					}
-					position++
-				}
-			l713:
-				{
-					position715, tokenIndex715 := position, tokenIndex
-					if buffer[position] != rune('o') {
+					goto l718
+				l719:
+					position, tokenIndex = position718, tokenIndex718
+					if buffer[position] != rune('L') {
 						goto l716
 					}
 					position++
-					goto l715
-				l716:
-					position, tokenIndex = position715, tokenIndex715
-					if buffer[position] != rune('O') {
-						goto l711
-					}
-					position++
 				}
-			l715:
+			l718:
 				{
-					position717, tokenIndex717 := position, tokenIndex
-					if buffer[position] != rune('t') {
-						goto l718
-					}
-					position++
-					goto l717
-				l718:
-					position, tokenIndex = position717, tokenIndex717
-					if buffer[position] != rune('T') {
-						goto l711
-					}
-					position++
-				}
-			l717:
-				if buffer[position] != rune('_') {
-					goto l711
-				}
-				position++
-				{
-					position719, tokenIndex719 := position, tokenIndex
-					if buffer[position] != rune('l') {
-						goto l720
-					}
-					position++
-					goto l719
-				l720:
-					position, tokenIndex = position719, tokenIndex719
-					if buffer[position] != rune('L') {
-						goto l711
-					}
-					position++
-				}
-			l719:
-				{
-					position721, tokenIndex721 := position, tokenIndex
+					position720, tokenIndex720 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l722
+						goto l721
 					}
 					position++
-					goto l721
-				l722:
-					position, tokenIndex = position721, tokenIndex721
+					goto l720
+				l721:
+					position, tokenIndex = position720, tokenIndex720
 					if buffer[position] != rune('O') {
-						goto l711
+						goto l716
 					}
 					position++
 				}
-			l721:
+			l720:
 				if buffer[position] != rune('1') {
-					goto l711
+					goto l716
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l711
+					goto l716
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l711
+					goto l716
 				}
 				position++
-				if !_rules[ruleSymbolName]() {
-					goto l711
+				{
+					position722, tokenIndex722 := position, tokenIndex
+					if !_rules[ruleLocalSymbol]() {
+						goto l723
+					}
+					goto l722
+				l723:
+					position, tokenIndex = position722, tokenIndex722
+					if !_rules[ruleSymbolName]() {
+						goto l716
+					}
 				}
-				add(ruleARMGOTLow12, position712)
-			}
-			return true
-		l711:
-			position, tokenIndex = position711, tokenIndex711
-			return false
-		},
-		/* 45 ARMPostincrement <- <'!'> */
-		func() bool {
-			position723, tokenIndex723 := position, tokenIndex
-			{
-				position724 := position
-				if buffer[position] != rune('!') {
-					goto l723
-				}
-				position++
-				add(ruleARMPostincrement, position724)
-			}
-			return true
-		l723:
-			position, tokenIndex = position723, tokenIndex723
-			return false
-		},
-		/* 46 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
-		func() bool {
-			position725, tokenIndex725 := position, tokenIndex
-			{
-				position726 := position
-				if buffer[position] != rune('(') {
+			l722:
+				{
+					position724, tokenIndex724 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l724
+					}
 					goto l725
+				l724:
+					position, tokenIndex = position724, tokenIndex724
+				}
+			l725:
+				add(ruleLow12BitsSymbolRef, position717)
+			}
+			return true
+		l716:
+			position, tokenIndex = position716, tokenIndex716
+			return false
+		},
+		/* 46 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset ('*' [0-9]+)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		func() bool {
+			position726, tokenIndex726 := position, tokenIndex
+			{
+				position727 := position
+				if buffer[position] != rune('[') {
+					goto l726
 				}
 				position++
-				{
-					position727, tokenIndex727 := position, tokenIndex
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l727
-					}
-					goto l728
-				l727:
-					position, tokenIndex = position727, tokenIndex727
+				if !_rules[ruleARMRegister]() {
+					goto l726
 				}
-			l728:
 				{
-					position729, tokenIndex729 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l729
-					}
-					goto l730
-				l729:
-					position, tokenIndex = position729, tokenIndex729
-				}
-			l730:
-				{
-					position731, tokenIndex731 := position, tokenIndex
+					position728, tokenIndex728 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l731
+						goto l728
 					}
 					position++
 					{
-						position733, tokenIndex733 := position, tokenIndex
+						position730, tokenIndex730 := position, tokenIndex
 						if !_rules[ruleWS]() {
+							goto l730
+						}
+						goto l731
+					l730:
+						position, tokenIndex = position730, tokenIndex730
+					}
+				l731:
+					{
+						position732, tokenIndex732 := position, tokenIndex
+						if buffer[position] != rune('#') {
 							goto l733
 						}
-						goto l734
-					l733:
-						position, tokenIndex = position733, tokenIndex733
-					}
-				l734:
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l731
-					}
-					{
-						position735, tokenIndex735 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l735
-						}
-						goto l736
-					l735:
-						position, tokenIndex = position735, tokenIndex735
-					}
-				l736:
-					{
-						position737, tokenIndex737 := position, tokenIndex
-						if buffer[position] != rune(',') {
-							goto l737
-						}
 						position++
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l737
+						if !_rules[ruleOffset]() {
+							goto l733
 						}
-						position++
-					l739:
 						{
-							position740, tokenIndex740 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l740
+							position734, tokenIndex734 := position, tokenIndex
+							if buffer[position] != rune('*') {
+								goto l734
 							}
 							position++
-							goto l739
-						l740:
-							position, tokenIndex = position740, tokenIndex740
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l734
+							}
+							position++
+						l736:
+							{
+								position737, tokenIndex737 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l737
+								}
+								position++
+								goto l736
+							l737:
+								position, tokenIndex = position737, tokenIndex737
+							}
+							goto l735
+						l734:
+							position, tokenIndex = position734, tokenIndex734
 						}
-						goto l738
-					l737:
-						position, tokenIndex = position737, tokenIndex737
+					l735:
+						goto l732
+					l733:
+						position, tokenIndex = position732, tokenIndex732
+						if !_rules[ruleARMGOTLow12]() {
+							goto l738
+						}
+						goto l732
+					l738:
+						position, tokenIndex = position732, tokenIndex732
+						if !_rules[ruleLow12BitsSymbolRef]() {
+							goto l739
+						}
+						goto l732
+					l739:
+						position, tokenIndex = position732, tokenIndex732
+						if !_rules[ruleARMRegister]() {
+							goto l728
+						}
 					}
-				l738:
-					goto l732
-				l731:
-					position, tokenIndex = position731, tokenIndex731
+				l732:
+					{
+						position740, tokenIndex740 := position, tokenIndex
+						if buffer[position] != rune(',') {
+							goto l740
+						}
+						position++
+						{
+							position742, tokenIndex742 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l742
+							}
+							goto l743
+						l742:
+							position, tokenIndex = position742, tokenIndex742
+						}
+					l743:
+						if !_rules[ruleARMConstantTweak]() {
+							goto l740
+						}
+						goto l741
+					l740:
+						position, tokenIndex = position740, tokenIndex740
+					}
+				l741:
+					goto l729
+				l728:
+					position, tokenIndex = position728, tokenIndex728
 				}
-			l732:
-				if buffer[position] != rune(')') {
-					goto l725
+			l729:
+				if buffer[position] != rune(']') {
+					goto l726
 				}
 				position++
-				add(ruleBaseIndexScale, position726)
-			}
-			return true
-		l725:
-			position, tokenIndex = position725, tokenIndex725
-			return false
-		},
-		/* 47 Operator <- <('+' / '-')> */
-		func() bool {
-			position741, tokenIndex741 := position, tokenIndex
-			{
-				position742 := position
 				{
-					position743, tokenIndex743 := position, tokenIndex
-					if buffer[position] != rune('+') {
+					position744, tokenIndex744 := position, tokenIndex
+					if !_rules[ruleARMPostincrement]() {
 						goto l744
 					}
-					position++
-					goto l743
+					goto l745
 				l744:
-					position, tokenIndex = position743, tokenIndex743
-					if buffer[position] != rune('-') {
-						goto l741
-					}
-					position++
+					position, tokenIndex = position744, tokenIndex744
 				}
-			l743:
-				add(ruleOperator, position742)
+			l745:
+				add(ruleARMBaseIndexScale, position727)
 			}
 			return true
-		l741:
-			position, tokenIndex = position741, tokenIndex741
+		l726:
+			position, tokenIndex = position726, tokenIndex726
 			return false
 		},
-		/* 48 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		/* 47 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
 		func() bool {
-			position745, tokenIndex745 := position, tokenIndex
+			position746, tokenIndex746 := position, tokenIndex
 			{
-				position746 := position
-				{
-					position747, tokenIndex747 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l747
-					}
-					position++
-					goto l748
-				l747:
-					position, tokenIndex = position747, tokenIndex747
+				position747 := position
+				if buffer[position] != rune(':') {
+					goto l746
 				}
-			l748:
+				position++
 				{
-					position749, tokenIndex749 := position, tokenIndex
-					if buffer[position] != rune('-') {
+					position748, tokenIndex748 := position, tokenIndex
+					if buffer[position] != rune('g') {
 						goto l749
 					}
 					position++
-					goto l750
+					goto l748
 				l749:
-					position, tokenIndex = position749, tokenIndex749
+					position, tokenIndex = position748, tokenIndex748
+					if buffer[position] != rune('G') {
+						goto l746
+					}
+					position++
+				}
+			l748:
+				{
+					position750, tokenIndex750 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l751
+					}
+					position++
+					goto l750
+				l751:
+					position, tokenIndex = position750, tokenIndex750
+					if buffer[position] != rune('O') {
+						goto l746
+					}
+					position++
 				}
 			l750:
 				{
-					position751, tokenIndex751 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l752
-					}
-					position++
-					{
-						position753, tokenIndex753 := position, tokenIndex
-						if buffer[position] != rune('b') {
-							goto l754
-						}
-						position++
+					position752, tokenIndex752 := position, tokenIndex
+					if buffer[position] != rune('t') {
 						goto l753
-					l754:
-						position, tokenIndex = position753, tokenIndex753
-						if buffer[position] != rune('B') {
-							goto l752
-						}
-						position++
 					}
+					position++
+					goto l752
 				l753:
-					{
-						position757, tokenIndex757 := position, tokenIndex
-						if buffer[position] != rune('0') {
-							goto l758
-						}
-						position++
-						goto l757
-					l758:
-						position, tokenIndex = position757, tokenIndex757
-						if buffer[position] != rune('1') {
-							goto l752
-						}
-						position++
-					}
-				l757:
-				l755:
-					{
-						position756, tokenIndex756 := position, tokenIndex
-						{
-							position759, tokenIndex759 := position, tokenIndex
-							if buffer[position] != rune('0') {
-								goto l760
-							}
-							position++
-							goto l759
-						l760:
-							position, tokenIndex = position759, tokenIndex759
-							if buffer[position] != rune('1') {
-								goto l756
-							}
-							position++
-						}
-					l759:
-						goto l755
-					l756:
-						position, tokenIndex = position756, tokenIndex756
-					}
-					goto l751
-				l752:
-					position, tokenIndex = position751, tokenIndex751
-					if buffer[position] != rune('0') {
-						goto l761
-					}
-					position++
-					{
-						position762, tokenIndex762 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l763
-						}
-						position++
-						goto l762
-					l763:
-						position, tokenIndex = position762, tokenIndex762
-						if buffer[position] != rune('X') {
-							goto l761
-						}
-						position++
-					}
-				l762:
-					{
-						position766, tokenIndex766 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l767
-						}
-						position++
-						goto l766
-					l767:
-						position, tokenIndex = position766, tokenIndex766
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l768
-						}
-						position++
-						goto l766
-					l768:
-						position, tokenIndex = position766, tokenIndex766
-						{
-							position769, tokenIndex769 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l770
-							}
-							position++
-							goto l769
-						l770:
-							position, tokenIndex = position769, tokenIndex769
-							if c := buffer[position]; c < rune('A') || c > rune('F') {
-								goto l761
-							}
-							position++
-						}
-					l769:
-					}
-				l766:
-				l764:
-					{
-						position765, tokenIndex765 := position, tokenIndex
-						{
-							position771, tokenIndex771 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l772
-							}
-							position++
-							goto l771
-						l772:
-							position, tokenIndex = position771, tokenIndex771
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l773
-							}
-							position++
-							goto l771
-						l773:
-							position, tokenIndex = position771, tokenIndex771
-							{
-								position774, tokenIndex774 := position, tokenIndex
-								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l775
-								}
-								position++
-								goto l774
-							l775:
-								position, tokenIndex = position774, tokenIndex774
-								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l765
-								}
-								position++
-							}
-						l774:
-						}
-					l771:
-						goto l764
-					l765:
-						position, tokenIndex = position765, tokenIndex765
-					}
-					goto l751
-				l761:
-					position, tokenIndex = position751, tokenIndex751
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l745
-					}
-					position++
-				l776:
-					{
-						position777, tokenIndex777 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l777
-						}
-						position++
-						goto l776
-					l777:
-						position, tokenIndex = position777, tokenIndex777
-					}
-				}
-			l751:
-				add(ruleOffset, position746)
-			}
-			return true
-		l745:
-			position, tokenIndex = position745, tokenIndex745
-			return false
-		},
-		/* 49 Section <- <([a-z] / [A-Z] / '@')+> */
-		func() bool {
-			position778, tokenIndex778 := position, tokenIndex
-			{
-				position779 := position
-				{
-					position782, tokenIndex782 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l783
-					}
-					position++
-					goto l782
-				l783:
-					position, tokenIndex = position782, tokenIndex782
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l784
-					}
-					position++
-					goto l782
-				l784:
-					position, tokenIndex = position782, tokenIndex782
-					if buffer[position] != rune('@') {
-						goto l778
+					position, tokenIndex = position752, tokenIndex752
+					if buffer[position] != rune('T') {
+						goto l746
 					}
 					position++
 				}
-			l782:
-			l780:
-				{
-					position781, tokenIndex781 := position, tokenIndex
-					{
-						position785, tokenIndex785 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l786
-						}
-						position++
-						goto l785
-					l786:
-						position, tokenIndex = position785, tokenIndex785
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l787
-						}
-						position++
-						goto l785
-					l787:
-						position, tokenIndex = position785, tokenIndex785
-						if buffer[position] != rune('@') {
-							goto l781
-						}
-						position++
-					}
-				l785:
-					goto l780
-				l781:
-					position, tokenIndex = position781, tokenIndex781
-				}
-				add(ruleSection, position779)
-			}
-			return true
-		l778:
-			position, tokenIndex = position778, tokenIndex778
-			return false
-		},
-		/* 50 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
-		func() bool {
-			position788, tokenIndex788 := position, tokenIndex
-			{
-				position789 := position
-				if buffer[position] != rune('%') {
-					goto l788
+			l752:
+				if buffer[position] != rune('_') {
+					goto l746
 				}
 				position++
 				{
-					position790, tokenIndex790 := position, tokenIndex
-					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l791
+					position754, tokenIndex754 := position, tokenIndex
+					if buffer[position] != rune('l') {
+						goto l755
 					}
 					position++
-					goto l790
-				l791:
-					position, tokenIndex = position790, tokenIndex790
-					if buffer[position] != rune('s') {
-						goto l788
+					goto l754
+				l755:
+					position, tokenIndex = position754, tokenIndex754
+					if buffer[position] != rune('L') {
+						goto l746
 					}
 					position++
 				}
-			l790:
-				if buffer[position] != rune('s') {
-					goto l788
+			l754:
+				{
+					position756, tokenIndex756 := position, tokenIndex
+					if buffer[position] != rune('o') {
+						goto l757
+					}
+					position++
+					goto l756
+				l757:
+					position, tokenIndex = position756, tokenIndex756
+					if buffer[position] != rune('O') {
+						goto l746
+					}
+					position++
+				}
+			l756:
+				if buffer[position] != rune('1') {
+					goto l746
+				}
+				position++
+				if buffer[position] != rune('2') {
+					goto l746
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l788
+					goto l746
 				}
 				position++
-				add(ruleSegmentRegister, position789)
+				if !_rules[ruleSymbolName]() {
+					goto l746
+				}
+				add(ruleARMGOTLow12, position747)
 			}
 			return true
-		l788:
-			position, tokenIndex = position788, tokenIndex788
+		l746:
+			position, tokenIndex = position746, tokenIndex746
+			return false
+		},
+		/* 48 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
+		},
+		/* 49 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
+		},
+		/* 50 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
+		},
+		/* 51 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
+		},
+		/* 52 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
+		},
+		/* 53 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
 		},
 	}
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/in.s b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
index e1c256a..3b80125 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/in.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
@@ -43,6 +43,10 @@
 
 	bl bss_symbol_bss_get
 
+	# Regression test for a two-digit index.
+	ld1 { v1.b }[10], [x9]
+
+
 local_function:
 
 // BSS data
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/out.s b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
index eb401da..12b408d 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
@@ -88,6 +88,10 @@
 
 	bl bss_symbol_bss_get
 
+	# Regression test for a two-digit index.
+	ld1 { v1.b }[10], [x9]
+
+
 .Llocal_function_local_target:
 local_function:
 
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
index 5027325..b925655 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in2.s
@@ -12,3 +12,8 @@
 	.uleb128 .L2-.L1
 	.sleb128 .L2-.L1
 
+# .byte was not parsed as a symbol-containing directive on the
+# assumption that it's too small to hold a pointer. But Clang
+# will store offsets in it.
+.byte   (.LBB231_40-.LBB231_19)>>2, 4, .Lfoo, (.Lfoo), .Lfoo<<400, (   .Lfoo ) <<  66
+.byte   421
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
index 252f69c..feb9a43 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
@@ -89,6 +89,12 @@
 # WAS .sleb128 .L2-.L1
 	.sleb128	.L2_BCM_1-.L1_BCM_1
 
+# .byte was not parsed as a symbol-containing directive on the
+# assumption that it's too small to hold a pointer. But Clang
+# will store offsets in it.
+# WAS .byte   (.LBB231_40-.LBB231_19)>>2, 4, .Lfoo, (.Lfoo), .Lfoo<<400, (   .Lfoo ) <<  66
+	.byte	(.LBB231_40_BCM_1-.LBB231_19_BCM_1)>>2, 4, .Lfoo_BCM_1, (.Lfoo_BCM_1), .Lfoo_BCM_1<<400, (   .Lfoo_BCM_1 ) <<  66
+.byte   421
 .text
 .loc 1 2 0
 BORINGSSL_bcm_text_end: