package main

// Code generated by peg delocate.peg DO NOT EDIT.

import (
	"fmt"
	"io"
	"os"
	"sort"
	"strconv"
	"strings"
)

const endSymbol rune = 1114112

/* The rule types inferred from the grammar are below. */
type pegRule uint8

const (
	ruleUnknown pegRule = iota
	ruleAsmFile
	ruleStatement
	ruleGlobalDirective
	ruleDirective
	ruleDirectiveName
	ruleLocationDirective
	ruleFileDirective
	ruleLocDirective
	ruleArgs
	ruleArg
	ruleQuotedArg
	ruleQuotedText
	ruleSymbolDefiningDirective
	ruleSymbolDefiningDirectiveName
	ruleLabelContainingDirective
	ruleLabelContainingDirectiveName
	rulePrefAlignDirective
	ruleSymbolArgs
	ruleSymbolArg
	ruleSymbolExpr
	ruleSymbolAtom
	ruleSymbolOperator
	ruleOpenParen
	ruleCloseParen
	ruleSymbolType
	ruleDot
	ruleTCMarker
	ruleEscapedChar
	ruleWS
	ruleComment
	ruleLabel
	ruleSymbolName
	ruleLocalSymbol
	ruleLocalLabel
	ruleLocalLabelRef
	ruleInstructionPrefix
	ruleInstruction
	ruleInstructionName
	ruleInstructionArg
	ruleGOTLocation
	ruleGOTAddress
	ruleGOTSymbolOffset
	ruleAVX512Token
	ruleTOCRefHigh
	ruleTOCRefLow
	ruleIndirectionIndicator
	ruleFloat
	ruleRegisterOrConstant
	ruleARMConstantTweak
	ruleARMRegister
	ruleARMVectorRegister
	ruleSVE2PredicateRegister
	ruleSVE2SpecialValue
	ruleMemoryRef
	ruleSymbolRef
	ruleLow12BitsSymbolRef
	ruleARMBaseIndexScale
	ruleARMGOTLow12
	ruleARMPostincrement
	ruleBaseIndexScale
	ruleOperator
	ruleOffset
	ruleSection
	ruleSegmentRegister
)

var rul3s = [...]string{
	"Unknown",
	"AsmFile",
	"Statement",
	"GlobalDirective",
	"Directive",
	"DirectiveName",
	"LocationDirective",
	"FileDirective",
	"LocDirective",
	"Args",
	"Arg",
	"QuotedArg",
	"QuotedText",
	"SymbolDefiningDirective",
	"SymbolDefiningDirectiveName",
	"LabelContainingDirective",
	"LabelContainingDirectiveName",
	"PrefAlignDirective",
	"SymbolArgs",
	"SymbolArg",
	"SymbolExpr",
	"SymbolAtom",
	"SymbolOperator",
	"OpenParen",
	"CloseParen",
	"SymbolType",
	"Dot",
	"TCMarker",
	"EscapedChar",
	"WS",
	"Comment",
	"Label",
	"SymbolName",
	"LocalSymbol",
	"LocalLabel",
	"LocalLabelRef",
	"InstructionPrefix",
	"Instruction",
	"InstructionName",
	"InstructionArg",
	"GOTLocation",
	"GOTAddress",
	"GOTSymbolOffset",
	"AVX512Token",
	"TOCRefHigh",
	"TOCRefLow",
	"IndirectionIndicator",
	"Float",
	"RegisterOrConstant",
	"ARMConstantTweak",
	"ARMRegister",
	"ARMVectorRegister",
	"SVE2PredicateRegister",
	"SVE2SpecialValue",
	"MemoryRef",
	"SymbolRef",
	"Low12BitsSymbolRef",
	"ARMBaseIndexScale",
	"ARMGOTLow12",
	"ARMPostincrement",
	"BaseIndexScale",
	"Operator",
	"Offset",
	"Section",
	"SegmentRegister",
}

type token32 struct {
	pegRule
	begin, end uint32
}

func (t *token32) String() string {
	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
}

type node32 struct {
	token32
	up, next *node32
}

func (node *node32) print(w io.Writer, pretty bool, buffer string) {
	var print func(node *node32, depth int)
	print = func(node *node32, depth int) {
		for node != nil {
			for c := 0; c < depth; c++ {
				fmt.Fprintf(w, " ")
			}
			rule := rul3s[node.pegRule]
			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
			if !pretty {
				fmt.Fprintf(w, "%v %v\n", rule, quote)
			} else {
				fmt.Fprintf(w, "\x1B[36m%v\x1B[m %v\n", rule, quote)
			}
			if node.up != nil {
				print(node.up, depth+1)
			}
			node = node.next
		}
	}
	print(node, 0)
}

func (node *node32) Print(w io.Writer, buffer string) {
	node.print(w, false, buffer)
}

func (node *node32) PrettyPrint(w io.Writer, buffer string) {
	node.print(w, true, buffer)
}

type tokens32 struct {
	tree []token32
}

func (t *tokens32) Trim(length uint32) {
	t.tree = t.tree[:length]
}

func (t *tokens32) Print() {
	for _, token := range t.tree {
		fmt.Println(token.String())
	}
}

func (t *tokens32) AST() *node32 {
	type element struct {
		node *node32
		down *element
	}
	tokens := t.Tokens()
	var stack *element
	for _, token := range tokens {
		if token.begin == token.end {
			continue
		}
		node := &node32{token32: token}
		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
			stack.node.next = node.up
			node.up = stack.node
			stack = stack.down
		}
		stack = &element{node: node, down: stack}
	}
	if stack != nil {
		return stack.node
	}
	return nil
}

func (t *tokens32) PrintSyntaxTree(buffer string) {
	t.AST().Print(os.Stdout, buffer)
}

func (t *tokens32) WriteSyntaxTree(w io.Writer, buffer string) {
	t.AST().Print(w, buffer)
}

func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
	t.AST().PrettyPrint(os.Stdout, buffer)
}

func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
	tree, i := t.tree, int(index)
	if i >= len(tree) {
		t.tree = append(tree, token32{pegRule: rule, begin: begin, end: end})
		return
	}
	tree[i] = token32{pegRule: rule, begin: begin, end: end}
}

func (t *tokens32) Tokens() []token32 {
	return t.tree
}

type Asm struct {
	Buffer string
	buffer []rune
	rules  [65]func() bool
	parse  func(rule ...int) error
	reset  func()
	Pretty bool
	tokens32
}

func (p *Asm) Parse(rule ...int) error {
	return p.parse(rule...)
}

func (p *Asm) Reset() {
	p.reset()
}

type textPosition struct {
	line, symbol int
}

type textPositionMap map[int]textPosition

func translatePositions(buffer []rune, positions []int) textPositionMap {
	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
	sort.Ints(positions)

search:
	for i, c := range buffer {
		if c == '\n' {
			line, symbol = line+1, 0
		} else {
			symbol++
		}
		if i == positions[j] {
			translations[positions[j]] = textPosition{line, symbol}
			for j++; j < length; j++ {
				if i != positions[j] {
					continue search
				}
			}
			break search
		}
	}

	return translations
}

type parseError struct {
	p   *Asm
	max token32
}

func (e *parseError) Error() string {
	tokens, err := []token32{e.max}, "\n"
	positions, p := make([]int, 2*len(tokens)), 0
	for _, token := range tokens {
		positions[p], p = int(token.begin), p+1
		positions[p], p = int(token.end), p+1
	}
	translations := translatePositions(e.p.buffer, positions)
	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
	if e.p.Pretty {
		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
	}
	for _, token := range tokens {
		begin, end := int(token.begin), int(token.end)
		err += fmt.Sprintf(format,
			rul3s[token.pegRule],
			translations[begin].line, translations[begin].symbol,
			translations[end].line, translations[end].symbol,
			strconv.Quote(string(e.p.buffer[begin:end])))
	}

	return err
}

func (p *Asm) PrintSyntaxTree() {
	if p.Pretty {
		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
	} else {
		p.tokens32.PrintSyntaxTree(p.Buffer)
	}
}

func (p *Asm) WriteSyntaxTree(w io.Writer) {
	p.tokens32.WriteSyntaxTree(w, p.Buffer)
}

func (p *Asm) SprintSyntaxTree() string {
	var bldr strings.Builder
	p.WriteSyntaxTree(&bldr)
	return bldr.String()
}

func Pretty(pretty bool) func(*Asm) error {
	return func(p *Asm) error {
		p.Pretty = pretty
		return nil
	}
}

