delocate: accept more directive expressions

For example, openssl/asm_base.h expands to include the line

  .long ((1 << 0) | (1 << 1));

when BTI and PAC are enabled.

Change-Id: I07208e0430757721e97b88c706672375f8f58f1f
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/62525
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/util/fipstools/delocate/delocate.go b/util/fipstools/delocate/delocate.go
index b801d6d..8e0e508 100644
--- a/util/fipstools/delocate/delocate.go
+++ b/util/fipstools/delocate/delocate.go
@@ -263,6 +263,47 @@
 	return statement, nil
 }
 
+func (d *delocation) processSymbolExpr(expr *node32, b *strings.Builder) bool {
+	changed := false
+	assertNodeType(expr, ruleSymbolExpr)
+
+	for expr != nil {
+		atom := expr.up
+		assertNodeType(atom, ruleSymbolAtom)
+
+		for term := atom.up; term != nil; term = skipWS(term.next) {
+			if term.pegRule == ruleSymbolExpr {
+				changed = d.processSymbolExpr(term, b) || changed
+				continue
+			}
+
+			if term.pegRule != ruleLocalSymbol {
+				b.WriteString(d.contents(term))
+				continue
+			}
+
+			oldSymbol := d.contents(term)
+			newSymbol := d.mapLocalSymbol(oldSymbol)
+			if newSymbol != oldSymbol {
+				changed = true
+			}
+
+			b.WriteString(newSymbol)
+		}
+
+		next := skipWS(atom.next)
+		if next == nil {
+			break
+		}
+		assertNodeType(next, ruleSymbolOperator)
+		b.WriteString(d.contents(next))
+		next = skipWS(next.next)
+		assertNodeType(next, ruleSymbolExpr)
+		expr = next
+	}
+	return changed
+}
+
 func (d *delocation) processLabelContainingDirective(statement, directive *node32) (*node32, error) {
 	// The symbols within directives need to be mapped so that local
 	// symbols in two different .s inputs don't collide.
@@ -280,24 +321,12 @@
 	for node = skipWS(node.up); node != nil; node = skipWS(node.next) {
 		assertNodeType(node, ruleSymbolArg)
 		arg := node.up
-		var mapped string
+		assertNodeType(arg, ruleSymbolExpr)
 
-		for term := arg; term != nil; term = term.next {
-			if term.pegRule != ruleLocalSymbol {
-				mapped += d.contents(term)
-				continue
-			}
+		var b strings.Builder
+		changed = d.processSymbolExpr(arg, &b) || changed
 
-			oldSymbol := d.contents(term)
-			newSymbol := d.mapLocalSymbol(oldSymbol)
-			if newSymbol != oldSymbol {
-				changed = true
-			}
-
-			mapped += newSymbol
-		}
-
-		args = append(args, mapped)
+		args = append(args, b.String())
 	}
 
 	if !changed {
@@ -1260,6 +1289,16 @@
 	w.WriteString(".type " + funcName + ", @function\n")
 	w.WriteString(funcName + ":\n")
 	w.WriteString(".cfi_startproc\n")
+	// We insert a landing pad (`bti c` instruction) unconditionally at the beginning of
+	// every generated function so that they can be called indirectly (with `blr` or
+	// `br x16/x17`). The instruction is encoded in the HINT space as `hint #34` and is
+	// a no-op on machines or program states not supporting BTI (Branch Target Identification).
+	// None of the generated function bodies call other functions (with bl or blr), so we only
+	// insert a landing pad instead of signing and validating $lr with `paciasp` and `autiasp`.
+	// Normally we would also generate a .note.gnu.property section to annotate the assembly
+	// file as BTI-compatible, but if the input assembly files are BTI-compatible, they should
+	// already have those sections so there is no need to add an extra one ourselves.
+	w.WriteString("\thint #34 // bti c\n")
 	writeContents(w)
 	w.WriteString(".cfi_endproc\n")
 	w.WriteString(".size " + funcName + ", .-" + funcName + "\n")
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 9db3e8c..9ba357a 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -47,17 +47,14 @@
 LabelContainingDirective <- LabelContainingDirectiveName WS SymbolArgs
 LabelContainingDirectiveName <- ".xword" / ".word" / ".long" / ".set" / ".byte" / ".8byte" / ".4byte" / ".quad" / ".tc" / ".localentry" / ".size" / ".type" / ".uleb128" / ".sleb128"
 SymbolArgs <- SymbolArg ((WS? ',' WS?) SymbolArg)*
-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)?
+
+SymbolArg <- SymbolExpr
+SymbolExpr <- SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?
+SymbolAtom <- Offset / SymbolType / LocalSymbol TCMarker? / SymbolName Offset / SymbolName TCMarker? / Dot / OpenParen WS? SymbolExpr WS? CloseParen
+SymbolOperator <- '+' / '-' / '|' / '<<' / '>>'
 OpenParen <- '('
 CloseParen <- ')'
+
 SymbolType <- [@%] ('function' / 'object')
 Dot <- '.'
 TCMarker <- '[TC]'
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index 01a1fc2..c65eb50 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -33,8 +33,10 @@
 	ruleLabelContainingDirective
 	ruleLabelContainingDirectiveName
 	ruleSymbolArgs
-	ruleSymbolShift
 	ruleSymbolArg
+	ruleSymbolExpr
+	ruleSymbolAtom
+	ruleSymbolOperator
 	ruleOpenParen
 	ruleCloseParen
 	ruleSymbolType
@@ -91,8 +93,10 @@
 	"LabelContainingDirective",
 	"LabelContainingDirectiveName",
 	"SymbolArgs",
-	"SymbolShift",
 	"SymbolArg",
+	"SymbolExpr",
+	"SymbolAtom",
+	"SymbolOperator",
 	"OpenParen",
 	"CloseParen",
 	"SymbolType",
@@ -244,7 +248,7 @@
 type Asm struct {
 	Buffer string
 	buffer []rune
-	rules  [55]func() bool
+	rules  [57]func() bool
 	parse  func(rule ...int) error
 	reset  func()
 	Pretty bool
@@ -2513,37 +2517,55 @@
 			position, tokenIndex = position283, tokenIndex283
 			return false
 		},
-		/* 15 SymbolShift <- <((('<' '<') / ('>' '>')) WS? [0-9]+)> */
+		/* 15 SymbolArg <- <SymbolExpr> */
 		func() bool {
 			position291, tokenIndex291 := position, tokenIndex
 			{
 				position292 := position
-				{
-					position293, tokenIndex293 := position, tokenIndex
-					if buffer[position] != rune('<') {
-						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++
+				if !_rules[ruleSymbolExpr]() {
+					goto l291
 				}
-			l293:
+				add(ruleSymbolArg, position292)
+			}
+			return true
+		l291:
+			position, tokenIndex = position291, tokenIndex291
+			return false
+		},
+		/* 16 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
+		func() bool {
+			position293, tokenIndex293 := position, tokenIndex
+			{
+				position294 := position
+				if !_rules[ruleSymbolAtom]() {
+					goto l293
+				}
 				{
 					position295, tokenIndex295 := position, tokenIndex
-					if !_rules[ruleWS]() {
+					{
+						position297, tokenIndex297 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l297
+						}
+						goto l298
+					l297:
+						position, tokenIndex = position297, tokenIndex297
+					}
+				l298:
+					if !_rules[ruleSymbolOperator]() {
+						goto l295
+					}
+					{
+						position299, tokenIndex299 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l299
+						}
+						goto l300
+					l299:
+						position, tokenIndex = position299, tokenIndex299
+					}
+				l300:
+					if !_rules[ruleSymbolExpr]() {
 						goto l295
 					}
 					goto l296
@@ -2551,2066 +2573,2085 @@
 					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
-					}
-					position++
-					goto l297
-				l298:
-					position, tokenIndex = position298, tokenIndex298
-				}
-				add(ruleSymbolShift, position292)
+				add(ruleSymbolExpr, position294)
 			}
 			return true
-		l291:
-			position, tokenIndex = position291, tokenIndex291
+		l293:
+			position, tokenIndex = position293, tokenIndex293
 			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)?)> */
+		/* 17 SymbolAtom <- <(Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
 		func() bool {
-			position299, tokenIndex299 := position, tokenIndex
+			position301, tokenIndex301 := position, tokenIndex
 			{
-				position300 := position
+				position302 := position
 				{
-					position301, tokenIndex301 := position, tokenIndex
+					position303, tokenIndex303 := position, tokenIndex
+					if !_rules[ruleOffset]() {
+						goto l304
+					}
+					goto l303
+				l304:
+					position, tokenIndex = position303, tokenIndex303
+					if !_rules[ruleSymbolType]() {
+						goto l305
+					}
+					goto l303
+				l305:
+					position, tokenIndex = position303, tokenIndex303
+					if !_rules[ruleLocalSymbol]() {
+						goto l306
+					}
+					{
+						position307, tokenIndex307 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l307
+						}
+						goto l308
+					l307:
+						position, tokenIndex = position307, tokenIndex307
+					}
+				l308:
+					goto l303
+				l306:
+					position, tokenIndex = position303, tokenIndex303
+					if !_rules[ruleSymbolName]() {
+						goto l309
+					}
+					if !_rules[ruleOffset]() {
+						goto l309
+					}
+					goto l303
+				l309:
+					position, tokenIndex = position303, tokenIndex303
+					if !_rules[ruleSymbolName]() {
+						goto l310
+					}
+					{
+						position311, tokenIndex311 := position, tokenIndex
+						if !_rules[ruleTCMarker]() {
+							goto l311
+						}
+						goto l312
+					l311:
+						position, tokenIndex = position311, tokenIndex311
+					}
+				l312:
+					goto l303
+				l310:
+					position, tokenIndex = position303, tokenIndex303
+					if !_rules[ruleDot]() {
+						goto l313
+					}
+					goto l303
+				l313:
+					position, tokenIndex = position303, tokenIndex303
 					if !_rules[ruleOpenParen]() {
 						goto l301
 					}
 					{
-						position303, tokenIndex303 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l303
-						}
-						goto l304
-					l303:
-						position, tokenIndex = position303, tokenIndex303
-					}
-				l304:
-					goto l302
-				l301:
-					position, tokenIndex = position301, tokenIndex301
-				}
-			l302:
-				{
-					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:
-				l313:
-					{
 						position314, tokenIndex314 := position, tokenIndex
-						{
-							position315, tokenIndex315 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l315
-							}
-							goto l316
-						l315:
-							position, tokenIndex = position315, tokenIndex315
-						}
-					l316:
-						if !_rules[ruleOperator]() {
+						if !_rules[ruleWS]() {
 							goto l314
 						}
-						{
-							position317, tokenIndex317 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l317
-							}
-							goto l318
-						l317:
-							position, tokenIndex = position317, tokenIndex317
-						}
-					l318:
-						{
-							position319, tokenIndex319 := position, tokenIndex
-							if !_rules[ruleOffset]() {
-								goto l320
-							}
-							goto l319
-						l320:
-							position, tokenIndex = position319, tokenIndex319
-							if !_rules[ruleLocalSymbol]() {
-								goto l321
-							}
-							goto l319
-						l321:
-							position, tokenIndex = position319, tokenIndex319
-							if !_rules[ruleSymbolName]() {
-								goto l314
-							}
-						}
-					l319:
-						goto l313
+						goto l315
 					l314:
 						position, tokenIndex = position314, tokenIndex314
 					}
-					goto l305
-				l308:
-					position, tokenIndex = position305, tokenIndex305
-					if !_rules[ruleLocalSymbol]() {
+				l315:
+					if !_rules[ruleSymbolExpr]() {
+						goto l301
+					}
+					{
+						position316, tokenIndex316 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l316
+						}
+						goto l317
+					l316:
+						position, tokenIndex = position316, tokenIndex316
+					}
+				l317:
+					if !_rules[ruleCloseParen]() {
+						goto l301
+					}
+				}
+			l303:
+				add(ruleSymbolAtom, position302)
+			}
+			return true
+		l301:
+			position, tokenIndex = position301, tokenIndex301
+			return false
+		},
+		/* 18 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
+		func() bool {
+			position318, tokenIndex318 := position, tokenIndex
+			{
+				position319 := position
+				{
+					position320, tokenIndex320 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l321
+					}
+					position++
+					goto l320
+				l321:
+					position, tokenIndex = position320, tokenIndex320
+					if buffer[position] != rune('-') {
 						goto l322
 					}
-					{
-						position323, tokenIndex323 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
-							goto l323
-						}
-						goto l324
-					l323:
-						position, tokenIndex = position323, tokenIndex323
-					}
-				l324:
-					goto l305
+					position++
+					goto l320
 				l322:
-					position, tokenIndex = position305, tokenIndex305
-					if !_rules[ruleSymbolName]() {
-						goto l325
+					position, tokenIndex = position320, tokenIndex320
+					if buffer[position] != rune('|') {
+						goto l323
 					}
-					if !_rules[ruleOffset]() {
-						goto l325
+					position++
+					goto l320
+				l323:
+					position, tokenIndex = position320, tokenIndex320
+					if buffer[position] != rune('<') {
+						goto l324
 					}
-					goto l305
-				l325:
-					position, tokenIndex = position305, tokenIndex305
-					if !_rules[ruleSymbolName]() {
-						goto l299
+					position++
+					if buffer[position] != rune('<') {
+						goto l324
 					}
-					{
-						position326, tokenIndex326 := position, tokenIndex
-						if !_rules[ruleTCMarker]() {
-							goto l326
-						}
-						goto l327
-					l326:
-						position, tokenIndex = position326, tokenIndex326
+					position++
+					goto l320
+				l324:
+					position, tokenIndex = position320, tokenIndex320
+					if buffer[position] != rune('>') {
+						goto l318
 					}
-				l327:
+					position++
+					if buffer[position] != rune('>') {
+						goto l318
+					}
+					position++
 				}
-			l305:
-				{
-					position328, tokenIndex328 := position, tokenIndex
-					{
-						position330, tokenIndex330 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l330
-						}
-						goto l331
-					l330:
-						position, tokenIndex = position330, tokenIndex330
-					}
-				l331:
-					if !_rules[ruleCloseParen]() {
-						goto l328
-					}
-					goto l329
-				l328:
-					position, tokenIndex = position328, tokenIndex328
+			l320:
+				add(ruleSymbolOperator, position319)
+			}
+			return true
+		l318:
+			position, tokenIndex = position318, tokenIndex318
+			return false
+		},
+		/* 19 OpenParen <- <'('> */
+		func() bool {
+			position325, tokenIndex325 := position, tokenIndex
+			{
+				position326 := position
+				if buffer[position] != rune('(') {
+					goto l325
 				}
-			l329:
+				position++
+				add(ruleOpenParen, position326)
+			}
+			return true
+		l325:
+			position, tokenIndex = position325, tokenIndex325
+			return false
+		},
+		/* 20 CloseParen <- <')'> */
+		func() bool {
+			position327, tokenIndex327 := position, tokenIndex
+			{
+				position328 := position
+				if buffer[position] != rune(')') {
+					goto l327
+				}
+				position++
+				add(ruleCloseParen, position328)
+			}
+			return true
+		l327:
+			position, tokenIndex = position327, tokenIndex327
+			return false
+		},
+		/* 21 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
+		func() bool {
+			position329, tokenIndex329 := position, tokenIndex
+			{
+				position330 := position
 				{
-					position332, tokenIndex332 := position, tokenIndex
-					{
-						position334, tokenIndex334 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l334
-						}
-						goto l335
-					l334:
-						position, tokenIndex = position334, tokenIndex334
-					}
-				l335:
-					if !_rules[ruleSymbolShift]() {
+					position331, tokenIndex331 := position, tokenIndex
+					if buffer[position] != rune('@') {
 						goto l332
 					}
-					goto l333
+					position++
+					goto l331
 				l332:
-					position, tokenIndex = position332, tokenIndex332
-				}
-			l333:
-				add(ruleSymbolArg, position300)
-			}
-			return true
-		l299:
-			position, tokenIndex = position299, tokenIndex299
-			return false
-		},
-		/* 17 OpenParen <- <'('> */
-		func() bool {
-			position336, tokenIndex336 := position, tokenIndex
-			{
-				position337 := position
-				if buffer[position] != rune('(') {
-					goto l336
-				}
-				position++
-				add(ruleOpenParen, position337)
-			}
-			return true
-		l336:
-			position, tokenIndex = position336, tokenIndex336
-			return false
-		},
-		/* 18 CloseParen <- <')'> */
-		func() bool {
-			position338, tokenIndex338 := position, tokenIndex
-			{
-				position339 := position
-				if buffer[position] != rune(')') {
-					goto l338
-				}
-				position++
-				add(ruleCloseParen, position339)
-			}
-			return true
-		l338:
-			position, tokenIndex = position338, tokenIndex338
-			return false
-		},
-		/* 19 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
-		func() bool {
-			position340, tokenIndex340 := position, tokenIndex
-			{
-				position341 := position
-				{
-					position342, tokenIndex342 := position, tokenIndex
-					if buffer[position] != rune('@') {
-						goto l343
-					}
-					position++
-					goto l342
-				l343:
-					position, tokenIndex = position342, tokenIndex342
+					position, tokenIndex = position331, tokenIndex331
 					if buffer[position] != rune('%') {
-						goto l340
+						goto l329
 					}
 					position++
 				}
-			l342:
+			l331:
 				{
-					position344, tokenIndex344 := position, tokenIndex
+					position333, tokenIndex333 := position, tokenIndex
 					if buffer[position] != rune('f') {
-						goto l345
+						goto l334
 					}
 					position++
 					if buffer[position] != rune('u') {
-						goto l345
+						goto l334
 					}
 					position++
 					if buffer[position] != rune('n') {
-						goto l345
+						goto l334
 					}
 					position++
 					if buffer[position] != rune('c') {
-						goto l345
+						goto l334
 					}
 					position++
 					if buffer[position] != rune('t') {
-						goto l345
+						goto l334
 					}
 					position++
 					if buffer[position] != rune('i') {
-						goto l345
+						goto l334
 					}
 					position++
 					if buffer[position] != rune('o') {
-						goto l345
+						goto l334
 					}
 					position++
 					if buffer[position] != rune('n') {
-						goto l345
+						goto l334
 					}
 					position++
-					goto l344
-				l345:
-					position, tokenIndex = position344, tokenIndex344
+					goto l333
+				l334:
+					position, tokenIndex = position333, tokenIndex333
 					if buffer[position] != rune('o') {
-						goto l340
+						goto l329
 					}
 					position++
 					if buffer[position] != rune('b') {
-						goto l340
+						goto l329
 					}
 					position++
 					if buffer[position] != rune('j') {
-						goto l340
+						goto l329
 					}
 					position++
 					if buffer[position] != rune('e') {
-						goto l340
+						goto l329
 					}
 					position++
 					if buffer[position] != rune('c') {
-						goto l340
+						goto l329
 					}
 					position++
 					if buffer[position] != rune('t') {
-						goto l340
+						goto l329
 					}
 					position++
 				}
-			l344:
-				add(ruleSymbolType, position341)
+			l333:
+				add(ruleSymbolType, position330)
 			}
 			return true
-		l340:
-			position, tokenIndex = position340, tokenIndex340
+		l329:
+			position, tokenIndex = position329, tokenIndex329
 			return false
 		},
-		/* 20 Dot <- <'.'> */
+		/* 22 Dot <- <'.'> */
 		func() bool {
-			position346, tokenIndex346 := position, tokenIndex
+			position335, tokenIndex335 := position, tokenIndex
 			{
-				position347 := position
+				position336 := position
 				if buffer[position] != rune('.') {
-					goto l346
+					goto l335
 				}
 				position++
-				add(ruleDot, position347)
+				add(ruleDot, position336)
 			}
 			return true
-		l346:
-			position, tokenIndex = position346, tokenIndex346
+		l335:
+			position, tokenIndex = position335, tokenIndex335
 			return false
 		},
-		/* 21 TCMarker <- <('[' 'T' 'C' ']')> */
+		/* 23 TCMarker <- <('[' 'T' 'C' ']')> */
 		func() bool {
-			position348, tokenIndex348 := position, tokenIndex
+			position337, tokenIndex337 := position, tokenIndex
 			{
-				position349 := position
+				position338 := position
 				if buffer[position] != rune('[') {
-					goto l348
+					goto l337
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l348
+					goto l337
 				}
 				position++
 				if buffer[position] != rune('C') {
-					goto l348
+					goto l337
 				}
 				position++
 				if buffer[position] != rune(']') {
-					goto l348
+					goto l337
 				}
 				position++
-				add(ruleTCMarker, position349)
+				add(ruleTCMarker, position338)
 			}
 			return true
-		l348:
-			position, tokenIndex = position348, tokenIndex348
+		l337:
+			position, tokenIndex = position337, tokenIndex337
 			return false
 		},
-		/* 22 EscapedChar <- <('\\' .)> */
+		/* 24 EscapedChar <- <('\\' .)> */
 		func() bool {
-			position350, tokenIndex350 := position, tokenIndex
+			position339, tokenIndex339 := position, tokenIndex
 			{
-				position351 := position
+				position340 := position
 				if buffer[position] != rune('\\') {
-					goto l350
+					goto l339
 				}
 				position++
 				if !matchDot() {
-					goto l350
+					goto l339
 				}
-				add(ruleEscapedChar, position351)
+				add(ruleEscapedChar, position340)
 			}
 			return true
-		l350:
-			position, tokenIndex = position350, tokenIndex350
+		l339:
+			position, tokenIndex = position339, tokenIndex339
 			return false
 		},
-		/* 23 WS <- <(' ' / '\t')+> */
+		/* 25 WS <- <(' ' / '\t')+> */
 		func() bool {
-			position352, tokenIndex352 := position, tokenIndex
+			position341, tokenIndex341 := position, tokenIndex
 			{
-				position353 := position
+				position342 := position
 				{
-					position356, tokenIndex356 := position, tokenIndex
+					position345, tokenIndex345 := position, tokenIndex
 					if buffer[position] != rune(' ') {
-						goto l357
+						goto l346
 					}
 					position++
-					goto l356
-				l357:
-					position, tokenIndex = position356, tokenIndex356
+					goto l345
+				l346:
+					position, tokenIndex = position345, tokenIndex345
 					if buffer[position] != rune('\t') {
+						goto l341
+					}
+					position++
+				}
+			l345:
+			l343:
+				{
+					position344, tokenIndex344 := position, tokenIndex
+					{
+						position347, tokenIndex347 := position, tokenIndex
+						if buffer[position] != rune(' ') {
+							goto l348
+						}
+						position++
+						goto l347
+					l348:
+						position, tokenIndex = position347, tokenIndex347
+						if buffer[position] != rune('\t') {
+							goto l344
+						}
+						position++
+					}
+				l347:
+					goto l343
+				l344:
+					position, tokenIndex = position344, tokenIndex344
+				}
+				add(ruleWS, position342)
+			}
+			return true
+		l341:
+			position, tokenIndex = position341, tokenIndex341
+			return false
+		},
+		/* 26 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
+		func() bool {
+			position349, tokenIndex349 := position, tokenIndex
+			{
+				position350 := position
+				{
+					position351, tokenIndex351 := position, tokenIndex
+					if buffer[position] != rune('/') {
 						goto l352
 					}
 					position++
+					if buffer[position] != rune('/') {
+						goto l352
+					}
+					position++
+					goto l351
+				l352:
+					position, tokenIndex = position351, tokenIndex351
+					if buffer[position] != rune('#') {
+						goto l349
+					}
+					position++
 				}
-			l356:
-			l354:
+			l351:
+			l353:
 				{
-					position355, tokenIndex355 := position, tokenIndex
+					position354, tokenIndex354 := position, tokenIndex
 					{
-						position358, tokenIndex358 := position, tokenIndex
-						if buffer[position] != rune(' ') {
-							goto l359
-						}
-						position++
-						goto l358
-					l359:
-						position, tokenIndex = position358, tokenIndex358
-						if buffer[position] != rune('\t') {
+						position355, tokenIndex355 := position, tokenIndex
+						if buffer[position] != rune('\n') {
 							goto l355
 						}
 						position++
-					}
-				l358:
-					goto l354
-				l355:
-					position, tokenIndex = position355, tokenIndex355
-				}
-				add(ruleWS, position353)
-			}
-			return true
-		l352:
-			position, tokenIndex = position352, tokenIndex352
-			return false
-		},
-		/* 24 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
-		func() bool {
-			position360, tokenIndex360 := position, tokenIndex
-			{
-				position361 := position
-				{
-					position362, tokenIndex362 := position, tokenIndex
-					if buffer[position] != rune('/') {
-						goto l363
-					}
-					position++
-					if buffer[position] != rune('/') {
-						goto l363
-					}
-					position++
-					goto l362
-				l363:
-					position, tokenIndex = position362, tokenIndex362
-					if buffer[position] != rune('#') {
-						goto l360
-					}
-					position++
-				}
-			l362:
-			l364:
-				{
-					position365, tokenIndex365 := position, tokenIndex
-					{
-						position366, tokenIndex366 := position, tokenIndex
-						if buffer[position] != rune('\n') {
-							goto l366
-						}
-						position++
-						goto l365
-					l366:
-						position, tokenIndex = position366, tokenIndex366
+						goto l354
+					l355:
+						position, tokenIndex = position355, tokenIndex355
 					}
 					if !matchDot() {
-						goto l365
+						goto l354
 					}
-					goto l364
-				l365:
-					position, tokenIndex = position365, tokenIndex365
+					goto l353
+				l354:
+					position, tokenIndex = position354, tokenIndex354
 				}
-				add(ruleComment, position361)
+				add(ruleComment, position350)
 			}
 			return true
-		l360:
-			position, tokenIndex = position360, tokenIndex360
+		l349:
+			position, tokenIndex = position349, tokenIndex349
 			return false
 		},
-		/* 25 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
+		/* 27 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
 		func() bool {
-			position367, tokenIndex367 := position, tokenIndex
+			position356, tokenIndex356 := position, tokenIndex
 			{
-				position368 := position
+				position357 := position
 				{
-					position369, tokenIndex369 := position, tokenIndex
+					position358, tokenIndex358 := position, tokenIndex
 					if !_rules[ruleLocalSymbol]() {
-						goto l370
+						goto l359
 					}
-					goto l369
-				l370:
-					position, tokenIndex = position369, tokenIndex369
+					goto l358
+				l359:
+					position, tokenIndex = position358, tokenIndex358
 					if !_rules[ruleLocalLabel]() {
-						goto l371
+						goto l360
 					}
-					goto l369
-				l371:
-					position, tokenIndex = position369, tokenIndex369
+					goto l358
+				l360:
+					position, tokenIndex = position358, tokenIndex358
 					if !_rules[ruleSymbolName]() {
-						goto l367
+						goto l356
 					}
 				}
-			l369:
+			l358:
 				if buffer[position] != rune(':') {
-					goto l367
+					goto l356
 				}
 				position++
-				add(ruleLabel, position368)
+				add(ruleLabel, position357)
 			}
 			return true
-		l367:
-			position, tokenIndex = position367, tokenIndex367
+		l356:
+			position, tokenIndex = position356, tokenIndex356
 			return false
 		},
-		/* 26 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
+		/* 28 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
 		func() bool {
-			position372, tokenIndex372 := position, tokenIndex
+			position361, tokenIndex361 := position, tokenIndex
 			{
-				position373 := position
+				position362 := position
 				{
-					position374, tokenIndex374 := position, tokenIndex
+					position363, tokenIndex363 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l375
+						goto l364
 					}
 					position++
-					goto l374
-				l375:
-					position, tokenIndex = position374, tokenIndex374
+					goto l363
+				l364:
+					position, tokenIndex = position363, tokenIndex363
 					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l376
+						goto l365
 					}
 					position++
-					goto l374
-				l376:
-					position, tokenIndex = position374, tokenIndex374
+					goto l363
+				l365:
+					position, tokenIndex = position363, tokenIndex363
 					if buffer[position] != rune('.') {
+						goto l366
+					}
+					position++
+					goto l363
+				l366:
+					position, tokenIndex = position363, tokenIndex363
+					if buffer[position] != rune('_') {
+						goto l361
+					}
+					position++
+				}
+			l363:
+			l367:
+				{
+					position368, tokenIndex368 := position, tokenIndex
+					{
+						position369, tokenIndex369 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l370
+						}
+						position++
+						goto l369
+					l370:
+						position, tokenIndex = position369, tokenIndex369
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l371
+						}
+						position++
+						goto l369
+					l371:
+						position, tokenIndex = position369, tokenIndex369
+						if buffer[position] != rune('.') {
+							goto l372
+						}
+						position++
+						goto l369
+					l372:
+						position, tokenIndex = position369, tokenIndex369
+						{
+							position374, tokenIndex374 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l375
+							}
+							position++
+							goto l374
+						l375:
+							position, tokenIndex = position374, tokenIndex374
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l373
+							}
+							position++
+						}
+					l374:
+						goto l369
+					l373:
+						position, tokenIndex = position369, tokenIndex369
+						if buffer[position] != rune('$') {
+							goto l376
+						}
+						position++
+						goto l369
+					l376:
+						position, tokenIndex = position369, tokenIndex369
+						if buffer[position] != rune('_') {
+							goto l368
+						}
+						position++
+					}
+				l369:
+					goto l367
+				l368:
+					position, tokenIndex = position368, tokenIndex368
+				}
+				add(ruleSymbolName, position362)
+			}
+			return true
+		l361:
+			position, tokenIndex = position361, tokenIndex361
+			return false
+		},
+		/* 29 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
+		func() bool {
+			position377, tokenIndex377 := position, tokenIndex
+			{
+				position378 := position
+				if buffer[position] != rune('.') {
+					goto l377
+				}
+				position++
+				if buffer[position] != rune('L') {
+					goto l377
+				}
+				position++
+				{
+					position381, tokenIndex381 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l382
+					}
+					position++
+					goto l381
+				l382:
+					position, tokenIndex = position381, tokenIndex381
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
+						goto l383
+					}
+					position++
+					goto l381
+				l383:
+					position, tokenIndex = position381, tokenIndex381
+					{
+						position385, tokenIndex385 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l386
+						}
+						position++
+						goto l385
+					l386:
+						position, tokenIndex = position385, tokenIndex385
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l384
+						}
+						position++
+					}
+				l385:
+					goto l381
+				l384:
+					position, tokenIndex = position381, tokenIndex381
+					if buffer[position] != rune('.') {
+						goto l387
+					}
+					position++
+					goto l381
+				l387:
+					position, tokenIndex = position381, tokenIndex381
+					{
+						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 c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l388
+						}
+						position++
+					}
+				l389:
+					goto l381
+				l388:
+					position, tokenIndex = position381, tokenIndex381
+					if buffer[position] != rune('$') {
+						goto l391
+					}
+					position++
+					goto l381
+				l391:
+					position, tokenIndex = position381, tokenIndex381
+					if buffer[position] != rune('_') {
 						goto l377
 					}
 					position++
-					goto l374
-				l377:
-					position, tokenIndex = position374, tokenIndex374
-					if buffer[position] != rune('_') {
-						goto l372
-					}
-					position++
 				}
-			l374:
-			l378:
+			l381:
+			l379:
 				{
-					position379, tokenIndex379 := position, tokenIndex
+					position380, tokenIndex380 := position, tokenIndex
 					{
-						position380, tokenIndex380 := position, tokenIndex
+						position392, tokenIndex392 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l381
+							goto l393
 						}
 						position++
-						goto l380
-					l381:
-						position, tokenIndex = position380, tokenIndex380
+						goto l392
+					l393:
+						position, tokenIndex = position392, tokenIndex392
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l382
+							goto l394
 						}
 						position++
-						goto l380
-					l382:
-						position, tokenIndex = position380, tokenIndex380
-						if buffer[position] != rune('.') {
-							goto l383
-						}
-						position++
-						goto l380
-					l383:
-						position, tokenIndex = position380, tokenIndex380
+						goto l392
+					l394:
+						position, tokenIndex = position392, tokenIndex392
 						{
-							position385, tokenIndex385 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l386
-							}
-							position++
-							goto l385
-						l386:
-							position, tokenIndex = position385, tokenIndex385
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l384
-							}
-							position++
-						}
-					l385:
-						goto l380
-					l384:
-						position, tokenIndex = position380, tokenIndex380
-						if buffer[position] != rune('$') {
-							goto l387
-						}
-						position++
-						goto l380
-					l387:
-						position, tokenIndex = position380, tokenIndex380
-						if buffer[position] != rune('_') {
-							goto l379
-						}
-						position++
-					}
-				l380:
-					goto l378
-				l379:
-					position, tokenIndex = position379, tokenIndex379
-				}
-				add(ruleSymbolName, position373)
-			}
-			return true
-		l372:
-			position, tokenIndex = position372, tokenIndex372
-			return false
-		},
-		/* 27 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
-		func() bool {
-			position388, tokenIndex388 := position, tokenIndex
-			{
-				position389 := position
-				if buffer[position] != rune('.') {
-					goto l388
-				}
-				position++
-				if buffer[position] != rune('L') {
-					goto l388
-				}
-				position++
-				{
-					position392, tokenIndex392 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l393
-					}
-					position++
-					goto l392
-				l393:
-					position, tokenIndex = position392, tokenIndex392
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l394
-					}
-					position++
-					goto l392
-				l394:
-					position, tokenIndex = position392, tokenIndex392
-					{
-						position396, tokenIndex396 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l397
-						}
-						position++
-						goto l396
-					l397:
-						position, tokenIndex = position396, tokenIndex396
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l395
-						}
-						position++
-					}
-				l396:
-					goto l392
-				l395:
-					position, tokenIndex = position392, tokenIndex392
-					if buffer[position] != rune('.') {
-						goto l398
-					}
-					position++
-					goto l392
-				l398:
-					position, tokenIndex = position392, tokenIndex392
-					{
-						position400, tokenIndex400 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l401
-						}
-						position++
-						goto l400
-					l401:
-						position, tokenIndex = position400, tokenIndex400
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l399
-						}
-						position++
-					}
-				l400:
-					goto l392
-				l399:
-					position, tokenIndex = position392, tokenIndex392
-					if buffer[position] != rune('$') {
-						goto l402
-					}
-					position++
-					goto l392
-				l402:
-					position, tokenIndex = position392, tokenIndex392
-					if buffer[position] != rune('_') {
-						goto l388
-					}
-					position++
-				}
-			l392:
-			l390:
-				{
-					position391, tokenIndex391 := position, tokenIndex
-					{
-						position403, tokenIndex403 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l404
-						}
-						position++
-						goto l403
-					l404:
-						position, tokenIndex = position403, tokenIndex403
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l405
-						}
-						position++
-						goto l403
-					l405:
-						position, tokenIndex = position403, tokenIndex403
-						{
-							position407, tokenIndex407 := position, tokenIndex
+							position396, tokenIndex396 := position, tokenIndex
 							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l408
+								goto l397
 							}
 							position++
-							goto l407
-						l408:
-							position, tokenIndex = position407, tokenIndex407
+							goto l396
+						l397:
+							position, tokenIndex = position396, tokenIndex396
 							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l406
+								goto l395
 							}
 							position++
 						}
-					l407:
-						goto l403
-					l406:
-						position, tokenIndex = position403, tokenIndex403
+					l396:
+						goto l392
+					l395:
+						position, tokenIndex = position392, tokenIndex392
 						if buffer[position] != rune('.') {
-							goto l409
+							goto l398
 						}
 						position++
-						goto l403
-					l409:
-						position, tokenIndex = position403, tokenIndex403
+						goto l392
+					l398:
+						position, tokenIndex = position392, tokenIndex392
 						{
-							position411, tokenIndex411 := position, tokenIndex
+							position400, tokenIndex400 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l412
+								goto l401
 							}
 							position++
-							goto l411
-						l412:
-							position, tokenIndex = position411, tokenIndex411
+							goto l400
+						l401:
+							position, tokenIndex = position400, tokenIndex400
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l410
+								goto l399
 							}
 							position++
 						}
-					l411:
-						goto l403
-					l410:
-						position, tokenIndex = position403, tokenIndex403
+					l400:
+						goto l392
+					l399:
+						position, tokenIndex = position392, tokenIndex392
 						if buffer[position] != rune('$') {
-							goto l413
+							goto l402
 						}
 						position++
-						goto l403
-					l413:
-						position, tokenIndex = position403, tokenIndex403
+						goto l392
+					l402:
+						position, tokenIndex = position392, tokenIndex392
 						if buffer[position] != rune('_') {
-							goto l391
+							goto l380
 						}
 						position++
 					}
-				l403:
-					goto l390
-				l391:
-					position, tokenIndex = position391, tokenIndex391
+				l392:
+					goto l379
+				l380:
+					position, tokenIndex = position380, tokenIndex380
 				}
-				add(ruleLocalSymbol, position389)
+				add(ruleLocalSymbol, position378)
 			}
 			return true
-		l388:
-			position, tokenIndex = position388, tokenIndex388
+		l377:
+			position, tokenIndex = position377, tokenIndex377
 			return false
 		},
-		/* 28 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
+		/* 30 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
 		func() bool {
-			position414, tokenIndex414 := position, tokenIndex
+			position403, tokenIndex403 := position, tokenIndex
 			{
-				position415 := position
+				position404 := position
 				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l414
+					goto l403
 				}
 				position++
-			l416:
+			l405:
 				{
-					position417, tokenIndex417 := position, tokenIndex
+					position406, tokenIndex406 := position, tokenIndex
 					{
-						position418, tokenIndex418 := position, tokenIndex
+						position407, tokenIndex407 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l419
+							goto l408
 						}
 						position++
-						goto l418
-					l419:
-						position, tokenIndex = position418, tokenIndex418
+						goto l407
+					l408:
+						position, tokenIndex = position407, tokenIndex407
 						if buffer[position] != rune('$') {
-							goto l417
+							goto l406
 						}
 						position++
 					}
-				l418:
-					goto l416
-				l417:
-					position, tokenIndex = position417, tokenIndex417
+				l407:
+					goto l405
+				l406:
+					position, tokenIndex = position406, tokenIndex406
 				}
-				add(ruleLocalLabel, position415)
+				add(ruleLocalLabel, position404)
 			}
 			return true
-		l414:
-			position, tokenIndex = position414, tokenIndex414
+		l403:
+			position, tokenIndex = position403, tokenIndex403
 			return false
 		},
-		/* 29 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
+		/* 31 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
 		func() bool {
-			position420, tokenIndex420 := position, tokenIndex
+			position409, tokenIndex409 := position, tokenIndex
 			{
-				position421 := position
+				position410 := position
 				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l420
+					goto l409
 				}
 				position++
-			l422:
+			l411:
 				{
-					position423, tokenIndex423 := position, tokenIndex
+					position412, tokenIndex412 := position, tokenIndex
 					{
-						position424, tokenIndex424 := position, tokenIndex
+						position413, tokenIndex413 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l425
+							goto l414
 						}
 						position++
-						goto l424
-					l425:
-						position, tokenIndex = position424, tokenIndex424
+						goto l413
+					l414:
+						position, tokenIndex = position413, tokenIndex413
 						if buffer[position] != rune('$') {
-							goto l423
+							goto l412
 						}
 						position++
 					}
-				l424:
-					goto l422
-				l423:
-					position, tokenIndex = position423, tokenIndex423
+				l413:
+					goto l411
+				l412:
+					position, tokenIndex = position412, tokenIndex412
 				}
 				{
-					position426, tokenIndex426 := position, tokenIndex
+					position415, tokenIndex415 := position, tokenIndex
 					if buffer[position] != rune('b') {
+						goto l416
+					}
+					position++
+					goto l415
+				l416:
+					position, tokenIndex = position415, tokenIndex415
+					if buffer[position] != rune('f') {
+						goto l409
+					}
+					position++
+				}
+			l415:
+				add(ruleLocalLabelRef, position410)
+			}
+			return true
+		l409:
+			position, tokenIndex = position409, tokenIndex409
+			return false
+		},
+		/* 32 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
+		func() bool {
+			position417, tokenIndex417 := position, tokenIndex
+			{
+				position418 := position
+				if !_rules[ruleInstructionName]() {
+					goto l417
+				}
+				{
+					position419, tokenIndex419 := position, tokenIndex
+					if !_rules[ruleWS]() {
+						goto l419
+					}
+					if !_rules[ruleInstructionArg]() {
+						goto l419
+					}
+				l421:
+					{
+						position422, tokenIndex422 := position, tokenIndex
+						{
+							position423, tokenIndex423 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l423
+							}
+							goto l424
+						l423:
+							position, tokenIndex = position423, tokenIndex423
+						}
+					l424:
+						if buffer[position] != rune(',') {
+							goto l422
+						}
+						position++
+						{
+							position425, tokenIndex425 := position, tokenIndex
+							if !_rules[ruleWS]() {
+								goto l425
+							}
+							goto l426
+						l425:
+							position, tokenIndex = position425, tokenIndex425
+						}
+					l426:
+						if !_rules[ruleInstructionArg]() {
+							goto l422
+						}
+						goto l421
+					l422:
+						position, tokenIndex = position422, tokenIndex422
+					}
+					goto l420
+				l419:
+					position, tokenIndex = position419, tokenIndex419
+				}
+			l420:
+				add(ruleInstruction, position418)
+			}
+			return true
+		l417:
+			position, tokenIndex = position417, tokenIndex417
+			return false
+		},
+		/* 33 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
+		func() bool {
+			position427, tokenIndex427 := position, tokenIndex
+			{
+				position428 := position
+				{
+					position429, tokenIndex429 := position, tokenIndex
+					if c := buffer[position]; c < rune('a') || c > rune('z') {
+						goto l430
+					}
+					position++
+					goto l429
+				l430:
+					position, tokenIndex = position429, tokenIndex429
+					if c := buffer[position]; c < rune('A') || c > rune('Z') {
 						goto l427
 					}
 					position++
-					goto l426
-				l427:
-					position, tokenIndex = position426, tokenIndex426
-					if buffer[position] != rune('f') {
-						goto l420
-					}
-					position++
 				}
-			l426:
-				add(ruleLocalLabelRef, position421)
-			}
-			return true
-		l420:
-			position, tokenIndex = position420, tokenIndex420
-			return false
-		},
-		/* 30 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
-		func() bool {
-			position428, tokenIndex428 := position, tokenIndex
-			{
-				position429 := position
-				if !_rules[ruleInstructionName]() {
-					goto l428
-				}
+			l429:
+			l431:
 				{
-					position430, tokenIndex430 := position, tokenIndex
-					if !_rules[ruleWS]() {
-						goto l430
-					}
-					if !_rules[ruleInstructionArg]() {
-						goto l430
-					}
-				l432:
+					position432, tokenIndex432 := position, tokenIndex
 					{
 						position433, tokenIndex433 := position, tokenIndex
-						{
-							position434, tokenIndex434 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l434
-							}
-							goto l435
-						l434:
-							position, tokenIndex = position434, tokenIndex434
-						}
-					l435:
-						if buffer[position] != rune(',') {
-							goto l433
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l434
 						}
 						position++
+						goto l433
+					l434:
+						position, tokenIndex = position433, tokenIndex433
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l435
+						}
+						position++
+						goto l433
+					l435:
+						position, tokenIndex = position433, tokenIndex433
+						if buffer[position] != rune('.') {
+							goto l436
+						}
+						position++
+						goto l433
+					l436:
+						position, tokenIndex = position433, tokenIndex433
 						{
-							position436, tokenIndex436 := position, tokenIndex
-							if !_rules[ruleWS]() {
-								goto l436
+							position437, tokenIndex437 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l438
 							}
+							position++
 							goto l437
-						l436:
-							position, tokenIndex = position436, tokenIndex436
+						l438:
+							position, tokenIndex = position437, tokenIndex437
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l432
+							}
+							position++
 						}
 					l437:
-						if !_rules[ruleInstructionArg]() {
-							goto l433
-						}
-						goto l432
-					l433:
-						position, tokenIndex = position433, tokenIndex433
 					}
+				l433:
 					goto l431
-				l430:
-					position, tokenIndex = position430, tokenIndex430
+				l432:
+					position, tokenIndex = position432, tokenIndex432
 				}
-			l431:
-				add(ruleInstruction, position429)
-			}
-			return true
-		l428:
-			position, tokenIndex = position428, tokenIndex428
-			return false
-		},
-		/* 31 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
-		func() bool {
-			position438, tokenIndex438 := position, tokenIndex
-			{
-				position439 := position
 				{
-					position440, tokenIndex440 := position, tokenIndex
-					if c := buffer[position]; c < rune('a') || c > rune('z') {
+					position439, tokenIndex439 := position, tokenIndex
+					{
+						position441, tokenIndex441 := position, tokenIndex
+						if buffer[position] != rune('.') {
+							goto l442
+						}
+						position++
 						goto l441
+					l442:
+						position, tokenIndex = position441, tokenIndex441
+						if buffer[position] != rune('+') {
+							goto l443
+						}
+						position++
+						goto l441
+					l443:
+						position, tokenIndex = position441, tokenIndex441
+						if buffer[position] != rune('-') {
+							goto l439
+						}
+						position++
 					}
-					position++
-					goto l440
 				l441:
-					position, tokenIndex = position440, tokenIndex440
-					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l438
-					}
-					position++
+					goto l440
+				l439:
+					position, tokenIndex = position439, tokenIndex439
 				}
 			l440:
-			l442:
-				{
-					position443, tokenIndex443 := position, tokenIndex
-					{
-						position444, tokenIndex444 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l445
-						}
-						position++
-						goto l444
-					l445:
-						position, tokenIndex = position444, tokenIndex444
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l446
-						}
-						position++
-						goto l444
-					l446:
-						position, tokenIndex = position444, tokenIndex444
-						if buffer[position] != rune('.') {
-							goto l447
-						}
-						position++
-						goto l444
-					l447:
-						position, tokenIndex = position444, tokenIndex444
-						{
-							position448, tokenIndex448 := position, tokenIndex
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l449
-							}
-							position++
-							goto l448
-						l449:
-							position, tokenIndex = position448, tokenIndex448
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l443
-							}
-							position++
-						}
-					l448:
-					}
-				l444:
-					goto l442
-				l443:
-					position, tokenIndex = position443, tokenIndex443
-				}
-				{
-					position450, tokenIndex450 := position, tokenIndex
-					{
-						position452, tokenIndex452 := position, tokenIndex
-						if buffer[position] != rune('.') {
-							goto l453
-						}
-						position++
-						goto l452
-					l453:
-						position, tokenIndex = position452, tokenIndex452
-						if buffer[position] != rune('+') {
-							goto l454
-						}
-						position++
-						goto l452
-					l454:
-						position, tokenIndex = position452, tokenIndex452
-						if buffer[position] != rune('-') {
-							goto l450
-						}
-						position++
-					}
-				l452:
-					goto l451
-				l450:
-					position, tokenIndex = position450, tokenIndex450
-				}
-			l451:
-				add(ruleInstructionName, position439)
+				add(ruleInstructionName, position428)
 			}
 			return true
-		l438:
-			position, tokenIndex = position438, tokenIndex438
+		l427:
+			position, tokenIndex = position427, tokenIndex427
 			return false
 		},
-		/* 32 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
+		/* 34 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
 		func() bool {
-			position455, tokenIndex455 := position, tokenIndex
+			position444, tokenIndex444 := position, tokenIndex
 			{
-				position456 := position
+				position445 := position
+				{
+					position446, tokenIndex446 := position, tokenIndex
+					if !_rules[ruleIndirectionIndicator]() {
+						goto l446
+					}
+					goto l447
+				l446:
+					position, tokenIndex = position446, tokenIndex446
+				}
+			l447:
+				{
+					position448, tokenIndex448 := position, tokenIndex
+					if !_rules[ruleARMConstantTweak]() {
+						goto l449
+					}
+					goto l448
+				l449:
+					position, tokenIndex = position448, tokenIndex448
+					if !_rules[ruleRegisterOrConstant]() {
+						goto l450
+					}
+					goto l448
+				l450:
+					position, tokenIndex = position448, tokenIndex448
+					if !_rules[ruleLocalLabelRef]() {
+						goto l451
+					}
+					goto l448
+				l451:
+					position, tokenIndex = position448, tokenIndex448
+					if !_rules[ruleTOCRefHigh]() {
+						goto l452
+					}
+					goto l448
+				l452:
+					position, tokenIndex = position448, tokenIndex448
+					if !_rules[ruleTOCRefLow]() {
+						goto l453
+					}
+					goto l448
+				l453:
+					position, tokenIndex = position448, tokenIndex448
+					if !_rules[ruleGOTLocation]() {
+						goto l454
+					}
+					goto l448
+				l454:
+					position, tokenIndex = position448, tokenIndex448
+					if !_rules[ruleGOTSymbolOffset]() {
+						goto l455
+					}
+					goto l448
+				l455:
+					position, tokenIndex = position448, tokenIndex448
+					if !_rules[ruleMemoryRef]() {
+						goto l444
+					}
+				}
+			l448:
+			l456:
 				{
 					position457, tokenIndex457 := position, tokenIndex
-					if !_rules[ruleIndirectionIndicator]() {
+					if !_rules[ruleAVX512Token]() {
 						goto l457
 					}
-					goto l458
+					goto l456
 				l457:
 					position, tokenIndex = position457, tokenIndex457
 				}
-			l458:
-				{
-					position459, tokenIndex459 := position, tokenIndex
-					if !_rules[ruleARMConstantTweak]() {
-						goto l460
-					}
-					goto l459
-				l460:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleRegisterOrConstant]() {
-						goto l461
-					}
-					goto l459
-				l461:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleLocalLabelRef]() {
-						goto l462
-					}
-					goto l459
-				l462:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleTOCRefHigh]() {
-						goto l463
-					}
-					goto l459
-				l463:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleTOCRefLow]() {
-						goto l464
-					}
-					goto l459
-				l464:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleGOTLocation]() {
-						goto l465
-					}
-					goto l459
-				l465:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleGOTSymbolOffset]() {
-						goto l466
-					}
-					goto l459
-				l466:
-					position, tokenIndex = position459, tokenIndex459
-					if !_rules[ruleMemoryRef]() {
-						goto l455
-					}
-				}
-			l459:
-			l467:
-				{
-					position468, tokenIndex468 := position, tokenIndex
-					if !_rules[ruleAVX512Token]() {
-						goto l468
-					}
-					goto l467
-				l468:
-					position, tokenIndex = position468, tokenIndex468
-				}
-				add(ruleInstructionArg, position456)
+				add(ruleInstructionArg, position445)
 			}
 			return true
-		l455:
-			position, tokenIndex = position455, tokenIndex455
+		l444:
+			position, tokenIndex = position444, tokenIndex444
 			return false
 		},
-		/* 33 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
+		/* 35 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
 		func() bool {
-			position469, tokenIndex469 := position, tokenIndex
+			position458, tokenIndex458 := position, tokenIndex
 			{
-				position470 := position
+				position459 := position
 				if buffer[position] != rune('$') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('G') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('B') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('A') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('O') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('F') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('F') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('S') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('E') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('T') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('A') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('B') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('L') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('E') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('_') {
-					goto l469
+					goto l458
 				}
 				position++
 				if buffer[position] != rune('-') {
-					goto l469
+					goto l458
 				}
 				position++
 				if !_rules[ruleLocalSymbol]() {
-					goto l469
+					goto l458
 				}
-				add(ruleGOTLocation, position470)
+				add(ruleGOTLocation, position459)
 			}
 			return true
-		l469:
-			position, tokenIndex = position469, tokenIndex469
+		l458:
+			position, tokenIndex = position458, tokenIndex458
 			return false
 		},
-		/* 34 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
+		/* 36 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
 		func() bool {
-			position471, tokenIndex471 := position, tokenIndex
+			position460, tokenIndex460 := position, tokenIndex
 			{
-				position472 := position
+				position461 := position
 				{
-					position473, tokenIndex473 := position, tokenIndex
+					position462, tokenIndex462 := position, tokenIndex
 					if buffer[position] != rune('$') {
-						goto l474
+						goto l463
 					}
 					position++
 					if !_rules[ruleSymbolName]() {
-						goto l474
+						goto l463
 					}
 					if buffer[position] != rune('@') {
-						goto l474
+						goto l463
 					}
 					position++
 					if buffer[position] != rune('G') {
-						goto l474
+						goto l463
 					}
 					position++
 					if buffer[position] != rune('O') {
-						goto l474
+						goto l463
 					}
 					position++
 					if buffer[position] != rune('T') {
-						goto l474
+						goto l463
 					}
 					position++
 					{
-						position475, tokenIndex475 := position, tokenIndex
+						position464, tokenIndex464 := position, tokenIndex
 						if buffer[position] != rune('O') {
-							goto l475
+							goto l464
 						}
 						position++
 						if buffer[position] != rune('F') {
-							goto l475
+							goto l464
 						}
 						position++
 						if buffer[position] != rune('F') {
-							goto l475
+							goto l464
 						}
 						position++
-						goto l476
-					l475:
-						position, tokenIndex = position475, tokenIndex475
+						goto l465
+					l464:
+						position, tokenIndex = position464, tokenIndex464
 					}
-				l476:
-					goto l473
-				l474:
-					position, tokenIndex = position473, tokenIndex473
+				l465:
+					goto l462
+				l463:
+					position, tokenIndex = position462, tokenIndex462
 					if buffer[position] != rune(':') {
-						goto l471
+						goto l460
 					}
 					position++
 					{
-						position477, tokenIndex477 := position, tokenIndex
+						position466, tokenIndex466 := position, tokenIndex
 						if buffer[position] != rune('g') {
-							goto l478
+							goto l467
 						}
 						position++
-						goto l477
-					l478:
-						position, tokenIndex = position477, tokenIndex477
+						goto l466
+					l467:
+						position, tokenIndex = position466, tokenIndex466
 						if buffer[position] != rune('G') {
-							goto l471
+							goto l460
 						}
 						position++
 					}
-				l477:
+				l466:
 					{
-						position479, tokenIndex479 := position, tokenIndex
+						position468, tokenIndex468 := position, tokenIndex
 						if buffer[position] != rune('o') {
-							goto l480
+							goto l469
 						}
 						position++
-						goto l479
-					l480:
-						position, tokenIndex = position479, tokenIndex479
+						goto l468
+					l469:
+						position, tokenIndex = position468, tokenIndex468
 						if buffer[position] != rune('O') {
-							goto l471
+							goto l460
 						}
 						position++
 					}
-				l479:
+				l468:
 					{
-						position481, tokenIndex481 := position, tokenIndex
+						position470, tokenIndex470 := position, tokenIndex
 						if buffer[position] != rune('t') {
-							goto l482
-						}
-						position++
-						goto l481
-					l482:
-						position, tokenIndex = position481, tokenIndex481
-						if buffer[position] != rune('T') {
 							goto l471
 						}
 						position++
+						goto l470
+					l471:
+						position, tokenIndex = position470, tokenIndex470
+						if buffer[position] != rune('T') {
+							goto l460
+						}
+						position++
 					}
-				l481:
+				l470:
 					if buffer[position] != rune(':') {
-						goto l471
+						goto l460
 					}
 					position++
 					if !_rules[ruleSymbolName]() {
-						goto l471
+						goto l460
 					}
 				}
-			l473:
-				add(ruleGOTSymbolOffset, position472)
+			l462:
+				add(ruleGOTSymbolOffset, position461)
 			}
 			return true
-		l471:
-			position, tokenIndex = position471, tokenIndex471
+		l460:
+			position, tokenIndex = position460, tokenIndex460
 			return false
 		},
-		/* 35 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
+		/* 37 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
 		func() bool {
-			position483, tokenIndex483 := position, tokenIndex
+			position472, tokenIndex472 := position, tokenIndex
 			{
-				position484 := position
+				position473 := position
 				{
-					position485, tokenIndex485 := position, tokenIndex
+					position474, tokenIndex474 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l485
+						goto l474
 					}
-					goto l486
-				l485:
-					position, tokenIndex = position485, tokenIndex485
+					goto l475
+				l474:
+					position, tokenIndex = position474, tokenIndex474
 				}
-			l486:
+			l475:
 				if buffer[position] != rune('{') {
-					goto l483
+					goto l472
 				}
 				position++
 				{
-					position487, tokenIndex487 := position, tokenIndex
+					position476, tokenIndex476 := position, tokenIndex
 					if buffer[position] != rune('%') {
-						goto l487
+						goto l476
 					}
 					position++
-					goto l488
-				l487:
-					position, tokenIndex = position487, tokenIndex487
+					goto l477
+				l476:
+					position, tokenIndex = position476, tokenIndex476
 				}
-			l488:
-			l489:
+			l477:
+			l478:
 				{
-					position490, tokenIndex490 := position, tokenIndex
+					position479, tokenIndex479 := position, tokenIndex
 					{
-						position491, tokenIndex491 := position, tokenIndex
+						position480, tokenIndex480 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l492
+							goto l481
 						}
 						position++
-						goto l491
-					l492:
-						position, tokenIndex = position491, tokenIndex491
+						goto l480
+					l481:
+						position, tokenIndex = position480, tokenIndex480
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l479
+						}
+						position++
+					}
+				l480:
+					goto l478
+				l479:
+					position, tokenIndex = position479, tokenIndex479
+				}
+				if buffer[position] != rune('}') {
+					goto l472
+				}
+				position++
+				add(ruleAVX512Token, position473)
+			}
+			return true
+		l472:
+			position, tokenIndex = position472, tokenIndex472
+			return false
+		},
+		/* 38 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
+		func() bool {
+			position482, tokenIndex482 := position, tokenIndex
+			{
+				position483 := position
+				if buffer[position] != rune('.') {
+					goto l482
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l482
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l482
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l482
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l482
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l482
+				}
+				position++
+				{
+					position484, tokenIndex484 := position, tokenIndex
+					if buffer[position] != rune('0') {
+						goto l485
+					}
+					position++
+					if buffer[position] != rune('b') {
+						goto l485
+					}
+					position++
+					goto l484
+				l485:
+					position, tokenIndex = position484, tokenIndex484
+					if buffer[position] != rune('.') {
+						goto l482
+					}
+					position++
+					if buffer[position] != rune('L') {
+						goto l482
+					}
+					position++
+					{
+						position488, tokenIndex488 := position, tokenIndex
+						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l489
+						}
+						position++
+						goto l488
+					l489:
+						position, tokenIndex = position488, tokenIndex488
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
 							goto l490
 						}
 						position++
+						goto l488
+					l490:
+						position, tokenIndex = position488, tokenIndex488
+						if buffer[position] != rune('_') {
+							goto l491
+						}
+						position++
+						goto l488
+					l491:
+						position, tokenIndex = position488, tokenIndex488
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l482
+						}
+						position++
 					}
-				l491:
-					goto l489
-				l490:
-					position, tokenIndex = position490, tokenIndex490
+				l488:
+				l486:
+					{
+						position487, tokenIndex487 := position, tokenIndex
+						{
+							position492, tokenIndex492 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l493
+							}
+							position++
+							goto l492
+						l493:
+							position, tokenIndex = position492, tokenIndex492
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l494
+							}
+							position++
+							goto l492
+						l494:
+							position, tokenIndex = position492, tokenIndex492
+							if buffer[position] != rune('_') {
+								goto l495
+							}
+							position++
+							goto l492
+						l495:
+							position, tokenIndex = position492, tokenIndex492
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
+								goto l487
+							}
+							position++
+						}
+					l492:
+						goto l486
+					l487:
+						position, tokenIndex = position487, tokenIndex487
+					}
 				}
-				if buffer[position] != rune('}') {
-					goto l483
-				}
-				position++
-				add(ruleAVX512Token, position484)
-			}
-			return true
-		l483:
-			position, tokenIndex = position483, tokenIndex483
-			return false
-		},
-		/* 36 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
-		func() bool {
-			position493, tokenIndex493 := position, tokenIndex
-			{
-				position494 := position
-				if buffer[position] != rune('.') {
-					goto l493
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l493
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l493
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l493
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l493
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l493
+			l484:
+				if buffer[position] != rune('@') {
+					goto l482
 				}
 				position++
 				{
-					position495, tokenIndex495 := position, tokenIndex
+					position496, tokenIndex496 := position, tokenIndex
+					if buffer[position] != rune('h') {
+						goto l497
+					}
+					position++
+					goto l496
+				l497:
+					position, tokenIndex = position496, tokenIndex496
+					if buffer[position] != rune('H') {
+						goto l482
+					}
+					position++
+				}
+			l496:
+				{
+					position498, tokenIndex498 := position, tokenIndex
+					if buffer[position] != rune('a') {
+						goto l499
+					}
+					position++
+					goto l498
+				l499:
+					position, tokenIndex = position498, tokenIndex498
+					if buffer[position] != rune('A') {
+						goto l482
+					}
+					position++
+				}
+			l498:
+				add(ruleTOCRefHigh, position483)
+			}
+			return true
+		l482:
+			position, tokenIndex = position482, tokenIndex482
+			return false
+		},
+		/* 39 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
+		func() bool {
+			position500, tokenIndex500 := position, tokenIndex
+			{
+				position501 := position
+				if buffer[position] != rune('.') {
+					goto l500
+				}
+				position++
+				if buffer[position] != rune('T') {
+					goto l500
+				}
+				position++
+				if buffer[position] != rune('O') {
+					goto l500
+				}
+				position++
+				if buffer[position] != rune('C') {
+					goto l500
+				}
+				position++
+				if buffer[position] != rune('.') {
+					goto l500
+				}
+				position++
+				if buffer[position] != rune('-') {
+					goto l500
+				}
+				position++
+				{
+					position502, tokenIndex502 := position, tokenIndex
 					if buffer[position] != rune('0') {
-						goto l496
+						goto l503
 					}
 					position++
 					if buffer[position] != rune('b') {
-						goto l496
+						goto l503
 					}
 					position++
-					goto l495
-				l496:
-					position, tokenIndex = position495, tokenIndex495
+					goto l502
+				l503:
+					position, tokenIndex = position502, tokenIndex502
 					if buffer[position] != rune('.') {
-						goto l493
+						goto l500
 					}
 					position++
 					if buffer[position] != rune('L') {
-						goto l493
+						goto l500
 					}
 					position++
 					{
-						position499, tokenIndex499 := position, tokenIndex
+						position506, tokenIndex506 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
+							goto l507
+						}
+						position++
+						goto l506
+					l507:
+						position, tokenIndex = position506, tokenIndex506
+						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l508
+						}
+						position++
+						goto l506
+					l508:
+						position, tokenIndex = position506, tokenIndex506
+						if buffer[position] != rune('_') {
+							goto l509
+						}
+						position++
+						goto l506
+					l509:
+						position, tokenIndex = position506, tokenIndex506
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
 							goto l500
 						}
 						position++
-						goto l499
-					l500:
-						position, tokenIndex = position499, tokenIndex499
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l501
-						}
-						position++
-						goto l499
-					l501:
-						position, tokenIndex = position499, tokenIndex499
-						if buffer[position] != rune('_') {
-							goto l502
-						}
-						position++
-						goto l499
-					l502:
-						position, tokenIndex = position499, tokenIndex499
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l493
-						}
-						position++
 					}
-				l499:
-				l497:
+				l506:
+				l504:
 					{
-						position498, tokenIndex498 := position, tokenIndex
+						position505, tokenIndex505 := position, tokenIndex
 						{
-							position503, tokenIndex503 := position, tokenIndex
+							position510, tokenIndex510 := position, tokenIndex
 							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l504
+								goto l511
 							}
 							position++
-							goto l503
-						l504:
-							position, tokenIndex = position503, tokenIndex503
+							goto l510
+						l511:
+							position, tokenIndex = position510, tokenIndex510
 							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l512
+							}
+							position++
+							goto l510
+						l512:
+							position, tokenIndex = position510, tokenIndex510
+							if buffer[position] != rune('_') {
+								goto l513
+							}
+							position++
+							goto l510
+						l513:
+							position, tokenIndex = position510, tokenIndex510
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l505
 							}
 							position++
-							goto l503
-						l505:
-							position, tokenIndex = position503, tokenIndex503
-							if buffer[position] != rune('_') {
-								goto l506
-							}
-							position++
-							goto l503
-						l506:
-							position, tokenIndex = position503, tokenIndex503
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l498
-							}
-							position++
 						}
-					l503:
-						goto l497
-					l498:
-						position, tokenIndex = position498, tokenIndex498
+					l510:
+						goto l504
+					l505:
+						position, tokenIndex = position505, tokenIndex505
 					}
 				}
-			l495:
+			l502:
 				if buffer[position] != rune('@') {
-					goto l493
+					goto l500
 				}
 				position++
 				{
-					position507, tokenIndex507 := position, tokenIndex
-					if buffer[position] != rune('h') {
-						goto l508
-					}
-					position++
-					goto l507
-				l508:
-					position, tokenIndex = position507, tokenIndex507
-					if buffer[position] != rune('H') {
-						goto l493
-					}
-					position++
-				}
-			l507:
-				{
-					position509, tokenIndex509 := position, tokenIndex
-					if buffer[position] != rune('a') {
-						goto l510
-					}
-					position++
-					goto l509
-				l510:
-					position, tokenIndex = position509, tokenIndex509
-					if buffer[position] != rune('A') {
-						goto l493
-					}
-					position++
-				}
-			l509:
-				add(ruleTOCRefHigh, position494)
-			}
-			return true
-		l493:
-			position, tokenIndex = position493, tokenIndex493
-			return false
-		},
-		/* 37 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
-		func() bool {
-			position511, tokenIndex511 := position, tokenIndex
-			{
-				position512 := position
-				if buffer[position] != rune('.') {
-					goto l511
-				}
-				position++
-				if buffer[position] != rune('T') {
-					goto l511
-				}
-				position++
-				if buffer[position] != rune('O') {
-					goto l511
-				}
-				position++
-				if buffer[position] != rune('C') {
-					goto l511
-				}
-				position++
-				if buffer[position] != rune('.') {
-					goto l511
-				}
-				position++
-				if buffer[position] != rune('-') {
-					goto l511
-				}
-				position++
-				{
-					position513, tokenIndex513 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l514
-					}
-					position++
-					if buffer[position] != rune('b') {
-						goto l514
-					}
-					position++
-					goto l513
-				l514:
-					position, tokenIndex = position513, tokenIndex513
-					if buffer[position] != rune('.') {
-						goto l511
-					}
-					position++
-					if buffer[position] != rune('L') {
-						goto l511
-					}
-					position++
-					{
-						position517, tokenIndex517 := position, tokenIndex
-						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l518
-						}
-						position++
-						goto l517
-					l518:
-						position, tokenIndex = position517, tokenIndex517
-						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l519
-						}
-						position++
-						goto l517
-					l519:
-						position, tokenIndex = position517, tokenIndex517
-						if buffer[position] != rune('_') {
-							goto l520
-						}
-						position++
-						goto l517
-					l520:
-						position, tokenIndex = position517, tokenIndex517
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l511
-						}
-						position++
-					}
-				l517:
-				l515:
-					{
-						position516, tokenIndex516 := position, tokenIndex
-						{
-							position521, tokenIndex521 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l522
-							}
-							position++
-							goto l521
-						l522:
-							position, tokenIndex = position521, tokenIndex521
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l523
-							}
-							position++
-							goto l521
-						l523:
-							position, tokenIndex = position521, tokenIndex521
-							if buffer[position] != rune('_') {
-								goto l524
-							}
-							position++
-							goto l521
-						l524:
-							position, tokenIndex = position521, tokenIndex521
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l516
-							}
-							position++
-						}
-					l521:
-						goto l515
-					l516:
-						position, tokenIndex = position516, tokenIndex516
-					}
-				}
-			l513:
-				if buffer[position] != rune('@') {
-					goto l511
-				}
-				position++
-				{
-					position525, tokenIndex525 := position, tokenIndex
+					position514, tokenIndex514 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l526
+						goto l515
 					}
 					position++
-					goto l525
-				l526:
-					position, tokenIndex = position525, tokenIndex525
+					goto l514
+				l515:
+					position, tokenIndex = position514, tokenIndex514
 					if buffer[position] != rune('L') {
-						goto l511
+						goto l500
 					}
 					position++
 				}
-			l525:
-				add(ruleTOCRefLow, position512)
+			l514:
+				add(ruleTOCRefLow, position501)
 			}
 			return true
-		l511:
-			position, tokenIndex = position511, tokenIndex511
+		l500:
+			position, tokenIndex = position500, tokenIndex500
 			return false
 		},
-		/* 38 IndirectionIndicator <- <'*'> */
+		/* 40 IndirectionIndicator <- <'*'> */
 		func() bool {
-			position527, tokenIndex527 := position, tokenIndex
+			position516, tokenIndex516 := position, tokenIndex
 			{
-				position528 := position
+				position517 := position
 				if buffer[position] != rune('*') {
-					goto l527
+					goto l516
 				}
 				position++
-				add(ruleIndirectionIndicator, position528)
+				add(ruleIndirectionIndicator, position517)
 			}
 			return true
-		l527:
-			position, tokenIndex = position527, tokenIndex527
+		l516:
+			position, tokenIndex = position516, tokenIndex516
 			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' / ':' / '(' / '+' / '-'))> */
+		/* 41 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 {
-			position529, tokenIndex529 := position, tokenIndex
+			position518, tokenIndex518 := position, tokenIndex
 			{
-				position530 := position
+				position519 := position
 				{
-					position531, tokenIndex531 := position, tokenIndex
+					position520, tokenIndex520 := position, tokenIndex
 					if buffer[position] != rune('%') {
-						goto l532
+						goto l521
 					}
 					position++
 					{
-						position533, tokenIndex533 := position, tokenIndex
+						position522, tokenIndex522 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l534
+							goto l523
 						}
 						position++
-						goto l533
-					l534:
-						position, tokenIndex = position533, tokenIndex533
+						goto l522
+					l523:
+						position, tokenIndex = position522, tokenIndex522
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
+							goto l521
+						}
+						position++
+					}
+				l522:
+				l524:
+					{
+						position525, tokenIndex525 := position, tokenIndex
+						{
+							position526, tokenIndex526 := position, tokenIndex
+							if c := buffer[position]; c < rune('a') || c > rune('z') {
+								goto l527
+							}
+							position++
+							goto l526
+						l527:
+							position, tokenIndex = position526, tokenIndex526
+							if c := buffer[position]; c < rune('A') || c > rune('Z') {
+								goto l528
+							}
+							position++
+							goto l526
+						l528:
+							position, tokenIndex = position526, tokenIndex526
+							{
+								position529, tokenIndex529 := position, tokenIndex
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l530
+								}
+								position++
+								goto l529
+							l530:
+								position, tokenIndex = position529, tokenIndex529
+								if c := buffer[position]; c < rune('0') || c > rune('9') {
+									goto l525
+								}
+								position++
+							}
+						l529:
+						}
+					l526:
+						goto l524
+					l525:
+						position, tokenIndex = position525, tokenIndex525
+					}
+					goto l520
+				l521:
+					position, tokenIndex = position520, tokenIndex520
+					{
+						position532, tokenIndex532 := position, tokenIndex
+						if buffer[position] != rune('$') {
 							goto l532
 						}
 						position++
+						goto l533
+					l532:
+						position, tokenIndex = position532, tokenIndex532
 					}
 				l533:
-				l535:
 					{
-						position536, tokenIndex536 := position, tokenIndex
-						{
-							position537, tokenIndex537 := position, tokenIndex
-							if c := buffer[position]; c < rune('a') || c > rune('z') {
-								goto l538
-							}
-							position++
-							goto l537
-						l538:
-							position, tokenIndex = position537, tokenIndex537
-							if c := buffer[position]; c < rune('A') || c > rune('Z') {
-								goto l539
-							}
-							position++
-							goto l537
-						l539:
-							position, tokenIndex = position537, tokenIndex537
-							{
-								position540, tokenIndex540 := position, tokenIndex
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l541
-								}
-								position++
-								goto l540
-							l541:
-								position, tokenIndex = position540, tokenIndex540
-								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l536
-								}
-								position++
-							}
-						l540:
-						}
-					l537:
-						goto l535
-					l536:
-						position, tokenIndex = position536, tokenIndex536
-					}
-					goto l531
-				l532:
-					position, tokenIndex = position531, tokenIndex531
-					{
-						position543, tokenIndex543 := position, tokenIndex
-						if buffer[position] != rune('$') {
-							goto l543
-						}
-						position++
-						goto l544
-					l543:
-						position, tokenIndex = position543, tokenIndex543
-					}
-				l544:
-					{
-						position545, tokenIndex545 := position, tokenIndex
+						position534, tokenIndex534 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l546
+							goto l535
 						}
 						if !_rules[ruleOffset]() {
-							goto l546
+							goto l535
 						}
-						goto l545
-					l546:
-						position, tokenIndex = position545, tokenIndex545
+						goto l534
+					l535:
+						position, tokenIndex = position534, tokenIndex534
 						if !_rules[ruleOffset]() {
-							goto l542
+							goto l531
 						}
 					}
-				l545:
-					goto l531
-				l542:
-					position, tokenIndex = position531, tokenIndex531
+				l534:
+					goto l520
+				l531:
+					position, tokenIndex = position520, tokenIndex520
 					if buffer[position] != rune('#') {
-						goto l547
+						goto l536
 					}
 					position++
 					if !_rules[ruleOffset]() {
-						goto l547
+						goto l536
 					}
 					{
-						position548, tokenIndex548 := position, tokenIndex
+						position537, tokenIndex537 := position, tokenIndex
 						if buffer[position] != rune('*') {
-							goto l548
+							goto l537
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l548
+							goto l537
 						}
 						position++
-					l550:
+					l539:
 						{
-							position551, tokenIndex551 := position, tokenIndex
+							position540, tokenIndex540 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l551
+								goto l540
 							}
 							position++
-							goto l550
-						l551:
-							position, tokenIndex = position551, tokenIndex551
+							goto l539
+						l540:
+							position, tokenIndex = position540, tokenIndex540
 						}
 						{
-							position552, tokenIndex552 := position, tokenIndex
+							position541, tokenIndex541 := position, tokenIndex
 							if buffer[position] != rune('-') {
-								goto l552
+								goto l541
 							}
 							position++
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l552
+								goto l541
 							}
 							position++
-						l554:
+						l543:
 							{
-								position555, tokenIndex555 := position, tokenIndex
+								position544, tokenIndex544 := position, tokenIndex
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l555
+									goto l544
 								}
 								position++
-								goto l554
-							l555:
-								position, tokenIndex = position555, tokenIndex555
+								goto l543
+							l544:
+								position, tokenIndex = position544, tokenIndex544
 							}
-							goto l553
-						l552:
-							position, tokenIndex = position552, tokenIndex552
+							goto l542
+						l541:
+							position, tokenIndex = position541, tokenIndex541
 						}
-					l553:
+					l542:
+						goto l538
+					l537:
+						position, tokenIndex = position537, tokenIndex537
+					}
+				l538:
+					goto l520
+				l536:
+					position, tokenIndex = position520, tokenIndex520
+					if buffer[position] != rune('#') {
+						goto l545
+					}
+					position++
+					{
+						position546, tokenIndex546 := position, tokenIndex
+						if buffer[position] != rune('~') {
+							goto l546
+						}
+						position++
+						goto l547
+					l546:
+						position, tokenIndex = position546, tokenIndex546
+					}
+				l547:
+					if buffer[position] != rune('(') {
+						goto l545
+					}
+					position++
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l545
+					}
+					position++
+					{
+						position548, tokenIndex548 := position, tokenIndex
+						if !_rules[ruleWS]() {
+							goto l548
+						}
 						goto l549
 					l548:
 						position, tokenIndex = position548, tokenIndex548
 					}
 				l549:
-					goto l531
-				l547:
-					position, tokenIndex = position531, tokenIndex531
-					if buffer[position] != rune('#') {
-						goto l556
-					}
-					position++
-					{
-						position557, tokenIndex557 := position, tokenIndex
-						if buffer[position] != rune('~') {
-							goto l557
-						}
-						position++
-						goto l558
-					l557:
-						position, tokenIndex = position557, tokenIndex557
-					}
-				l558:
-					if buffer[position] != rune('(') {
-						goto l556
-					}
-					position++
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l556
-					}
-					position++
-					{
-						position559, tokenIndex559 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l559
-						}
-						goto l560
-					l559:
-						position, tokenIndex = position559, tokenIndex559
-					}
-				l560:
 					if buffer[position] != rune('<') {
-						goto l556
+						goto l545
 					}
 					position++
 					if buffer[position] != rune('<') {
-						goto l556
+						goto l545
 					}
 					position++
 					{
-						position561, tokenIndex561 := position, tokenIndex
+						position550, tokenIndex550 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l561
+							goto l550
 						}
-						goto l562
-					l561:
-						position, tokenIndex = position561, tokenIndex561
+						goto l551
+					l550:
+						position, tokenIndex = position550, tokenIndex550
 					}
-				l562:
+				l551:
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l556
+						goto l545
 					}
 					position++
 					if buffer[position] != rune(')') {
-						goto l556
+						goto l545
 					}
 					position++
-					goto l531
-				l556:
-					position, tokenIndex = position531, tokenIndex531
+					goto l520
+				l545:
+					position, tokenIndex = position520, tokenIndex520
 					if !_rules[ruleARMRegister]() {
-						goto l529
+						goto l518
 					}
 				}
-			l531:
+			l520:
 				{
-					position563, tokenIndex563 := position, tokenIndex
+					position552, tokenIndex552 := position, tokenIndex
 					{
-						position564, tokenIndex564 := position, tokenIndex
+						position553, tokenIndex553 := position, tokenIndex
 						if buffer[position] != rune('f') {
-							goto l565
+							goto l554
 						}
 						position++
-						goto l564
-					l565:
-						position, tokenIndex = position564, tokenIndex564
+						goto l553
+					l554:
+						position, tokenIndex = position553, tokenIndex553
 						if buffer[position] != rune('b') {
+							goto l555
+						}
+						position++
+						goto l553
+					l555:
+						position, tokenIndex = position553, tokenIndex553
+						if buffer[position] != rune(':') {
+							goto l556
+						}
+						position++
+						goto l553
+					l556:
+						position, tokenIndex = position553, tokenIndex553
+						if buffer[position] != rune('(') {
+							goto l557
+						}
+						position++
+						goto l553
+					l557:
+						position, tokenIndex = position553, tokenIndex553
+						if buffer[position] != rune('+') {
+							goto l558
+						}
+						position++
+						goto l553
+					l558:
+						position, tokenIndex = position553, tokenIndex553
+						if buffer[position] != rune('-') {
+							goto l552
+						}
+						position++
+					}
+				l553:
+					goto l518
+				l552:
+					position, tokenIndex = position552, tokenIndex552
+				}
+				add(ruleRegisterOrConstant, position519)
+			}
+			return true
+		l518:
+			position, tokenIndex = position518, tokenIndex518
+			return false
+		},
+		/* 42 ARMConstantTweak <- <(((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
+		func() bool {
+			position559, tokenIndex559 := position, tokenIndex
+			{
+				position560 := position
+				{
+					position561, tokenIndex561 := position, tokenIndex
+					{
+						position563, tokenIndex563 := position, tokenIndex
+						if buffer[position] != rune('u') {
+							goto l564
+						}
+						position++
+						goto l563
+					l564:
+						position, tokenIndex = position563, tokenIndex563
+						if buffer[position] != rune('s') {
+							goto l562
+						}
+						position++
+					}
+				l563:
+					{
+						position565, tokenIndex565 := position, tokenIndex
+						if buffer[position] != rune('x') {
 							goto l566
 						}
 						position++
-						goto l564
+						goto l565
 					l566:
-						position, tokenIndex = position564, tokenIndex564
-						if buffer[position] != rune(':') {
-							goto l567
-						}
-						position++
-						goto l564
-					l567:
-						position, tokenIndex = position564, tokenIndex564
-						if buffer[position] != rune('(') {
-							goto l568
-						}
-						position++
-						goto l564
-					l568:
-						position, tokenIndex = position564, tokenIndex564
-						if buffer[position] != rune('+') {
-							goto l569
-						}
-						position++
-						goto l564
-					l569:
-						position, tokenIndex = position564, tokenIndex564
-						if buffer[position] != rune('-') {
-							goto l563
+						position, tokenIndex = position565, tokenIndex565
+						if buffer[position] != rune('X') {
+							goto l562
 						}
 						position++
 					}
-				l564:
-					goto l529
-				l563:
-					position, tokenIndex = position563, tokenIndex563
-				}
-				add(ruleRegisterOrConstant, position530)
-			}
-			return true
-		l529:
-			position, tokenIndex = position529, tokenIndex529
-			return false
-		},
-		/* 40 ARMConstantTweak <- <(((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
-		func() bool {
-			position570, tokenIndex570 := position, tokenIndex
-			{
-				position571 := position
-				{
-					position572, tokenIndex572 := position, tokenIndex
+				l565:
+					{
+						position567, tokenIndex567 := position, tokenIndex
+						if buffer[position] != rune('t') {
+							goto l568
+						}
+						position++
+						goto l567
+					l568:
+						position, tokenIndex = position567, tokenIndex567
+						if buffer[position] != rune('T') {
+							goto l562
+						}
+						position++
+					}
+				l567:
+					{
+						position569, tokenIndex569 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l570
+						}
+						position++
+						goto l569
+					l570:
+						position, tokenIndex = position569, tokenIndex569
+						if buffer[position] != rune('w') {
+							goto l571
+						}
+						position++
+						goto l569
+					l571:
+						position, tokenIndex = position569, tokenIndex569
+						if buffer[position] != rune('h') {
+							goto l572
+						}
+						position++
+						goto l569
+					l572:
+						position, tokenIndex = position569, tokenIndex569
+						if buffer[position] != rune('b') {
+							goto l562
+						}
+						position++
+					}
+				l569:
+					goto l561
+				l562:
+					position, tokenIndex = position561, tokenIndex561
 					{
 						position574, tokenIndex574 := position, tokenIndex
-						if buffer[position] != rune('u') {
+						if buffer[position] != rune('l') {
 							goto l575
 						}
 						position++
 						goto l574
 					l575:
 						position, tokenIndex = position574, tokenIndex574
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('L') {
 							goto l573
 						}
 						position++
@@ -4618,14 +4659,14 @@
 				l574:
 					{
 						position576, tokenIndex576 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('s') {
 							goto l577
 						}
 						position++
 						goto l576
 					l577:
 						position, tokenIndex = position576, tokenIndex576
-						if buffer[position] != rune('X') {
+						if buffer[position] != rune('S') {
 							goto l573
 						}
 						position++
@@ -4633,1790 +4674,1713 @@
 				l576:
 					{
 						position578, tokenIndex578 := position, tokenIndex
-						if buffer[position] != rune('t') {
+						if buffer[position] != rune('l') {
 							goto l579
 						}
 						position++
 						goto l578
 					l579:
 						position, tokenIndex = position578, tokenIndex578
-						if buffer[position] != rune('T') {
+						if buffer[position] != rune('L') {
 							goto l573
 						}
 						position++
 					}
 				l578:
+					goto l561
+				l573:
+					position, tokenIndex = position561, tokenIndex561
 					{
-						position580, tokenIndex580 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l581
-						}
-						position++
-						goto l580
-					l581:
-						position, tokenIndex = position580, tokenIndex580
-						if buffer[position] != rune('w') {
+						position581, tokenIndex581 := position, tokenIndex
+						if buffer[position] != rune('l') {
 							goto l582
 						}
 						position++
-						goto l580
+						goto l581
 					l582:
-						position, tokenIndex = position580, tokenIndex580
-						if buffer[position] != rune('h') {
-							goto l583
-						}
-						position++
-						goto l580
-					l583:
-						position, tokenIndex = position580, tokenIndex580
-						if buffer[position] != rune('b') {
-							goto l573
+						position, tokenIndex = position581, tokenIndex581
+						if buffer[position] != rune('L') {
+							goto l580
 						}
 						position++
 					}
-				l580:
-					goto l572
-				l573:
-					position, tokenIndex = position572, tokenIndex572
+				l581:
+					{
+						position583, tokenIndex583 := position, tokenIndex
+						if buffer[position] != rune('s') {
+							goto l584
+						}
+						position++
+						goto l583
+					l584:
+						position, tokenIndex = position583, tokenIndex583
+						if buffer[position] != rune('S') {
+							goto l580
+						}
+						position++
+					}
+				l583:
 					{
 						position585, tokenIndex585 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('r') {
 							goto l586
 						}
 						position++
 						goto l585
 					l586:
 						position, tokenIndex = position585, tokenIndex585
-						if buffer[position] != rune('L') {
-							goto l584
+						if buffer[position] != rune('R') {
+							goto l580
 						}
 						position++
 					}
 				l585:
+					goto l561
+				l580:
+					position, tokenIndex = position561, tokenIndex561
 					{
-						position587, tokenIndex587 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l588
+						position588, tokenIndex588 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l589
 						}
 						position++
-						goto l587
-					l588:
-						position, tokenIndex = position587, tokenIndex587
-						if buffer[position] != rune('S') {
-							goto l584
+						goto l588
+					l589:
+						position, tokenIndex = position588, tokenIndex588
+						if buffer[position] != rune('R') {
+							goto l587
 						}
 						position++
 					}
-				l587:
+				l588:
 					{
-						position589, tokenIndex589 := position, tokenIndex
-						if buffer[position] != rune('l') {
-							goto l590
+						position590, tokenIndex590 := position, tokenIndex
+						if buffer[position] != rune('o') {
+							goto l591
 						}
 						position++
-						goto l589
-					l590:
-						position, tokenIndex = position589, tokenIndex589
-						if buffer[position] != rune('L') {
-							goto l584
+						goto l590
+					l591:
+						position, tokenIndex = position590, tokenIndex590
+						if buffer[position] != rune('O') {
+							goto l587
 						}
 						position++
 					}
-				l589:
-					goto l572
-				l584:
-					position, tokenIndex = position572, tokenIndex572
+				l590:
 					{
 						position592, tokenIndex592 := position, tokenIndex
-						if buffer[position] != rune('l') {
+						if buffer[position] != rune('r') {
 							goto l593
 						}
 						position++
 						goto l592
 					l593:
 						position, tokenIndex = position592, tokenIndex592
-						if buffer[position] != rune('L') {
-							goto l591
+						if buffer[position] != rune('R') {
+							goto l587
 						}
 						position++
 					}
 				l592:
+					goto l561
+				l587:
+					position, tokenIndex = position561, tokenIndex561
 					{
 						position594, tokenIndex594 := position, tokenIndex
-						if buffer[position] != rune('s') {
+						if buffer[position] != rune('a') {
 							goto l595
 						}
 						position++
 						goto l594
 					l595:
 						position, tokenIndex = position594, tokenIndex594
-						if buffer[position] != rune('S') {
-							goto l591
+						if buffer[position] != rune('A') {
+							goto l559
 						}
 						position++
 					}
 				l594:
 					{
 						position596, tokenIndex596 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						if buffer[position] != rune('s') {
 							goto l597
 						}
 						position++
 						goto l596
 					l597:
 						position, tokenIndex = position596, tokenIndex596
-						if buffer[position] != rune('R') {
-							goto l591
+						if buffer[position] != rune('S') {
+							goto l559
 						}
 						position++
 					}
 				l596:
-					goto l572
-				l591:
-					position, tokenIndex = position572, tokenIndex572
 					{
-						position599, tokenIndex599 := position, tokenIndex
+						position598, tokenIndex598 := position, tokenIndex
 						if buffer[position] != rune('r') {
-							goto l600
+							goto l599
 						}
 						position++
-						goto l599
-					l600:
-						position, tokenIndex = position599, tokenIndex599
+						goto l598
+					l599:
+						position, tokenIndex = position598, tokenIndex598
 						if buffer[position] != rune('R') {
-							goto l598
+							goto l559
 						}
 						position++
 					}
-				l599:
-					{
-						position601, tokenIndex601 := position, tokenIndex
-						if buffer[position] != rune('o') {
-							goto l602
-						}
-						position++
-						goto l601
-					l602:
-						position, tokenIndex = position601, tokenIndex601
-						if buffer[position] != rune('O') {
-							goto l598
-						}
-						position++
-					}
-				l601:
-					{
-						position603, tokenIndex603 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l604
-						}
-						position++
-						goto l603
-					l604:
-						position, tokenIndex = position603, tokenIndex603
-						if buffer[position] != rune('R') {
-							goto l598
-						}
-						position++
-					}
-				l603:
-					goto l572
 				l598:
-					position, tokenIndex = position572, tokenIndex572
-					{
-						position605, tokenIndex605 := position, tokenIndex
-						if buffer[position] != rune('a') {
-							goto l606
-						}
-						position++
-						goto l605
-					l606:
-						position, tokenIndex = position605, tokenIndex605
-						if buffer[position] != rune('A') {
-							goto l570
-						}
-						position++
-					}
-				l605:
-					{
-						position607, tokenIndex607 := position, tokenIndex
-						if buffer[position] != rune('s') {
-							goto l608
-						}
-						position++
-						goto l607
-					l608:
-						position, tokenIndex = position607, tokenIndex607
-						if buffer[position] != rune('S') {
-							goto l570
-						}
-						position++
-					}
-				l607:
-					{
-						position609, tokenIndex609 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l610
-						}
-						position++
-						goto l609
-					l610:
-						position, tokenIndex = position609, tokenIndex609
-						if buffer[position] != rune('R') {
-							goto l570
-						}
-						position++
-					}
-				l609:
 				}
-			l572:
+			l561:
 				{
-					position611, tokenIndex611 := position, tokenIndex
+					position600, tokenIndex600 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l611
+						goto l600
 					}
 					if buffer[position] != rune('#') {
-						goto l611
+						goto l600
 					}
 					position++
 					if !_rules[ruleOffset]() {
-						goto l611
+						goto l600
 					}
-					goto l612
-				l611:
-					position, tokenIndex = position611, tokenIndex611
+					goto l601
+				l600:
+					position, tokenIndex = position600, tokenIndex600
 				}
-			l612:
-				add(ruleARMConstantTweak, position571)
+			l601:
+				add(ruleARMConstantTweak, position560)
 			}
 			return true
-		l570:
-			position, tokenIndex = position570, tokenIndex570
+		l559:
+			position, tokenIndex = position559, tokenIndex559
 			return false
 		},
-		/* 41 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
+		/* 43 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
 		func() bool {
-			position613, tokenIndex613 := position, tokenIndex
+			position602, tokenIndex602 := position, tokenIndex
 			{
-				position614 := position
+				position603 := position
 				{
-					position615, tokenIndex615 := position, tokenIndex
+					position604, tokenIndex604 := position, tokenIndex
 					{
-						position617, tokenIndex617 := position, tokenIndex
+						position606, tokenIndex606 := position, tokenIndex
 						if buffer[position] != rune('s') {
-							goto l618
+							goto l607
 						}
 						position++
-						goto l617
-					l618:
-						position, tokenIndex = position617, tokenIndex617
+						goto l606
+					l607:
+						position, tokenIndex = position606, tokenIndex606
 						if buffer[position] != rune('S') {
-							goto l616
+							goto l605
 						}
 						position++
 					}
-				l617:
+				l606:
 					{
-						position619, tokenIndex619 := position, tokenIndex
+						position608, tokenIndex608 := position, tokenIndex
 						if buffer[position] != rune('p') {
-							goto l620
+							goto l609
 						}
 						position++
-						goto l619
-					l620:
-						position, tokenIndex = position619, tokenIndex619
+						goto l608
+					l609:
+						position, tokenIndex = position608, tokenIndex608
 						if buffer[position] != rune('P') {
+							goto l605
+						}
+						position++
+					}
+				l608:
+					goto l604
+				l605:
+					position, tokenIndex = position604, tokenIndex604
+					{
+						position611, tokenIndex611 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l612
+						}
+						position++
+						goto l611
+					l612:
+						position, tokenIndex = position611, tokenIndex611
+						if buffer[position] != rune('w') {
+							goto l613
+						}
+						position++
+						goto l611
+					l613:
+						position, tokenIndex = position611, tokenIndex611
+						if buffer[position] != rune('d') {
+							goto l614
+						}
+						position++
+						goto l611
+					l614:
+						position, tokenIndex = position611, tokenIndex611
+						if buffer[position] != rune('q') {
+							goto l615
+						}
+						position++
+						goto l611
+					l615:
+						position, tokenIndex = position611, tokenIndex611
+						if buffer[position] != rune('s') {
 							goto l616
 						}
 						position++
-					}
-				l619:
-					goto l615
-				l616:
-					position, tokenIndex = position615, tokenIndex615
-					{
-						position622, tokenIndex622 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l623
-						}
-						position++
-						goto l622
-					l623:
-						position, tokenIndex = position622, tokenIndex622
-						if buffer[position] != rune('w') {
-							goto l624
-						}
-						position++
-						goto l622
-					l624:
-						position, tokenIndex = position622, tokenIndex622
-						if buffer[position] != rune('d') {
-							goto l625
-						}
-						position++
-						goto l622
-					l625:
-						position, tokenIndex = position622, tokenIndex622
-						if buffer[position] != rune('q') {
-							goto l626
-						}
-						position++
-						goto l622
-					l626:
-						position, tokenIndex = position622, tokenIndex622
-						if buffer[position] != rune('s') {
-							goto l627
-						}
-						position++
-						goto l622
-					l627:
-						position, tokenIndex = position622, tokenIndex622
+						goto l611
+					l616:
+						position, tokenIndex = position611, tokenIndex611
 						if buffer[position] != rune('h') {
-							goto l628
+							goto l617
 						}
 						position++
-						goto l622
-					l628:
-						position, tokenIndex = position622, tokenIndex622
+						goto l611
+					l617:
+						position, tokenIndex = position611, tokenIndex611
 						if buffer[position] != rune('b') {
-							goto l621
+							goto l610
 						}
 						position++
 					}
-				l622:
+				l611:
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l621
+						goto l610
 					}
 					position++
 					{
-						position629, tokenIndex629 := position, tokenIndex
+						position618, tokenIndex618 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l618
+						}
+						position++
+						goto l619
+					l618:
+						position, tokenIndex = position618, tokenIndex618
+					}
+				l619:
+					goto l604
+				l610:
+					position, tokenIndex = position604, tokenIndex604
+					{
+						position621, tokenIndex621 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l622
+						}
+						position++
+						goto l621
+					l622:
+						position, tokenIndex = position621, tokenIndex621
+						if buffer[position] != rune('X') {
+							goto l620
+						}
+						position++
+					}
+				l621:
+					{
+						position623, tokenIndex623 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l624
+						}
+						position++
+						goto l623
+					l624:
+						position, tokenIndex = position623, tokenIndex623
+						if buffer[position] != rune('Z') {
+							goto l620
+						}
+						position++
+					}
+				l623:
+					{
+						position625, tokenIndex625 := position, tokenIndex
+						if buffer[position] != rune('r') {
+							goto l626
+						}
+						position++
+						goto l625
+					l626:
+						position, tokenIndex = position625, tokenIndex625
+						if buffer[position] != rune('R') {
+							goto l620
+						}
+						position++
+					}
+				l625:
+					goto l604
+				l620:
+					position, tokenIndex = position604, tokenIndex604
+					{
+						position628, tokenIndex628 := position, tokenIndex
+						if buffer[position] != rune('w') {
 							goto l629
 						}
 						position++
-						goto l630
+						goto l628
 					l629:
-						position, tokenIndex = position629, tokenIndex629
+						position, tokenIndex = position628, tokenIndex628
+						if buffer[position] != rune('W') {
+							goto l627
+						}
+						position++
+					}
+				l628:
+					{
+						position630, tokenIndex630 := position, tokenIndex
+						if buffer[position] != rune('z') {
+							goto l631
+						}
+						position++
+						goto l630
+					l631:
+						position, tokenIndex = position630, tokenIndex630
+						if buffer[position] != rune('Z') {
+							goto l627
+						}
+						position++
 					}
 				l630:
-					goto l615
-				l621:
-					position, tokenIndex = position615, tokenIndex615
 					{
 						position632, tokenIndex632 := position, tokenIndex
-						if buffer[position] != rune('x') {
+						if buffer[position] != rune('r') {
 							goto l633
 						}
 						position++
 						goto l632
 					l633:
 						position, tokenIndex = position632, tokenIndex632
-						if buffer[position] != rune('X') {
-							goto l631
+						if buffer[position] != rune('R') {
+							goto l627
 						}
 						position++
 					}
 				l632:
+					goto l604
+				l627:
+					position, tokenIndex = position604, tokenIndex604
 					{
-						position634, tokenIndex634 := position, tokenIndex
+						position635, tokenIndex635 := position, tokenIndex
+						if buffer[position] != rune('n') {
+							goto l636
+						}
+						position++
+						goto l635
+					l636:
+						position, tokenIndex = position635, tokenIndex635
+						if buffer[position] != rune('N') {
+							goto l634
+						}
+						position++
+					}
+				l635:
+					{
+						position637, tokenIndex637 := position, tokenIndex
 						if buffer[position] != rune('z') {
-							goto l635
+							goto l638
 						}
 						position++
-						goto l634
-					l635:
-						position, tokenIndex = position634, tokenIndex634
+						goto l637
+					l638:
+						position, tokenIndex = position637, tokenIndex637
 						if buffer[position] != rune('Z') {
-							goto l631
+							goto l634
 						}
 						position++
 					}
-				l634:
-					{
-						position636, tokenIndex636 := position, tokenIndex
-						if buffer[position] != rune('r') {
-							goto l637
-						}
-						position++
-						goto l636
-					l637:
-						position, tokenIndex = position636, tokenIndex636
-						if buffer[position] != rune('R') {
-							goto l631
-						}
-						position++
-					}
-				l636:
-					goto l615
-				l631:
-					position, tokenIndex = position615, tokenIndex615
+				l637:
 					{
 						position639, tokenIndex639 := position, tokenIndex
-						if buffer[position] != rune('w') {
+						if buffer[position] != rune('c') {
 							goto l640
 						}
 						position++
 						goto l639
 					l640:
 						position, tokenIndex = position639, tokenIndex639
-						if buffer[position] != rune('W') {
-							goto l638
+						if buffer[position] != rune('C') {
+							goto l634
 						}
 						position++
 					}
 				l639:
 					{
 						position641, tokenIndex641 := position, tokenIndex
-						if buffer[position] != rune('z') {
+						if buffer[position] != rune('v') {
 							goto l642
 						}
 						position++
 						goto l641
 					l642:
 						position, tokenIndex = position641, tokenIndex641
-						if buffer[position] != rune('Z') {
-							goto l638
+						if buffer[position] != rune('V') {
+							goto l634
 						}
 						position++
 					}
 				l641:
+					goto l604
+				l634:
+					position, tokenIndex = position604, tokenIndex604
+					if !_rules[ruleARMVectorRegister]() {
+						goto l643
+					}
+					goto l604
+				l643:
+					position, tokenIndex = position604, tokenIndex604
+					if buffer[position] != rune('{') {
+						goto l602
+					}
+					position++
 					{
-						position643, tokenIndex643 := position, tokenIndex
-						if buffer[position] != rune('r') {
+						position644, tokenIndex644 := position, tokenIndex
+						if !_rules[ruleWS]() {
 							goto l644
 						}
-						position++
-						goto l643
+						goto l645
 					l644:
-						position, tokenIndex = position643, tokenIndex643
-						if buffer[position] != rune('R') {
-							goto l638
-						}
-						position++
+						position, tokenIndex = position644, tokenIndex644
 					}
-				l643:
-					goto l615
-				l638:
-					position, tokenIndex = position615, tokenIndex615
-					{
-						position646, tokenIndex646 := position, tokenIndex
-						if buffer[position] != rune('n') {
-							goto l647
-						}
-						position++
-						goto l646
-					l647:
-						position, tokenIndex = position646, tokenIndex646
-						if buffer[position] != rune('N') {
-							goto l645
-						}
-						position++
+				l645:
+					if !_rules[ruleARMVectorRegister]() {
+						goto l602
 					}
 				l646:
 					{
-						position648, tokenIndex648 := position, tokenIndex
-						if buffer[position] != rune('z') {
-							goto l649
-						}
-						position++
-						goto l648
-					l649:
-						position, tokenIndex = position648, tokenIndex648
-						if buffer[position] != rune('Z') {
-							goto l645
-						}
-						position++
-					}
-				l648:
-					{
-						position650, tokenIndex650 := position, tokenIndex
-						if buffer[position] != rune('c') {
-							goto l651
-						}
-						position++
-						goto l650
-					l651:
-						position, tokenIndex = position650, tokenIndex650
-						if buffer[position] != rune('C') {
-							goto l645
-						}
-						position++
-					}
-				l650:
-					{
-						position652, tokenIndex652 := position, tokenIndex
-						if buffer[position] != rune('v') {
-							goto l653
-						}
-						position++
-						goto l652
-					l653:
-						position, tokenIndex = position652, tokenIndex652
-						if buffer[position] != rune('V') {
-							goto l645
-						}
-						position++
-					}
-				l652:
-					goto l615
-				l645:
-					position, tokenIndex = position615, tokenIndex615
-					if !_rules[ruleARMVectorRegister]() {
-						goto l654
-					}
-					goto l615
-				l654:
-					position, tokenIndex = position615, tokenIndex615
-					if buffer[position] != rune('{') {
-						goto l613
-					}
-					position++
-					{
-						position655, tokenIndex655 := position, tokenIndex
-						if !_rules[ruleWS]() {
-							goto l655
-						}
-						goto l656
-					l655:
-						position, tokenIndex = position655, tokenIndex655
-					}
-				l656:
-					if !_rules[ruleARMVectorRegister]() {
-						goto l613
-					}
-				l657:
-					{
-						position658, tokenIndex658 := position, tokenIndex
+						position647, tokenIndex647 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l658
+							goto l647
 						}
 						position++
 						{
-							position659, tokenIndex659 := position, tokenIndex
+							position648, tokenIndex648 := position, tokenIndex
 							if !_rules[ruleWS]() {
-								goto l659
+								goto l648
 							}
-							goto l660
-						l659:
-							position, tokenIndex = position659, tokenIndex659
+							goto l649
+						l648:
+							position, tokenIndex = position648, tokenIndex648
 						}
-					l660:
+					l649:
 						if !_rules[ruleARMVectorRegister]() {
-							goto l658
+							goto l647
 						}
-						goto l657
-					l658:
-						position, tokenIndex = position658, tokenIndex658
+						goto l646
+					l647:
+						position, tokenIndex = position647, tokenIndex647
 					}
 					{
-						position661, tokenIndex661 := position, tokenIndex
+						position650, tokenIndex650 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l661
+							goto l650
 						}
-						goto l662
-					l661:
-						position, tokenIndex = position661, tokenIndex661
+						goto l651
+					l650:
+						position, tokenIndex = position650, tokenIndex650
 					}
-				l662:
+				l651:
 					if buffer[position] != rune('}') {
-						goto l613
+						goto l602
 					}
 					position++
 					{
-						position663, tokenIndex663 := position, tokenIndex
+						position652, tokenIndex652 := position, tokenIndex
 						if buffer[position] != rune('[') {
-							goto l663
+							goto l652
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l663
+							goto l652
 						}
 						position++
 						{
-							position665, tokenIndex665 := position, tokenIndex
+							position654, tokenIndex654 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l665
+								goto l654
 							}
 							position++
-							goto l666
-						l665:
-							position, tokenIndex = position665, tokenIndex665
+							goto l655
+						l654:
+							position, tokenIndex = position654, tokenIndex654
 						}
-					l666:
+					l655:
 						if buffer[position] != rune(']') {
-							goto l663
+							goto l652
+						}
+						position++
+						goto l653
+					l652:
+						position, tokenIndex = position652, tokenIndex652
+					}
+				l653:
+				}
+			l604:
+				add(ruleARMRegister, position603)
+			}
+			return true
+		l602:
+			position, tokenIndex = position602, tokenIndex602
+			return false
+		},
+		/* 44 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
+		func() bool {
+			position656, tokenIndex656 := position, tokenIndex
+			{
+				position657 := position
+				{
+					position658, tokenIndex658 := position, tokenIndex
+					if buffer[position] != rune('v') {
+						goto l659
+					}
+					position++
+					goto l658
+				l659:
+					position, tokenIndex = position658, tokenIndex658
+					if buffer[position] != rune('V') {
+						goto l656
+					}
+					position++
+				}
+			l658:
+				if c := buffer[position]; c < rune('0') || c > rune('9') {
+					goto l656
+				}
+				position++
+				{
+					position660, tokenIndex660 := position, tokenIndex
+					if c := buffer[position]; c < rune('0') || c > rune('9') {
+						goto l660
+					}
+					position++
+					goto l661
+				l660:
+					position, tokenIndex = position660, tokenIndex660
+				}
+			l661:
+				{
+					position662, tokenIndex662 := position, tokenIndex
+					if buffer[position] != rune('.') {
+						goto l662
+					}
+					position++
+				l664:
+					{
+						position665, tokenIndex665 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l665
 						}
 						position++
 						goto l664
-					l663:
-						position, tokenIndex = position663, tokenIndex663
-					}
-				l664:
-				}
-			l615:
-				add(ruleARMRegister, position614)
-			}
-			return true
-		l613:
-			position, tokenIndex = position613, tokenIndex613
-			return false
-		},
-		/* 42 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
-		func() bool {
-			position667, tokenIndex667 := position, tokenIndex
-			{
-				position668 := position
-				{
-					position669, tokenIndex669 := position, tokenIndex
-					if buffer[position] != rune('v') {
-						goto l670
-					}
-					position++
-					goto l669
-				l670:
-					position, tokenIndex = position669, tokenIndex669
-					if buffer[position] != rune('V') {
-						goto l667
-					}
-					position++
-				}
-			l669:
-				if c := buffer[position]; c < rune('0') || c > rune('9') {
-					goto l667
-				}
-				position++
-				{
-					position671, tokenIndex671 := position, tokenIndex
-					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l671
-					}
-					position++
-					goto l672
-				l671:
-					position, tokenIndex = position671, tokenIndex671
-				}
-			l672:
-				{
-					position673, tokenIndex673 := position, tokenIndex
-					if buffer[position] != rune('.') {
-						goto l673
-					}
-					position++
-				l675:
-					{
-						position676, tokenIndex676 := position, tokenIndex
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l676
-						}
-						position++
-						goto l675
-					l676:
-						position, tokenIndex = position676, tokenIndex676
+					l665:
+						position, tokenIndex = position665, tokenIndex665
 					}
 					{
-						position677, tokenIndex677 := position, tokenIndex
+						position666, tokenIndex666 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l678
+							goto l667
 						}
 						position++
-						goto l677
-					l678:
-						position, tokenIndex = position677, tokenIndex677
+						goto l666
+					l667:
+						position, tokenIndex = position666, tokenIndex666
 						if buffer[position] != rune('s') {
-							goto l679
+							goto l668
 						}
 						position++
-						goto l677
-					l679:
-						position, tokenIndex = position677, tokenIndex677
+						goto l666
+					l668:
+						position, tokenIndex = position666, tokenIndex666
 						if buffer[position] != rune('d') {
-							goto l680
+							goto l669
 						}
 						position++
-						goto l677
-					l680:
-						position, tokenIndex = position677, tokenIndex677
+						goto l666
+					l669:
+						position, tokenIndex = position666, tokenIndex666
 						if buffer[position] != rune('h') {
-							goto l681
+							goto l670
 						}
 						position++
-						goto l677
-					l681:
-						position, tokenIndex = position677, tokenIndex677
+						goto l666
+					l670:
+						position, tokenIndex = position666, tokenIndex666
 						if buffer[position] != rune('q') {
-							goto l673
+							goto l662
 						}
 						position++
 					}
-				l677:
+				l666:
 					{
-						position682, tokenIndex682 := position, tokenIndex
+						position671, tokenIndex671 := position, tokenIndex
 						if buffer[position] != rune('[') {
-							goto l682
+							goto l671
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l682
+							goto l671
 						}
 						position++
 						{
-							position684, tokenIndex684 := position, tokenIndex
+							position673, tokenIndex673 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l684
+								goto l673
 							}
 							position++
-							goto l685
-						l684:
-							position, tokenIndex = position684, tokenIndex684
+							goto l674
+						l673:
+							position, tokenIndex = position673, tokenIndex673
 						}
-					l685:
+					l674:
 						if buffer[position] != rune(']') {
-							goto l682
+							goto l671
 						}
 						position++
-						goto l683
-					l682:
-						position, tokenIndex = position682, tokenIndex682
+						goto l672
+					l671:
+						position, tokenIndex = position671, tokenIndex671
 					}
-				l683:
-					goto l674
-				l673:
-					position, tokenIndex = position673, tokenIndex673
+				l672:
+					goto l663
+				l662:
+					position, tokenIndex = position662, tokenIndex662
 				}
-			l674:
-				add(ruleARMVectorRegister, position668)
+			l663:
+				add(ruleARMVectorRegister, position657)
 			}
 			return true
-		l667:
-			position, tokenIndex = position667, tokenIndex667
+		l656:
+			position, tokenIndex = position656, tokenIndex656
 			return false
 		},
-		/* 43 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
+		/* 45 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
 		func() bool {
-			position686, tokenIndex686 := position, tokenIndex
+			position675, tokenIndex675 := position, tokenIndex
 			{
-				position687 := position
+				position676 := position
 				{
-					position688, tokenIndex688 := position, tokenIndex
+					position677, tokenIndex677 := position, tokenIndex
 					if !_rules[ruleSymbolRef]() {
-						goto l689
+						goto l678
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l689
+						goto l678
 					}
-					goto l688
-				l689:
-					position, tokenIndex = position688, tokenIndex688
+					goto l677
+				l678:
+					position, tokenIndex = position677, tokenIndex677
 					if !_rules[ruleSymbolRef]() {
-						goto l690
+						goto l679
 					}
-					goto l688
-				l690:
-					position, tokenIndex = position688, tokenIndex688
+					goto l677
+				l679:
+					position, tokenIndex = position677, tokenIndex677
 					if !_rules[ruleLow12BitsSymbolRef]() {
-						goto l691
+						goto l680
 					}
-					goto l688
-				l691:
-					position, tokenIndex = position688, tokenIndex688
-				l693:
+					goto l677
+				l680:
+					position, tokenIndex = position677, tokenIndex677
+				l682:
 					{
-						position694, tokenIndex694 := position, tokenIndex
+						position683, tokenIndex683 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l694
+							goto l683
 						}
-						goto l693
-					l694:
-						position, tokenIndex = position694, tokenIndex694
+						goto l682
+					l683:
+						position, tokenIndex = position683, tokenIndex683
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l692
+						goto l681
 					}
-					goto l688
-				l692:
-					position, tokenIndex = position688, tokenIndex688
+					goto l677
+				l681:
+					position, tokenIndex = position677, tokenIndex677
 					if !_rules[ruleSegmentRegister]() {
-						goto l695
+						goto l684
 					}
 					if !_rules[ruleOffset]() {
-						goto l695
+						goto l684
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l695
+						goto l684
 					}
-					goto l688
-				l695:
-					position, tokenIndex = position688, tokenIndex688
+					goto l677
+				l684:
+					position, tokenIndex = position677, tokenIndex677
 					if !_rules[ruleSegmentRegister]() {
-						goto l696
+						goto l685
 					}
 					if !_rules[ruleBaseIndexScale]() {
-						goto l696
+						goto l685
 					}
-					goto l688
-				l696:
-					position, tokenIndex = position688, tokenIndex688
+					goto l677
+				l685:
+					position, tokenIndex = position677, tokenIndex677
 					if !_rules[ruleSegmentRegister]() {
-						goto l697
-					}
-					if !_rules[ruleOffset]() {
-						goto l697
-					}
-					goto l688
-				l697:
-					position, tokenIndex = position688, tokenIndex688
-					if !_rules[ruleARMBaseIndexScale]() {
-						goto l698
-					}
-					goto l688
-				l698:
-					position, tokenIndex = position688, tokenIndex688
-					if !_rules[ruleBaseIndexScale]() {
 						goto l686
 					}
+					if !_rules[ruleOffset]() {
+						goto l686
+					}
+					goto l677
+				l686:
+					position, tokenIndex = position677, tokenIndex677
+					if !_rules[ruleARMBaseIndexScale]() {
+						goto l687
+					}
+					goto l677
+				l687:
+					position, tokenIndex = position677, tokenIndex677
+					if !_rules[ruleBaseIndexScale]() {
+						goto l675
+					}
 				}
-			l688:
-				add(ruleMemoryRef, position687)
+			l677:
+				add(ruleMemoryRef, position676)
 			}
 			return true
-		l686:
-			position, tokenIndex = position686, tokenIndex686
+		l675:
+			position, tokenIndex = position675, tokenIndex675
 			return false
 		},
-		/* 44 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
+		/* 46 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
 		func() bool {
-			position699, tokenIndex699 := position, tokenIndex
+			position688, tokenIndex688 := position, tokenIndex
 			{
-				position700 := position
+				position689 := position
 				{
-					position701, tokenIndex701 := position, tokenIndex
-				l703:
+					position690, tokenIndex690 := position, tokenIndex
+				l692:
 					{
-						position704, tokenIndex704 := position, tokenIndex
+						position693, tokenIndex693 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l704
+							goto l693
 						}
-						goto l703
-					l704:
-						position, tokenIndex = position704, tokenIndex704
+						goto l692
+					l693:
+						position, tokenIndex = position693, tokenIndex693
 					}
 					if buffer[position] != rune('+') {
-						goto l701
+						goto l690
 					}
 					position++
-					goto l702
-				l701:
-					position, tokenIndex = position701, tokenIndex701
+					goto l691
+				l690:
+					position, tokenIndex = position690, tokenIndex690
 				}
-			l702:
+			l691:
 				{
-					position705, tokenIndex705 := position, tokenIndex
+					position694, tokenIndex694 := position, tokenIndex
 					if !_rules[ruleLocalSymbol]() {
-						goto l706
+						goto l695
 					}
-					goto l705
-				l706:
-					position, tokenIndex = position705, tokenIndex705
+					goto l694
+				l695:
+					position, tokenIndex = position694, tokenIndex694
 					if !_rules[ruleSymbolName]() {
-						goto l699
+						goto l688
 					}
 				}
-			l705:
-			l707:
+			l694:
+			l696:
 				{
-					position708, tokenIndex708 := position, tokenIndex
+					position697, tokenIndex697 := position, tokenIndex
 					if !_rules[ruleOffset]() {
-						goto l708
+						goto l697
 					}
-					goto l707
-				l708:
-					position, tokenIndex = position708, tokenIndex708
+					goto l696
+				l697:
+					position, tokenIndex = position697, tokenIndex697
 				}
 				{
-					position709, tokenIndex709 := position, tokenIndex
+					position698, tokenIndex698 := position, tokenIndex
 					if buffer[position] != rune('@') {
-						goto l709
+						goto l698
 					}
 					position++
 					if !_rules[ruleSection]() {
-						goto l709
+						goto l698
 					}
-				l711:
+				l700:
 					{
-						position712, tokenIndex712 := position, tokenIndex
+						position701, tokenIndex701 := position, tokenIndex
 						if !_rules[ruleOffset]() {
-							goto l712
+							goto l701
 						}
-						goto l711
-					l712:
-						position, tokenIndex = position712, tokenIndex712
+						goto l700
+					l701:
+						position, tokenIndex = position701, tokenIndex701
 					}
-					goto l710
-				l709:
-					position, tokenIndex = position709, tokenIndex709
+					goto l699
+				l698:
+					position, tokenIndex = position698, tokenIndex698
 				}
-			l710:
-				add(ruleSymbolRef, position700)
+			l699:
+				add(ruleSymbolRef, position689)
 			}
 			return true
-		l699:
-			position, tokenIndex = position699, tokenIndex699
+		l688:
+			position, tokenIndex = position688, tokenIndex688
 			return false
 		},
-		/* 45 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
+		/* 47 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
 		func() bool {
-			position713, tokenIndex713 := position, tokenIndex
+			position702, tokenIndex702 := position, tokenIndex
 			{
-				position714 := position
+				position703 := position
 				if buffer[position] != rune(':') {
-					goto l713
+					goto l702
 				}
 				position++
 				{
-					position715, tokenIndex715 := position, tokenIndex
+					position704, tokenIndex704 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l716
+						goto l705
 					}
 					position++
-					goto l715
-				l716:
-					position, tokenIndex = position715, tokenIndex715
+					goto l704
+				l705:
+					position, tokenIndex = position704, tokenIndex704
 					if buffer[position] != rune('L') {
-						goto l713
+						goto l702
 					}
 					position++
 				}
-			l715:
+			l704:
 				{
-					position717, tokenIndex717 := position, tokenIndex
+					position706, tokenIndex706 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l718
+						goto l707
 					}
 					position++
-					goto l717
-				l718:
-					position, tokenIndex = position717, tokenIndex717
+					goto l706
+				l707:
+					position, tokenIndex = position706, tokenIndex706
 					if buffer[position] != rune('O') {
-						goto l713
+						goto l702
 					}
 					position++
 				}
-			l717:
+			l706:
 				if buffer[position] != rune('1') {
-					goto l713
+					goto l702
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l713
+					goto l702
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l713
+					goto l702
 				}
 				position++
 				{
-					position719, tokenIndex719 := position, tokenIndex
+					position708, tokenIndex708 := position, tokenIndex
 					if !_rules[ruleLocalSymbol]() {
-						goto l720
+						goto l709
 					}
-					goto l719
-				l720:
-					position, tokenIndex = position719, tokenIndex719
+					goto l708
+				l709:
+					position, tokenIndex = position708, tokenIndex708
 					if !_rules[ruleSymbolName]() {
-						goto l713
+						goto l702
 					}
 				}
-			l719:
+			l708:
 				{
-					position721, tokenIndex721 := position, tokenIndex
+					position710, tokenIndex710 := position, tokenIndex
 					if !_rules[ruleOffset]() {
-						goto l721
+						goto l710
 					}
-					goto l722
-				l721:
-					position, tokenIndex = position721, tokenIndex721
+					goto l711
+				l710:
+					position, tokenIndex = position710, tokenIndex710
 				}
-			l722:
-				add(ruleLow12BitsSymbolRef, position714)
+			l711:
+				add(ruleLow12BitsSymbolRef, position703)
 			}
 			return true
-		l713:
-			position, tokenIndex = position713, tokenIndex713
+		l702:
+			position, tokenIndex = position702, tokenIndex702
 			return false
 		},
-		/* 46 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
+		/* 48 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
 		func() bool {
-			position723, tokenIndex723 := position, tokenIndex
+			position712, tokenIndex712 := position, tokenIndex
 			{
-				position724 := position
+				position713 := position
 				if buffer[position] != rune('[') {
-					goto l723
+					goto l712
 				}
 				position++
 				if !_rules[ruleARMRegister]() {
-					goto l723
+					goto l712
 				}
 				{
-					position725, tokenIndex725 := position, tokenIndex
+					position714, tokenIndex714 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l725
+						goto l714
 					}
 					position++
 					{
-						position727, tokenIndex727 := position, tokenIndex
+						position716, tokenIndex716 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l727
+							goto l716
 						}
-						goto l728
-					l727:
-						position, tokenIndex = position727, tokenIndex727
+						goto l717
+					l716:
+						position, tokenIndex = position716, tokenIndex716
 					}
-				l728:
+				l717:
 					{
-						position729, tokenIndex729 := position, tokenIndex
+						position718, tokenIndex718 := position, tokenIndex
 						if buffer[position] != rune('#') {
-							goto l730
+							goto l719
 						}
 						position++
 						if !_rules[ruleOffset]() {
-							goto l730
+							goto l719
 						}
 						{
-							position731, tokenIndex731 := position, tokenIndex
+							position720, tokenIndex720 := position, tokenIndex
 							{
-								position733, tokenIndex733 := position, tokenIndex
+								position722, tokenIndex722 := position, tokenIndex
 								if buffer[position] != rune('*') {
-									goto l734
+									goto l723
 								}
 								position++
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l734
+									goto l723
 								}
 								position++
-							l735:
+							l724:
 								{
-									position736, tokenIndex736 := position, tokenIndex
+									position725, tokenIndex725 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l736
+										goto l725
 									}
 									position++
-									goto l735
-								l736:
-									position, tokenIndex = position736, tokenIndex736
+									goto l724
+								l725:
+									position, tokenIndex = position725, tokenIndex725
 								}
-								goto l733
-							l734:
-								position, tokenIndex = position733, tokenIndex733
+								goto l722
+							l723:
+								position, tokenIndex = position722, tokenIndex722
 								if buffer[position] != rune('*') {
-									goto l737
+									goto l726
 								}
 								position++
 								if buffer[position] != rune('(') {
-									goto l737
+									goto l726
 								}
 								position++
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l737
+									goto l726
 								}
 								position++
-							l738:
+							l727:
 								{
-									position739, tokenIndex739 := position, tokenIndex
+									position728, tokenIndex728 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l739
+										goto l728
 									}
 									position++
-									goto l738
-								l739:
-									position, tokenIndex = position739, tokenIndex739
+									goto l727
+								l728:
+									position, tokenIndex = position728, tokenIndex728
 								}
 								if !_rules[ruleOperator]() {
-									goto l737
+									goto l726
 								}
 								if c := buffer[position]; c < rune('0') || c > rune('9') {
-									goto l737
+									goto l726
 								}
 								position++
-							l740:
+							l729:
 								{
-									position741, tokenIndex741 := position, tokenIndex
+									position730, tokenIndex730 := position, tokenIndex
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l741
+										goto l730
 									}
 									position++
-									goto l740
-								l741:
-									position, tokenIndex = position741, tokenIndex741
+									goto l729
+								l730:
+									position, tokenIndex = position730, tokenIndex730
 								}
 								if buffer[position] != rune(')') {
-									goto l737
+									goto l726
 								}
 								position++
-								goto l733
-							l737:
-								position, tokenIndex = position733, tokenIndex733
-							l742:
+								goto l722
+							l726:
+								position, tokenIndex = position722, tokenIndex722
+							l731:
 								{
-									position743, tokenIndex743 := position, tokenIndex
+									position732, tokenIndex732 := position, tokenIndex
 									if buffer[position] != rune('+') {
-										goto l743
+										goto l732
 									}
 									position++
 									if c := buffer[position]; c < rune('0') || c > rune('9') {
-										goto l743
+										goto l732
 									}
 									position++
-								l744:
+								l733:
 									{
-										position745, tokenIndex745 := position, tokenIndex
+										position734, tokenIndex734 := position, tokenIndex
 										if c := buffer[position]; c < rune('0') || c > rune('9') {
-											goto l745
+											goto l734
 										}
 										position++
-										goto l744
-									l745:
-										position, tokenIndex = position745, tokenIndex745
+										goto l733
+									l734:
+										position, tokenIndex = position734, tokenIndex734
 									}
-									goto l742
-								l743:
-									position, tokenIndex = position743, tokenIndex743
+									goto l731
+								l732:
+									position, tokenIndex = position732, tokenIndex732
 								}
 							}
-						l733:
-							goto l732
+						l722:
+							goto l721
 
-							position, tokenIndex = position731, tokenIndex731
+							position, tokenIndex = position720, tokenIndex720
 						}
-					l732:
-						goto l729
-					l730:
-						position, tokenIndex = position729, tokenIndex729
+					l721:
+						goto l718
+					l719:
+						position, tokenIndex = position718, tokenIndex718
 						if !_rules[ruleARMGOTLow12]() {
-							goto l746
+							goto l735
 						}
-						goto l729
-					l746:
-						position, tokenIndex = position729, tokenIndex729
+						goto l718
+					l735:
+						position, tokenIndex = position718, tokenIndex718
 						if !_rules[ruleLow12BitsSymbolRef]() {
-							goto l747
+							goto l736
 						}
-						goto l729
-					l747:
-						position, tokenIndex = position729, tokenIndex729
+						goto l718
+					l736:
+						position, tokenIndex = position718, tokenIndex718
 						if !_rules[ruleARMRegister]() {
-							goto l725
+							goto l714
 						}
 					}
-				l729:
+				l718:
 					{
-						position748, tokenIndex748 := position, tokenIndex
+						position737, tokenIndex737 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l748
+							goto l737
 						}
 						position++
 						{
-							position750, tokenIndex750 := position, tokenIndex
+							position739, tokenIndex739 := position, tokenIndex
 							if !_rules[ruleWS]() {
-								goto l750
+								goto l739
 							}
-							goto l751
-						l750:
-							position, tokenIndex = position750, tokenIndex750
+							goto l740
+						l739:
+							position, tokenIndex = position739, tokenIndex739
 						}
-					l751:
+					l740:
 						if !_rules[ruleARMConstantTweak]() {
-							goto l748
+							goto l737
 						}
-						goto l749
-					l748:
-						position, tokenIndex = position748, tokenIndex748
+						goto l738
+					l737:
+						position, tokenIndex = position737, tokenIndex737
 					}
-				l749:
-					goto l726
-				l725:
-					position, tokenIndex = position725, tokenIndex725
+				l738:
+					goto l715
+				l714:
+					position, tokenIndex = position714, tokenIndex714
 				}
-			l726:
+			l715:
 				if buffer[position] != rune(']') {
-					goto l723
+					goto l712
 				}
 				position++
 				{
-					position752, tokenIndex752 := position, tokenIndex
+					position741, tokenIndex741 := position, tokenIndex
 					if !_rules[ruleARMPostincrement]() {
-						goto l752
+						goto l741
 					}
-					goto l753
-				l752:
-					position, tokenIndex = position752, tokenIndex752
+					goto l742
+				l741:
+					position, tokenIndex = position741, tokenIndex741
 				}
-			l753:
-				add(ruleARMBaseIndexScale, position724)
+			l742:
+				add(ruleARMBaseIndexScale, position713)
 			}
 			return true
-		l723:
-			position, tokenIndex = position723, tokenIndex723
+		l712:
+			position, tokenIndex = position712, tokenIndex712
 			return false
 		},
-		/* 47 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
+		/* 49 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
 		func() bool {
-			position754, tokenIndex754 := position, tokenIndex
+			position743, tokenIndex743 := position, tokenIndex
 			{
-				position755 := position
+				position744 := position
 				if buffer[position] != rune(':') {
-					goto l754
+					goto l743
 				}
 				position++
 				{
-					position756, tokenIndex756 := position, tokenIndex
+					position745, tokenIndex745 := position, tokenIndex
 					if buffer[position] != rune('g') {
-						goto l757
+						goto l746
 					}
 					position++
-					goto l756
-				l757:
-					position, tokenIndex = position756, tokenIndex756
+					goto l745
+				l746:
+					position, tokenIndex = position745, tokenIndex745
 					if buffer[position] != rune('G') {
-						goto l754
+						goto l743
 					}
 					position++
 				}
-			l756:
+			l745:
 				{
-					position758, tokenIndex758 := position, tokenIndex
+					position747, tokenIndex747 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l759
+						goto l748
 					}
 					position++
-					goto l758
-				l759:
-					position, tokenIndex = position758, tokenIndex758
+					goto l747
+				l748:
+					position, tokenIndex = position747, tokenIndex747
 					if buffer[position] != rune('O') {
-						goto l754
+						goto l743
 					}
 					position++
 				}
-			l758:
+			l747:
 				{
-					position760, tokenIndex760 := position, tokenIndex
+					position749, tokenIndex749 := position, tokenIndex
 					if buffer[position] != rune('t') {
-						goto l761
+						goto l750
 					}
 					position++
-					goto l760
-				l761:
-					position, tokenIndex = position760, tokenIndex760
+					goto l749
+				l750:
+					position, tokenIndex = position749, tokenIndex749
 					if buffer[position] != rune('T') {
-						goto l754
+						goto l743
 					}
 					position++
 				}
-			l760:
+			l749:
 				if buffer[position] != rune('_') {
-					goto l754
+					goto l743
 				}
 				position++
 				{
-					position762, tokenIndex762 := position, tokenIndex
+					position751, tokenIndex751 := position, tokenIndex
 					if buffer[position] != rune('l') {
-						goto l763
+						goto l752
 					}
 					position++
-					goto l762
-				l763:
-					position, tokenIndex = position762, tokenIndex762
+					goto l751
+				l752:
+					position, tokenIndex = position751, tokenIndex751
 					if buffer[position] != rune('L') {
-						goto l754
+						goto l743
 					}
 					position++
 				}
-			l762:
+			l751:
 				{
-					position764, tokenIndex764 := position, tokenIndex
+					position753, tokenIndex753 := position, tokenIndex
 					if buffer[position] != rune('o') {
-						goto l765
-					}
-					position++
-					goto l764
-				l765:
-					position, tokenIndex = position764, tokenIndex764
-					if buffer[position] != rune('O') {
 						goto l754
 					}
 					position++
+					goto l753
+				l754:
+					position, tokenIndex = position753, tokenIndex753
+					if buffer[position] != rune('O') {
+						goto l743
+					}
+					position++
 				}
-			l764:
+			l753:
 				if buffer[position] != rune('1') {
-					goto l754
+					goto l743
 				}
 				position++
 				if buffer[position] != rune('2') {
-					goto l754
+					goto l743
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l754
+					goto l743
 				}
 				position++
 				if !_rules[ruleSymbolName]() {
-					goto l754
+					goto l743
 				}
-				add(ruleARMGOTLow12, position755)
+				add(ruleARMGOTLow12, position744)
 			}
 			return true
-		l754:
-			position, tokenIndex = position754, tokenIndex754
+		l743:
+			position, tokenIndex = position743, tokenIndex743
 			return false
 		},
-		/* 48 ARMPostincrement <- <'!'> */
+		/* 50 ARMPostincrement <- <'!'> */
 		func() bool {
-			position766, tokenIndex766 := position, tokenIndex
+			position755, tokenIndex755 := position, tokenIndex
 			{
-				position767 := position
+				position756 := position
 				if buffer[position] != rune('!') {
-					goto l766
+					goto l755
 				}
 				position++
-				add(ruleARMPostincrement, position767)
+				add(ruleARMPostincrement, position756)
 			}
 			return true
-		l766:
-			position, tokenIndex = position766, tokenIndex766
+		l755:
+			position, tokenIndex = position755, tokenIndex755
 			return false
 		},
-		/* 49 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
+		/* 51 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
 		func() bool {
-			position768, tokenIndex768 := position, tokenIndex
+			position757, tokenIndex757 := position, tokenIndex
 			{
-				position769 := position
+				position758 := position
 				if buffer[position] != rune('(') {
-					goto l768
+					goto l757
 				}
 				position++
 				{
-					position770, tokenIndex770 := position, tokenIndex
+					position759, tokenIndex759 := position, tokenIndex
 					if !_rules[ruleRegisterOrConstant]() {
-						goto l770
+						goto l759
 					}
-					goto l771
-				l770:
-					position, tokenIndex = position770, tokenIndex770
+					goto l760
+				l759:
+					position, tokenIndex = position759, tokenIndex759
 				}
-			l771:
+			l760:
 				{
-					position772, tokenIndex772 := position, tokenIndex
+					position761, tokenIndex761 := position, tokenIndex
 					if !_rules[ruleWS]() {
-						goto l772
+						goto l761
 					}
-					goto l773
-				l772:
-					position, tokenIndex = position772, tokenIndex772
+					goto l762
+				l761:
+					position, tokenIndex = position761, tokenIndex761
 				}
-			l773:
+			l762:
 				{
-					position774, tokenIndex774 := position, tokenIndex
+					position763, tokenIndex763 := position, tokenIndex
 					if buffer[position] != rune(',') {
-						goto l774
+						goto l763
 					}
 					position++
 					{
-						position776, tokenIndex776 := position, tokenIndex
+						position765, tokenIndex765 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l776
+							goto l765
 						}
-						goto l777
-					l776:
-						position, tokenIndex = position776, tokenIndex776
+						goto l766
+					l765:
+						position, tokenIndex = position765, tokenIndex765
 					}
-				l777:
+				l766:
 					if !_rules[ruleRegisterOrConstant]() {
-						goto l774
+						goto l763
 					}
 					{
-						position778, tokenIndex778 := position, tokenIndex
+						position767, tokenIndex767 := position, tokenIndex
 						if !_rules[ruleWS]() {
-							goto l778
+							goto l767
 						}
-						goto l779
-					l778:
-						position, tokenIndex = position778, tokenIndex778
+						goto l768
+					l767:
+						position, tokenIndex = position767, tokenIndex767
 					}
-				l779:
+				l768:
 					{
-						position780, tokenIndex780 := position, tokenIndex
+						position769, tokenIndex769 := position, tokenIndex
 						if buffer[position] != rune(',') {
-							goto l780
+							goto l769
 						}
 						position++
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l780
+							goto l769
 						}
 						position++
-					l782:
+					l771:
 						{
-							position783, tokenIndex783 := position, tokenIndex
+							position772, tokenIndex772 := position, tokenIndex
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l783
+								goto l772
 							}
 							position++
-							goto l782
-						l783:
-							position, tokenIndex = position783, tokenIndex783
+							goto l771
+						l772:
+							position, tokenIndex = position772, tokenIndex772
 						}
-						goto l781
-					l780:
-						position, tokenIndex = position780, tokenIndex780
+						goto l770
+					l769:
+						position, tokenIndex = position769, tokenIndex769
 					}
-				l781:
-					goto l775
-				l774:
-					position, tokenIndex = position774, tokenIndex774
+				l770:
+					goto l764
+				l763:
+					position, tokenIndex = position763, tokenIndex763
 				}
-			l775:
+			l764:
 				if buffer[position] != rune(')') {
-					goto l768
+					goto l757
 				}
 				position++
-				add(ruleBaseIndexScale, position769)
+				add(ruleBaseIndexScale, position758)
 			}
 			return true
-		l768:
-			position, tokenIndex = position768, tokenIndex768
+		l757:
+			position, tokenIndex = position757, tokenIndex757
 			return false
 		},
-		/* 50 Operator <- <('+' / '-')> */
+		/* 52 Operator <- <('+' / '-')> */
 		func() bool {
-			position784, tokenIndex784 := position, tokenIndex
+			position773, tokenIndex773 := position, tokenIndex
 			{
-				position785 := position
+				position774 := position
 				{
-					position786, tokenIndex786 := position, tokenIndex
+					position775, tokenIndex775 := position, tokenIndex
 					if buffer[position] != rune('+') {
-						goto l787
+						goto l776
 					}
 					position++
-					goto l786
-				l787:
-					position, tokenIndex = position786, tokenIndex786
+					goto l775
+				l776:
+					position, tokenIndex = position775, tokenIndex775
 					if buffer[position] != rune('-') {
+						goto l773
+					}
+					position++
+				}
+			l775:
+				add(ruleOperator, position774)
+			}
+			return true
+		l773:
+			position, tokenIndex = position773, tokenIndex773
+			return false
+		},
+		/* 53 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
+		func() bool {
+			position777, tokenIndex777 := position, tokenIndex
+			{
+				position778 := position
+				{
+					position779, tokenIndex779 := position, tokenIndex
+					if buffer[position] != rune('+') {
+						goto l779
+					}
+					position++
+					goto l780
+				l779:
+					position, tokenIndex = position779, tokenIndex779
+				}
+			l780:
+				{
+					position781, tokenIndex781 := position, tokenIndex
+					if buffer[position] != rune('-') {
+						goto l781
+					}
+					position++
+					goto l782
+				l781:
+					position, tokenIndex = position781, tokenIndex781
+				}
+			l782:
+				{
+					position783, tokenIndex783 := position, tokenIndex
+					if buffer[position] != rune('0') {
 						goto l784
 					}
 					position++
-				}
-			l786:
-				add(ruleOperator, position785)
-			}
-			return true
-		l784:
-			position, tokenIndex = position784, tokenIndex784
-			return false
-		},
-		/* 51 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
-		func() bool {
-			position788, tokenIndex788 := position, tokenIndex
-			{
-				position789 := position
-				{
-					position790, tokenIndex790 := position, tokenIndex
-					if buffer[position] != rune('+') {
-						goto l790
-					}
-					position++
-					goto l791
-				l790:
-					position, tokenIndex = position790, tokenIndex790
-				}
-			l791:
-				{
-					position792, tokenIndex792 := position, tokenIndex
-					if buffer[position] != rune('-') {
-						goto l792
-					}
-					position++
-					goto l793
-				l792:
-					position, tokenIndex = position792, tokenIndex792
-				}
-			l793:
-				{
-					position794, tokenIndex794 := position, tokenIndex
-					if buffer[position] != rune('0') {
-						goto l795
-					}
-					position++
 					{
-						position796, tokenIndex796 := position, tokenIndex
+						position785, tokenIndex785 := position, tokenIndex
 						if buffer[position] != rune('b') {
-							goto l797
+							goto l786
 						}
 						position++
-						goto l796
-					l797:
-						position, tokenIndex = position796, tokenIndex796
+						goto l785
+					l786:
+						position, tokenIndex = position785, tokenIndex785
 						if buffer[position] != rune('B') {
-							goto l795
+							goto l784
 						}
 						position++
 					}
-				l796:
+				l785:
 					{
-						position800, tokenIndex800 := position, tokenIndex
+						position789, tokenIndex789 := position, tokenIndex
 						if buffer[position] != rune('0') {
-							goto l801
+							goto l790
 						}
 						position++
-						goto l800
-					l801:
-						position, tokenIndex = position800, tokenIndex800
+						goto l789
+					l790:
+						position, tokenIndex = position789, tokenIndex789
 						if buffer[position] != rune('1') {
-							goto l795
+							goto l784
 						}
 						position++
 					}
-				l800:
-				l798:
+				l789:
+				l787:
 					{
-						position799, tokenIndex799 := position, tokenIndex
+						position788, tokenIndex788 := position, tokenIndex
 						{
-							position802, tokenIndex802 := position, tokenIndex
+							position791, tokenIndex791 := position, tokenIndex
 							if buffer[position] != rune('0') {
-								goto l803
+								goto l792
 							}
 							position++
-							goto l802
-						l803:
-							position, tokenIndex = position802, tokenIndex802
+							goto l791
+						l792:
+							position, tokenIndex = position791, tokenIndex791
 							if buffer[position] != rune('1') {
-								goto l799
+								goto l788
 							}
 							position++
 						}
-					l802:
+					l791:
+						goto l787
+					l788:
+						position, tokenIndex = position788, tokenIndex788
+					}
+					goto l783
+				l784:
+					position, tokenIndex = position783, tokenIndex783
+					if buffer[position] != rune('0') {
+						goto l793
+					}
+					position++
+					{
+						position794, tokenIndex794 := position, tokenIndex
+						if buffer[position] != rune('x') {
+							goto l795
+						}
+						position++
+						goto l794
+					l795:
+						position, tokenIndex = position794, tokenIndex794
+						if buffer[position] != rune('X') {
+							goto l793
+						}
+						position++
+					}
+				l794:
+					{
+						position798, tokenIndex798 := position, tokenIndex
+						if c := buffer[position]; c < rune('0') || c > rune('9') {
+							goto l799
+						}
+						position++
 						goto l798
 					l799:
-						position, tokenIndex = position799, tokenIndex799
-					}
-					goto l794
-				l795:
-					position, tokenIndex = position794, tokenIndex794
-					if buffer[position] != rune('0') {
-						goto l804
-					}
-					position++
-					{
-						position805, tokenIndex805 := position, tokenIndex
-						if buffer[position] != rune('x') {
-							goto l806
-						}
-						position++
-						goto l805
-					l806:
-						position, tokenIndex = position805, tokenIndex805
-						if buffer[position] != rune('X') {
-							goto l804
-						}
-						position++
-					}
-				l805:
-					{
-						position809, tokenIndex809 := position, tokenIndex
+						position, tokenIndex = position798, tokenIndex798
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l810
+							goto l800
 						}
 						position++
-						goto l809
-					l810:
-						position, tokenIndex = position809, tokenIndex809
-						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l811
-						}
-						position++
-						goto l809
-					l811:
-						position, tokenIndex = position809, tokenIndex809
+						goto l798
+					l800:
+						position, tokenIndex = position798, tokenIndex798
 						{
-							position812, tokenIndex812 := position, tokenIndex
+							position801, tokenIndex801 := position, tokenIndex
 							if c := buffer[position]; c < rune('a') || c > rune('f') {
-								goto l813
+								goto l802
 							}
 							position++
-							goto l812
-						l813:
-							position, tokenIndex = position812, tokenIndex812
+							goto l801
+						l802:
+							position, tokenIndex = position801, tokenIndex801
 							if c := buffer[position]; c < rune('A') || c > rune('F') {
+								goto l793
+							}
+							position++
+						}
+					l801:
+					}
+				l798:
+				l796:
+					{
+						position797, tokenIndex797 := position, tokenIndex
+						{
+							position803, tokenIndex803 := position, tokenIndex
+							if c := buffer[position]; c < rune('0') || c > rune('9') {
 								goto l804
 							}
 							position++
-						}
-					l812:
-					}
-				l809:
-				l807:
-					{
-						position808, tokenIndex808 := position, tokenIndex
-						{
-							position814, tokenIndex814 := position, tokenIndex
+							goto l803
+						l804:
+							position, tokenIndex = position803, tokenIndex803
 							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l815
+								goto l805
 							}
 							position++
-							goto l814
-						l815:
-							position, tokenIndex = position814, tokenIndex814
-							if c := buffer[position]; c < rune('0') || c > rune('9') {
-								goto l816
-							}
-							position++
-							goto l814
-						l816:
-							position, tokenIndex = position814, tokenIndex814
+							goto l803
+						l805:
+							position, tokenIndex = position803, tokenIndex803
 							{
-								position817, tokenIndex817 := position, tokenIndex
+								position806, tokenIndex806 := position, tokenIndex
 								if c := buffer[position]; c < rune('a') || c > rune('f') {
-									goto l818
+									goto l807
 								}
 								position++
-								goto l817
-							l818:
-								position, tokenIndex = position817, tokenIndex817
+								goto l806
+							l807:
+								position, tokenIndex = position806, tokenIndex806
 								if c := buffer[position]; c < rune('A') || c > rune('F') {
-									goto l808
+									goto l797
 								}
 								position++
 							}
-						l817:
+						l806:
 						}
-					l814:
-						goto l807
-					l808:
-						position, tokenIndex = position808, tokenIndex808
+					l803:
+						goto l796
+					l797:
+						position, tokenIndex = position797, tokenIndex797
 					}
-					goto l794
-				l804:
-					position, tokenIndex = position794, tokenIndex794
+					goto l783
+				l793:
+					position, tokenIndex = position783, tokenIndex783
 					if c := buffer[position]; c < rune('0') || c > rune('9') {
-						goto l788
+						goto l777
 					}
 					position++
-				l819:
+				l808:
 					{
-						position820, tokenIndex820 := position, tokenIndex
+						position809, tokenIndex809 := position, tokenIndex
 						if c := buffer[position]; c < rune('0') || c > rune('9') {
-							goto l820
+							goto l809
 						}
 						position++
-						goto l819
-					l820:
-						position, tokenIndex = position820, tokenIndex820
+						goto l808
+					l809:
+						position, tokenIndex = position809, tokenIndex809
 					}
 				}
-			l794:
-				add(ruleOffset, position789)
+			l783:
+				add(ruleOffset, position778)
 			}
 			return true
-		l788:
-			position, tokenIndex = position788, tokenIndex788
+		l777:
+			position, tokenIndex = position777, tokenIndex777
 			return false
 		},
-		/* 52 Section <- <([a-z] / [A-Z] / '@')+> */
+		/* 54 Section <- <([a-z] / [A-Z] / '@')+> */
 		func() bool {
-			position821, tokenIndex821 := position, tokenIndex
+			position810, tokenIndex810 := position, tokenIndex
 			{
-				position822 := position
+				position811 := position
 				{
-					position825, tokenIndex825 := position, tokenIndex
+					position814, tokenIndex814 := position, tokenIndex
 					if c := buffer[position]; c < rune('a') || c > rune('z') {
-						goto l826
+						goto l815
 					}
 					position++
-					goto l825
-				l826:
-					position, tokenIndex = position825, tokenIndex825
+					goto l814
+				l815:
+					position, tokenIndex = position814, tokenIndex814
 					if c := buffer[position]; c < rune('A') || c > rune('Z') {
-						goto l827
+						goto l816
 					}
 					position++
-					goto l825
-				l827:
-					position, tokenIndex = position825, tokenIndex825
+					goto l814
+				l816:
+					position, tokenIndex = position814, tokenIndex814
 					if buffer[position] != rune('@') {
-						goto l821
+						goto l810
 					}
 					position++
 				}
-			l825:
-			l823:
+			l814:
+			l812:
 				{
-					position824, tokenIndex824 := position, tokenIndex
+					position813, tokenIndex813 := position, tokenIndex
 					{
-						position828, tokenIndex828 := position, tokenIndex
+						position817, tokenIndex817 := position, tokenIndex
 						if c := buffer[position]; c < rune('a') || c > rune('z') {
-							goto l829
+							goto l818
 						}
 						position++
-						goto l828
-					l829:
-						position, tokenIndex = position828, tokenIndex828
+						goto l817
+					l818:
+						position, tokenIndex = position817, tokenIndex817
 						if c := buffer[position]; c < rune('A') || c > rune('Z') {
-							goto l830
+							goto l819
 						}
 						position++
-						goto l828
-					l830:
-						position, tokenIndex = position828, tokenIndex828
+						goto l817
+					l819:
+						position, tokenIndex = position817, tokenIndex817
 						if buffer[position] != rune('@') {
-							goto l824
+							goto l813
 						}
 						position++
 					}
-				l828:
-					goto l823
-				l824:
-					position, tokenIndex = position824, tokenIndex824
+				l817:
+					goto l812
+				l813:
+					position, tokenIndex = position813, tokenIndex813
 				}
-				add(ruleSection, position822)
+				add(ruleSection, position811)
 			}
 			return true
-		l821:
-			position, tokenIndex = position821, tokenIndex821
+		l810:
+			position, tokenIndex = position810, tokenIndex810
 			return false
 		},
-		/* 53 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
+		/* 55 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
 		func() bool {
-			position831, tokenIndex831 := position, tokenIndex
+			position820, tokenIndex820 := position, tokenIndex
 			{
-				position832 := position
+				position821 := position
 				if buffer[position] != rune('%') {
-					goto l831
+					goto l820
 				}
 				position++
 				{
-					position833, tokenIndex833 := position, tokenIndex
+					position822, tokenIndex822 := position, tokenIndex
 					if c := buffer[position]; c < rune('c') || c > rune('g') {
-						goto l834
+						goto l823
 					}
 					position++
-					goto l833
-				l834:
-					position, tokenIndex = position833, tokenIndex833
+					goto l822
+				l823:
+					position, tokenIndex = position822, tokenIndex822
 					if buffer[position] != rune('s') {
-						goto l831
+						goto l820
 					}
 					position++
 				}
-			l833:
+			l822:
 				if buffer[position] != rune('s') {
-					goto l831
+					goto l820
 				}
 				position++
 				if buffer[position] != rune(':') {
-					goto l831
+					goto l820
 				}
 				position++
-				add(ruleSegmentRegister, position832)
+				add(ruleSegmentRegister, position821)
 			}
 			return true
-		l831:
-			position, tokenIndex = position831, tokenIndex831
+		l820:
+			position, tokenIndex = position820, tokenIndex820
 			return false
 		},
 	}
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/out.s b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
index 0b9828f..852312b 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
@@ -145,6 +145,7 @@
 .type bcm_redirector_remote_function, @function
 bcm_redirector_remote_function:
 .cfi_startproc
+	hint #34 // bti c
 	b remote_function
 .cfi_endproc
 .size bcm_redirector_remote_function, .-bcm_redirector_remote_function
@@ -153,6 +154,7 @@
 .type bcm_redirector_y0, @function
 bcm_redirector_y0:
 .cfi_startproc
+	hint #34 // bti c
 	b y0
 .cfi_endproc
 .size bcm_redirector_y0, .-bcm_redirector_y0
@@ -161,6 +163,7 @@
 .type bcm_redirector_y12, @function
 bcm_redirector_y12:
 .cfi_startproc
+	hint #34 // bti c
 	b y12
 .cfi_endproc
 .size bcm_redirector_y12, .-bcm_redirector_y12
@@ -169,6 +172,7 @@
 .type bss_symbol_bss_get, @function
 bss_symbol_bss_get:
 .cfi_startproc
+	hint #34 // bti c
 	adrp x0, .Lbss_symbol_local_target
 	add x0, x0, :lo12:.Lbss_symbol_local_target
 	ret
@@ -179,6 +183,7 @@
 .type .Lboringssl_loadgot_stderr, @function
 .Lboringssl_loadgot_stderr:
 .cfi_startproc
+	hint #34 // bti c
 	adrp x0, :got:stderr
 	ldr x0, [x0, :got_lo12:stderr]
 	ret
@@ -189,6 +194,7 @@
 .type .LOPENSSL_armcap_P_addr, @function
 .LOPENSSL_armcap_P_addr:
 .cfi_startproc
+	hint #34 // bti c
 	adrp x0, OPENSSL_armcap_P
 	add x0, x0, :lo12:OPENSSL_armcap_P
 	ret
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
index 6549db7..03580d1 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
@@ -93,7 +93,7 @@
 # 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	(.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