package main

// Code generated by ./peg/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
	ruleInstruction
	ruleInstructionName
	ruleInstructionArg
	ruleGOTLocation
	ruleGOTAddress
	ruleGOTSymbolOffset
	ruleAVX512Token
	ruleTOCRefHigh
	ruleTOCRefLow
	ruleIndirectionIndicator
	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",
	"Instruction",
	"InstructionName",
	"InstructionArg",
	"GOTLocation",
	"GOTAddress",
	"GOTSymbolOffset",
	"AVX512Token",
	"TOCRefHigh",
	"TOCRefLow",
	"IndirectionIndicator",
	"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  [60]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 <- <(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[ruleOffset]() {
						goto l315
					}
					goto l314
				l315:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolType]() {
						goto l316
					}
					goto l314
				l316:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleLocalSymbol]() {
						goto l317
					}
					{
						position318, tokenIndex318 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l318
						}
						goto l319
					l318:
						position, tokenIndex = position318, tokenIndex318
					}
				l319:
					goto l314
				l317:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolName]() {
						goto l320
					}
					if !_rules[ruleOffset]() {
						goto l320
					}
					goto l314
				l320:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolName]() {
						goto l321
					}
					{
						position322, tokenIndex322 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l322
						}
						goto l323
					l322:
						position, tokenIndex = position322, tokenIndex322
					}
				l323:
					goto l314
				l321:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleDot]() {
						goto l324
					}
					goto l314
				l324:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleOpenParen]() {
						goto l312
					}
					{
						position325, tokenIndex325 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l325
						}
						goto l326
					l325:
						position, tokenIndex = position325, tokenIndex325
					}
				l326:
					if !_rules[ruleSymbolExpr]() {
						goto l312
					}
					{
						position327, tokenIndex327 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l327
						}
						goto l328
					l327:
						position, tokenIndex = position327, tokenIndex327
					}
				l328:
					if !_rules[ruleCloseParen]() {
						goto l312
					}
				}
			l314:
				add(ruleSymbolAtom, position313)
			}
			return true
		l312:
			position, tokenIndex = position312, tokenIndex312
			return false
		},
		/* 18 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
		func() bool {
			position329, tokenIndex329 := position, tokenIndex
			{
				position330 := position
				{
					position331, tokenIndex331 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l332
					}
					position++
					goto l331
				l332:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('-') {
						goto l333
					}
					position++
					goto l331
				l333:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('|') {
						goto l334
					}
					position++
					goto l331
				l334:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('<') {
						goto l335
					}
					position++
					if buffer[position] != rune('<') {
						goto l335
					}
					position++
					goto l331
				l335:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('>') {
						goto l329
					}
					position++
					if buffer[position] != rune('>') {
						goto l329
					}
					position++
				}
			l331:
				add(ruleSymbolOperator, position330)
			}
			return true
		l329:
			position, tokenIndex = position329, tokenIndex329
			return false
		},
		/* 19 OpenParen <- <'('> */
		func() bool {
			position336, tokenIndex336 := position, tokenIndex
			{
				position337 := position
				if buffer[position] != rune('(') {
					goto l336
				}
				position++
				add(ruleOpenParen, position337)
			}
			return true
		l336:
			position, tokenIndex = position336, tokenIndex336
			return false
		},
		/* 20 CloseParen <- <')'> */
		func() bool {
			position338, tokenIndex338 := position, tokenIndex
			{
				position339 := position
				if buffer[position] != rune(')') {
					goto l338
				}
				position++
				add(ruleCloseParen, position339)
			}
			return true
		l338:
			position, tokenIndex = position338, tokenIndex338
			return false
		},
		/* 21 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position340, tokenIndex340 := position, tokenIndex
			{
				position341 := position
				{
					position342, tokenIndex342 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l343
					}
					position++
					goto l342
				l343:
					position, tokenIndex = position342, tokenIndex342
					if buffer[position] != rune('%') {
						goto l340
					}
					position++
				}
			l342:
				{
					position344, tokenIndex344 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l345
					}
					position++
					if buffer[position] != rune('u') {
						goto l345
					}
					position++
					if buffer[position] != rune('n') {
						goto l345
					}
					position++
					if buffer[position] != rune('c') {
						goto l345
					}
					position++
					if buffer[position] != rune('t') {
						goto l345
					}
					position++
					if buffer[position] != rune('i') {
						goto l345
					}
					position++
					if buffer[position] != rune('o') {
						goto l345
					}
					position++
					if buffer[position] != rune('n') {
						goto l345
					}
					position++
					goto l344
				l345:
					position, tokenIndex = position344, tokenIndex344
					if buffer[position] != rune('o') {
						goto l340
					}
					position++
					if buffer[position] != rune('b') {
						goto l340
					}
					position++
					if buffer[position] != rune('j') {
						goto l340
					}
					position++
					if buffer[position] != rune('e') {
						goto l340
					}
					position++
					if buffer[position] != rune('c') {
						goto l340
					}
					position++
					if buffer[position] != rune('t') {
						goto l340
					}
					position++
				}
			l344:
				add(ruleSymbolType, position341)
			}
			return true
		l340:
			position, tokenIndex = position340, tokenIndex340
			return false
		},
		/* 22 Dot <- <'.'> */
		func() bool {
			position346, tokenIndex346 := position, tokenIndex
			{
				position347 := position
				if buffer[position] != rune('.') {
					goto l346
				}
				position++
				add(ruleDot, position347)
			}
			return true
		l346:
			position, tokenIndex = position346, tokenIndex346
			return false
		},
		/* 23 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position348, tokenIndex348 := position, tokenIndex
			{
				position349 := position
				if buffer[position] != rune('[') {
					goto l348
				}
				position++
				if buffer[position] != rune('T') {
					goto l348
				}
				position++
				if buffer[position] != rune('C') {
					goto l348
				}
				position++
				if buffer[position] != rune(']') {
					goto l348
				}
				position++
				add(ruleTCMarker, position349)
			}
			return true
		l348:
			position, tokenIndex = position348, tokenIndex348
			return false
		},
		/* 24 EscapedChar <- <('\\' .)> */
		func() bool {
			position350, tokenIndex350 := position, tokenIndex
			{
				position351 := position
				if buffer[position] != rune('\\') {
					goto l350
				}
				position++
				if !matchDot() {
					goto l350
				}
				add(ruleEscapedChar, position351)
			}
			return true
		l350:
			position, tokenIndex = position350, tokenIndex350
			return false
		},
		/* 25 WS <- <(' ' / '\t')+> */
		func() bool {
			position352, tokenIndex352 := position, tokenIndex
			{
				position353 := position
				{
					position356, tokenIndex356 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l357
					}
					position++
					goto l356
				l357:
					position, tokenIndex = position356, tokenIndex356
					if buffer[position] != rune('\t') {
						goto l352
					}
					position++
				}
			l356:
			l354:
				{
					position355, tokenIndex355 := position, tokenIndex
					{
						position358, tokenIndex358 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l359
						}
						position++
						goto l358
					l359:
						position, tokenIndex = position358, tokenIndex358
						if buffer[position] != rune('\t') {
							goto l355
						}
						position++
					}
				l358:
					goto l354
				l355:
					position, tokenIndex = position355, tokenIndex355
				}
				add(ruleWS, position353)
			}
			return true
		l352:
			position, tokenIndex = position352, tokenIndex352
			return false
		},
		/* 26 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position360, tokenIndex360 := position, tokenIndex
			{
				position361 := position
				{
					position362, tokenIndex362 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l363
					}
					position++
					if buffer[position] != rune('/') {
						goto l363
					}
					position++
					goto l362
				l363:
					position, tokenIndex = position362, tokenIndex362
					if buffer[position] != rune('#') {
						goto l360
					}
					position++
				}
			l362:
			l364:
				{
					position365, tokenIndex365 := position, tokenIndex
					{
						position366, tokenIndex366 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l366
						}
						position++
						goto l365
					l366:
						position, tokenIndex = position366, tokenIndex366
					}
					if !matchDot() {
						goto l365
					}
					goto l364
				l365:
					position, tokenIndex = position365, tokenIndex365
				}
				add(ruleComment, position361)
			}
			return true
		l360:
			position, tokenIndex = position360, tokenIndex360
			return false
		},
		/* 27 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position367, tokenIndex367 := position, tokenIndex
			{
				position368 := position
				{
					position369, tokenIndex369 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l370
					}
					goto l369
				l370:
					position, tokenIndex = position369, tokenIndex369
					if !_rules[ruleLocalLabel]() {
						goto l371
					}
					goto l369
				l371:
					position, tokenIndex = position369, tokenIndex369
					if !_rules[ruleSymbolName]() {
						goto l367
					}
				}
			l369:
				if buffer[position] != rune(':') {
					goto l367
				}
				position++
				add(ruleLabel, position368)
			}
			return true
		l367:
			position, tokenIndex = position367, tokenIndex367
			return false
		},
		/* 28 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position372, tokenIndex372 := position, tokenIndex
			{
				position373 := position
				{
					position374, tokenIndex374 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l375
					}
					position++
					goto l374
				l375:
					position, tokenIndex = position374, tokenIndex374
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l376
					}
					position++
					goto l374
				l376:
					position, tokenIndex = position374, tokenIndex374
					if buffer[position] != rune('.') {
						goto l377
					}
					position++
					goto l374
				l377:
					position, tokenIndex = position374, tokenIndex374
					if buffer[position] != rune('_') {
						goto l372
					}
					position++
				}
			l374:
			l378:
				{
					position379, tokenIndex379 := position, tokenIndex
					{
						position380, tokenIndex380 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l381
						}
						position++
						goto l380
					l381:
						position, tokenIndex = position380, tokenIndex380
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l382
						}
						position++
						goto l380
					l382:
						position, tokenIndex = position380, tokenIndex380
						if buffer[position] != rune('.') {
							goto l383
						}
						position++
						goto l380
					l383:
						position, tokenIndex = position380, tokenIndex380
						{
							position385, tokenIndex385 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l386
							}
							position++
							goto l385
						l386:
							position, tokenIndex = position385, tokenIndex385
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l384
							}
							position++
						}
					l385:
						goto l380
					l384:
						position, tokenIndex = position380, tokenIndex380
						if buffer[position] != rune('$') {
							goto l387
						}
						position++
						goto l380
					l387:
						position, tokenIndex = position380, tokenIndex380
						if buffer[position] != rune('_') {
							goto l379
						}
						position++
					}
				l380:
					goto l378
				l379:
					position, tokenIndex = position379, tokenIndex379
				}
				add(ruleSymbolName, position373)
			}
			return true
		l372:
			position, tokenIndex = position372, tokenIndex372
			return false
		},
		/* 29 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position388, tokenIndex388 := position, tokenIndex
			{
				position389 := position
				if buffer[position] != rune('.') {
					goto l388
				}
				position++
				if buffer[position] != rune('L') {
					goto l388
				}
				position++
				{
					position392, tokenIndex392 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l393
					}
					position++
					goto l392
				l393:
					position, tokenIndex = position392, tokenIndex392
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l394
					}
					position++
					goto l392
				l394:
					position, tokenIndex = position392, tokenIndex392
					{
						position396, tokenIndex396 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l397
						}
						position++
						goto l396
					l397:
						position, tokenIndex = position396, tokenIndex396
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l395
						}
						position++
					}
				l396:
					goto l392
				l395:
					position, tokenIndex = position392, tokenIndex392
					if buffer[position] != rune('.') {
						goto l398
					}
					position++
					goto l392
				l398:
					position, tokenIndex = position392, tokenIndex392
					{
						position400, tokenIndex400 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l401
						}
						position++
						goto l400
					l401:
						position, tokenIndex = position400, tokenIndex400
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l399
						}
						position++
					}
				l400:
					goto l392
				l399:
					position, tokenIndex = position392, tokenIndex392
					if buffer[position] != rune('$') {
						goto l402
					}
					position++
					goto l392
				l402:
					position, tokenIndex = position392, tokenIndex392
					if buffer[position] != rune('_') {
						goto l388
					}
					position++
				}
			l392:
			l390:
				{
					position391, tokenIndex391 := position, tokenIndex
					{
						position403, tokenIndex403 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l404
						}
						position++
						goto l403
					l404:
						position, tokenIndex = position403, tokenIndex403
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l405
						}
						position++
						goto l403
					l405:
						position, tokenIndex = position403, tokenIndex403
						{
							position407, tokenIndex407 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l408
							}
							position++
							goto l407
						l408:
							position, tokenIndex = position407, tokenIndex407
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l406
							}
							position++
						}
					l407:
						goto l403
					l406:
						position, tokenIndex = position403, tokenIndex403
						if buffer[position] != rune('.') {
							goto l409
						}
						position++
						goto l403
					l409:
						position, tokenIndex = position403, tokenIndex403
						{
							position411, tokenIndex411 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l412
							}
							position++
							goto l411
						l412:
							position, tokenIndex = position411, tokenIndex411
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l410
							}
							position++
						}
					l411:
						goto l403
					l410:
						position, tokenIndex = position403, tokenIndex403
						if buffer[position] != rune('$') {
							goto l413
						}
						position++
						goto l403
					l413:
						position, tokenIndex = position403, tokenIndex403
						if buffer[position] != rune('_') {
							goto l391
						}
						position++
					}
				l403:
					goto l390
				l391:
					position, tokenIndex = position391, tokenIndex391
				}
				add(ruleLocalSymbol, position389)
			}
			return true
		l388:
			position, tokenIndex = position388, tokenIndex388
			return false
		},
		/* 30 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position414, tokenIndex414 := position, tokenIndex
			{
				position415 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l414
				}
				position++
			l416:
				{
					position417, tokenIndex417 := position, tokenIndex
					{
						position418, tokenIndex418 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l419
						}
						position++
						goto l418
					l419:
						position, tokenIndex = position418, tokenIndex418
						if buffer[position] != rune('$') {
							goto l417
						}
						position++
					}
				l418:
					goto l416
				l417:
					position, tokenIndex = position417, tokenIndex417
				}
				add(ruleLocalLabel, position415)
			}
			return true
		l414:
			position, tokenIndex = position414, tokenIndex414
			return false
		},
		/* 31 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position420, tokenIndex420 := position, tokenIndex
			{
				position421 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l420
				}
				position++
			l422:
				{
					position423, tokenIndex423 := position, tokenIndex
					{
						position424, tokenIndex424 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l425
						}
						position++
						goto l424
					l425:
						position, tokenIndex = position424, tokenIndex424
						if buffer[position] != rune('$') {
							goto l423
						}
						position++
					}
				l424:
					goto l422
				l423:
					position, tokenIndex = position423, tokenIndex423
				}
				{
					position426, tokenIndex426 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l427
					}
					position++
					goto l426
				l427:
					position, tokenIndex = position426, tokenIndex426
					if buffer[position] != rune('f') {
						goto l420
					}
					position++
				}
			l426:
				add(ruleLocalLabelRef, position421)
			}
			return true
		l420:
			position, tokenIndex = position420, tokenIndex420
			return false
		},
		/* 32 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
		func() bool {
			position428, tokenIndex428 := position, tokenIndex
			{
				position429 := position
				if !_rules[ruleInstructionName]() {
					goto l428
				}
				{
					position430, tokenIndex430 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l430
					}
					if !_rules[ruleInstructionArg]() {
						goto l430
					}
				l432:
					{
						position433, tokenIndex433 := position, tokenIndex
						{
							position434, tokenIndex434 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l434
							}
							goto l435
						l434:
							position, tokenIndex = position434, tokenIndex434
						}
					l435:
						if buffer[position] != rune(',') {
							goto l433
						}
						position++
						{
							position436, tokenIndex436 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l436
							}
							goto l437
						l436:
							position, tokenIndex = position436, tokenIndex436
						}
					l437:
						if !_rules[ruleInstructionArg]() {
							goto l433
						}
						goto l432
					l433:
						position, tokenIndex = position433, tokenIndex433
					}
					goto l431
				l430:
					position, tokenIndex = position430, tokenIndex430
				}
			l431:
				add(ruleInstruction, position429)
			}
			return true
		l428:
			position, tokenIndex = position428, tokenIndex428
			return false
		},
		/* 33 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position438, tokenIndex438 := position, tokenIndex
			{
				position439 := position
				{
					position440, tokenIndex440 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l441
					}
					position++
					goto l440
				l441:
					position, tokenIndex = position440, tokenIndex440
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l438
					}
					position++
				}
			l440:
			l442:
				{
					position443, tokenIndex443 := position, tokenIndex
					{
						position444, tokenIndex444 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l445
						}
						position++
						goto l444
					l445:
						position, tokenIndex = position444, tokenIndex444
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l446
						}
						position++
						goto l444
					l446:
						position, tokenIndex = position444, tokenIndex444
						if buffer[position] != rune('.') {
							goto l447
						}
						position++
						goto l444
					l447:
						position, tokenIndex = position444, tokenIndex444
						{
							position448, tokenIndex448 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l449
							}
							position++
							goto l448
						l449:
							position, tokenIndex = position448, tokenIndex448
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l443
							}
							position++
						}
					l448:
					}
				l444:
					goto l442
				l443:
					position, tokenIndex = position443, tokenIndex443
				}
				{
					position450, tokenIndex450 := position, tokenIndex
					{
						position452, tokenIndex452 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l453
						}
						position++
						goto l452
					l453:
						position, tokenIndex = position452, tokenIndex452
						if buffer[position] != rune('+') {
							goto l454
						}
						position++
						goto l452
					l454:
						position, tokenIndex = position452, tokenIndex452
						if buffer[position] != rune('-') {
							goto l450
						}
						position++
					}
				l452:
					goto l451
				l450:
					position, tokenIndex = position450, tokenIndex450
				}
			l451:
				add(ruleInstructionName, position439)
			}
			return true
		l438:
			position, tokenIndex = position438, tokenIndex438
			return false
		},
		/* 34 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
		func() bool {
			position455, tokenIndex455 := position, tokenIndex
			{
				position456 := position
				{
					position457, tokenIndex457 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l457
					}
					goto l458
				l457:
					position, tokenIndex = position457, tokenIndex457
				}
			l458:
				{
					position459, tokenIndex459 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l460
					}
					goto l459
				l460:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleRegisterOrConstant]() {
						goto l461
					}
					goto l459
				l461:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleLocalLabelRef]() {
						goto l462
					}
					goto l459
				l462:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleTOCRefHigh]() {
						goto l463
					}
					goto l459
				l463:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleTOCRefLow]() {
						goto l464
					}
					goto l459
				l464:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleGOTLocation]() {
						goto l465
					}
					goto l459
				l465:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleGOTAddress]() {
						goto l466
					}
					goto l459
				l466:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleGOTSymbolOffset]() {
						goto l467
					}
					goto l459
				l467:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleMemoryRef]() {
						goto l455
					}
				}
			l459:
			l468:
				{
					position469, tokenIndex469 := position, tokenIndex
					if !_rules[ruleAVX512Token]() {
						goto l469
					}
					goto l468
				l469:
					position, tokenIndex = position469, tokenIndex469
				}
				add(ruleInstructionArg, position456)
			}
			return true
		l455:
			position, tokenIndex = position455, tokenIndex455
			return false
		},
		/* 35 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position470, tokenIndex470 := position, tokenIndex
			{
				position471 := position
				if buffer[position] != rune('$') {
					goto l470
				}
				position++
				if buffer[position] != rune('_') {
					goto l470
				}
				position++
				if buffer[position] != rune('G') {
					goto l470
				}
				position++
				if buffer[position] != rune('L') {
					goto l470
				}
				position++
				if buffer[position] != rune('O') {
					goto l470
				}
				position++
				if buffer[position] != rune('B') {
					goto l470
				}
				position++
				if buffer[position] != rune('A') {
					goto l470
				}
				position++
				if buffer[position] != rune('L') {
					goto l470
				}
				position++
				if buffer[position] != rune('_') {
					goto l470
				}
				position++
				if buffer[position] != rune('O') {
					goto l470
				}
				position++
				if buffer[position] != rune('F') {
					goto l470
				}
				position++
				if buffer[position] != rune('F') {
					goto l470
				}
				position++
				if buffer[position] != rune('S') {
					goto l470
				}
				position++
				if buffer[position] != rune('E') {
					goto l470
				}
				position++
				if buffer[position] != rune('T') {
					goto l470
				}
				position++
				if buffer[position] != rune('_') {
					goto l470
				}
				position++
				if buffer[position] != rune('T') {
					goto l470
				}
				position++
				if buffer[position] != rune('A') {
					goto l470
				}
				position++
				if buffer[position] != rune('B') {
					goto l470
				}
				position++
				if buffer[position] != rune('L') {
					goto l470
				}
				position++
				if buffer[position] != rune('E') {
					goto l470
				}
				position++
				if buffer[position] != rune('_') {
					goto l470
				}
				position++
				if buffer[position] != rune('-') {
					goto l470
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l470
				}
				add(ruleGOTLocation, position471)
			}
			return true
		l470:
			position, tokenIndex = position470, tokenIndex470
			return false
		},
		/* 36 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
		func() bool {
			position472, tokenIndex472 := position, tokenIndex
			{
				position473 := position
				if buffer[position] != rune('_') {
					goto l472
				}
				position++
				if buffer[position] != rune('G') {
					goto l472
				}
				position++
				if buffer[position] != rune('L') {
					goto l472
				}
				position++
				if buffer[position] != rune('O') {
					goto l472
				}
				position++
				if buffer[position] != rune('B') {
					goto l472
				}
				position++
				if buffer[position] != rune('A') {
					goto l472
				}
				position++
				if buffer[position] != rune('L') {
					goto l472
				}
				position++
				if buffer[position] != rune('_') {
					goto l472
				}
				position++
				if buffer[position] != rune('O') {
					goto l472
				}
				position++
				if buffer[position] != rune('F') {
					goto l472
				}
				position++
				if buffer[position] != rune('F') {
					goto l472
				}
				position++
				if buffer[position] != rune('S') {
					goto l472
				}
				position++
				if buffer[position] != rune('E') {
					goto l472
				}
				position++
				if buffer[position] != rune('T') {
					goto l472
				}
				position++
				if buffer[position] != rune('_') {
					goto l472
				}
				position++
				if buffer[position] != rune('T') {
					goto l472
				}
				position++
				if buffer[position] != rune('A') {
					goto l472
				}
				position++
				if buffer[position] != rune('B') {
					goto l472
				}
				position++
				if buffer[position] != rune('L') {
					goto l472
				}
				position++
				if buffer[position] != rune('E') {
					goto l472
				}
				position++
				if buffer[position] != rune('_') {
					goto l472
				}
				position++
				if buffer[position] != rune('(') {
					goto l472
				}
				position++
				if buffer[position] != rune('%') {
					goto l472
				}
				position++
				if buffer[position] != rune('r') {
					goto l472
				}
				position++
				if buffer[position] != rune('i') {
					goto l472
				}
				position++
				if buffer[position] != rune('p') {
					goto l472
				}
				position++
				if buffer[position] != rune(')') {
					goto l472
				}
				position++
				add(ruleGOTAddress, position473)
			}
			return true
		l472:
			position, tokenIndex = position472, tokenIndex472
			return false
		},
		/* 37 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position474, tokenIndex474 := position, tokenIndex
			{
				position475 := position
				{
					position476, tokenIndex476 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l477
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l477
					}
					if buffer[position] != rune('@') {
						goto l477
					}
					position++
					if buffer[position] != rune('G') {
						goto l477
					}
					position++
					if buffer[position] != rune('O') {
						goto l477
					}
					position++
					if buffer[position] != rune('T') {
						goto l477
					}
					position++
					{
						position478, tokenIndex478 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l478
						}
						position++
						if buffer[position] != rune('F') {
							goto l478
						}
						position++
						if buffer[position] != rune('F') {
							goto l478
						}
						position++
						goto l479
					l478:
						position, tokenIndex = position478, tokenIndex478
					}
				l479:
					goto l476
				l477:
					position, tokenIndex = position476, tokenIndex476
					if buffer[position] != rune(':') {
						goto l474
					}
					position++
					{
						position480, tokenIndex480 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l481
						}
						position++
						goto l480
					l481:
						position, tokenIndex = position480, tokenIndex480
						if buffer[position] != rune('G') {
							goto l474
						}
						position++
					}
				l480:
					{
						position482, tokenIndex482 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l483
						}
						position++
						goto l482
					l483:
						position, tokenIndex = position482, tokenIndex482
						if buffer[position] != rune('O') {
							goto l474
						}
						position++
					}
				l482:
					{
						position484, tokenIndex484 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l485
						}
						position++
						goto l484
					l485:
						position, tokenIndex = position484, tokenIndex484
						if buffer[position] != rune('T') {
							goto l474
						}
						position++
					}
				l484:
					if buffer[position] != rune(':') {
						goto l474
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l474
					}
				}
			l476:
				add(ruleGOTSymbolOffset, position475)
			}
			return true
		l474:
			position, tokenIndex = position474, tokenIndex474
			return false
		},
		/* 38 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position486, tokenIndex486 := position, tokenIndex
			{
				position487 := position
				{
					position488, tokenIndex488 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l488
					}
					goto l489
				l488:
					position, tokenIndex = position488, tokenIndex488
				}
			l489:
				if buffer[position] != rune('{') {
					goto l486
				}
				position++
				{
					position490, tokenIndex490 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l490
					}
					position++
					goto l491
				l490:
					position, tokenIndex = position490, tokenIndex490
				}
			l491:
			l492:
				{
					position493, tokenIndex493 := position, tokenIndex
					{
						position494, tokenIndex494 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l495
						}
						position++
						goto l494
					l495:
						position, tokenIndex = position494, tokenIndex494
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l493
						}
						position++
					}
				l494:
					goto l492
				l493:
					position, tokenIndex = position493, tokenIndex493
				}
				if buffer[position] != rune('}') {
					goto l486
				}
				position++
				add(ruleAVX512Token, position487)
			}
			return true
		l486:
			position, tokenIndex = position486, tokenIndex486
			return false
		},
		/* 39 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position496, tokenIndex496 := position, tokenIndex
			{
				position497 := position
				if buffer[position] != rune('.') {
					goto l496
				}
				position++
				if buffer[position] != rune('T') {
					goto l496
				}
				position++
				if buffer[position] != rune('O') {
					goto l496
				}
				position++
				if buffer[position] != rune('C') {
					goto l496
				}
				position++
				if buffer[position] != rune('.') {
					goto l496
				}
				position++
				if buffer[position] != rune('-') {
					goto l496
				}
				position++
				{
					position498, tokenIndex498 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l499
					}
					position++
					if buffer[position] != rune('b') {
						goto l499
					}
					position++
					goto l498
				l499:
					position, tokenIndex = position498, tokenIndex498
					if buffer[position] != rune('.') {
						goto l496
					}
					position++
					if buffer[position] != rune('L') {
						goto l496
					}
					position++
					{
						position502, tokenIndex502 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l503
						}
						position++
						goto l502
					l503:
						position, tokenIndex = position502, tokenIndex502
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l504
						}
						position++
						goto l502
					l504:
						position, tokenIndex = position502, tokenIndex502
						if buffer[position] != rune('_') {
							goto l505
						}
						position++
						goto l502
					l505:
						position, tokenIndex = position502, tokenIndex502
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l496
						}
						position++
					}
				l502:
				l500:
					{
						position501, tokenIndex501 := position, tokenIndex
						{
							position506, tokenIndex506 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l507
							}
							position++
							goto l506
						l507:
							position, tokenIndex = position506, tokenIndex506
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l508
							}
							position++
							goto l506
						l508:
							position, tokenIndex = position506, tokenIndex506
							if buffer[position] != rune('_') {
								goto l509
							}
							position++
							goto l506
						l509:
							position, tokenIndex = position506, tokenIndex506
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l501
							}
							position++
						}
					l506:
						goto l500
					l501:
						position, tokenIndex = position501, tokenIndex501
					}
				}
			l498:
				if buffer[position] != rune('@') {
					goto l496
				}
				position++
				{
					position510, tokenIndex510 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l511
					}
					position++
					goto l510
				l511:
					position, tokenIndex = position510, tokenIndex510
					if buffer[position] != rune('H') {
						goto l496
					}
					position++
				}
			l510:
				{
					position512, tokenIndex512 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l513
					}
					position++
					goto l512
				l513:
					position, tokenIndex = position512, tokenIndex512
					if buffer[position] != rune('A') {
						goto l496
					}
					position++
				}
			l512:
				add(ruleTOCRefHigh, position497)
			}
			return true
		l496:
			position, tokenIndex = position496, tokenIndex496
			return false
		},
		/* 40 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position514, tokenIndex514 := position, tokenIndex
			{
				position515 := position
				if buffer[position] != rune('.') {
					goto l514
				}
				position++
				if buffer[position] != rune('T') {
					goto l514
				}
				position++
				if buffer[position] != rune('O') {
					goto l514
				}
				position++
				if buffer[position] != rune('C') {
					goto l514
				}
				position++
				if buffer[position] != rune('.') {
					goto l514
				}
				position++
				if buffer[position] != rune('-') {
					goto l514
				}
				position++
				{
					position516, tokenIndex516 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l517
					}
					position++
					if buffer[position] != rune('b') {
						goto l517
					}
					position++
					goto l516
				l517:
					position, tokenIndex = position516, tokenIndex516
					if buffer[position] != rune('.') {
						goto l514
					}
					position++
					if buffer[position] != rune('L') {
						goto l514
					}
					position++
					{
						position520, tokenIndex520 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l521
						}
						position++
						goto l520
					l521:
						position, tokenIndex = position520, tokenIndex520
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l522
						}
						position++
						goto l520
					l522:
						position, tokenIndex = position520, tokenIndex520
						if buffer[position] != rune('_') {
							goto l523
						}
						position++
						goto l520
					l523:
						position, tokenIndex = position520, tokenIndex520
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l514
						}
						position++
					}
				l520:
				l518:
					{
						position519, tokenIndex519 := position, tokenIndex
						{
							position524, tokenIndex524 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l525
							}
							position++
							goto l524
						l525:
							position, tokenIndex = position524, tokenIndex524
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l526
							}
							position++
							goto l524
						l526:
							position, tokenIndex = position524, tokenIndex524
							if buffer[position] != rune('_') {
								goto l527
							}
							position++
							goto l524
						l527:
							position, tokenIndex = position524, tokenIndex524
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l519
							}
							position++
						}
					l524:
						goto l518
					l519:
						position, tokenIndex = position519, tokenIndex519
					}
				}
			l516:
				if buffer[position] != rune('@') {
					goto l514
				}
				position++
				{
					position528, tokenIndex528 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l529
					}
					position++
					goto l528
				l529:
					position, tokenIndex = position528, tokenIndex528
					if buffer[position] != rune('L') {
						goto l514
					}
					position++
				}
			l528:
				add(ruleTOCRefLow, position515)
			}
			return true
		l514:
			position, tokenIndex = position514, tokenIndex514
			return false
		},
		/* 41 IndirectionIndicator <- <'*'> */
		func() bool {
			position530, tokenIndex530 := position, tokenIndex
			{
				position531 := position
				if buffer[position] != rune('*') {
					goto l530
				}
				position++
				add(ruleIndirectionIndicator, position531)
			}
			return true
		l530:
			position, tokenIndex = position530, tokenIndex530
			return false
		},
		/* 42 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
		func() bool {
			position532, tokenIndex532 := position, tokenIndex
			{
				position533 := position
				{
					position534, tokenIndex534 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l535
					}
					position++
					{
						position536, tokenIndex536 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l537
						}
						position++
						goto l536
					l537:
						position, tokenIndex = position536, tokenIndex536
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l535
						}
						position++
					}
				l536:
				l538:
					{
						position539, tokenIndex539 := position, tokenIndex
						{
							position540, tokenIndex540 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l541
							}
							position++
							goto l540
						l541:
							position, tokenIndex = position540, tokenIndex540
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l542
							}
							position++
							goto l540
						l542:
							position, tokenIndex = position540, tokenIndex540
							{
								position543, tokenIndex543 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l544
								}
								position++
								goto l543
							l544:
								position, tokenIndex = position543, tokenIndex543
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l539
								}
								position++
							}
						l543:
						}
					l540:
						goto l538
					l539:
						position, tokenIndex = position539, tokenIndex539
					}
					goto l534
				l535:
					position, tokenIndex = position534, tokenIndex534
					{
						position546, tokenIndex546 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l546
						}
						position++
						goto l547
					l546:
						position, tokenIndex = position546, tokenIndex546
					}
				l547:
					{
						position548, tokenIndex548 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l549
						}
						if !_rules[ruleOffset]() {
							goto l549
						}
						goto l548
					l549:
						position, tokenIndex = position548, tokenIndex548
						if !_rules[ruleOffset]() {
							goto l545
						}
					}
				l548:
					goto l534
				l545:
					position, tokenIndex = position534, tokenIndex534
					if buffer[position] != rune('#') {
						goto l550
					}
					position++
					if !_rules[ruleOffset]() {
						goto l550
					}
					{
						position551, tokenIndex551 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l551
						}
						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
						}
						{
							position555, tokenIndex555 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l555
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l555
							}
							position++
						l557:
							{
								position558, tokenIndex558 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l558
								}
								position++
								goto l557
							l558:
								position, tokenIndex = position558, tokenIndex558
							}
							goto l556
						l555:
							position, tokenIndex = position555, tokenIndex555
						}
					l556:
						goto l552
					l551:
						position, tokenIndex = position551, tokenIndex551
					}
				l552:
					goto l534
				l550:
					position, tokenIndex = position534, tokenIndex534
					if buffer[position] != rune('#') {
						goto l559
					}
					position++
					{
						position560, tokenIndex560 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l560
						}
						position++
						goto l561
					l560:
						position, tokenIndex = position560, tokenIndex560
					}
				l561:
					if buffer[position] != rune('(') {
						goto l559
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l559
					}
					position++
					{
						position562, tokenIndex562 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l562
						}
						goto l563
					l562:
						position, tokenIndex = position562, tokenIndex562
					}
				l563:
					if buffer[position] != rune('<') {
						goto l559
					}
					position++
					if buffer[position] != rune('<') {
						goto l559
					}
					position++
					{
						position564, tokenIndex564 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l564
						}
						goto l565
					l564:
						position, tokenIndex = position564, tokenIndex564
					}
				l565:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l559
					}
					position++
					if buffer[position] != rune(')') {
						goto l559
					}
					position++
					goto l534
				l559:
					position, tokenIndex = position534, tokenIndex534
					if !_rules[ruleARMRegister]() {
						goto l532
					}
				}
			l534:
				{
					position566, tokenIndex566 := position, tokenIndex
					{
						position567, tokenIndex567 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l568
						}
						position++
						goto l567
					l568:
						position, tokenIndex = position567, tokenIndex567
						if buffer[position] != rune('b') {
							goto l569
						}
						position++
						goto l567
					l569:
						position, tokenIndex = position567, tokenIndex567
						if buffer[position] != rune(':') {
							goto l570
						}
						position++
						goto l567
					l570:
						position, tokenIndex = position567, tokenIndex567
						if buffer[position] != rune('(') {
							goto l571
						}
						position++
						goto l567
					l571:
						position, tokenIndex = position567, tokenIndex567
						if buffer[position] != rune('+') {
							goto l572
						}
						position++
						goto l567
					l572:
						position, tokenIndex = position567, tokenIndex567
						if buffer[position] != rune('-') {
							goto l566
						}
						position++
					}
				l567:
					goto l532
				l566:
					position, tokenIndex = position566, tokenIndex566
				}
				add(ruleRegisterOrConstant, position533)
			}
			return true
		l532:
			position, tokenIndex = position532, tokenIndex532
			return false
		},
		/* 43 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 {
			position573, tokenIndex573 := position, tokenIndex
			{
				position574 := position
				{
					position575, tokenIndex575 := position, tokenIndex
					{
						position577, tokenIndex577 := position, tokenIndex
						{
							position579, tokenIndex579 := position, tokenIndex
							if buffer[position] != rune('u') {
								goto l580
							}
							position++
							goto l579
						l580:
							position, tokenIndex = position579, tokenIndex579
							if buffer[position] != rune('s') {
								goto l578
							}
							position++
						}
					l579:
						{
							position581, tokenIndex581 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l582
							}
							position++
							goto l581
						l582:
							position, tokenIndex = position581, tokenIndex581
							if buffer[position] != rune('X') {
								goto l578
							}
							position++
						}
					l581:
						{
							position583, tokenIndex583 := position, tokenIndex
							if buffer[position] != rune('t') {
								goto l584
							}
							position++
							goto l583
						l584:
							position, tokenIndex = position583, tokenIndex583
							if buffer[position] != rune('T') {
								goto l578
							}
							position++
						}
					l583:
						{
							position585, tokenIndex585 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l586
							}
							position++
							goto l585
						l586:
							position, tokenIndex = position585, tokenIndex585
							if buffer[position] != rune('w') {
								goto l587
							}
							position++
							goto l585
						l587:
							position, tokenIndex = position585, tokenIndex585
							if buffer[position] != rune('h') {
								goto l588
							}
							position++
							goto l585
						l588:
							position, tokenIndex = position585, tokenIndex585
							if buffer[position] != rune('b') {
								goto l578
							}
							position++
						}
					l585:
						goto l577
					l578:
						position, tokenIndex = position577, tokenIndex577
						{
							position590, tokenIndex590 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l591
							}
							position++
							goto l590
						l591:
							position, tokenIndex = position590, tokenIndex590
							if buffer[position] != rune('L') {
								goto l589
							}
							position++
						}
					l590:
						{
							position592, tokenIndex592 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l593
							}
							position++
							goto l592
						l593:
							position, tokenIndex = position592, tokenIndex592
							if buffer[position] != rune('S') {
								goto l589
							}
							position++
						}
					l592:
						{
							position594, tokenIndex594 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l595
							}
							position++
							goto l594
						l595:
							position, tokenIndex = position594, tokenIndex594
							if buffer[position] != rune('L') {
								goto l589
							}
							position++
						}
					l594:
						goto l577
					l589:
						position, tokenIndex = position577, tokenIndex577
						{
							position597, tokenIndex597 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l598
							}
							position++
							goto l597
						l598:
							position, tokenIndex = position597, tokenIndex597
							if buffer[position] != rune('L') {
								goto l596
							}
							position++
						}
					l597:
						{
							position599, tokenIndex599 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l600
							}
							position++
							goto l599
						l600:
							position, tokenIndex = position599, tokenIndex599
							if buffer[position] != rune('S') {
								goto l596
							}
							position++
						}
					l599:
						{
							position601, tokenIndex601 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l602
							}
							position++
							goto l601
						l602:
							position, tokenIndex = position601, tokenIndex601
							if buffer[position] != rune('R') {
								goto l596
							}
							position++
						}
					l601:
						goto l577
					l596:
						position, tokenIndex = position577, tokenIndex577
						{
							position604, tokenIndex604 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l605
							}
							position++
							goto l604
						l605:
							position, tokenIndex = position604, tokenIndex604
							if buffer[position] != rune('R') {
								goto l603
							}
							position++
						}
					l604:
						{
							position606, tokenIndex606 := position, tokenIndex
							if buffer[position] != rune('o') {
								goto l607
							}
							position++
							goto l606
						l607:
							position, tokenIndex = position606, tokenIndex606
							if buffer[position] != rune('O') {
								goto l603
							}
							position++
						}
					l606:
						{
							position608, tokenIndex608 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l609
							}
							position++
							goto l608
						l609:
							position, tokenIndex = position608, tokenIndex608
							if buffer[position] != rune('R') {
								goto l603
							}
							position++
						}
					l608:
						goto l577
					l603:
						position, tokenIndex = position577, tokenIndex577
						{
							position610, tokenIndex610 := position, tokenIndex
							if buffer[position] != rune('a') {
								goto l611
							}
							position++
							goto l610
						l611:
							position, tokenIndex = position610, tokenIndex610
							if buffer[position] != rune('A') {
								goto l576
							}
							position++
						}
					l610:
						{
							position612, tokenIndex612 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l613
							}
							position++
							goto l612
						l613:
							position, tokenIndex = position612, tokenIndex612
							if buffer[position] != rune('S') {
								goto l576
							}
							position++
						}
					l612:
						{
							position614, tokenIndex614 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l615
							}
							position++
							goto l614
						l615:
							position, tokenIndex = position614, tokenIndex614
							if buffer[position] != rune('R') {
								goto l576
							}
							position++
						}
					l614:
					}
				l577:
					{
						position616, tokenIndex616 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l616
						}
						if buffer[position] != rune('#') {
							goto l616
						}
						position++
						if !_rules[ruleOffset]() {
							goto l616
						}
						goto l617
					l616:
						position, tokenIndex = position616, tokenIndex616
					}
				l617:
					goto l575
				l576:
					position, tokenIndex = position575, tokenIndex575
					{
						position619, tokenIndex619 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l620
						}
						position++
						goto l619
					l620:
						position, tokenIndex = position619, tokenIndex619
						if buffer[position] != rune('M') {
							goto l618
						}
						position++
					}
				l619:
					{
						position621, tokenIndex621 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l622
						}
						position++
						goto l621
					l622:
						position, tokenIndex = position621, tokenIndex621
						if buffer[position] != rune('U') {
							goto l618
						}
						position++
					}
				l621:
					{
						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 l618
						}
						position++
					}
				l623:
					if buffer[position] != rune(' ') {
						goto l618
					}
					position++
					{
						position625, tokenIndex625 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l626
						}
						position++
						goto l625
					l626:
						position, tokenIndex = position625, tokenIndex625
						if buffer[position] != rune('V') {
							goto l618
						}
						position++
					}
				l625:
					{
						position627, tokenIndex627 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l628
						}
						position++
						goto l627
					l628:
						position, tokenIndex = position627, tokenIndex627
						if buffer[position] != rune('L') {
							goto l618
						}
						position++
					}
				l627:
					goto l575
				l618:
					position, tokenIndex = position575, tokenIndex575
					{
						position629, tokenIndex629 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l630
						}
						position++
						goto l629
					l630:
						position, tokenIndex = position629, tokenIndex629
						if buffer[position] != rune('M') {
							goto l573
						}
						position++
					}
				l629:
					{
						position631, tokenIndex631 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l632
						}
						position++
						goto l631
					l632:
						position, tokenIndex = position631, tokenIndex631
						if buffer[position] != rune('U') {
							goto l573
						}
						position++
					}
				l631:
					{
						position633, tokenIndex633 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l634
						}
						position++
						goto l633
					l634:
						position, tokenIndex = position633, tokenIndex633
						if buffer[position] != rune('L') {
							goto l573
						}
						position++
					}
				l633:
					if buffer[position] != rune(' ') {
						goto l573
					}
					position++
					if buffer[position] != rune('#') {
						goto l573
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l573
					}
					position++
				}
			l575:
				add(ruleARMConstantTweak, position574)
			}
			return true
		l573:
			position, tokenIndex = position573, tokenIndex573
			return false
		},
		/* 44 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 {
			position635, tokenIndex635 := position, tokenIndex
			{
				position636 := position
				{
					position637, tokenIndex637 := position, tokenIndex
					{
						position639, tokenIndex639 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l640
						}
						position++
						goto l639
					l640:
						position, tokenIndex = position639, tokenIndex639
						if buffer[position] != rune('S') {
							goto l638
						}
						position++
					}
				l639:
					{
						position641, tokenIndex641 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l642
						}
						position++
						goto l641
					l642:
						position, tokenIndex = position641, tokenIndex641
						if buffer[position] != rune('P') {
							goto l638
						}
						position++
					}
				l641:
					goto l637
				l638:
					position, tokenIndex = position637, tokenIndex637
					{
						position644, tokenIndex644 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l645
						}
						position++
						goto l644
					l645:
						position, tokenIndex = position644, tokenIndex644
						if buffer[position] != rune('w') {
							goto l646
						}
						position++
						goto l644
					l646:
						position, tokenIndex = position644, tokenIndex644
						if buffer[position] != rune('d') {
							goto l647
						}
						position++
						goto l644
					l647:
						position, tokenIndex = position644, tokenIndex644
						if buffer[position] != rune('q') {
							goto l648
						}
						position++
						goto l644
					l648:
						position, tokenIndex = position644, tokenIndex644
						if buffer[position] != rune('s') {
							goto l649
						}
						position++
						goto l644
					l649:
						position, tokenIndex = position644, tokenIndex644
						if buffer[position] != rune('h') {
							goto l650
						}
						position++
						goto l644
					l650:
						position, tokenIndex = position644, tokenIndex644
						if buffer[position] != rune('b') {
							goto l643
						}
						position++
					}
				l644:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l643
					}
					position++
					{
						position651, tokenIndex651 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l651
						}
						position++
						goto l652
					l651:
						position, tokenIndex = position651, tokenIndex651
					}
				l652:
					goto l637
				l643:
					position, tokenIndex = position637, tokenIndex637
					{
						position654, tokenIndex654 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l655
						}
						position++
						goto l654
					l655:
						position, tokenIndex = position654, tokenIndex654
						if buffer[position] != rune('X') {
							goto l653
						}
						position++
					}
				l654:
					{
						position656, tokenIndex656 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l657
						}
						position++
						goto l656
					l657:
						position, tokenIndex = position656, tokenIndex656
						if buffer[position] != rune('Z') {
							goto l653
						}
						position++
					}
				l656:
					{
						position658, tokenIndex658 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l659
						}
						position++
						goto l658
					l659:
						position, tokenIndex = position658, tokenIndex658
						if buffer[position] != rune('R') {
							goto l653
						}
						position++
					}
				l658:
					goto l637
				l653:
					position, tokenIndex = position637, tokenIndex637
					{
						position661, tokenIndex661 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l662
						}
						position++
						goto l661
					l662:
						position, tokenIndex = position661, tokenIndex661
						if buffer[position] != rune('W') {
							goto l660
						}
						position++
					}
				l661:
					{
						position663, tokenIndex663 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l664
						}
						position++
						goto l663
					l664:
						position, tokenIndex = position663, tokenIndex663
						if buffer[position] != rune('Z') {
							goto l660
						}
						position++
					}
				l663:
					{
						position665, tokenIndex665 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l666
						}
						position++
						goto l665
					l666:
						position, tokenIndex = position665, tokenIndex665
						if buffer[position] != rune('R') {
							goto l660
						}
						position++
					}
				l665:
					goto l637
				l660:
					position, tokenIndex = position637, tokenIndex637
					{
						position668, tokenIndex668 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l669
						}
						position++
						goto l668
					l669:
						position, tokenIndex = position668, tokenIndex668
						if buffer[position] != rune('N') {
							goto l667
						}
						position++
					}
				l668:
					{
						position670, tokenIndex670 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l671
						}
						position++
						goto l670
					l671:
						position, tokenIndex = position670, tokenIndex670
						if buffer[position] != rune('Z') {
							goto l667
						}
						position++
					}
				l670:
					{
						position672, tokenIndex672 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l673
						}
						position++
						goto l672
					l673:
						position, tokenIndex = position672, tokenIndex672
						if buffer[position] != rune('C') {
							goto l667
						}
						position++
					}
				l672:
					{
						position674, tokenIndex674 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l675
						}
						position++
						goto l674
					l675:
						position, tokenIndex = position674, tokenIndex674
						if buffer[position] != rune('V') {
							goto l667
						}
						position++
					}
				l674:
					goto l637
				l667:
					position, tokenIndex = position637, tokenIndex637
					if !_rules[ruleSVE2PredicateRegister]() {
						goto l676
					}
					goto l637
				l676:
					position, tokenIndex = position637, tokenIndex637
					if !_rules[ruleARMVectorRegister]() {
						goto l677
					}
					goto l637
				l677:
					position, tokenIndex = position637, tokenIndex637
					if !_rules[ruleSVE2SpecialValue]() {
						goto l678
					}
					goto l637
				l678:
					position, tokenIndex = position637, tokenIndex637
					if buffer[position] != rune('{') {
						goto l635
					}
					position++
					{
						position679, tokenIndex679 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l679
						}
						goto l680
					l679:
						position, tokenIndex = position679, tokenIndex679
					}
				l680:
					if !_rules[ruleARMVectorRegister]() {
						goto l635
					}
				l681:
					{
						position682, tokenIndex682 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l682
						}
						position++
						{
							position683, tokenIndex683 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l683
							}
							goto l684
						l683:
							position, tokenIndex = position683, tokenIndex683
						}
					l684:
						if !_rules[ruleARMVectorRegister]() {
							goto l682
						}
						goto l681
					l682:
						position, tokenIndex = position682, tokenIndex682
					}
					{
						position685, tokenIndex685 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l685
						}
						goto l686
					l685:
						position, tokenIndex = position685, tokenIndex685
					}
				l686:
					if buffer[position] != rune('}') {
						goto l635
					}
					position++
					{
						position687, tokenIndex687 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l687
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l687
						}
						position++
						{
							position689, tokenIndex689 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l689
							}
							position++
							goto l690
						l689:
							position, tokenIndex = position689, tokenIndex689
						}
					l690:
						if buffer[position] != rune(']') {
							goto l687
						}
						position++
						goto l688
					l687:
						position, tokenIndex = position687, tokenIndex687
					}
				l688:
				}
			l637:
				add(ruleARMRegister, position636)
			}
			return true
		l635:
			position, tokenIndex = position635, tokenIndex635
			return false
		},
		/* 45 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 {
			position691, tokenIndex691 := position, tokenIndex
			{
				position692 := position
				{
					position693, tokenIndex693 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l694
					}
					position++
					goto l693
				l694:
					position, tokenIndex = position693, tokenIndex693
					if buffer[position] != rune('v') {
						goto l695
					}
					position++
					goto l693
				l695:
					position, tokenIndex = position693, tokenIndex693
					if buffer[position] != rune('z') {
						goto l691
					}
					position++
				}
			l693:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l691
				}
				position++
				{
					position696, tokenIndex696 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l696
					}
					position++
					goto l697
				l696:
					position, tokenIndex = position696, tokenIndex696
				}
			l697:
				{
					position698, tokenIndex698 := position, tokenIndex
					{
						position699, tokenIndex699 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l700
						}
						position++
						goto l699
					l700:
						position, tokenIndex = position699, tokenIndex699
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l701
						}
						position++
						goto l699
					l701:
						position, tokenIndex = position699, tokenIndex699
						{
							position703, tokenIndex703 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l704
							}
							position++
							goto l703
						l704:
							position, tokenIndex = position703, tokenIndex703
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l702
							}
							position++
						}
					l703:
						goto l699
					l702:
						position, tokenIndex = position699, tokenIndex699
						if buffer[position] != rune('_') {
							goto l698
						}
						position++
					}
				l699:
					goto l691
				l698:
					position, tokenIndex = position698, tokenIndex698
				}
				{
					position705, tokenIndex705 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l705
					}
					position++
				l707:
					{
						position708, tokenIndex708 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l708
						}
						position++
						goto l707
					l708:
						position, tokenIndex = position708, tokenIndex708
					}
					{
						position709, tokenIndex709 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l710
						}
						position++
						goto l709
					l710:
						position, tokenIndex = position709, tokenIndex709
						if buffer[position] != rune('s') {
							goto l711
						}
						position++
						goto l709
					l711:
						position, tokenIndex = position709, tokenIndex709
						if buffer[position] != rune('d') {
							goto l712
						}
						position++
						goto l709
					l712:
						position, tokenIndex = position709, tokenIndex709
						if buffer[position] != rune('h') {
							goto l713
						}
						position++
						goto l709
					l713:
						position, tokenIndex = position709, tokenIndex709
						if buffer[position] != rune('q') {
							goto l705
						}
						position++
					}
				l709:
					{
						position714, tokenIndex714 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l714
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l714
						}
						position++
						{
							position716, tokenIndex716 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l716
							}
							position++
							goto l717
						l716:
							position, tokenIndex = position716, tokenIndex716
						}
					l717:
						if buffer[position] != rune(']') {
							goto l714
						}
						position++
						goto l715
					l714:
						position, tokenIndex = position714, tokenIndex714
					}
				l715:
					goto l706
				l705:
					position, tokenIndex = position705, tokenIndex705
				}
			l706:
				add(ruleARMVectorRegister, position692)
			}
			return true
		l691:
			position, tokenIndex = position691, tokenIndex691
			return false
		},
		/* 46 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
		func() bool {
			position718, tokenIndex718 := position, tokenIndex
			{
				position719 := position
				{
					position720, tokenIndex720 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l721
					}
					position++
					goto l720
				l721:
					position, tokenIndex = position720, tokenIndex720
					if buffer[position] != rune('P') {
						goto l718
					}
					position++
				}
			l720:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l718
				}
				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:
				if buffer[position] != rune('/') {
					goto l718
				}
				position++
				{
					position724, tokenIndex724 := position, tokenIndex
					if buffer[position] != rune('m') {
						goto l725
					}
					position++
					goto l724
				l725:
					position, tokenIndex = position724, tokenIndex724
					if buffer[position] != rune('M') {
						goto l726
					}
					position++
					goto l724
				l726:
					position, tokenIndex = position724, tokenIndex724
					{
						position727, tokenIndex727 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l728
						}
						position++
						goto l727
					l728:
						position, tokenIndex = position727, tokenIndex727
						if buffer[position] != rune('Z') {
							goto l718
						}
						position++
					}
				l727:
				}
			l724:
				add(ruleSVE2PredicateRegister, position719)
			}
			return true
		l718:
			position, tokenIndex = position718, tokenIndex718
			return false
		},
		/* 47 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 {
			position729, tokenIndex729 := position, tokenIndex
			{
				position730 := position
				{
					position731, tokenIndex731 := position, tokenIndex
					{
						position733, tokenIndex733 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l734
						}
						position++
						goto l733
					l734:
						position, tokenIndex = position733, tokenIndex733
						if buffer[position] != rune('P') {
							goto l732
						}
						position++
					}
				l733:
					{
						position735, tokenIndex735 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l736
						}
						position++
						goto l735
					l736:
						position, tokenIndex = position735, tokenIndex735
						if buffer[position] != rune('O') {
							goto l732
						}
						position++
					}
				l735:
					{
						position737, tokenIndex737 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l738
						}
						position++
						goto l737
					l738:
						position, tokenIndex = position737, tokenIndex737
						if buffer[position] != rune('W') {
							goto l732
						}
						position++
					}
				l737:
					if buffer[position] != rune('2') {
						goto l732
					}
					position++
					goto l731
				l732:
					position, tokenIndex = position731, tokenIndex731
					{
						position740, tokenIndex740 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l741
						}
						position++
						goto l740
					l741:
						position, tokenIndex = position740, tokenIndex740
						if buffer[position] != rune('V') {
							goto l739
						}
						position++
					}
				l740:
					{
						position742, tokenIndex742 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l743
						}
						position++
						goto l742
					l743:
						position, tokenIndex = position742, tokenIndex742
						if buffer[position] != rune('L') {
							goto l739
						}
						position++
					}
				l742:
					{
						position744, tokenIndex744 := position, tokenIndex
						if buffer[position] != rune('1') {
							goto l745
						}
						position++
						goto l744
					l745:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('2') {
							goto l746
						}
						position++
						goto l744
					l746:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('3') {
							goto l747
						}
						position++
						goto l744
					l747:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('4') {
							goto l748
						}
						position++
						goto l744
					l748:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('5') {
							goto l749
						}
						position++
						goto l744
					l749:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('6') {
							goto l750
						}
						position++
						goto l744
					l750:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('7') {
							goto l751
						}
						position++
						goto l744
					l751:
						position, tokenIndex = position744, tokenIndex744
						if buffer[position] != rune('8') {
							goto l739
						}
						position++
					}
				l744:
					{
						position752, tokenIndex752 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l752
						}
						position++
						goto l739
					l752:
						position, tokenIndex = position752, tokenIndex752
					}
					goto l731
				l739:
					position, tokenIndex = position731, tokenIndex731
					{
						position754, tokenIndex754 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l755
						}
						position++
						goto l754
					l755:
						position, tokenIndex = position754, tokenIndex754
						if buffer[position] != rune('V') {
							goto l753
						}
						position++
					}
				l754:
					{
						position756, tokenIndex756 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l757
						}
						position++
						goto l756
					l757:
						position, tokenIndex = position756, tokenIndex756
						if buffer[position] != rune('L') {
							goto l753
						}
						position++
					}
				l756:
					if buffer[position] != rune('1') {
						goto l753
					}
					position++
					if buffer[position] != rune('6') {
						goto l753
					}
					position++
					goto l731
				l753:
					position, tokenIndex = position731, tokenIndex731
					{
						position759, tokenIndex759 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l760
						}
						position++
						goto l759
					l760:
						position, tokenIndex = position759, tokenIndex759
						if buffer[position] != rune('V') {
							goto l758
						}
						position++
					}
				l759:
					{
						position761, tokenIndex761 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l762
						}
						position++
						goto l761
					l762:
						position, tokenIndex = position761, tokenIndex761
						if buffer[position] != rune('L') {
							goto l758
						}
						position++
					}
				l761:
					if buffer[position] != rune('3') {
						goto l758
					}
					position++
					if buffer[position] != rune('2') {
						goto l758
					}
					position++
					goto l731
				l758:
					position, tokenIndex = position731, tokenIndex731
					{
						position764, tokenIndex764 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l765
						}
						position++
						goto l764
					l765:
						position, tokenIndex = position764, tokenIndex764
						if buffer[position] != rune('V') {
							goto l763
						}
						position++
					}
				l764:
					{
						position766, tokenIndex766 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l767
						}
						position++
						goto l766
					l767:
						position, tokenIndex = position766, tokenIndex766
						if buffer[position] != rune('L') {
							goto l763
						}
						position++
					}
				l766:
					if buffer[position] != rune('6') {
						goto l763
					}
					position++
					if buffer[position] != rune('4') {
						goto l763
					}
					position++
					goto l731
				l763:
					position, tokenIndex = position731, tokenIndex731
					{
						position769, tokenIndex769 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l770
						}
						position++
						goto l769
					l770:
						position, tokenIndex = position769, tokenIndex769
						if buffer[position] != rune('V') {
							goto l768
						}
						position++
					}
				l769:
					{
						position771, tokenIndex771 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l772
						}
						position++
						goto l771
					l772:
						position, tokenIndex = position771, tokenIndex771
						if buffer[position] != rune('L') {
							goto l768
						}
						position++
					}
				l771:
					if buffer[position] != rune('1') {
						goto l768
					}
					position++
					if buffer[position] != rune('2') {
						goto l768
					}
					position++
					if buffer[position] != rune('8') {
						goto l768
					}
					position++
					goto l731
				l768:
					position, tokenIndex = position731, tokenIndex731
					{
						position774, tokenIndex774 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l775
						}
						position++
						goto l774
					l775:
						position, tokenIndex = position774, tokenIndex774
						if buffer[position] != rune('V') {
							goto l773
						}
						position++
					}
				l774:
					{
						position776, tokenIndex776 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l777
						}
						position++
						goto l776
					l777:
						position, tokenIndex = position776, tokenIndex776
						if buffer[position] != rune('L') {
							goto l773
						}
						position++
					}
				l776:
					if buffer[position] != rune('2') {
						goto l773
					}
					position++
					if buffer[position] != rune('5') {
						goto l773
					}
					position++
					if buffer[position] != rune('6') {
						goto l773
					}
					position++
					goto l731
				l773:
					position, tokenIndex = position731, tokenIndex731
					{
						position779, tokenIndex779 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l780
						}
						position++
						goto l779
					l780:
						position, tokenIndex = position779, tokenIndex779
						if buffer[position] != rune('M') {
							goto l778
						}
						position++
					}
				l779:
					{
						position781, tokenIndex781 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l782
						}
						position++
						goto l781
					l782:
						position, tokenIndex = position781, tokenIndex781
						if buffer[position] != rune('U') {
							goto l778
						}
						position++
					}
				l781:
					{
						position783, tokenIndex783 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l784
						}
						position++
						goto l783
					l784:
						position, tokenIndex = position783, tokenIndex783
						if buffer[position] != rune('L') {
							goto l778
						}
						position++
					}
				l783:
					if buffer[position] != rune('3') {
						goto l778
					}
					position++
					goto l731
				l778:
					position, tokenIndex = position731, tokenIndex731
					{
						position786, tokenIndex786 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l787
						}
						position++
						goto l786
					l787:
						position, tokenIndex = position786, tokenIndex786
						if buffer[position] != rune('M') {
							goto l785
						}
						position++
					}
				l786:
					{
						position788, tokenIndex788 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l789
						}
						position++
						goto l788
					l789:
						position, tokenIndex = position788, tokenIndex788
						if buffer[position] != rune('U') {
							goto l785
						}
						position++
					}
				l788:
					{
						position790, tokenIndex790 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l791
						}
						position++
						goto l790
					l791:
						position, tokenIndex = position790, tokenIndex790
						if buffer[position] != rune('L') {
							goto l785
						}
						position++
					}
				l790:
					if buffer[position] != rune('4') {
						goto l785
					}
					position++
					goto l731
				l785:
					position, tokenIndex = position731, tokenIndex731
					{
						position792, tokenIndex792 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l793
						}
						position++
						goto l792
					l793:
						position, tokenIndex = position792, tokenIndex792
						if buffer[position] != rune('A') {
							goto l729
						}
						position++
					}
				l792:
					{
						position794, tokenIndex794 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l795
						}
						position++
						goto l794
					l795:
						position, tokenIndex = position794, tokenIndex794
						if buffer[position] != rune('L') {
							goto l729
						}
						position++
					}
				l794:
					{
						position796, tokenIndex796 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l797
						}
						position++
						goto l796
					l797:
						position, tokenIndex = position796, tokenIndex796
						if buffer[position] != rune('L') {
							goto l729
						}
						position++
					}
				l796:
				}
			l731:
				{
					position798, tokenIndex798 := position, tokenIndex
					{
						position799, tokenIndex799 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l800
						}
						position++
						goto l799
					l800:
						position, tokenIndex = position799, tokenIndex799
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l801
						}
						position++
						goto l799
					l801:
						position, tokenIndex = position799, tokenIndex799
						{
							position803, tokenIndex803 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l804
							}
							position++
							goto l803
						l804:
							position, tokenIndex = position803, tokenIndex803
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l802
							}
							position++
						}
					l803:
						goto l799
					l802:
						position, tokenIndex = position799, tokenIndex799
						if buffer[position] != rune('_') {
							goto l798
						}
						position++
					}
				l799:
					goto l729
				l798:
					position, tokenIndex = position798, tokenIndex798
				}
				add(ruleSVE2SpecialValue, position730)
			}
			return true
		l729:
			position, tokenIndex = position729, tokenIndex729
			return false
		},
		/* 48 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position805, tokenIndex805 := position, tokenIndex
			{
				position806 := position
				{
					position807, tokenIndex807 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l808
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l808
					}
					goto l807
				l808:
					position, tokenIndex = position807, tokenIndex807
					if !_rules[ruleSymbolRef]() {
						goto l809
					}
					goto l807
				l809:
					position, tokenIndex = position807, tokenIndex807
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l810
					}
					goto l807
				l810:
					position, tokenIndex = position807, tokenIndex807
				l812:
					{
						position813, tokenIndex813 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l813
						}
						goto l812
					l813:
						position, tokenIndex = position813, tokenIndex813
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l811
					}
					goto l807
				l811:
					position, tokenIndex = position807, tokenIndex807
					if !_rules[ruleSegmentRegister]() {
						goto l814
					}
					if !_rules[ruleOffset]() {
						goto l814
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l814
					}
					goto l807
				l814:
					position, tokenIndex = position807, tokenIndex807
					if !_rules[ruleSegmentRegister]() {
						goto l815
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l815
					}
					goto l807
				l815:
					position, tokenIndex = position807, tokenIndex807
					if !_rules[ruleSegmentRegister]() {
						goto l816
					}
					if !_rules[ruleOffset]() {
						goto l816
					}
					goto l807
				l816:
					position, tokenIndex = position807, tokenIndex807
					if !_rules[ruleARMBaseIndexScale]() {
						goto l817
					}
					goto l807
				l817:
					position, tokenIndex = position807, tokenIndex807
					if !_rules[ruleBaseIndexScale]() {
						goto l805
					}
				}
			l807:
				add(ruleMemoryRef, position806)
			}
			return true
		l805:
			position, tokenIndex = position805, tokenIndex805
			return false
		},
		/* 49 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position818, tokenIndex818 := position, tokenIndex
			{
				position819 := position
				{
					position820, tokenIndex820 := position, tokenIndex
				l822:
					{
						position823, tokenIndex823 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l823
						}
						goto l822
					l823:
						position, tokenIndex = position823, tokenIndex823
					}
					if buffer[position] != rune('+') {
						goto l820
					}
					position++
					goto l821
				l820:
					position, tokenIndex = position820, tokenIndex820
				}
			l821:
				{
					position824, tokenIndex824 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l825
					}
					goto l824
				l825:
					position, tokenIndex = position824, tokenIndex824
					if !_rules[ruleSymbolName]() {
						goto l818
					}
				}
			l824:
			l826:
				{
					position827, tokenIndex827 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l827
					}
					goto l826
				l827:
					position, tokenIndex = position827, tokenIndex827
				}
				{
					position828, tokenIndex828 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l828
					}
					position++
					if !_rules[ruleSection]() {
						goto l828
					}
				l830:
					{
						position831, tokenIndex831 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l831
						}
						goto l830
					l831:
						position, tokenIndex = position831, tokenIndex831
					}
					goto l829
				l828:
					position, tokenIndex = position828, tokenIndex828
				}
			l829:
				add(ruleSymbolRef, position819)
			}
			return true
		l818:
			position, tokenIndex = position818, tokenIndex818
			return false
		},
		/* 50 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position832, tokenIndex832 := position, tokenIndex
			{
				position833 := position
				if buffer[position] != rune(':') {
					goto l832
				}
				position++
				{
					position834, tokenIndex834 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l835
					}
					position++
					goto l834
				l835:
					position, tokenIndex = position834, tokenIndex834
					if buffer[position] != rune('L') {
						goto l832
					}
					position++
				}
			l834:
				{
					position836, tokenIndex836 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l837
					}
					position++
					goto l836
				l837:
					position, tokenIndex = position836, tokenIndex836
					if buffer[position] != rune('O') {
						goto l832
					}
					position++
				}
			l836:
				if buffer[position] != rune('1') {
					goto l832
				}
				position++
				if buffer[position] != rune('2') {
					goto l832
				}
				position++
				if buffer[position] != rune(':') {
					goto l832
				}
				position++
				{
					position838, tokenIndex838 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l839
					}
					goto l838
				l839:
					position, tokenIndex = position838, tokenIndex838
					if !_rules[ruleSymbolName]() {
						goto l832
					}
				}
			l838:
				{
					position840, tokenIndex840 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l840
					}
					goto l841
				l840:
					position, tokenIndex = position840, tokenIndex840
				}
			l841:
				add(ruleLow12BitsSymbolRef, position833)
			}
			return true
		l832:
			position, tokenIndex = position832, tokenIndex832
			return false
		},
		/* 51 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position842, tokenIndex842 := position, tokenIndex
			{
				position843 := position
				if buffer[position] != rune('[') {
					goto l842
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l842
				}
				{
					position844, tokenIndex844 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l844
					}
					position++
					{
						position846, tokenIndex846 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l846
						}
						goto l847
					l846:
						position, tokenIndex = position846, tokenIndex846
					}
				l847:
					{
						position848, tokenIndex848 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l849
						}
						position++
						if !_rules[ruleOffset]() {
							goto l849
						}
						{
							position850, tokenIndex850 := position, tokenIndex
							{
								position852, tokenIndex852 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l853
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l853
								}
								position++
							l854:
								{
									position855, tokenIndex855 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l855
									}
									position++
									goto l854
								l855:
									position, tokenIndex = position855, tokenIndex855
								}
								goto l852
							l853:
								position, tokenIndex = position852, tokenIndex852
								if buffer[position] != rune('*') {
									goto l856
								}
								position++
								if buffer[position] != rune('(') {
									goto l856
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l856
								}
								position++
							l857:
								{
									position858, tokenIndex858 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l858
									}
									position++
									goto l857
								l858:
									position, tokenIndex = position858, tokenIndex858
								}
								if !_rules[ruleOperator]() {
									goto l856
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l856
								}
								position++
							l859:
								{
									position860, tokenIndex860 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l860
									}
									position++
									goto l859
								l860:
									position, tokenIndex = position860, tokenIndex860
								}
								if buffer[position] != rune(')') {
									goto l856
								}
								position++
								goto l852
							l856:
								position, tokenIndex = position852, tokenIndex852
							l861:
								{
									position862, tokenIndex862 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l862
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l862
									}
									position++
								l863:
									{
										position864, tokenIndex864 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l864
										}
										position++
										goto l863
									l864:
										position, tokenIndex = position864, tokenIndex864
									}
									goto l861
								l862:
									position, tokenIndex = position862, tokenIndex862
								}
							}
						l852:
							goto l851

							position, tokenIndex = position850, tokenIndex850
						}
					l851:
						goto l848
					l849:
						position, tokenIndex = position848, tokenIndex848
						if !_rules[ruleARMGOTLow12]() {
							goto l865
						}
						goto l848
					l865:
						position, tokenIndex = position848, tokenIndex848
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l866
						}
						goto l848
					l866:
						position, tokenIndex = position848, tokenIndex848
						if !_rules[ruleARMRegister]() {
							goto l844
						}
					}
				l848:
					{
						position867, tokenIndex867 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l867
						}
						position++
						{
							position869, tokenIndex869 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l869
							}
							goto l870
						l869:
							position, tokenIndex = position869, tokenIndex869
						}
					l870:
						if !_rules[ruleARMConstantTweak]() {
							goto l867
						}
						goto l868
					l867:
						position, tokenIndex = position867, tokenIndex867
					}
				l868:
					goto l845
				l844:
					position, tokenIndex = position844, tokenIndex844
				}
			l845:
				if buffer[position] != rune(']') {
					goto l842
				}
				position++
				{
					position871, tokenIndex871 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l871
					}
					goto l872
				l871:
					position, tokenIndex = position871, tokenIndex871
				}
			l872:
				add(ruleARMBaseIndexScale, position843)
			}
			return true
		l842:
			position, tokenIndex = position842, tokenIndex842
			return false
		},
		/* 52 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position873, tokenIndex873 := position, tokenIndex
			{
				position874 := position
				if buffer[position] != rune(':') {
					goto l873
				}
				position++
				{
					position875, tokenIndex875 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l876
					}
					position++
					goto l875
				l876:
					position, tokenIndex = position875, tokenIndex875
					if buffer[position] != rune('G') {
						goto l873
					}
					position++
				}
			l875:
				{
					position877, tokenIndex877 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l878
					}
					position++
					goto l877
				l878:
					position, tokenIndex = position877, tokenIndex877
					if buffer[position] != rune('O') {
						goto l873
					}
					position++
				}
			l877:
				{
					position879, tokenIndex879 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l880
					}
					position++
					goto l879
				l880:
					position, tokenIndex = position879, tokenIndex879
					if buffer[position] != rune('T') {
						goto l873
					}
					position++
				}
			l879:
				if buffer[position] != rune('_') {
					goto l873
				}
				position++
				{
					position881, tokenIndex881 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l882
					}
					position++
					goto l881
				l882:
					position, tokenIndex = position881, tokenIndex881
					if buffer[position] != rune('L') {
						goto l873
					}
					position++
				}
			l881:
				{
					position883, tokenIndex883 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l884
					}
					position++
					goto l883
				l884:
					position, tokenIndex = position883, tokenIndex883
					if buffer[position] != rune('O') {
						goto l873
					}
					position++
				}
			l883:
				if buffer[position] != rune('1') {
					goto l873
				}
				position++
				if buffer[position] != rune('2') {
					goto l873
				}
				position++
				if buffer[position] != rune(':') {
					goto l873
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l873
				}
				add(ruleARMGOTLow12, position874)
			}
			return true
		l873:
			position, tokenIndex = position873, tokenIndex873
			return false
		},
		/* 53 ARMPostincrement <- <'!'> */
		func() bool {
			position885, tokenIndex885 := position, tokenIndex
			{
				position886 := position
				if buffer[position] != rune('!') {
					goto l885
				}
				position++
				add(ruleARMPostincrement, position886)
			}
			return true
		l885:
			position, tokenIndex = position885, tokenIndex885
			return false
		},
		/* 54 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position887, tokenIndex887 := position, tokenIndex
			{
				position888 := position
				if buffer[position] != rune('(') {
					goto l887
				}
				position++
				{
					position889, tokenIndex889 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l889
					}
					goto l890
				l889:
					position, tokenIndex = position889, tokenIndex889
				}
			l890:
				{
					position891, tokenIndex891 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l891
					}
					goto l892
				l891:
					position, tokenIndex = position891, tokenIndex891
				}
			l892:
				{
					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[ruleRegisterOrConstant]() {
						goto l893
					}
					{
						position897, tokenIndex897 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l897
						}
						goto l898
					l897:
						position, tokenIndex = position897, tokenIndex897
					}
				l898:
					{
						position899, tokenIndex899 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l899
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l899
						}
						position++
					l901:
						{
							position902, tokenIndex902 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l902
							}
							position++
							goto l901
						l902:
							position, tokenIndex = position902, tokenIndex902
						}
						goto l900
					l899:
						position, tokenIndex = position899, tokenIndex899
					}
				l900:
					goto l894
				l893:
					position, tokenIndex = position893, tokenIndex893
				}
			l894:
				if buffer[position] != rune(')') {
					goto l887
				}
				position++
				add(ruleBaseIndexScale, position888)
			}
			return true
		l887:
			position, tokenIndex = position887, tokenIndex887
			return false
		},
		/* 55 Operator <- <('+' / '-')> */
		func() bool {
			position903, tokenIndex903 := position, tokenIndex
			{
				position904 := position
				{
					position905, tokenIndex905 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l906
					}
					position++
					goto l905
				l906:
					position, tokenIndex = position905, tokenIndex905
					if buffer[position] != rune('-') {
						goto l903
					}
					position++
				}
			l905:
				add(ruleOperator, position904)
			}
			return true
		l903:
			position, tokenIndex = position903, tokenIndex903
			return false
		},
		/* 56 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position907, tokenIndex907 := position, tokenIndex
			{
				position908 := position
				{
					position909, tokenIndex909 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l909
					}
					position++
					goto l910
				l909:
					position, tokenIndex = position909, tokenIndex909
				}
			l910:
				{
					position911, tokenIndex911 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l911
					}
					position++
					goto l912
				l911:
					position, tokenIndex = position911, tokenIndex911
				}
			l912:
				{
					position913, tokenIndex913 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l914
					}
					position++
					{
						position915, tokenIndex915 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l916
						}
						position++
						goto l915
					l916:
						position, tokenIndex = position915, tokenIndex915
						if buffer[position] != rune('B') {
							goto l914
						}
						position++
					}
				l915:
					{
						position919, tokenIndex919 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l920
						}
						position++
						goto l919
					l920:
						position, tokenIndex = position919, tokenIndex919
						if buffer[position] != rune('1') {
							goto l914
						}
						position++
					}
				l919:
				l917:
					{
						position918, tokenIndex918 := position, tokenIndex
						{
							position921, tokenIndex921 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l922
							}
							position++
							goto l921
						l922:
							position, tokenIndex = position921, tokenIndex921
							if buffer[position] != rune('1') {
								goto l918
							}
							position++
						}
					l921:
						goto l917
					l918:
						position, tokenIndex = position918, tokenIndex918
					}
					goto l913
				l914:
					position, tokenIndex = position913, tokenIndex913
					if buffer[position] != rune('0') {
						goto l923
					}
					position++
					{
						position924, tokenIndex924 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l925
						}
						position++
						goto l924
					l925:
						position, tokenIndex = position924, tokenIndex924
						if buffer[position] != rune('X') {
							goto l923
						}
						position++
					}
				l924:
					{
						position928, tokenIndex928 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l929
						}
						position++
						goto l928
					l929:
						position, tokenIndex = position928, tokenIndex928
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l930
						}
						position++
						goto l928
					l930:
						position, tokenIndex = position928, tokenIndex928
						{
							position931, tokenIndex931 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l932
							}
							position++
							goto l931
						l932:
							position, tokenIndex = position931, tokenIndex931
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l923
							}
							position++
						}
					l931:
					}
				l928:
				l926:
					{
						position927, tokenIndex927 := position, tokenIndex
						{
							position933, tokenIndex933 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l934
							}
							position++
							goto l933
						l934:
							position, tokenIndex = position933, tokenIndex933
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l935
							}
							position++
							goto l933
						l935:
							position, tokenIndex = position933, tokenIndex933
							{
								position936, tokenIndex936 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l937
								}
								position++
								goto l936
							l937:
								position, tokenIndex = position936, tokenIndex936
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l927
								}
								position++
							}
						l936:
						}
					l933:
						goto l926
					l927:
						position, tokenIndex = position927, tokenIndex927
					}
					goto l913
				l923:
					position, tokenIndex = position913, tokenIndex913
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l907
					}
					position++
				l938:
					{
						position939, tokenIndex939 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l939
						}
						position++
						goto l938
					l939:
						position, tokenIndex = position939, tokenIndex939
					}
				}
			l913:
				add(ruleOffset, position908)
			}
			return true
		l907:
			position, tokenIndex = position907, tokenIndex907
			return false
		},
		/* 57 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position940, tokenIndex940 := position, tokenIndex
			{
				position941 := position
				{
					position944, tokenIndex944 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l945
					}
					position++
					goto l944
				l945:
					position, tokenIndex = position944, tokenIndex944
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l946
					}
					position++
					goto l944
				l946:
					position, tokenIndex = position944, tokenIndex944
					if buffer[position] != rune('@') {
						goto l940
					}
					position++
				}
			l944:
			l942:
				{
					position943, tokenIndex943 := position, tokenIndex
					{
						position947, tokenIndex947 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l948
						}
						position++
						goto l947
					l948:
						position, tokenIndex = position947, tokenIndex947
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l949
						}
						position++
						goto l947
					l949:
						position, tokenIndex = position947, tokenIndex947
						if buffer[position] != rune('@') {
							goto l943
						}
						position++
					}
				l947:
					goto l942
				l943:
					position, tokenIndex = position943, tokenIndex943
				}
				add(ruleSection, position941)
			}
			return true
		l940:
			position, tokenIndex = position940, tokenIndex940
			return false
		},
		/* 58 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position950, tokenIndex950 := position, tokenIndex
			{
				position951 := position
				if buffer[position] != rune('%') {
					goto l950
				}
				position++
				{
					position952, tokenIndex952 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l953
					}
					position++
					goto l952
				l953:
					position, tokenIndex = position952, tokenIndex952
					if buffer[position] != rune('s') {
						goto l950
					}
					position++
				}
			l952:
				if buffer[position] != rune('s') {
					goto l950
				}
				position++
				if buffer[position] != rune(':') {
					goto l950
				}
				position++
				add(ruleSegmentRegister, position951)
			}
			return true
		l950:
			position, tokenIndex = position950, tokenIndex950
			return false
		},
	}
	p.rules = _rules
	return nil
}