func Size(size int) func(*Asm) error {
	return func(p *Asm) error {
		p.tokens32 = tokens32{tree: make([]token32, 0, size)}
		return nil
	}
}
func (p *Asm) Init(options ...func(*Asm) error) error {
	var (
		max                  token32
		position, tokenIndex uint32
		buffer               []rune
	)
	for _, option := range options {
		err := option(p)
		if err != nil {
			return err
		}
	}
	p.reset = func() {
		max = token32{}
		position, tokenIndex = 0, 0

		p.buffer = []rune(p.Buffer)
		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
			p.buffer = append(p.buffer, endSymbol)
		}
		buffer = p.buffer
	}
	p.reset()

	_rules := p.rules
	tree := p.tokens32
	p.parse = func(rule ...int) error {
		r := 1
		if len(rule) > 0 {
			r = rule[0]
		}
		matches := p.rules[r]()
		p.tokens32 = tree
		if matches {
			p.Trim(tokenIndex)
			return nil
		}
		return &parseError{p, max}
	}

	add := func(rule pegRule, begin uint32) {
		tree.Add(rule, begin, position, tokenIndex)
		tokenIndex++
		if begin != position && position > max.end {
			max = token32{rule, begin, position}
		}
	}

	matchDot := func() bool {
		if buffer[position] != endSymbol {
			position++
			return true
		}
		return false
	}

	/*matchChar := func(c byte) bool {
		if buffer[position] == c {
			position++
			return true
		}
		return false
	}*/

	/*matchRange := func(lower byte, upper byte) bool {
		if c := buffer[position]; c >= lower && c <= upper {
			position++
			return true
		}
		return false
	}*/

	_rules = [...]func() bool{
		nil,
		/* 0 AsmFile <- <(Statement* !.)> */
		func() bool {
			position0, tokenIndex0 := position, tokenIndex
			{
				position1 := position
			l2:
				{
					position3, tokenIndex3 := position, tokenIndex
					if !_rules[ruleStatement]() {
						goto l3
					}
					goto l2
				l3:
					position, tokenIndex = position3, tokenIndex3
				}
				{
					position4, tokenIndex4 := position, tokenIndex
					if !matchDot() {
						goto l4
					}
					goto l0
				l4:
					position, tokenIndex = position4, tokenIndex4
				}
				add(ruleAsmFile, position1)
			}
			return true
		l0:
			position, tokenIndex = position0, tokenIndex0
			return false
		},
		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / SymbolDefiningDirective / LabelContainingDirective / PrefAlignDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
		func() bool {
			position5, tokenIndex5 := position, tokenIndex
			{
				position6 := position
				{
					position7, tokenIndex7 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l7
					}
					goto l8
				l7:
					position, tokenIndex = position7, tokenIndex7
				}
			l8:
				{
					position9, tokenIndex9 := position, tokenIndex
					if !_rules[ruleLabel]() {
						goto l10
					}
					goto l9
				l10:
					position, tokenIndex = position9, tokenIndex9
					{
						position11, tokenIndex11 := position, tokenIndex
						if !_rules[ruleGlobalDirective]() {
							goto l12
						}
						goto l11
					l12:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLocationDirective]() {
							goto l13
						}
						goto l11
					l13:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleSymbolDefiningDirective]() {
							goto l14
						}
						goto l11
					l14:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLabelContainingDirective]() {
							goto l15
						}
						goto l11
					l15:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[rulePrefAlignDirective]() {
							goto l16
						}
						goto l11
					l16:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleInstruction]() {
							goto l17
						}
						goto l11
					l17:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleDirective]() {
							goto l18
						}
						goto l11
					l18:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleComment]() {
							goto l19
						}
						goto l11
					l19:
						position, tokenIndex = position11, tokenIndex11
					}
				l11:
					{
						position20, tokenIndex20 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l20
						}
						goto l21
					l20:
						position, tokenIndex = position20, tokenIndex20
					}
				l21:
					{
						position22, tokenIndex22 := position, tokenIndex
						{
							position24, tokenIndex24 := position, tokenIndex
							if !_rules[ruleComment]() {
								goto l24
							}
							goto l25
						l24:
							position, tokenIndex = position24, tokenIndex24
						}
					l25:
						if buffer[position] != rune('\n') {
							goto l23
						}
						position++
						goto l22
					l23:
						position, tokenIndex = position22, tokenIndex22
						if buffer[position] != rune(';') {
							goto l5
						}
						position++
					}
				l22:
				}
			l9:
				add(ruleStatement, position6)
			}
			return true
		l5:
			position, tokenIndex = position5, tokenIndex5
			return false
		},
		/* 2 GlobalDirective <- <((('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('a' / 'A') ('l' / 'L')) / ('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('l' / 'L'))) WS SymbolName)> */
		func() bool {
			position26, tokenIndex26 := position, tokenIndex
			{
				position27 := position
				{
					position28, tokenIndex28 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l29
					}
					position++
					{
						position30, tokenIndex30 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l31
						}
						position++
						goto l30
					l31:
						position, tokenIndex = position30, tokenIndex30
						if buffer[position] != rune('G') {
							goto l29
						}
						position++
					}
				l30:
					{
						position32, tokenIndex32 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l33
						}
						position++
						goto l32
					l33:
						position, tokenIndex = position32, tokenIndex32
						if buffer[position] != rune('L') {
							goto l29
						}
						position++
					}
				l32:
					{
						position34, tokenIndex34 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l35
						}
						position++
						goto l34
					l35:
						position, tokenIndex = position34, tokenIndex34
						if buffer[position] != rune('O') {
							goto l29
						}
						position++
					}
				l34:
					{
						position36, tokenIndex36 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l37
						}
						position++
						goto l36
					l37:
						position, tokenIndex = position36, tokenIndex36
						if buffer[position] != rune('B') {
							goto l29
						}
						position++
					}
				l36:
					{
						position38, tokenIndex38 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l39
						}
						position++
						goto l38
					l39:
						position, tokenIndex = position38, tokenIndex38
						if buffer[position] != rune('A') {
							goto l29
						}
						position++
					}
				l38:
					{
						position40, tokenIndex40 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l41
						}
						position++
						goto l40
					l41:
						position, tokenIndex = position40, tokenIndex40
						if buffer[position] != rune('L') {
							goto l29
						}
						position++
					}
				l40:
					goto l28
				l29:
					position, tokenIndex = position28, tokenIndex28
					if buffer[position] != rune('.') {
						goto l26
					}
					position++
					{
						position42, tokenIndex42 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l43
						}
						position++
						goto l42
					l43:
						position, tokenIndex = position42, tokenIndex42
						if buffer[position] != rune('G') {
							goto l26
						}
						position++
					}
				l42:
					{
						position44, tokenIndex44 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l45
						}
						position++
						goto l44
					l45:
						position, tokenIndex = position44, tokenIndex44
						if buffer[position] != rune('L') {
							goto l26
						}
						position++
					}
				l44:
					{
						position46, tokenIndex46 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l47
						}
						position++
						goto l46
					l47:
						position, tokenIndex = position46, tokenIndex46
						if buffer[position] != rune('O') {
							goto l26
						}
						position++
					}
				l46:
					{
						position48, tokenIndex48 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l49
						}
						position++
						goto l48
					l49:
						position, tokenIndex = position48, tokenIndex48
						if buffer[position] != rune('B') {
							goto l26
						}
						position++
					}
				l48:
					{
						position50, tokenIndex50 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l51
						}
						position++
						goto l50
					l51:
						position, tokenIndex = position50, tokenIndex50
						if buffer[position] != rune('L') {
							goto l26
						}
						position++
					}
				l50:
				}
			l28:
				if !_rules[ruleWS]() {
					goto l26
				}
				if !_rules[ruleSymbolName]() {
					goto l26
				}
				add(ruleGlobalDirective, position27)
			}
			return true
		l26:
			position, tokenIndex = position26, tokenIndex26
			return false
		},
		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
		func() bool {
			position52, tokenIndex52 := position, tokenIndex
			{
				position53 := position
				if buffer[position] != rune('.') {
					goto l52
				}
				position++
				if !_rules[ruleDirectiveName]() {
					goto l52
				}
				{
					position54, tokenIndex54 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l54
					}
					if !_rules[ruleArgs]() {
						goto l54
					}
					goto l55
				l54:
					position, tokenIndex = position54, tokenIndex54
				}
			l55:
				add(ruleDirective, position53)
			}
			return true
		l52:
			position, tokenIndex = position52, tokenIndex52
			return false
		},
		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
		func() bool {
			position56, tokenIndex56 := position, tokenIndex
			{
				position57 := position
				{
					position60, tokenIndex60 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l61
					}
					position++
					goto l60
				l61:
					position, tokenIndex = position60, tokenIndex60
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l62
					}
					position++
					goto l60
				l62:
					position, tokenIndex = position60, tokenIndex60
					{
						position64, tokenIndex64 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l65
						}
						position++
						goto l64
					l65:
						position, tokenIndex = position64, tokenIndex64
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l63
						}
						position++
					}
				l64:
					goto l60
				l63:
					position, tokenIndex = position60, tokenIndex60
					if buffer[position] != rune('_') {
						goto l56
					}
					position++
				}
			l60:
			l58:
				{
					position59, tokenIndex59 := position, tokenIndex
					{
						position66, tokenIndex66 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l67
						}
						position++
						goto l66
					l67:
						position, tokenIndex = position66, tokenIndex66
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l68
						}
						position++
						goto l66
					l68:
						position, tokenIndex = position66, tokenIndex66
						{
							position70, tokenIndex70 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l71
							}
							position++
							goto l70
						l71:
							position, tokenIndex = position70, tokenIndex70
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l69
							}
							position++
						}
					l70:
						goto l66
					l69:
						position, tokenIndex = position66, tokenIndex66
						if buffer[position] != rune('_') {
							goto l59
						}
						position++
					}
				l66:
					goto l58
				l59:
					position, tokenIndex = position59, tokenIndex59
				}
				add(ruleDirectiveName, position57)
			}
			return true
		l56:
			position, tokenIndex = position56, tokenIndex56
			return false
		},
		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
		func() bool {
			position72, tokenIndex72 := position, tokenIndex
			{
				position73 := position
				{
					position74, tokenIndex74 := position, tokenIndex
					if !_rules[ruleFileDirective]() {
						goto l75
					}
					goto l74
				l75:
					position, tokenIndex = position74, tokenIndex74
					if !_rules[ruleLocDirective]() {
						goto l72
					}
				}
			l74:
				add(ruleLocationDirective, position73)
			}
			return true
		l72:
			position, tokenIndex = position72, tokenIndex72
			return false
		},
		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
		func() bool {
			position76, tokenIndex76 := position, tokenIndex
			{
				position77 := position
				if buffer[position] != rune('.') {
					goto l76
				}
				position++
				{
					position78, tokenIndex78 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l79
					}
					position++
					goto l78
				l79:
					position, tokenIndex = position78, tokenIndex78
					if buffer[position] != rune('F') {
						goto l76
					}
					position++
				}
			l78:
				{
					position80, tokenIndex80 := position, tokenIndex
					if buffer[position] != rune('i') {
						goto l81
					}
					position++
					goto l80
				l81:
					position, tokenIndex = position80, tokenIndex80
					if buffer[position] != rune('I') {
						goto l76
					}
					position++
				}
			l80:
				{
					position82, tokenIndex82 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l83
					}
					position++
					goto l82
				l83:
					position, tokenIndex = position82, tokenIndex82
					if buffer[position] != rune('L') {
						goto l76
					}
					position++
				}
			l82:
				{
					position84, tokenIndex84 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l85
					}
					position++
					goto l84
				l85:
					position, tokenIndex = position84, tokenIndex84
					if buffer[position] != rune('E') {
						goto l76
					}
					position++
				}
			l84:
				if !_rules[ruleWS]() {
					goto l76
				}
				{
					position88, tokenIndex88 := position, tokenIndex
					{
						position89, tokenIndex89 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l90
						}
						position++
						goto l89
					l90:
						position, tokenIndex = position89, tokenIndex89
						if buffer[position] != rune('\n') {
							goto l88
						}
						position++
					}
				l89:
					goto l76
				l88:
					position, tokenIndex = position88, tokenIndex88
				}
				if !matchDot() {
					goto l76
				}
			l86:
				{
					position87, tokenIndex87 := position, tokenIndex
					{
						position91, tokenIndex91 := position, tokenIndex
						{
							position92, tokenIndex92 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l93
							}
							position++
							goto l92
						l93:
							position, tokenIndex = position92, tokenIndex92
							if buffer[position] != rune('\n') {
								goto l91
							}
							position++
						}
					l92:
						goto l87
					l91:
						position, tokenIndex = position91, tokenIndex91
					}
					if !matchDot() {
						goto l87
					}
					goto l86
				l87:
					position, tokenIndex = position87, tokenIndex87
				}
				add(ruleFileDirective, position77)
			}
			return true
		l76:
			position, tokenIndex = position76, tokenIndex76
			return false
		},
		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
		func() bool {
			position94, tokenIndex94 := position, tokenIndex
			{
				position95 := position
				if buffer[position] != rune('.') {
					goto l94
				}
				position++
				{
					position96, tokenIndex96 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l97
					}
					position++
					goto l96
				l97:
					position, tokenIndex = position96, tokenIndex96
					if buffer[position] != rune('L') {
						goto l94
					}
					position++
				}
			l96:
				{
					position98, tokenIndex98 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l99
					}
					position++
					goto l98
				l99:
					position, tokenIndex = position98, tokenIndex98
					if buffer[position] != rune('O') {
						goto l94
					}
					position++
				}
			l98:
				{
					position100, tokenIndex100 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l101
					}
					position++
					goto l100
				l101:
					position, tokenIndex = position100, tokenIndex100
					if buffer[position] != rune('C') {
						goto l94
					}
					position++
				}
			l100:
				if !_rules[ruleWS]() {
					goto l94
				}
				{
					position104, tokenIndex104 := position, tokenIndex
					{
						position105, tokenIndex105 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l106
						}
						position++
						goto l105
					l106:
						position, tokenIndex = position105, tokenIndex105
						if buffer[position] != rune('/') {
							goto l107
						}
						position++
						goto l105
					l107:
						position, tokenIndex = position105, tokenIndex105
						if buffer[position] != rune('\n') {
							goto l104
						}
						position++
					}
				l105:
					goto l94
				l104:
					position, tokenIndex = position104, tokenIndex104
				}
				if !matchDot() {
					goto l94
				}
			l102:
				{
					position103, tokenIndex103 := position, tokenIndex
					{
						position108, tokenIndex108 := position, tokenIndex
						{
							position109, tokenIndex109 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l110
							}
							position++
							goto l109
						l110:
							position, tokenIndex = position109, tokenIndex109
							if buffer[position] != rune('/') {
								goto l111
							}
							position++
							goto l109
						l111:
							position, tokenIndex = position109, tokenIndex109
							if buffer[position] != rune('\n') {
								goto l108
							}
							position++
						}
					l109:
						goto l103
					l108:
						position, tokenIndex = position108, tokenIndex108
					}
					if !matchDot() {
						goto l103
					}
					goto l102
				l103:
					position, tokenIndex = position103, tokenIndex103
				}
				add(ruleLocDirective, position95)
			}
			return true
		l94:
			position, tokenIndex = position94, tokenIndex94
			return false
		},
		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
		func() bool {
			position112, tokenIndex112 := position, tokenIndex
			{
				position113 := position
				if !_rules[ruleArg]() {
					goto l112
				}
			l114:
				{
					position115, tokenIndex115 := position, tokenIndex
					{
						position116, tokenIndex116 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l116
						}
						goto l117
					l116:
						position, tokenIndex = position116, tokenIndex116
					}
				l117:
					if buffer[position] != rune(',') {
						goto l115
					}
					position++
					{
						position118, tokenIndex118 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l118
						}
						goto l119
					l118:
						position, tokenIndex = position118, tokenIndex118
					}
				l119:
					if !_rules[ruleArg]() {
						goto l115
					}
					goto l114
				l115:
					position, tokenIndex = position115, tokenIndex115
				}
				add(ruleArgs, position113)
			}
			return true
		l112:
			position, tokenIndex = position112, tokenIndex112
			return false
		},
		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.' / '$')*)> */
		func() bool {
			{
				position121 := position
				{
					position122, tokenIndex122 := position, tokenIndex
					if !_rules[ruleQuotedArg]() {
						goto l123
					}
					goto l122
				l123:
					position, tokenIndex = position122, tokenIndex122
				l124:
					{
						position125, tokenIndex125 := position, tokenIndex
						{
							position126, tokenIndex126 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l127
							}
							position++
							goto l126
						l127:
							position, tokenIndex = position126, tokenIndex126
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l128
							}
							position++
							goto l126
						l128:
							position, tokenIndex = position126, tokenIndex126
							{
								position130, tokenIndex130 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('z') {
									goto l131
								}
								position++
								goto l130
							l131:
								position, tokenIndex = position130, tokenIndex130
								if c := buffer[position]; c < rune('A') || c > rune('Z') {
									goto l129
								}
								position++
							}
						l130:
							goto l126
						l129:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('%') {
								goto l132
							}
							position++
							goto l126
						l132:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('+') {
								goto l133
							}
							position++
							goto l126
						l133:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('-') {
								goto l134
							}
							position++
							goto l126
						l134:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('*') {
								goto l135
							}
							position++
							goto l126
						l135:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('_') {
								goto l136
							}
							position++
							goto l126
						l136:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('@') {
								goto l137
							}
							position++
							goto l126
						l137:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('.') {
								goto l138
							}
							position++
							goto l126
						l138:
							position, tokenIndex = position126, tokenIndex126
							if buffer[position] != rune('$') {
								goto l125
							}
							position++
						}
					l126:
						goto l124
					l125:
						position, tokenIndex = position125, tokenIndex125
					}
				}
			l122:
				add(ruleArg, position121)
			}
			return true
		},
		/* 10 QuotedArg <- <('"' QuotedText '"')> */
		func() bool {
			position139, tokenIndex139 := position, tokenIndex
			{
				position140 := position
				if buffer[position] != rune('"') {
					goto l139
				}
				position++
				if !_rules[ruleQuotedText]() {
					goto l139
				}
				if buffer[position] != rune('"') {
					goto l139
				}
				position++
				add(ruleQuotedArg, position140)
			}
			return true
		l139:
			position, tokenIndex = position139, tokenIndex139
			return false
		},
		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
		func() bool {
			{
				position142 := position
			l143:
				{
					position144, tokenIndex144 := position, tokenIndex
					{
						position145, tokenIndex145 := position, tokenIndex
						if !_rules[ruleEscapedChar]() {
							goto l146
						}
						goto l145
					l146:
						position, tokenIndex = position145, tokenIndex145
						{
							position147, tokenIndex147 := position, tokenIndex
							if buffer[position] != rune('"') {
								goto l147
							}
							position++
							goto l144
						l147:
							position, tokenIndex = position147, tokenIndex147
						}
						if !matchDot() {
							goto l144
						}
					}
				l145:
					goto l143
				l144:
					position, tokenIndex = position144, tokenIndex144
				}
				add(ruleQuotedText, position142)
			}
			return true
		},
		/* 12 SymbolDefiningDirective <- <((SymbolDefiningDirectiveName WS (LocalSymbol / SymbolName) WS? ',' WS? SymbolArg) / ((LocalSymbol / SymbolName) WS? '=' WS? SymbolArg))> */
		func() bool {
			position148, tokenIndex148 := position, tokenIndex
			{
				position149 := position
				{
					position150, tokenIndex150 := position, tokenIndex
					if !_rules[ruleSymbolDefiningDirectiveName]() {
						goto l151
					}
					if !_rules[ruleWS]() {
						goto l151
					}
					{
						position152, tokenIndex152 := position, tokenIndex
						if !_rules[ruleLocalSymbol]() {
							goto l153
						}
						goto l152
					l153:
						position, tokenIndex = position152, tokenIndex152
						if !_rules[ruleSymbolName]() {
							goto l151
						}
					}
				l152:
					{
						position154, tokenIndex154 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l154
						}
						goto l155
					l154:
						position, tokenIndex = position154, tokenIndex154
					}
				l155:
					if buffer[position] != rune(',') {
						goto l151
					}
					position++
					{
						position156, tokenIndex156 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l156
						}
						goto l157
					l156:
						position, tokenIndex = position156, tokenIndex156
					}
				l157:
					if !_rules[ruleSymbolArg]() {
						goto l151
					}
					goto l150
				l151:
					position, tokenIndex = position150, tokenIndex150
					{
						position158, tokenIndex158 := position, tokenIndex
						if !_rules[ruleLocalSymbol]() {
							goto l159
						}
						goto l158
					l159:
						position, tokenIndex = position158, tokenIndex158
						if !_rules[ruleSymbolName]() {
							goto l148
						}
					}
				l158:
					{
						position160, tokenIndex160 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l160
						}
						goto l161
					l160:
						position, tokenIndex = position160, tokenIndex160
					}
				l161:
					if buffer[position] != rune('=') {
						goto l148
					}
					position++
					{
						position162, tokenIndex162 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l162
						}
						goto l163
					l162:
						position, tokenIndex = position162, tokenIndex162
					}
				l163:
					if !_rules[ruleSymbolArg]() {
						goto l148
					}
				}
			l150:
				add(ruleSymbolDefiningDirective, position149)
			}
			return true
		l148:
			position, tokenIndex = position148, tokenIndex148
			return false
		},
		/* 13 SymbolDefiningDirectiveName <- <(('.' ('e' / 'E') ('q' / 'Q') ('u' / 'U') ('i' / 'I') ('v' / 'V')) / ('.' ('e' / 'E') ('q' / 'Q') ('u' / 'U')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')))> */
		func() bool {
			position164, tokenIndex164 := position, tokenIndex
			{
				position165 := position
				{
					position166, tokenIndex166 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l167
					}
					position++
					{
						position168, tokenIndex168 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l169
						}
						position++
						goto l168
					l169:
						position, tokenIndex = position168, tokenIndex168
						if buffer[position] != rune('E') {
							goto l167
						}
						position++
					}
				l168:
					{
						position170, tokenIndex170 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l171
						}
						position++
						goto l170
					l171:
						position, tokenIndex = position170, tokenIndex170
						if buffer[position] != rune('Q') {
							goto l167
						}
						position++
					}
				l170:
					{
						position172, tokenIndex172 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l173
						}
						position++
						goto l172
					l173:
						position, tokenIndex = position172, tokenIndex172
						if buffer[position] != rune('U') {
							goto l167
						}
						position++
					}
				l172:
					{
						position174, tokenIndex174 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l175
						}
						position++
						goto l174
					l175:
						position, tokenIndex = position174, tokenIndex174
						if buffer[position] != rune('I') {
							goto l167
						}
						position++
					}
				l174:
					{
						position176, tokenIndex176 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l177
						}
						position++
						goto l176
					l177:
						position, tokenIndex = position176, tokenIndex176
						if buffer[position] != rune('V') {
							goto l167
						}
						position++
					}
				l176:
					goto l166
				l167:
					position, tokenIndex = position166, tokenIndex166
					if buffer[position] != rune('.') {
						goto l178
					}
					position++
					{
						position179, tokenIndex179 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l180
						}
						position++
						goto l179
					l180:
						position, tokenIndex = position179, tokenIndex179
						if buffer[position] != rune('E') {
							goto l178
						}
						position++
					}
				l179:
					{
						position181, tokenIndex181 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l182
						}
						position++
						goto l181
					l182:
						position, tokenIndex = position181, tokenIndex181
						if buffer[position] != rune('Q') {
							goto l178
						}
						position++
					}
				l181:
					{
						position183, tokenIndex183 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l184
						}
						position++
						goto l183
					l184:
						position, tokenIndex = position183, tokenIndex183
						if buffer[position] != rune('U') {
							goto l178
						}
						position++
					}
				l183:
					goto l166
				l178:
					position, tokenIndex = position166, tokenIndex166
					if buffer[position] != rune('.') {
						goto l164
					}
					position++
					{
						position185, tokenIndex185 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l186
						}
						position++
						goto l185
					l186:
						position, tokenIndex = position185, tokenIndex185
						if buffer[position] != rune('S') {
							goto l164
						}
						position++
					}
				l185:
					{
						position187, tokenIndex187 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l188
						}
						position++
						goto l187
					l188:
						position, tokenIndex = position187, tokenIndex187
						if buffer[position] != rune('E') {
							goto l164
						}
						position++
					}
				l187:
					{
						position189, tokenIndex189 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l190
						}
						position++
						goto l189
					l190:
						position, tokenIndex = position189, tokenIndex189
						if buffer[position] != rune('T') {
							goto l164
						}
						position++
					}
				l189:
				}
			l166:
				add(ruleSymbolDefiningDirectiveName, position165)
			}
			return true
		l164:
			position, tokenIndex = position164, tokenIndex164
			return false
		},
		/* 14 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
		func() bool {
			position191, tokenIndex191 := position, tokenIndex
			{
				position192 := position
				if !_rules[ruleLabelContainingDirectiveName]() {
					goto l191
				}
				if !_rules[ruleWS]() {
					goto l191
				}
				if !_rules[ruleSymbolArgs]() {
					goto l191
				}
				add(ruleLabelContainingDirective, position192)
			}
			return true
		l191:
			position, tokenIndex = position191, tokenIndex191
			return false
		},
		/* 15 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('h' / 'H') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
		func() bool {
			position193, tokenIndex193 := position, tokenIndex
			{
				position194 := position
				{
					position195, tokenIndex195 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l196
					}
					position++
					{
						position197, tokenIndex197 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l198
						}
						position++
						goto l197
					l198:
						position, tokenIndex = position197, tokenIndex197
						if buffer[position] != rune('X') {
							goto l196
						}
						position++
					}
				l197:
					{
						position199, tokenIndex199 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l200
						}
						position++
						goto l199
					l200:
						position, tokenIndex = position199, tokenIndex199
						if buffer[position] != rune('W') {
							goto l196
						}
						position++
					}
				l199:
					{
						position201, tokenIndex201 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l202
						}
						position++
						goto l201
					l202:
						position, tokenIndex = position201, tokenIndex201
						if buffer[position] != rune('O') {
							goto l196
						}
						position++
					}
				l201:
					{
						position203, tokenIndex203 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l204
						}
						position++
						goto l203
					l204:
						position, tokenIndex = position203, tokenIndex203
						if buffer[position] != rune('R') {
							goto l196
						}
						position++
					}
				l203:
					{
						position205, tokenIndex205 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l206
						}
						position++
						goto l205
					l206:
						position, tokenIndex = position205, tokenIndex205
						if buffer[position] != rune('D') {
							goto l196
						}
						position++
					}
				l205:
					goto l195
				l196:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l207
					}
					position++
					{
						position208, tokenIndex208 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l209
						}
						position++
						goto l208
					l209:
						position, tokenIndex = position208, tokenIndex208
						if buffer[position] != rune('W') {
							goto l207
						}
						position++
					}
				l208:
					{
						position210, tokenIndex210 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l211
						}
						position++
						goto l210
					l211:
						position, tokenIndex = position210, tokenIndex210
						if buffer[position] != rune('O') {
							goto l207
						}
						position++
					}
				l210:
					{
						position212, tokenIndex212 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l213
						}
						position++
						goto l212
					l213:
						position, tokenIndex = position212, tokenIndex212
						if buffer[position] != rune('R') {
							goto l207
						}
						position++
					}
				l212:
					{
						position214, tokenIndex214 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l215
						}
						position++
						goto l214
					l215:
						position, tokenIndex = position214, tokenIndex214
						if buffer[position] != rune('D') {
							goto l207
						}
						position++
					}
				l214:
					goto l195
				l207:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l216
					}
					position++
					{
						position217, tokenIndex217 := position, tokenIndex
						if buffer[position] != rune('h') {
							goto l218
						}
						position++
						goto l217
					l218:
						position, tokenIndex = position217, tokenIndex217
						if buffer[position] != rune('H') {
							goto l216
						}
						position++
					}
				l217:
					{
						position219, tokenIndex219 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l220
						}
						position++
						goto l219
					l220:
						position, tokenIndex = position219, tokenIndex219
						if buffer[position] != rune('W') {
							goto l216
						}
						position++
					}
				l219:
					{
						position221, tokenIndex221 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l222
						}
						position++
						goto l221
					l222:
						position, tokenIndex = position221, tokenIndex221
						if buffer[position] != rune('O') {
							goto l216
						}
						position++
					}
				l221:
					{
						position223, tokenIndex223 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l224
						}
						position++
						goto l223
					l224:
						position, tokenIndex = position223, tokenIndex223
						if buffer[position] != rune('R') {
							goto l216
						}
						position++
					}
				l223:
					{
						position225, tokenIndex225 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l226
						}
						position++
						goto l225
					l226:
						position, tokenIndex = position225, tokenIndex225
						if buffer[position] != rune('D') {
							goto l216
						}
						position++
					}
				l225:
					goto l195
				l216:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l227
					}
					position++
					{
						position228, tokenIndex228 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l229
						}
						position++
						goto l228
					l229:
						position, tokenIndex = position228, tokenIndex228
						if buffer[position] != rune('L') {
							goto l227
						}
						position++
					}
				l228:
					{
						position230, tokenIndex230 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l231
						}
						position++
						goto l230
					l231:
						position, tokenIndex = position230, tokenIndex230
						if buffer[position] != rune('O') {
							goto l227
						}
						position++
					}
				l230:
					{
						position232, tokenIndex232 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l233
						}
						position++
						goto l232
					l233:
						position, tokenIndex = position232, tokenIndex232
						if buffer[position] != rune('N') {
							goto l227
						}
						position++
					}
				l232:
					{
						position234, tokenIndex234 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l235
						}
						position++
						goto l234
					l235:
						position, tokenIndex = position234, tokenIndex234
						if buffer[position] != rune('G') {
							goto l227
						}
						position++
					}
				l234:
					goto l195
				l227:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l236
					}
					position++
					{
						position237, tokenIndex237 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l238
						}
						position++
						goto l237
					l238:
						position, tokenIndex = position237, tokenIndex237
						if buffer[position] != rune('B') {
							goto l236
						}
						position++
					}
				l237:
					{
						position239, tokenIndex239 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l240
						}
						position++
						goto l239
					l240:
						position, tokenIndex = position239, tokenIndex239
						if buffer[position] != rune('Y') {
							goto l236
						}
						position++
					}
				l239:
					{
						position241, tokenIndex241 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l242
						}
						position++
						goto l241
					l242:
						position, tokenIndex = position241, tokenIndex241
						if buffer[position] != rune('T') {
							goto l236
						}
						position++
					}
				l241:
					{
						position243, tokenIndex243 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l244
						}
						position++
						goto l243
					l244:
						position, tokenIndex = position243, tokenIndex243
						if buffer[position] != rune('E') {
							goto l236
						}
						position++
					}
				l243:
					goto l195
				l236:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l245
					}
					position++
					if buffer[position] != rune('8') {
						goto l245
					}
					position++
					{
						position246, tokenIndex246 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l247
						}
						position++
						goto l246
					l247:
						position, tokenIndex = position246, tokenIndex246
						if buffer[position] != rune('B') {
							goto l245
						}
						position++
					}
				l246:
					{
						position248, tokenIndex248 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l249
						}
						position++
						goto l248
					l249:
						position, tokenIndex = position248, tokenIndex248
						if buffer[position] != rune('Y') {
							goto l245
						}
						position++
					}
				l248:
					{
						position250, tokenIndex250 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l251
						}
						position++
						goto l250
					l251:
						position, tokenIndex = position250, tokenIndex250
						if buffer[position] != rune('T') {
							goto l245
						}
						position++
					}
				l250:
					{
						position252, tokenIndex252 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l253
						}
						position++
						goto l252
					l253:
						position, tokenIndex = position252, tokenIndex252
						if buffer[position] != rune('E') {
							goto l245
						}
						position++
					}
				l252:
					goto l195
				l245:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l254
					}
					position++
					if buffer[position] != rune('4') {
						goto l254
					}
					position++
					{
						position255, tokenIndex255 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l256
						}
						position++
						goto l255
					l256:
						position, tokenIndex = position255, tokenIndex255
						if buffer[position] != rune('B') {
							goto l254
						}
						position++
					}
				l255:
					{
						position257, tokenIndex257 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l258
						}
						position++
						goto l257
					l258:
						position, tokenIndex = position257, tokenIndex257
						if buffer[position] != rune('Y') {
							goto l254
						}
						position++
					}
				l257:
					{
						position259, tokenIndex259 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l260
						}
						position++
						goto l259
					l260:
						position, tokenIndex = position259, tokenIndex259
						if buffer[position] != rune('T') {
							goto l254
						}
						position++
					}
				l259:
					{
						position261, tokenIndex261 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l262
						}
						position++
						goto l261
					l262:
						position, tokenIndex = position261, tokenIndex261
						if buffer[position] != rune('E') {
							goto l254
						}
						position++
					}
				l261:
					goto l195
				l254:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l263
					}
					position++
					{
						position264, tokenIndex264 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l265
						}
						position++
						goto l264
					l265:
						position, tokenIndex = position264, tokenIndex264
						if buffer[position] != rune('Q') {
							goto l263
						}
						position++
					}
				l264:
					{
						position266, tokenIndex266 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l267
						}
						position++
						goto l266
					l267:
						position, tokenIndex = position266, tokenIndex266
						if buffer[position] != rune('U') {
							goto l263
						}
						position++
					}
				l266:
					{
						position268, tokenIndex268 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l269
						}
						position++
						goto l268
					l269:
						position, tokenIndex = position268, tokenIndex268
						if buffer[position] != rune('A') {
							goto l263
						}
						position++
					}
				l268:
					{
						position270, tokenIndex270 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l271
						}
						position++
						goto l270
					l271:
						position, tokenIndex = position270, tokenIndex270
						if buffer[position] != rune('D') {
							goto l263
						}
						position++
					}
				l270:
					goto l195
				l263:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l272
					}
					position++
					{
						position273, tokenIndex273 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l274
						}
						position++
						goto l273
					l274:
						position, tokenIndex = position273, tokenIndex273
						if buffer[position] != rune('T') {
							goto l272
						}
						position++
					}
				l273:
					{
						position275, tokenIndex275 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l276
						}
						position++
						goto l275
					l276:
						position, tokenIndex = position275, tokenIndex275
						if buffer[position] != rune('C') {
							goto l272
						}
						position++
					}
				l275:
					goto l195
				l272:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l277
					}
					position++
					{
						position278, tokenIndex278 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l279
						}
						position++
						goto l278
					l279:
						position, tokenIndex = position278, tokenIndex278
						if buffer[position] != rune('L') {
							goto l277
						}
						position++
					}
				l278:
					{
						position280, tokenIndex280 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l281
						}
						position++
						goto l280
					l281:
						position, tokenIndex = position280, tokenIndex280
						if buffer[position] != rune('O') {
							goto l277
						}
						position++
					}
				l280:
					{
						position282, tokenIndex282 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l283
						}
						position++
						goto l282
					l283:
						position, tokenIndex = position282, tokenIndex282
						if buffer[position] != rune('C') {
							goto l277
						}
						position++
					}
				l282:
					{
						position284, tokenIndex284 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l285
						}
						position++
						goto l284
					l285:
						position, tokenIndex = position284, tokenIndex284
						if buffer[position] != rune('A') {
							goto l277
						}
						position++
					}
				l284:
					{
						position286, tokenIndex286 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l287
						}
						position++
						goto l286
					l287:
						position, tokenIndex = position286, tokenIndex286
						if buffer[position] != rune('L') {
							goto l277
						}
						position++
					}
				l286:
					{
						position288, tokenIndex288 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l289
						}
						position++
						goto l288
					l289:
						position, tokenIndex = position288, tokenIndex288
						if buffer[position] != rune('E') {
							goto l277
						}
						position++
					}
				l288:
					{
						position290, tokenIndex290 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l291
						}
						position++
						goto l290
					l291:
						position, tokenIndex = position290, tokenIndex290
						if buffer[position] != rune('N') {
							goto l277
						}
						position++
					}
				l290:
					{
						position292, tokenIndex292 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l293
						}
						position++
						goto l292
					l293:
						position, tokenIndex = position292, tokenIndex292
						if buffer[position] != rune('T') {
							goto l277
						}
						position++
					}
				l292:
					{
						position294, tokenIndex294 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l295
						}
						position++
						goto l294
					l295:
						position, tokenIndex = position294, tokenIndex294
						if buffer[position] != rune('R') {
							goto l277
						}
						position++
					}
				l294:
					{
						position296, tokenIndex296 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l297
						}
						position++
						goto l296
					l297:
						position, tokenIndex = position296, tokenIndex296
						if buffer[position] != rune('Y') {
							goto l277
						}
						position++
					}
				l296:
					goto l195
				l277:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l298
					}
					position++
					{
						position299, tokenIndex299 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l300
						}
						position++
						goto l299
					l300:
						position, tokenIndex = position299, tokenIndex299
						if buffer[position] != rune('S') {
							goto l298
						}
						position++
					}
				l299:
					{
						position301, tokenIndex301 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l302
						}
						position++
						goto l301
					l302:
						position, tokenIndex = position301, tokenIndex301
						if buffer[position] != rune('I') {
							goto l298
						}
						position++
					}
				l301:
					{
						position303, tokenIndex303 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l304
						}
						position++
						goto l303
					l304:
						position, tokenIndex = position303, tokenIndex303
						if buffer[position] != rune('Z') {
							goto l298
						}
						position++
					}
				l303:
					{
						position305, tokenIndex305 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l306
						}
						position++
						goto l305
					l306:
						position, tokenIndex = position305, tokenIndex305
						if buffer[position] != rune('E') {
							goto l298
						}
						position++
					}
				l305:
					goto l195
				l298:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l307
					}
					position++
					{
						position308, tokenIndex308 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l309
						}
						position++
						goto l308
					l309:
						position, tokenIndex = position308, tokenIndex308
						if buffer[position] != rune('T') {
							goto l307
						}
						position++
					}
				l308:
					{
						position310, tokenIndex310 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l311
						}
						position++
						goto l310
					l311:
						position, tokenIndex = position310, tokenIndex310
						if buffer[position] != rune('Y') {
							goto l307
						}
						position++
					}
				l310:
					{
						position312, tokenIndex312 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l313
						}
						position++
						goto l312
					l313:
						position, tokenIndex = position312, tokenIndex312
						if buffer[position] != rune('P') {
							goto l307
						}
						position++
					}
				l312:
					{
						position314, tokenIndex314 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l315
						}
						position++
						goto l314
					l315:
						position, tokenIndex = position314, tokenIndex314
						if buffer[position] != rune('E') {
							goto l307
						}
						position++
					}
				l314:
					goto l195
				l307:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l316
					}
					position++
					{
						position317, tokenIndex317 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l318
						}
						position++
						goto l317
					l318:
						position, tokenIndex = position317, tokenIndex317
						if buffer[position] != rune('U') {
							goto l316
						}
						position++
					}
				l317:
					{
						position319, tokenIndex319 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l320
						}
						position++
						goto l319
					l320:
						position, tokenIndex = position319, tokenIndex319
						if buffer[position] != rune('L') {
							goto l316
						}
						position++
					}
				l319:
					{
						position321, tokenIndex321 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l322
						}
						position++
						goto l321
					l322:
						position, tokenIndex = position321, tokenIndex321
						if buffer[position] != rune('E') {
							goto l316
						}
						position++
					}
				l321:
					{
						position323, tokenIndex323 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l324
						}
						position++
						goto l323
					l324:
						position, tokenIndex = position323, tokenIndex323
						if buffer[position] != rune('B') {
							goto l316
						}
						position++
					}
				l323:
					if buffer[position] != rune('1') {
						goto l316
					}
					position++
					if buffer[position] != rune('2') {
						goto l316
					}
					position++
					if buffer[position] != rune('8') {
						goto l316
					}
					position++
					goto l195
				l316:
					position, tokenIndex = position195, tokenIndex195
					if buffer[position] != rune('.') {
						goto l193
					}
					position++
					{
						position325, tokenIndex325 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l326
						}
						position++
						goto l325
					l326:
						position, tokenIndex = position325, tokenIndex325
						if buffer[position] != rune('S') {
							goto l193
						}
						position++
					}
				l325:
					{
						position327, tokenIndex327 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l328
						}
						position++
						goto l327
					l328:
						position, tokenIndex = position327, tokenIndex327
						if buffer[position] != rune('L') {
							goto l193
						}
						position++
					}
				l327:
					{
						position329, tokenIndex329 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l330
						}
						position++
						goto l329
					l330:
						position, tokenIndex = position329, tokenIndex329
						if buffer[position] != rune('E') {
							goto l193
						}
						position++
					}
				l329:
					{
						position331, tokenIndex331 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l332
						}
						position++
						goto l331
					l332:
						position, tokenIndex = position331, tokenIndex331
						if buffer[position] != rune('B') {
							goto l193
						}
						position++
					}
				l331:
					if buffer[position] != rune('1') {
						goto l193
					}
					position++
					if buffer[position] != rune('2') {
						goto l193
					}
					position++
					if buffer[position] != rune('8') {
						goto l193
					}
					position++
				}
			l195:
				add(ruleLabelContainingDirectiveName, position194)
			}
			return true
		l193:
			position, tokenIndex = position193, tokenIndex193
			return false
		},
		/* 16 PrefAlignDirective <- <('.' ('p' / 'P') ('r' / 'R') ('e' / 'E') ('f' / 'F') ('a' / 'A') ('l' / 'L') ('i' / 'I') ('g' / 'G') ('n' / 'N') WS Arg (WS? ',' WS? SymbolArg WS? ',' WS? Arg)?)> */
		func() bool {
			position333, tokenIndex333 := position, tokenIndex
			{
				position334 := position
				if buffer[position] != rune('.') {
					goto l333
				}
				position++
				{
					position335, tokenIndex335 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l336
					}
					position++
					goto l335
				l336:
					position, tokenIndex = position335, tokenIndex335
					if buffer[position] != rune('P') {
						goto l333
					}
					position++
				}
			l335:
				{
					position337, tokenIndex337 := position, tokenIndex
					if buffer[position] != rune('r') {
						goto l338
					}
					position++
					goto l337
				l338:
					position, tokenIndex = position337, tokenIndex337
					if buffer[position] != rune('R') {
						goto l333
					}
					position++
				}
			l337:
				{
					position339, tokenIndex339 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l340
					}
					position++
					goto l339
				l340:
					position, tokenIndex = position339, tokenIndex339
					if buffer[position] != rune('E') {
						goto l333
					}
					position++
				}
			l339:
				{
					position341, tokenIndex341 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l342
					}
					position++
					goto l341
				l342:
					position, tokenIndex = position341, tokenIndex341
					if buffer[position] != rune('F') {
						goto l333
					}
					position++
				}
			l341:
				{
					position343, tokenIndex343 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l344
					}
					position++
					goto l343
				l344:
					position, tokenIndex = position343, tokenIndex343
					if buffer[position] != rune('A') {
						goto l333
					}
					position++
				}
			l343:
				{
					position345, tokenIndex345 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l346
					}
					position++
					goto l345
				l346:
					position, tokenIndex = position345, tokenIndex345
					if buffer[position] != rune('L') {
						goto l333
					}
					position++
				}
			l345:
				{
					position347, tokenIndex347 := position, tokenIndex
					if buffer[position] != rune('i') {
						goto l348
					}
					position++
					goto l347
				l348:
					position, tokenIndex = position347, tokenIndex347
					if buffer[position] != rune('I') {
						goto l333
					}
					position++
				}
			l347:
				{
					position349, tokenIndex349 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l350
					}
					position++
					goto l349
				l350:
					position, tokenIndex = position349, tokenIndex349
					if buffer[position] != rune('G') {
						goto l333
					}
					position++
				}
			l349:
				{
					position351, tokenIndex351 := position, tokenIndex
					if buffer[position] != rune('n') {
						goto l352
					}
					position++
					goto l351
				l352:
					position, tokenIndex = position351, tokenIndex351
					if buffer[position] != rune('N') {
						goto l333
					}
					position++
				}
			l351:
				if !_rules[ruleWS]() {
					goto l333
				}
				if !_rules[ruleArg]() {
					goto l333
				}
				{
					position353, tokenIndex353 := position, tokenIndex
					{
						position355, tokenIndex355 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l355
						}
						goto l356
					l355:
						position, tokenIndex = position355, tokenIndex355
					}
				l356:
					if buffer[position] != rune(',') {
						goto l353
					}
					position++
					{
						position357, tokenIndex357 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l357
						}
						goto l358
					l357:
						position, tokenIndex = position357, tokenIndex357
					}
				l358:
					if !_rules[ruleSymbolArg]() {
						goto l353
					}
					{
						position359, tokenIndex359 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l359
						}
						goto l360
					l359:
						position, tokenIndex = position359, tokenIndex359
					}
				l360:
					if buffer[position] != rune(',') {
						goto l353
					}
					position++
					{
						position361, tokenIndex361 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l361
						}
						goto l362
					l361:
						position, tokenIndex = position361, tokenIndex361
					}
				l362:
					if !_rules[ruleArg]() {
						goto l353
					}
					goto l354
				l353:
					position, tokenIndex = position353, tokenIndex353
				}
			l354:
				add(rulePrefAlignDirective, position334)
			}
			return true
		l333:
			position, tokenIndex = position333, tokenIndex333
			return false
		},
		/* 17 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
		func() bool {
			position363, tokenIndex363 := position, tokenIndex
			{
				position364 := position
				if !_rules[ruleSymbolArg]() {
					goto l363
				}
			l365:
				{
					position366, tokenIndex366 := position, tokenIndex
					{
						position367, tokenIndex367 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l367
						}
						goto l368
					l367:
						position, tokenIndex = position367, tokenIndex367
					}
				l368:
					if buffer[position] != rune(',') {
						goto l366
					}
					position++
					{
						position369, tokenIndex369 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l369
						}
						goto l370
					l369:
						position, tokenIndex = position369, tokenIndex369
					}
				l370:
					if !_rules[ruleSymbolArg]() {
						goto l366
					}
					goto l365
				l366:
					position, tokenIndex = position366, tokenIndex366
				}
				add(ruleSymbolArgs, position364)
			}
			return true
		l363:
			position, tokenIndex = position363, tokenIndex363
			return false
		},
		/* 18 SymbolArg <- <SymbolExpr> */
		func() bool {
			position371, tokenIndex371 := position, tokenIndex
			{
				position372 := position
				if !_rules[ruleSymbolExpr]() {
					goto l371
				}
				add(ruleSymbolArg, position372)
			}
			return true
		l371:
			position, tokenIndex = position371, tokenIndex371
			return false
		},
		/* 19 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
		func() bool {
			position373, tokenIndex373 := position, tokenIndex
			{
				position374 := position
				if !_rules[ruleSymbolAtom]() {
					goto l373
				}
				{
					position375, tokenIndex375 := position, tokenIndex
					{
						position377, tokenIndex377 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l377
						}
						goto l378
					l377:
						position, tokenIndex = position377, tokenIndex377
					}
				l378:
					if !_rules[ruleSymbolOperator]() {
						goto l375
					}
					{
						position379, tokenIndex379 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l379
						}
						goto l380
					l379:
						position, tokenIndex = position379, tokenIndex379
					}
				l380:
					if !_rules[ruleSymbolExpr]() {
						goto l375
					}
					goto l376
				l375:
					position, tokenIndex = position375, tokenIndex375
				}
			l376:
				add(ruleSymbolExpr, position374)
			}
			return true
		l373:
			position, tokenIndex = position373, tokenIndex373
			return false
		},
		/* 20 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
		func() bool {
			position381, tokenIndex381 := position, tokenIndex
			{
				position382 := position
				{
					position383, tokenIndex383 := position, tokenIndex
					if !_rules[ruleLocalLabelRef]() {
						goto l384
					}
					goto l383
				l384:
					position, tokenIndex = position383, tokenIndex383
					if !_rules[ruleOffset]() {
						goto l385
					}
					goto l383
				l385:
					position, tokenIndex = position383, tokenIndex383
					if !_rules[ruleSymbolType]() {
						goto l386
					}
					goto l383
				l386:
					position, tokenIndex = position383, tokenIndex383
					if !_rules[ruleLocalSymbol]() {
						goto l387
					}
					{
						position388, tokenIndex388 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l388
						}
						goto l389
					l388:
						position, tokenIndex = position388, tokenIndex388
					}
				l389:
					goto l383
				l387:
					position, tokenIndex = position383, tokenIndex383
					if !_rules[ruleSymbolName]() {
						goto l390
					}
					if !_rules[ruleOffset]() {
						goto l390
					}
					goto l383
				l390:
					position, tokenIndex = position383, tokenIndex383
					if !_rules[ruleSymbolName]() {
						goto l391
					}
					{
						position392, tokenIndex392 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l392
						}
						goto l393
					l392:
						position, tokenIndex = position392, tokenIndex392
					}
				l393:
					goto l383
				l391:
					position, tokenIndex = position383, tokenIndex383
					if !_rules[ruleDot]() {
						goto l394
					}
					goto l383
				l394:
					position, tokenIndex = position383, tokenIndex383
					if !_rules[ruleOpenParen]() {
						goto l381
					}
					{
						position395, tokenIndex395 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l395
						}
						goto l396
					l395:
						position, tokenIndex = position395, tokenIndex395
					}
				l396:
					if !_rules[ruleSymbolExpr]() {
						goto l381
					}
					{
						position397, tokenIndex397 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l397
						}
						goto l398
					l397:
						position, tokenIndex = position397, tokenIndex397
					}
				l398:
					if !_rules[ruleCloseParen]() {
						goto l381
					}
				}
			l383:
				add(ruleSymbolAtom, position382)
			}
			return true
		l381:
			position, tokenIndex = position381, tokenIndex381
			return false
		},
		/* 21 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
		func() bool {
			position399, tokenIndex399 := position, tokenIndex
			{
				position400 := position
				{
					position401, tokenIndex401 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l402
					}
					position++
					goto l401
				l402:
					position, tokenIndex = position401, tokenIndex401
					if buffer[position] != rune('-') {
						goto l403
					}
					position++
					goto l401
				l403:
					position, tokenIndex = position401, tokenIndex401
					if buffer[position] != rune('|') {
						goto l404
					}
					position++
					goto l401
				l404:
					position, tokenIndex = position401, tokenIndex401
					if buffer[position] != rune('<') {
						goto l405
					}
					position++
					if buffer[position] != rune('<') {
						goto l405
					}
					position++
					goto l401
				l405:
					position, tokenIndex = position401, tokenIndex401
					if buffer[position] != rune('>') {
						goto l399
					}
					position++
					if buffer[position] != rune('>') {
						goto l399
					}
					position++
				}
			l401:
				add(ruleSymbolOperator, position400)
			}
			return true
		l399:
			position, tokenIndex = position399, tokenIndex399
			return false
		},
		/* 22 OpenParen <- <'('> */
		func() bool {
			position406, tokenIndex406 := position, tokenIndex
			{
				position407 := position
				if buffer[position] != rune('(') {
					goto l406
				}
				position++
				add(ruleOpenParen, position407)
			}
			return true
		l406:
			position, tokenIndex = position406, tokenIndex406
			return false
		},
		/* 23 CloseParen <- <')'> */
		func() bool {
			position408, tokenIndex408 := position, tokenIndex
			{
				position409 := position
				if buffer[position] != rune(')') {
					goto l408
				}
				position++
				add(ruleCloseParen, position409)
			}
			return true
		l408:
			position, tokenIndex = position408, tokenIndex408
			return false
		},
		/* 24 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position410, tokenIndex410 := position, tokenIndex
			{
				position411 := position
				{
					position412, tokenIndex412 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l413
					}
					position++
					goto l412
				l413:
					position, tokenIndex = position412, tokenIndex412
					if buffer[position] != rune('%') {
						goto l410
					}
					position++
				}
			l412:
				{
					position414, tokenIndex414 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l415
					}
					position++
					if buffer[position] != rune('u') {
						goto l415
					}
					position++
					if buffer[position] != rune('n') {
						goto l415
					}
					position++
					if buffer[position] != rune('c') {
						goto l415
					}
					position++
					if buffer[position] != rune('t') {
						goto l415
					}
					position++
					if buffer[position] != rune('i') {
						goto l415
					}
					position++
					if buffer[position] != rune('o') {
						goto l415
					}
					position++
					if buffer[position] != rune('n') {
						goto l415
					}
					position++
					goto l414
				l415:
					position, tokenIndex = position414, tokenIndex414
					if buffer[position] != rune('o') {
						goto l410
					}
					position++
					if buffer[position] != rune('b') {
						goto l410
					}
					position++
					if buffer[position] != rune('j') {
						goto l410
					}
					position++
					if buffer[position] != rune('e') {
						goto l410
					}
					position++
					if buffer[position] != rune('c') {
						goto l410
					}
					position++
					if buffer[position] != rune('t') {
						goto l410
					}
					position++
				}
			l414:
				add(ruleSymbolType, position411)
			}
			return true
		l410:
			position, tokenIndex = position410, tokenIndex410
			return false
		},
		/* 25 Dot <- <'.'> */
		func() bool {
			position416, tokenIndex416 := position, tokenIndex
			{
				position417 := position
				if buffer[position] != rune('.') {
					goto l416
				}
				position++
				add(ruleDot, position417)
			}
			return true
		l416:
			position, tokenIndex = position416, tokenIndex416
			return false
		},
		/* 26 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position418, tokenIndex418 := position, tokenIndex
			{
				position419 := position
				if buffer[position] != rune('[') {
					goto l418
				}
				position++
				if buffer[position] != rune('T') {
					goto l418
				}
				position++
				if buffer[position] != rune('C') {
					goto l418
				}
				position++
				if buffer[position] != rune(']') {
					goto l418
				}
				position++
				add(ruleTCMarker, position419)
			}
			return true
		l418:
			position, tokenIndex = position418, tokenIndex418
			return false
		},
		/* 27 EscapedChar <- <('\\' .)> */
		func() bool {
			position420, tokenIndex420 := position, tokenIndex
			{
				position421 := position
				if buffer[position] != rune('\\') {
					goto l420
				}
				position++
				if !matchDot() {
					goto l420
				}
				add(ruleEscapedChar, position421)
			}
			return true
		l420:
			position, tokenIndex = position420, tokenIndex420
			return false
		},
		/* 28 WS <- <(' ' / '\t')+> */
		func() bool {
			position422, tokenIndex422 := position, tokenIndex
			{
				position423 := position
				{
					position426, tokenIndex426 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l427
					}
					position++
					goto l426
				l427:
					position, tokenIndex = position426, tokenIndex426
					if buffer[position] != rune('\t') {
						goto l422
					}
					position++
				}
			l426:
			l424:
				{
					position425, tokenIndex425 := position, tokenIndex
					{
						position428, tokenIndex428 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l429
						}
						position++
						goto l428
					l429:
						position, tokenIndex = position428, tokenIndex428
						if buffer[position] != rune('\t') {
							goto l425
						}
						position++
					}
				l428:
					goto l424
				l425:
					position, tokenIndex = position425, tokenIndex425
				}
				add(ruleWS, position423)
			}
			return true
		l422:
			position, tokenIndex = position422, tokenIndex422
			return false
		},
		/* 29 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position430, tokenIndex430 := position, tokenIndex
			{
				position431 := position
				{
					position432, tokenIndex432 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l433
					}
					position++
					if buffer[position] != rune('/') {
						goto l433
					}
					position++
					goto l432
				l433:
					position, tokenIndex = position432, tokenIndex432
					if buffer[position] != rune('#') {
						goto l430
					}
					position++
				}
			l432:
			l434:
				{
					position435, tokenIndex435 := position, tokenIndex
					{
						position436, tokenIndex436 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l436
						}
						position++
						goto l435
					l436:
						position, tokenIndex = position436, tokenIndex436
					}
					if !matchDot() {
						goto l435
					}
					goto l434
				l435:
					position, tokenIndex = position435, tokenIndex435
				}
				add(ruleComment, position431)
			}
			return true
		l430:
			position, tokenIndex = position430, tokenIndex430
			return false
		},
		/* 30 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position437, tokenIndex437 := position, tokenIndex
			{
				position438 := position
				{
					position439, tokenIndex439 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l440
					}
					goto l439
				l440:
					position, tokenIndex = position439, tokenIndex439
					if !_rules[ruleLocalLabel]() {
						goto l441
					}
					goto l439
				l441:
					position, tokenIndex = position439, tokenIndex439
					if !_rules[ruleSymbolName]() {
						goto l437
					}
				}
			l439:
				if buffer[position] != rune(':') {
					goto l437
				}
				position++
				add(ruleLabel, position438)
			}
			return true
		l437:
			position, tokenIndex = position437, tokenIndex437
			return false
		},
		/* 31 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position442, tokenIndex442 := position, tokenIndex
			{
				position443 := position
				{
					position444, tokenIndex444 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l445
					}
					position++
					goto l444
				l445:
					position, tokenIndex = position444, tokenIndex444
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l446
					}
					position++
					goto l444
				l446:
					position, tokenIndex = position444, tokenIndex444
					if buffer[position] != rune('.') {
						goto l447
					}
					position++
					goto l444
				l447:
					position, tokenIndex = position444, tokenIndex444
					if buffer[position] != rune('_') {
						goto l442
					}
					position++
				}
			l444:
			l448:
				{
					position449, tokenIndex449 := position, tokenIndex
					{
						position450, tokenIndex450 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l451
						}
						position++
						goto l450
					l451:
						position, tokenIndex = position450, tokenIndex450
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l452
						}
						position++
						goto l450
					l452:
						position, tokenIndex = position450, tokenIndex450
						if buffer[position] != rune('.') {
							goto l453
						}
						position++
						goto l450
					l453:
						position, tokenIndex = position450, tokenIndex450
						{
							position455, tokenIndex455 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l456
							}
							position++
							goto l455
						l456:
							position, tokenIndex = position455, tokenIndex455
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l454
							}
							position++
						}
					l455:
						goto l450
					l454:
						position, tokenIndex = position450, tokenIndex450
						if buffer[position] != rune('$') {
							goto l457
						}
						position++
						goto l450
					l457:
						position, tokenIndex = position450, tokenIndex450
						if buffer[position] != rune('_') {
							goto l449
						}
						position++
					}
				l450:
					goto l448
				l449:
					position, tokenIndex = position449, tokenIndex449
				}
				add(ruleSymbolName, position443)
			}
			return true
		l442:
			position, tokenIndex = position442, tokenIndex442
			return false
		},
		/* 32 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position458, tokenIndex458 := position, tokenIndex
			{
				position459 := position
				if buffer[position] != rune('.') {
					goto l458
				}
				position++
				if buffer[position] != rune('L') {
					goto l458
				}
				position++
				{
					position462, tokenIndex462 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l463
					}
					position++
					goto l462
				l463:
					position, tokenIndex = position462, tokenIndex462
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l464
					}
					position++
					goto l462
				l464:
					position, tokenIndex = position462, tokenIndex462
					{
						position466, tokenIndex466 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l467
						}
						position++
						goto l466
					l467:
						position, tokenIndex = position466, tokenIndex466
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l465
						}
						position++
					}
				l466:
					goto l462
				l465:
					position, tokenIndex = position462, tokenIndex462
					if buffer[position] != rune('.') {
						goto l468
					}
					position++
					goto l462
				l468:
					position, tokenIndex = position462, tokenIndex462
					{
						position470, tokenIndex470 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l471
						}
						position++
						goto l470
					l471:
						position, tokenIndex = position470, tokenIndex470
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l469
						}
						position++
					}
				l470:
					goto l462
				l469:
					position, tokenIndex = position462, tokenIndex462
					if buffer[position] != rune('$') {
						goto l472
					}
					position++
					goto l462
				l472:
					position, tokenIndex = position462, tokenIndex462
					if buffer[position] != rune('_') {
						goto l458
					}
					position++
				}
			l462:
			l460:
				{
					position461, tokenIndex461 := position, tokenIndex
					{
						position473, tokenIndex473 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l474
						}
						position++
						goto l473
					l474:
						position, tokenIndex = position473, tokenIndex473
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l475
						}
						position++
						goto l473
					l475:
						position, tokenIndex = position473, tokenIndex473
						{
							position477, tokenIndex477 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l478
							}
							position++
							goto l477
						l478:
							position, tokenIndex = position477, tokenIndex477
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l476
							}
							position++
						}
					l477:
						goto l473
					l476:
						position, tokenIndex = position473, tokenIndex473
						if buffer[position] != rune('.') {
							goto l479
						}
						position++
						goto l473
					l479:
						position, tokenIndex = position473, tokenIndex473
						{
							position481, tokenIndex481 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l482
							}
							position++
							goto l481
						l482:
							position, tokenIndex = position481, tokenIndex481
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l480
							}
							position++
						}
					l481:
						goto l473
					l480:
						position, tokenIndex = position473, tokenIndex473
						if buffer[position] != rune('$') {
							goto l483
						}
						position++
						goto l473
					l483:
						position, tokenIndex = position473, tokenIndex473
						if buffer[position] != rune('_') {
							goto l461
						}
						position++
					}
				l473:
					goto l460
				l461:
					position, tokenIndex = position461, tokenIndex461
				}
				add(ruleLocalSymbol, position459)
			}
			return true
		l458:
			position, tokenIndex = position458, tokenIndex458
			return false
		},
		/* 33 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position484, tokenIndex484 := position, tokenIndex
			{
				position485 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l484
				}
				position++
			l486:
				{
					position487, tokenIndex487 := position, tokenIndex
					{
						position488, tokenIndex488 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l489
						}
						position++
						goto l488
					l489:
						position, tokenIndex = position488, tokenIndex488
						if buffer[position] != rune('$') {
							goto l487
						}
						position++
					}
				l488:
					goto l486
				l487:
					position, tokenIndex = position487, tokenIndex487
				}
				add(ruleLocalLabel, position485)
			}
			return true
		l484:
			position, tokenIndex = position484, tokenIndex484
			return false
		},
		/* 34 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position490, tokenIndex490 := position, tokenIndex
			{
				position491 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l490
				}
				position++
			l492:
				{
					position493, tokenIndex493 := position, tokenIndex
					{
						position494, tokenIndex494 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l495
						}
						position++
						goto l494
					l495:
						position, tokenIndex = position494, tokenIndex494
						if buffer[position] != rune('$') {
							goto l493
						}
						position++
					}
				l494:
					goto l492
				l493:
					position, tokenIndex = position493, tokenIndex493
				}
				{
					position496, tokenIndex496 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l497
					}
					position++
					goto l496
				l497:
					position, tokenIndex = position496, tokenIndex496
					if buffer[position] != rune('f') {
						goto l490
					}
					position++
				}
			l496:
				add(ruleLocalLabelRef, position491)
			}
			return true
		l490:
			position, tokenIndex = position490, tokenIndex490
			return false
		},
		/* 35 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
		func() bool {
			position498, tokenIndex498 := position, tokenIndex
			{
				position499 := position
				{
					position500, tokenIndex500 := position, tokenIndex
					if buffer[position] != rune('n') {
						goto l501
					}
					position++
					goto l500
				l501:
					position, tokenIndex = position500, tokenIndex500
					if buffer[position] != rune('N') {
						goto l498
					}
					position++
				}
			l500:
				{
					position502, tokenIndex502 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l503
					}
					position++
					goto l502
				l503:
					position, tokenIndex = position502, tokenIndex502
					if buffer[position] != rune('O') {
						goto l498
					}
					position++
				}
			l502:
				{
					position504, tokenIndex504 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l505
					}
					position++
					goto l504
				l505:
					position, tokenIndex = position504, tokenIndex504
					if buffer[position] != rune('T') {
						goto l498
					}
					position++
				}
			l504:
				{
					position506, tokenIndex506 := position, tokenIndex
					if buffer[position] != rune('r') {
						goto l507
					}
					position++
					goto l506
				l507:
					position, tokenIndex = position506, tokenIndex506
					if buffer[position] != rune('R') {
						goto l498
					}
					position++
				}
			l506:
				{
					position508, tokenIndex508 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l509
					}
					position++
					goto l508
				l509:
					position, tokenIndex = position508, tokenIndex508
					if buffer[position] != rune('A') {
						goto l498
					}
					position++
				}
			l508:
				{
					position510, tokenIndex510 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l511
					}
					position++
					goto l510
				l511:
					position, tokenIndex = position510, tokenIndex510
					if buffer[position] != rune('C') {
						goto l498
					}
					position++
				}
			l510:
				{
					position512, tokenIndex512 := position, tokenIndex
					if buffer[position] != rune('k') {
						goto l513
					}
					position++
					goto l512
				l513:
					position, tokenIndex = position512, tokenIndex512
					if buffer[position] != rune('K') {
						goto l498
					}
					position++
				}
			l512:
				add(ruleInstructionPrefix, position499)
			}
			return true
		l498:
			position, tokenIndex = position498, tokenIndex498
			return false
		},
		/* 36 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
		func() bool {
			position514, tokenIndex514 := position, tokenIndex
			{
				position515 := position
				{
					position516, tokenIndex516 := position, tokenIndex
					if !_rules[ruleInstructionPrefix]() {
						goto l516
					}
					if !_rules[ruleWS]() {
						goto l516
					}
					goto l517
				l516:
					position, tokenIndex = position516, tokenIndex516
				}
			l517:
				if !_rules[ruleInstructionName]() {
					goto l514
				}
				{
					position518, tokenIndex518 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l518
					}
					if !_rules[ruleInstructionArg]() {
						goto l518
					}
				l520:
					{
						position521, tokenIndex521 := position, tokenIndex
						{
							position522, tokenIndex522 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l522
							}
							goto l523
						l522:
							position, tokenIndex = position522, tokenIndex522
						}
					l523:
						if buffer[position] != rune(',') {
							goto l521
						}
						position++
						{
							position524, tokenIndex524 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l524
							}
							goto l525
						l524:
							position, tokenIndex = position524, tokenIndex524
						}
					l525:
						if !_rules[ruleInstructionArg]() {
							goto l521
						}
						goto l520
					l521:
						position, tokenIndex = position521, tokenIndex521
					}
					goto l519
				l518:
					position, tokenIndex = position518, tokenIndex518
				}
			l519:
				add(ruleInstruction, position515)
			}
			return true
		l514:
			position, tokenIndex = position514, tokenIndex514
			return false
		},
		/* 37 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position526, tokenIndex526 := position, tokenIndex
			{
				position527 := position
				{
					position528, tokenIndex528 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l529
					}
					position++
					goto l528
				l529:
					position, tokenIndex = position528, tokenIndex528
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l526
					}
					position++
				}
			l528:
			l530:
				{
					position531, tokenIndex531 := position, tokenIndex
					{
						position532, tokenIndex532 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l533
						}
						position++
						goto l532
					l533:
						position, tokenIndex = position532, tokenIndex532
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l534
						}
						position++
						goto l532
					l534:
						position, tokenIndex = position532, tokenIndex532
						if buffer[position] != rune('.') {
							goto l535
						}
						position++
						goto l532
					l535:
						position, tokenIndex = position532, tokenIndex532
						{
							position536, tokenIndex536 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l537
							}
							position++
							goto l536
						l537:
							position, tokenIndex = position536, tokenIndex536
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l531
							}
							position++
						}
					l536:
					}
				l532:
					goto l530
				l531:
					position, tokenIndex = position531, tokenIndex531
				}
				{
					position538, tokenIndex538 := position, tokenIndex
					{
						position540, tokenIndex540 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l541
						}
						position++
						goto l540
					l541:
						position, tokenIndex = position540, tokenIndex540
						if buffer[position] != rune('+') {
							goto l542
						}
						position++
						goto l540
					l542:
						position, tokenIndex = position540, tokenIndex540
						if buffer[position] != rune('-') {
							goto l538
						}
						position++
					}
				l540:
					goto l539
				l538:
					position, tokenIndex = position538, tokenIndex538
				}
			l539:
				add(ruleInstructionName, position527)
			}
			return true
		l526:
			position, tokenIndex = position526, tokenIndex526
			return false
		},
		/* 38 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
		func() bool {
			position543, tokenIndex543 := position, tokenIndex
			{
				position544 := position
				{
					position545, tokenIndex545 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l545
					}
					goto l546
				l545:
					position, tokenIndex = position545, tokenIndex545
				}
			l546:
				{
					position547, tokenIndex547 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l548
					}
					goto l547
				l548:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleRegisterOrConstant]() {
						goto l549
					}
					goto l547
				l549:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleLocalLabelRef]() {
						goto l550
					}
					goto l547
				l550:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleTOCRefHigh]() {
						goto l551
					}
					goto l547
				l551:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleTOCRefLow]() {
						goto l552
					}
					goto l547
				l552:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleGOTLocation]() {
						goto l553
					}
					goto l547
				l553:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleGOTAddress]() {
						goto l554
					}
					goto l547
				l554:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleGOTSymbolOffset]() {
						goto l555
					}
					goto l547
				l555:
					position, tokenIndex = position547, tokenIndex547
					if !_rules[ruleMemoryRef]() {
						goto l543
					}
				}
			l547:
			l556:
				{
					position557, tokenIndex557 := position, tokenIndex
					if !_rules[ruleAVX512Token]() {
						goto l557
					}
					goto l556
				l557:
					position, tokenIndex = position557, tokenIndex557
				}
				add(ruleInstructionArg, position544)
			}
			return true
		l543:
			position, tokenIndex = position543, tokenIndex543
			return false
		},
		/* 39 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position558, tokenIndex558 := position, tokenIndex
			{
				position559 := position
				if buffer[position] != rune('$') {
					goto l558
				}
				position++
				if buffer[position] != rune('_') {
					goto l558
				}
				position++
				if buffer[position] != rune('G') {
					goto l558
				}
				position++
				if buffer[position] != rune('L') {
					goto l558
				}
				position++
				if buffer[position] != rune('O') {
					goto l558
				}
				position++
				if buffer[position] != rune('B') {
					goto l558
				}
				position++
				if buffer[position] != rune('A') {
					goto l558
				}
				position++
				if buffer[position] != rune('L') {
					goto l558
				}
				position++
				if buffer[position] != rune('_') {
					goto l558
				}
				position++
				if buffer[position] != rune('O') {
					goto l558
				}
				position++
				if buffer[position] != rune('F') {
					goto l558
				}
				position++
				if buffer[position] != rune('F') {
					goto l558
				}
				position++
				if buffer[position] != rune('S') {
					goto l558
				}
				position++
				if buffer[position] != rune('E') {
					goto l558
				}
				position++
				if buffer[position] != rune('T') {
					goto l558
				}
				position++
				if buffer[position] != rune('_') {
					goto l558
				}
				position++
				if buffer[position] != rune('T') {
					goto l558
				}
				position++
				if buffer[position] != rune('A') {
					goto l558
				}
				position++
				if buffer[position] != rune('B') {
					goto l558
				}
				position++
				if buffer[position] != rune('L') {
					goto l558
				}
				position++
				if buffer[position] != rune('E') {
					goto l558
				}
				position++
				if buffer[position] != rune('_') {
					goto l558
				}
				position++
				if buffer[position] != rune('-') {
					goto l558
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l558
				}
				add(ruleGOTLocation, position559)
			}
			return true
		l558:
			position, tokenIndex = position558, tokenIndex558
			return false
		},
		/* 40 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
		func() bool {
			position560, tokenIndex560 := position, tokenIndex
			{
				position561 := position
				if buffer[position] != rune('_') {
					goto l560
				}
				position++
				if buffer[position] != rune('G') {
					goto l560
				}
				position++
				if buffer[position] != rune('L') {
					goto l560
				}
				position++
				if buffer[position] != rune('O') {
					goto l560
				}
				position++
				if buffer[position] != rune('B') {
					goto l560
				}
				position++
				if buffer[position] != rune('A') {
					goto l560
				}
				position++
				if buffer[position] != rune('L') {
					goto l560
				}
				position++
				if buffer[position] != rune('_') {
					goto l560
				}
				position++
				if buffer[position] != rune('O') {
					goto l560
				}
				position++
				if buffer[position] != rune('F') {
					goto l560
				}
				position++
				if buffer[position] != rune('F') {
					goto l560
				}
				position++
				if buffer[position] != rune('S') {
					goto l560
				}
				position++
				if buffer[position] != rune('E') {
					goto l560
				}
				position++
				if buffer[position] != rune('T') {
					goto l560
				}
				position++
				if buffer[position] != rune('_') {
					goto l560
				}
				position++
				if buffer[position] != rune('T') {
					goto l560
				}
				position++
				if buffer[position] != rune('A') {
					goto l560
				}
				position++
				if buffer[position] != rune('B') {
					goto l560
				}
				position++
				if buffer[position] != rune('L') {
					goto l560
				}
				position++
				if buffer[position] != rune('E') {
					goto l560
				}
				position++
				if buffer[position] != rune('_') {
					goto l560
				}
				position++
				if buffer[position] != rune('(') {
					goto l560
				}
				position++
				if buffer[position] != rune('%') {
					goto l560
				}
				position++
				if buffer[position] != rune('r') {
					goto l560
				}
				position++
				if buffer[position] != rune('i') {
					goto l560
				}
				position++
				if buffer[position] != rune('p') {
					goto l560
				}
				position++
				if buffer[position] != rune(')') {
					goto l560
				}
				position++
				add(ruleGOTAddress, position561)
			}
			return true
		l560:
			position, tokenIndex = position560, tokenIndex560
			return false
		},
		/* 41 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position562, tokenIndex562 := position, tokenIndex
			{
				position563 := position
				{
					position564, tokenIndex564 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l565
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l565
					}
					if buffer[position] != rune('@') {
						goto l565
					}
					position++
					if buffer[position] != rune('G') {
						goto l565
					}
					position++
					if buffer[position] != rune('O') {
						goto l565
					}
					position++
					if buffer[position] != rune('T') {
						goto l565
					}
					position++
					{
						position566, tokenIndex566 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l566
						}
						position++
						if buffer[position] != rune('F') {
							goto l566
						}
						position++
						if buffer[position] != rune('F') {
							goto l566
						}
						position++
						goto l567
					l566:
						position, tokenIndex = position566, tokenIndex566
					}
				l567:
					goto l564
				l565:
					position, tokenIndex = position564, tokenIndex564
					if buffer[position] != rune(':') {
						goto l562
					}
					position++
					{
						position568, tokenIndex568 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l569
						}
						position++
						goto l568
					l569:
						position, tokenIndex = position568, tokenIndex568
						if buffer[position] != rune('G') {
							goto l562
						}
						position++
					}
				l568:
					{
						position570, tokenIndex570 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l571
						}
						position++
						goto l570
					l571:
						position, tokenIndex = position570, tokenIndex570
						if buffer[position] != rune('O') {
							goto l562
						}
						position++
					}
				l570:
					{
						position572, tokenIndex572 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l573
						}
						position++
						goto l572
					l573:
						position, tokenIndex = position572, tokenIndex572
						if buffer[position] != rune('T') {
							goto l562
						}
						position++
					}
				l572:
					if buffer[position] != rune(':') {
						goto l562
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l562
					}
				}
			l564:
				add(ruleGOTSymbolOffset, position563)
			}
			return true
		l562:
			position, tokenIndex = position562, tokenIndex562
			return false
		},
		/* 42 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position574, tokenIndex574 := position, tokenIndex
			{
				position575 := position
				{
					position576, tokenIndex576 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l576
					}
					goto l577
				l576:
					position, tokenIndex = position576, tokenIndex576
				}
			l577:
				if buffer[position] != rune('{') {
					goto l574
				}
				position++
				{
					position578, tokenIndex578 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l578
					}
					position++
					goto l579
				l578:
					position, tokenIndex = position578, tokenIndex578
				}
			l579:
			l580:
				{
					position581, tokenIndex581 := position, tokenIndex
					{
						position582, tokenIndex582 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l583
						}
						position++
						goto l582
					l583:
						position, tokenIndex = position582, tokenIndex582
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l581
						}
						position++
					}
				l582:
					goto l580
				l581:
					position, tokenIndex = position581, tokenIndex581
				}
				if buffer[position] != rune('}') {
					goto l574
				}
				position++
				add(ruleAVX512Token, position575)
			}
			return true
		l574:
			position, tokenIndex = position574, tokenIndex574
			return false
		},
		/* 43 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position584, tokenIndex584 := position, tokenIndex
			{
				position585 := position
				if buffer[position] != rune('.') {
					goto l584
				}
				position++
				if buffer[position] != rune('T') {
					goto l584
				}
				position++
				if buffer[position] != rune('O') {
					goto l584
				}
				position++
				if buffer[position] != rune('C') {
					goto l584
				}
				position++
				if buffer[position] != rune('.') {
					goto l584
				}
				position++
				if buffer[position] != rune('-') {
					goto l584
				}
				position++
				{
					position586, tokenIndex586 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l587
					}
					position++
					if buffer[position] != rune('b') {
						goto l587
					}
					position++
					goto l586
				l587:
					position, tokenIndex = position586, tokenIndex586
					if buffer[position] != rune('.') {
						goto l584
					}
					position++
					if buffer[position] != rune('L') {
						goto l584
					}
					position++
					{
						position590, tokenIndex590 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l591
						}
						position++
						goto l590
					l591:
						position, tokenIndex = position590, tokenIndex590
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l592
						}
						position++
						goto l590
					l592:
						position, tokenIndex = position590, tokenIndex590
						if buffer[position] != rune('_') {
							goto l593
						}
						position++
						goto l590
					l593:
						position, tokenIndex = position590, tokenIndex590
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l584
						}
						position++
					}
				l590:
				l588:
					{
						position589, tokenIndex589 := position, tokenIndex
						{
							position594, tokenIndex594 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l595
							}
							position++
							goto l594
						l595:
							position, tokenIndex = position594, tokenIndex594
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l596
							}
							position++
							goto l594
						l596:
							position, tokenIndex = position594, tokenIndex594
							if buffer[position] != rune('_') {
								goto l597
							}
							position++
							goto l594
						l597:
							position, tokenIndex = position594, tokenIndex594
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l589
							}
							position++
						}
					l594:
						goto l588
					l589:
						position, tokenIndex = position589, tokenIndex589
					}
				}
			l586:
				if buffer[position] != rune('@') {
					goto l584
				}
				position++
				{
					position598, tokenIndex598 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l599
					}
					position++
					goto l598
				l599:
					position, tokenIndex = position598, tokenIndex598
					if buffer[position] != rune('H') {
						goto l584
					}
					position++
				}
			l598:
				{
					position600, tokenIndex600 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l601
					}
					position++
					goto l600
				l601:
					position, tokenIndex = position600, tokenIndex600
					if buffer[position] != rune('A') {
						goto l584
					}
					position++
				}
			l600:
				add(ruleTOCRefHigh, position585)
			}
			return true
		l584:
			position, tokenIndex = position584, tokenIndex584
			return false
		},
		/* 44 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position602, tokenIndex602 := position, tokenIndex
			{
				position603 := position
				if buffer[position] != rune('.') {
					goto l602
				}
				position++
				if buffer[position] != rune('T') {
					goto l602
				}
				position++
				if buffer[position] != rune('O') {
					goto l602
				}
				position++
				if buffer[position] != rune('C') {
					goto l602
				}
				position++
				if buffer[position] != rune('.') {
					goto l602
				}
				position++
				if buffer[position] != rune('-') {
					goto l602
				}
				position++
				{
					position604, tokenIndex604 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l605
					}
					position++
					if buffer[position] != rune('b') {
						goto l605
					}
					position++
					goto l604
				l605:
					position, tokenIndex = position604, tokenIndex604
					if buffer[position] != rune('.') {
						goto l602
					}
					position++
					if buffer[position] != rune('L') {
						goto l602
					}
					position++
					{
						position608, tokenIndex608 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l609
						}
						position++
						goto l608
					l609:
						position, tokenIndex = position608, tokenIndex608
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l610
						}
						position++
						goto l608
					l610:
						position, tokenIndex = position608, tokenIndex608
						if buffer[position] != rune('_') {
							goto l611
						}
						position++
						goto l608
					l611:
						position, tokenIndex = position608, tokenIndex608
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l602
						}
						position++
					}
				l608:
				l606:
					{
						position607, tokenIndex607 := position, tokenIndex
						{
							position612, tokenIndex612 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l613
							}
							position++
							goto l612
						l613:
							position, tokenIndex = position612, tokenIndex612
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l614
							}
							position++
							goto l612
						l614:
							position, tokenIndex = position612, tokenIndex612
							if buffer[position] != rune('_') {
								goto l615
							}
							position++
							goto l612
						l615:
							position, tokenIndex = position612, tokenIndex612
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l607
							}
							position++
						}
					l612:
						goto l606
					l607:
						position, tokenIndex = position607, tokenIndex607
					}
				}
			l604:
				if buffer[position] != rune('@') {
					goto l602
				}
				position++
				{
					position616, tokenIndex616 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l617
					}
					position++
					goto l616
				l617:
					position, tokenIndex = position616, tokenIndex616
					if buffer[position] != rune('L') {
						goto l602
					}
					position++
				}
			l616:
				add(ruleTOCRefLow, position603)
			}
			return true
		l602:
			position, tokenIndex = position602, tokenIndex602
			return false
		},
		/* 45 IndirectionIndicator <- <'*'> */
		func() bool {
			position618, tokenIndex618 := position, tokenIndex
			{
				position619 := position
				if buffer[position] != rune('*') {
					goto l618
				}
				position++
				add(ruleIndirectionIndicator, position619)
			}
			return true
		l618:
			position, tokenIndex = position618, tokenIndex618
			return false
		},
		/* 46 Float <- <([0-9]+ '.' [0-9]*)> */
		func() bool {
			position620, tokenIndex620 := position, tokenIndex
			{
				position621 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l620
				}
				position++
			l622:
				{
					position623, tokenIndex623 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l623
					}
					position++
					goto l622
				l623:
					position, tokenIndex = position623, tokenIndex623
				}
				if buffer[position] != rune('.') {
					goto l620
				}
				position++
			l624:
				{
					position625, tokenIndex625 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l625
					}
					position++
					goto l624
				l625:
					position, tokenIndex = position625, tokenIndex625
				}
				add(ruleFloat, position621)
			}
			return true
		l620:
			position, tokenIndex = position620, tokenIndex620
			return false
		},
		/* 47 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
		func() bool {
			position626, tokenIndex626 := position, tokenIndex
			{
				position627 := position
				{
					position628, tokenIndex628 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l629
					}
					position++
					{
						position630, tokenIndex630 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l631
						}
						position++
						goto l630
					l631:
						position, tokenIndex = position630, tokenIndex630
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l629
						}
						position++
					}
				l630:
				l632:
					{
						position633, tokenIndex633 := position, tokenIndex
						{
							position634, tokenIndex634 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l635
							}
							position++
							goto l634
						l635:
							position, tokenIndex = position634, tokenIndex634
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l636
							}
							position++
							goto l634
						l636:
							position, tokenIndex = position634, tokenIndex634
							{
								position637, tokenIndex637 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l638
								}
								position++
								goto l637
							l638:
								position, tokenIndex = position637, tokenIndex637
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l633
								}
								position++
							}
						l637:
						}
					l634:
						goto l632
					l633:
						position, tokenIndex = position633, tokenIndex633
					}
					goto l628
				l629:
					position, tokenIndex = position628, tokenIndex628
					{
						position640, tokenIndex640 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l640
						}
						position++
						goto l641
					l640:
						position, tokenIndex = position640, tokenIndex640
					}
				l641:
					{
						position642, tokenIndex642 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l643
						}
						if !_rules[ruleOffset]() {
							goto l643
						}
						goto l642
					l643:
						position, tokenIndex = position642, tokenIndex642
						if !_rules[ruleOffset]() {
							goto l639
						}
					}
				l642:
					goto l628
				l639:
					position, tokenIndex = position628, tokenIndex628
					if buffer[position] != rune('#') {
						goto l644
					}
					position++
					if !_rules[ruleFloat]() {
						goto l644
					}
					goto l628
				l644:
					position, tokenIndex = position628, tokenIndex628
					if buffer[position] != rune('#') {
						goto l645
					}
					position++
					if !_rules[ruleOffset]() {
						goto l645
					}
					{
						position646, tokenIndex646 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l646
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l646
						}
						position++
					l648:
						{
							position649, tokenIndex649 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l649
							}
							position++
							goto l648
						l649:
							position, tokenIndex = position649, tokenIndex649
						}
						{
							position650, tokenIndex650 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l650
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l650
							}
							position++
						l652:
							{
								position653, tokenIndex653 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l653
								}
								position++
								goto l652
							l653:
								position, tokenIndex = position653, tokenIndex653
							}
							goto l651
						l650:
							position, tokenIndex = position650, tokenIndex650
						}
					l651:
						goto l647
					l646:
						position, tokenIndex = position646, tokenIndex646
					}
				l647:
					goto l628
				l645:
					position, tokenIndex = position628, tokenIndex628
					if buffer[position] != rune('#') {
						goto l654
					}
					position++
					{
						position655, tokenIndex655 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l655
						}
						position++
						goto l656
					l655:
						position, tokenIndex = position655, tokenIndex655
					}
				l656:
					if buffer[position] != rune('(') {
						goto l654
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l654
					}
					position++
					{
						position657, tokenIndex657 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l657
						}
						goto l658
					l657:
						position, tokenIndex = position657, tokenIndex657
					}
				l658:
					if buffer[position] != rune('<') {
						goto l654
					}
					position++
					if buffer[position] != rune('<') {
						goto l654
					}
					position++
					{
						position659, tokenIndex659 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l659
						}
						goto l660
					l659:
						position, tokenIndex = position659, tokenIndex659
					}
				l660:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l654
					}
					position++
					if buffer[position] != rune(')') {
						goto l654
					}
					position++
					goto l628
				l654:
					position, tokenIndex = position628, tokenIndex628
					if !_rules[ruleARMRegister]() {
						goto l626
					}
				}
			l628:
				{
					position661, tokenIndex661 := position, tokenIndex
					{
						position662, tokenIndex662 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l663
						}
						position++
						goto l662
					l663:
						position, tokenIndex = position662, tokenIndex662
						if buffer[position] != rune('b') {
							goto l664
						}
						position++
						goto l662
					l664:
						position, tokenIndex = position662, tokenIndex662
						if buffer[position] != rune(':') {
							goto l665
						}
						position++
						goto l662
					l665:
						position, tokenIndex = position662, tokenIndex662
						if buffer[position] != rune('(') {
							goto l666
						}
						position++
						goto l662
					l666:
						position, tokenIndex = position662, tokenIndex662
						if buffer[position] != rune('+') {
							goto l667
						}
						position++
						goto l662
					l667:
						position, tokenIndex = position662, tokenIndex662
						if buffer[position] != rune('-') {
							goto l661
						}
						position++
					}
				l662:
					goto l626
				l661:
					position, tokenIndex = position661, tokenIndex661
				}
				add(ruleRegisterOrConstant, position627)
			}
			return true
		l626:
			position, tokenIndex = position626, tokenIndex626
			return false
		},
		/* 48 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R')) / (('m' / 'M') ('s' / 'S') ('l' / 'L'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9] [0-9]?))> */
		func() bool {
			position668, tokenIndex668 := position, tokenIndex
			{
				position669 := position
				{
					position670, tokenIndex670 := position, tokenIndex
					{
						position672, tokenIndex672 := position, tokenIndex
						{
							position674, tokenIndex674 := position, tokenIndex
							if buffer[position] != rune('u') {
								goto l675
							}
							position++
							goto l674
						l675:
							position, tokenIndex = position674, tokenIndex674
							if buffer[position] != rune('s') {
								goto l673
							}
							position++
						}
					l674:
						{
							position676, tokenIndex676 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l677
							}
							position++
							goto l676
						l677:
							position, tokenIndex = position676, tokenIndex676
							if buffer[position] != rune('X') {
								goto l673
							}
							position++
						}
					l676:
						{
							position678, tokenIndex678 := position, tokenIndex
							if buffer[position] != rune('t') {
								goto l679
							}
							position++
							goto l678
						l679:
							position, tokenIndex = position678, tokenIndex678
							if buffer[position] != rune('T') {
								goto l673
							}
							position++
						}
					l678:
						{
							position680, tokenIndex680 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l681
							}
							position++
							goto l680
						l681:
							position, tokenIndex = position680, tokenIndex680
							if buffer[position] != rune('w') {
								goto l682
							}
							position++
							goto l680
						l682:
							position, tokenIndex = position680, tokenIndex680
							if buffer[position] != rune('h') {
								goto l683
							}
							position++
							goto l680
						l683:
							position, tokenIndex = position680, tokenIndex680
							if buffer[position] != rune('b') {
								goto l673
							}
							position++
						}
					l680:
						goto l672
					l673:
						position, tokenIndex = position672, tokenIndex672
						{
							position685, tokenIndex685 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l686
							}
							position++
							goto l685
						l686:
							position, tokenIndex = position685, tokenIndex685
							if buffer[position] != rune('L') {
								goto l684
							}
							position++
						}
					l685:
						{
							position687, tokenIndex687 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l688
							}
							position++
							goto l687
						l688:
							position, tokenIndex = position687, tokenIndex687
							if buffer[position] != rune('S') {
								goto l684
							}
							position++
						}
					l687:
						{
							position689, tokenIndex689 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l690
							}
							position++
							goto l689
						l690:
							position, tokenIndex = position689, tokenIndex689
							if buffer[position] != rune('L') {
								goto l684
							}
							position++
						}
					l689:
						goto l672
					l684:
						position, tokenIndex = position672, tokenIndex672
						{
							position692, tokenIndex692 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l693
							}
							position++
							goto l692
						l693:
							position, tokenIndex = position692, tokenIndex692
							if buffer[position] != rune('L') {
								goto l691
							}
							position++
						}
					l692:
						{
							position694, tokenIndex694 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l695
							}
							position++
							goto l694
						l695:
							position, tokenIndex = position694, tokenIndex694
							if buffer[position] != rune('S') {
								goto l691
							}
							position++
						}
					l694:
						{
							position696, tokenIndex696 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l697
							}
							position++
							goto l696
						l697:
							position, tokenIndex = position696, tokenIndex696
							if buffer[position] != rune('R') {
								goto l691
							}
							position++
						}
					l696:
						goto l672
					l691:
						position, tokenIndex = position672, tokenIndex672
						{
							position699, tokenIndex699 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l700
							}
							position++
							goto l699
						l700:
							position, tokenIndex = position699, tokenIndex699
							if buffer[position] != rune('R') {
								goto l698
							}
							position++
						}
					l699:
						{
							position701, tokenIndex701 := position, tokenIndex
							if buffer[position] != rune('o') {
								goto l702
							}
							position++
							goto l701
						l702:
							position, tokenIndex = position701, tokenIndex701
							if buffer[position] != rune('O') {
								goto l698
							}
							position++
						}
					l701:
						{
							position703, tokenIndex703 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l704
							}
							position++
							goto l703
						l704:
							position, tokenIndex = position703, tokenIndex703
							if buffer[position] != rune('R') {
								goto l698
							}
							position++
						}
					l703:
						goto l672
					l698:
						position, tokenIndex = position672, tokenIndex672
						{
							position706, tokenIndex706 := position, tokenIndex
							if buffer[position] != rune('a') {
								goto l707
							}
							position++
							goto l706
						l707:
							position, tokenIndex = position706, tokenIndex706
							if buffer[position] != rune('A') {
								goto l705
							}
							position++
						}
					l706:
						{
							position708, tokenIndex708 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l709
							}
							position++
							goto l708
						l709:
							position, tokenIndex = position708, tokenIndex708
							if buffer[position] != rune('S') {
								goto l705
							}
							position++
						}
					l708:
						{
							position710, tokenIndex710 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l711
							}
							position++
							goto l710
						l711:
							position, tokenIndex = position710, tokenIndex710
							if buffer[position] != rune('R') {
								goto l705
							}
							position++
						}
					l710:
						goto l672
					l705:
						position, tokenIndex = position672, tokenIndex672
						{
							position712, tokenIndex712 := position, tokenIndex
							if buffer[position] != rune('m') {
								goto l713
							}
							position++
							goto l712
						l713:
							position, tokenIndex = position712, tokenIndex712
							if buffer[position] != rune('M') {
								goto l671
							}
							position++
						}
					l712:
						{
							position714, tokenIndex714 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l715
							}
							position++
							goto l714
						l715:
							position, tokenIndex = position714, tokenIndex714
							if buffer[position] != rune('S') {
								goto l671
							}
							position++
						}
					l714:
						{
							position716, tokenIndex716 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l717
							}
							position++
							goto l716
						l717:
							position, tokenIndex = position716, tokenIndex716
							if buffer[position] != rune('L') {
								goto l671
							}
							position++
						}
					l716:
					}
				l672:
					{
						position718, tokenIndex718 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l718
						}
						if buffer[position] != rune('#') {
							goto l718
						}
						position++
						if !_rules[ruleOffset]() {
							goto l718
						}
						goto l719
					l718:
						position, tokenIndex = position718, tokenIndex718
					}
				l719:
					goto l670
				l671:
					position, tokenIndex = position670, tokenIndex670
					{
						position721, tokenIndex721 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l722
						}
						position++
						goto l721
					l722:
						position, tokenIndex = position721, tokenIndex721
						if buffer[position] != rune('M') {
							goto l720
						}
						position++
					}
				l721:
					{
						position723, tokenIndex723 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l724
						}
						position++
						goto l723
					l724:
						position, tokenIndex = position723, tokenIndex723
						if buffer[position] != rune('U') {
							goto l720
						}
						position++
					}
				l723:
					{
						position725, tokenIndex725 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l726
						}
						position++
						goto l725
					l726:
						position, tokenIndex = position725, tokenIndex725
						if buffer[position] != rune('L') {
							goto l720
						}
						position++
					}
				l725:
					if buffer[position] != rune(' ') {
						goto l720
					}
					position++
					{
						position727, tokenIndex727 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l728
						}
						position++
						goto l727
					l728:
						position, tokenIndex = position727, tokenIndex727
						if buffer[position] != rune('V') {
							goto l720
						}
						position++
					}
				l727:
					{
						position729, tokenIndex729 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l730
						}
						position++
						goto l729
					l730:
						position, tokenIndex = position729, tokenIndex729
						if buffer[position] != rune('L') {
							goto l720
						}
						position++
					}
				l729:
					goto l670
				l720:
					position, tokenIndex = position670, tokenIndex670
					{
						position731, tokenIndex731 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l732
						}
						position++
						goto l731
					l732:
						position, tokenIndex = position731, tokenIndex731
						if buffer[position] != rune('M') {
							goto l668
						}
						position++
					}
				l731:
					{
						position733, tokenIndex733 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l734
						}
						position++
						goto l733
					l734:
						position, tokenIndex = position733, tokenIndex733
						if buffer[position] != rune('U') {
							goto l668
						}
						position++
					}
				l733:
					{
						position735, tokenIndex735 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l736
						}
						position++
						goto l735
					l736:
						position, tokenIndex = position735, tokenIndex735
						if buffer[position] != rune('L') {
							goto l668
						}
						position++
					}
				l735:
					if buffer[position] != rune(' ') {
						goto l668
					}
					position++
					if buffer[position] != rune('#') {
						goto l668
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l668
					}
					position++
					{
						position737, tokenIndex737 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l737
						}
						position++
						goto l738
					l737:
						position, tokenIndex = position737, tokenIndex737
					}
				l738:
				}
			l670:
				add(ruleARMConstantTweak, position669)
			}
			return true
		l668:
			position, tokenIndex = position668, tokenIndex668
			return false
		},
		/* 49 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / SVE2PredicateRegister / ARMVectorRegister / SVE2SpecialValue / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
		func() bool {
			position739, tokenIndex739 := position, tokenIndex
			{
				position740 := position
				{
					position741, tokenIndex741 := position, tokenIndex
					{
						position743, tokenIndex743 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l744
						}
						position++
						goto l743
					l744:
						position, tokenIndex = position743, tokenIndex743
						if buffer[position] != rune('S') {
							goto l742
						}
						position++
					}
				l743:
					{
						position745, tokenIndex745 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l746
						}
						position++
						goto l745
					l746:
						position, tokenIndex = position745, tokenIndex745
						if buffer[position] != rune('P') {
							goto l742
						}
						position++
					}
				l745:
					goto l741
				l742:
					position, tokenIndex = position741, tokenIndex741
					{
						position748, tokenIndex748 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l749
						}
						position++
						goto l748
					l749:
						position, tokenIndex = position748, tokenIndex748
						if buffer[position] != rune('w') {
							goto l750
						}
						position++
						goto l748
					l750:
						position, tokenIndex = position748, tokenIndex748
						if buffer[position] != rune('d') {
							goto l751
						}
						position++
						goto l748
					l751:
						position, tokenIndex = position748, tokenIndex748
						if buffer[position] != rune('q') {
							goto l752
						}
						position++
						goto l748
					l752:
						position, tokenIndex = position748, tokenIndex748
						if buffer[position] != rune('s') {
							goto l753
						}
						position++
						goto l748
					l753:
						position, tokenIndex = position748, tokenIndex748
						if buffer[position] != rune('h') {
							goto l754
						}
						position++
						goto l748
					l754:
						position, tokenIndex = position748, tokenIndex748
						if buffer[position] != rune('b') {
							goto l747
						}
						position++
					}
				l748:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l747
					}
					position++
					{
						position755, tokenIndex755 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l755
						}
						position++
						goto l756
					l755:
						position, tokenIndex = position755, tokenIndex755
					}
				l756:
					goto l741
				l747:
					position, tokenIndex = position741, tokenIndex741
					{
						position758, tokenIndex758 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l759
						}
						position++
						goto l758
					l759:
						position, tokenIndex = position758, tokenIndex758
						if buffer[position] != rune('X') {
							goto l757
						}
						position++
					}
				l758:
					{
						position760, tokenIndex760 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l761
						}
						position++
						goto l760
					l761:
						position, tokenIndex = position760, tokenIndex760
						if buffer[position] != rune('Z') {
							goto l757
						}
						position++
					}
				l760:
					{
						position762, tokenIndex762 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l763
						}
						position++
						goto l762
					l763:
						position, tokenIndex = position762, tokenIndex762
						if buffer[position] != rune('R') {
							goto l757
						}
						position++
					}
				l762:
					goto l741
				l757:
					position, tokenIndex = position741, tokenIndex741
					{
						position765, tokenIndex765 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l766
						}
						position++
						goto l765
					l766:
						position, tokenIndex = position765, tokenIndex765
						if buffer[position] != rune('W') {
							goto l764
						}
						position++
					}
				l765:
					{
						position767, tokenIndex767 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l768
						}
						position++
						goto l767
					l768:
						position, tokenIndex = position767, tokenIndex767
						if buffer[position] != rune('Z') {
							goto l764
						}
						position++
					}
				l767:
					{
						position769, tokenIndex769 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l770
						}
						position++
						goto l769
					l770:
						position, tokenIndex = position769, tokenIndex769
						if buffer[position] != rune('R') {
							goto l764
						}
						position++
					}
				l769:
					goto l741
				l764:
					position, tokenIndex = position741, tokenIndex741
					{
						position772, tokenIndex772 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l773
						}
						position++
						goto l772
					l773:
						position, tokenIndex = position772, tokenIndex772
						if buffer[position] != rune('N') {
							goto l771
						}
						position++
					}
				l772:
					{
						position774, tokenIndex774 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l775
						}
						position++
						goto l774
					l775:
						position, tokenIndex = position774, tokenIndex774
						if buffer[position] != rune('Z') {
							goto l771
						}
						position++
					}
				l774:
					{
						position776, tokenIndex776 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l777
						}
						position++
						goto l776
					l777:
						position, tokenIndex = position776, tokenIndex776
						if buffer[position] != rune('C') {
							goto l771
						}
						position++
					}
				l776:
					{
						position778, tokenIndex778 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l779
						}
						position++
						goto l778
					l779:
						position, tokenIndex = position778, tokenIndex778
						if buffer[position] != rune('V') {
							goto l771
						}
						position++
					}
				l778:
					goto l741
				l771:
					position, tokenIndex = position741, tokenIndex741
					if !_rules[ruleSVE2PredicateRegister]() {
						goto l780
					}
					goto l741
				l780:
					position, tokenIndex = position741, tokenIndex741
					if !_rules[ruleARMVectorRegister]() {
						goto l781
					}
					goto l741
				l781:
					position, tokenIndex = position741, tokenIndex741
					if !_rules[ruleSVE2SpecialValue]() {
						goto l782
					}
					goto l741
				l782:
					position, tokenIndex = position741, tokenIndex741
					if buffer[position] != rune('{') {
						goto l739
					}
					position++
					{
						position783, tokenIndex783 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l783
						}
						goto l784
					l783:
						position, tokenIndex = position783, tokenIndex783
					}
				l784:
					if !_rules[ruleARMVectorRegister]() {
						goto l739
					}
				l785:
					{
						position786, tokenIndex786 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l786
						}
						position++
						{
							position787, tokenIndex787 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l787
							}
							goto l788
						l787:
							position, tokenIndex = position787, tokenIndex787
						}
					l788:
						if !_rules[ruleARMVectorRegister]() {
							goto l786
						}
						goto l785
					l786:
						position, tokenIndex = position786, tokenIndex786
					}
					{
						position789, tokenIndex789 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l789
						}
						goto l790
					l789:
						position, tokenIndex = position789, tokenIndex789
					}
				l790:
					if buffer[position] != rune('}') {
						goto l739
					}
					position++
					{
						position791, tokenIndex791 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l791
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l791
						}
						position++
						{
							position793, tokenIndex793 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l793
							}
							position++
							goto l794
						l793:
							position, tokenIndex = position793, tokenIndex793
						}
					l794:
						if buffer[position] != rune(']') {
							goto l791
						}
						position++
						goto l792
					l791:
						position, tokenIndex = position791, tokenIndex791
					}
				l792:
				}
			l741:
				add(ruleARMRegister, position740)
			}
			return true
		l739:
			position, tokenIndex = position739, tokenIndex739
			return false
		},
		/* 50 ARMVectorRegister <- <(('p' / 'v' / 'z') [0-9] [0-9]? !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_') ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
		func() bool {
			position795, tokenIndex795 := position, tokenIndex
			{
				position796 := position
				{
					position797, tokenIndex797 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l798
					}
					position++
					goto l797
				l798:
					position, tokenIndex = position797, tokenIndex797
					if buffer[position] != rune('v') {
						goto l799
					}
					position++
					goto l797
				l799:
					position, tokenIndex = position797, tokenIndex797
					if buffer[position] != rune('z') {
						goto l795
					}
					position++
				}
			l797:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l795
				}
				position++
				{
					position800, tokenIndex800 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l800
					}
					position++
					goto l801
				l800:
					position, tokenIndex = position800, tokenIndex800
				}
			l801:
				{
					position802, tokenIndex802 := position, tokenIndex
					{
						position803, tokenIndex803 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l804
						}
						position++
						goto l803
					l804:
						position, tokenIndex = position803, tokenIndex803
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l805
						}
						position++
						goto l803
					l805:
						position, tokenIndex = position803, tokenIndex803
						{
							position807, tokenIndex807 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l808
							}
							position++
							goto l807
						l808:
							position, tokenIndex = position807, tokenIndex807
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l806
							}
							position++
						}
					l807:
						goto l803
					l806:
						position, tokenIndex = position803, tokenIndex803
						if buffer[position] != rune('_') {
							goto l802
						}
						position++
					}
				l803:
					goto l795
				l802:
					position, tokenIndex = position802, tokenIndex802
				}
				{
					position809, tokenIndex809 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l809
					}
					position++
				l811:
					{
						position812, tokenIndex812 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l812
						}
						position++
						goto l811
					l812:
						position, tokenIndex = position812, tokenIndex812
					}
					{
						position813, tokenIndex813 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l814
						}
						position++
						goto l813
					l814:
						position, tokenIndex = position813, tokenIndex813
						if buffer[position] != rune('s') {
							goto l815
						}
						position++
						goto l813
					l815:
						position, tokenIndex = position813, tokenIndex813
						if buffer[position] != rune('d') {
							goto l816
						}
						position++
						goto l813
					l816:
						position, tokenIndex = position813, tokenIndex813
						if buffer[position] != rune('h') {
							goto l817
						}
						position++
						goto l813
					l817:
						position, tokenIndex = position813, tokenIndex813
						if buffer[position] != rune('q') {
							goto l809
						}
						position++
					}
				l813:
					{
						position818, tokenIndex818 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l818
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l818
						}
						position++
						{
							position820, tokenIndex820 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l820
							}
							position++
							goto l821
						l820:
							position, tokenIndex = position820, tokenIndex820
						}
					l821:
						if buffer[position] != rune(']') {
							goto l818
						}
						position++
						goto l819
					l818:
						position, tokenIndex = position818, tokenIndex818
					}
				l819:
					goto l810
				l809:
					position, tokenIndex = position809, tokenIndex809
				}
			l810:
				add(ruleARMVectorRegister, position796)
			}
			return true
		l795:
			position, tokenIndex = position795, tokenIndex795
			return false
		},
		/* 51 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
		func() bool {
			position822, tokenIndex822 := position, tokenIndex
			{
				position823 := position
				{
					position824, tokenIndex824 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l825
					}
					position++
					goto l824
				l825:
					position, tokenIndex = position824, tokenIndex824
					if buffer[position] != rune('P') {
						goto l822
					}
					position++
				}
			l824:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l822
				}
				position++
				{
					position826, tokenIndex826 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l826
					}
					position++
					goto l827
				l826:
					position, tokenIndex = position826, tokenIndex826
				}
			l827:
				if buffer[position] != rune('/') {
					goto l822
				}
				position++
				{
					position828, tokenIndex828 := position, tokenIndex
					if buffer[position] != rune('m') {
						goto l829
					}
					position++
					goto l828
				l829:
					position, tokenIndex = position828, tokenIndex828
					if buffer[position] != rune('M') {
						goto l830
					}
					position++
					goto l828
				l830:
					position, tokenIndex = position828, tokenIndex828
					{
						position831, tokenIndex831 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l832
						}
						position++
						goto l831
					l832:
						position, tokenIndex = position831, tokenIndex831
						if buffer[position] != rune('Z') {
							goto l822
						}
						position++
					}
				l831:
				}
			l828:
				add(ruleSVE2PredicateRegister, position823)
			}
			return true
		l822:
			position, tokenIndex = position822, tokenIndex822
			return false
		},
		/* 52 SVE2SpecialValue <- <(((('p' / 'P') ('o' / 'O') ('w' / 'W') '2') / (('v' / 'V') ('l' / 'L') ('1' / '2' / '3' / '4' / '5' / '6' / '7' / '8') ![0-9]) / (('v' / 'V') ('l' / 'L') '1' '6') / (('v' / 'V') ('l' / 'L') '3' '2') / (('v' / 'V') ('l' / 'L') '6' '4') / (('v' / 'V') ('l' / 'L') '1' '2' '8') / (('v' / 'V') ('l' / 'L') '2' '5' '6') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '3') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '4') / (('a' / 'A') ('l' / 'L') ('l' / 'L'))) !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_'))> */
		func() bool {
			position833, tokenIndex833 := position, tokenIndex
			{
				position834 := position
				{
					position835, tokenIndex835 := position, tokenIndex
					{
						position837, tokenIndex837 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l838
						}
						position++
						goto l837
					l838:
						position, tokenIndex = position837, tokenIndex837
						if buffer[position] != rune('P') {
							goto l836
						}
						position++
					}
				l837:
					{
						position839, tokenIndex839 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l840
						}
						position++
						goto l839
					l840:
						position, tokenIndex = position839, tokenIndex839
						if buffer[position] != rune('O') {
							goto l836
						}
						position++
					}
				l839:
					{
						position841, tokenIndex841 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l842
						}
						position++
						goto l841
					l842:
						position, tokenIndex = position841, tokenIndex841
						if buffer[position] != rune('W') {
							goto l836
						}
						position++
					}
				l841:
					if buffer[position] != rune('2') {
						goto l836
					}
					position++
					goto l835
				l836:
					position, tokenIndex = position835, tokenIndex835
					{
						position844, tokenIndex844 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l845
						}
						position++
						goto l844
					l845:
						position, tokenIndex = position844, tokenIndex844
						if buffer[position] != rune('V') {
							goto l843
						}
						position++
					}
				l844:
					{
						position846, tokenIndex846 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l847
						}
						position++
						goto l846
					l847:
						position, tokenIndex = position846, tokenIndex846
						if buffer[position] != rune('L') {
							goto l843
						}
						position++
					}
				l846:
					{
						position848, tokenIndex848 := position, tokenIndex
						if buffer[position] != rune('1') {
							goto l849
						}
						position++
						goto l848
					l849:
						position, tokenIndex = position848, tokenIndex848
						if buffer[position] != rune('2') {
							goto l850
						}
						position++
						goto l848
					l850:
						position, tokenIndex = position848, tokenIndex848
						if buffer[position] != rune('3') {
							goto l851
						}
						position++
						goto l848
					l851:
						position, tokenIndex = position848, tokenIndex848
						if buffer[position] != rune('4') {
							goto l852
						}
						position++
						goto l848
					l852:
						position, tokenIndex = position848, tokenIndex848
						if buffer[position] != rune('5') {
							goto l853
						}
						position++
						goto l848
					l853:
						position, tokenIndex = position848, tokenIndex848
						if buffer[position] != rune('6') {
							goto l854
						}
						position++
						goto l848
					l854:
						position, tokenIndex = position848, tokenIndex848
						if buffer[position] != rune('7') {
							goto l855
						}
						position++
						goto l848
					l855:
						position, tokenIndex = position848, tokenIndex848
						if buffer[position] != rune('8') {
							goto l843
						}
						position++
					}
				l848:
					{
						position856, tokenIndex856 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l856
						}
						position++
						goto l843
					l856:
						position, tokenIndex = position856, tokenIndex856
					}
					goto l835
				l843:
					position, tokenIndex = position835, tokenIndex835
					{
						position858, tokenIndex858 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l859
						}
						position++
						goto l858
					l859:
						position, tokenIndex = position858, tokenIndex858
						if buffer[position] != rune('V') {
							goto l857
						}
						position++
					}
				l858:
					{
						position860, tokenIndex860 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l861
						}
						position++
						goto l860
					l861:
						position, tokenIndex = position860, tokenIndex860
						if buffer[position] != rune('L') {
							goto l857
						}
						position++
					}
				l860:
					if buffer[position] != rune('1') {
						goto l857
					}
					position++
					if buffer[position] != rune('6') {
						goto l857
					}
					position++
					goto l835
				l857:
					position, tokenIndex = position835, tokenIndex835
					{
						position863, tokenIndex863 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l864
						}
						position++
						goto l863
					l864:
						position, tokenIndex = position863, tokenIndex863
						if buffer[position] != rune('V') {
							goto l862
						}
						position++
					}
				l863:
					{
						position865, tokenIndex865 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l866
						}
						position++
						goto l865
					l866:
						position, tokenIndex = position865, tokenIndex865
						if buffer[position] != rune('L') {
							goto l862
						}
						position++
					}
				l865:
					if buffer[position] != rune('3') {
						goto l862
					}
					position++
					if buffer[position] != rune('2') {
						goto l862
					}
					position++
					goto l835
				l862:
					position, tokenIndex = position835, tokenIndex835
					{
						position868, tokenIndex868 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l869
						}
						position++
						goto l868
					l869:
						position, tokenIndex = position868, tokenIndex868
						if buffer[position] != rune('V') {
							goto l867
						}
						position++
					}
				l868:
					{
						position870, tokenIndex870 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l871
						}
						position++
						goto l870
					l871:
						position, tokenIndex = position870, tokenIndex870
						if buffer[position] != rune('L') {
							goto l867
						}
						position++
					}
				l870:
					if buffer[position] != rune('6') {
						goto l867
					}
					position++
					if buffer[position] != rune('4') {
						goto l867
					}
					position++
					goto l835
				l867:
					position, tokenIndex = position835, tokenIndex835
					{
						position873, tokenIndex873 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l874
						}
						position++
						goto l873
					l874:
						position, tokenIndex = position873, tokenIndex873
						if buffer[position] != rune('V') {
							goto l872
						}
						position++
					}
				l873:
					{
						position875, tokenIndex875 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l876
						}
						position++
						goto l875
					l876:
						position, tokenIndex = position875, tokenIndex875
						if buffer[position] != rune('L') {
							goto l872
						}
						position++
					}
				l875:
					if buffer[position] != rune('1') {
						goto l872
					}
					position++
					if buffer[position] != rune('2') {
						goto l872
					}
					position++
					if buffer[position] != rune('8') {
						goto l872
					}
					position++
					goto l835
				l872:
					position, tokenIndex = position835, tokenIndex835
					{
						position878, tokenIndex878 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l879
						}
						position++
						goto l878
					l879:
						position, tokenIndex = position878, tokenIndex878
						if buffer[position] != rune('V') {
							goto l877
						}
						position++
					}
				l878:
					{
						position880, tokenIndex880 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l881
						}
						position++
						goto l880
					l881:
						position, tokenIndex = position880, tokenIndex880
						if buffer[position] != rune('L') {
							goto l877
						}
						position++
					}
				l880:
					if buffer[position] != rune('2') {
						goto l877
					}
					position++
					if buffer[position] != rune('5') {
						goto l877
					}
					position++
					if buffer[position] != rune('6') {
						goto l877
					}
					position++
					goto l835
				l877:
					position, tokenIndex = position835, tokenIndex835
					{
						position883, tokenIndex883 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l884
						}
						position++
						goto l883
					l884:
						position, tokenIndex = position883, tokenIndex883
						if buffer[position] != rune('M') {
							goto l882
						}
						position++
					}
				l883:
					{
						position885, tokenIndex885 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l886
						}
						position++
						goto l885
					l886:
						position, tokenIndex = position885, tokenIndex885
						if buffer[position] != rune('U') {
							goto l882
						}
						position++
					}
				l885:
					{
						position887, tokenIndex887 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l888
						}
						position++
						goto l887
					l888:
						position, tokenIndex = position887, tokenIndex887
						if buffer[position] != rune('L') {
							goto l882
						}
						position++
					}
				l887:
					if buffer[position] != rune('3') {
						goto l882
					}
					position++
					goto l835
				l882:
					position, tokenIndex = position835, tokenIndex835
					{
						position890, tokenIndex890 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l891
						}
						position++
						goto l890
					l891:
						position, tokenIndex = position890, tokenIndex890
						if buffer[position] != rune('M') {
							goto l889
						}
						position++
					}
				l890:
					{
						position892, tokenIndex892 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l893
						}
						position++
						goto l892
					l893:
						position, tokenIndex = position892, tokenIndex892
						if buffer[position] != rune('U') {
							goto l889
						}
						position++
					}
				l892:
					{
						position894, tokenIndex894 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l895
						}
						position++
						goto l894
					l895:
						position, tokenIndex = position894, tokenIndex894
						if buffer[position] != rune('L') {
							goto l889
						}
						position++
					}
				l894:
					if buffer[position] != rune('4') {
						goto l889
					}
					position++
					goto l835
				l889:
					position, tokenIndex = position835, tokenIndex835
					{
						position896, tokenIndex896 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l897
						}
						position++
						goto l896
					l897:
						position, tokenIndex = position896, tokenIndex896
						if buffer[position] != rune('A') {
							goto l833
						}
						position++
					}
				l896:
					{
						position898, tokenIndex898 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l899
						}
						position++
						goto l898
					l899:
						position, tokenIndex = position898, tokenIndex898
						if buffer[position] != rune('L') {
							goto l833
						}
						position++
					}
				l898:
					{
						position900, tokenIndex900 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l901
						}
						position++
						goto l900
					l901:
						position, tokenIndex = position900, tokenIndex900
						if buffer[position] != rune('L') {
							goto l833
						}
						position++
					}
				l900:
				}
			l835:
				{
					position902, tokenIndex902 := position, tokenIndex
					{
						position903, tokenIndex903 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l904
						}
						position++
						goto l903
					l904:
						position, tokenIndex = position903, tokenIndex903
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l905
						}
						position++
						goto l903
					l905:
						position, tokenIndex = position903, tokenIndex903
						{
							position907, tokenIndex907 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l908
							}
							position++
							goto l907
						l908:
							position, tokenIndex = position907, tokenIndex907
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l906
							}
							position++
						}
					l907:
						goto l903
					l906:
						position, tokenIndex = position903, tokenIndex903
						if buffer[position] != rune('_') {
							goto l902
						}
						position++
					}
				l903:
					goto l833
				l902:
					position, tokenIndex = position902, tokenIndex902
				}
				add(ruleSVE2SpecialValue, position834)
			}
			return true
		l833:
			position, tokenIndex = position833, tokenIndex833
			return false
		},
		/* 53 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position909, tokenIndex909 := position, tokenIndex
			{
				position910 := position
				{
					position911, tokenIndex911 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l912
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l912
					}
					goto l911
				l912:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleSymbolRef]() {
						goto l913
					}
					goto l911
				l913:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l914
					}
					goto l911
				l914:
					position, tokenIndex = position911, tokenIndex911
				l916:
					{
						position917, tokenIndex917 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l917
						}
						goto l916
					l917:
						position, tokenIndex = position917, tokenIndex917
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l915
					}
					goto l911
				l915:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleSegmentRegister]() {
						goto l918
					}
					if !_rules[ruleOffset]() {
						goto l918
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l918
					}
					goto l911
				l918:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleSegmentRegister]() {
						goto l919
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l919
					}
					goto l911
				l919:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleSegmentRegister]() {
						goto l920
					}
					if !_rules[ruleOffset]() {
						goto l920
					}
					goto l911
				l920:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleARMBaseIndexScale]() {
						goto l921
					}
					goto l911
				l921:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleBaseIndexScale]() {
						goto l909
					}
				}
			l911:
				add(ruleMemoryRef, position910)
			}
			return true
		l909:
			position, tokenIndex = position909, tokenIndex909
			return false
		},
		/* 54 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position922, tokenIndex922 := position, tokenIndex
			{
				position923 := position
				{
					position924, tokenIndex924 := position, tokenIndex
				l926:
					{
						position927, tokenIndex927 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l927
						}
						goto l926
					l927:
						position, tokenIndex = position927, tokenIndex927
					}
					if buffer[position] != rune('+') {
						goto l924
					}
					position++
					goto l925
				l924:
					position, tokenIndex = position924, tokenIndex924
				}
			l925:
				{
					position928, tokenIndex928 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l929
					}
					goto l928
				l929:
					position, tokenIndex = position928, tokenIndex928
					if !_rules[ruleSymbolName]() {
						goto l922
					}
				}
			l928:
			l930:
				{
					position931, tokenIndex931 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l931
					}
					goto l930
				l931:
					position, tokenIndex = position931, tokenIndex931
				}
				{
					position932, tokenIndex932 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l932
					}
					position++
					if !_rules[ruleSection]() {
						goto l932
					}
				l934:
					{
						position935, tokenIndex935 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l935
						}
						goto l934
					l935:
						position, tokenIndex = position935, tokenIndex935
					}
					goto l933
				l932:
					position, tokenIndex = position932, tokenIndex932
				}
			l933:
				add(ruleSymbolRef, position923)
			}
			return true
		l922:
			position, tokenIndex = position922, tokenIndex922
			return false
		},
		/* 55 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position936, tokenIndex936 := position, tokenIndex
			{
				position937 := position
				if buffer[position] != rune(':') {
					goto l936
				}
				position++
				{
					position938, tokenIndex938 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l939
					}
					position++
					goto l938
				l939:
					position, tokenIndex = position938, tokenIndex938
					if buffer[position] != rune('L') {
						goto l936
					}
					position++
				}
			l938:
				{
					position940, tokenIndex940 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l941
					}
					position++
					goto l940
				l941:
					position, tokenIndex = position940, tokenIndex940
					if buffer[position] != rune('O') {
						goto l936
					}
					position++
				}
			l940:
				if buffer[position] != rune('1') {
					goto l936
				}
				position++
				if buffer[position] != rune('2') {
					goto l936
				}
				position++
				if buffer[position] != rune(':') {
					goto l936
				}
				position++
				{
					position942, tokenIndex942 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l943
					}
					goto l942
				l943:
					position, tokenIndex = position942, tokenIndex942
					if !_rules[ruleSymbolName]() {
						goto l936
					}
				}
			l942:
				{
					position944, tokenIndex944 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l944
					}
					goto l945
				l944:
					position, tokenIndex = position944, tokenIndex944
				}
			l945:
				add(ruleLow12BitsSymbolRef, position937)
			}
			return true
		l936:
			position, tokenIndex = position936, tokenIndex936
			return false
		},
		/* 56 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position946, tokenIndex946 := position, tokenIndex
			{
				position947 := position
				if buffer[position] != rune('[') {
					goto l946
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l946
				}
				{
					position948, tokenIndex948 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l948
					}
					position++
					{
						position950, tokenIndex950 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l950
						}
						goto l951
					l950:
						position, tokenIndex = position950, tokenIndex950
					}
				l951:
					{
						position952, tokenIndex952 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l953
						}
						position++
						if !_rules[ruleOffset]() {
							goto l953
						}
						{
							position954, tokenIndex954 := position, tokenIndex
							{
								position956, tokenIndex956 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l957
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l957
								}
								position++
							l958:
								{
									position959, tokenIndex959 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l959
									}
									position++
									goto l958
								l959:
									position, tokenIndex = position959, tokenIndex959
								}
								goto l956
							l957:
								position, tokenIndex = position956, tokenIndex956
								if buffer[position] != rune('*') {
									goto l960
								}
								position++
								if buffer[position] != rune('(') {
									goto l960
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l960
								}
								position++
							l961:
								{
									position962, tokenIndex962 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l962
									}
									position++
									goto l961
								l962:
									position, tokenIndex = position962, tokenIndex962
								}
								if !_rules[ruleOperator]() {
									goto l960
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l960
								}
								position++
							l963:
								{
									position964, tokenIndex964 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l964
									}
									position++
									goto l963
								l964:
									position, tokenIndex = position964, tokenIndex964
								}
								if buffer[position] != rune(')') {
									goto l960
								}
								position++
								goto l956
							l960:
								position, tokenIndex = position956, tokenIndex956
							l965:
								{
									position966, tokenIndex966 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l966
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l966
									}
									position++
								l967:
									{
										position968, tokenIndex968 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l968
										}
										position++
										goto l967
									l968:
										position, tokenIndex = position968, tokenIndex968
									}
									goto l965
								l966:
									position, tokenIndex = position966, tokenIndex966
								}
							}
						l956:
							goto l955

							position, tokenIndex = position954, tokenIndex954
						}
					l955:
						goto l952
					l953:
						position, tokenIndex = position952, tokenIndex952
						if !_rules[ruleARMGOTLow12]() {
							goto l969
						}
						goto l952
					l969:
						position, tokenIndex = position952, tokenIndex952
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l970
						}
						goto l952
					l970:
						position, tokenIndex = position952, tokenIndex952
						if !_rules[ruleARMRegister]() {
							goto l948
						}
					}
				l952:
					{
						position971, tokenIndex971 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l971
						}
						position++
						{
							position973, tokenIndex973 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l973
							}
							goto l974
						l973:
							position, tokenIndex = position973, tokenIndex973
						}
					l974:
						if !_rules[ruleARMConstantTweak]() {
							goto l971
						}
						goto l972
					l971:
						position, tokenIndex = position971, tokenIndex971
					}
				l972:
					goto l949
				l948:
					position, tokenIndex = position948, tokenIndex948
				}
			l949:
				if buffer[position] != rune(']') {
					goto l946
				}
				position++
				{
					position975, tokenIndex975 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l975
					}
					goto l976
				l975:
					position, tokenIndex = position975, tokenIndex975
				}
			l976:
				add(ruleARMBaseIndexScale, position947)
			}
			return true
		l946:
			position, tokenIndex = position946, tokenIndex946
			return false
		},
		/* 57 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position977, tokenIndex977 := position, tokenIndex
			{
				position978 := position
				if buffer[position] != rune(':') {
					goto l977
				}
				position++
				{
					position979, tokenIndex979 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l980
					}
					position++
					goto l979
				l980:
					position, tokenIndex = position979, tokenIndex979
					if buffer[position] != rune('G') {
						goto l977
					}
					position++
				}
			l979:
				{
					position981, tokenIndex981 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l982
					}
					position++
					goto l981
				l982:
					position, tokenIndex = position981, tokenIndex981
					if buffer[position] != rune('O') {
						goto l977
					}
					position++
				}
			l981:
				{
					position983, tokenIndex983 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l984
					}
					position++
					goto l983
				l984:
					position, tokenIndex = position983, tokenIndex983
					if buffer[position] != rune('T') {
						goto l977
					}
					position++
				}
			l983:
				if buffer[position] != rune('_') {
					goto l977
				}
				position++
				{
					position985, tokenIndex985 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l986
					}
					position++
					goto l985
				l986:
					position, tokenIndex = position985, tokenIndex985
					if buffer[position] != rune('L') {
						goto l977
					}
					position++
				}
			l985:
				{
					position987, tokenIndex987 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l988
					}
					position++
					goto l987
				l988:
					position, tokenIndex = position987, tokenIndex987
					if buffer[position] != rune('O') {
						goto l977
					}
					position++
				}
			l987:
				if buffer[position] != rune('1') {
					goto l977
				}
				position++
				if buffer[position] != rune('2') {
					goto l977
				}
				position++
				if buffer[position] != rune(':') {
					goto l977
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l977
				}
				add(ruleARMGOTLow12, position978)
			}
			return true
		l977:
			position, tokenIndex = position977, tokenIndex977
			return false
		},
		/* 58 ARMPostincrement <- <'!'> */
		func() bool {
			position989, tokenIndex989 := position, tokenIndex
			{
				position990 := position
				if buffer[position] != rune('!') {
					goto l989
				}
				position++
				add(ruleARMPostincrement, position990)
			}
			return true
		l989:
			position, tokenIndex = position989, tokenIndex989
			return false
		},
		/* 59 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position991, tokenIndex991 := position, tokenIndex
			{
				position992 := position
				if buffer[position] != rune('(') {
					goto l991
				}
				position++
				{
					position993, tokenIndex993 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l993
					}
					goto l994
				l993:
					position, tokenIndex = position993, tokenIndex993
				}
			l994:
				{
					position995, tokenIndex995 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l995
					}
					goto l996
				l995:
					position, tokenIndex = position995, tokenIndex995
				}
			l996:
				{
					position997, tokenIndex997 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l997
					}
					position++
					{
						position999, tokenIndex999 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l999
						}
						goto l1000
					l999:
						position, tokenIndex = position999, tokenIndex999
					}
				l1000:
					if !_rules[ruleRegisterOrConstant]() {
						goto l997
					}
					{
						position1001, tokenIndex1001 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l1001
						}
						goto l1002
					l1001:
						position, tokenIndex = position1001, tokenIndex1001
					}
				l1002:
					{
						position1003, tokenIndex1003 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l1003
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1003
						}
						position++
					l1005:
						{
							position1006, tokenIndex1006 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1006
							}
							position++
							goto l1005
						l1006:
							position, tokenIndex = position1006, tokenIndex1006
						}
						goto l1004
					l1003:
						position, tokenIndex = position1003, tokenIndex1003
					}
				l1004:
					goto l998
				l997:
					position, tokenIndex = position997, tokenIndex997
				}
			l998:
				if buffer[position] != rune(')') {
					goto l991
				}
				position++
				add(ruleBaseIndexScale, position992)
			}
			return true
		l991:
			position, tokenIndex = position991, tokenIndex991
			return false
		},
		/* 60 Operator <- <('+' / '-')> */
		func() bool {
			position1007, tokenIndex1007 := position, tokenIndex
			{
				position1008 := position
				{
					position1009, tokenIndex1009 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l1010
					}
					position++
					goto l1009
				l1010:
					position, tokenIndex = position1009, tokenIndex1009
					if buffer[position] != rune('-') {
						goto l1007
					}
					position++
				}
			l1009:
				add(ruleOperator, position1008)
			}
			return true
		l1007:
			position, tokenIndex = position1007, tokenIndex1007
			return false
		},
		/* 61 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position1011, tokenIndex1011 := position, tokenIndex
			{
				position1012 := position
				{
					position1013, tokenIndex1013 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l1013
					}
					position++
					goto l1014
				l1013:
					position, tokenIndex = position1013, tokenIndex1013
				}
			l1014:
				{
					position1015, tokenIndex1015 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l1015
					}
					position++
					goto l1016
				l1015:
					position, tokenIndex = position1015, tokenIndex1015
				}
			l1016:
				{
					position1017, tokenIndex1017 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l1018
					}
					position++
					{
						position1019, tokenIndex1019 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l1020
						}
						position++
						goto l1019
					l1020:
						position, tokenIndex = position1019, tokenIndex1019
						if buffer[position] != rune('B') {
							goto l1018
						}
						position++
					}
				l1019:
					{
						position1023, tokenIndex1023 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l1024
						}
						position++
						goto l1023
					l1024:
						position, tokenIndex = position1023, tokenIndex1023
						if buffer[position] != rune('1') {
							goto l1018
						}
						position++
					}
				l1023:
				l1021:
					{
						position1022, tokenIndex1022 := position, tokenIndex
						{
							position1025, tokenIndex1025 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l1026
							}
							position++
							goto l1025
						l1026:
							position, tokenIndex = position1025, tokenIndex1025
							if buffer[position] != rune('1') {
								goto l1022
							}
							position++
						}
					l1025:
						goto l1021
					l1022:
						position, tokenIndex = position1022, tokenIndex1022
					}
					goto l1017
				l1018:
					position, tokenIndex = position1017, tokenIndex1017
					if buffer[position] != rune('0') {
						goto l1027
					}
					position++
					{
						position1028, tokenIndex1028 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l1029
						}
						position++
						goto l1028
					l1029:
						position, tokenIndex = position1028, tokenIndex1028
						if buffer[position] != rune('X') {
							goto l1027
						}
						position++
					}
				l1028:
					{
						position1032, tokenIndex1032 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1033
						}
						position++
						goto l1032
					l1033:
						position, tokenIndex = position1032, tokenIndex1032
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1034
						}
						position++
						goto l1032
					l1034:
						position, tokenIndex = position1032, tokenIndex1032
						{
							position1035, tokenIndex1035 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l1036
							}
							position++
							goto l1035
						l1036:
							position, tokenIndex = position1035, tokenIndex1035
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l1027
							}
							position++
						}
					l1035:
					}
				l1032:
				l1030:
					{
						position1031, tokenIndex1031 := position, tokenIndex
						{
							position1037, tokenIndex1037 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1038
							}
							position++
							goto l1037
						l1038:
							position, tokenIndex = position1037, tokenIndex1037
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1039
							}
							position++
							goto l1037
						l1039:
							position, tokenIndex = position1037, tokenIndex1037
							{
								position1040, tokenIndex1040 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l1041
								}
								position++
								goto l1040
							l1041:
								position, tokenIndex = position1040, tokenIndex1040
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l1031
								}
								position++
							}
						l1040:
						}
					l1037:
						goto l1030
					l1031:
						position, tokenIndex = position1031, tokenIndex1031
					}
					goto l1017
				l1027:
					position, tokenIndex = position1017, tokenIndex1017
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l1011
					}
					position++
				l1042:
					{
						position1043, tokenIndex1043 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1043
						}
						position++
						goto l1042
					l1043:
						position, tokenIndex = position1043, tokenIndex1043
					}
				}
			l1017:
				add(ruleOffset, position1012)
			}
			return true
		l1011:
			position, tokenIndex = position1011, tokenIndex1011
			return false
		},
		/* 62 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position1044, tokenIndex1044 := position, tokenIndex
			{
				position1045 := position
				{
					position1048, tokenIndex1048 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l1049
					}
					position++
					goto l1048
				l1049:
					position, tokenIndex = position1048, tokenIndex1048
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l1050
					}
					position++
					goto l1048
				l1050:
					position, tokenIndex = position1048, tokenIndex1048
					if buffer[position] != rune('@') {
						goto l1044
					}
					position++
				}
			l1048:
			l1046:
				{
					position1047, tokenIndex1047 := position, tokenIndex
					{
						position1051, tokenIndex1051 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l1052
						}
						position++
						goto l1051
					l1052:
						position, tokenIndex = position1051, tokenIndex1051
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l1053
						}
						position++
						goto l1051
					l1053:
						position, tokenIndex = position1051, tokenIndex1051
						if buffer[position] != rune('@') {
							goto l1047
						}
						position++
					}
				l1051:
					goto l1046
				l1047:
					position, tokenIndex = position1047, tokenIndex1047
				}
				add(ruleSection, position1045)
			}
			return true
		l1044:
			position, tokenIndex = position1044, tokenIndex1044
			return false
		},
		/* 63 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position1054, tokenIndex1054 := position, tokenIndex
			{
				position1055 := position
				if buffer[position] != rune('%') {
					goto l1054
				}
				position++
				{
					position1056, tokenIndex1056 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l1057
					}
					position++
					goto l1056
				l1057:
					position, tokenIndex = position1056, tokenIndex1056
					if buffer[position] != rune('s') {
						goto l1054
					}
					position++
				}
			l1056:
				if buffer[position] != rune('s') {
					goto l1054
				}
				position++
				if buffer[position] != rune(':') {
					goto l1054
				}
				position++
				add(ruleSegmentRegister, position1055)
			}
			return true
		l1054:
			position, tokenIndex = position1054, tokenIndex1054
			return false
		},
	}
	p.rules = _rules
	return nil
}
