package main

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

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

const endSymbol rune = 1114112

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

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

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

type token32 struct {
	pegRule
	begin, end uint32
}

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

type node32 struct {
	token32
	up, next *node32
}

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

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

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

type tokens32 struct {
	tree []token32
}

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

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

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

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

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

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

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

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

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

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

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

type textPosition struct {
	line, symbol int
}

type textPositionMap map[int]textPosition

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

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

	return translations
}

type parseError struct {
	p   *Asm
	max token32
}

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

	return err
}

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

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

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

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

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

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

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

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

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

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

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

	_rules = [...]func() bool{
		nil,
		/* 0 AsmFile <- <(Statement* !.)> */
		func() bool {
			position0, tokenIndex0 := position, tokenIndex
			{
				position1 := position
			l2:
				{
					position3, tokenIndex3 := position, tokenIndex
					if !_rules[ruleStatement]() {
						goto l3
					}
					goto l2
				l3:
					position, tokenIndex = position3, tokenIndex3
				}
				{
					position4, tokenIndex4 := position, tokenIndex
					if !matchDot() {
						goto l4
					}
					goto l0
				l4:
					position, tokenIndex = position4, tokenIndex4
				}
				add(ruleAsmFile, position1)
			}
			return true
		l0:
			position, tokenIndex = position0, tokenIndex0
			return false
		},
		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / SymbolDefiningDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
		func() bool {
			position5, tokenIndex5 := position, tokenIndex
			{
				position6 := position
				{
					position7, tokenIndex7 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l7
					}
					goto l8
				l7:
					position, tokenIndex = position7, tokenIndex7
				}
			l8:
				{
					position9, tokenIndex9 := position, tokenIndex
					if !_rules[ruleLabel]() {
						goto l10
					}
					goto l9
				l10:
					position, tokenIndex = position9, tokenIndex9
					{
						position11, tokenIndex11 := position, tokenIndex
						if !_rules[ruleGlobalDirective]() {
							goto l12
						}
						goto l11
					l12:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLocationDirective]() {
							goto l13
						}
						goto l11
					l13:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleSymbolDefiningDirective]() {
							goto l14
						}
						goto l11
					l14:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLabelContainingDirective]() {
							goto l15
						}
						goto l11
					l15:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleInstruction]() {
							goto l16
						}
						goto l11
					l16:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleDirective]() {
							goto l17
						}
						goto l11
					l17:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleComment]() {
							goto l18
						}
						goto l11
					l18:
						position, tokenIndex = position11, tokenIndex11
					}
				l11:
					{
						position19, tokenIndex19 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l19
						}
						goto l20
					l19:
						position, tokenIndex = position19, tokenIndex19
					}
				l20:
					{
						position21, tokenIndex21 := position, tokenIndex
						{
							position23, tokenIndex23 := position, tokenIndex
							if !_rules[ruleComment]() {
								goto l23
							}
							goto l24
						l23:
							position, tokenIndex = position23, tokenIndex23
						}
					l24:
						if buffer[position] != rune('\n') {
							goto l22
						}
						position++
						goto l21
					l22:
						position, tokenIndex = position21, tokenIndex21
						if buffer[position] != rune(';') {
							goto l5
						}
						position++
					}
				l21:
				}
			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 {
			position25, tokenIndex25 := position, tokenIndex
			{
				position26 := position
				{
					position27, tokenIndex27 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l28
					}
					position++
					{
						position29, tokenIndex29 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l30
						}
						position++
						goto l29
					l30:
						position, tokenIndex = position29, tokenIndex29
						if buffer[position] != rune('G') {
							goto l28
						}
						position++
					}
				l29:
					{
						position31, tokenIndex31 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l32
						}
						position++
						goto l31
					l32:
						position, tokenIndex = position31, tokenIndex31
						if buffer[position] != rune('L') {
							goto l28
						}
						position++
					}
				l31:
					{
						position33, tokenIndex33 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l34
						}
						position++
						goto l33
					l34:
						position, tokenIndex = position33, tokenIndex33
						if buffer[position] != rune('O') {
							goto l28
						}
						position++
					}
				l33:
					{
						position35, tokenIndex35 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l36
						}
						position++
						goto l35
					l36:
						position, tokenIndex = position35, tokenIndex35
						if buffer[position] != rune('B') {
							goto l28
						}
						position++
					}
				l35:
					{
						position37, tokenIndex37 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l38
						}
						position++
						goto l37
					l38:
						position, tokenIndex = position37, tokenIndex37
						if buffer[position] != rune('A') {
							goto l28
						}
						position++
					}
				l37:
					{
						position39, tokenIndex39 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l40
						}
						position++
						goto l39
					l40:
						position, tokenIndex = position39, tokenIndex39
						if buffer[position] != rune('L') {
							goto l28
						}
						position++
					}
				l39:
					goto l27
				l28:
					position, tokenIndex = position27, tokenIndex27
					if buffer[position] != rune('.') {
						goto l25
					}
					position++
					{
						position41, tokenIndex41 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l42
						}
						position++
						goto l41
					l42:
						position, tokenIndex = position41, tokenIndex41
						if buffer[position] != rune('G') {
							goto l25
						}
						position++
					}
				l41:
					{
						position43, tokenIndex43 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l44
						}
						position++
						goto l43
					l44:
						position, tokenIndex = position43, tokenIndex43
						if buffer[position] != rune('L') {
							goto l25
						}
						position++
					}
				l43:
					{
						position45, tokenIndex45 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l46
						}
						position++
						goto l45
					l46:
						position, tokenIndex = position45, tokenIndex45
						if buffer[position] != rune('O') {
							goto l25
						}
						position++
					}
				l45:
					{
						position47, tokenIndex47 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l48
						}
						position++
						goto l47
					l48:
						position, tokenIndex = position47, tokenIndex47
						if buffer[position] != rune('B') {
							goto l25
						}
						position++
					}
				l47:
					{
						position49, tokenIndex49 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l50
						}
						position++
						goto l49
					l50:
						position, tokenIndex = position49, tokenIndex49
						if buffer[position] != rune('L') {
							goto l25
						}
						position++
					}
				l49:
				}
			l27:
				if !_rules[ruleWS]() {
					goto l25
				}
				if !_rules[ruleSymbolName]() {
					goto l25
				}
				add(ruleGlobalDirective, position26)
			}
			return true
		l25:
			position, tokenIndex = position25, tokenIndex25
			return false
		},
		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
		func() bool {
			position51, tokenIndex51 := position, tokenIndex
			{
				position52 := position
				if buffer[position] != rune('.') {
					goto l51
				}
				position++
				if !_rules[ruleDirectiveName]() {
					goto l51
				}
				{
					position53, tokenIndex53 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l53
					}
					if !_rules[ruleArgs]() {
						goto l53
					}
					goto l54
				l53:
					position, tokenIndex = position53, tokenIndex53
				}
			l54:
				add(ruleDirective, position52)
			}
			return true
		l51:
			position, tokenIndex = position51, tokenIndex51
			return false
		},
		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
		func() bool {
			position55, tokenIndex55 := position, tokenIndex
			{
				position56 := position
				{
					position59, tokenIndex59 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l60
					}
					position++
					goto l59
				l60:
					position, tokenIndex = position59, tokenIndex59
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l61
					}
					position++
					goto l59
				l61:
					position, tokenIndex = position59, tokenIndex59
					{
						position63, tokenIndex63 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l64
						}
						position++
						goto l63
					l64:
						position, tokenIndex = position63, tokenIndex63
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l62
						}
						position++
					}
				l63:
					goto l59
				l62:
					position, tokenIndex = position59, tokenIndex59
					if buffer[position] != rune('_') {
						goto l55
					}
					position++
				}
			l59:
			l57:
				{
					position58, tokenIndex58 := position, tokenIndex
					{
						position65, tokenIndex65 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l66
						}
						position++
						goto l65
					l66:
						position, tokenIndex = position65, tokenIndex65
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l67
						}
						position++
						goto l65
					l67:
						position, tokenIndex = position65, tokenIndex65
						{
							position69, tokenIndex69 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l70
							}
							position++
							goto l69
						l70:
							position, tokenIndex = position69, tokenIndex69
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l68
							}
							position++
						}
					l69:
						goto l65
					l68:
						position, tokenIndex = position65, tokenIndex65
						if buffer[position] != rune('_') {
							goto l58
						}
						position++
					}
				l65:
					goto l57
				l58:
					position, tokenIndex = position58, tokenIndex58
				}
				add(ruleDirectiveName, position56)
			}
			return true
		l55:
			position, tokenIndex = position55, tokenIndex55
			return false
		},
		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
		func() bool {
			position71, tokenIndex71 := position, tokenIndex
			{
				position72 := position
				{
					position73, tokenIndex73 := position, tokenIndex
					if !_rules[ruleFileDirective]() {
						goto l74
					}
					goto l73
				l74:
					position, tokenIndex = position73, tokenIndex73
					if !_rules[ruleLocDirective]() {
						goto l71
					}
				}
			l73:
				add(ruleLocationDirective, position72)
			}
			return true
		l71:
			position, tokenIndex = position71, tokenIndex71
			return false
		},
		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
		func() bool {
			position75, tokenIndex75 := position, tokenIndex
			{
				position76 := position
				if buffer[position] != rune('.') {
					goto l75
				}
				position++
				{
					position77, tokenIndex77 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l78
					}
					position++
					goto l77
				l78:
					position, tokenIndex = position77, tokenIndex77
					if buffer[position] != rune('F') {
						goto l75
					}
					position++
				}
			l77:
				{
					position79, tokenIndex79 := position, tokenIndex
					if buffer[position] != rune('i') {
						goto l80
					}
					position++
					goto l79
				l80:
					position, tokenIndex = position79, tokenIndex79
					if buffer[position] != rune('I') {
						goto l75
					}
					position++
				}
			l79:
				{
					position81, tokenIndex81 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l82
					}
					position++
					goto l81
				l82:
					position, tokenIndex = position81, tokenIndex81
					if buffer[position] != rune('L') {
						goto l75
					}
					position++
				}
			l81:
				{
					position83, tokenIndex83 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l84
					}
					position++
					goto l83
				l84:
					position, tokenIndex = position83, tokenIndex83
					if buffer[position] != rune('E') {
						goto l75
					}
					position++
				}
			l83:
				if !_rules[ruleWS]() {
					goto l75
				}
				{
					position87, tokenIndex87 := position, tokenIndex
					{
						position88, tokenIndex88 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l89
						}
						position++
						goto l88
					l89:
						position, tokenIndex = position88, tokenIndex88
						if buffer[position] != rune('\n') {
							goto l87
						}
						position++
					}
				l88:
					goto l75
				l87:
					position, tokenIndex = position87, tokenIndex87
				}
				if !matchDot() {
					goto l75
				}
			l85:
				{
					position86, tokenIndex86 := position, tokenIndex
					{
						position90, tokenIndex90 := position, tokenIndex
						{
							position91, tokenIndex91 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l92
							}
							position++
							goto l91
						l92:
							position, tokenIndex = position91, tokenIndex91
							if buffer[position] != rune('\n') {
								goto l90
							}
							position++
						}
					l91:
						goto l86
					l90:
						position, tokenIndex = position90, tokenIndex90
					}
					if !matchDot() {
						goto l86
					}
					goto l85
				l86:
					position, tokenIndex = position86, tokenIndex86
				}
				add(ruleFileDirective, position76)
			}
			return true
		l75:
			position, tokenIndex = position75, tokenIndex75
			return false
		},
		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
		func() bool {
			position93, tokenIndex93 := position, tokenIndex
			{
				position94 := position
				if buffer[position] != rune('.') {
					goto l93
				}
				position++
				{
					position95, tokenIndex95 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l96
					}
					position++
					goto l95
				l96:
					position, tokenIndex = position95, tokenIndex95
					if buffer[position] != rune('L') {
						goto l93
					}
					position++
				}
			l95:
				{
					position97, tokenIndex97 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l98
					}
					position++
					goto l97
				l98:
					position, tokenIndex = position97, tokenIndex97
					if buffer[position] != rune('O') {
						goto l93
					}
					position++
				}
			l97:
				{
					position99, tokenIndex99 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l100
					}
					position++
					goto l99
				l100:
					position, tokenIndex = position99, tokenIndex99
					if buffer[position] != rune('C') {
						goto l93
					}
					position++
				}
			l99:
				if !_rules[ruleWS]() {
					goto l93
				}
				{
					position103, tokenIndex103 := position, tokenIndex
					{
						position104, tokenIndex104 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l105
						}
						position++
						goto l104
					l105:
						position, tokenIndex = position104, tokenIndex104
						if buffer[position] != rune('/') {
							goto l106
						}
						position++
						goto l104
					l106:
						position, tokenIndex = position104, tokenIndex104
						if buffer[position] != rune('\n') {
							goto l103
						}
						position++
					}
				l104:
					goto l93
				l103:
					position, tokenIndex = position103, tokenIndex103
				}
				if !matchDot() {
					goto l93
				}
			l101:
				{
					position102, tokenIndex102 := position, tokenIndex
					{
						position107, tokenIndex107 := position, tokenIndex
						{
							position108, tokenIndex108 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l109
							}
							position++
							goto l108
						l109:
							position, tokenIndex = position108, tokenIndex108
							if buffer[position] != rune('/') {
								goto l110
							}
							position++
							goto l108
						l110:
							position, tokenIndex = position108, tokenIndex108
							if buffer[position] != rune('\n') {
								goto l107
							}
							position++
						}
					l108:
						goto l102
					l107:
						position, tokenIndex = position107, tokenIndex107
					}
					if !matchDot() {
						goto l102
					}
					goto l101
				l102:
					position, tokenIndex = position102, tokenIndex102
				}
				add(ruleLocDirective, position94)
			}
			return true
		l93:
			position, tokenIndex = position93, tokenIndex93
			return false
		},
		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
		func() bool {
			position111, tokenIndex111 := position, tokenIndex
			{
				position112 := position
				if !_rules[ruleArg]() {
					goto l111
				}
			l113:
				{
					position114, tokenIndex114 := position, tokenIndex
					{
						position115, tokenIndex115 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l115
						}
						goto l116
					l115:
						position, tokenIndex = position115, tokenIndex115
					}
				l116:
					if buffer[position] != rune(',') {
						goto l114
					}
					position++
					{
						position117, tokenIndex117 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l117
						}
						goto l118
					l117:
						position, tokenIndex = position117, tokenIndex117
					}
				l118:
					if !_rules[ruleArg]() {
						goto l114
					}
					goto l113
				l114:
					position, tokenIndex = position114, tokenIndex114
				}
				add(ruleArgs, position112)
			}
			return true
		l111:
			position, tokenIndex = position111, tokenIndex111
			return false
		},
		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.' / '$')*)> */
		func() bool {
			{
				position120 := position
				{
					position121, tokenIndex121 := position, tokenIndex
					if !_rules[ruleQuotedArg]() {
						goto l122
					}
					goto l121
				l122:
					position, tokenIndex = position121, tokenIndex121
				l123:
					{
						position124, tokenIndex124 := position, tokenIndex
						{
							position125, tokenIndex125 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l126
							}
							position++
							goto l125
						l126:
							position, tokenIndex = position125, tokenIndex125
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l127
							}
							position++
							goto l125
						l127:
							position, tokenIndex = position125, tokenIndex125
							{
								position129, tokenIndex129 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('z') {
									goto l130
								}
								position++
								goto l129
							l130:
								position, tokenIndex = position129, tokenIndex129
								if c := buffer[position]; c < rune('A') || c > rune('Z') {
									goto l128
								}
								position++
							}
						l129:
							goto l125
						l128:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('%') {
								goto l131
							}
							position++
							goto l125
						l131:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('+') {
								goto l132
							}
							position++
							goto l125
						l132:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('-') {
								goto l133
							}
							position++
							goto l125
						l133:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('*') {
								goto l134
							}
							position++
							goto l125
						l134:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('_') {
								goto l135
							}
							position++
							goto l125
						l135:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('@') {
								goto l136
							}
							position++
							goto l125
						l136:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('.') {
								goto l137
							}
							position++
							goto l125
						l137:
							position, tokenIndex = position125, tokenIndex125
							if buffer[position] != rune('$') {
								goto l124
							}
							position++
						}
					l125:
						goto l123
					l124:
						position, tokenIndex = position124, tokenIndex124
					}
				}
			l121:
				add(ruleArg, position120)
			}
			return true
		},
		/* 10 QuotedArg <- <('"' QuotedText '"')> */
		func() bool {
			position138, tokenIndex138 := position, tokenIndex
			{
				position139 := position
				if buffer[position] != rune('"') {
					goto l138
				}
				position++
				if !_rules[ruleQuotedText]() {
					goto l138
				}
				if buffer[position] != rune('"') {
					goto l138
				}
				position++
				add(ruleQuotedArg, position139)
			}
			return true
		l138:
			position, tokenIndex = position138, tokenIndex138
			return false
		},
		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
		func() bool {
			{
				position141 := position
			l142:
				{
					position143, tokenIndex143 := position, tokenIndex
					{
						position144, tokenIndex144 := position, tokenIndex
						if !_rules[ruleEscapedChar]() {
							goto l145
						}
						goto l144
					l145:
						position, tokenIndex = position144, tokenIndex144
						{
							position146, tokenIndex146 := position, tokenIndex
							if buffer[position] != rune('"') {
								goto l146
							}
							position++
							goto l143
						l146:
							position, tokenIndex = position146, tokenIndex146
						}
						if !matchDot() {
							goto l143
						}
					}
				l144:
					goto l142
				l143:
					position, tokenIndex = position143, tokenIndex143
				}
				add(ruleQuotedText, position141)
			}
			return true
		},
		/* 12 SymbolDefiningDirective <- <((SymbolDefiningDirectiveName WS (LocalSymbol / SymbolName) WS? ',' WS? SymbolArg) / ((LocalSymbol / SymbolName) WS? '=' WS? SymbolArg))> */
		func() bool {
			position147, tokenIndex147 := position, tokenIndex
			{
				position148 := position
				{
					position149, tokenIndex149 := position, tokenIndex
					if !_rules[ruleSymbolDefiningDirectiveName]() {
						goto l150
					}
					if !_rules[ruleWS]() {
						goto l150
					}
					{
						position151, tokenIndex151 := position, tokenIndex
						if !_rules[ruleLocalSymbol]() {
							goto l152
						}
						goto l151
					l152:
						position, tokenIndex = position151, tokenIndex151
						if !_rules[ruleSymbolName]() {
							goto l150
						}
					}
				l151:
					{
						position153, tokenIndex153 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l153
						}
						goto l154
					l153:
						position, tokenIndex = position153, tokenIndex153
					}
				l154:
					if buffer[position] != rune(',') {
						goto l150
					}
					position++
					{
						position155, tokenIndex155 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l155
						}
						goto l156
					l155:
						position, tokenIndex = position155, tokenIndex155
					}
				l156:
					if !_rules[ruleSymbolArg]() {
						goto l150
					}
					goto l149
				l150:
					position, tokenIndex = position149, tokenIndex149
					{
						position157, tokenIndex157 := position, tokenIndex
						if !_rules[ruleLocalSymbol]() {
							goto l158
						}
						goto l157
					l158:
						position, tokenIndex = position157, tokenIndex157
						if !_rules[ruleSymbolName]() {
							goto l147
						}
					}
				l157:
					{
						position159, tokenIndex159 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l159
						}
						goto l160
					l159:
						position, tokenIndex = position159, tokenIndex159
					}
				l160:
					if buffer[position] != rune('=') {
						goto l147
					}
					position++
					{
						position161, tokenIndex161 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l161
						}
						goto l162
					l161:
						position, tokenIndex = position161, tokenIndex161
					}
				l162:
					if !_rules[ruleSymbolArg]() {
						goto l147
					}
				}
			l149:
				add(ruleSymbolDefiningDirective, position148)
			}
			return true
		l147:
			position, tokenIndex = position147, tokenIndex147
			return false
		},
		/* 13 SymbolDefiningDirectiveName <- <(('.' ('e' / 'E') ('q' / 'Q') ('u' / 'U') ('i' / 'I') ('v' / 'V')) / ('.' ('e' / 'E') ('q' / 'Q') ('u' / 'U')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')))> */
		func() bool {
			position163, tokenIndex163 := position, tokenIndex
			{
				position164 := position
				{
					position165, tokenIndex165 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l166
					}
					position++
					{
						position167, tokenIndex167 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l168
						}
						position++
						goto l167
					l168:
						position, tokenIndex = position167, tokenIndex167
						if buffer[position] != rune('E') {
							goto l166
						}
						position++
					}
				l167:
					{
						position169, tokenIndex169 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l170
						}
						position++
						goto l169
					l170:
						position, tokenIndex = position169, tokenIndex169
						if buffer[position] != rune('Q') {
							goto l166
						}
						position++
					}
				l169:
					{
						position171, tokenIndex171 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l172
						}
						position++
						goto l171
					l172:
						position, tokenIndex = position171, tokenIndex171
						if buffer[position] != rune('U') {
							goto l166
						}
						position++
					}
				l171:
					{
						position173, tokenIndex173 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l174
						}
						position++
						goto l173
					l174:
						position, tokenIndex = position173, tokenIndex173
						if buffer[position] != rune('I') {
							goto l166
						}
						position++
					}
				l173:
					{
						position175, tokenIndex175 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l176
						}
						position++
						goto l175
					l176:
						position, tokenIndex = position175, tokenIndex175
						if buffer[position] != rune('V') {
							goto l166
						}
						position++
					}
				l175:
					goto l165
				l166:
					position, tokenIndex = position165, tokenIndex165
					if buffer[position] != rune('.') {
						goto l177
					}
					position++
					{
						position178, tokenIndex178 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l179
						}
						position++
						goto l178
					l179:
						position, tokenIndex = position178, tokenIndex178
						if buffer[position] != rune('E') {
							goto l177
						}
						position++
					}
				l178:
					{
						position180, tokenIndex180 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l181
						}
						position++
						goto l180
					l181:
						position, tokenIndex = position180, tokenIndex180
						if buffer[position] != rune('Q') {
							goto l177
						}
						position++
					}
				l180:
					{
						position182, tokenIndex182 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l183
						}
						position++
						goto l182
					l183:
						position, tokenIndex = position182, tokenIndex182
						if buffer[position] != rune('U') {
							goto l177
						}
						position++
					}
				l182:
					goto l165
				l177:
					position, tokenIndex = position165, tokenIndex165
					if buffer[position] != rune('.') {
						goto l163
					}
					position++
					{
						position184, tokenIndex184 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l185
						}
						position++
						goto l184
					l185:
						position, tokenIndex = position184, tokenIndex184
						if buffer[position] != rune('S') {
							goto l163
						}
						position++
					}
				l184:
					{
						position186, tokenIndex186 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l187
						}
						position++
						goto l186
					l187:
						position, tokenIndex = position186, tokenIndex186
						if buffer[position] != rune('E') {
							goto l163
						}
						position++
					}
				l186:
					{
						position188, tokenIndex188 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l189
						}
						position++
						goto l188
					l189:
						position, tokenIndex = position188, tokenIndex188
						if buffer[position] != rune('T') {
							goto l163
						}
						position++
					}
				l188:
				}
			l165:
				add(ruleSymbolDefiningDirectiveName, position164)
			}
			return true
		l163:
			position, tokenIndex = position163, tokenIndex163
			return false
		},
		/* 14 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
		func() bool {
			position190, tokenIndex190 := position, tokenIndex
			{
				position191 := position
				if !_rules[ruleLabelContainingDirectiveName]() {
					goto l190
				}
				if !_rules[ruleWS]() {
					goto l190
				}
				if !_rules[ruleSymbolArgs]() {
					goto l190
				}
				add(ruleLabelContainingDirective, position191)
			}
			return true
		l190:
			position, tokenIndex = position190, tokenIndex190
			return false
		},
		/* 15 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('h' / 'H') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
		func() bool {
			position192, tokenIndex192 := position, tokenIndex
			{
				position193 := position
				{
					position194, tokenIndex194 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l195
					}
					position++
					{
						position196, tokenIndex196 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l197
						}
						position++
						goto l196
					l197:
						position, tokenIndex = position196, tokenIndex196
						if buffer[position] != rune('X') {
							goto l195
						}
						position++
					}
				l196:
					{
						position198, tokenIndex198 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l199
						}
						position++
						goto l198
					l199:
						position, tokenIndex = position198, tokenIndex198
						if buffer[position] != rune('W') {
							goto l195
						}
						position++
					}
				l198:
					{
						position200, tokenIndex200 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l201
						}
						position++
						goto l200
					l201:
						position, tokenIndex = position200, tokenIndex200
						if buffer[position] != rune('O') {
							goto l195
						}
						position++
					}
				l200:
					{
						position202, tokenIndex202 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l203
						}
						position++
						goto l202
					l203:
						position, tokenIndex = position202, tokenIndex202
						if buffer[position] != rune('R') {
							goto l195
						}
						position++
					}
				l202:
					{
						position204, tokenIndex204 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l205
						}
						position++
						goto l204
					l205:
						position, tokenIndex = position204, tokenIndex204
						if buffer[position] != rune('D') {
							goto l195
						}
						position++
					}
				l204:
					goto l194
				l195:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l206
					}
					position++
					{
						position207, tokenIndex207 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l208
						}
						position++
						goto l207
					l208:
						position, tokenIndex = position207, tokenIndex207
						if buffer[position] != rune('W') {
							goto l206
						}
						position++
					}
				l207:
					{
						position209, tokenIndex209 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l210
						}
						position++
						goto l209
					l210:
						position, tokenIndex = position209, tokenIndex209
						if buffer[position] != rune('O') {
							goto l206
						}
						position++
					}
				l209:
					{
						position211, tokenIndex211 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l212
						}
						position++
						goto l211
					l212:
						position, tokenIndex = position211, tokenIndex211
						if buffer[position] != rune('R') {
							goto l206
						}
						position++
					}
				l211:
					{
						position213, tokenIndex213 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l214
						}
						position++
						goto l213
					l214:
						position, tokenIndex = position213, tokenIndex213
						if buffer[position] != rune('D') {
							goto l206
						}
						position++
					}
				l213:
					goto l194
				l206:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l215
					}
					position++
					{
						position216, tokenIndex216 := position, tokenIndex
						if buffer[position] != rune('h') {
							goto l217
						}
						position++
						goto l216
					l217:
						position, tokenIndex = position216, tokenIndex216
						if buffer[position] != rune('H') {
							goto l215
						}
						position++
					}
				l216:
					{
						position218, tokenIndex218 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l219
						}
						position++
						goto l218
					l219:
						position, tokenIndex = position218, tokenIndex218
						if buffer[position] != rune('W') {
							goto l215
						}
						position++
					}
				l218:
					{
						position220, tokenIndex220 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l221
						}
						position++
						goto l220
					l221:
						position, tokenIndex = position220, tokenIndex220
						if buffer[position] != rune('O') {
							goto l215
						}
						position++
					}
				l220:
					{
						position222, tokenIndex222 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l223
						}
						position++
						goto l222
					l223:
						position, tokenIndex = position222, tokenIndex222
						if buffer[position] != rune('R') {
							goto l215
						}
						position++
					}
				l222:
					{
						position224, tokenIndex224 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l225
						}
						position++
						goto l224
					l225:
						position, tokenIndex = position224, tokenIndex224
						if buffer[position] != rune('D') {
							goto l215
						}
						position++
					}
				l224:
					goto l194
				l215:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l226
					}
					position++
					{
						position227, tokenIndex227 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l228
						}
						position++
						goto l227
					l228:
						position, tokenIndex = position227, tokenIndex227
						if buffer[position] != rune('L') {
							goto l226
						}
						position++
					}
				l227:
					{
						position229, tokenIndex229 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l230
						}
						position++
						goto l229
					l230:
						position, tokenIndex = position229, tokenIndex229
						if buffer[position] != rune('O') {
							goto l226
						}
						position++
					}
				l229:
					{
						position231, tokenIndex231 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l232
						}
						position++
						goto l231
					l232:
						position, tokenIndex = position231, tokenIndex231
						if buffer[position] != rune('N') {
							goto l226
						}
						position++
					}
				l231:
					{
						position233, tokenIndex233 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l234
						}
						position++
						goto l233
					l234:
						position, tokenIndex = position233, tokenIndex233
						if buffer[position] != rune('G') {
							goto l226
						}
						position++
					}
				l233:
					goto l194
				l226:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l235
					}
					position++
					{
						position236, tokenIndex236 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l237
						}
						position++
						goto l236
					l237:
						position, tokenIndex = position236, tokenIndex236
						if buffer[position] != rune('B') {
							goto l235
						}
						position++
					}
				l236:
					{
						position238, tokenIndex238 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l239
						}
						position++
						goto l238
					l239:
						position, tokenIndex = position238, tokenIndex238
						if buffer[position] != rune('Y') {
							goto l235
						}
						position++
					}
				l238:
					{
						position240, tokenIndex240 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l241
						}
						position++
						goto l240
					l241:
						position, tokenIndex = position240, tokenIndex240
						if buffer[position] != rune('T') {
							goto l235
						}
						position++
					}
				l240:
					{
						position242, tokenIndex242 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l243
						}
						position++
						goto l242
					l243:
						position, tokenIndex = position242, tokenIndex242
						if buffer[position] != rune('E') {
							goto l235
						}
						position++
					}
				l242:
					goto l194
				l235:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l244
					}
					position++
					if buffer[position] != rune('8') {
						goto l244
					}
					position++
					{
						position245, tokenIndex245 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l246
						}
						position++
						goto l245
					l246:
						position, tokenIndex = position245, tokenIndex245
						if buffer[position] != rune('B') {
							goto l244
						}
						position++
					}
				l245:
					{
						position247, tokenIndex247 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l248
						}
						position++
						goto l247
					l248:
						position, tokenIndex = position247, tokenIndex247
						if buffer[position] != rune('Y') {
							goto l244
						}
						position++
					}
				l247:
					{
						position249, tokenIndex249 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l250
						}
						position++
						goto l249
					l250:
						position, tokenIndex = position249, tokenIndex249
						if buffer[position] != rune('T') {
							goto l244
						}
						position++
					}
				l249:
					{
						position251, tokenIndex251 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l252
						}
						position++
						goto l251
					l252:
						position, tokenIndex = position251, tokenIndex251
						if buffer[position] != rune('E') {
							goto l244
						}
						position++
					}
				l251:
					goto l194
				l244:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l253
					}
					position++
					if buffer[position] != rune('4') {
						goto l253
					}
					position++
					{
						position254, tokenIndex254 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l255
						}
						position++
						goto l254
					l255:
						position, tokenIndex = position254, tokenIndex254
						if buffer[position] != rune('B') {
							goto l253
						}
						position++
					}
				l254:
					{
						position256, tokenIndex256 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l257
						}
						position++
						goto l256
					l257:
						position, tokenIndex = position256, tokenIndex256
						if buffer[position] != rune('Y') {
							goto l253
						}
						position++
					}
				l256:
					{
						position258, tokenIndex258 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l259
						}
						position++
						goto l258
					l259:
						position, tokenIndex = position258, tokenIndex258
						if buffer[position] != rune('T') {
							goto l253
						}
						position++
					}
				l258:
					{
						position260, tokenIndex260 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l261
						}
						position++
						goto l260
					l261:
						position, tokenIndex = position260, tokenIndex260
						if buffer[position] != rune('E') {
							goto l253
						}
						position++
					}
				l260:
					goto l194
				l253:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l262
					}
					position++
					{
						position263, tokenIndex263 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l264
						}
						position++
						goto l263
					l264:
						position, tokenIndex = position263, tokenIndex263
						if buffer[position] != rune('Q') {
							goto l262
						}
						position++
					}
				l263:
					{
						position265, tokenIndex265 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l266
						}
						position++
						goto l265
					l266:
						position, tokenIndex = position265, tokenIndex265
						if buffer[position] != rune('U') {
							goto l262
						}
						position++
					}
				l265:
					{
						position267, tokenIndex267 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l268
						}
						position++
						goto l267
					l268:
						position, tokenIndex = position267, tokenIndex267
						if buffer[position] != rune('A') {
							goto l262
						}
						position++
					}
				l267:
					{
						position269, tokenIndex269 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l270
						}
						position++
						goto l269
					l270:
						position, tokenIndex = position269, tokenIndex269
						if buffer[position] != rune('D') {
							goto l262
						}
						position++
					}
				l269:
					goto l194
				l262:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l271
					}
					position++
					{
						position272, tokenIndex272 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l273
						}
						position++
						goto l272
					l273:
						position, tokenIndex = position272, tokenIndex272
						if buffer[position] != rune('T') {
							goto l271
						}
						position++
					}
				l272:
					{
						position274, tokenIndex274 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l275
						}
						position++
						goto l274
					l275:
						position, tokenIndex = position274, tokenIndex274
						if buffer[position] != rune('C') {
							goto l271
						}
						position++
					}
				l274:
					goto l194
				l271:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l276
					}
					position++
					{
						position277, tokenIndex277 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l278
						}
						position++
						goto l277
					l278:
						position, tokenIndex = position277, tokenIndex277
						if buffer[position] != rune('L') {
							goto l276
						}
						position++
					}
				l277:
					{
						position279, tokenIndex279 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l280
						}
						position++
						goto l279
					l280:
						position, tokenIndex = position279, tokenIndex279
						if buffer[position] != rune('O') {
							goto l276
						}
						position++
					}
				l279:
					{
						position281, tokenIndex281 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l282
						}
						position++
						goto l281
					l282:
						position, tokenIndex = position281, tokenIndex281
						if buffer[position] != rune('C') {
							goto l276
						}
						position++
					}
				l281:
					{
						position283, tokenIndex283 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l284
						}
						position++
						goto l283
					l284:
						position, tokenIndex = position283, tokenIndex283
						if buffer[position] != rune('A') {
							goto l276
						}
						position++
					}
				l283:
					{
						position285, tokenIndex285 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l286
						}
						position++
						goto l285
					l286:
						position, tokenIndex = position285, tokenIndex285
						if buffer[position] != rune('L') {
							goto l276
						}
						position++
					}
				l285:
					{
						position287, tokenIndex287 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l288
						}
						position++
						goto l287
					l288:
						position, tokenIndex = position287, tokenIndex287
						if buffer[position] != rune('E') {
							goto l276
						}
						position++
					}
				l287:
					{
						position289, tokenIndex289 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l290
						}
						position++
						goto l289
					l290:
						position, tokenIndex = position289, tokenIndex289
						if buffer[position] != rune('N') {
							goto l276
						}
						position++
					}
				l289:
					{
						position291, tokenIndex291 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l292
						}
						position++
						goto l291
					l292:
						position, tokenIndex = position291, tokenIndex291
						if buffer[position] != rune('T') {
							goto l276
						}
						position++
					}
				l291:
					{
						position293, tokenIndex293 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l294
						}
						position++
						goto l293
					l294:
						position, tokenIndex = position293, tokenIndex293
						if buffer[position] != rune('R') {
							goto l276
						}
						position++
					}
				l293:
					{
						position295, tokenIndex295 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l296
						}
						position++
						goto l295
					l296:
						position, tokenIndex = position295, tokenIndex295
						if buffer[position] != rune('Y') {
							goto l276
						}
						position++
					}
				l295:
					goto l194
				l276:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l297
					}
					position++
					{
						position298, tokenIndex298 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l299
						}
						position++
						goto l298
					l299:
						position, tokenIndex = position298, tokenIndex298
						if buffer[position] != rune('S') {
							goto l297
						}
						position++
					}
				l298:
					{
						position300, tokenIndex300 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l301
						}
						position++
						goto l300
					l301:
						position, tokenIndex = position300, tokenIndex300
						if buffer[position] != rune('I') {
							goto l297
						}
						position++
					}
				l300:
					{
						position302, tokenIndex302 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l303
						}
						position++
						goto l302
					l303:
						position, tokenIndex = position302, tokenIndex302
						if buffer[position] != rune('Z') {
							goto l297
						}
						position++
					}
				l302:
					{
						position304, tokenIndex304 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l305
						}
						position++
						goto l304
					l305:
						position, tokenIndex = position304, tokenIndex304
						if buffer[position] != rune('E') {
							goto l297
						}
						position++
					}
				l304:
					goto l194
				l297:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l306
					}
					position++
					{
						position307, tokenIndex307 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l308
						}
						position++
						goto l307
					l308:
						position, tokenIndex = position307, tokenIndex307
						if buffer[position] != rune('T') {
							goto l306
						}
						position++
					}
				l307:
					{
						position309, tokenIndex309 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l310
						}
						position++
						goto l309
					l310:
						position, tokenIndex = position309, tokenIndex309
						if buffer[position] != rune('Y') {
							goto l306
						}
						position++
					}
				l309:
					{
						position311, tokenIndex311 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l312
						}
						position++
						goto l311
					l312:
						position, tokenIndex = position311, tokenIndex311
						if buffer[position] != rune('P') {
							goto l306
						}
						position++
					}
				l311:
					{
						position313, tokenIndex313 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l314
						}
						position++
						goto l313
					l314:
						position, tokenIndex = position313, tokenIndex313
						if buffer[position] != rune('E') {
							goto l306
						}
						position++
					}
				l313:
					goto l194
				l306:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l315
					}
					position++
					{
						position316, tokenIndex316 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l317
						}
						position++
						goto l316
					l317:
						position, tokenIndex = position316, tokenIndex316
						if buffer[position] != rune('U') {
							goto l315
						}
						position++
					}
				l316:
					{
						position318, tokenIndex318 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l319
						}
						position++
						goto l318
					l319:
						position, tokenIndex = position318, tokenIndex318
						if buffer[position] != rune('L') {
							goto l315
						}
						position++
					}
				l318:
					{
						position320, tokenIndex320 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l321
						}
						position++
						goto l320
					l321:
						position, tokenIndex = position320, tokenIndex320
						if buffer[position] != rune('E') {
							goto l315
						}
						position++
					}
				l320:
					{
						position322, tokenIndex322 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l323
						}
						position++
						goto l322
					l323:
						position, tokenIndex = position322, tokenIndex322
						if buffer[position] != rune('B') {
							goto l315
						}
						position++
					}
				l322:
					if buffer[position] != rune('1') {
						goto l315
					}
					position++
					if buffer[position] != rune('2') {
						goto l315
					}
					position++
					if buffer[position] != rune('8') {
						goto l315
					}
					position++
					goto l194
				l315:
					position, tokenIndex = position194, tokenIndex194
					if buffer[position] != rune('.') {
						goto l192
					}
					position++
					{
						position324, tokenIndex324 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l325
						}
						position++
						goto l324
					l325:
						position, tokenIndex = position324, tokenIndex324
						if buffer[position] != rune('S') {
							goto l192
						}
						position++
					}
				l324:
					{
						position326, tokenIndex326 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l327
						}
						position++
						goto l326
					l327:
						position, tokenIndex = position326, tokenIndex326
						if buffer[position] != rune('L') {
							goto l192
						}
						position++
					}
				l326:
					{
						position328, tokenIndex328 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l329
						}
						position++
						goto l328
					l329:
						position, tokenIndex = position328, tokenIndex328
						if buffer[position] != rune('E') {
							goto l192
						}
						position++
					}
				l328:
					{
						position330, tokenIndex330 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l331
						}
						position++
						goto l330
					l331:
						position, tokenIndex = position330, tokenIndex330
						if buffer[position] != rune('B') {
							goto l192
						}
						position++
					}
				l330:
					if buffer[position] != rune('1') {
						goto l192
					}
					position++
					if buffer[position] != rune('2') {
						goto l192
					}
					position++
					if buffer[position] != rune('8') {
						goto l192
					}
					position++
				}
			l194:
				add(ruleLabelContainingDirectiveName, position193)
			}
			return true
		l192:
			position, tokenIndex = position192, tokenIndex192
			return false
		},
		/* 16 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
		func() bool {
			position332, tokenIndex332 := position, tokenIndex
			{
				position333 := position
				if !_rules[ruleSymbolArg]() {
					goto l332
				}
			l334:
				{
					position335, tokenIndex335 := position, tokenIndex
					{
						position336, tokenIndex336 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l336
						}
						goto l337
					l336:
						position, tokenIndex = position336, tokenIndex336
					}
				l337:
					if buffer[position] != rune(',') {
						goto l335
					}
					position++
					{
						position338, tokenIndex338 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l338
						}
						goto l339
					l338:
						position, tokenIndex = position338, tokenIndex338
					}
				l339:
					if !_rules[ruleSymbolArg]() {
						goto l335
					}
					goto l334
				l335:
					position, tokenIndex = position335, tokenIndex335
				}
				add(ruleSymbolArgs, position333)
			}
			return true
		l332:
			position, tokenIndex = position332, tokenIndex332
			return false
		},
		/* 17 SymbolArg <- <SymbolExpr> */
		func() bool {
			position340, tokenIndex340 := position, tokenIndex
			{
				position341 := position
				if !_rules[ruleSymbolExpr]() {
					goto l340
				}
				add(ruleSymbolArg, position341)
			}
			return true
		l340:
			position, tokenIndex = position340, tokenIndex340
			return false
		},
		/* 18 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
		func() bool {
			position342, tokenIndex342 := position, tokenIndex
			{
				position343 := position
				if !_rules[ruleSymbolAtom]() {
					goto l342
				}
				{
					position344, tokenIndex344 := position, tokenIndex
					{
						position346, tokenIndex346 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l346
						}
						goto l347
					l346:
						position, tokenIndex = position346, tokenIndex346
					}
				l347:
					if !_rules[ruleSymbolOperator]() {
						goto l344
					}
					{
						position348, tokenIndex348 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l348
						}
						goto l349
					l348:
						position, tokenIndex = position348, tokenIndex348
					}
				l349:
					if !_rules[ruleSymbolExpr]() {
						goto l344
					}
					goto l345
				l344:
					position, tokenIndex = position344, tokenIndex344
				}
			l345:
				add(ruleSymbolExpr, position343)
			}
			return true
		l342:
			position, tokenIndex = position342, tokenIndex342
			return false
		},
		/* 19 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
		func() bool {
			position350, tokenIndex350 := position, tokenIndex
			{
				position351 := position
				{
					position352, tokenIndex352 := position, tokenIndex
					if !_rules[ruleLocalLabelRef]() {
						goto l353
					}
					goto l352
				l353:
					position, tokenIndex = position352, tokenIndex352
					if !_rules[ruleOffset]() {
						goto l354
					}
					goto l352
				l354:
					position, tokenIndex = position352, tokenIndex352
					if !_rules[ruleSymbolType]() {
						goto l355
					}
					goto l352
				l355:
					position, tokenIndex = position352, tokenIndex352
					if !_rules[ruleLocalSymbol]() {
						goto l356
					}
					{
						position357, tokenIndex357 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l357
						}
						goto l358
					l357:
						position, tokenIndex = position357, tokenIndex357
					}
				l358:
					goto l352
				l356:
					position, tokenIndex = position352, tokenIndex352
					if !_rules[ruleSymbolName]() {
						goto l359
					}
					if !_rules[ruleOffset]() {
						goto l359
					}
					goto l352
				l359:
					position, tokenIndex = position352, tokenIndex352
					if !_rules[ruleSymbolName]() {
						goto l360
					}
					{
						position361, tokenIndex361 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l361
						}
						goto l362
					l361:
						position, tokenIndex = position361, tokenIndex361
					}
				l362:
					goto l352
				l360:
					position, tokenIndex = position352, tokenIndex352
					if !_rules[ruleDot]() {
						goto l363
					}
					goto l352
				l363:
					position, tokenIndex = position352, tokenIndex352
					if !_rules[ruleOpenParen]() {
						goto l350
					}
					{
						position364, tokenIndex364 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l364
						}
						goto l365
					l364:
						position, tokenIndex = position364, tokenIndex364
					}
				l365:
					if !_rules[ruleSymbolExpr]() {
						goto l350
					}
					{
						position366, tokenIndex366 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l366
						}
						goto l367
					l366:
						position, tokenIndex = position366, tokenIndex366
					}
				l367:
					if !_rules[ruleCloseParen]() {
						goto l350
					}
				}
			l352:
				add(ruleSymbolAtom, position351)
			}
			return true
		l350:
			position, tokenIndex = position350, tokenIndex350
			return false
		},
		/* 20 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
		func() bool {
			position368, tokenIndex368 := position, tokenIndex
			{
				position369 := position
				{
					position370, tokenIndex370 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l371
					}
					position++
					goto l370
				l371:
					position, tokenIndex = position370, tokenIndex370
					if buffer[position] != rune('-') {
						goto l372
					}
					position++
					goto l370
				l372:
					position, tokenIndex = position370, tokenIndex370
					if buffer[position] != rune('|') {
						goto l373
					}
					position++
					goto l370
				l373:
					position, tokenIndex = position370, tokenIndex370
					if buffer[position] != rune('<') {
						goto l374
					}
					position++
					if buffer[position] != rune('<') {
						goto l374
					}
					position++
					goto l370
				l374:
					position, tokenIndex = position370, tokenIndex370
					if buffer[position] != rune('>') {
						goto l368
					}
					position++
					if buffer[position] != rune('>') {
						goto l368
					}
					position++
				}
			l370:
				add(ruleSymbolOperator, position369)
			}
			return true
		l368:
			position, tokenIndex = position368, tokenIndex368
			return false
		},
		/* 21 OpenParen <- <'('> */
		func() bool {
			position375, tokenIndex375 := position, tokenIndex
			{
				position376 := position
				if buffer[position] != rune('(') {
					goto l375
				}
				position++
				add(ruleOpenParen, position376)
			}
			return true
		l375:
			position, tokenIndex = position375, tokenIndex375
			return false
		},
		/* 22 CloseParen <- <')'> */
		func() bool {
			position377, tokenIndex377 := position, tokenIndex
			{
				position378 := position
				if buffer[position] != rune(')') {
					goto l377
				}
				position++
				add(ruleCloseParen, position378)
			}
			return true
		l377:
			position, tokenIndex = position377, tokenIndex377
			return false
		},
		/* 23 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position379, tokenIndex379 := position, tokenIndex
			{
				position380 := position
				{
					position381, tokenIndex381 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l382
					}
					position++
					goto l381
				l382:
					position, tokenIndex = position381, tokenIndex381
					if buffer[position] != rune('%') {
						goto l379
					}
					position++
				}
			l381:
				{
					position383, tokenIndex383 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l384
					}
					position++
					if buffer[position] != rune('u') {
						goto l384
					}
					position++
					if buffer[position] != rune('n') {
						goto l384
					}
					position++
					if buffer[position] != rune('c') {
						goto l384
					}
					position++
					if buffer[position] != rune('t') {
						goto l384
					}
					position++
					if buffer[position] != rune('i') {
						goto l384
					}
					position++
					if buffer[position] != rune('o') {
						goto l384
					}
					position++
					if buffer[position] != rune('n') {
						goto l384
					}
					position++
					goto l383
				l384:
					position, tokenIndex = position383, tokenIndex383
					if buffer[position] != rune('o') {
						goto l379
					}
					position++
					if buffer[position] != rune('b') {
						goto l379
					}
					position++
					if buffer[position] != rune('j') {
						goto l379
					}
					position++
					if buffer[position] != rune('e') {
						goto l379
					}
					position++
					if buffer[position] != rune('c') {
						goto l379
					}
					position++
					if buffer[position] != rune('t') {
						goto l379
					}
					position++
				}
			l383:
				add(ruleSymbolType, position380)
			}
			return true
		l379:
			position, tokenIndex = position379, tokenIndex379
			return false
		},
		/* 24 Dot <- <'.'> */
		func() bool {
			position385, tokenIndex385 := position, tokenIndex
			{
				position386 := position
				if buffer[position] != rune('.') {
					goto l385
				}
				position++
				add(ruleDot, position386)
			}
			return true
		l385:
			position, tokenIndex = position385, tokenIndex385
			return false
		},
		/* 25 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position387, tokenIndex387 := position, tokenIndex
			{
				position388 := position
				if buffer[position] != rune('[') {
					goto l387
				}
				position++
				if buffer[position] != rune('T') {
					goto l387
				}
				position++
				if buffer[position] != rune('C') {
					goto l387
				}
				position++
				if buffer[position] != rune(']') {
					goto l387
				}
				position++
				add(ruleTCMarker, position388)
			}
			return true
		l387:
			position, tokenIndex = position387, tokenIndex387
			return false
		},
		/* 26 EscapedChar <- <('\\' .)> */
		func() bool {
			position389, tokenIndex389 := position, tokenIndex
			{
				position390 := position
				if buffer[position] != rune('\\') {
					goto l389
				}
				position++
				if !matchDot() {
					goto l389
				}
				add(ruleEscapedChar, position390)
			}
			return true
		l389:
			position, tokenIndex = position389, tokenIndex389
			return false
		},
		/* 27 WS <- <(' ' / '\t')+> */
		func() bool {
			position391, tokenIndex391 := position, tokenIndex
			{
				position392 := position
				{
					position395, tokenIndex395 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l396
					}
					position++
					goto l395
				l396:
					position, tokenIndex = position395, tokenIndex395
					if buffer[position] != rune('\t') {
						goto l391
					}
					position++
				}
			l395:
			l393:
				{
					position394, tokenIndex394 := position, tokenIndex
					{
						position397, tokenIndex397 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l398
						}
						position++
						goto l397
					l398:
						position, tokenIndex = position397, tokenIndex397
						if buffer[position] != rune('\t') {
							goto l394
						}
						position++
					}
				l397:
					goto l393
				l394:
					position, tokenIndex = position394, tokenIndex394
				}
				add(ruleWS, position392)
			}
			return true
		l391:
			position, tokenIndex = position391, tokenIndex391
			return false
		},
		/* 28 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position399, tokenIndex399 := position, tokenIndex
			{
				position400 := position
				{
					position401, tokenIndex401 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l402
					}
					position++
					if buffer[position] != rune('/') {
						goto l402
					}
					position++
					goto l401
				l402:
					position, tokenIndex = position401, tokenIndex401
					if buffer[position] != rune('#') {
						goto l399
					}
					position++
				}
			l401:
			l403:
				{
					position404, tokenIndex404 := position, tokenIndex
					{
						position405, tokenIndex405 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l405
						}
						position++
						goto l404
					l405:
						position, tokenIndex = position405, tokenIndex405
					}
					if !matchDot() {
						goto l404
					}
					goto l403
				l404:
					position, tokenIndex = position404, tokenIndex404
				}
				add(ruleComment, position400)
			}
			return true
		l399:
			position, tokenIndex = position399, tokenIndex399
			return false
		},
		/* 29 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position406, tokenIndex406 := position, tokenIndex
			{
				position407 := position
				{
					position408, tokenIndex408 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l409
					}
					goto l408
				l409:
					position, tokenIndex = position408, tokenIndex408
					if !_rules[ruleLocalLabel]() {
						goto l410
					}
					goto l408
				l410:
					position, tokenIndex = position408, tokenIndex408
					if !_rules[ruleSymbolName]() {
						goto l406
					}
				}
			l408:
				if buffer[position] != rune(':') {
					goto l406
				}
				position++
				add(ruleLabel, position407)
			}
			return true
		l406:
			position, tokenIndex = position406, tokenIndex406
			return false
		},
		/* 30 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position411, tokenIndex411 := position, tokenIndex
			{
				position412 := position
				{
					position413, tokenIndex413 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l414
					}
					position++
					goto l413
				l414:
					position, tokenIndex = position413, tokenIndex413
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l415
					}
					position++
					goto l413
				l415:
					position, tokenIndex = position413, tokenIndex413
					if buffer[position] != rune('.') {
						goto l416
					}
					position++
					goto l413
				l416:
					position, tokenIndex = position413, tokenIndex413
					if buffer[position] != rune('_') {
						goto l411
					}
					position++
				}
			l413:
			l417:
				{
					position418, tokenIndex418 := position, tokenIndex
					{
						position419, tokenIndex419 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l420
						}
						position++
						goto l419
					l420:
						position, tokenIndex = position419, tokenIndex419
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l421
						}
						position++
						goto l419
					l421:
						position, tokenIndex = position419, tokenIndex419
						if buffer[position] != rune('.') {
							goto l422
						}
						position++
						goto l419
					l422:
						position, tokenIndex = position419, tokenIndex419
						{
							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 c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l423
							}
							position++
						}
					l424:
						goto l419
					l423:
						position, tokenIndex = position419, tokenIndex419
						if buffer[position] != rune('$') {
							goto l426
						}
						position++
						goto l419
					l426:
						position, tokenIndex = position419, tokenIndex419
						if buffer[position] != rune('_') {
							goto l418
						}
						position++
					}
				l419:
					goto l417
				l418:
					position, tokenIndex = position418, tokenIndex418
				}
				add(ruleSymbolName, position412)
			}
			return true
		l411:
			position, tokenIndex = position411, tokenIndex411
			return false
		},
		/* 31 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position427, tokenIndex427 := position, tokenIndex
			{
				position428 := position
				if buffer[position] != rune('.') {
					goto l427
				}
				position++
				if buffer[position] != rune('L') {
					goto l427
				}
				position++
				{
					position431, tokenIndex431 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l432
					}
					position++
					goto l431
				l432:
					position, tokenIndex = position431, tokenIndex431
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l433
					}
					position++
					goto l431
				l433:
					position, tokenIndex = position431, tokenIndex431
					{
						position435, tokenIndex435 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l436
						}
						position++
						goto l435
					l436:
						position, tokenIndex = position435, tokenIndex435
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l434
						}
						position++
					}
				l435:
					goto l431
				l434:
					position, tokenIndex = position431, tokenIndex431
					if buffer[position] != rune('.') {
						goto l437
					}
					position++
					goto l431
				l437:
					position, tokenIndex = position431, tokenIndex431
					{
						position439, tokenIndex439 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l440
						}
						position++
						goto l439
					l440:
						position, tokenIndex = position439, tokenIndex439
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l438
						}
						position++
					}
				l439:
					goto l431
				l438:
					position, tokenIndex = position431, tokenIndex431
					if buffer[position] != rune('$') {
						goto l441
					}
					position++
					goto l431
				l441:
					position, tokenIndex = position431, tokenIndex431
					if buffer[position] != rune('_') {
						goto l427
					}
					position++
				}
			l431:
			l429:
				{
					position430, tokenIndex430 := position, tokenIndex
					{
						position442, tokenIndex442 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l443
						}
						position++
						goto l442
					l443:
						position, tokenIndex = position442, tokenIndex442
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l444
						}
						position++
						goto l442
					l444:
						position, tokenIndex = position442, tokenIndex442
						{
							position446, tokenIndex446 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l447
							}
							position++
							goto l446
						l447:
							position, tokenIndex = position446, tokenIndex446
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l445
							}
							position++
						}
					l446:
						goto l442
					l445:
						position, tokenIndex = position442, tokenIndex442
						if buffer[position] != rune('.') {
							goto l448
						}
						position++
						goto l442
					l448:
						position, tokenIndex = position442, tokenIndex442
						{
							position450, tokenIndex450 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l451
							}
							position++
							goto l450
						l451:
							position, tokenIndex = position450, tokenIndex450
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l449
							}
							position++
						}
					l450:
						goto l442
					l449:
						position, tokenIndex = position442, tokenIndex442
						if buffer[position] != rune('$') {
							goto l452
						}
						position++
						goto l442
					l452:
						position, tokenIndex = position442, tokenIndex442
						if buffer[position] != rune('_') {
							goto l430
						}
						position++
					}
				l442:
					goto l429
				l430:
					position, tokenIndex = position430, tokenIndex430
				}
				add(ruleLocalSymbol, position428)
			}
			return true
		l427:
			position, tokenIndex = position427, tokenIndex427
			return false
		},
		/* 32 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position453, tokenIndex453 := position, tokenIndex
			{
				position454 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l453
				}
				position++
			l455:
				{
					position456, tokenIndex456 := position, tokenIndex
					{
						position457, tokenIndex457 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l458
						}
						position++
						goto l457
					l458:
						position, tokenIndex = position457, tokenIndex457
						if buffer[position] != rune('$') {
							goto l456
						}
						position++
					}
				l457:
					goto l455
				l456:
					position, tokenIndex = position456, tokenIndex456
				}
				add(ruleLocalLabel, position454)
			}
			return true
		l453:
			position, tokenIndex = position453, tokenIndex453
			return false
		},
		/* 33 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position459, tokenIndex459 := position, tokenIndex
			{
				position460 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l459
				}
				position++
			l461:
				{
					position462, tokenIndex462 := position, tokenIndex
					{
						position463, tokenIndex463 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l464
						}
						position++
						goto l463
					l464:
						position, tokenIndex = position463, tokenIndex463
						if buffer[position] != rune('$') {
							goto l462
						}
						position++
					}
				l463:
					goto l461
				l462:
					position, tokenIndex = position462, tokenIndex462
				}
				{
					position465, tokenIndex465 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l466
					}
					position++
					goto l465
				l466:
					position, tokenIndex = position465, tokenIndex465
					if buffer[position] != rune('f') {
						goto l459
					}
					position++
				}
			l465:
				add(ruleLocalLabelRef, position460)
			}
			return true
		l459:
			position, tokenIndex = position459, tokenIndex459
			return false
		},
		/* 34 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
		func() bool {
			position467, tokenIndex467 := position, tokenIndex
			{
				position468 := position
				{
					position469, tokenIndex469 := position, tokenIndex
					if buffer[position] != rune('n') {
						goto l470
					}
					position++
					goto l469
				l470:
					position, tokenIndex = position469, tokenIndex469
					if buffer[position] != rune('N') {
						goto l467
					}
					position++
				}
			l469:
				{
					position471, tokenIndex471 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l472
					}
					position++
					goto l471
				l472:
					position, tokenIndex = position471, tokenIndex471
					if buffer[position] != rune('O') {
						goto l467
					}
					position++
				}
			l471:
				{
					position473, tokenIndex473 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l474
					}
					position++
					goto l473
				l474:
					position, tokenIndex = position473, tokenIndex473
					if buffer[position] != rune('T') {
						goto l467
					}
					position++
				}
			l473:
				{
					position475, tokenIndex475 := position, tokenIndex
					if buffer[position] != rune('r') {
						goto l476
					}
					position++
					goto l475
				l476:
					position, tokenIndex = position475, tokenIndex475
					if buffer[position] != rune('R') {
						goto l467
					}
					position++
				}
			l475:
				{
					position477, tokenIndex477 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l478
					}
					position++
					goto l477
				l478:
					position, tokenIndex = position477, tokenIndex477
					if buffer[position] != rune('A') {
						goto l467
					}
					position++
				}
			l477:
				{
					position479, tokenIndex479 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l480
					}
					position++
					goto l479
				l480:
					position, tokenIndex = position479, tokenIndex479
					if buffer[position] != rune('C') {
						goto l467
					}
					position++
				}
			l479:
				{
					position481, tokenIndex481 := position, tokenIndex
					if buffer[position] != rune('k') {
						goto l482
					}
					position++
					goto l481
				l482:
					position, tokenIndex = position481, tokenIndex481
					if buffer[position] != rune('K') {
						goto l467
					}
					position++
				}
			l481:
				add(ruleInstructionPrefix, position468)
			}
			return true
		l467:
			position, tokenIndex = position467, tokenIndex467
			return false
		},
		/* 35 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
		func() bool {
			position483, tokenIndex483 := position, tokenIndex
			{
				position484 := position
				{
					position485, tokenIndex485 := position, tokenIndex
					if !_rules[ruleInstructionPrefix]() {
						goto l485
					}
					if !_rules[ruleWS]() {
						goto l485
					}
					goto l486
				l485:
					position, tokenIndex = position485, tokenIndex485
				}
			l486:
				if !_rules[ruleInstructionName]() {
					goto l483
				}
				{
					position487, tokenIndex487 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l487
					}
					if !_rules[ruleInstructionArg]() {
						goto l487
					}
				l489:
					{
						position490, tokenIndex490 := position, tokenIndex
						{
							position491, tokenIndex491 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l491
							}
							goto l492
						l491:
							position, tokenIndex = position491, tokenIndex491
						}
					l492:
						if buffer[position] != rune(',') {
							goto l490
						}
						position++
						{
							position493, tokenIndex493 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l493
							}
							goto l494
						l493:
							position, tokenIndex = position493, tokenIndex493
						}
					l494:
						if !_rules[ruleInstructionArg]() {
							goto l490
						}
						goto l489
					l490:
						position, tokenIndex = position490, tokenIndex490
					}
					goto l488
				l487:
					position, tokenIndex = position487, tokenIndex487
				}
			l488:
				add(ruleInstruction, position484)
			}
			return true
		l483:
			position, tokenIndex = position483, tokenIndex483
			return false
		},
		/* 36 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position495, tokenIndex495 := position, tokenIndex
			{
				position496 := position
				{
					position497, tokenIndex497 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l498
					}
					position++
					goto l497
				l498:
					position, tokenIndex = position497, tokenIndex497
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l495
					}
					position++
				}
			l497:
			l499:
				{
					position500, tokenIndex500 := position, tokenIndex
					{
						position501, tokenIndex501 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l502
						}
						position++
						goto l501
					l502:
						position, tokenIndex = position501, tokenIndex501
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l503
						}
						position++
						goto l501
					l503:
						position, tokenIndex = position501, tokenIndex501
						if buffer[position] != rune('.') {
							goto l504
						}
						position++
						goto l501
					l504:
						position, tokenIndex = position501, tokenIndex501
						{
							position505, tokenIndex505 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l506
							}
							position++
							goto l505
						l506:
							position, tokenIndex = position505, tokenIndex505
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l500
							}
							position++
						}
					l505:
					}
				l501:
					goto l499
				l500:
					position, tokenIndex = position500, tokenIndex500
				}
				{
					position507, tokenIndex507 := position, tokenIndex
					{
						position509, tokenIndex509 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l510
						}
						position++
						goto l509
					l510:
						position, tokenIndex = position509, tokenIndex509
						if buffer[position] != rune('+') {
							goto l511
						}
						position++
						goto l509
					l511:
						position, tokenIndex = position509, tokenIndex509
						if buffer[position] != rune('-') {
							goto l507
						}
						position++
					}
				l509:
					goto l508
				l507:
					position, tokenIndex = position507, tokenIndex507
				}
			l508:
				add(ruleInstructionName, position496)
			}
			return true
		l495:
			position, tokenIndex = position495, tokenIndex495
			return false
		},
		/* 37 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
		func() bool {
			position512, tokenIndex512 := position, tokenIndex
			{
				position513 := position
				{
					position514, tokenIndex514 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l514
					}
					goto l515
				l514:
					position, tokenIndex = position514, tokenIndex514
				}
			l515:
				{
					position516, tokenIndex516 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l517
					}
					goto l516
				l517:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleRegisterOrConstant]() {
						goto l518
					}
					goto l516
				l518:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleLocalLabelRef]() {
						goto l519
					}
					goto l516
				l519:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleTOCRefHigh]() {
						goto l520
					}
					goto l516
				l520:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleTOCRefLow]() {
						goto l521
					}
					goto l516
				l521:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleGOTLocation]() {
						goto l522
					}
					goto l516
				l522:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleGOTAddress]() {
						goto l523
					}
					goto l516
				l523:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleGOTSymbolOffset]() {
						goto l524
					}
					goto l516
				l524:
					position, tokenIndex = position516, tokenIndex516
					if !_rules[ruleMemoryRef]() {
						goto l512
					}
				}
			l516:
			l525:
				{
					position526, tokenIndex526 := position, tokenIndex
					if !_rules[ruleAVX512Token]() {
						goto l526
					}
					goto l525
				l526:
					position, tokenIndex = position526, tokenIndex526
				}
				add(ruleInstructionArg, position513)
			}
			return true
		l512:
			position, tokenIndex = position512, tokenIndex512
			return false
		},
		/* 38 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position527, tokenIndex527 := position, tokenIndex
			{
				position528 := position
				if buffer[position] != rune('$') {
					goto l527
				}
				position++
				if buffer[position] != rune('_') {
					goto l527
				}
				position++
				if buffer[position] != rune('G') {
					goto l527
				}
				position++
				if buffer[position] != rune('L') {
					goto l527
				}
				position++
				if buffer[position] != rune('O') {
					goto l527
				}
				position++
				if buffer[position] != rune('B') {
					goto l527
				}
				position++
				if buffer[position] != rune('A') {
					goto l527
				}
				position++
				if buffer[position] != rune('L') {
					goto l527
				}
				position++
				if buffer[position] != rune('_') {
					goto l527
				}
				position++
				if buffer[position] != rune('O') {
					goto l527
				}
				position++
				if buffer[position] != rune('F') {
					goto l527
				}
				position++
				if buffer[position] != rune('F') {
					goto l527
				}
				position++
				if buffer[position] != rune('S') {
					goto l527
				}
				position++
				if buffer[position] != rune('E') {
					goto l527
				}
				position++
				if buffer[position] != rune('T') {
					goto l527
				}
				position++
				if buffer[position] != rune('_') {
					goto l527
				}
				position++
				if buffer[position] != rune('T') {
					goto l527
				}
				position++
				if buffer[position] != rune('A') {
					goto l527
				}
				position++
				if buffer[position] != rune('B') {
					goto l527
				}
				position++
				if buffer[position] != rune('L') {
					goto l527
				}
				position++
				if buffer[position] != rune('E') {
					goto l527
				}
				position++
				if buffer[position] != rune('_') {
					goto l527
				}
				position++
				if buffer[position] != rune('-') {
					goto l527
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l527
				}
				add(ruleGOTLocation, position528)
			}
			return true
		l527:
			position, tokenIndex = position527, tokenIndex527
			return false
		},
		/* 39 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
		func() bool {
			position529, tokenIndex529 := position, tokenIndex
			{
				position530 := position
				if buffer[position] != rune('_') {
					goto l529
				}
				position++
				if buffer[position] != rune('G') {
					goto l529
				}
				position++
				if buffer[position] != rune('L') {
					goto l529
				}
				position++
				if buffer[position] != rune('O') {
					goto l529
				}
				position++
				if buffer[position] != rune('B') {
					goto l529
				}
				position++
				if buffer[position] != rune('A') {
					goto l529
				}
				position++
				if buffer[position] != rune('L') {
					goto l529
				}
				position++
				if buffer[position] != rune('_') {
					goto l529
				}
				position++
				if buffer[position] != rune('O') {
					goto l529
				}
				position++
				if buffer[position] != rune('F') {
					goto l529
				}
				position++
				if buffer[position] != rune('F') {
					goto l529
				}
				position++
				if buffer[position] != rune('S') {
					goto l529
				}
				position++
				if buffer[position] != rune('E') {
					goto l529
				}
				position++
				if buffer[position] != rune('T') {
					goto l529
				}
				position++
				if buffer[position] != rune('_') {
					goto l529
				}
				position++
				if buffer[position] != rune('T') {
					goto l529
				}
				position++
				if buffer[position] != rune('A') {
					goto l529
				}
				position++
				if buffer[position] != rune('B') {
					goto l529
				}
				position++
				if buffer[position] != rune('L') {
					goto l529
				}
				position++
				if buffer[position] != rune('E') {
					goto l529
				}
				position++
				if buffer[position] != rune('_') {
					goto l529
				}
				position++
				if buffer[position] != rune('(') {
					goto l529
				}
				position++
				if buffer[position] != rune('%') {
					goto l529
				}
				position++
				if buffer[position] != rune('r') {
					goto l529
				}
				position++
				if buffer[position] != rune('i') {
					goto l529
				}
				position++
				if buffer[position] != rune('p') {
					goto l529
				}
				position++
				if buffer[position] != rune(')') {
					goto l529
				}
				position++
				add(ruleGOTAddress, position530)
			}
			return true
		l529:
			position, tokenIndex = position529, tokenIndex529
			return false
		},
		/* 40 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position531, tokenIndex531 := position, tokenIndex
			{
				position532 := position
				{
					position533, tokenIndex533 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l534
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l534
					}
					if buffer[position] != rune('@') {
						goto l534
					}
					position++
					if buffer[position] != rune('G') {
						goto l534
					}
					position++
					if buffer[position] != rune('O') {
						goto l534
					}
					position++
					if buffer[position] != rune('T') {
						goto l534
					}
					position++
					{
						position535, tokenIndex535 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l535
						}
						position++
						if buffer[position] != rune('F') {
							goto l535
						}
						position++
						if buffer[position] != rune('F') {
							goto l535
						}
						position++
						goto l536
					l535:
						position, tokenIndex = position535, tokenIndex535
					}
				l536:
					goto l533
				l534:
					position, tokenIndex = position533, tokenIndex533
					if buffer[position] != rune(':') {
						goto l531
					}
					position++
					{
						position537, tokenIndex537 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l538
						}
						position++
						goto l537
					l538:
						position, tokenIndex = position537, tokenIndex537
						if buffer[position] != rune('G') {
							goto l531
						}
						position++
					}
				l537:
					{
						position539, tokenIndex539 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l540
						}
						position++
						goto l539
					l540:
						position, tokenIndex = position539, tokenIndex539
						if buffer[position] != rune('O') {
							goto l531
						}
						position++
					}
				l539:
					{
						position541, tokenIndex541 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l542
						}
						position++
						goto l541
					l542:
						position, tokenIndex = position541, tokenIndex541
						if buffer[position] != rune('T') {
							goto l531
						}
						position++
					}
				l541:
					if buffer[position] != rune(':') {
						goto l531
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l531
					}
				}
			l533:
				add(ruleGOTSymbolOffset, position532)
			}
			return true
		l531:
			position, tokenIndex = position531, tokenIndex531
			return false
		},
		/* 41 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position543, tokenIndex543 := position, tokenIndex
			{
				position544 := position
				{
					position545, tokenIndex545 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l545
					}
					goto l546
				l545:
					position, tokenIndex = position545, tokenIndex545
				}
			l546:
				if buffer[position] != rune('{') {
					goto l543
				}
				position++
				{
					position547, tokenIndex547 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l547
					}
					position++
					goto l548
				l547:
					position, tokenIndex = position547, tokenIndex547
				}
			l548:
			l549:
				{
					position550, tokenIndex550 := position, tokenIndex
					{
						position551, tokenIndex551 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l552
						}
						position++
						goto l551
					l552:
						position, tokenIndex = position551, tokenIndex551
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l550
						}
						position++
					}
				l551:
					goto l549
				l550:
					position, tokenIndex = position550, tokenIndex550
				}
				if buffer[position] != rune('}') {
					goto l543
				}
				position++
				add(ruleAVX512Token, position544)
			}
			return true
		l543:
			position, tokenIndex = position543, tokenIndex543
			return false
		},
		/* 42 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position553, tokenIndex553 := position, tokenIndex
			{
				position554 := position
				if buffer[position] != rune('.') {
					goto l553
				}
				position++
				if buffer[position] != rune('T') {
					goto l553
				}
				position++
				if buffer[position] != rune('O') {
					goto l553
				}
				position++
				if buffer[position] != rune('C') {
					goto l553
				}
				position++
				if buffer[position] != rune('.') {
					goto l553
				}
				position++
				if buffer[position] != rune('-') {
					goto l553
				}
				position++
				{
					position555, tokenIndex555 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l556
					}
					position++
					if buffer[position] != rune('b') {
						goto l556
					}
					position++
					goto l555
				l556:
					position, tokenIndex = position555, tokenIndex555
					if buffer[position] != rune('.') {
						goto l553
					}
					position++
					if buffer[position] != rune('L') {
						goto l553
					}
					position++
					{
						position559, tokenIndex559 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l560
						}
						position++
						goto l559
					l560:
						position, tokenIndex = position559, tokenIndex559
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l561
						}
						position++
						goto l559
					l561:
						position, tokenIndex = position559, tokenIndex559
						if buffer[position] != rune('_') {
							goto l562
						}
						position++
						goto l559
					l562:
						position, tokenIndex = position559, tokenIndex559
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l553
						}
						position++
					}
				l559:
				l557:
					{
						position558, tokenIndex558 := position, tokenIndex
						{
							position563, tokenIndex563 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l564
							}
							position++
							goto l563
						l564:
							position, tokenIndex = position563, tokenIndex563
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l565
							}
							position++
							goto l563
						l565:
							position, tokenIndex = position563, tokenIndex563
							if buffer[position] != rune('_') {
								goto l566
							}
							position++
							goto l563
						l566:
							position, tokenIndex = position563, tokenIndex563
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l558
							}
							position++
						}
					l563:
						goto l557
					l558:
						position, tokenIndex = position558, tokenIndex558
					}
				}
			l555:
				if buffer[position] != rune('@') {
					goto l553
				}
				position++
				{
					position567, tokenIndex567 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l568
					}
					position++
					goto l567
				l568:
					position, tokenIndex = position567, tokenIndex567
					if buffer[position] != rune('H') {
						goto l553
					}
					position++
				}
			l567:
				{
					position569, tokenIndex569 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l570
					}
					position++
					goto l569
				l570:
					position, tokenIndex = position569, tokenIndex569
					if buffer[position] != rune('A') {
						goto l553
					}
					position++
				}
			l569:
				add(ruleTOCRefHigh, position554)
			}
			return true
		l553:
			position, tokenIndex = position553, tokenIndex553
			return false
		},
		/* 43 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position571, tokenIndex571 := position, tokenIndex
			{
				position572 := position
				if buffer[position] != rune('.') {
					goto l571
				}
				position++
				if buffer[position] != rune('T') {
					goto l571
				}
				position++
				if buffer[position] != rune('O') {
					goto l571
				}
				position++
				if buffer[position] != rune('C') {
					goto l571
				}
				position++
				if buffer[position] != rune('.') {
					goto l571
				}
				position++
				if buffer[position] != rune('-') {
					goto l571
				}
				position++
				{
					position573, tokenIndex573 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l574
					}
					position++
					if buffer[position] != rune('b') {
						goto l574
					}
					position++
					goto l573
				l574:
					position, tokenIndex = position573, tokenIndex573
					if buffer[position] != rune('.') {
						goto l571
					}
					position++
					if buffer[position] != rune('L') {
						goto l571
					}
					position++
					{
						position577, tokenIndex577 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l578
						}
						position++
						goto l577
					l578:
						position, tokenIndex = position577, tokenIndex577
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l579
						}
						position++
						goto l577
					l579:
						position, tokenIndex = position577, tokenIndex577
						if buffer[position] != rune('_') {
							goto l580
						}
						position++
						goto l577
					l580:
						position, tokenIndex = position577, tokenIndex577
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l571
						}
						position++
					}
				l577:
				l575:
					{
						position576, tokenIndex576 := position, tokenIndex
						{
							position581, tokenIndex581 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l582
							}
							position++
							goto l581
						l582:
							position, tokenIndex = position581, tokenIndex581
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l583
							}
							position++
							goto l581
						l583:
							position, tokenIndex = position581, tokenIndex581
							if buffer[position] != rune('_') {
								goto l584
							}
							position++
							goto l581
						l584:
							position, tokenIndex = position581, tokenIndex581
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l576
							}
							position++
						}
					l581:
						goto l575
					l576:
						position, tokenIndex = position576, tokenIndex576
					}
				}
			l573:
				if buffer[position] != rune('@') {
					goto l571
				}
				position++
				{
					position585, tokenIndex585 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l586
					}
					position++
					goto l585
				l586:
					position, tokenIndex = position585, tokenIndex585
					if buffer[position] != rune('L') {
						goto l571
					}
					position++
				}
			l585:
				add(ruleTOCRefLow, position572)
			}
			return true
		l571:
			position, tokenIndex = position571, tokenIndex571
			return false
		},
		/* 44 IndirectionIndicator <- <'*'> */
		func() bool {
			position587, tokenIndex587 := position, tokenIndex
			{
				position588 := position
				if buffer[position] != rune('*') {
					goto l587
				}
				position++
				add(ruleIndirectionIndicator, position588)
			}
			return true
		l587:
			position, tokenIndex = position587, tokenIndex587
			return false
		},
		/* 45 Float <- <([0-9]+ '.' [0-9]*)> */
		func() bool {
			position589, tokenIndex589 := position, tokenIndex
			{
				position590 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l589
				}
				position++
			l591:
				{
					position592, tokenIndex592 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l592
					}
					position++
					goto l591
				l592:
					position, tokenIndex = position592, tokenIndex592
				}
				if buffer[position] != rune('.') {
					goto l589
				}
				position++
			l593:
				{
					position594, tokenIndex594 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l594
					}
					position++
					goto l593
				l594:
					position, tokenIndex = position594, tokenIndex594
				}
				add(ruleFloat, position590)
			}
			return true
		l589:
			position, tokenIndex = position589, tokenIndex589
			return false
		},
		/* 46 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
		func() bool {
			position595, tokenIndex595 := position, tokenIndex
			{
				position596 := position
				{
					position597, tokenIndex597 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l598
					}
					position++
					{
						position599, tokenIndex599 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l600
						}
						position++
						goto l599
					l600:
						position, tokenIndex = position599, tokenIndex599
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l598
						}
						position++
					}
				l599:
				l601:
					{
						position602, tokenIndex602 := position, tokenIndex
						{
							position603, tokenIndex603 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l604
							}
							position++
							goto l603
						l604:
							position, tokenIndex = position603, tokenIndex603
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l605
							}
							position++
							goto l603
						l605:
							position, tokenIndex = position603, tokenIndex603
							{
								position606, tokenIndex606 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l607
								}
								position++
								goto l606
							l607:
								position, tokenIndex = position606, tokenIndex606
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l602
								}
								position++
							}
						l606:
						}
					l603:
						goto l601
					l602:
						position, tokenIndex = position602, tokenIndex602
					}
					goto l597
				l598:
					position, tokenIndex = position597, tokenIndex597
					{
						position609, tokenIndex609 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l609
						}
						position++
						goto l610
					l609:
						position, tokenIndex = position609, tokenIndex609
					}
				l610:
					{
						position611, tokenIndex611 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l612
						}
						if !_rules[ruleOffset]() {
							goto l612
						}
						goto l611
					l612:
						position, tokenIndex = position611, tokenIndex611
						if !_rules[ruleOffset]() {
							goto l608
						}
					}
				l611:
					goto l597
				l608:
					position, tokenIndex = position597, tokenIndex597
					if buffer[position] != rune('#') {
						goto l613
					}
					position++
					if !_rules[ruleFloat]() {
						goto l613
					}
					goto l597
				l613:
					position, tokenIndex = position597, tokenIndex597
					if buffer[position] != rune('#') {
						goto l614
					}
					position++
					if !_rules[ruleOffset]() {
						goto l614
					}
					{
						position615, tokenIndex615 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l615
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l615
						}
						position++
					l617:
						{
							position618, tokenIndex618 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l618
							}
							position++
							goto l617
						l618:
							position, tokenIndex = position618, tokenIndex618
						}
						{
							position619, tokenIndex619 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l619
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l619
							}
							position++
						l621:
							{
								position622, tokenIndex622 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l622
								}
								position++
								goto l621
							l622:
								position, tokenIndex = position622, tokenIndex622
							}
							goto l620
						l619:
							position, tokenIndex = position619, tokenIndex619
						}
					l620:
						goto l616
					l615:
						position, tokenIndex = position615, tokenIndex615
					}
				l616:
					goto l597
				l614:
					position, tokenIndex = position597, tokenIndex597
					if buffer[position] != rune('#') {
						goto l623
					}
					position++
					{
						position624, tokenIndex624 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l624
						}
						position++
						goto l625
					l624:
						position, tokenIndex = position624, tokenIndex624
					}
				l625:
					if buffer[position] != rune('(') {
						goto l623
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l623
					}
					position++
					{
						position626, tokenIndex626 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l626
						}
						goto l627
					l626:
						position, tokenIndex = position626, tokenIndex626
					}
				l627:
					if buffer[position] != rune('<') {
						goto l623
					}
					position++
					if buffer[position] != rune('<') {
						goto l623
					}
					position++
					{
						position628, tokenIndex628 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l628
						}
						goto l629
					l628:
						position, tokenIndex = position628, tokenIndex628
					}
				l629:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l623
					}
					position++
					if buffer[position] != rune(')') {
						goto l623
					}
					position++
					goto l597
				l623:
					position, tokenIndex = position597, tokenIndex597
					if !_rules[ruleARMRegister]() {
						goto l595
					}
				}
			l597:
				{
					position630, tokenIndex630 := position, tokenIndex
					{
						position631, tokenIndex631 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l632
						}
						position++
						goto l631
					l632:
						position, tokenIndex = position631, tokenIndex631
						if buffer[position] != rune('b') {
							goto l633
						}
						position++
						goto l631
					l633:
						position, tokenIndex = position631, tokenIndex631
						if buffer[position] != rune(':') {
							goto l634
						}
						position++
						goto l631
					l634:
						position, tokenIndex = position631, tokenIndex631
						if buffer[position] != rune('(') {
							goto l635
						}
						position++
						goto l631
					l635:
						position, tokenIndex = position631, tokenIndex631
						if buffer[position] != rune('+') {
							goto l636
						}
						position++
						goto l631
					l636:
						position, tokenIndex = position631, tokenIndex631
						if buffer[position] != rune('-') {
							goto l630
						}
						position++
					}
				l631:
					goto l595
				l630:
					position, tokenIndex = position630, tokenIndex630
				}
				add(ruleRegisterOrConstant, position596)
			}
			return true
		l595:
			position, tokenIndex = position595, tokenIndex595
			return false
		},
		/* 47 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R')) / (('m' / 'M') ('s' / 'S') ('l' / 'L'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9] [0-9]?))> */
		func() bool {
			position637, tokenIndex637 := position, tokenIndex
			{
				position638 := position
				{
					position639, tokenIndex639 := position, tokenIndex
					{
						position641, tokenIndex641 := position, tokenIndex
						{
							position643, tokenIndex643 := position, tokenIndex
							if buffer[position] != rune('u') {
								goto l644
							}
							position++
							goto l643
						l644:
							position, tokenIndex = position643, tokenIndex643
							if buffer[position] != rune('s') {
								goto l642
							}
							position++
						}
					l643:
						{
							position645, tokenIndex645 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l646
							}
							position++
							goto l645
						l646:
							position, tokenIndex = position645, tokenIndex645
							if buffer[position] != rune('X') {
								goto l642
							}
							position++
						}
					l645:
						{
							position647, tokenIndex647 := position, tokenIndex
							if buffer[position] != rune('t') {
								goto l648
							}
							position++
							goto l647
						l648:
							position, tokenIndex = position647, tokenIndex647
							if buffer[position] != rune('T') {
								goto l642
							}
							position++
						}
					l647:
						{
							position649, tokenIndex649 := position, tokenIndex
							if buffer[position] != rune('x') {
								goto l650
							}
							position++
							goto l649
						l650:
							position, tokenIndex = position649, tokenIndex649
							if buffer[position] != rune('w') {
								goto l651
							}
							position++
							goto l649
						l651:
							position, tokenIndex = position649, tokenIndex649
							if buffer[position] != rune('h') {
								goto l652
							}
							position++
							goto l649
						l652:
							position, tokenIndex = position649, tokenIndex649
							if buffer[position] != rune('b') {
								goto l642
							}
							position++
						}
					l649:
						goto l641
					l642:
						position, tokenIndex = position641, tokenIndex641
						{
							position654, tokenIndex654 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l655
							}
							position++
							goto l654
						l655:
							position, tokenIndex = position654, tokenIndex654
							if buffer[position] != rune('L') {
								goto l653
							}
							position++
						}
					l654:
						{
							position656, tokenIndex656 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l657
							}
							position++
							goto l656
						l657:
							position, tokenIndex = position656, tokenIndex656
							if buffer[position] != rune('S') {
								goto l653
							}
							position++
						}
					l656:
						{
							position658, tokenIndex658 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l659
							}
							position++
							goto l658
						l659:
							position, tokenIndex = position658, tokenIndex658
							if buffer[position] != rune('L') {
								goto l653
							}
							position++
						}
					l658:
						goto l641
					l653:
						position, tokenIndex = position641, tokenIndex641
						{
							position661, tokenIndex661 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l662
							}
							position++
							goto l661
						l662:
							position, tokenIndex = position661, tokenIndex661
							if buffer[position] != rune('L') {
								goto l660
							}
							position++
						}
					l661:
						{
							position663, tokenIndex663 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l664
							}
							position++
							goto l663
						l664:
							position, tokenIndex = position663, tokenIndex663
							if buffer[position] != rune('S') {
								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 l641
					l660:
						position, tokenIndex = position641, tokenIndex641
						{
							position668, tokenIndex668 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l669
							}
							position++
							goto l668
						l669:
							position, tokenIndex = position668, tokenIndex668
							if buffer[position] != rune('R') {
								goto l667
							}
							position++
						}
					l668:
						{
							position670, tokenIndex670 := position, tokenIndex
							if buffer[position] != rune('o') {
								goto l671
							}
							position++
							goto l670
						l671:
							position, tokenIndex = position670, tokenIndex670
							if buffer[position] != rune('O') {
								goto l667
							}
							position++
						}
					l670:
						{
							position672, tokenIndex672 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l673
							}
							position++
							goto l672
						l673:
							position, tokenIndex = position672, tokenIndex672
							if buffer[position] != rune('R') {
								goto l667
							}
							position++
						}
					l672:
						goto l641
					l667:
						position, tokenIndex = position641, tokenIndex641
						{
							position675, tokenIndex675 := position, tokenIndex
							if buffer[position] != rune('a') {
								goto l676
							}
							position++
							goto l675
						l676:
							position, tokenIndex = position675, tokenIndex675
							if buffer[position] != rune('A') {
								goto l674
							}
							position++
						}
					l675:
						{
							position677, tokenIndex677 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l678
							}
							position++
							goto l677
						l678:
							position, tokenIndex = position677, tokenIndex677
							if buffer[position] != rune('S') {
								goto l674
							}
							position++
						}
					l677:
						{
							position679, tokenIndex679 := position, tokenIndex
							if buffer[position] != rune('r') {
								goto l680
							}
							position++
							goto l679
						l680:
							position, tokenIndex = position679, tokenIndex679
							if buffer[position] != rune('R') {
								goto l674
							}
							position++
						}
					l679:
						goto l641
					l674:
						position, tokenIndex = position641, tokenIndex641
						{
							position681, tokenIndex681 := position, tokenIndex
							if buffer[position] != rune('m') {
								goto l682
							}
							position++
							goto l681
						l682:
							position, tokenIndex = position681, tokenIndex681
							if buffer[position] != rune('M') {
								goto l640
							}
							position++
						}
					l681:
						{
							position683, tokenIndex683 := position, tokenIndex
							if buffer[position] != rune('s') {
								goto l684
							}
							position++
							goto l683
						l684:
							position, tokenIndex = position683, tokenIndex683
							if buffer[position] != rune('S') {
								goto l640
							}
							position++
						}
					l683:
						{
							position685, tokenIndex685 := position, tokenIndex
							if buffer[position] != rune('l') {
								goto l686
							}
							position++
							goto l685
						l686:
							position, tokenIndex = position685, tokenIndex685
							if buffer[position] != rune('L') {
								goto l640
							}
							position++
						}
					l685:
					}
				l641:
					{
						position687, tokenIndex687 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l687
						}
						if buffer[position] != rune('#') {
							goto l687
						}
						position++
						if !_rules[ruleOffset]() {
							goto l687
						}
						goto l688
					l687:
						position, tokenIndex = position687, tokenIndex687
					}
				l688:
					goto l639
				l640:
					position, tokenIndex = position639, tokenIndex639
					{
						position690, tokenIndex690 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l691
						}
						position++
						goto l690
					l691:
						position, tokenIndex = position690, tokenIndex690
						if buffer[position] != rune('M') {
							goto l689
						}
						position++
					}
				l690:
					{
						position692, tokenIndex692 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l693
						}
						position++
						goto l692
					l693:
						position, tokenIndex = position692, tokenIndex692
						if buffer[position] != rune('U') {
							goto l689
						}
						position++
					}
				l692:
					{
						position694, tokenIndex694 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l695
						}
						position++
						goto l694
					l695:
						position, tokenIndex = position694, tokenIndex694
						if buffer[position] != rune('L') {
							goto l689
						}
						position++
					}
				l694:
					if buffer[position] != rune(' ') {
						goto l689
					}
					position++
					{
						position696, tokenIndex696 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l697
						}
						position++
						goto l696
					l697:
						position, tokenIndex = position696, tokenIndex696
						if buffer[position] != rune('V') {
							goto l689
						}
						position++
					}
				l696:
					{
						position698, tokenIndex698 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l699
						}
						position++
						goto l698
					l699:
						position, tokenIndex = position698, tokenIndex698
						if buffer[position] != rune('L') {
							goto l689
						}
						position++
					}
				l698:
					goto l639
				l689:
					position, tokenIndex = position639, tokenIndex639
					{
						position700, tokenIndex700 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l701
						}
						position++
						goto l700
					l701:
						position, tokenIndex = position700, tokenIndex700
						if buffer[position] != rune('M') {
							goto l637
						}
						position++
					}
				l700:
					{
						position702, tokenIndex702 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l703
						}
						position++
						goto l702
					l703:
						position, tokenIndex = position702, tokenIndex702
						if buffer[position] != rune('U') {
							goto l637
						}
						position++
					}
				l702:
					{
						position704, tokenIndex704 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l705
						}
						position++
						goto l704
					l705:
						position, tokenIndex = position704, tokenIndex704
						if buffer[position] != rune('L') {
							goto l637
						}
						position++
					}
				l704:
					if buffer[position] != rune(' ') {
						goto l637
					}
					position++
					if buffer[position] != rune('#') {
						goto l637
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l637
					}
					position++
					{
						position706, tokenIndex706 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l706
						}
						position++
						goto l707
					l706:
						position, tokenIndex = position706, tokenIndex706
					}
				l707:
				}
			l639:
				add(ruleARMConstantTweak, position638)
			}
			return true
		l637:
			position, tokenIndex = position637, tokenIndex637
			return false
		},
		/* 48 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 {
			position708, tokenIndex708 := position, tokenIndex
			{
				position709 := position
				{
					position710, tokenIndex710 := position, tokenIndex
					{
						position712, tokenIndex712 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l713
						}
						position++
						goto l712
					l713:
						position, tokenIndex = position712, tokenIndex712
						if buffer[position] != rune('S') {
							goto l711
						}
						position++
					}
				l712:
					{
						position714, tokenIndex714 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l715
						}
						position++
						goto l714
					l715:
						position, tokenIndex = position714, tokenIndex714
						if buffer[position] != rune('P') {
							goto l711
						}
						position++
					}
				l714:
					goto l710
				l711:
					position, tokenIndex = position710, tokenIndex710
					{
						position717, tokenIndex717 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l718
						}
						position++
						goto l717
					l718:
						position, tokenIndex = position717, tokenIndex717
						if buffer[position] != rune('w') {
							goto l719
						}
						position++
						goto l717
					l719:
						position, tokenIndex = position717, tokenIndex717
						if buffer[position] != rune('d') {
							goto l720
						}
						position++
						goto l717
					l720:
						position, tokenIndex = position717, tokenIndex717
						if buffer[position] != rune('q') {
							goto l721
						}
						position++
						goto l717
					l721:
						position, tokenIndex = position717, tokenIndex717
						if buffer[position] != rune('s') {
							goto l722
						}
						position++
						goto l717
					l722:
						position, tokenIndex = position717, tokenIndex717
						if buffer[position] != rune('h') {
							goto l723
						}
						position++
						goto l717
					l723:
						position, tokenIndex = position717, tokenIndex717
						if buffer[position] != rune('b') {
							goto l716
						}
						position++
					}
				l717:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l716
					}
					position++
					{
						position724, tokenIndex724 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l724
						}
						position++
						goto l725
					l724:
						position, tokenIndex = position724, tokenIndex724
					}
				l725:
					goto l710
				l716:
					position, tokenIndex = position710, tokenIndex710
					{
						position727, tokenIndex727 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l728
						}
						position++
						goto l727
					l728:
						position, tokenIndex = position727, tokenIndex727
						if buffer[position] != rune('X') {
							goto l726
						}
						position++
					}
				l727:
					{
						position729, tokenIndex729 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l730
						}
						position++
						goto l729
					l730:
						position, tokenIndex = position729, tokenIndex729
						if buffer[position] != rune('Z') {
							goto l726
						}
						position++
					}
				l729:
					{
						position731, tokenIndex731 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l732
						}
						position++
						goto l731
					l732:
						position, tokenIndex = position731, tokenIndex731
						if buffer[position] != rune('R') {
							goto l726
						}
						position++
					}
				l731:
					goto l710
				l726:
					position, tokenIndex = position710, tokenIndex710
					{
						position734, tokenIndex734 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l735
						}
						position++
						goto l734
					l735:
						position, tokenIndex = position734, tokenIndex734
						if buffer[position] != rune('W') {
							goto l733
						}
						position++
					}
				l734:
					{
						position736, tokenIndex736 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l737
						}
						position++
						goto l736
					l737:
						position, tokenIndex = position736, tokenIndex736
						if buffer[position] != rune('Z') {
							goto l733
						}
						position++
					}
				l736:
					{
						position738, tokenIndex738 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l739
						}
						position++
						goto l738
					l739:
						position, tokenIndex = position738, tokenIndex738
						if buffer[position] != rune('R') {
							goto l733
						}
						position++
					}
				l738:
					goto l710
				l733:
					position, tokenIndex = position710, tokenIndex710
					{
						position741, tokenIndex741 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l742
						}
						position++
						goto l741
					l742:
						position, tokenIndex = position741, tokenIndex741
						if buffer[position] != rune('N') {
							goto l740
						}
						position++
					}
				l741:
					{
						position743, tokenIndex743 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l744
						}
						position++
						goto l743
					l744:
						position, tokenIndex = position743, tokenIndex743
						if buffer[position] != rune('Z') {
							goto l740
						}
						position++
					}
				l743:
					{
						position745, tokenIndex745 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l746
						}
						position++
						goto l745
					l746:
						position, tokenIndex = position745, tokenIndex745
						if buffer[position] != rune('C') {
							goto l740
						}
						position++
					}
				l745:
					{
						position747, tokenIndex747 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l748
						}
						position++
						goto l747
					l748:
						position, tokenIndex = position747, tokenIndex747
						if buffer[position] != rune('V') {
							goto l740
						}
						position++
					}
				l747:
					goto l710
				l740:
					position, tokenIndex = position710, tokenIndex710
					if !_rules[ruleSVE2PredicateRegister]() {
						goto l749
					}
					goto l710
				l749:
					position, tokenIndex = position710, tokenIndex710
					if !_rules[ruleARMVectorRegister]() {
						goto l750
					}
					goto l710
				l750:
					position, tokenIndex = position710, tokenIndex710
					if !_rules[ruleSVE2SpecialValue]() {
						goto l751
					}
					goto l710
				l751:
					position, tokenIndex = position710, tokenIndex710
					if buffer[position] != rune('{') {
						goto l708
					}
					position++
					{
						position752, tokenIndex752 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l752
						}
						goto l753
					l752:
						position, tokenIndex = position752, tokenIndex752
					}
				l753:
					if !_rules[ruleARMVectorRegister]() {
						goto l708
					}
				l754:
					{
						position755, tokenIndex755 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l755
						}
						position++
						{
							position756, tokenIndex756 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l756
							}
							goto l757
						l756:
							position, tokenIndex = position756, tokenIndex756
						}
					l757:
						if !_rules[ruleARMVectorRegister]() {
							goto l755
						}
						goto l754
					l755:
						position, tokenIndex = position755, tokenIndex755
					}
					{
						position758, tokenIndex758 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l758
						}
						goto l759
					l758:
						position, tokenIndex = position758, tokenIndex758
					}
				l759:
					if buffer[position] != rune('}') {
						goto l708
					}
					position++
					{
						position760, tokenIndex760 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l760
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l760
						}
						position++
						{
							position762, tokenIndex762 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l762
							}
							position++
							goto l763
						l762:
							position, tokenIndex = position762, tokenIndex762
						}
					l763:
						if buffer[position] != rune(']') {
							goto l760
						}
						position++
						goto l761
					l760:
						position, tokenIndex = position760, tokenIndex760
					}
				l761:
				}
			l710:
				add(ruleARMRegister, position709)
			}
			return true
		l708:
			position, tokenIndex = position708, tokenIndex708
			return false
		},
		/* 49 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 {
			position764, tokenIndex764 := position, tokenIndex
			{
				position765 := position
				{
					position766, tokenIndex766 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l767
					}
					position++
					goto l766
				l767:
					position, tokenIndex = position766, tokenIndex766
					if buffer[position] != rune('v') {
						goto l768
					}
					position++
					goto l766
				l768:
					position, tokenIndex = position766, tokenIndex766
					if buffer[position] != rune('z') {
						goto l764
					}
					position++
				}
			l766:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l764
				}
				position++
				{
					position769, tokenIndex769 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l769
					}
					position++
					goto l770
				l769:
					position, tokenIndex = position769, tokenIndex769
				}
			l770:
				{
					position771, tokenIndex771 := position, tokenIndex
					{
						position772, tokenIndex772 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l773
						}
						position++
						goto l772
					l773:
						position, tokenIndex = position772, tokenIndex772
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l774
						}
						position++
						goto l772
					l774:
						position, tokenIndex = position772, tokenIndex772
						{
							position776, tokenIndex776 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l777
							}
							position++
							goto l776
						l777:
							position, tokenIndex = position776, tokenIndex776
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l775
							}
							position++
						}
					l776:
						goto l772
					l775:
						position, tokenIndex = position772, tokenIndex772
						if buffer[position] != rune('_') {
							goto l771
						}
						position++
					}
				l772:
					goto l764
				l771:
					position, tokenIndex = position771, tokenIndex771
				}
				{
					position778, tokenIndex778 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l778
					}
					position++
				l780:
					{
						position781, tokenIndex781 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l781
						}
						position++
						goto l780
					l781:
						position, tokenIndex = position781, tokenIndex781
					}
					{
						position782, tokenIndex782 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l783
						}
						position++
						goto l782
					l783:
						position, tokenIndex = position782, tokenIndex782
						if buffer[position] != rune('s') {
							goto l784
						}
						position++
						goto l782
					l784:
						position, tokenIndex = position782, tokenIndex782
						if buffer[position] != rune('d') {
							goto l785
						}
						position++
						goto l782
					l785:
						position, tokenIndex = position782, tokenIndex782
						if buffer[position] != rune('h') {
							goto l786
						}
						position++
						goto l782
					l786:
						position, tokenIndex = position782, tokenIndex782
						if buffer[position] != rune('q') {
							goto l778
						}
						position++
					}
				l782:
					{
						position787, tokenIndex787 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l787
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l787
						}
						position++
						{
							position789, tokenIndex789 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l789
							}
							position++
							goto l790
						l789:
							position, tokenIndex = position789, tokenIndex789
						}
					l790:
						if buffer[position] != rune(']') {
							goto l787
						}
						position++
						goto l788
					l787:
						position, tokenIndex = position787, tokenIndex787
					}
				l788:
					goto l779
				l778:
					position, tokenIndex = position778, tokenIndex778
				}
			l779:
				add(ruleARMVectorRegister, position765)
			}
			return true
		l764:
			position, tokenIndex = position764, tokenIndex764
			return false
		},
		/* 50 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
		func() bool {
			position791, tokenIndex791 := position, tokenIndex
			{
				position792 := position
				{
					position793, tokenIndex793 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l794
					}
					position++
					goto l793
				l794:
					position, tokenIndex = position793, tokenIndex793
					if buffer[position] != rune('P') {
						goto l791
					}
					position++
				}
			l793:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l791
				}
				position++
				{
					position795, tokenIndex795 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l795
					}
					position++
					goto l796
				l795:
					position, tokenIndex = position795, tokenIndex795
				}
			l796:
				if buffer[position] != rune('/') {
					goto l791
				}
				position++
				{
					position797, tokenIndex797 := position, tokenIndex
					if buffer[position] != rune('m') {
						goto l798
					}
					position++
					goto l797
				l798:
					position, tokenIndex = position797, tokenIndex797
					if buffer[position] != rune('M') {
						goto l799
					}
					position++
					goto l797
				l799:
					position, tokenIndex = position797, tokenIndex797
					{
						position800, tokenIndex800 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l801
						}
						position++
						goto l800
					l801:
						position, tokenIndex = position800, tokenIndex800
						if buffer[position] != rune('Z') {
							goto l791
						}
						position++
					}
				l800:
				}
			l797:
				add(ruleSVE2PredicateRegister, position792)
			}
			return true
		l791:
			position, tokenIndex = position791, tokenIndex791
			return false
		},
		/* 51 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 {
			position802, tokenIndex802 := position, tokenIndex
			{
				position803 := position
				{
					position804, tokenIndex804 := position, tokenIndex
					{
						position806, tokenIndex806 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l807
						}
						position++
						goto l806
					l807:
						position, tokenIndex = position806, tokenIndex806
						if buffer[position] != rune('P') {
							goto l805
						}
						position++
					}
				l806:
					{
						position808, tokenIndex808 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l809
						}
						position++
						goto l808
					l809:
						position, tokenIndex = position808, tokenIndex808
						if buffer[position] != rune('O') {
							goto l805
						}
						position++
					}
				l808:
					{
						position810, tokenIndex810 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l811
						}
						position++
						goto l810
					l811:
						position, tokenIndex = position810, tokenIndex810
						if buffer[position] != rune('W') {
							goto l805
						}
						position++
					}
				l810:
					if buffer[position] != rune('2') {
						goto l805
					}
					position++
					goto l804
				l805:
					position, tokenIndex = position804, tokenIndex804
					{
						position813, tokenIndex813 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l814
						}
						position++
						goto l813
					l814:
						position, tokenIndex = position813, tokenIndex813
						if buffer[position] != rune('V') {
							goto l812
						}
						position++
					}
				l813:
					{
						position815, tokenIndex815 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l816
						}
						position++
						goto l815
					l816:
						position, tokenIndex = position815, tokenIndex815
						if buffer[position] != rune('L') {
							goto l812
						}
						position++
					}
				l815:
					{
						position817, tokenIndex817 := position, tokenIndex
						if buffer[position] != rune('1') {
							goto l818
						}
						position++
						goto l817
					l818:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('2') {
							goto l819
						}
						position++
						goto l817
					l819:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('3') {
							goto l820
						}
						position++
						goto l817
					l820:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('4') {
							goto l821
						}
						position++
						goto l817
					l821:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('5') {
							goto l822
						}
						position++
						goto l817
					l822:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('6') {
							goto l823
						}
						position++
						goto l817
					l823:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('7') {
							goto l824
						}
						position++
						goto l817
					l824:
						position, tokenIndex = position817, tokenIndex817
						if buffer[position] != rune('8') {
							goto l812
						}
						position++
					}
				l817:
					{
						position825, tokenIndex825 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l825
						}
						position++
						goto l812
					l825:
						position, tokenIndex = position825, tokenIndex825
					}
					goto l804
				l812:
					position, tokenIndex = position804, tokenIndex804
					{
						position827, tokenIndex827 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l828
						}
						position++
						goto l827
					l828:
						position, tokenIndex = position827, tokenIndex827
						if buffer[position] != rune('V') {
							goto l826
						}
						position++
					}
				l827:
					{
						position829, tokenIndex829 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l830
						}
						position++
						goto l829
					l830:
						position, tokenIndex = position829, tokenIndex829
						if buffer[position] != rune('L') {
							goto l826
						}
						position++
					}
				l829:
					if buffer[position] != rune('1') {
						goto l826
					}
					position++
					if buffer[position] != rune('6') {
						goto l826
					}
					position++
					goto l804
				l826:
					position, tokenIndex = position804, tokenIndex804
					{
						position832, tokenIndex832 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l833
						}
						position++
						goto l832
					l833:
						position, tokenIndex = position832, tokenIndex832
						if buffer[position] != rune('V') {
							goto l831
						}
						position++
					}
				l832:
					{
						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 l831
						}
						position++
					}
				l834:
					if buffer[position] != rune('3') {
						goto l831
					}
					position++
					if buffer[position] != rune('2') {
						goto l831
					}
					position++
					goto l804
				l831:
					position, tokenIndex = position804, tokenIndex804
					{
						position837, tokenIndex837 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l838
						}
						position++
						goto l837
					l838:
						position, tokenIndex = position837, tokenIndex837
						if buffer[position] != rune('V') {
							goto l836
						}
						position++
					}
				l837:
					{
						position839, tokenIndex839 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l840
						}
						position++
						goto l839
					l840:
						position, tokenIndex = position839, tokenIndex839
						if buffer[position] != rune('L') {
							goto l836
						}
						position++
					}
				l839:
					if buffer[position] != rune('6') {
						goto l836
					}
					position++
					if buffer[position] != rune('4') {
						goto l836
					}
					position++
					goto l804
				l836:
					position, tokenIndex = position804, tokenIndex804
					{
						position842, tokenIndex842 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l843
						}
						position++
						goto l842
					l843:
						position, tokenIndex = position842, tokenIndex842
						if buffer[position] != rune('V') {
							goto l841
						}
						position++
					}
				l842:
					{
						position844, tokenIndex844 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l845
						}
						position++
						goto l844
					l845:
						position, tokenIndex = position844, tokenIndex844
						if buffer[position] != rune('L') {
							goto l841
						}
						position++
					}
				l844:
					if buffer[position] != rune('1') {
						goto l841
					}
					position++
					if buffer[position] != rune('2') {
						goto l841
					}
					position++
					if buffer[position] != rune('8') {
						goto l841
					}
					position++
					goto l804
				l841:
					position, tokenIndex = position804, tokenIndex804
					{
						position847, tokenIndex847 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l848
						}
						position++
						goto l847
					l848:
						position, tokenIndex = position847, tokenIndex847
						if buffer[position] != rune('V') {
							goto l846
						}
						position++
					}
				l847:
					{
						position849, tokenIndex849 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l850
						}
						position++
						goto l849
					l850:
						position, tokenIndex = position849, tokenIndex849
						if buffer[position] != rune('L') {
							goto l846
						}
						position++
					}
				l849:
					if buffer[position] != rune('2') {
						goto l846
					}
					position++
					if buffer[position] != rune('5') {
						goto l846
					}
					position++
					if buffer[position] != rune('6') {
						goto l846
					}
					position++
					goto l804
				l846:
					position, tokenIndex = position804, tokenIndex804
					{
						position852, tokenIndex852 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l853
						}
						position++
						goto l852
					l853:
						position, tokenIndex = position852, tokenIndex852
						if buffer[position] != rune('M') {
							goto l851
						}
						position++
					}
				l852:
					{
						position854, tokenIndex854 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l855
						}
						position++
						goto l854
					l855:
						position, tokenIndex = position854, tokenIndex854
						if buffer[position] != rune('U') {
							goto l851
						}
						position++
					}
				l854:
					{
						position856, tokenIndex856 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l857
						}
						position++
						goto l856
					l857:
						position, tokenIndex = position856, tokenIndex856
						if buffer[position] != rune('L') {
							goto l851
						}
						position++
					}
				l856:
					if buffer[position] != rune('3') {
						goto l851
					}
					position++
					goto l804
				l851:
					position, tokenIndex = position804, tokenIndex804
					{
						position859, tokenIndex859 := position, tokenIndex
						if buffer[position] != rune('m') {
							goto l860
						}
						position++
						goto l859
					l860:
						position, tokenIndex = position859, tokenIndex859
						if buffer[position] != rune('M') {
							goto l858
						}
						position++
					}
				l859:
					{
						position861, tokenIndex861 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l862
						}
						position++
						goto l861
					l862:
						position, tokenIndex = position861, tokenIndex861
						if buffer[position] != rune('U') {
							goto l858
						}
						position++
					}
				l861:
					{
						position863, tokenIndex863 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l864
						}
						position++
						goto l863
					l864:
						position, tokenIndex = position863, tokenIndex863
						if buffer[position] != rune('L') {
							goto l858
						}
						position++
					}
				l863:
					if buffer[position] != rune('4') {
						goto l858
					}
					position++
					goto l804
				l858:
					position, tokenIndex = position804, tokenIndex804
					{
						position865, tokenIndex865 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l866
						}
						position++
						goto l865
					l866:
						position, tokenIndex = position865, tokenIndex865
						if buffer[position] != rune('A') {
							goto l802
						}
						position++
					}
				l865:
					{
						position867, tokenIndex867 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l868
						}
						position++
						goto l867
					l868:
						position, tokenIndex = position867, tokenIndex867
						if buffer[position] != rune('L') {
							goto l802
						}
						position++
					}
				l867:
					{
						position869, tokenIndex869 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l870
						}
						position++
						goto l869
					l870:
						position, tokenIndex = position869, tokenIndex869
						if buffer[position] != rune('L') {
							goto l802
						}
						position++
					}
				l869:
				}
			l804:
				{
					position871, tokenIndex871 := position, tokenIndex
					{
						position872, tokenIndex872 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l873
						}
						position++
						goto l872
					l873:
						position, tokenIndex = position872, tokenIndex872
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l874
						}
						position++
						goto l872
					l874:
						position, tokenIndex = position872, tokenIndex872
						{
							position876, tokenIndex876 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l877
							}
							position++
							goto l876
						l877:
							position, tokenIndex = position876, tokenIndex876
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l875
							}
							position++
						}
					l876:
						goto l872
					l875:
						position, tokenIndex = position872, tokenIndex872
						if buffer[position] != rune('_') {
							goto l871
						}
						position++
					}
				l872:
					goto l802
				l871:
					position, tokenIndex = position871, tokenIndex871
				}
				add(ruleSVE2SpecialValue, position803)
			}
			return true
		l802:
			position, tokenIndex = position802, tokenIndex802
			return false
		},
		/* 52 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position878, tokenIndex878 := position, tokenIndex
			{
				position879 := position
				{
					position880, tokenIndex880 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l881
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l881
					}
					goto l880
				l881:
					position, tokenIndex = position880, tokenIndex880
					if !_rules[ruleSymbolRef]() {
						goto l882
					}
					goto l880
				l882:
					position, tokenIndex = position880, tokenIndex880
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l883
					}
					goto l880
				l883:
					position, tokenIndex = position880, tokenIndex880
				l885:
					{
						position886, tokenIndex886 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l886
						}
						goto l885
					l886:
						position, tokenIndex = position886, tokenIndex886
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l884
					}
					goto l880
				l884:
					position, tokenIndex = position880, tokenIndex880
					if !_rules[ruleSegmentRegister]() {
						goto l887
					}
					if !_rules[ruleOffset]() {
						goto l887
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l887
					}
					goto l880
				l887:
					position, tokenIndex = position880, tokenIndex880
					if !_rules[ruleSegmentRegister]() {
						goto l888
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l888
					}
					goto l880
				l888:
					position, tokenIndex = position880, tokenIndex880
					if !_rules[ruleSegmentRegister]() {
						goto l889
					}
					if !_rules[ruleOffset]() {
						goto l889
					}
					goto l880
				l889:
					position, tokenIndex = position880, tokenIndex880
					if !_rules[ruleARMBaseIndexScale]() {
						goto l890
					}
					goto l880
				l890:
					position, tokenIndex = position880, tokenIndex880
					if !_rules[ruleBaseIndexScale]() {
						goto l878
					}
				}
			l880:
				add(ruleMemoryRef, position879)
			}
			return true
		l878:
			position, tokenIndex = position878, tokenIndex878
			return false
		},
		/* 53 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position891, tokenIndex891 := position, tokenIndex
			{
				position892 := position
				{
					position893, tokenIndex893 := position, tokenIndex
				l895:
					{
						position896, tokenIndex896 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l896
						}
						goto l895
					l896:
						position, tokenIndex = position896, tokenIndex896
					}
					if buffer[position] != rune('+') {
						goto l893
					}
					position++
					goto l894
				l893:
					position, tokenIndex = position893, tokenIndex893
				}
			l894:
				{
					position897, tokenIndex897 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l898
					}
					goto l897
				l898:
					position, tokenIndex = position897, tokenIndex897
					if !_rules[ruleSymbolName]() {
						goto l891
					}
				}
			l897:
			l899:
				{
					position900, tokenIndex900 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l900
					}
					goto l899
				l900:
					position, tokenIndex = position900, tokenIndex900
				}
				{
					position901, tokenIndex901 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l901
					}
					position++
					if !_rules[ruleSection]() {
						goto l901
					}
				l903:
					{
						position904, tokenIndex904 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l904
						}
						goto l903
					l904:
						position, tokenIndex = position904, tokenIndex904
					}
					goto l902
				l901:
					position, tokenIndex = position901, tokenIndex901
				}
			l902:
				add(ruleSymbolRef, position892)
			}
			return true
		l891:
			position, tokenIndex = position891, tokenIndex891
			return false
		},
		/* 54 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position905, tokenIndex905 := position, tokenIndex
			{
				position906 := position
				if buffer[position] != rune(':') {
					goto l905
				}
				position++
				{
					position907, tokenIndex907 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l908
					}
					position++
					goto l907
				l908:
					position, tokenIndex = position907, tokenIndex907
					if buffer[position] != rune('L') {
						goto l905
					}
					position++
				}
			l907:
				{
					position909, tokenIndex909 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l910
					}
					position++
					goto l909
				l910:
					position, tokenIndex = position909, tokenIndex909
					if buffer[position] != rune('O') {
						goto l905
					}
					position++
				}
			l909:
				if buffer[position] != rune('1') {
					goto l905
				}
				position++
				if buffer[position] != rune('2') {
					goto l905
				}
				position++
				if buffer[position] != rune(':') {
					goto l905
				}
				position++
				{
					position911, tokenIndex911 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l912
					}
					goto l911
				l912:
					position, tokenIndex = position911, tokenIndex911
					if !_rules[ruleSymbolName]() {
						goto l905
					}
				}
			l911:
				{
					position913, tokenIndex913 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l913
					}
					goto l914
				l913:
					position, tokenIndex = position913, tokenIndex913
				}
			l914:
				add(ruleLow12BitsSymbolRef, position906)
			}
			return true
		l905:
			position, tokenIndex = position905, tokenIndex905
			return false
		},
		/* 55 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position915, tokenIndex915 := position, tokenIndex
			{
				position916 := position
				if buffer[position] != rune('[') {
					goto l915
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l915
				}
				{
					position917, tokenIndex917 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l917
					}
					position++
					{
						position919, tokenIndex919 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l919
						}
						goto l920
					l919:
						position, tokenIndex = position919, tokenIndex919
					}
				l920:
					{
						position921, tokenIndex921 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l922
						}
						position++
						if !_rules[ruleOffset]() {
							goto l922
						}
						{
							position923, tokenIndex923 := position, tokenIndex
							{
								position925, tokenIndex925 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l926
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l926
								}
								position++
							l927:
								{
									position928, tokenIndex928 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l928
									}
									position++
									goto l927
								l928:
									position, tokenIndex = position928, tokenIndex928
								}
								goto l925
							l926:
								position, tokenIndex = position925, tokenIndex925
								if buffer[position] != rune('*') {
									goto l929
								}
								position++
								if buffer[position] != rune('(') {
									goto l929
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l929
								}
								position++
							l930:
								{
									position931, tokenIndex931 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l931
									}
									position++
									goto l930
								l931:
									position, tokenIndex = position931, tokenIndex931
								}
								if !_rules[ruleOperator]() {
									goto l929
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l929
								}
								position++
							l932:
								{
									position933, tokenIndex933 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l933
									}
									position++
									goto l932
								l933:
									position, tokenIndex = position933, tokenIndex933
								}
								if buffer[position] != rune(')') {
									goto l929
								}
								position++
								goto l925
							l929:
								position, tokenIndex = position925, tokenIndex925
							l934:
								{
									position935, tokenIndex935 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l935
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l935
									}
									position++
								l936:
									{
										position937, tokenIndex937 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l937
										}
										position++
										goto l936
									l937:
										position, tokenIndex = position937, tokenIndex937
									}
									goto l934
								l935:
									position, tokenIndex = position935, tokenIndex935
								}
							}
						l925:
							goto l924

							position, tokenIndex = position923, tokenIndex923
						}
					l924:
						goto l921
					l922:
						position, tokenIndex = position921, tokenIndex921
						if !_rules[ruleARMGOTLow12]() {
							goto l938
						}
						goto l921
					l938:
						position, tokenIndex = position921, tokenIndex921
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l939
						}
						goto l921
					l939:
						position, tokenIndex = position921, tokenIndex921
						if !_rules[ruleARMRegister]() {
							goto l917
						}
					}
				l921:
					{
						position940, tokenIndex940 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l940
						}
						position++
						{
							position942, tokenIndex942 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l942
							}
							goto l943
						l942:
							position, tokenIndex = position942, tokenIndex942
						}
					l943:
						if !_rules[ruleARMConstantTweak]() {
							goto l940
						}
						goto l941
					l940:
						position, tokenIndex = position940, tokenIndex940
					}
				l941:
					goto l918
				l917:
					position, tokenIndex = position917, tokenIndex917
				}
			l918:
				if buffer[position] != rune(']') {
					goto l915
				}
				position++
				{
					position944, tokenIndex944 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l944
					}
					goto l945
				l944:
					position, tokenIndex = position944, tokenIndex944
				}
			l945:
				add(ruleARMBaseIndexScale, position916)
			}
			return true
		l915:
			position, tokenIndex = position915, tokenIndex915
			return false
		},
		/* 56 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position946, tokenIndex946 := position, tokenIndex
			{
				position947 := position
				if buffer[position] != rune(':') {
					goto l946
				}
				position++
				{
					position948, tokenIndex948 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l949
					}
					position++
					goto l948
				l949:
					position, tokenIndex = position948, tokenIndex948
					if buffer[position] != rune('G') {
						goto l946
					}
					position++
				}
			l948:
				{
					position950, tokenIndex950 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l951
					}
					position++
					goto l950
				l951:
					position, tokenIndex = position950, tokenIndex950
					if buffer[position] != rune('O') {
						goto l946
					}
					position++
				}
			l950:
				{
					position952, tokenIndex952 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l953
					}
					position++
					goto l952
				l953:
					position, tokenIndex = position952, tokenIndex952
					if buffer[position] != rune('T') {
						goto l946
					}
					position++
				}
			l952:
				if buffer[position] != rune('_') {
					goto l946
				}
				position++
				{
					position954, tokenIndex954 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l955
					}
					position++
					goto l954
				l955:
					position, tokenIndex = position954, tokenIndex954
					if buffer[position] != rune('L') {
						goto l946
					}
					position++
				}
			l954:
				{
					position956, tokenIndex956 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l957
					}
					position++
					goto l956
				l957:
					position, tokenIndex = position956, tokenIndex956
					if buffer[position] != rune('O') {
						goto l946
					}
					position++
				}
			l956:
				if buffer[position] != rune('1') {
					goto l946
				}
				position++
				if buffer[position] != rune('2') {
					goto l946
				}
				position++
				if buffer[position] != rune(':') {
					goto l946
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l946
				}
				add(ruleARMGOTLow12, position947)
			}
			return true
		l946:
			position, tokenIndex = position946, tokenIndex946
			return false
		},
		/* 57 ARMPostincrement <- <'!'> */
		func() bool {
			position958, tokenIndex958 := position, tokenIndex
			{
				position959 := position
				if buffer[position] != rune('!') {
					goto l958
				}
				position++
				add(ruleARMPostincrement, position959)
			}
			return true
		l958:
			position, tokenIndex = position958, tokenIndex958
			return false
		},
		/* 58 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position960, tokenIndex960 := position, tokenIndex
			{
				position961 := position
				if buffer[position] != rune('(') {
					goto l960
				}
				position++
				{
					position962, tokenIndex962 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l962
					}
					goto l963
				l962:
					position, tokenIndex = position962, tokenIndex962
				}
			l963:
				{
					position964, tokenIndex964 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l964
					}
					goto l965
				l964:
					position, tokenIndex = position964, tokenIndex964
				}
			l965:
				{
					position966, tokenIndex966 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l966
					}
					position++
					{
						position968, tokenIndex968 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l968
						}
						goto l969
					l968:
						position, tokenIndex = position968, tokenIndex968
					}
				l969:
					if !_rules[ruleRegisterOrConstant]() {
						goto l966
					}
					{
						position970, tokenIndex970 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l970
						}
						goto l971
					l970:
						position, tokenIndex = position970, tokenIndex970
					}
				l971:
					{
						position972, tokenIndex972 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l972
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l972
						}
						position++
					l974:
						{
							position975, tokenIndex975 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l975
							}
							position++
							goto l974
						l975:
							position, tokenIndex = position975, tokenIndex975
						}
						goto l973
					l972:
						position, tokenIndex = position972, tokenIndex972
					}
				l973:
					goto l967
				l966:
					position, tokenIndex = position966, tokenIndex966
				}
			l967:
				if buffer[position] != rune(')') {
					goto l960
				}
				position++
				add(ruleBaseIndexScale, position961)
			}
			return true
		l960:
			position, tokenIndex = position960, tokenIndex960
			return false
		},
		/* 59 Operator <- <('+' / '-')> */
		func() bool {
			position976, tokenIndex976 := position, tokenIndex
			{
				position977 := position
				{
					position978, tokenIndex978 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l979
					}
					position++
					goto l978
				l979:
					position, tokenIndex = position978, tokenIndex978
					if buffer[position] != rune('-') {
						goto l976
					}
					position++
				}
			l978:
				add(ruleOperator, position977)
			}
			return true
		l976:
			position, tokenIndex = position976, tokenIndex976
			return false
		},
		/* 60 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position980, tokenIndex980 := position, tokenIndex
			{
				position981 := position
				{
					position982, tokenIndex982 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l982
					}
					position++
					goto l983
				l982:
					position, tokenIndex = position982, tokenIndex982
				}
			l983:
				{
					position984, tokenIndex984 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l984
					}
					position++
					goto l985
				l984:
					position, tokenIndex = position984, tokenIndex984
				}
			l985:
				{
					position986, tokenIndex986 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l987
					}
					position++
					{
						position988, tokenIndex988 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l989
						}
						position++
						goto l988
					l989:
						position, tokenIndex = position988, tokenIndex988
						if buffer[position] != rune('B') {
							goto l987
						}
						position++
					}
				l988:
					{
						position992, tokenIndex992 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l993
						}
						position++
						goto l992
					l993:
						position, tokenIndex = position992, tokenIndex992
						if buffer[position] != rune('1') {
							goto l987
						}
						position++
					}
				l992:
				l990:
					{
						position991, tokenIndex991 := position, tokenIndex
						{
							position994, tokenIndex994 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l995
							}
							position++
							goto l994
						l995:
							position, tokenIndex = position994, tokenIndex994
							if buffer[position] != rune('1') {
								goto l991
							}
							position++
						}
					l994:
						goto l990
					l991:
						position, tokenIndex = position991, tokenIndex991
					}
					goto l986
				l987:
					position, tokenIndex = position986, tokenIndex986
					if buffer[position] != rune('0') {
						goto l996
					}
					position++
					{
						position997, tokenIndex997 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l998
						}
						position++
						goto l997
					l998:
						position, tokenIndex = position997, tokenIndex997
						if buffer[position] != rune('X') {
							goto l996
						}
						position++
					}
				l997:
					{
						position1001, tokenIndex1001 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1002
						}
						position++
						goto l1001
					l1002:
						position, tokenIndex = position1001, tokenIndex1001
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1003
						}
						position++
						goto l1001
					l1003:
						position, tokenIndex = position1001, tokenIndex1001
						{
							position1004, tokenIndex1004 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l1005
							}
							position++
							goto l1004
						l1005:
							position, tokenIndex = position1004, tokenIndex1004
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l996
							}
							position++
						}
					l1004:
					}
				l1001:
				l999:
					{
						position1000, tokenIndex1000 := position, tokenIndex
						{
							position1006, tokenIndex1006 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1007
							}
							position++
							goto l1006
						l1007:
							position, tokenIndex = position1006, tokenIndex1006
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l1008
							}
							position++
							goto l1006
						l1008:
							position, tokenIndex = position1006, tokenIndex1006
							{
								position1009, tokenIndex1009 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l1010
								}
								position++
								goto l1009
							l1010:
								position, tokenIndex = position1009, tokenIndex1009
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l1000
								}
								position++
							}
						l1009:
						}
					l1006:
						goto l999
					l1000:
						position, tokenIndex = position1000, tokenIndex1000
					}
					goto l986
				l996:
					position, tokenIndex = position986, tokenIndex986
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l980
					}
					position++
				l1011:
					{
						position1012, tokenIndex1012 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l1012
						}
						position++
						goto l1011
					l1012:
						position, tokenIndex = position1012, tokenIndex1012
					}
				}
			l986:
				add(ruleOffset, position981)
			}
			return true
		l980:
			position, tokenIndex = position980, tokenIndex980
			return false
		},
		/* 61 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position1013, tokenIndex1013 := position, tokenIndex
			{
				position1014 := position
				{
					position1017, tokenIndex1017 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l1018
					}
					position++
					goto l1017
				l1018:
					position, tokenIndex = position1017, tokenIndex1017
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l1019
					}
					position++
					goto l1017
				l1019:
					position, tokenIndex = position1017, tokenIndex1017
					if buffer[position] != rune('@') {
						goto l1013
					}
					position++
				}
			l1017:
			l1015:
				{
					position1016, tokenIndex1016 := position, tokenIndex
					{
						position1020, tokenIndex1020 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l1021
						}
						position++
						goto l1020
					l1021:
						position, tokenIndex = position1020, tokenIndex1020
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l1022
						}
						position++
						goto l1020
					l1022:
						position, tokenIndex = position1020, tokenIndex1020
						if buffer[position] != rune('@') {
							goto l1016
						}
						position++
					}
				l1020:
					goto l1015
				l1016:
					position, tokenIndex = position1016, tokenIndex1016
				}
				add(ruleSection, position1014)
			}
			return true
		l1013:
			position, tokenIndex = position1013, tokenIndex1013
			return false
		},
		/* 62 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position1023, tokenIndex1023 := position, tokenIndex
			{
				position1024 := position
				if buffer[position] != rune('%') {
					goto l1023
				}
				position++
				{
					position1025, tokenIndex1025 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l1026
					}
					position++
					goto l1025
				l1026:
					position, tokenIndex = position1025, tokenIndex1025
					if buffer[position] != rune('s') {
						goto l1023
					}
					position++
				}
			l1025:
				if buffer[position] != rune('s') {
					goto l1023
				}
				position++
				if buffer[position] != rune(':') {
					goto l1023
				}
				position++
				add(ruleSegmentRegister, position1024)
			}
			return true
		l1023:
			position, tokenIndex = position1023, tokenIndex1023
			return false
		},
	}
	p.rules = _rules
	return nil
}
