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
	ruleLabelContainingDirective
	ruleLabelContainingDirectiveName
	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",
	"LabelContainingDirective",
	"LabelContainingDirectiveName",
	"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  [62]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 / LabelContainingDirective / 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[ruleLabelContainingDirective]() {
							goto l14
						}
						goto l11
					l14:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleInstruction]() {
							goto l15
						}
						goto l11
					l15:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleDirective]() {
							goto l16
						}
						goto l11
					l16:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleComment]() {
							goto l17
						}
						goto l11
					l17:
						position, tokenIndex = position11, tokenIndex11
					}
				l11:
					{
						position18, tokenIndex18 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l18
						}
						goto l19
					l18:
						position, tokenIndex = position18, tokenIndex18
					}
				l19:
					{
						position20, tokenIndex20 := position, tokenIndex
						{
							position22, tokenIndex22 := position, tokenIndex
							if !_rules[ruleComment]() {
								goto l22
							}
							goto l23
						l22:
							position, tokenIndex = position22, tokenIndex22
						}
					l23:
						if buffer[position] != rune('\n') {
							goto l21
						}
						position++
						goto l20
					l21:
						position, tokenIndex = position20, tokenIndex20
						if buffer[position] != rune(';') {
							goto l5
						}
						position++
					}
				l20:
				}
			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 {
			position24, tokenIndex24 := position, tokenIndex
			{
				position25 := position
				{
					position26, tokenIndex26 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l27
					}
					position++
					{
						position28, tokenIndex28 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l29
						}
						position++
						goto l28
					l29:
						position, tokenIndex = position28, tokenIndex28
						if buffer[position] != rune('G') {
							goto l27
						}
						position++
					}
				l28:
					{
						position30, tokenIndex30 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l31
						}
						position++
						goto l30
					l31:
						position, tokenIndex = position30, tokenIndex30
						if buffer[position] != rune('L') {
							goto l27
						}
						position++
					}
				l30:
					{
						position32, tokenIndex32 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l33
						}
						position++
						goto l32
					l33:
						position, tokenIndex = position32, tokenIndex32
						if buffer[position] != rune('O') {
							goto l27
						}
						position++
					}
				l32:
					{
						position34, tokenIndex34 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l35
						}
						position++
						goto l34
					l35:
						position, tokenIndex = position34, tokenIndex34
						if buffer[position] != rune('B') {
							goto l27
						}
						position++
					}
				l34:
					{
						position36, tokenIndex36 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l37
						}
						position++
						goto l36
					l37:
						position, tokenIndex = position36, tokenIndex36
						if buffer[position] != rune('A') {
							goto l27
						}
						position++
					}
				l36:
					{
						position38, tokenIndex38 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l39
						}
						position++
						goto l38
					l39:
						position, tokenIndex = position38, tokenIndex38
						if buffer[position] != rune('L') {
							goto l27
						}
						position++
					}
				l38:
					goto l26
				l27:
					position, tokenIndex = position26, tokenIndex26
					if buffer[position] != rune('.') {
						goto l24
					}
					position++
					{
						position40, tokenIndex40 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l41
						}
						position++
						goto l40
					l41:
						position, tokenIndex = position40, tokenIndex40
						if buffer[position] != rune('G') {
							goto l24
						}
						position++
					}
				l40:
					{
						position42, tokenIndex42 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l43
						}
						position++
						goto l42
					l43:
						position, tokenIndex = position42, tokenIndex42
						if buffer[position] != rune('L') {
							goto l24
						}
						position++
					}
				l42:
					{
						position44, tokenIndex44 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l45
						}
						position++
						goto l44
					l45:
						position, tokenIndex = position44, tokenIndex44
						if buffer[position] != rune('O') {
							goto l24
						}
						position++
					}
				l44:
					{
						position46, tokenIndex46 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l47
						}
						position++
						goto l46
					l47:
						position, tokenIndex = position46, tokenIndex46
						if buffer[position] != rune('B') {
							goto l24
						}
						position++
					}
				l46:
					{
						position48, tokenIndex48 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l49
						}
						position++
						goto l48
					l49:
						position, tokenIndex = position48, tokenIndex48
						if buffer[position] != rune('L') {
							goto l24
						}
						position++
					}
				l48:
				}
			l26:
				if !_rules[ruleWS]() {
					goto l24
				}
				if !_rules[ruleSymbolName]() {
					goto l24
				}
				add(ruleGlobalDirective, position25)
			}
			return true
		l24:
			position, tokenIndex = position24, tokenIndex24
			return false
		},
		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
		func() bool {
			position50, tokenIndex50 := position, tokenIndex
			{
				position51 := position
				if buffer[position] != rune('.') {
					goto l50
				}
				position++
				if !_rules[ruleDirectiveName]() {
					goto l50
				}
				{
					position52, tokenIndex52 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l52
					}
					if !_rules[ruleArgs]() {
						goto l52
					}
					goto l53
				l52:
					position, tokenIndex = position52, tokenIndex52
				}
			l53:
				add(ruleDirective, position51)
			}
			return true
		l50:
			position, tokenIndex = position50, tokenIndex50
			return false
		},
		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
		func() bool {
			position54, tokenIndex54 := position, tokenIndex
			{
				position55 := position
				{
					position58, tokenIndex58 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l59
					}
					position++
					goto l58
				l59:
					position, tokenIndex = position58, tokenIndex58
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l60
					}
					position++
					goto l58
				l60:
					position, tokenIndex = position58, tokenIndex58
					{
						position62, tokenIndex62 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l63
						}
						position++
						goto l62
					l63:
						position, tokenIndex = position62, tokenIndex62
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l61
						}
						position++
					}
				l62:
					goto l58
				l61:
					position, tokenIndex = position58, tokenIndex58
					if buffer[position] != rune('_') {
						goto l54
					}
					position++
				}
			l58:
			l56:
				{
					position57, tokenIndex57 := position, tokenIndex
					{
						position64, tokenIndex64 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l65
						}
						position++
						goto l64
					l65:
						position, tokenIndex = position64, tokenIndex64
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l66
						}
						position++
						goto l64
					l66:
						position, tokenIndex = position64, tokenIndex64
						{
							position68, tokenIndex68 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l69
							}
							position++
							goto l68
						l69:
							position, tokenIndex = position68, tokenIndex68
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l67
							}
							position++
						}
					l68:
						goto l64
					l67:
						position, tokenIndex = position64, tokenIndex64
						if buffer[position] != rune('_') {
							goto l57
						}
						position++
					}
				l64:
					goto l56
				l57:
					position, tokenIndex = position57, tokenIndex57
				}
				add(ruleDirectiveName, position55)
			}
			return true
		l54:
			position, tokenIndex = position54, tokenIndex54
			return false
		},
		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
		func() bool {
			position70, tokenIndex70 := position, tokenIndex
			{
				position71 := position
				{
					position72, tokenIndex72 := position, tokenIndex
					if !_rules[ruleFileDirective]() {
						goto l73
					}
					goto l72
				l73:
					position, tokenIndex = position72, tokenIndex72
					if !_rules[ruleLocDirective]() {
						goto l70
					}
				}
			l72:
				add(ruleLocationDirective, position71)
			}
			return true
		l70:
			position, tokenIndex = position70, tokenIndex70
			return false
		},
		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
		func() bool {
			position74, tokenIndex74 := position, tokenIndex
			{
				position75 := position
				if buffer[position] != rune('.') {
					goto l74
				}
				position++
				{
					position76, tokenIndex76 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l77
					}
					position++
					goto l76
				l77:
					position, tokenIndex = position76, tokenIndex76
					if buffer[position] != rune('F') {
						goto l74
					}
					position++
				}
			l76:
				{
					position78, tokenIndex78 := position, tokenIndex
					if buffer[position] != rune('i') {
						goto l79
					}
					position++
					goto l78
				l79:
					position, tokenIndex = position78, tokenIndex78
					if buffer[position] != rune('I') {
						goto l74
					}
					position++
				}
			l78:
				{
					position80, tokenIndex80 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l81
					}
					position++
					goto l80
				l81:
					position, tokenIndex = position80, tokenIndex80
					if buffer[position] != rune('L') {
						goto l74
					}
					position++
				}
			l80:
				{
					position82, tokenIndex82 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l83
					}
					position++
					goto l82
				l83:
					position, tokenIndex = position82, tokenIndex82
					if buffer[position] != rune('E') {
						goto l74
					}
					position++
				}
			l82:
				if !_rules[ruleWS]() {
					goto l74
				}
				{
					position86, tokenIndex86 := position, tokenIndex
					{
						position87, tokenIndex87 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l88
						}
						position++
						goto l87
					l88:
						position, tokenIndex = position87, tokenIndex87
						if buffer[position] != rune('\n') {
							goto l86
						}
						position++
					}
				l87:
					goto l74
				l86:
					position, tokenIndex = position86, tokenIndex86
				}
				if !matchDot() {
					goto l74
				}
			l84:
				{
					position85, tokenIndex85 := position, tokenIndex
					{
						position89, tokenIndex89 := position, tokenIndex
						{
							position90, tokenIndex90 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l91
							}
							position++
							goto l90
						l91:
							position, tokenIndex = position90, tokenIndex90
							if buffer[position] != rune('\n') {
								goto l89
							}
							position++
						}
					l90:
						goto l85
					l89:
						position, tokenIndex = position89, tokenIndex89
					}
					if !matchDot() {
						goto l85
					}
					goto l84
				l85:
					position, tokenIndex = position85, tokenIndex85
				}
				add(ruleFileDirective, position75)
			}
			return true
		l74:
			position, tokenIndex = position74, tokenIndex74
			return false
		},
		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
		func() bool {
			position92, tokenIndex92 := position, tokenIndex
			{
				position93 := position
				if buffer[position] != rune('.') {
					goto l92
				}
				position++
				{
					position94, tokenIndex94 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l95
					}
					position++
					goto l94
				l95:
					position, tokenIndex = position94, tokenIndex94
					if buffer[position] != rune('L') {
						goto l92
					}
					position++
				}
			l94:
				{
					position96, tokenIndex96 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l97
					}
					position++
					goto l96
				l97:
					position, tokenIndex = position96, tokenIndex96
					if buffer[position] != rune('O') {
						goto l92
					}
					position++
				}
			l96:
				{
					position98, tokenIndex98 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l99
					}
					position++
					goto l98
				l99:
					position, tokenIndex = position98, tokenIndex98
					if buffer[position] != rune('C') {
						goto l92
					}
					position++
				}
			l98:
				if !_rules[ruleWS]() {
					goto l92
				}
				{
					position102, tokenIndex102 := position, tokenIndex
					{
						position103, tokenIndex103 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l104
						}
						position++
						goto l103
					l104:
						position, tokenIndex = position103, tokenIndex103
						if buffer[position] != rune('/') {
							goto l105
						}
						position++
						goto l103
					l105:
						position, tokenIndex = position103, tokenIndex103
						if buffer[position] != rune('\n') {
							goto l102
						}
						position++
					}
				l103:
					goto l92
				l102:
					position, tokenIndex = position102, tokenIndex102
				}
				if !matchDot() {
					goto l92
				}
			l100:
				{
					position101, tokenIndex101 := position, tokenIndex
					{
						position106, tokenIndex106 := position, tokenIndex
						{
							position107, tokenIndex107 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l108
							}
							position++
							goto l107
						l108:
							position, tokenIndex = position107, tokenIndex107
							if buffer[position] != rune('/') {
								goto l109
							}
							position++
							goto l107
						l109:
							position, tokenIndex = position107, tokenIndex107
							if buffer[position] != rune('\n') {
								goto l106
							}
							position++
						}
					l107:
						goto l101
					l106:
						position, tokenIndex = position106, tokenIndex106
					}
					if !matchDot() {
						goto l101
					}
					goto l100
				l101:
					position, tokenIndex = position101, tokenIndex101
				}
				add(ruleLocDirective, position93)
			}
			return true
		l92:
			position, tokenIndex = position92, tokenIndex92
			return false
		},
		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
		func() bool {
			position110, tokenIndex110 := position, tokenIndex
			{
				position111 := position
				if !_rules[ruleArg]() {
					goto l110
				}
			l112:
				{
					position113, tokenIndex113 := position, tokenIndex
					{
						position114, tokenIndex114 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l114
						}
						goto l115
					l114:
						position, tokenIndex = position114, tokenIndex114
					}
				l115:
					if buffer[position] != rune(',') {
						goto l113
					}
					position++
					{
						position116, tokenIndex116 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l116
						}
						goto l117
					l116:
						position, tokenIndex = position116, tokenIndex116
					}
				l117:
					if !_rules[ruleArg]() {
						goto l113
					}
					goto l112
				l113:
					position, tokenIndex = position113, tokenIndex113
				}
				add(ruleArgs, position111)
			}
			return true
		l110:
			position, tokenIndex = position110, tokenIndex110
			return false
		},
		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
		func() bool {
			{
				position119 := position
				{
					position120, tokenIndex120 := position, tokenIndex
					if !_rules[ruleQuotedArg]() {
						goto l121
					}
					goto l120
				l121:
					position, tokenIndex = position120, tokenIndex120
				l122:
					{
						position123, tokenIndex123 := position, tokenIndex
						{
							position124, tokenIndex124 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l125
							}
							position++
							goto l124
						l125:
							position, tokenIndex = position124, tokenIndex124
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l126
							}
							position++
							goto l124
						l126:
							position, tokenIndex = position124, tokenIndex124
							{
								position128, tokenIndex128 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('z') {
									goto l129
								}
								position++
								goto l128
							l129:
								position, tokenIndex = position128, tokenIndex128
								if c := buffer[position]; c < rune('A') || c > rune('Z') {
									goto l127
								}
								position++
							}
						l128:
							goto l124
						l127:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('%') {
								goto l130
							}
							position++
							goto l124
						l130:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('+') {
								goto l131
							}
							position++
							goto l124
						l131:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('-') {
								goto l132
							}
							position++
							goto l124
						l132:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('*') {
								goto l133
							}
							position++
							goto l124
						l133:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('_') {
								goto l134
							}
							position++
							goto l124
						l134:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('@') {
								goto l135
							}
							position++
							goto l124
						l135:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('.') {
								goto l123
							}
							position++
						}
					l124:
						goto l122
					l123:
						position, tokenIndex = position123, tokenIndex123
					}
				}
			l120:
				add(ruleArg, position119)
			}
			return true
		},
		/* 10 QuotedArg <- <('"' QuotedText '"')> */
		func() bool {
			position136, tokenIndex136 := position, tokenIndex
			{
				position137 := position
				if buffer[position] != rune('"') {
					goto l136
				}
				position++
				if !_rules[ruleQuotedText]() {
					goto l136
				}
				if buffer[position] != rune('"') {
					goto l136
				}
				position++
				add(ruleQuotedArg, position137)
			}
			return true
		l136:
			position, tokenIndex = position136, tokenIndex136
			return false
		},
		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
		func() bool {
			{
				position139 := position
			l140:
				{
					position141, tokenIndex141 := position, tokenIndex
					{
						position142, tokenIndex142 := position, tokenIndex
						if !_rules[ruleEscapedChar]() {
							goto l143
						}
						goto l142
					l143:
						position, tokenIndex = position142, tokenIndex142
						{
							position144, tokenIndex144 := position, tokenIndex
							if buffer[position] != rune('"') {
								goto l144
							}
							position++
							goto l141
						l144:
							position, tokenIndex = position144, tokenIndex144
						}
						if !matchDot() {
							goto l141
						}
					}
				l142:
					goto l140
				l141:
					position, tokenIndex = position141, tokenIndex141
				}
				add(ruleQuotedText, position139)
			}
			return true
		},
		/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
		func() bool {
			position145, tokenIndex145 := position, tokenIndex
			{
				position146 := position
				if !_rules[ruleLabelContainingDirectiveName]() {
					goto l145
				}
				if !_rules[ruleWS]() {
					goto l145
				}
				if !_rules[ruleSymbolArgs]() {
					goto l145
				}
				add(ruleLabelContainingDirective, position146)
			}
			return true
		l145:
			position, tokenIndex = position145, tokenIndex145
			return false
		},
		/* 13 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('h' / 'H') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
		func() bool {
			position147, tokenIndex147 := position, tokenIndex
			{
				position148 := position
				{
					position149, tokenIndex149 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l150
					}
					position++
					{
						position151, tokenIndex151 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l152
						}
						position++
						goto l151
					l152:
						position, tokenIndex = position151, tokenIndex151
						if buffer[position] != rune('X') {
							goto l150
						}
						position++
					}
				l151:
					{
						position153, tokenIndex153 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l154
						}
						position++
						goto l153
					l154:
						position, tokenIndex = position153, tokenIndex153
						if buffer[position] != rune('W') {
							goto l150
						}
						position++
					}
				l153:
					{
						position155, tokenIndex155 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l156
						}
						position++
						goto l155
					l156:
						position, tokenIndex = position155, tokenIndex155
						if buffer[position] != rune('O') {
							goto l150
						}
						position++
					}
				l155:
					{
						position157, tokenIndex157 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l158
						}
						position++
						goto l157
					l158:
						position, tokenIndex = position157, tokenIndex157
						if buffer[position] != rune('R') {
							goto l150
						}
						position++
					}
				l157:
					{
						position159, tokenIndex159 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l160
						}
						position++
						goto l159
					l160:
						position, tokenIndex = position159, tokenIndex159
						if buffer[position] != rune('D') {
							goto l150
						}
						position++
					}
				l159:
					goto l149
				l150:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l161
					}
					position++
					{
						position162, tokenIndex162 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l163
						}
						position++
						goto l162
					l163:
						position, tokenIndex = position162, tokenIndex162
						if buffer[position] != rune('W') {
							goto l161
						}
						position++
					}
				l162:
					{
						position164, tokenIndex164 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l165
						}
						position++
						goto l164
					l165:
						position, tokenIndex = position164, tokenIndex164
						if buffer[position] != rune('O') {
							goto l161
						}
						position++
					}
				l164:
					{
						position166, tokenIndex166 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l167
						}
						position++
						goto l166
					l167:
						position, tokenIndex = position166, tokenIndex166
						if buffer[position] != rune('R') {
							goto l161
						}
						position++
					}
				l166:
					{
						position168, tokenIndex168 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l169
						}
						position++
						goto l168
					l169:
						position, tokenIndex = position168, tokenIndex168
						if buffer[position] != rune('D') {
							goto l161
						}
						position++
					}
				l168:
					goto l149
				l161:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l170
					}
					position++
					{
						position171, tokenIndex171 := position, tokenIndex
						if buffer[position] != rune('h') {
							goto l172
						}
						position++
						goto l171
					l172:
						position, tokenIndex = position171, tokenIndex171
						if buffer[position] != rune('H') {
							goto l170
						}
						position++
					}
				l171:
					{
						position173, tokenIndex173 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l174
						}
						position++
						goto l173
					l174:
						position, tokenIndex = position173, tokenIndex173
						if buffer[position] != rune('W') {
							goto l170
						}
						position++
					}
				l173:
					{
						position175, tokenIndex175 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l176
						}
						position++
						goto l175
					l176:
						position, tokenIndex = position175, tokenIndex175
						if buffer[position] != rune('O') {
							goto l170
						}
						position++
					}
				l175:
					{
						position177, tokenIndex177 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l178
						}
						position++
						goto l177
					l178:
						position, tokenIndex = position177, tokenIndex177
						if buffer[position] != rune('R') {
							goto l170
						}
						position++
					}
				l177:
					{
						position179, tokenIndex179 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l180
						}
						position++
						goto l179
					l180:
						position, tokenIndex = position179, tokenIndex179
						if buffer[position] != rune('D') {
							goto l170
						}
						position++
					}
				l179:
					goto l149
				l170:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l181
					}
					position++
					{
						position182, tokenIndex182 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l183
						}
						position++
						goto l182
					l183:
						position, tokenIndex = position182, tokenIndex182
						if buffer[position] != rune('L') {
							goto l181
						}
						position++
					}
				l182:
					{
						position184, tokenIndex184 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l185
						}
						position++
						goto l184
					l185:
						position, tokenIndex = position184, tokenIndex184
						if buffer[position] != rune('O') {
							goto l181
						}
						position++
					}
				l184:
					{
						position186, tokenIndex186 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l187
						}
						position++
						goto l186
					l187:
						position, tokenIndex = position186, tokenIndex186
						if buffer[position] != rune('N') {
							goto l181
						}
						position++
					}
				l186:
					{
						position188, tokenIndex188 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l189
						}
						position++
						goto l188
					l189:
						position, tokenIndex = position188, tokenIndex188
						if buffer[position] != rune('G') {
							goto l181
						}
						position++
					}
				l188:
					goto l149
				l181:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l190
					}
					position++
					{
						position191, tokenIndex191 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l192
						}
						position++
						goto l191
					l192:
						position, tokenIndex = position191, tokenIndex191
						if buffer[position] != rune('S') {
							goto l190
						}
						position++
					}
				l191:
					{
						position193, tokenIndex193 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l194
						}
						position++
						goto l193
					l194:
						position, tokenIndex = position193, tokenIndex193
						if buffer[position] != rune('E') {
							goto l190
						}
						position++
					}
				l193:
					{
						position195, tokenIndex195 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l196
						}
						position++
						goto l195
					l196:
						position, tokenIndex = position195, tokenIndex195
						if buffer[position] != rune('T') {
							goto l190
						}
						position++
					}
				l195:
					goto l149
				l190:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l197
					}
					position++
					{
						position198, tokenIndex198 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l199
						}
						position++
						goto l198
					l199:
						position, tokenIndex = position198, tokenIndex198
						if buffer[position] != rune('B') {
							goto l197
						}
						position++
					}
				l198:
					{
						position200, tokenIndex200 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l201
						}
						position++
						goto l200
					l201:
						position, tokenIndex = position200, tokenIndex200
						if buffer[position] != rune('Y') {
							goto l197
						}
						position++
					}
				l200:
					{
						position202, tokenIndex202 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l203
						}
						position++
						goto l202
					l203:
						position, tokenIndex = position202, tokenIndex202
						if buffer[position] != rune('T') {
							goto l197
						}
						position++
					}
				l202:
					{
						position204, tokenIndex204 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l205
						}
						position++
						goto l204
					l205:
						position, tokenIndex = position204, tokenIndex204
						if buffer[position] != rune('E') {
							goto l197
						}
						position++
					}
				l204:
					goto l149
				l197:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l206
					}
					position++
					if buffer[position] != rune('8') {
						goto l206
					}
					position++
					{
						position207, tokenIndex207 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l208
						}
						position++
						goto l207
					l208:
						position, tokenIndex = position207, tokenIndex207
						if buffer[position] != rune('B') {
							goto l206
						}
						position++
					}
				l207:
					{
						position209, tokenIndex209 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l210
						}
						position++
						goto l209
					l210:
						position, tokenIndex = position209, tokenIndex209
						if buffer[position] != rune('Y') {
							goto l206
						}
						position++
					}
				l209:
					{
						position211, tokenIndex211 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l212
						}
						position++
						goto l211
					l212:
						position, tokenIndex = position211, tokenIndex211
						if buffer[position] != rune('T') {
							goto l206
						}
						position++
					}
				l211:
					{
						position213, tokenIndex213 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l214
						}
						position++
						goto l213
					l214:
						position, tokenIndex = position213, tokenIndex213
						if buffer[position] != rune('E') {
							goto l206
						}
						position++
					}
				l213:
					goto l149
				l206:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l215
					}
					position++
					if buffer[position] != rune('4') {
						goto l215
					}
					position++
					{
						position216, tokenIndex216 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l217
						}
						position++
						goto l216
					l217:
						position, tokenIndex = position216, tokenIndex216
						if buffer[position] != rune('B') {
							goto l215
						}
						position++
					}
				l216:
					{
						position218, tokenIndex218 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l219
						}
						position++
						goto l218
					l219:
						position, tokenIndex = position218, tokenIndex218
						if buffer[position] != rune('Y') {
							goto l215
						}
						position++
					}
				l218:
					{
						position220, tokenIndex220 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l221
						}
						position++
						goto l220
					l221:
						position, tokenIndex = position220, tokenIndex220
						if buffer[position] != rune('T') {
							goto l215
						}
						position++
					}
				l220:
					{
						position222, tokenIndex222 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l223
						}
						position++
						goto l222
					l223:
						position, tokenIndex = position222, tokenIndex222
						if buffer[position] != rune('E') {
							goto l215
						}
						position++
					}
				l222:
					goto l149
				l215:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l224
					}
					position++
					{
						position225, tokenIndex225 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l226
						}
						position++
						goto l225
					l226:
						position, tokenIndex = position225, tokenIndex225
						if buffer[position] != rune('Q') {
							goto l224
						}
						position++
					}
				l225:
					{
						position227, tokenIndex227 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l228
						}
						position++
						goto l227
					l228:
						position, tokenIndex = position227, tokenIndex227
						if buffer[position] != rune('U') {
							goto l224
						}
						position++
					}
				l227:
					{
						position229, tokenIndex229 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l230
						}
						position++
						goto l229
					l230:
						position, tokenIndex = position229, tokenIndex229
						if buffer[position] != rune('A') {
							goto l224
						}
						position++
					}
				l229:
					{
						position231, tokenIndex231 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l232
						}
						position++
						goto l231
					l232:
						position, tokenIndex = position231, tokenIndex231
						if buffer[position] != rune('D') {
							goto l224
						}
						position++
					}
				l231:
					goto l149
				l224:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l233
					}
					position++
					{
						position234, tokenIndex234 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l235
						}
						position++
						goto l234
					l235:
						position, tokenIndex = position234, tokenIndex234
						if buffer[position] != rune('T') {
							goto l233
						}
						position++
					}
				l234:
					{
						position236, tokenIndex236 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l237
						}
						position++
						goto l236
					l237:
						position, tokenIndex = position236, tokenIndex236
						if buffer[position] != rune('C') {
							goto l233
						}
						position++
					}
				l236:
					goto l149
				l233:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l238
					}
					position++
					{
						position239, tokenIndex239 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l240
						}
						position++
						goto l239
					l240:
						position, tokenIndex = position239, tokenIndex239
						if buffer[position] != rune('L') {
							goto l238
						}
						position++
					}
				l239:
					{
						position241, tokenIndex241 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l242
						}
						position++
						goto l241
					l242:
						position, tokenIndex = position241, tokenIndex241
						if buffer[position] != rune('O') {
							goto l238
						}
						position++
					}
				l241:
					{
						position243, tokenIndex243 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l244
						}
						position++
						goto l243
					l244:
						position, tokenIndex = position243, tokenIndex243
						if buffer[position] != rune('C') {
							goto l238
						}
						position++
					}
				l243:
					{
						position245, tokenIndex245 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l246
						}
						position++
						goto l245
					l246:
						position, tokenIndex = position245, tokenIndex245
						if buffer[position] != rune('A') {
							goto l238
						}
						position++
					}
				l245:
					{
						position247, tokenIndex247 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l248
						}
						position++
						goto l247
					l248:
						position, tokenIndex = position247, tokenIndex247
						if buffer[position] != rune('L') {
							goto l238
						}
						position++
					}
				l247:
					{
						position249, tokenIndex249 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l250
						}
						position++
						goto l249
					l250:
						position, tokenIndex = position249, tokenIndex249
						if buffer[position] != rune('E') {
							goto l238
						}
						position++
					}
				l249:
					{
						position251, tokenIndex251 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l252
						}
						position++
						goto l251
					l252:
						position, tokenIndex = position251, tokenIndex251
						if buffer[position] != rune('N') {
							goto l238
						}
						position++
					}
				l251:
					{
						position253, tokenIndex253 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l254
						}
						position++
						goto l253
					l254:
						position, tokenIndex = position253, tokenIndex253
						if buffer[position] != rune('T') {
							goto l238
						}
						position++
					}
				l253:
					{
						position255, tokenIndex255 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l256
						}
						position++
						goto l255
					l256:
						position, tokenIndex = position255, tokenIndex255
						if buffer[position] != rune('R') {
							goto l238
						}
						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 l238
						}
						position++
					}
				l257:
					goto l149
				l238:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l259
					}
					position++
					{
						position260, tokenIndex260 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l261
						}
						position++
						goto l260
					l261:
						position, tokenIndex = position260, tokenIndex260
						if buffer[position] != rune('S') {
							goto l259
						}
						position++
					}
				l260:
					{
						position262, tokenIndex262 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l263
						}
						position++
						goto l262
					l263:
						position, tokenIndex = position262, tokenIndex262
						if buffer[position] != rune('I') {
							goto l259
						}
						position++
					}
				l262:
					{
						position264, tokenIndex264 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l265
						}
						position++
						goto l264
					l265:
						position, tokenIndex = position264, tokenIndex264
						if buffer[position] != rune('Z') {
							goto l259
						}
						position++
					}
				l264:
					{
						position266, tokenIndex266 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l267
						}
						position++
						goto l266
					l267:
						position, tokenIndex = position266, tokenIndex266
						if buffer[position] != rune('E') {
							goto l259
						}
						position++
					}
				l266:
					goto l149
				l259:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l268
					}
					position++
					{
						position269, tokenIndex269 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l270
						}
						position++
						goto l269
					l270:
						position, tokenIndex = position269, tokenIndex269
						if buffer[position] != rune('T') {
							goto l268
						}
						position++
					}
				l269:
					{
						position271, tokenIndex271 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l272
						}
						position++
						goto l271
					l272:
						position, tokenIndex = position271, tokenIndex271
						if buffer[position] != rune('Y') {
							goto l268
						}
						position++
					}
				l271:
					{
						position273, tokenIndex273 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l274
						}
						position++
						goto l273
					l274:
						position, tokenIndex = position273, tokenIndex273
						if buffer[position] != rune('P') {
							goto l268
						}
						position++
					}
				l273:
					{
						position275, tokenIndex275 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l276
						}
						position++
						goto l275
					l276:
						position, tokenIndex = position275, tokenIndex275
						if buffer[position] != rune('E') {
							goto l268
						}
						position++
					}
				l275:
					goto l149
				l268:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l277
					}
					position++
					{
						position278, tokenIndex278 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l279
						}
						position++
						goto l278
					l279:
						position, tokenIndex = position278, tokenIndex278
						if buffer[position] != rune('U') {
							goto l277
						}
						position++
					}
				l278:
					{
						position280, tokenIndex280 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l281
						}
						position++
						goto l280
					l281:
						position, tokenIndex = position280, tokenIndex280
						if buffer[position] != rune('L') {
							goto l277
						}
						position++
					}
				l280:
					{
						position282, tokenIndex282 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l283
						}
						position++
						goto l282
					l283:
						position, tokenIndex = position282, tokenIndex282
						if buffer[position] != rune('E') {
							goto l277
						}
						position++
					}
				l282:
					{
						position284, tokenIndex284 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l285
						}
						position++
						goto l284
					l285:
						position, tokenIndex = position284, tokenIndex284
						if buffer[position] != rune('B') {
							goto l277
						}
						position++
					}
				l284:
					if buffer[position] != rune('1') {
						goto l277
					}
					position++
					if buffer[position] != rune('2') {
						goto l277
					}
					position++
					if buffer[position] != rune('8') {
						goto l277
					}
					position++
					goto l149
				l277:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l147
					}
					position++
					{
						position286, tokenIndex286 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l287
						}
						position++
						goto l286
					l287:
						position, tokenIndex = position286, tokenIndex286
						if buffer[position] != rune('S') {
							goto l147
						}
						position++
					}
				l286:
					{
						position288, tokenIndex288 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l289
						}
						position++
						goto l288
					l289:
						position, tokenIndex = position288, tokenIndex288
						if buffer[position] != rune('L') {
							goto l147
						}
						position++
					}
				l288:
					{
						position290, tokenIndex290 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l291
						}
						position++
						goto l290
					l291:
						position, tokenIndex = position290, tokenIndex290
						if buffer[position] != rune('E') {
							goto l147
						}
						position++
					}
				l290:
					{
						position292, tokenIndex292 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l293
						}
						position++
						goto l292
					l293:
						position, tokenIndex = position292, tokenIndex292
						if buffer[position] != rune('B') {
							goto l147
						}
						position++
					}
				l292:
					if buffer[position] != rune('1') {
						goto l147
					}
					position++
					if buffer[position] != rune('2') {
						goto l147
					}
					position++
					if buffer[position] != rune('8') {
						goto l147
					}
					position++
				}
			l149:
				add(ruleLabelContainingDirectiveName, position148)
			}
			return true
		l147:
			position, tokenIndex = position147, tokenIndex147
			return false
		},
		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
		func() bool {
			position294, tokenIndex294 := position, tokenIndex
			{
				position295 := position
				if !_rules[ruleSymbolArg]() {
					goto l294
				}
			l296:
				{
					position297, tokenIndex297 := position, tokenIndex
					{
						position298, tokenIndex298 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l298
						}
						goto l299
					l298:
						position, tokenIndex = position298, tokenIndex298
					}
				l299:
					if buffer[position] != rune(',') {
						goto l297
					}
					position++
					{
						position300, tokenIndex300 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l300
						}
						goto l301
					l300:
						position, tokenIndex = position300, tokenIndex300
					}
				l301:
					if !_rules[ruleSymbolArg]() {
						goto l297
					}
					goto l296
				l297:
					position, tokenIndex = position297, tokenIndex297
				}
				add(ruleSymbolArgs, position295)
			}
			return true
		l294:
			position, tokenIndex = position294, tokenIndex294
			return false
		},
		/* 15 SymbolArg <- <SymbolExpr> */
		func() bool {
			position302, tokenIndex302 := position, tokenIndex
			{
				position303 := position
				if !_rules[ruleSymbolExpr]() {
					goto l302
				}
				add(ruleSymbolArg, position303)
			}
			return true
		l302:
			position, tokenIndex = position302, tokenIndex302
			return false
		},
		/* 16 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
		func() bool {
			position304, tokenIndex304 := position, tokenIndex
			{
				position305 := position
				if !_rules[ruleSymbolAtom]() {
					goto l304
				}
				{
					position306, tokenIndex306 := position, tokenIndex
					{
						position308, tokenIndex308 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l308
						}
						goto l309
					l308:
						position, tokenIndex = position308, tokenIndex308
					}
				l309:
					if !_rules[ruleSymbolOperator]() {
						goto l306
					}
					{
						position310, tokenIndex310 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l310
						}
						goto l311
					l310:
						position, tokenIndex = position310, tokenIndex310
					}
				l311:
					if !_rules[ruleSymbolExpr]() {
						goto l306
					}
					goto l307
				l306:
					position, tokenIndex = position306, tokenIndex306
				}
			l307:
				add(ruleSymbolExpr, position305)
			}
			return true
		l304:
			position, tokenIndex = position304, tokenIndex304
			return false
		},
		/* 17 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
		func() bool {
			position312, tokenIndex312 := position, tokenIndex
			{
				position313 := position
				{
					position314, tokenIndex314 := position, tokenIndex
					if !_rules[ruleLocalLabelRef]() {
						goto l315
					}
					goto l314
				l315:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleOffset]() {
						goto l316
					}
					goto l314
				l316:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolType]() {
						goto l317
					}
					goto l314
				l317:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleLocalSymbol]() {
						goto l318
					}
					{
						position319, tokenIndex319 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l319
						}
						goto l320
					l319:
						position, tokenIndex = position319, tokenIndex319
					}
				l320:
					goto l314
				l318:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolName]() {
						goto l321
					}
					if !_rules[ruleOffset]() {
						goto l321
					}
					goto l314
				l321:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolName]() {
						goto l322
					}
					{
						position323, tokenIndex323 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l323
						}
						goto l324
					l323:
						position, tokenIndex = position323, tokenIndex323
					}
				l324:
					goto l314
				l322:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleDot]() {
						goto l325
					}
					goto l314
				l325:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleOpenParen]() {
						goto l312
					}
					{
						position326, tokenIndex326 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l326
						}
						goto l327
					l326:
						position, tokenIndex = position326, tokenIndex326
					}
				l327:
					if !_rules[ruleSymbolExpr]() {
						goto l312
					}
					{
						position328, tokenIndex328 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l328
						}
						goto l329
					l328:
						position, tokenIndex = position328, tokenIndex328
					}
				l329:
					if !_rules[ruleCloseParen]() {
						goto l312
					}
				}
			l314:
				add(ruleSymbolAtom, position313)
			}
			return true
		l312:
			position, tokenIndex = position312, tokenIndex312
			return false
		},
		/* 18 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
		func() bool {
			position330, tokenIndex330 := position, tokenIndex
			{
				position331 := position
				{
					position332, tokenIndex332 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l333
					}
					position++
					goto l332
				l333:
					position, tokenIndex = position332, tokenIndex332
					if buffer[position] != rune('-') {
						goto l334
					}
					position++
					goto l332
				l334:
					position, tokenIndex = position332, tokenIndex332
					if buffer[position] != rune('|') {
						goto l335
					}
					position++
					goto l332
				l335:
					position, tokenIndex = position332, tokenIndex332
					if buffer[position] != rune('<') {
						goto l336
					}
					position++
					if buffer[position] != rune('<') {
						goto l336
					}
					position++
					goto l332
				l336:
					position, tokenIndex = position332, tokenIndex332
					if buffer[position] != rune('>') {
						goto l330
					}
					position++
					if buffer[position] != rune('>') {
						goto l330
					}
					position++
				}
			l332:
				add(ruleSymbolOperator, position331)
			}
			return true
		l330:
			position, tokenIndex = position330, tokenIndex330
			return false
		},
		/* 19 OpenParen <- <'('> */
		func() bool {
			position337, tokenIndex337 := position, tokenIndex
			{
				position338 := position
				if buffer[position] != rune('(') {
					goto l337
				}
				position++
				add(ruleOpenParen, position338)
			}
			return true
		l337:
			position, tokenIndex = position337, tokenIndex337
			return false
		},
		/* 20 CloseParen <- <')'> */
		func() bool {
			position339, tokenIndex339 := position, tokenIndex
			{
				position340 := position
				if buffer[position] != rune(')') {
					goto l339
				}
				position++
				add(ruleCloseParen, position340)
			}
			return true
		l339:
			position, tokenIndex = position339, tokenIndex339
			return false
		},
		/* 21 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position341, tokenIndex341 := position, tokenIndex
			{
				position342 := position
				{
					position343, tokenIndex343 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l344
					}
					position++
					goto l343
				l344:
					position, tokenIndex = position343, tokenIndex343
					if buffer[position] != rune('%') {
						goto l341
					}
					position++
				}
			l343:
				{
					position345, tokenIndex345 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l346
					}
					position++
					if buffer[position] != rune('u') {
						goto l346
					}
					position++
					if buffer[position] != rune('n') {
						goto l346
					}
					position++
					if buffer[position] != rune('c') {
						goto l346
					}
					position++
					if buffer[position] != rune('t') {
						goto l346
					}
					position++
					if buffer[position] != rune('i') {
						goto l346
					}
					position++
					if buffer[position] != rune('o') {
						goto l346
					}
					position++
					if buffer[position] != rune('n') {
						goto l346
					}
					position++
					goto l345
				l346:
					position, tokenIndex = position345, tokenIndex345
					if buffer[position] != rune('o') {
						goto l341
					}
					position++
					if buffer[position] != rune('b') {
						goto l341
					}
					position++
					if buffer[position] != rune('j') {
						goto l341
					}
					position++
					if buffer[position] != rune('e') {
						goto l341
					}
					position++
					if buffer[position] != rune('c') {
						goto l341
					}
					position++
					if buffer[position] != rune('t') {
						goto l341
					}
					position++
				}
			l345:
				add(ruleSymbolType, position342)
			}
			return true
		l341:
			position, tokenIndex = position341, tokenIndex341
			return false
		},
		/* 22 Dot <- <'.'> */
		func() bool {
			position347, tokenIndex347 := position, tokenIndex
			{
				position348 := position
				if buffer[position] != rune('.') {
					goto l347
				}
				position++
				add(ruleDot, position348)
			}
			return true
		l347:
			position, tokenIndex = position347, tokenIndex347
			return false
		},
		/* 23 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position349, tokenIndex349 := position, tokenIndex
			{
				position350 := position
				if buffer[position] != rune('[') {
					goto l349
				}
				position++
				if buffer[position] != rune('T') {
					goto l349
				}
				position++
				if buffer[position] != rune('C') {
					goto l349
				}
				position++
				if buffer[position] != rune(']') {
					goto l349
				}
				position++
				add(ruleTCMarker, position350)
			}
			return true
		l349:
			position, tokenIndex = position349, tokenIndex349
			return false
		},
		/* 24 EscapedChar <- <('\\' .)> */
		func() bool {
			position351, tokenIndex351 := position, tokenIndex
			{
				position352 := position
				if buffer[position] != rune('\\') {
					goto l351
				}
				position++
				if !matchDot() {
					goto l351
				}
				add(ruleEscapedChar, position352)
			}
			return true
		l351:
			position, tokenIndex = position351, tokenIndex351
			return false
		},
		/* 25 WS <- <(' ' / '\t')+> */
		func() bool {
			position353, tokenIndex353 := position, tokenIndex
			{
				position354 := position
				{
					position357, tokenIndex357 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l358
					}
					position++
					goto l357
				l358:
					position, tokenIndex = position357, tokenIndex357
					if buffer[position] != rune('\t') {
						goto l353
					}
					position++
				}
			l357:
			l355:
				{
					position356, tokenIndex356 := position, tokenIndex
					{
						position359, tokenIndex359 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l360
						}
						position++
						goto l359
					l360:
						position, tokenIndex = position359, tokenIndex359
						if buffer[position] != rune('\t') {
							goto l356
						}
						position++
					}
				l359:
					goto l355
				l356:
					position, tokenIndex = position356, tokenIndex356
				}
				add(ruleWS, position354)
			}
			return true
		l353:
			position, tokenIndex = position353, tokenIndex353
			return false
		},
		/* 26 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position361, tokenIndex361 := position, tokenIndex
			{
				position362 := position
				{
					position363, tokenIndex363 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l364
					}
					position++
					if buffer[position] != rune('/') {
						goto l364
					}
					position++
					goto l363
				l364:
					position, tokenIndex = position363, tokenIndex363
					if buffer[position] != rune('#') {
						goto l361
					}
					position++
				}
			l363:
			l365:
				{
					position366, tokenIndex366 := position, tokenIndex
					{
						position367, tokenIndex367 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l367
						}
						position++
						goto l366
					l367:
						position, tokenIndex = position367, tokenIndex367
					}
					if !matchDot() {
						goto l366
					}
					goto l365
				l366:
					position, tokenIndex = position366, tokenIndex366
				}
				add(ruleComment, position362)
			}
			return true
		l361:
			position, tokenIndex = position361, tokenIndex361
			return false
		},
		/* 27 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position368, tokenIndex368 := position, tokenIndex
			{
				position369 := position
				{
					position370, tokenIndex370 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l371
					}
					goto l370
				l371:
					position, tokenIndex = position370, tokenIndex370
					if !_rules[ruleLocalLabel]() {
						goto l372
					}
					goto l370
				l372:
					position, tokenIndex = position370, tokenIndex370
					if !_rules[ruleSymbolName]() {
						goto l368
					}
				}
			l370:
				if buffer[position] != rune(':') {
					goto l368
				}
				position++
				add(ruleLabel, position369)
			}
			return true
		l368:
			position, tokenIndex = position368, tokenIndex368
			return false
		},
		/* 28 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position373, tokenIndex373 := position, tokenIndex
			{
				position374 := position
				{
					position375, tokenIndex375 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l376
					}
					position++
					goto l375
				l376:
					position, tokenIndex = position375, tokenIndex375
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l377
					}
					position++
					goto l375
				l377:
					position, tokenIndex = position375, tokenIndex375
					if buffer[position] != rune('.') {
						goto l378
					}
					position++
					goto l375
				l378:
					position, tokenIndex = position375, tokenIndex375
					if buffer[position] != rune('_') {
						goto l373
					}
					position++
				}
			l375:
			l379:
				{
					position380, tokenIndex380 := position, tokenIndex
					{
						position381, tokenIndex381 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l382
						}
						position++
						goto l381
					l382:
						position, tokenIndex = position381, tokenIndex381
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l383
						}
						position++
						goto l381
					l383:
						position, tokenIndex = position381, tokenIndex381
						if buffer[position] != rune('.') {
							goto l384
						}
						position++
						goto l381
					l384:
						position, tokenIndex = position381, tokenIndex381
						{
							position386, tokenIndex386 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l387
							}
							position++
							goto l386
						l387:
							position, tokenIndex = position386, tokenIndex386
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l385
							}
							position++
						}
					l386:
						goto l381
					l385:
						position, tokenIndex = position381, tokenIndex381
						if buffer[position] != rune('$') {
							goto l388
						}
						position++
						goto l381
					l388:
						position, tokenIndex = position381, tokenIndex381
						if buffer[position] != rune('_') {
							goto l380
						}
						position++
					}
				l381:
					goto l379
				l380:
					position, tokenIndex = position380, tokenIndex380
				}
				add(ruleSymbolName, position374)
			}
			return true
		l373:
			position, tokenIndex = position373, tokenIndex373
			return false
		},
		/* 29 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position389, tokenIndex389 := position, tokenIndex
			{
				position390 := position
				if buffer[position] != rune('.') {
					goto l389
				}
				position++
				if buffer[position] != rune('L') {
					goto l389
				}
				position++
				{
					position393, tokenIndex393 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l394
					}
					position++
					goto l393
				l394:
					position, tokenIndex = position393, tokenIndex393
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l395
					}
					position++
					goto l393
				l395:
					position, tokenIndex = position393, tokenIndex393
					{
						position397, tokenIndex397 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l398
						}
						position++
						goto l397
					l398:
						position, tokenIndex = position397, tokenIndex397
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l396
						}
						position++
					}
				l397:
					goto l393
				l396:
					position, tokenIndex = position393, tokenIndex393
					if buffer[position] != rune('.') {
						goto l399
					}
					position++
					goto l393
				l399:
					position, tokenIndex = position393, tokenIndex393
					{
						position401, tokenIndex401 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l402
						}
						position++
						goto l401
					l402:
						position, tokenIndex = position401, tokenIndex401
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l400
						}
						position++
					}
				l401:
					goto l393
				l400:
					position, tokenIndex = position393, tokenIndex393
					if buffer[position] != rune('$') {
						goto l403
					}
					position++
					goto l393
				l403:
					position, tokenIndex = position393, tokenIndex393
					if buffer[position] != rune('_') {
						goto l389
					}
					position++
				}
			l393:
			l391:
				{
					position392, tokenIndex392 := position, tokenIndex
					{
						position404, tokenIndex404 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l405
						}
						position++
						goto l404
					l405:
						position, tokenIndex = position404, tokenIndex404
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l406
						}
						position++
						goto l404
					l406:
						position, tokenIndex = position404, tokenIndex404
						{
							position408, tokenIndex408 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l409
							}
							position++
							goto l408
						l409:
							position, tokenIndex = position408, tokenIndex408
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l407
							}
							position++
						}
					l408:
						goto l404
					l407:
						position, tokenIndex = position404, tokenIndex404
						if buffer[position] != rune('.') {
							goto l410
						}
						position++
						goto l404
					l410:
						position, tokenIndex = position404, tokenIndex404
						{
							position412, tokenIndex412 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l413
							}
							position++
							goto l412
						l413:
							position, tokenIndex = position412, tokenIndex412
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l411
							}
							position++
						}
					l412:
						goto l404
					l411:
						position, tokenIndex = position404, tokenIndex404
						if buffer[position] != rune('$') {
							goto l414
						}
						position++
						goto l404
					l414:
						position, tokenIndex = position404, tokenIndex404
						if buffer[position] != rune('_') {
							goto l392
						}
						position++
					}
				l404:
					goto l391
				l392:
					position, tokenIndex = position392, tokenIndex392
				}
				add(ruleLocalSymbol, position390)
			}
			return true
		l389:
			position, tokenIndex = position389, tokenIndex389
			return false
		},
		/* 30 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position415, tokenIndex415 := position, tokenIndex
			{
				position416 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l415
				}
				position++
			l417:
				{
					position418, tokenIndex418 := position, tokenIndex
					{
						position419, tokenIndex419 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l420
						}
						position++
						goto l419
					l420:
						position, tokenIndex = position419, tokenIndex419
						if buffer[position] != rune('$') {
							goto l418
						}
						position++
					}
				l419:
					goto l417
				l418:
					position, tokenIndex = position418, tokenIndex418
				}
				add(ruleLocalLabel, position416)
			}
			return true
		l415:
			position, tokenIndex = position415, tokenIndex415
			return false
		},
		/* 31 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position421, tokenIndex421 := position, tokenIndex
			{
				position422 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l421
				}
				position++
			l423:
				{
					position424, tokenIndex424 := position, tokenIndex
					{
						position425, tokenIndex425 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l426
						}
						position++
						goto l425
					l426:
						position, tokenIndex = position425, tokenIndex425
						if buffer[position] != rune('$') {
							goto l424
						}
						position++
					}
				l425:
					goto l423
				l424:
					position, tokenIndex = position424, tokenIndex424
				}
				{
					position427, tokenIndex427 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l428
					}
					position++
					goto l427
				l428:
					position, tokenIndex = position427, tokenIndex427
					if buffer[position] != rune('f') {
						goto l421
					}
					position++
				}
			l427:
				add(ruleLocalLabelRef, position422)
			}
			return true
		l421:
			position, tokenIndex = position421, tokenIndex421
			return false
		},
		/* 32 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
		func() bool {
			position429, tokenIndex429 := position, tokenIndex
			{
				position430 := position
				{
					position431, tokenIndex431 := position, tokenIndex
					if buffer[position] != rune('n') {
						goto l432
					}
					position++
					goto l431
				l432:
					position, tokenIndex = position431, tokenIndex431
					if buffer[position] != rune('N') {
						goto l429
					}
					position++
				}
			l431:
				{
					position433, tokenIndex433 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l434
					}
					position++
					goto l433
				l434:
					position, tokenIndex = position433, tokenIndex433
					if buffer[position] != rune('O') {
						goto l429
					}
					position++
				}
			l433:
				{
					position435, tokenIndex435 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l436
					}
					position++
					goto l435
				l436:
					position, tokenIndex = position435, tokenIndex435
					if buffer[position] != rune('T') {
						goto l429
					}
					position++
				}
			l435:
				{
					position437, tokenIndex437 := position, tokenIndex
					if buffer[position] != rune('r') {
						goto l438
					}
					position++
					goto l437
				l438:
					position, tokenIndex = position437, tokenIndex437
					if buffer[position] != rune('R') {
						goto l429
					}
					position++
				}
			l437:
				{
					position439, tokenIndex439 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l440
					}
					position++
					goto l439
				l440:
					position, tokenIndex = position439, tokenIndex439
					if buffer[position] != rune('A') {
						goto l429
					}
					position++
				}
			l439:
				{
					position441, tokenIndex441 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l442
					}
					position++
					goto l441
				l442:
					position, tokenIndex = position441, tokenIndex441
					if buffer[position] != rune('C') {
						goto l429
					}
					position++
				}
			l441:
				{
					position443, tokenIndex443 := position, tokenIndex
					if buffer[position] != rune('k') {
						goto l444
					}
					position++
					goto l443
				l444:
					position, tokenIndex = position443, tokenIndex443
					if buffer[position] != rune('K') {
						goto l429
					}
					position++
				}
			l443:
				add(ruleInstructionPrefix, position430)
			}
			return true
		l429:
			position, tokenIndex = position429, tokenIndex429
			return false
		},
		/* 33 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
		func() bool {
			position445, tokenIndex445 := position, tokenIndex
			{
				position446 := position
				{
					position447, tokenIndex447 := position, tokenIndex
					if !_rules[ruleInstructionPrefix]() {
						goto l447
					}
					if !_rules[ruleWS]() {
						goto l447
					}
					goto l448
				l447:
					position, tokenIndex = position447, tokenIndex447
				}
			l448:
				if !_rules[ruleInstructionName]() {
					goto l445
				}
				{
					position449, tokenIndex449 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l449
					}
					if !_rules[ruleInstructionArg]() {
						goto l449
					}
				l451:
					{
						position452, tokenIndex452 := position, tokenIndex
						{
							position453, tokenIndex453 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l453
							}
							goto l454
						l453:
							position, tokenIndex = position453, tokenIndex453
						}
					l454:
						if buffer[position] != rune(',') {
							goto l452
						}
						position++
						{
							position455, tokenIndex455 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l455
							}
							goto l456
						l455:
							position, tokenIndex = position455, tokenIndex455
						}
					l456:
						if !_rules[ruleInstructionArg]() {
							goto l452
						}
						goto l451
					l452:
						position, tokenIndex = position452, tokenIndex452
					}
					goto l450
				l449:
					position, tokenIndex = position449, tokenIndex449
				}
			l450:
				add(ruleInstruction, position446)
			}
			return true
		l445:
			position, tokenIndex = position445, tokenIndex445
			return false
		},
		/* 34 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position457, tokenIndex457 := position, tokenIndex
			{
				position458 := position
				{
					position459, tokenIndex459 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l460
					}
					position++
					goto l459
				l460:
					position, tokenIndex = position459, tokenIndex459
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l457
					}
					position++
				}
			l459:
			l461:
				{
					position462, tokenIndex462 := position, tokenIndex
					{
						position463, tokenIndex463 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l464
						}
						position++
						goto l463
					l464:
						position, tokenIndex = position463, tokenIndex463
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l465
						}
						position++
						goto l463
					l465:
						position, tokenIndex = position463, tokenIndex463
						if buffer[position] != rune('.') {
							goto l466
						}
						position++
						goto l463
					l466:
						position, tokenIndex = position463, tokenIndex463
						{
							position467, tokenIndex467 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l468
							}
							position++
							goto l467
						l468:
							position, tokenIndex = position467, tokenIndex467
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l462
							}
							position++
						}
					l467:
					}
				l463:
					goto l461
				l462:
					position, tokenIndex = position462, tokenIndex462
				}
				{
					position469, tokenIndex469 := position, tokenIndex
					{
						position471, tokenIndex471 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l472
						}
						position++
						goto l471
					l472:
						position, tokenIndex = position471, tokenIndex471
						if buffer[position] != rune('+') {
							goto l473
						}
						position++
						goto l471
					l473:
						position, tokenIndex = position471, tokenIndex471
						if buffer[position] != rune('-') {
							goto l469
						}
						position++
					}
				l471:
					goto l470
				l469:
					position, tokenIndex = position469, tokenIndex469
				}
			l470:
				add(ruleInstructionName, position458)
			}
			return true
		l457:
			position, tokenIndex = position457, tokenIndex457
			return false
		},
		/* 35 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
		func() bool {
			position474, tokenIndex474 := position, tokenIndex
			{
				position475 := position
				{
					position476, tokenIndex476 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l476
					}
					goto l477
				l476:
					position, tokenIndex = position476, tokenIndex476
				}
			l477:
				{
					position478, tokenIndex478 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l479
					}
					goto l478
				l479:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleRegisterOrConstant]() {
						goto l480
					}
					goto l478
				l480:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleLocalLabelRef]() {
						goto l481
					}
					goto l478
				l481:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleTOCRefHigh]() {
						goto l482
					}
					goto l478
				l482:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleTOCRefLow]() {
						goto l483
					}
					goto l478
				l483:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleGOTLocation]() {
						goto l484
					}
					goto l478
				l484:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleGOTAddress]() {
						goto l485
					}
					goto l478
				l485:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleGOTSymbolOffset]() {
						goto l486
					}
					goto l478
				l486:
					position, tokenIndex = position478, tokenIndex478
					if !_rules[ruleMemoryRef]() {
						goto l474
					}
				}
			l478:
			l487:
				{
					position488, tokenIndex488 := position, tokenIndex
					if !_rules[ruleAVX512Token]() {
						goto l488
					}
					goto l487
				l488:
					position, tokenIndex = position488, tokenIndex488
				}
				add(ruleInstructionArg, position475)
			}
			return true
		l474:
			position, tokenIndex = position474, tokenIndex474
			return false
		},
		/* 36 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position489, tokenIndex489 := position, tokenIndex
			{
				position490 := position
				if buffer[position] != rune('$') {
					goto l489
				}
				position++
				if buffer[position] != rune('_') {
					goto l489
				}
				position++
				if buffer[position] != rune('G') {
					goto l489
				}
				position++
				if buffer[position] != rune('L') {
					goto l489
				}
				position++
				if buffer[position] != rune('O') {
					goto l489
				}
				position++
				if buffer[position] != rune('B') {
					goto l489
				}
				position++
				if buffer[position] != rune('A') {
					goto l489
				}
				position++
				if buffer[position] != rune('L') {
					goto l489
				}
				position++
				if buffer[position] != rune('_') {
					goto l489
				}
				position++
				if buffer[position] != rune('O') {
					goto l489
				}
				position++
				if buffer[position] != rune('F') {
					goto l489
				}
				position++
				if buffer[position] != rune('F') {
					goto l489
				}
				position++
				if buffer[position] != rune('S') {
					goto l489
				}
				position++
				if buffer[position] != rune('E') {
					goto l489
				}
				position++
				if buffer[position] != rune('T') {
					goto l489
				}
				position++
				if buffer[position] != rune('_') {
					goto l489
				}
				position++
				if buffer[position] != rune('T') {
					goto l489
				}
				position++
				if buffer[position] != rune('A') {
					goto l489
				}
				position++
				if buffer[position] != rune('B') {
					goto l489
				}
				position++
				if buffer[position] != rune('L') {
					goto l489
				}
				position++
				if buffer[position] != rune('E') {
					goto l489
				}
				position++
				if buffer[position] != rune('_') {
					goto l489
				}
				position++
				if buffer[position] != rune('-') {
					goto l489
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l489
				}
				add(ruleGOTLocation, position490)
			}
			return true
		l489:
			position, tokenIndex = position489, tokenIndex489
			return false
		},
		/* 37 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
		func() bool {
			position491, tokenIndex491 := position, tokenIndex
			{
				position492 := position
				if buffer[position] != rune('_') {
					goto l491
				}
				position++
				if buffer[position] != rune('G') {
					goto l491
				}
				position++
				if buffer[position] != rune('L') {
					goto l491
				}
				position++
				if buffer[position] != rune('O') {
					goto l491
				}
				position++
				if buffer[position] != rune('B') {
					goto l491
				}
				position++
				if buffer[position] != rune('A') {
					goto l491
				}
				position++
				if buffer[position] != rune('L') {
					goto l491
				}
				position++
				if buffer[position] != rune('_') {
					goto l491
				}
				position++
				if buffer[position] != rune('O') {
					goto l491
				}
				position++
				if buffer[position] != rune('F') {
					goto l491
				}
				position++
				if buffer[position] != rune('F') {
					goto l491
				}
				position++
				if buffer[position] != rune('S') {
					goto l491
				}
				position++
				if buffer[position] != rune('E') {
					goto l491
				}
				position++
				if buffer[position] != rune('T') {
					goto l491
				}
				position++
				if buffer[position] != rune('_') {
					goto l491
				}
				position++
				if buffer[position] != rune('T') {
					goto l491
				}
				position++
				if buffer[position] != rune('A') {
					goto l491
				}
				position++
				if buffer[position] != rune('B') {
					goto l491
				}
				position++
				if buffer[position] != rune('L') {
					goto l491
				}
				position++
				if buffer[position] != rune('E') {
					goto l491
				}
				position++
				if buffer[position] != rune('_') {
					goto l491
				}
				position++
				if buffer[position] != rune('(') {
					goto l491
				}
				position++
				if buffer[position] != rune('%') {
					goto l491
				}
				position++
				if buffer[position] != rune('r') {
					goto l491
				}
				position++
				if buffer[position] != rune('i') {
					goto l491
				}
				position++
				if buffer[position] != rune('p') {
					goto l491
				}
				position++
				if buffer[position] != rune(')') {
					goto l491
				}
				position++
				add(ruleGOTAddress, position492)
			}
			return true
		l491:
			position, tokenIndex = position491, tokenIndex491
			return false
		},
		/* 38 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position493, tokenIndex493 := position, tokenIndex
			{
				position494 := position
				{
					position495, tokenIndex495 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l496
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l496
					}
					if buffer[position] != rune('@') {
						goto l496
					}
					position++
					if buffer[position] != rune('G') {
						goto l496
					}
					position++
					if buffer[position] != rune('O') {
						goto l496
					}
					position++
					if buffer[position] != rune('T') {
						goto l496
					}
					position++
					{
						position497, tokenIndex497 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l497
						}
						position++
						if buffer[position] != rune('F') {
							goto l497
						}
						position++
						if buffer[position] != rune('F') {
							goto l497
						}
						position++
						goto l498
					l497:
						position, tokenIndex = position497, tokenIndex497
					}
				l498:
					goto l495
				l496:
					position, tokenIndex = position495, tokenIndex495
					if buffer[position] != rune(':') {
						goto l493
					}
					position++
					{
						position499, tokenIndex499 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l500
						}
						position++
						goto l499
					l500:
						position, tokenIndex = position499, tokenIndex499
						if buffer[position] != rune('G') {
							goto l493
						}
						position++
					}
				l499:
					{
						position501, tokenIndex501 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l502
						}
						position++
						goto l501
					l502:
						position, tokenIndex = position501, tokenIndex501
						if buffer[position] != rune('O') {
							goto l493
						}
						position++
					}
				l501:
					{
						position503, tokenIndex503 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l504
						}
						position++
						goto l503
					l504:
						position, tokenIndex = position503, tokenIndex503
						if buffer[position] != rune('T') {
							goto l493
						}
						position++
					}
				l503:
					if buffer[position] != rune(':') {
						goto l493
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l493
					}
				}
			l495:
				add(ruleGOTSymbolOffset, position494)
			}
			return true
		l493:
			position, tokenIndex = position493, tokenIndex493
			return false
		},
		/* 39 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position505, tokenIndex505 := position, tokenIndex
			{
				position506 := position
				{
					position507, tokenIndex507 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l507
					}
					goto l508
				l507:
					position, tokenIndex = position507, tokenIndex507
				}
			l508:
				if buffer[position] != rune('{') {
					goto l505
				}
				position++
				{
					position509, tokenIndex509 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l509
					}
					position++
					goto l510
				l509:
					position, tokenIndex = position509, tokenIndex509
				}
			l510:
			l511:
				{
					position512, tokenIndex512 := position, tokenIndex
					{
						position513, tokenIndex513 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l514
						}
						position++
						goto l513
					l514:
						position, tokenIndex = position513, tokenIndex513
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l512
						}
						position++
					}
				l513:
					goto l511
				l512:
					position, tokenIndex = position512, tokenIndex512
				}
				if buffer[position] != rune('}') {
					goto l505
				}
				position++
				add(ruleAVX512Token, position506)
			}
			return true
		l505:
			position, tokenIndex = position505, tokenIndex505
			return false
		},
		/* 40 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position515, tokenIndex515 := position, tokenIndex
			{
				position516 := position
				if buffer[position] != rune('.') {
					goto l515
				}
				position++
				if buffer[position] != rune('T') {
					goto l515
				}
				position++
				if buffer[position] != rune('O') {
					goto l515
				}
				position++
				if buffer[position] != rune('C') {
					goto l515
				}
				position++
				if buffer[position] != rune('.') {
					goto l515
				}
				position++
				if buffer[position] != rune('-') {
					goto l515
				}
				position++
				{
					position517, tokenIndex517 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l518
					}
					position++
					if buffer[position] != rune('b') {
						goto l518
					}
					position++
					goto l517
				l518:
					position, tokenIndex = position517, tokenIndex517
					if buffer[position] != rune('.') {
						goto l515
					}
					position++
					if buffer[position] != rune('L') {
						goto l515
					}
					position++
					{
						position521, tokenIndex521 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l522
						}
						position++
						goto l521
					l522:
						position, tokenIndex = position521, tokenIndex521
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l523
						}
						position++
						goto l521
					l523:
						position, tokenIndex = position521, tokenIndex521
						if buffer[position] != rune('_') {
							goto l524
						}
						position++
						goto l521
					l524:
						position, tokenIndex = position521, tokenIndex521
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l515
						}
						position++
					}
				l521:
				l519:
					{
						position520, tokenIndex520 := position, tokenIndex
						{
							position525, tokenIndex525 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l526
							}
							position++
							goto l525
						l526:
							position, tokenIndex = position525, tokenIndex525
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l527
							}
							position++
							goto l525
						l527:
							position, tokenIndex = position525, tokenIndex525
							if buffer[position] != rune('_') {
								goto l528
							}
							position++
							goto l525
						l528:
							position, tokenIndex = position525, tokenIndex525
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l520
							}
							position++
						}
					l525:
						goto l519
					l520:
						position, tokenIndex = position520, tokenIndex520
					}
				}
			l517:
				if buffer[position] != rune('@') {
					goto l515
				}
				position++
				{
					position529, tokenIndex529 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l530
					}
					position++
					goto l529
				l530:
					position, tokenIndex = position529, tokenIndex529
					if buffer[position] != rune('H') {
						goto l515
					}
					position++
				}
			l529:
				{
					position531, tokenIndex531 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l532
					}
					position++
					goto l531
				l532:
					position, tokenIndex = position531, tokenIndex531
					if buffer[position] != rune('A') {
						goto l515
					}
					position++
				}
			l531:
				add(ruleTOCRefHigh, position516)
			}
			return true
		l515:
			position, tokenIndex = position515, tokenIndex515
			return false
		},
		/* 41 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position533, tokenIndex533 := position, tokenIndex
			{
				position534 := position
				if buffer[position] != rune('.') {
					goto l533
				}
				position++
				if buffer[position] != rune('T') {
					goto l533
				}
				position++
				if buffer[position] != rune('O') {
					goto l533
				}
				position++
				if buffer[position] != rune('C') {
					goto l533
				}
				position++
				if buffer[position] != rune('.') {
					goto l533
				}
				position++
				if buffer[position] != rune('-') {
					goto l533
				}
				position++
				{
					position535, tokenIndex535 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l536
					}
					position++
					if buffer[position] != rune('b') {
						goto l536
					}
					position++
					goto l535
				l536:
					position, tokenIndex = position535, tokenIndex535
					if buffer[position] != rune('.') {
						goto l533
					}
					position++
					if buffer[position] != rune('L') {
						goto l533
					}
					position++
					{
						position539, tokenIndex539 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l540
						}
						position++
						goto l539
					l540:
						position, tokenIndex = position539, tokenIndex539
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l541
						}
						position++
						goto l539
					l541:
						position, tokenIndex = position539, tokenIndex539
						if buffer[position] != rune('_') {
							goto l542
						}
						position++
						goto l539
					l542:
						position, tokenIndex = position539, tokenIndex539
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l533
						}
						position++
					}
				l539:
				l537:
					{
						position538, tokenIndex538 := position, tokenIndex
						{
							position543, tokenIndex543 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l544
							}
							position++
							goto l543
						l544:
							position, tokenIndex = position543, tokenIndex543
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l545
							}
							position++
							goto l543
						l545:
							position, tokenIndex = position543, tokenIndex543
							if buffer[position] != rune('_') {
								goto l546
							}
							position++
							goto l543
						l546:
							position, tokenIndex = position543, tokenIndex543
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l538
							}
							position++
						}
					l543:
						goto l537
					l538:
						position, tokenIndex = position538, tokenIndex538
					}
				}
			l535:
				if buffer[position] != rune('@') {
					goto l533
				}
				position++
				{
					position547, tokenIndex547 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l548
					}
					position++
					goto l547
				l548:
					position, tokenIndex = position547, tokenIndex547
					if buffer[position] != rune('L') {
						goto l533
					}
					position++
				}
			l547:
				add(ruleTOCRefLow, position534)
			}
			return true
		l533:
			position, tokenIndex = position533, tokenIndex533
			return false
		},
		/* 42 IndirectionIndicator <- <'*'> */
		func() bool {
			position549, tokenIndex549 := position, tokenIndex
			{
				position550 := position
				if buffer[position] != rune('*') {
					goto l549
				}
				position++
				add(ruleIndirectionIndicator, position550)
			}
			return true
		l549:
			position, tokenIndex = position549, tokenIndex549
			return false
		},
		/* 43 Float <- <([0-9]+ '.' [0-9]*)> */
		func() bool {
			position551, tokenIndex551 := position, tokenIndex
			{
				position552 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l551
				}
				position++
			l553:
				{
					position554, tokenIndex554 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l554
					}
					position++
					goto l553
				l554:
					position, tokenIndex = position554, tokenIndex554
				}
				if buffer[position] != rune('.') {
					goto l551
				}
				position++
			l555:
				{
					position556, tokenIndex556 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l556
					}
					position++
					goto l555
				l556:
					position, tokenIndex = position556, tokenIndex556
				}
				add(ruleFloat, position552)
			}
			return true
		l551:
			position, tokenIndex = position551, tokenIndex551
			return false
		},
		/* 44 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
		func() bool {
			position557, tokenIndex557 := position, tokenIndex
			{
				position558 := position
				{
					position559, tokenIndex559 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l560
					}
					position++
					{
						position561, tokenIndex561 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l562
						}
						position++
						goto l561
					l562:
						position, tokenIndex = position561, tokenIndex561
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l560
						}
						position++
					}
				l561:
				l563:
					{
						position564, tokenIndex564 := position, tokenIndex
						{
							position565, tokenIndex565 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l566
							}
							position++
							goto l565
						l566:
							position, tokenIndex = position565, tokenIndex565
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l567
							}
							position++
							goto l565
						l567:
							position, tokenIndex = position565, tokenIndex565
							{
								position568, tokenIndex568 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l569
								}
								position++
								goto l568
							l569:
								position, tokenIndex = position568, tokenIndex568
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l564
								}
								position++
							}
						l568:
						}
					l565:
						goto l563
					l564:
						position, tokenIndex = position564, tokenIndex564
					}
					goto l559
				l560:
					position, tokenIndex = position559, tokenIndex559
					{
						position571, tokenIndex571 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l571
						}
						position++
						goto l572
					l571:
						position, tokenIndex = position571, tokenIndex571
					}
				l572:
					{
						position573, tokenIndex573 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l574
						}
						if !_rules[ruleOffset]() {
							goto l574
						}
						goto l573
					l574:
						position, tokenIndex = position573, tokenIndex573
						if !_rules[ruleOffset]() {
							goto l570
						}
					}
				l573:
					goto l559
				l570:
					position, tokenIndex = position559, tokenIndex559
					if buffer[position] != rune('#') {
						goto l575
					}
					position++
					if !_rules[ruleFloat]() {
						goto l575
					}
					goto l559
				l575:
					position, tokenIndex = position559, tokenIndex559
					if buffer[position] != rune('#') {
						goto l576
					}
					position++
					if !_rules[ruleOffset]() {
						goto l576
					}
					{
						position577, tokenIndex577 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l577
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l577
						}
						position++
					l579:
						{
							position580, tokenIndex580 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l580
							}
							position++
							goto l579
						l580:
							position, tokenIndex = position580, tokenIndex580
						}
						{
							position581, tokenIndex581 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l581
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l581
							}
							position++
						l583:
							{
								position584, tokenIndex584 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l584
								}
								position++
								goto l583
							l584:
								position, tokenIndex = position584, tokenIndex584
							}
							goto l582
						l581:
							position, tokenIndex = position581, tokenIndex581
						}
					l582:
						goto l578
					l577:
						position, tokenIndex = position577, tokenIndex577
					}
				l578:
					goto l559
				l576:
					position, tokenIndex = position559, tokenIndex559
					if buffer[position] != rune('#') {
						goto l585
					}
					position++
					{
						position586, tokenIndex586 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l586
						}
						position++
						goto l587
					l586:
						position, tokenIndex = position586, tokenIndex586
					}
				l587:
					if buffer[position] != rune('(') {
						goto l585
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l585
					}
					position++
					{
						position588, tokenIndex588 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l588
						}
						goto l589
					l588:
						position, tokenIndex = position588, tokenIndex588
					}
				l589:
					if buffer[position] != rune('<') {
						goto l585
					}
					position++
					if buffer[position] != rune('<') {
						goto l585
					}
					position++
					{
						position590, tokenIndex590 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l590
						}
						goto l591
					l590:
						position, tokenIndex = position590, tokenIndex590
					}
				l591:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l585
					}
					position++
					if buffer[position] != rune(')') {
						goto l585
					}
					position++
					goto l559
				l585:
					position, tokenIndex = position559, tokenIndex559
					if !_rules[ruleARMRegister]() {
						goto l557
					}
				}
			l559:
				{
					position592, tokenIndex592 := position, tokenIndex
					{
						position593, tokenIndex593 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l594
						}
						position++
						goto l593
					l594:
						position, tokenIndex = position593, tokenIndex593
						if buffer[position] != rune('b') {
							goto l595
						}
						position++
						goto l593
					l595:
						position, tokenIndex = position593, tokenIndex593
						if buffer[position] != rune(':') {
							goto l596
						}
						position++
						goto l593
					l596:
						position, tokenIndex = position593, tokenIndex593
						if buffer[position] != rune('(') {
							goto l597
						}
						position++
						goto l593
					l597:
						position, tokenIndex = position593, tokenIndex593
						if buffer[position] != rune('+') {
							goto l598
						}
						position++
						goto l593
					l598:
						position, tokenIndex = position593, tokenIndex593
						if buffer[position] != rune('-') {
							goto l592
						}
						position++
					}
				l593:
					goto l557
				l592:
					position, tokenIndex = position592, tokenIndex592
				}
				add(ruleRegisterOrConstant, position558)
			}
			return true
		l557:
			position, tokenIndex = position557, tokenIndex557
			return false
		},
		/* 45 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9]))> */
		func() bool {
			position599, tokenIndex599 := position, tokenIndex
			{
				position600 := position
				{
					position601, tokenIndex601 := position, tokenIndex
					{
						position603, tokenIndex603 := position, tokenIndex
						{
							position605, tokenIndex605 := position, tokenIndex
							if buffer[position] != rune('u') {
								goto l606
							}
							position++
							goto l605
						l606:
							position, tokenIndex = position605, tokenIndex605
							if buffer[position] != rune('s') {
								goto l604
							}
							position++
						}
					l605:
						{
							position607, tokenIndex607 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l608
							}
							position++
							goto l607
						l608:
							position, tokenIndex = position607, tokenIndex607
							if buffer[position] != rune('X') {
								goto l604
							}
							position++
						}
					l607:
						{
							position609, tokenIndex609 := position, tokenIndex
							if buffer[position] != rune('t') {
								goto l610
							}
							position++
							goto l609
						l610:
							position, tokenIndex = position609, tokenIndex609
							if buffer[position] != rune('T') {
								goto l604
							}
							position++
						}
					l609:
						{
							position611, tokenIndex611 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l612
							}
							position++
							goto l611
						l612:
							position, tokenIndex = position611, tokenIndex611
							if buffer[position] != rune('w') {
								goto l613
							}
							position++
							goto l611
						l613:
							position, tokenIndex = position611, tokenIndex611
							if buffer[position] != rune('h') {
								goto l614
							}
							position++
							goto l611
						l614:
							position, tokenIndex = position611, tokenIndex611
							if buffer[position] != rune('b') {
								goto l604
							}
							position++
						}
					l611:
						goto l603
					l604:
						position, tokenIndex = position603, tokenIndex603
						{
							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 l615
							}
							position++
						}
					l616:
						{
							position618, tokenIndex618 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l619
							}
							position++
							goto l618
						l619:
							position, tokenIndex = position618, tokenIndex618
							if buffer[position] != rune('S') {
								goto l615
							}
							position++
						}
					l618:
						{
							position620, tokenIndex620 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l621
							}
							position++
							goto l620
						l621:
							position, tokenIndex = position620, tokenIndex620
							if buffer[position] != rune('L') {
								goto l615
							}
							position++
						}
					l620:
						goto l603
					l615:
						position, tokenIndex = position603, tokenIndex603
						{
							position623, tokenIndex623 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l624
							}
							position++
							goto l623
						l624:
							position, tokenIndex = position623, tokenIndex623
							if buffer[position] != rune('L') {
								goto l622
							}
							position++
						}
					l623:
						{
							position625, tokenIndex625 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l626
							}
							position++
							goto l625
						l626:
							position, tokenIndex = position625, tokenIndex625
							if buffer[position] != rune('S') {
								goto l622
							}
							position++
						}
					l625:
						{
							position627, tokenIndex627 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l628
							}
							position++
							goto l627
						l628:
							position, tokenIndex = position627, tokenIndex627
							if buffer[position] != rune('R') {
								goto l622
							}
							position++
						}
					l627:
						goto l603
					l622:
						position, tokenIndex = position603, tokenIndex603
						{
							position630, tokenIndex630 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l631
							}
							position++
							goto l630
						l631:
							position, tokenIndex = position630, tokenIndex630
							if buffer[position] != rune('R') {
								goto l629
							}
							position++
						}
					l630:
						{
							position632, tokenIndex632 := position, tokenIndex
							if buffer[position] != rune('o') {
								goto l633
							}
							position++
							goto l632
						l633:
							position, tokenIndex = position632, tokenIndex632
							if buffer[position] != rune('O') {
								goto l629
							}
							position++
						}
					l632:
						{
							position634, tokenIndex634 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l635
							}
							position++
							goto l634
						l635:
							position, tokenIndex = position634, tokenIndex634
							if buffer[position] != rune('R') {
								goto l629
							}
							position++
						}
					l634:
						goto l603
					l629:
						position, tokenIndex = position603, tokenIndex603
						{
							position636, tokenIndex636 := position, tokenIndex
							if buffer[position] != rune('a') {
								goto l637
							}
							position++
							goto l636
						l637:
							position, tokenIndex = position636, tokenIndex636
							if buffer[position] != rune('A') {
								goto l602
							}
							position++
						}
					l636:
						{
							position638, tokenIndex638 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l639
							}
							position++
							goto l638
						l639:
							position, tokenIndex = position638, tokenIndex638
							if buffer[position] != rune('S') {
								goto l602
							}
							position++
						}
					l638:
						{
							position640, tokenIndex640 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l641
							}
							position++
							goto l640
						l641:
							position, tokenIndex = position640, tokenIndex640
							if buffer[position] != rune('R') {
								goto l602
							}
							position++
						}
					l640:
					}
				l603:
					{
						position642, tokenIndex642 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l642
						}
						if buffer[position] != rune('#') {
							goto l642
						}
						position++
						if !_rules[ruleOffset]() {
							goto l642
						}
						goto l643
					l642:
						position, tokenIndex = position642, tokenIndex642
					}
				l643:
					goto l601
				l602:
					position, tokenIndex = position601, tokenIndex601
					{
						position645, tokenIndex645 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l646
						}
						position++
						goto l645
					l646:
						position, tokenIndex = position645, tokenIndex645
						if buffer[position] != rune('M') {
							goto l644
						}
						position++
					}
				l645:
					{
						position647, tokenIndex647 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l648
						}
						position++
						goto l647
					l648:
						position, tokenIndex = position647, tokenIndex647
						if buffer[position] != rune('U') {
							goto l644
						}
						position++
					}
				l647:
					{
						position649, tokenIndex649 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l650
						}
						position++
						goto l649
					l650:
						position, tokenIndex = position649, tokenIndex649
						if buffer[position] != rune('L') {
							goto l644
						}
						position++
					}
				l649:
					if buffer[position] != rune(' ') {
						goto l644
					}
					position++
					{
						position651, tokenIndex651 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l652
						}
						position++
						goto l651
					l652:
						position, tokenIndex = position651, tokenIndex651
						if buffer[position] != rune('V') {
							goto l644
						}
						position++
					}
				l651:
					{
						position653, tokenIndex653 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l654
						}
						position++
						goto l653
					l654:
						position, tokenIndex = position653, tokenIndex653
						if buffer[position] != rune('L') {
							goto l644
						}
						position++
					}
				l653:
					goto l601
				l644:
					position, tokenIndex = position601, tokenIndex601
					{
						position655, tokenIndex655 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l656
						}
						position++
						goto l655
					l656:
						position, tokenIndex = position655, tokenIndex655
						if buffer[position] != rune('M') {
							goto l599
						}
						position++
					}
				l655:
					{
						position657, tokenIndex657 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l658
						}
						position++
						goto l657
					l658:
						position, tokenIndex = position657, tokenIndex657
						if buffer[position] != rune('U') {
							goto l599
						}
						position++
					}
				l657:
					{
						position659, tokenIndex659 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l660
						}
						position++
						goto l659
					l660:
						position, tokenIndex = position659, tokenIndex659
						if buffer[position] != rune('L') {
							goto l599
						}
						position++
					}
				l659:
					if buffer[position] != rune(' ') {
						goto l599
					}
					position++
					if buffer[position] != rune('#') {
						goto l599
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l599
					}
					position++
				}
			l601:
				add(ruleARMConstantTweak, position600)
			}
			return true
		l599:
			position, tokenIndex = position599, tokenIndex599
			return false
		},
		/* 46 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / SVE2PredicateRegister / ARMVectorRegister / SVE2SpecialValue / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
		func() bool {
			position661, tokenIndex661 := position, tokenIndex
			{
				position662 := position
				{
					position663, tokenIndex663 := position, tokenIndex
					{
						position665, tokenIndex665 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l666
						}
						position++
						goto l665
					l666:
						position, tokenIndex = position665, tokenIndex665
						if buffer[position] != rune('S') {
							goto l664
						}
						position++
					}
				l665:
					{
						position667, tokenIndex667 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l668
						}
						position++
						goto l667
					l668:
						position, tokenIndex = position667, tokenIndex667
						if buffer[position] != rune('P') {
							goto l664
						}
						position++
					}
				l667:
					goto l663
				l664:
					position, tokenIndex = position663, tokenIndex663
					{
						position670, tokenIndex670 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l671
						}
						position++
						goto l670
					l671:
						position, tokenIndex = position670, tokenIndex670
						if buffer[position] != rune('w') {
							goto l672
						}
						position++
						goto l670
					l672:
						position, tokenIndex = position670, tokenIndex670
						if buffer[position] != rune('d') {
							goto l673
						}
						position++
						goto l670
					l673:
						position, tokenIndex = position670, tokenIndex670
						if buffer[position] != rune('q') {
							goto l674
						}
						position++
						goto l670
					l674:
						position, tokenIndex = position670, tokenIndex670
						if buffer[position] != rune('s') {
							goto l675
						}
						position++
						goto l670
					l675:
						position, tokenIndex = position670, tokenIndex670
						if buffer[position] != rune('h') {
							goto l676
						}
						position++
						goto l670
					l676:
						position, tokenIndex = position670, tokenIndex670
						if buffer[position] != rune('b') {
							goto l669
						}
						position++
					}
				l670:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l669
					}
					position++
					{
						position677, tokenIndex677 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l677
						}
						position++
						goto l678
					l677:
						position, tokenIndex = position677, tokenIndex677
					}
				l678:
					goto l663
				l669:
					position, tokenIndex = position663, tokenIndex663
					{
						position680, tokenIndex680 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l681
						}
						position++
						goto l680
					l681:
						position, tokenIndex = position680, tokenIndex680
						if buffer[position] != rune('X') {
							goto l679
						}
						position++
					}
				l680:
					{
						position682, tokenIndex682 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l683
						}
						position++
						goto l682
					l683:
						position, tokenIndex = position682, tokenIndex682
						if buffer[position] != rune('Z') {
							goto l679
						}
						position++
					}
				l682:
					{
						position684, tokenIndex684 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l685
						}
						position++
						goto l684
					l685:
						position, tokenIndex = position684, tokenIndex684
						if buffer[position] != rune('R') {
							goto l679
						}
						position++
					}
				l684:
					goto l663
				l679:
					position, tokenIndex = position663, tokenIndex663
					{
						position687, tokenIndex687 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l688
						}
						position++
						goto l687
					l688:
						position, tokenIndex = position687, tokenIndex687
						if buffer[position] != rune('W') {
							goto l686
						}
						position++
					}
				l687:
					{
						position689, tokenIndex689 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l690
						}
						position++
						goto l689
					l690:
						position, tokenIndex = position689, tokenIndex689
						if buffer[position] != rune('Z') {
							goto l686
						}
						position++
					}
				l689:
					{
						position691, tokenIndex691 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l692
						}
						position++
						goto l691
					l692:
						position, tokenIndex = position691, tokenIndex691
						if buffer[position] != rune('R') {
							goto l686
						}
						position++
					}
				l691:
					goto l663
				l686:
					position, tokenIndex = position663, tokenIndex663
					{
						position694, tokenIndex694 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l695
						}
						position++
						goto l694
					l695:
						position, tokenIndex = position694, tokenIndex694
						if buffer[position] != rune('N') {
							goto l693
						}
						position++
					}
				l694:
					{
						position696, tokenIndex696 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l697
						}
						position++
						goto l696
					l697:
						position, tokenIndex = position696, tokenIndex696
						if buffer[position] != rune('Z') {
							goto l693
						}
						position++
					}
				l696:
					{
						position698, tokenIndex698 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l699
						}
						position++
						goto l698
					l699:
						position, tokenIndex = position698, tokenIndex698
						if buffer[position] != rune('C') {
							goto l693
						}
						position++
					}
				l698:
					{
						position700, tokenIndex700 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l701
						}
						position++
						goto l700
					l701:
						position, tokenIndex = position700, tokenIndex700
						if buffer[position] != rune('V') {
							goto l693
						}
						position++
					}
				l700:
					goto l663
				l693:
					position, tokenIndex = position663, tokenIndex663
					if !_rules[ruleSVE2PredicateRegister]() {
						goto l702
					}
					goto l663
				l702:
					position, tokenIndex = position663, tokenIndex663
					if !_rules[ruleARMVectorRegister]() {
						goto l703
					}
					goto l663
				l703:
					position, tokenIndex = position663, tokenIndex663
					if !_rules[ruleSVE2SpecialValue]() {
						goto l704
					}
					goto l663
				l704:
					position, tokenIndex = position663, tokenIndex663
					if buffer[position] != rune('{') {
						goto l661
					}
					position++
					{
						position705, tokenIndex705 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l705
						}
						goto l706
					l705:
						position, tokenIndex = position705, tokenIndex705
					}
				l706:
					if !_rules[ruleARMVectorRegister]() {
						goto l661
					}
				l707:
					{
						position708, tokenIndex708 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l708
						}
						position++
						{
							position709, tokenIndex709 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l709
							}
							goto l710
						l709:
							position, tokenIndex = position709, tokenIndex709
						}
					l710:
						if !_rules[ruleARMVectorRegister]() {
							goto l708
						}
						goto l707
					l708:
						position, tokenIndex = position708, tokenIndex708
					}
					{
						position711, tokenIndex711 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l711
						}
						goto l712
					l711:
						position, tokenIndex = position711, tokenIndex711
					}
				l712:
					if buffer[position] != rune('}') {
						goto l661
					}
					position++
					{
						position713, tokenIndex713 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l713
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l713
						}
						position++
						{
							position715, tokenIndex715 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l715
							}
							position++
							goto l716
						l715:
							position, tokenIndex = position715, tokenIndex715
						}
					l716:
						if buffer[position] != rune(']') {
							goto l713
						}
						position++
						goto l714
					l713:
						position, tokenIndex = position713, tokenIndex713
					}
				l714:
				}
			l663:
				add(ruleARMRegister, position662)
			}
			return true
		l661:
			position, tokenIndex = position661, tokenIndex661
			return false
		},
		/* 47 ARMVectorRegister <- <(('p' / 'v' / 'z') [0-9] [0-9]? !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_') ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
		func() bool {
			position717, tokenIndex717 := position, tokenIndex
			{
				position718 := position
				{
					position719, tokenIndex719 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l720
					}
					position++
					goto l719
				l720:
					position, tokenIndex = position719, tokenIndex719
					if buffer[position] != rune('v') {
						goto l721
					}
					position++
					goto l719
				l721:
					position, tokenIndex = position719, tokenIndex719
					if buffer[position] != rune('z') {
						goto l717
					}
					position++
				}
			l719:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l717
				}
				position++
				{
					position722, tokenIndex722 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l722
					}
					position++
					goto l723
				l722:
					position, tokenIndex = position722, tokenIndex722
				}
			l723:
				{
					position724, tokenIndex724 := position, tokenIndex
					{
						position725, tokenIndex725 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l726
						}
						position++
						goto l725
					l726:
						position, tokenIndex = position725, tokenIndex725
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l727
						}
						position++
						goto l725
					l727:
						position, tokenIndex = position725, tokenIndex725
						{
							position729, tokenIndex729 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l730
							}
							position++
							goto l729
						l730:
							position, tokenIndex = position729, tokenIndex729
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l728
							}
							position++
						}
					l729:
						goto l725
					l728:
						position, tokenIndex = position725, tokenIndex725
						if buffer[position] != rune('_') {
							goto l724
						}
						position++
					}
				l725:
					goto l717
				l724:
					position, tokenIndex = position724, tokenIndex724
				}
				{
					position731, tokenIndex731 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l731
					}
					position++
				l733:
					{
						position734, tokenIndex734 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l734
						}
						position++
						goto l733
					l734:
						position, tokenIndex = position734, tokenIndex734
					}
					{
						position735, tokenIndex735 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l736
						}
						position++
						goto l735
					l736:
						position, tokenIndex = position735, tokenIndex735
						if buffer[position] != rune('s') {
							goto l737
						}
						position++
						goto l735
					l737:
						position, tokenIndex = position735, tokenIndex735
						if buffer[position] != rune('d') {
							goto l738
						}
						position++
						goto l735
					l738:
						position, tokenIndex = position735, tokenIndex735
						if buffer[position] != rune('h') {
							goto l739
						}
						position++
						goto l735
					l739:
						position, tokenIndex = position735, tokenIndex735
						if buffer[position] != rune('q') {
							goto l731
						}
						position++
					}
				l735:
					{
						position740, tokenIndex740 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l740
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l740
						}
						position++
						{
							position742, tokenIndex742 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l742
							}
							position++
							goto l743
						l742:
							position, tokenIndex = position742, tokenIndex742
						}
					l743:
						if buffer[position] != rune(']') {
							goto l740
						}
						position++
						goto l741
					l740:
						position, tokenIndex = position740, tokenIndex740
					}
				l741:
					goto l732
				l731:
					position, tokenIndex = position731, tokenIndex731
				}
			l732:
				add(ruleARMVectorRegister, position718)
			}
			return true
		l717:
			position, tokenIndex = position717, tokenIndex717
			return false
		},
		/* 48 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
		func() bool {
			position744, tokenIndex744 := position, tokenIndex
			{
				position745 := position
				{
					position746, tokenIndex746 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l747
					}
					position++
					goto l746
				l747:
					position, tokenIndex = position746, tokenIndex746
					if buffer[position] != rune('P') {
						goto l744
					}
					position++
				}
			l746:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l744
				}
				position++
				{
					position748, tokenIndex748 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l748
					}
					position++
					goto l749
				l748:
					position, tokenIndex = position748, tokenIndex748
				}
			l749:
				if buffer[position] != rune('/') {
					goto l744
				}
				position++
				{
					position750, tokenIndex750 := position, tokenIndex
					if buffer[position] != rune('m') {
						goto l751
					}
					position++
					goto l750
				l751:
					position, tokenIndex = position750, tokenIndex750
					if buffer[position] != rune('M') {
						goto l752
					}
					position++
					goto l750
				l752:
					position, tokenIndex = position750, tokenIndex750
					{
						position753, tokenIndex753 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l754
						}
						position++
						goto l753
					l754:
						position, tokenIndex = position753, tokenIndex753
						if buffer[position] != rune('Z') {
							goto l744
						}
						position++
					}
				l753:
				}
			l750:
				add(ruleSVE2PredicateRegister, position745)
			}
			return true
		l744:
			position, tokenIndex = position744, tokenIndex744
			return false
		},
		/* 49 SVE2SpecialValue <- <(((('p' / 'P') ('o' / 'O') ('w' / 'W') '2') / (('v' / 'V') ('l' / 'L') ('1' / '2' / '3' / '4' / '5' / '6' / '7' / '8') ![0-9]) / (('v' / 'V') ('l' / 'L') '1' '6') / (('v' / 'V') ('l' / 'L') '3' '2') / (('v' / 'V') ('l' / 'L') '6' '4') / (('v' / 'V') ('l' / 'L') '1' '2' '8') / (('v' / 'V') ('l' / 'L') '2' '5' '6') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '3') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '4') / (('a' / 'A') ('l' / 'L') ('l' / 'L'))) !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_'))> */
		func() bool {
			position755, tokenIndex755 := position, tokenIndex
			{
				position756 := position
				{
					position757, tokenIndex757 := position, tokenIndex
					{
						position759, tokenIndex759 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l760
						}
						position++
						goto l759
					l760:
						position, tokenIndex = position759, tokenIndex759
						if buffer[position] != rune('P') {
							goto l758
						}
						position++
					}
				l759:
					{
						position761, tokenIndex761 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l762
						}
						position++
						goto l761
					l762:
						position, tokenIndex = position761, tokenIndex761
						if buffer[position] != rune('O') {
							goto l758
						}
						position++
					}
				l761:
					{
						position763, tokenIndex763 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l764
						}
						position++
						goto l763
					l764:
						position, tokenIndex = position763, tokenIndex763
						if buffer[position] != rune('W') {
							goto l758
						}
						position++
					}
				l763:
					if buffer[position] != rune('2') {
						goto l758
					}
					position++
					goto l757
				l758:
					position, tokenIndex = position757, tokenIndex757
					{
						position766, tokenIndex766 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l767
						}
						position++
						goto l766
					l767:
						position, tokenIndex = position766, tokenIndex766
						if buffer[position] != rune('V') {
							goto l765
						}
						position++
					}
				l766:
					{
						position768, tokenIndex768 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l769
						}
						position++
						goto l768
					l769:
						position, tokenIndex = position768, tokenIndex768
						if buffer[position] != rune('L') {
							goto l765
						}
						position++
					}
				l768:
					{
						position770, tokenIndex770 := position, tokenIndex
						if buffer[position] != rune('1') {
							goto l771
						}
						position++
						goto l770
					l771:
						position, tokenIndex = position770, tokenIndex770
						if buffer[position] != rune('2') {
							goto l772
						}
						position++
						goto l770
					l772:
						position, tokenIndex = position770, tokenIndex770
						if buffer[position] != rune('3') {
							goto l773
						}
						position++
						goto l770
					l773:
						position, tokenIndex = position770, tokenIndex770
						if buffer[position] != rune('4') {
							goto l774
						}
						position++
						goto l770
					l774:
						position, tokenIndex = position770, tokenIndex770
						if buffer[position] != rune('5') {
							goto l775
						}
						position++
						goto l770
					l775:
						position, tokenIndex = position770, tokenIndex770
						if buffer[position] != rune('6') {
							goto l776
						}
						position++
						goto l770
					l776:
						position, tokenIndex = position770, tokenIndex770
						if buffer[position] != rune('7') {
							goto l777
						}
						position++
						goto l770
					l777:
						position, tokenIndex = position770, tokenIndex770
						if buffer[position] != rune('8') {
							goto l765
						}
						position++
					}
				l770:
					{
						position778, tokenIndex778 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l778
						}
						position++
						goto l765
					l778:
						position, tokenIndex = position778, tokenIndex778
					}
					goto l757
				l765:
					position, tokenIndex = position757, tokenIndex757
					{
						position780, tokenIndex780 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l781
						}
						position++
						goto l780
					l781:
						position, tokenIndex = position780, tokenIndex780
						if buffer[position] != rune('V') {
							goto l779
						}
						position++
					}
				l780:
					{
						position782, tokenIndex782 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l783
						}
						position++
						goto l782
					l783:
						position, tokenIndex = position782, tokenIndex782
						if buffer[position] != rune('L') {
							goto l779
						}
						position++
					}
				l782:
					if buffer[position] != rune('1') {
						goto l779
					}
					position++
					if buffer[position] != rune('6') {
						goto l779
					}
					position++
					goto l757
				l779:
					position, tokenIndex = position757, tokenIndex757
					{
						position785, tokenIndex785 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l786
						}
						position++
						goto l785
					l786:
						position, tokenIndex = position785, tokenIndex785
						if buffer[position] != rune('V') {
							goto l784
						}
						position++
					}
				l785:
					{
						position787, tokenIndex787 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l788
						}
						position++
						goto l787
					l788:
						position, tokenIndex = position787, tokenIndex787
						if buffer[position] != rune('L') {
							goto l784
						}
						position++
					}
				l787:
					if buffer[position] != rune('3') {
						goto l784
					}
					position++
					if buffer[position] != rune('2') {
						goto l784
					}
					position++
					goto l757
				l784:
					position, tokenIndex = position757, tokenIndex757
					{
						position790, tokenIndex790 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l791
						}
						position++
						goto l790
					l791:
						position, tokenIndex = position790, tokenIndex790
						if buffer[position] != rune('V') {
							goto l789
						}
						position++
					}
				l790:
					{
						position792, tokenIndex792 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l793
						}
						position++
						goto l792
					l793:
						position, tokenIndex = position792, tokenIndex792
						if buffer[position] != rune('L') {
							goto l789
						}
						position++
					}
				l792:
					if buffer[position] != rune('6') {
						goto l789
					}
					position++
					if buffer[position] != rune('4') {
						goto l789
					}
					position++
					goto l757
				l789:
					position, tokenIndex = position757, tokenIndex757
					{
						position795, tokenIndex795 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l796
						}
						position++
						goto l795
					l796:
						position, tokenIndex = position795, tokenIndex795
						if buffer[position] != rune('V') {
							goto l794
						}
						position++
					}
				l795:
					{
						position797, tokenIndex797 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l798
						}
						position++
						goto l797
					l798:
						position, tokenIndex = position797, tokenIndex797
						if buffer[position] != rune('L') {
							goto l794
						}
						position++
					}
				l797:
					if buffer[position] != rune('1') {
						goto l794
					}
					position++
					if buffer[position] != rune('2') {
						goto l794
					}
					position++
					if buffer[position] != rune('8') {
						goto l794
					}
					position++
					goto l757
				l794:
					position, tokenIndex = position757, tokenIndex757
					{
						position800, tokenIndex800 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l801
						}
						position++
						goto l800
					l801:
						position, tokenIndex = position800, tokenIndex800
						if buffer[position] != rune('V') {
							goto l799
						}
						position++
					}
				l800:
					{
						position802, tokenIndex802 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l803
						}
						position++
						goto l802
					l803:
						position, tokenIndex = position802, tokenIndex802
						if buffer[position] != rune('L') {
							goto l799
						}
						position++
					}
				l802:
					if buffer[position] != rune('2') {
						goto l799
					}
					position++
					if buffer[position] != rune('5') {
						goto l799
					}
					position++
					if buffer[position] != rune('6') {
						goto l799
					}
					position++
					goto l757
				l799:
					position, tokenIndex = position757, tokenIndex757
					{
						position805, tokenIndex805 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l806
						}
						position++
						goto l805
					l806:
						position, tokenIndex = position805, tokenIndex805
						if buffer[position] != rune('M') {
							goto l804
						}
						position++
					}
				l805:
					{
						position807, tokenIndex807 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l808
						}
						position++
						goto l807
					l808:
						position, tokenIndex = position807, tokenIndex807
						if buffer[position] != rune('U') {
							goto l804
						}
						position++
					}
				l807:
					{
						position809, tokenIndex809 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l810
						}
						position++
						goto l809
					l810:
						position, tokenIndex = position809, tokenIndex809
						if buffer[position] != rune('L') {
							goto l804
						}
						position++
					}
				l809:
					if buffer[position] != rune('3') {
						goto l804
					}
					position++
					goto l757
				l804:
					position, tokenIndex = position757, tokenIndex757
					{
						position812, tokenIndex812 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l813
						}
						position++
						goto l812
					l813:
						position, tokenIndex = position812, tokenIndex812
						if buffer[position] != rune('M') {
							goto l811
						}
						position++
					}
				l812:
					{
						position814, tokenIndex814 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l815
						}
						position++
						goto l814
					l815:
						position, tokenIndex = position814, tokenIndex814
						if buffer[position] != rune('U') {
							goto l811
						}
						position++
					}
				l814:
					{
						position816, tokenIndex816 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l817
						}
						position++
						goto l816
					l817:
						position, tokenIndex = position816, tokenIndex816
						if buffer[position] != rune('L') {
							goto l811
						}
						position++
					}
				l816:
					if buffer[position] != rune('4') {
						goto l811
					}
					position++
					goto l757
				l811:
					position, tokenIndex = position757, tokenIndex757
					{
						position818, tokenIndex818 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l819
						}
						position++
						goto l818
					l819:
						position, tokenIndex = position818, tokenIndex818
						if buffer[position] != rune('A') {
							goto l755
						}
						position++
					}
				l818:
					{
						position820, tokenIndex820 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l821
						}
						position++
						goto l820
					l821:
						position, tokenIndex = position820, tokenIndex820
						if buffer[position] != rune('L') {
							goto l755
						}
						position++
					}
				l820:
					{
						position822, tokenIndex822 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l823
						}
						position++
						goto l822
					l823:
						position, tokenIndex = position822, tokenIndex822
						if buffer[position] != rune('L') {
							goto l755
						}
						position++
					}
				l822:
				}
			l757:
				{
					position824, tokenIndex824 := position, tokenIndex
					{
						position825, tokenIndex825 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l826
						}
						position++
						goto l825
					l826:
						position, tokenIndex = position825, tokenIndex825
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l827
						}
						position++
						goto l825
					l827:
						position, tokenIndex = position825, tokenIndex825
						{
							position829, tokenIndex829 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l830
							}
							position++
							goto l829
						l830:
							position, tokenIndex = position829, tokenIndex829
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l828
							}
							position++
						}
					l829:
						goto l825
					l828:
						position, tokenIndex = position825, tokenIndex825
						if buffer[position] != rune('_') {
							goto l824
						}
						position++
					}
				l825:
					goto l755
				l824:
					position, tokenIndex = position824, tokenIndex824
				}
				add(ruleSVE2SpecialValue, position756)
			}
			return true
		l755:
			position, tokenIndex = position755, tokenIndex755
			return false
		},
		/* 50 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position831, tokenIndex831 := position, tokenIndex
			{
				position832 := position
				{
					position833, tokenIndex833 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l834
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l834
					}
					goto l833
				l834:
					position, tokenIndex = position833, tokenIndex833
					if !_rules[ruleSymbolRef]() {
						goto l835
					}
					goto l833
				l835:
					position, tokenIndex = position833, tokenIndex833
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l836
					}
					goto l833
				l836:
					position, tokenIndex = position833, tokenIndex833
				l838:
					{
						position839, tokenIndex839 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l839
						}
						goto l838
					l839:
						position, tokenIndex = position839, tokenIndex839
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l837
					}
					goto l833
				l837:
					position, tokenIndex = position833, tokenIndex833
					if !_rules[ruleSegmentRegister]() {
						goto l840
					}
					if !_rules[ruleOffset]() {
						goto l840
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l840
					}
					goto l833
				l840:
					position, tokenIndex = position833, tokenIndex833
					if !_rules[ruleSegmentRegister]() {
						goto l841
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l841
					}
					goto l833
				l841:
					position, tokenIndex = position833, tokenIndex833
					if !_rules[ruleSegmentRegister]() {
						goto l842
					}
					if !_rules[ruleOffset]() {
						goto l842
					}
					goto l833
				l842:
					position, tokenIndex = position833, tokenIndex833
					if !_rules[ruleARMBaseIndexScale]() {
						goto l843
					}
					goto l833
				l843:
					position, tokenIndex = position833, tokenIndex833
					if !_rules[ruleBaseIndexScale]() {
						goto l831
					}
				}
			l833:
				add(ruleMemoryRef, position832)
			}
			return true
		l831:
			position, tokenIndex = position831, tokenIndex831
			return false
		},
		/* 51 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position844, tokenIndex844 := position, tokenIndex
			{
				position845 := position
				{
					position846, tokenIndex846 := position, tokenIndex
				l848:
					{
						position849, tokenIndex849 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l849
						}
						goto l848
					l849:
						position, tokenIndex = position849, tokenIndex849
					}
					if buffer[position] != rune('+') {
						goto l846
					}
					position++
					goto l847
				l846:
					position, tokenIndex = position846, tokenIndex846
				}
			l847:
				{
					position850, tokenIndex850 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l851
					}
					goto l850
				l851:
					position, tokenIndex = position850, tokenIndex850
					if !_rules[ruleSymbolName]() {
						goto l844
					}
				}
			l850:
			l852:
				{
					position853, tokenIndex853 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l853
					}
					goto l852
				l853:
					position, tokenIndex = position853, tokenIndex853
				}
				{
					position854, tokenIndex854 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l854
					}
					position++
					if !_rules[ruleSection]() {
						goto l854
					}
				l856:
					{
						position857, tokenIndex857 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l857
						}
						goto l856
					l857:
						position, tokenIndex = position857, tokenIndex857
					}
					goto l855
				l854:
					position, tokenIndex = position854, tokenIndex854
				}
			l855:
				add(ruleSymbolRef, position845)
			}
			return true
		l844:
			position, tokenIndex = position844, tokenIndex844
			return false
		},
		/* 52 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position858, tokenIndex858 := position, tokenIndex
			{
				position859 := position
				if buffer[position] != rune(':') {
					goto l858
				}
				position++
				{
					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 l858
					}
					position++
				}
			l860:
				{
					position862, tokenIndex862 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l863
					}
					position++
					goto l862
				l863:
					position, tokenIndex = position862, tokenIndex862
					if buffer[position] != rune('O') {
						goto l858
					}
					position++
				}
			l862:
				if buffer[position] != rune('1') {
					goto l858
				}
				position++
				if buffer[position] != rune('2') {
					goto l858
				}
				position++
				if buffer[position] != rune(':') {
					goto l858
				}
				position++
				{
					position864, tokenIndex864 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l865
					}
					goto l864
				l865:
					position, tokenIndex = position864, tokenIndex864
					if !_rules[ruleSymbolName]() {
						goto l858
					}
				}
			l864:
				{
					position866, tokenIndex866 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l866
					}
					goto l867
				l866:
					position, tokenIndex = position866, tokenIndex866
				}
			l867:
				add(ruleLow12BitsSymbolRef, position859)
			}
			return true
		l858:
			position, tokenIndex = position858, tokenIndex858
			return false
		},
		/* 53 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position868, tokenIndex868 := position, tokenIndex
			{
				position869 := position
				if buffer[position] != rune('[') {
					goto l868
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l868
				}
				{
					position870, tokenIndex870 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l870
					}
					position++
					{
						position872, tokenIndex872 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l872
						}
						goto l873
					l872:
						position, tokenIndex = position872, tokenIndex872
					}
				l873:
					{
						position874, tokenIndex874 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l875
						}
						position++
						if !_rules[ruleOffset]() {
							goto l875
						}
						{
							position876, tokenIndex876 := position, tokenIndex
							{
								position878, tokenIndex878 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l879
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l879
								}
								position++
							l880:
								{
									position881, tokenIndex881 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l881
									}
									position++
									goto l880
								l881:
									position, tokenIndex = position881, tokenIndex881
								}
								goto l878
							l879:
								position, tokenIndex = position878, tokenIndex878
								if buffer[position] != rune('*') {
									goto l882
								}
								position++
								if buffer[position] != rune('(') {
									goto l882
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l882
								}
								position++
							l883:
								{
									position884, tokenIndex884 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l884
									}
									position++
									goto l883
								l884:
									position, tokenIndex = position884, tokenIndex884
								}
								if !_rules[ruleOperator]() {
									goto l882
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l882
								}
								position++
							l885:
								{
									position886, tokenIndex886 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l886
									}
									position++
									goto l885
								l886:
									position, tokenIndex = position886, tokenIndex886
								}
								if buffer[position] != rune(')') {
									goto l882
								}
								position++
								goto l878
							l882:
								position, tokenIndex = position878, tokenIndex878
							l887:
								{
									position888, tokenIndex888 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l888
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l888
									}
									position++
								l889:
									{
										position890, tokenIndex890 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l890
										}
										position++
										goto l889
									l890:
										position, tokenIndex = position890, tokenIndex890
									}
									goto l887
								l888:
									position, tokenIndex = position888, tokenIndex888
								}
							}
						l878:
							goto l877

							position, tokenIndex = position876, tokenIndex876
						}
					l877:
						goto l874
					l875:
						position, tokenIndex = position874, tokenIndex874
						if !_rules[ruleARMGOTLow12]() {
							goto l891
						}
						goto l874
					l891:
						position, tokenIndex = position874, tokenIndex874
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l892
						}
						goto l874
					l892:
						position, tokenIndex = position874, tokenIndex874
						if !_rules[ruleARMRegister]() {
							goto l870
						}
					}
				l874:
					{
						position893, tokenIndex893 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l893
						}
						position++
						{
							position895, tokenIndex895 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l895
							}
							goto l896
						l895:
							position, tokenIndex = position895, tokenIndex895
						}
					l896:
						if !_rules[ruleARMConstantTweak]() {
							goto l893
						}
						goto l894
					l893:
						position, tokenIndex = position893, tokenIndex893
					}
				l894:
					goto l871
				l870:
					position, tokenIndex = position870, tokenIndex870
				}
			l871:
				if buffer[position] != rune(']') {
					goto l868
				}
				position++
				{
					position897, tokenIndex897 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l897
					}
					goto l898
				l897:
					position, tokenIndex = position897, tokenIndex897
				}
			l898:
				add(ruleARMBaseIndexScale, position869)
			}
			return true
		l868:
			position, tokenIndex = position868, tokenIndex868
			return false
		},
		/* 54 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position899, tokenIndex899 := position, tokenIndex
			{
				position900 := position
				if buffer[position] != rune(':') {
					goto l899
				}
				position++
				{
					position901, tokenIndex901 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l902
					}
					position++
					goto l901
				l902:
					position, tokenIndex = position901, tokenIndex901
					if buffer[position] != rune('G') {
						goto l899
					}
					position++
				}
			l901:
				{
					position903, tokenIndex903 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l904
					}
					position++
					goto l903
				l904:
					position, tokenIndex = position903, tokenIndex903
					if buffer[position] != rune('O') {
						goto l899
					}
					position++
				}
			l903:
				{
					position905, tokenIndex905 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l906
					}
					position++
					goto l905
				l906:
					position, tokenIndex = position905, tokenIndex905
					if buffer[position] != rune('T') {
						goto l899
					}
					position++
				}
			l905:
				if buffer[position] != rune('_') {
					goto l899
				}
				position++
				{
					position907, tokenIndex907 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l908
					}
					position++
					goto l907
				l908:
					position, tokenIndex = position907, tokenIndex907
					if buffer[position] != rune('L') {
						goto l899
					}
					position++
				}
			l907:
				{
					position909, tokenIndex909 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l910
					}
					position++
					goto l909
				l910:
					position, tokenIndex = position909, tokenIndex909
					if buffer[position] != rune('O') {
						goto l899
					}
					position++
				}
			l909:
				if buffer[position] != rune('1') {
					goto l899
				}
				position++
				if buffer[position] != rune('2') {
					goto l899
				}
				position++
				if buffer[position] != rune(':') {
					goto l899
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l899
				}
				add(ruleARMGOTLow12, position900)
			}
			return true
		l899:
			position, tokenIndex = position899, tokenIndex899
			return false
		},
		/* 55 ARMPostincrement <- <'!'> */
		func() bool {
			position911, tokenIndex911 := position, tokenIndex
			{
				position912 := position
				if buffer[position] != rune('!') {
					goto l911
				}
				position++
				add(ruleARMPostincrement, position912)
			}
			return true
		l911:
			position, tokenIndex = position911, tokenIndex911
			return false
		},
		/* 56 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position913, tokenIndex913 := position, tokenIndex
			{
				position914 := position
				if buffer[position] != rune('(') {
					goto l913
				}
				position++
				{
					position915, tokenIndex915 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l915
					}
					goto l916
				l915:
					position, tokenIndex = position915, tokenIndex915
				}
			l916:
				{
					position917, tokenIndex917 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l917
					}
					goto l918
				l917:
					position, tokenIndex = position917, tokenIndex917
				}
			l918:
				{
					position919, tokenIndex919 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l919
					}
					position++
					{
						position921, tokenIndex921 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l921
						}
						goto l922
					l921:
						position, tokenIndex = position921, tokenIndex921
					}
				l922:
					if !_rules[ruleRegisterOrConstant]() {
						goto l919
					}
					{
						position923, tokenIndex923 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l923
						}
						goto l924
					l923:
						position, tokenIndex = position923, tokenIndex923
					}
				l924:
					{
						position925, tokenIndex925 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l925
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l925
						}
						position++
					l927:
						{
							position928, tokenIndex928 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l928
							}
							position++
							goto l927
						l928:
							position, tokenIndex = position928, tokenIndex928
						}
						goto l926
					l925:
						position, tokenIndex = position925, tokenIndex925
					}
				l926:
					goto l920
				l919:
					position, tokenIndex = position919, tokenIndex919
				}
			l920:
				if buffer[position] != rune(')') {
					goto l913
				}
				position++
				add(ruleBaseIndexScale, position914)
			}
			return true
		l913:
			position, tokenIndex = position913, tokenIndex913
			return false
		},
		/* 57 Operator <- <('+' / '-')> */
		func() bool {
			position929, tokenIndex929 := position, tokenIndex
			{
				position930 := position
				{
					position931, tokenIndex931 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l932
					}
					position++
					goto l931
				l932:
					position, tokenIndex = position931, tokenIndex931
					if buffer[position] != rune('-') {
						goto l929
					}
					position++
				}
			l931:
				add(ruleOperator, position930)
			}
			return true
		l929:
			position, tokenIndex = position929, tokenIndex929
			return false
		},
		/* 58 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position933, tokenIndex933 := position, tokenIndex
			{
				position934 := position
				{
					position935, tokenIndex935 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l935
					}
					position++
					goto l936
				l935:
					position, tokenIndex = position935, tokenIndex935
				}
			l936:
				{
					position937, tokenIndex937 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l937
					}
					position++
					goto l938
				l937:
					position, tokenIndex = position937, tokenIndex937
				}
			l938:
				{
					position939, tokenIndex939 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l940
					}
					position++
					{
						position941, tokenIndex941 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l942
						}
						position++
						goto l941
					l942:
						position, tokenIndex = position941, tokenIndex941
						if buffer[position] != rune('B') {
							goto l940
						}
						position++
					}
				l941:
					{
						position945, tokenIndex945 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l946
						}
						position++
						goto l945
					l946:
						position, tokenIndex = position945, tokenIndex945
						if buffer[position] != rune('1') {
							goto l940
						}
						position++
					}
				l945:
				l943:
					{
						position944, tokenIndex944 := position, tokenIndex
						{
							position947, tokenIndex947 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l948
							}
							position++
							goto l947
						l948:
							position, tokenIndex = position947, tokenIndex947
							if buffer[position] != rune('1') {
								goto l944
							}
							position++
						}
					l947:
						goto l943
					l944:
						position, tokenIndex = position944, tokenIndex944
					}
					goto l939
				l940:
					position, tokenIndex = position939, tokenIndex939
					if buffer[position] != rune('0') {
						goto l949
					}
					position++
					{
						position950, tokenIndex950 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l951
						}
						position++
						goto l950
					l951:
						position, tokenIndex = position950, tokenIndex950
						if buffer[position] != rune('X') {
							goto l949
						}
						position++
					}
				l950:
					{
						position954, tokenIndex954 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l955
						}
						position++
						goto l954
					l955:
						position, tokenIndex = position954, tokenIndex954
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l956
						}
						position++
						goto l954
					l956:
						position, tokenIndex = position954, tokenIndex954
						{
							position957, tokenIndex957 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l958
							}
							position++
							goto l957
						l958:
							position, tokenIndex = position957, tokenIndex957
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l949
							}
							position++
						}
					l957:
					}
				l954:
				l952:
					{
						position953, tokenIndex953 := position, tokenIndex
						{
							position959, tokenIndex959 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l960
							}
							position++
							goto l959
						l960:
							position, tokenIndex = position959, tokenIndex959
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l961
							}
							position++
							goto l959
						l961:
							position, tokenIndex = position959, tokenIndex959
							{
								position962, tokenIndex962 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l963
								}
								position++
								goto l962
							l963:
								position, tokenIndex = position962, tokenIndex962
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l953
								}
								position++
							}
						l962:
						}
					l959:
						goto l952
					l953:
						position, tokenIndex = position953, tokenIndex953
					}
					goto l939
				l949:
					position, tokenIndex = position939, tokenIndex939
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l933
					}
					position++
				l964:
					{
						position965, tokenIndex965 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l965
						}
						position++
						goto l964
					l965:
						position, tokenIndex = position965, tokenIndex965
					}
				}
			l939:
				add(ruleOffset, position934)
			}
			return true
		l933:
			position, tokenIndex = position933, tokenIndex933
			return false
		},
		/* 59 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position966, tokenIndex966 := position, tokenIndex
			{
				position967 := position
				{
					position970, tokenIndex970 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l971
					}
					position++
					goto l970
				l971:
					position, tokenIndex = position970, tokenIndex970
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l972
					}
					position++
					goto l970
				l972:
					position, tokenIndex = position970, tokenIndex970
					if buffer[position] != rune('@') {
						goto l966
					}
					position++
				}
			l970:
			l968:
				{
					position969, tokenIndex969 := position, tokenIndex
					{
						position973, tokenIndex973 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l974
						}
						position++
						goto l973
					l974:
						position, tokenIndex = position973, tokenIndex973
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l975
						}
						position++
						goto l973
					l975:
						position, tokenIndex = position973, tokenIndex973
						if buffer[position] != rune('@') {
							goto l969
						}
						position++
					}
				l973:
					goto l968
				l969:
					position, tokenIndex = position969, tokenIndex969
				}
				add(ruleSection, position967)
			}
			return true
		l966:
			position, tokenIndex = position966, tokenIndex966
			return false
		},
		/* 60 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position976, tokenIndex976 := position, tokenIndex
			{
				position977 := position
				if buffer[position] != rune('%') {
					goto l976
				}
				position++
				{
					position978, tokenIndex978 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l979
					}
					position++
					goto l978
				l979:
					position, tokenIndex = position978, tokenIndex978
					if buffer[position] != rune('s') {
						goto l976
					}
					position++
				}
			l978:
				if buffer[position] != rune('s') {
					goto l976
				}
				position++
				if buffer[position] != rune(':') {
					goto l976
				}
				position++
				add(ruleSegmentRegister, position977)
			}
			return true
		l976:
			position, tokenIndex = position976, tokenIndex976
			return false
		},
	}
	p.rules = _rules
	return nil
}
