package main

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

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

const endSymbol rune = 1114112

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

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

var rul3s = [...]string{
	"Unknown",
	"AsmFile",
	"Statement",
	"GlobalDirective",
	"Directive",
	"DirectiveName",
	"LocationDirective",
	"FileDirective",
	"LocDirective",
	"Args",
	"Arg",
	"QuotedArg",
	"QuotedText",
	"LabelContainingDirective",
	"LabelContainingDirectiveName",
	"SymbolArgs",
	"SymbolArg",
	"SymbolExpr",
	"SymbolAtom",
	"SymbolOperator",
	"OpenParen",
	"CloseParen",
	"SymbolType",
	"Dot",
	"TCMarker",
	"EscapedChar",
	"WS",
	"Comment",
	"Label",
	"SymbolName",
	"LocalSymbol",
	"LocalLabel",
	"LocalLabelRef",
	"Instruction",
	"InstructionName",
	"InstructionArg",
	"GOTLocation",
	"GOTSymbolOffset",
	"AVX512Token",
	"TOCRefHigh",
	"TOCRefLow",
	"IndirectionIndicator",
	"RegisterOrConstant",
	"ARMConstantTweak",
	"ARMRegister",
	"ARMVectorRegister",
	"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  [57]func() bool
	parse  func(rule ...int) error
	reset  func()
	Pretty bool
	tokens32
}

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

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

type textPosition struct {
	line, symbol int
}

type textPositionMap map[int]textPosition

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

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

	return translations
}

type parseError struct {
	p   *Asm
	max token32
}

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

	return err
}

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

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

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

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

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

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

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

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

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

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

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

	_rules = [...]func() bool{
		nil,
		/* 0 AsmFile <- <(Statement* !.)> */
		func() bool {
			position0, tokenIndex0 := position, tokenIndex
			{
				position1 := position
			l2:
				{
					position3, tokenIndex3 := position, tokenIndex
					if !_rules[ruleStatement]() {
						goto l3
					}
					goto l2
				l3:
					position, tokenIndex = position3, tokenIndex3
				}
				{
					position4, tokenIndex4 := position, tokenIndex
					if !matchDot() {
						goto l4
					}
					goto l0
				l4:
					position, tokenIndex = position4, tokenIndex4
				}
				add(ruleAsmFile, position1)
			}
			return true
		l0:
			position, tokenIndex = position0, tokenIndex0
			return false
		},
		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
		func() bool {
			position5, tokenIndex5 := position, tokenIndex
			{
				position6 := position
				{
					position7, tokenIndex7 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l7
					}
					goto l8
				l7:
					position, tokenIndex = position7, tokenIndex7
				}
			l8:
				{
					position9, tokenIndex9 := position, tokenIndex
					if !_rules[ruleLabel]() {
						goto l10
					}
					goto l9
				l10:
					position, tokenIndex = position9, tokenIndex9
					{
						position11, tokenIndex11 := position, tokenIndex
						if !_rules[ruleGlobalDirective]() {
							goto l12
						}
						goto l11
					l12:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLocationDirective]() {
							goto l13
						}
						goto l11
					l13:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleLabelContainingDirective]() {
							goto l14
						}
						goto l11
					l14:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleInstruction]() {
							goto l15
						}
						goto l11
					l15:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleDirective]() {
							goto l16
						}
						goto l11
					l16:
						position, tokenIndex = position11, tokenIndex11
						if !_rules[ruleComment]() {
							goto l17
						}
						goto l11
					l17:
						position, tokenIndex = position11, tokenIndex11
					}
				l11:
					{
						position18, tokenIndex18 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l18
						}
						goto l19
					l18:
						position, tokenIndex = position18, tokenIndex18
					}
				l19:
					{
						position20, tokenIndex20 := position, tokenIndex
						{
							position22, tokenIndex22 := position, tokenIndex
							if !_rules[ruleComment]() {
								goto l22
							}
							goto l23
						l22:
							position, tokenIndex = position22, tokenIndex22
						}
					l23:
						if buffer[position] != rune('\n') {
							goto l21
						}
						position++
						goto l20
					l21:
						position, tokenIndex = position20, tokenIndex20
						if buffer[position] != rune(';') {
							goto l5
						}
						position++
					}
				l20:
				}
			l9:
				add(ruleStatement, position6)
			}
			return true
		l5:
			position, tokenIndex = position5, tokenIndex5
			return false
		},
		/* 2 GlobalDirective <- <((('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('a' / 'A') ('l' / 'L')) / ('.' ('g' / 'G') ('l' / 'L') ('o' / 'O') ('b' / 'B') ('l' / 'L'))) WS SymbolName)> */
		func() bool {
			position24, tokenIndex24 := position, tokenIndex
			{
				position25 := position
				{
					position26, tokenIndex26 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l27
					}
					position++
					{
						position28, tokenIndex28 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l29
						}
						position++
						goto l28
					l29:
						position, tokenIndex = position28, tokenIndex28
						if buffer[position] != rune('G') {
							goto l27
						}
						position++
					}
				l28:
					{
						position30, tokenIndex30 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l31
						}
						position++
						goto l30
					l31:
						position, tokenIndex = position30, tokenIndex30
						if buffer[position] != rune('L') {
							goto l27
						}
						position++
					}
				l30:
					{
						position32, tokenIndex32 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l33
						}
						position++
						goto l32
					l33:
						position, tokenIndex = position32, tokenIndex32
						if buffer[position] != rune('O') {
							goto l27
						}
						position++
					}
				l32:
					{
						position34, tokenIndex34 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l35
						}
						position++
						goto l34
					l35:
						position, tokenIndex = position34, tokenIndex34
						if buffer[position] != rune('B') {
							goto l27
						}
						position++
					}
				l34:
					{
						position36, tokenIndex36 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l37
						}
						position++
						goto l36
					l37:
						position, tokenIndex = position36, tokenIndex36
						if buffer[position] != rune('A') {
							goto l27
						}
						position++
					}
				l36:
					{
						position38, tokenIndex38 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l39
						}
						position++
						goto l38
					l39:
						position, tokenIndex = position38, tokenIndex38
						if buffer[position] != rune('L') {
							goto l27
						}
						position++
					}
				l38:
					goto l26
				l27:
					position, tokenIndex = position26, tokenIndex26
					if buffer[position] != rune('.') {
						goto l24
					}
					position++
					{
						position40, tokenIndex40 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l41
						}
						position++
						goto l40
					l41:
						position, tokenIndex = position40, tokenIndex40
						if buffer[position] != rune('G') {
							goto l24
						}
						position++
					}
				l40:
					{
						position42, tokenIndex42 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l43
						}
						position++
						goto l42
					l43:
						position, tokenIndex = position42, tokenIndex42
						if buffer[position] != rune('L') {
							goto l24
						}
						position++
					}
				l42:
					{
						position44, tokenIndex44 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l45
						}
						position++
						goto l44
					l45:
						position, tokenIndex = position44, tokenIndex44
						if buffer[position] != rune('O') {
							goto l24
						}
						position++
					}
				l44:
					{
						position46, tokenIndex46 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l47
						}
						position++
						goto l46
					l47:
						position, tokenIndex = position46, tokenIndex46
						if buffer[position] != rune('B') {
							goto l24
						}
						position++
					}
				l46:
					{
						position48, tokenIndex48 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l49
						}
						position++
						goto l48
					l49:
						position, tokenIndex = position48, tokenIndex48
						if buffer[position] != rune('L') {
							goto l24
						}
						position++
					}
				l48:
				}
			l26:
				if !_rules[ruleWS]() {
					goto l24
				}
				if !_rules[ruleSymbolName]() {
					goto l24
				}
				add(ruleGlobalDirective, position25)
			}
			return true
		l24:
			position, tokenIndex = position24, tokenIndex24
			return false
		},
		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
		func() bool {
			position50, tokenIndex50 := position, tokenIndex
			{
				position51 := position
				if buffer[position] != rune('.') {
					goto l50
				}
				position++
				if !_rules[ruleDirectiveName]() {
					goto l50
				}
				{
					position52, tokenIndex52 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l52
					}
					if !_rules[ruleArgs]() {
						goto l52
					}
					goto l53
				l52:
					position, tokenIndex = position52, tokenIndex52
				}
			l53:
				add(ruleDirective, position51)
			}
			return true
		l50:
			position, tokenIndex = position50, tokenIndex50
			return false
		},
		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
		func() bool {
			position54, tokenIndex54 := position, tokenIndex
			{
				position55 := position
				{
					position58, tokenIndex58 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l59
					}
					position++
					goto l58
				l59:
					position, tokenIndex = position58, tokenIndex58
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l60
					}
					position++
					goto l58
				l60:
					position, tokenIndex = position58, tokenIndex58
					{
						position62, tokenIndex62 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l63
						}
						position++
						goto l62
					l63:
						position, tokenIndex = position62, tokenIndex62
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l61
						}
						position++
					}
				l62:
					goto l58
				l61:
					position, tokenIndex = position58, tokenIndex58
					if buffer[position] != rune('_') {
						goto l54
					}
					position++
				}
			l58:
			l56:
				{
					position57, tokenIndex57 := position, tokenIndex
					{
						position64, tokenIndex64 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l65
						}
						position++
						goto l64
					l65:
						position, tokenIndex = position64, tokenIndex64
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l66
						}
						position++
						goto l64
					l66:
						position, tokenIndex = position64, tokenIndex64
						{
							position68, tokenIndex68 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l69
							}
							position++
							goto l68
						l69:
							position, tokenIndex = position68, tokenIndex68
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l67
							}
							position++
						}
					l68:
						goto l64
					l67:
						position, tokenIndex = position64, tokenIndex64
						if buffer[position] != rune('_') {
							goto l57
						}
						position++
					}
				l64:
					goto l56
				l57:
					position, tokenIndex = position57, tokenIndex57
				}
				add(ruleDirectiveName, position55)
			}
			return true
		l54:
			position, tokenIndex = position54, tokenIndex54
			return false
		},
		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
		func() bool {
			position70, tokenIndex70 := position, tokenIndex
			{
				position71 := position
				{
					position72, tokenIndex72 := position, tokenIndex
					if !_rules[ruleFileDirective]() {
						goto l73
					}
					goto l72
				l73:
					position, tokenIndex = position72, tokenIndex72
					if !_rules[ruleLocDirective]() {
						goto l70
					}
				}
			l72:
				add(ruleLocationDirective, position71)
			}
			return true
		l70:
			position, tokenIndex = position70, tokenIndex70
			return false
		},
		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
		func() bool {
			position74, tokenIndex74 := position, tokenIndex
			{
				position75 := position
				if buffer[position] != rune('.') {
					goto l74
				}
				position++
				{
					position76, tokenIndex76 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l77
					}
					position++
					goto l76
				l77:
					position, tokenIndex = position76, tokenIndex76
					if buffer[position] != rune('F') {
						goto l74
					}
					position++
				}
			l76:
				{
					position78, tokenIndex78 := position, tokenIndex
					if buffer[position] != rune('i') {
						goto l79
					}
					position++
					goto l78
				l79:
					position, tokenIndex = position78, tokenIndex78
					if buffer[position] != rune('I') {
						goto l74
					}
					position++
				}
			l78:
				{
					position80, tokenIndex80 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l81
					}
					position++
					goto l80
				l81:
					position, tokenIndex = position80, tokenIndex80
					if buffer[position] != rune('L') {
						goto l74
					}
					position++
				}
			l80:
				{
					position82, tokenIndex82 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l83
					}
					position++
					goto l82
				l83:
					position, tokenIndex = position82, tokenIndex82
					if buffer[position] != rune('E') {
						goto l74
					}
					position++
				}
			l82:
				if !_rules[ruleWS]() {
					goto l74
				}
				{
					position86, tokenIndex86 := position, tokenIndex
					{
						position87, tokenIndex87 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l88
						}
						position++
						goto l87
					l88:
						position, tokenIndex = position87, tokenIndex87
						if buffer[position] != rune('\n') {
							goto l86
						}
						position++
					}
				l87:
					goto l74
				l86:
					position, tokenIndex = position86, tokenIndex86
				}
				if !matchDot() {
					goto l74
				}
			l84:
				{
					position85, tokenIndex85 := position, tokenIndex
					{
						position89, tokenIndex89 := position, tokenIndex
						{
							position90, tokenIndex90 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l91
							}
							position++
							goto l90
						l91:
							position, tokenIndex = position90, tokenIndex90
							if buffer[position] != rune('\n') {
								goto l89
							}
							position++
						}
					l90:
						goto l85
					l89:
						position, tokenIndex = position89, tokenIndex89
					}
					if !matchDot() {
						goto l85
					}
					goto l84
				l85:
					position, tokenIndex = position85, tokenIndex85
				}
				add(ruleFileDirective, position75)
			}
			return true
		l74:
			position, tokenIndex = position74, tokenIndex74
			return false
		},
		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
		func() bool {
			position92, tokenIndex92 := position, tokenIndex
			{
				position93 := position
				if buffer[position] != rune('.') {
					goto l92
				}
				position++
				{
					position94, tokenIndex94 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l95
					}
					position++
					goto l94
				l95:
					position, tokenIndex = position94, tokenIndex94
					if buffer[position] != rune('L') {
						goto l92
					}
					position++
				}
			l94:
				{
					position96, tokenIndex96 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l97
					}
					position++
					goto l96
				l97:
					position, tokenIndex = position96, tokenIndex96
					if buffer[position] != rune('O') {
						goto l92
					}
					position++
				}
			l96:
				{
					position98, tokenIndex98 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l99
					}
					position++
					goto l98
				l99:
					position, tokenIndex = position98, tokenIndex98
					if buffer[position] != rune('C') {
						goto l92
					}
					position++
				}
			l98:
				if !_rules[ruleWS]() {
					goto l92
				}
				{
					position102, tokenIndex102 := position, tokenIndex
					{
						position103, tokenIndex103 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l104
						}
						position++
						goto l103
					l104:
						position, tokenIndex = position103, tokenIndex103
						if buffer[position] != rune('/') {
							goto l105
						}
						position++
						goto l103
					l105:
						position, tokenIndex = position103, tokenIndex103
						if buffer[position] != rune('\n') {
							goto l102
						}
						position++
					}
				l103:
					goto l92
				l102:
					position, tokenIndex = position102, tokenIndex102
				}
				if !matchDot() {
					goto l92
				}
			l100:
				{
					position101, tokenIndex101 := position, tokenIndex
					{
						position106, tokenIndex106 := position, tokenIndex
						{
							position107, tokenIndex107 := position, tokenIndex
							if buffer[position] != rune('#') {
								goto l108
							}
							position++
							goto l107
						l108:
							position, tokenIndex = position107, tokenIndex107
							if buffer[position] != rune('/') {
								goto l109
							}
							position++
							goto l107
						l109:
							position, tokenIndex = position107, tokenIndex107
							if buffer[position] != rune('\n') {
								goto l106
							}
							position++
						}
					l107:
						goto l101
					l106:
						position, tokenIndex = position106, tokenIndex106
					}
					if !matchDot() {
						goto l101
					}
					goto l100
				l101:
					position, tokenIndex = position101, tokenIndex101
				}
				add(ruleLocDirective, position93)
			}
			return true
		l92:
			position, tokenIndex = position92, tokenIndex92
			return false
		},
		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
		func() bool {
			position110, tokenIndex110 := position, tokenIndex
			{
				position111 := position
				if !_rules[ruleArg]() {
					goto l110
				}
			l112:
				{
					position113, tokenIndex113 := position, tokenIndex
					{
						position114, tokenIndex114 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l114
						}
						goto l115
					l114:
						position, tokenIndex = position114, tokenIndex114
					}
				l115:
					if buffer[position] != rune(',') {
						goto l113
					}
					position++
					{
						position116, tokenIndex116 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l116
						}
						goto l117
					l116:
						position, tokenIndex = position116, tokenIndex116
					}
				l117:
					if !_rules[ruleArg]() {
						goto l113
					}
					goto l112
				l113:
					position, tokenIndex = position113, tokenIndex113
				}
				add(ruleArgs, position111)
			}
			return true
		l110:
			position, tokenIndex = position110, tokenIndex110
			return false
		},
		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
		func() bool {
			{
				position119 := position
				{
					position120, tokenIndex120 := position, tokenIndex
					if !_rules[ruleQuotedArg]() {
						goto l121
					}
					goto l120
				l121:
					position, tokenIndex = position120, tokenIndex120
				l122:
					{
						position123, tokenIndex123 := position, tokenIndex
						{
							position124, tokenIndex124 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l125
							}
							position++
							goto l124
						l125:
							position, tokenIndex = position124, tokenIndex124
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l126
							}
							position++
							goto l124
						l126:
							position, tokenIndex = position124, tokenIndex124
							{
								position128, tokenIndex128 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('z') {
									goto l129
								}
								position++
								goto l128
							l129:
								position, tokenIndex = position128, tokenIndex128
								if c := buffer[position]; c < rune('A') || c > rune('Z') {
									goto l127
								}
								position++
							}
						l128:
							goto l124
						l127:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('%') {
								goto l130
							}
							position++
							goto l124
						l130:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('+') {
								goto l131
							}
							position++
							goto l124
						l131:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('-') {
								goto l132
							}
							position++
							goto l124
						l132:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('*') {
								goto l133
							}
							position++
							goto l124
						l133:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('_') {
								goto l134
							}
							position++
							goto l124
						l134:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('@') {
								goto l135
							}
							position++
							goto l124
						l135:
							position, tokenIndex = position124, tokenIndex124
							if buffer[position] != rune('.') {
								goto l123
							}
							position++
						}
					l124:
						goto l122
					l123:
						position, tokenIndex = position123, tokenIndex123
					}
				}
			l120:
				add(ruleArg, position119)
			}
			return true
		},
		/* 10 QuotedArg <- <('"' QuotedText '"')> */
		func() bool {
			position136, tokenIndex136 := position, tokenIndex
			{
				position137 := position
				if buffer[position] != rune('"') {
					goto l136
				}
				position++
				if !_rules[ruleQuotedText]() {
					goto l136
				}
				if buffer[position] != rune('"') {
					goto l136
				}
				position++
				add(ruleQuotedArg, position137)
			}
			return true
		l136:
			position, tokenIndex = position136, tokenIndex136
			return false
		},
		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
		func() bool {
			{
				position139 := position
			l140:
				{
					position141, tokenIndex141 := position, tokenIndex
					{
						position142, tokenIndex142 := position, tokenIndex
						if !_rules[ruleEscapedChar]() {
							goto l143
						}
						goto l142
					l143:
						position, tokenIndex = position142, tokenIndex142
						{
							position144, tokenIndex144 := position, tokenIndex
							if buffer[position] != rune('"') {
								goto l144
							}
							position++
							goto l141
						l144:
							position, tokenIndex = position144, tokenIndex144
						}
						if !matchDot() {
							goto l141
						}
					}
				l142:
					goto l140
				l141:
					position, tokenIndex = position141, tokenIndex141
				}
				add(ruleQuotedText, position139)
			}
			return true
		},
		/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
		func() bool {
			position145, tokenIndex145 := position, tokenIndex
			{
				position146 := position
				if !_rules[ruleLabelContainingDirectiveName]() {
					goto l145
				}
				if !_rules[ruleWS]() {
					goto l145
				}
				if !_rules[ruleSymbolArgs]() {
					goto l145
				}
				add(ruleLabelContainingDirective, position146)
			}
			return true
		l145:
			position, tokenIndex = position145, tokenIndex145
			return false
		},
		/* 13 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('h' / 'H') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
		func() bool {
			position147, tokenIndex147 := position, tokenIndex
			{
				position148 := position
				{
					position149, tokenIndex149 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l150
					}
					position++
					{
						position151, tokenIndex151 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l152
						}
						position++
						goto l151
					l152:
						position, tokenIndex = position151, tokenIndex151
						if buffer[position] != rune('X') {
							goto l150
						}
						position++
					}
				l151:
					{
						position153, tokenIndex153 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l154
						}
						position++
						goto l153
					l154:
						position, tokenIndex = position153, tokenIndex153
						if buffer[position] != rune('W') {
							goto l150
						}
						position++
					}
				l153:
					{
						position155, tokenIndex155 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l156
						}
						position++
						goto l155
					l156:
						position, tokenIndex = position155, tokenIndex155
						if buffer[position] != rune('O') {
							goto l150
						}
						position++
					}
				l155:
					{
						position157, tokenIndex157 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l158
						}
						position++
						goto l157
					l158:
						position, tokenIndex = position157, tokenIndex157
						if buffer[position] != rune('R') {
							goto l150
						}
						position++
					}
				l157:
					{
						position159, tokenIndex159 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l160
						}
						position++
						goto l159
					l160:
						position, tokenIndex = position159, tokenIndex159
						if buffer[position] != rune('D') {
							goto l150
						}
						position++
					}
				l159:
					goto l149
				l150:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l161
					}
					position++
					{
						position162, tokenIndex162 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l163
						}
						position++
						goto l162
					l163:
						position, tokenIndex = position162, tokenIndex162
						if buffer[position] != rune('W') {
							goto l161
						}
						position++
					}
				l162:
					{
						position164, tokenIndex164 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l165
						}
						position++
						goto l164
					l165:
						position, tokenIndex = position164, tokenIndex164
						if buffer[position] != rune('O') {
							goto l161
						}
						position++
					}
				l164:
					{
						position166, tokenIndex166 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l167
						}
						position++
						goto l166
					l167:
						position, tokenIndex = position166, tokenIndex166
						if buffer[position] != rune('R') {
							goto l161
						}
						position++
					}
				l166:
					{
						position168, tokenIndex168 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l169
						}
						position++
						goto l168
					l169:
						position, tokenIndex = position168, tokenIndex168
						if buffer[position] != rune('D') {
							goto l161
						}
						position++
					}
				l168:
					goto l149
				l161:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l170
					}
					position++
					{
						position171, tokenIndex171 := position, tokenIndex
						if buffer[position] != rune('h') {
							goto l172
						}
						position++
						goto l171
					l172:
						position, tokenIndex = position171, tokenIndex171
						if buffer[position] != rune('H') {
							goto l170
						}
						position++
					}
				l171:
					{
						position173, tokenIndex173 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l174
						}
						position++
						goto l173
					l174:
						position, tokenIndex = position173, tokenIndex173
						if buffer[position] != rune('W') {
							goto l170
						}
						position++
					}
				l173:
					{
						position175, tokenIndex175 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l176
						}
						position++
						goto l175
					l176:
						position, tokenIndex = position175, tokenIndex175
						if buffer[position] != rune('O') {
							goto l170
						}
						position++
					}
				l175:
					{
						position177, tokenIndex177 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l178
						}
						position++
						goto l177
					l178:
						position, tokenIndex = position177, tokenIndex177
						if buffer[position] != rune('R') {
							goto l170
						}
						position++
					}
				l177:
					{
						position179, tokenIndex179 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l180
						}
						position++
						goto l179
					l180:
						position, tokenIndex = position179, tokenIndex179
						if buffer[position] != rune('D') {
							goto l170
						}
						position++
					}
				l179:
					goto l149
				l170:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l181
					}
					position++
					{
						position182, tokenIndex182 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l183
						}
						position++
						goto l182
					l183:
						position, tokenIndex = position182, tokenIndex182
						if buffer[position] != rune('L') {
							goto l181
						}
						position++
					}
				l182:
					{
						position184, tokenIndex184 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l185
						}
						position++
						goto l184
					l185:
						position, tokenIndex = position184, tokenIndex184
						if buffer[position] != rune('O') {
							goto l181
						}
						position++
					}
				l184:
					{
						position186, tokenIndex186 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l187
						}
						position++
						goto l186
					l187:
						position, tokenIndex = position186, tokenIndex186
						if buffer[position] != rune('N') {
							goto l181
						}
						position++
					}
				l186:
					{
						position188, tokenIndex188 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l189
						}
						position++
						goto l188
					l189:
						position, tokenIndex = position188, tokenIndex188
						if buffer[position] != rune('G') {
							goto l181
						}
						position++
					}
				l188:
					goto l149
				l181:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l190
					}
					position++
					{
						position191, tokenIndex191 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l192
						}
						position++
						goto l191
					l192:
						position, tokenIndex = position191, tokenIndex191
						if buffer[position] != rune('S') {
							goto l190
						}
						position++
					}
				l191:
					{
						position193, tokenIndex193 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l194
						}
						position++
						goto l193
					l194:
						position, tokenIndex = position193, tokenIndex193
						if buffer[position] != rune('E') {
							goto l190
						}
						position++
					}
				l193:
					{
						position195, tokenIndex195 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l196
						}
						position++
						goto l195
					l196:
						position, tokenIndex = position195, tokenIndex195
						if buffer[position] != rune('T') {
							goto l190
						}
						position++
					}
				l195:
					goto l149
				l190:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l197
					}
					position++
					{
						position198, tokenIndex198 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l199
						}
						position++
						goto l198
					l199:
						position, tokenIndex = position198, tokenIndex198
						if buffer[position] != rune('B') {
							goto l197
						}
						position++
					}
				l198:
					{
						position200, tokenIndex200 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l201
						}
						position++
						goto l200
					l201:
						position, tokenIndex = position200, tokenIndex200
						if buffer[position] != rune('Y') {
							goto l197
						}
						position++
					}
				l200:
					{
						position202, tokenIndex202 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l203
						}
						position++
						goto l202
					l203:
						position, tokenIndex = position202, tokenIndex202
						if buffer[position] != rune('T') {
							goto l197
						}
						position++
					}
				l202:
					{
						position204, tokenIndex204 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l205
						}
						position++
						goto l204
					l205:
						position, tokenIndex = position204, tokenIndex204
						if buffer[position] != rune('E') {
							goto l197
						}
						position++
					}
				l204:
					goto l149
				l197:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l206
					}
					position++
					if buffer[position] != rune('8') {
						goto l206
					}
					position++
					{
						position207, tokenIndex207 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l208
						}
						position++
						goto l207
					l208:
						position, tokenIndex = position207, tokenIndex207
						if buffer[position] != rune('B') {
							goto l206
						}
						position++
					}
				l207:
					{
						position209, tokenIndex209 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l210
						}
						position++
						goto l209
					l210:
						position, tokenIndex = position209, tokenIndex209
						if buffer[position] != rune('Y') {
							goto l206
						}
						position++
					}
				l209:
					{
						position211, tokenIndex211 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l212
						}
						position++
						goto l211
					l212:
						position, tokenIndex = position211, tokenIndex211
						if buffer[position] != rune('T') {
							goto l206
						}
						position++
					}
				l211:
					{
						position213, tokenIndex213 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l214
						}
						position++
						goto l213
					l214:
						position, tokenIndex = position213, tokenIndex213
						if buffer[position] != rune('E') {
							goto l206
						}
						position++
					}
				l213:
					goto l149
				l206:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l215
					}
					position++
					if buffer[position] != rune('4') {
						goto l215
					}
					position++
					{
						position216, tokenIndex216 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l217
						}
						position++
						goto l216
					l217:
						position, tokenIndex = position216, tokenIndex216
						if buffer[position] != rune('B') {
							goto l215
						}
						position++
					}
				l216:
					{
						position218, tokenIndex218 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l219
						}
						position++
						goto l218
					l219:
						position, tokenIndex = position218, tokenIndex218
						if buffer[position] != rune('Y') {
							goto l215
						}
						position++
					}
				l218:
					{
						position220, tokenIndex220 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l221
						}
						position++
						goto l220
					l221:
						position, tokenIndex = position220, tokenIndex220
						if buffer[position] != rune('T') {
							goto l215
						}
						position++
					}
				l220:
					{
						position222, tokenIndex222 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l223
						}
						position++
						goto l222
					l223:
						position, tokenIndex = position222, tokenIndex222
						if buffer[position] != rune('E') {
							goto l215
						}
						position++
					}
				l222:
					goto l149
				l215:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l224
					}
					position++
					{
						position225, tokenIndex225 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l226
						}
						position++
						goto l225
					l226:
						position, tokenIndex = position225, tokenIndex225
						if buffer[position] != rune('Q') {
							goto l224
						}
						position++
					}
				l225:
					{
						position227, tokenIndex227 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l228
						}
						position++
						goto l227
					l228:
						position, tokenIndex = position227, tokenIndex227
						if buffer[position] != rune('U') {
							goto l224
						}
						position++
					}
				l227:
					{
						position229, tokenIndex229 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l230
						}
						position++
						goto l229
					l230:
						position, tokenIndex = position229, tokenIndex229
						if buffer[position] != rune('A') {
							goto l224
						}
						position++
					}
				l229:
					{
						position231, tokenIndex231 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l232
						}
						position++
						goto l231
					l232:
						position, tokenIndex = position231, tokenIndex231
						if buffer[position] != rune('D') {
							goto l224
						}
						position++
					}
				l231:
					goto l149
				l224:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l233
					}
					position++
					{
						position234, tokenIndex234 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l235
						}
						position++
						goto l234
					l235:
						position, tokenIndex = position234, tokenIndex234
						if buffer[position] != rune('T') {
							goto l233
						}
						position++
					}
				l234:
					{
						position236, tokenIndex236 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l237
						}
						position++
						goto l236
					l237:
						position, tokenIndex = position236, tokenIndex236
						if buffer[position] != rune('C') {
							goto l233
						}
						position++
					}
				l236:
					goto l149
				l233:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l238
					}
					position++
					{
						position239, tokenIndex239 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l240
						}
						position++
						goto l239
					l240:
						position, tokenIndex = position239, tokenIndex239
						if buffer[position] != rune('L') {
							goto l238
						}
						position++
					}
				l239:
					{
						position241, tokenIndex241 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l242
						}
						position++
						goto l241
					l242:
						position, tokenIndex = position241, tokenIndex241
						if buffer[position] != rune('O') {
							goto l238
						}
						position++
					}
				l241:
					{
						position243, tokenIndex243 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l244
						}
						position++
						goto l243
					l244:
						position, tokenIndex = position243, tokenIndex243
						if buffer[position] != rune('C') {
							goto l238
						}
						position++
					}
				l243:
					{
						position245, tokenIndex245 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l246
						}
						position++
						goto l245
					l246:
						position, tokenIndex = position245, tokenIndex245
						if buffer[position] != rune('A') {
							goto l238
						}
						position++
					}
				l245:
					{
						position247, tokenIndex247 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l248
						}
						position++
						goto l247
					l248:
						position, tokenIndex = position247, tokenIndex247
						if buffer[position] != rune('L') {
							goto l238
						}
						position++
					}
				l247:
					{
						position249, tokenIndex249 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l250
						}
						position++
						goto l249
					l250:
						position, tokenIndex = position249, tokenIndex249
						if buffer[position] != rune('E') {
							goto l238
						}
						position++
					}
				l249:
					{
						position251, tokenIndex251 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l252
						}
						position++
						goto l251
					l252:
						position, tokenIndex = position251, tokenIndex251
						if buffer[position] != rune('N') {
							goto l238
						}
						position++
					}
				l251:
					{
						position253, tokenIndex253 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l254
						}
						position++
						goto l253
					l254:
						position, tokenIndex = position253, tokenIndex253
						if buffer[position] != rune('T') {
							goto l238
						}
						position++
					}
				l253:
					{
						position255, tokenIndex255 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l256
						}
						position++
						goto l255
					l256:
						position, tokenIndex = position255, tokenIndex255
						if buffer[position] != rune('R') {
							goto l238
						}
						position++
					}
				l255:
					{
						position257, tokenIndex257 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l258
						}
						position++
						goto l257
					l258:
						position, tokenIndex = position257, tokenIndex257
						if buffer[position] != rune('Y') {
							goto l238
						}
						position++
					}
				l257:
					goto l149
				l238:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l259
					}
					position++
					{
						position260, tokenIndex260 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l261
						}
						position++
						goto l260
					l261:
						position, tokenIndex = position260, tokenIndex260
						if buffer[position] != rune('S') {
							goto l259
						}
						position++
					}
				l260:
					{
						position262, tokenIndex262 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l263
						}
						position++
						goto l262
					l263:
						position, tokenIndex = position262, tokenIndex262
						if buffer[position] != rune('I') {
							goto l259
						}
						position++
					}
				l262:
					{
						position264, tokenIndex264 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l265
						}
						position++
						goto l264
					l265:
						position, tokenIndex = position264, tokenIndex264
						if buffer[position] != rune('Z') {
							goto l259
						}
						position++
					}
				l264:
					{
						position266, tokenIndex266 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l267
						}
						position++
						goto l266
					l267:
						position, tokenIndex = position266, tokenIndex266
						if buffer[position] != rune('E') {
							goto l259
						}
						position++
					}
				l266:
					goto l149
				l259:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l268
					}
					position++
					{
						position269, tokenIndex269 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l270
						}
						position++
						goto l269
					l270:
						position, tokenIndex = position269, tokenIndex269
						if buffer[position] != rune('T') {
							goto l268
						}
						position++
					}
				l269:
					{
						position271, tokenIndex271 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l272
						}
						position++
						goto l271
					l272:
						position, tokenIndex = position271, tokenIndex271
						if buffer[position] != rune('Y') {
							goto l268
						}
						position++
					}
				l271:
					{
						position273, tokenIndex273 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l274
						}
						position++
						goto l273
					l274:
						position, tokenIndex = position273, tokenIndex273
						if buffer[position] != rune('P') {
							goto l268
						}
						position++
					}
				l273:
					{
						position275, tokenIndex275 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l276
						}
						position++
						goto l275
					l276:
						position, tokenIndex = position275, tokenIndex275
						if buffer[position] != rune('E') {
							goto l268
						}
						position++
					}
				l275:
					goto l149
				l268:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l277
					}
					position++
					{
						position278, tokenIndex278 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l279
						}
						position++
						goto l278
					l279:
						position, tokenIndex = position278, tokenIndex278
						if buffer[position] != rune('U') {
							goto l277
						}
						position++
					}
				l278:
					{
						position280, tokenIndex280 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l281
						}
						position++
						goto l280
					l281:
						position, tokenIndex = position280, tokenIndex280
						if buffer[position] != rune('L') {
							goto l277
						}
						position++
					}
				l280:
					{
						position282, tokenIndex282 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l283
						}
						position++
						goto l282
					l283:
						position, tokenIndex = position282, tokenIndex282
						if buffer[position] != rune('E') {
							goto l277
						}
						position++
					}
				l282:
					{
						position284, tokenIndex284 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l285
						}
						position++
						goto l284
					l285:
						position, tokenIndex = position284, tokenIndex284
						if buffer[position] != rune('B') {
							goto l277
						}
						position++
					}
				l284:
					if buffer[position] != rune('1') {
						goto l277
					}
					position++
					if buffer[position] != rune('2') {
						goto l277
					}
					position++
					if buffer[position] != rune('8') {
						goto l277
					}
					position++
					goto l149
				l277:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l147
					}
					position++
					{
						position286, tokenIndex286 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l287
						}
						position++
						goto l286
					l287:
						position, tokenIndex = position286, tokenIndex286
						if buffer[position] != rune('S') {
							goto l147
						}
						position++
					}
				l286:
					{
						position288, tokenIndex288 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l289
						}
						position++
						goto l288
					l289:
						position, tokenIndex = position288, tokenIndex288
						if buffer[position] != rune('L') {
							goto l147
						}
						position++
					}
				l288:
					{
						position290, tokenIndex290 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l291
						}
						position++
						goto l290
					l291:
						position, tokenIndex = position290, tokenIndex290
						if buffer[position] != rune('E') {
							goto l147
						}
						position++
					}
				l290:
					{
						position292, tokenIndex292 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l293
						}
						position++
						goto l292
					l293:
						position, tokenIndex = position292, tokenIndex292
						if buffer[position] != rune('B') {
							goto l147
						}
						position++
					}
				l292:
					if buffer[position] != rune('1') {
						goto l147
					}
					position++
					if buffer[position] != rune('2') {
						goto l147
					}
					position++
					if buffer[position] != rune('8') {
						goto l147
					}
					position++
				}
			l149:
				add(ruleLabelContainingDirectiveName, position148)
			}
			return true
		l147:
			position, tokenIndex = position147, tokenIndex147
			return false
		},
		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
		func() bool {
			position294, tokenIndex294 := position, tokenIndex
			{
				position295 := position
				if !_rules[ruleSymbolArg]() {
					goto l294
				}
			l296:
				{
					position297, tokenIndex297 := position, tokenIndex
					{
						position298, tokenIndex298 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l298
						}
						goto l299
					l298:
						position, tokenIndex = position298, tokenIndex298
					}
				l299:
					if buffer[position] != rune(',') {
						goto l297
					}
					position++
					{
						position300, tokenIndex300 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l300
						}
						goto l301
					l300:
						position, tokenIndex = position300, tokenIndex300
					}
				l301:
					if !_rules[ruleSymbolArg]() {
						goto l297
					}
					goto l296
				l297:
					position, tokenIndex = position297, tokenIndex297
				}
				add(ruleSymbolArgs, position295)
			}
			return true
		l294:
			position, tokenIndex = position294, tokenIndex294
			return false
		},
		/* 15 SymbolArg <- <SymbolExpr> */
		func() bool {
			position302, tokenIndex302 := position, tokenIndex
			{
				position303 := position
				if !_rules[ruleSymbolExpr]() {
					goto l302
				}
				add(ruleSymbolArg, position303)
			}
			return true
		l302:
			position, tokenIndex = position302, tokenIndex302
			return false
		},
		/* 16 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
		func() bool {
			position304, tokenIndex304 := position, tokenIndex
			{
				position305 := position
				if !_rules[ruleSymbolAtom]() {
					goto l304
				}
				{
					position306, tokenIndex306 := position, tokenIndex
					{
						position308, tokenIndex308 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l308
						}
						goto l309
					l308:
						position, tokenIndex = position308, tokenIndex308
					}
				l309:
					if !_rules[ruleSymbolOperator]() {
						goto l306
					}
					{
						position310, tokenIndex310 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l310
						}
						goto l311
					l310:
						position, tokenIndex = position310, tokenIndex310
					}
				l311:
					if !_rules[ruleSymbolExpr]() {
						goto l306
					}
					goto l307
				l306:
					position, tokenIndex = position306, tokenIndex306
				}
			l307:
				add(ruleSymbolExpr, position305)
			}
			return true
		l304:
			position, tokenIndex = position304, tokenIndex304
			return false
		},
		/* 17 SymbolAtom <- <(Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
		func() bool {
			position312, tokenIndex312 := position, tokenIndex
			{
				position313 := position
				{
					position314, tokenIndex314 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l315
					}
					goto l314
				l315:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolType]() {
						goto l316
					}
					goto l314
				l316:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleLocalSymbol]() {
						goto l317
					}
					{
						position318, tokenIndex318 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l318
						}
						goto l319
					l318:
						position, tokenIndex = position318, tokenIndex318
					}
				l319:
					goto l314
				l317:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolName]() {
						goto l320
					}
					if !_rules[ruleOffset]() {
						goto l320
					}
					goto l314
				l320:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleSymbolName]() {
						goto l321
					}
					{
						position322, tokenIndex322 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l322
						}
						goto l323
					l322:
						position, tokenIndex = position322, tokenIndex322
					}
				l323:
					goto l314
				l321:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleDot]() {
						goto l324
					}
					goto l314
				l324:
					position, tokenIndex = position314, tokenIndex314
					if !_rules[ruleOpenParen]() {
						goto l312
					}
					{
						position325, tokenIndex325 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l325
						}
						goto l326
					l325:
						position, tokenIndex = position325, tokenIndex325
					}
				l326:
					if !_rules[ruleSymbolExpr]() {
						goto l312
					}
					{
						position327, tokenIndex327 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l327
						}
						goto l328
					l327:
						position, tokenIndex = position327, tokenIndex327
					}
				l328:
					if !_rules[ruleCloseParen]() {
						goto l312
					}
				}
			l314:
				add(ruleSymbolAtom, position313)
			}
			return true
		l312:
			position, tokenIndex = position312, tokenIndex312
			return false
		},
		/* 18 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
		func() bool {
			position329, tokenIndex329 := position, tokenIndex
			{
				position330 := position
				{
					position331, tokenIndex331 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l332
					}
					position++
					goto l331
				l332:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('-') {
						goto l333
					}
					position++
					goto l331
				l333:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('|') {
						goto l334
					}
					position++
					goto l331
				l334:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('<') {
						goto l335
					}
					position++
					if buffer[position] != rune('<') {
						goto l335
					}
					position++
					goto l331
				l335:
					position, tokenIndex = position331, tokenIndex331
					if buffer[position] != rune('>') {
						goto l329
					}
					position++
					if buffer[position] != rune('>') {
						goto l329
					}
					position++
				}
			l331:
				add(ruleSymbolOperator, position330)
			}
			return true
		l329:
			position, tokenIndex = position329, tokenIndex329
			return false
		},
		/* 19 OpenParen <- <'('> */
		func() bool {
			position336, tokenIndex336 := position, tokenIndex
			{
				position337 := position
				if buffer[position] != rune('(') {
					goto l336
				}
				position++
				add(ruleOpenParen, position337)
			}
			return true
		l336:
			position, tokenIndex = position336, tokenIndex336
			return false
		},
		/* 20 CloseParen <- <')'> */
		func() bool {
			position338, tokenIndex338 := position, tokenIndex
			{
				position339 := position
				if buffer[position] != rune(')') {
					goto l338
				}
				position++
				add(ruleCloseParen, position339)
			}
			return true
		l338:
			position, tokenIndex = position338, tokenIndex338
			return false
		},
		/* 21 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position340, tokenIndex340 := position, tokenIndex
			{
				position341 := position
				{
					position342, tokenIndex342 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l343
					}
					position++
					goto l342
				l343:
					position, tokenIndex = position342, tokenIndex342
					if buffer[position] != rune('%') {
						goto l340
					}
					position++
				}
			l342:
				{
					position344, tokenIndex344 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l345
					}
					position++
					if buffer[position] != rune('u') {
						goto l345
					}
					position++
					if buffer[position] != rune('n') {
						goto l345
					}
					position++
					if buffer[position] != rune('c') {
						goto l345
					}
					position++
					if buffer[position] != rune('t') {
						goto l345
					}
					position++
					if buffer[position] != rune('i') {
						goto l345
					}
					position++
					if buffer[position] != rune('o') {
						goto l345
					}
					position++
					if buffer[position] != rune('n') {
						goto l345
					}
					position++
					goto l344
				l345:
					position, tokenIndex = position344, tokenIndex344
					if buffer[position] != rune('o') {
						goto l340
					}
					position++
					if buffer[position] != rune('b') {
						goto l340
					}
					position++
					if buffer[position] != rune('j') {
						goto l340
					}
					position++
					if buffer[position] != rune('e') {
						goto l340
					}
					position++
					if buffer[position] != rune('c') {
						goto l340
					}
					position++
					if buffer[position] != rune('t') {
						goto l340
					}
					position++
				}
			l344:
				add(ruleSymbolType, position341)
			}
			return true
		l340:
			position, tokenIndex = position340, tokenIndex340
			return false
		},
		/* 22 Dot <- <'.'> */
		func() bool {
			position346, tokenIndex346 := position, tokenIndex
			{
				position347 := position
				if buffer[position] != rune('.') {
					goto l346
				}
				position++
				add(ruleDot, position347)
			}
			return true
		l346:
			position, tokenIndex = position346, tokenIndex346
			return false
		},
		/* 23 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position348, tokenIndex348 := position, tokenIndex
			{
				position349 := position
				if buffer[position] != rune('[') {
					goto l348
				}
				position++
				if buffer[position] != rune('T') {
					goto l348
				}
				position++
				if buffer[position] != rune('C') {
					goto l348
				}
				position++
				if buffer[position] != rune(']') {
					goto l348
				}
				position++
				add(ruleTCMarker, position349)
			}
			return true
		l348:
			position, tokenIndex = position348, tokenIndex348
			return false
		},
		/* 24 EscapedChar <- <('\\' .)> */
		func() bool {
			position350, tokenIndex350 := position, tokenIndex
			{
				position351 := position
				if buffer[position] != rune('\\') {
					goto l350
				}
				position++
				if !matchDot() {
					goto l350
				}
				add(ruleEscapedChar, position351)
			}
			return true
		l350:
			position, tokenIndex = position350, tokenIndex350
			return false
		},
		/* 25 WS <- <(' ' / '\t')+> */
		func() bool {
			position352, tokenIndex352 := position, tokenIndex
			{
				position353 := position
				{
					position356, tokenIndex356 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l357
					}
					position++
					goto l356
				l357:
					position, tokenIndex = position356, tokenIndex356
					if buffer[position] != rune('\t') {
						goto l352
					}
					position++
				}
			l356:
			l354:
				{
					position355, tokenIndex355 := position, tokenIndex
					{
						position358, tokenIndex358 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l359
						}
						position++
						goto l358
					l359:
						position, tokenIndex = position358, tokenIndex358
						if buffer[position] != rune('\t') {
							goto l355
						}
						position++
					}
				l358:
					goto l354
				l355:
					position, tokenIndex = position355, tokenIndex355
				}
				add(ruleWS, position353)
			}
			return true
		l352:
			position, tokenIndex = position352, tokenIndex352
			return false
		},
		/* 26 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position360, tokenIndex360 := position, tokenIndex
			{
				position361 := position
				{
					position362, tokenIndex362 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l363
					}
					position++
					if buffer[position] != rune('/') {
						goto l363
					}
					position++
					goto l362
				l363:
					position, tokenIndex = position362, tokenIndex362
					if buffer[position] != rune('#') {
						goto l360
					}
					position++
				}
			l362:
			l364:
				{
					position365, tokenIndex365 := position, tokenIndex
					{
						position366, tokenIndex366 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l366
						}
						position++
						goto l365
					l366:
						position, tokenIndex = position366, tokenIndex366
					}
					if !matchDot() {
						goto l365
					}
					goto l364
				l365:
					position, tokenIndex = position365, tokenIndex365
				}
				add(ruleComment, position361)
			}
			return true
		l360:
			position, tokenIndex = position360, tokenIndex360
			return false
		},
		/* 27 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position367, tokenIndex367 := position, tokenIndex
			{
				position368 := position
				{
					position369, tokenIndex369 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l370
					}
					goto l369
				l370:
					position, tokenIndex = position369, tokenIndex369
					if !_rules[ruleLocalLabel]() {
						goto l371
					}
					goto l369
				l371:
					position, tokenIndex = position369, tokenIndex369
					if !_rules[ruleSymbolName]() {
						goto l367
					}
				}
			l369:
				if buffer[position] != rune(':') {
					goto l367
				}
				position++
				add(ruleLabel, position368)
			}
			return true
		l367:
			position, tokenIndex = position367, tokenIndex367
			return false
		},
		/* 28 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position372, tokenIndex372 := position, tokenIndex
			{
				position373 := position
				{
					position374, tokenIndex374 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l375
					}
					position++
					goto l374
				l375:
					position, tokenIndex = position374, tokenIndex374
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l376
					}
					position++
					goto l374
				l376:
					position, tokenIndex = position374, tokenIndex374
					if buffer[position] != rune('.') {
						goto l377
					}
					position++
					goto l374
				l377:
					position, tokenIndex = position374, tokenIndex374
					if buffer[position] != rune('_') {
						goto l372
					}
					position++
				}
			l374:
			l378:
				{
					position379, tokenIndex379 := position, tokenIndex
					{
						position380, tokenIndex380 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l381
						}
						position++
						goto l380
					l381:
						position, tokenIndex = position380, tokenIndex380
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l382
						}
						position++
						goto l380
					l382:
						position, tokenIndex = position380, tokenIndex380
						if buffer[position] != rune('.') {
							goto l383
						}
						position++
						goto l380
					l383:
						position, tokenIndex = position380, tokenIndex380
						{
							position385, tokenIndex385 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l386
							}
							position++
							goto l385
						l386:
							position, tokenIndex = position385, tokenIndex385
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l384
							}
							position++
						}
					l385:
						goto l380
					l384:
						position, tokenIndex = position380, tokenIndex380
						if buffer[position] != rune('$') {
							goto l387
						}
						position++
						goto l380
					l387:
						position, tokenIndex = position380, tokenIndex380
						if buffer[position] != rune('_') {
							goto l379
						}
						position++
					}
				l380:
					goto l378
				l379:
					position, tokenIndex = position379, tokenIndex379
				}
				add(ruleSymbolName, position373)
			}
			return true
		l372:
			position, tokenIndex = position372, tokenIndex372
			return false
		},
		/* 29 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position388, tokenIndex388 := position, tokenIndex
			{
				position389 := position
				if buffer[position] != rune('.') {
					goto l388
				}
				position++
				if buffer[position] != rune('L') {
					goto l388
				}
				position++
				{
					position392, tokenIndex392 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l393
					}
					position++
					goto l392
				l393:
					position, tokenIndex = position392, tokenIndex392
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l394
					}
					position++
					goto l392
				l394:
					position, tokenIndex = position392, tokenIndex392
					{
						position396, tokenIndex396 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l397
						}
						position++
						goto l396
					l397:
						position, tokenIndex = position396, tokenIndex396
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l395
						}
						position++
					}
				l396:
					goto l392
				l395:
					position, tokenIndex = position392, tokenIndex392
					if buffer[position] != rune('.') {
						goto l398
					}
					position++
					goto l392
				l398:
					position, tokenIndex = position392, tokenIndex392
					{
						position400, tokenIndex400 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l401
						}
						position++
						goto l400
					l401:
						position, tokenIndex = position400, tokenIndex400
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l399
						}
						position++
					}
				l400:
					goto l392
				l399:
					position, tokenIndex = position392, tokenIndex392
					if buffer[position] != rune('$') {
						goto l402
					}
					position++
					goto l392
				l402:
					position, tokenIndex = position392, tokenIndex392
					if buffer[position] != rune('_') {
						goto l388
					}
					position++
				}
			l392:
			l390:
				{
					position391, tokenIndex391 := position, tokenIndex
					{
						position403, tokenIndex403 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l404
						}
						position++
						goto l403
					l404:
						position, tokenIndex = position403, tokenIndex403
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l405
						}
						position++
						goto l403
					l405:
						position, tokenIndex = position403, tokenIndex403
						{
							position407, tokenIndex407 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l408
							}
							position++
							goto l407
						l408:
							position, tokenIndex = position407, tokenIndex407
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l406
							}
							position++
						}
					l407:
						goto l403
					l406:
						position, tokenIndex = position403, tokenIndex403
						if buffer[position] != rune('.') {
							goto l409
						}
						position++
						goto l403
					l409:
						position, tokenIndex = position403, tokenIndex403
						{
							position411, tokenIndex411 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l412
							}
							position++
							goto l411
						l412:
							position, tokenIndex = position411, tokenIndex411
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l410
							}
							position++
						}
					l411:
						goto l403
					l410:
						position, tokenIndex = position403, tokenIndex403
						if buffer[position] != rune('$') {
							goto l413
						}
						position++
						goto l403
					l413:
						position, tokenIndex = position403, tokenIndex403
						if buffer[position] != rune('_') {
							goto l391
						}
						position++
					}
				l403:
					goto l390
				l391:
					position, tokenIndex = position391, tokenIndex391
				}
				add(ruleLocalSymbol, position389)
			}
			return true
		l388:
			position, tokenIndex = position388, tokenIndex388
			return false
		},
		/* 30 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position414, tokenIndex414 := position, tokenIndex
			{
				position415 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l414
				}
				position++
			l416:
				{
					position417, tokenIndex417 := position, tokenIndex
					{
						position418, tokenIndex418 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l419
						}
						position++
						goto l418
					l419:
						position, tokenIndex = position418, tokenIndex418
						if buffer[position] != rune('$') {
							goto l417
						}
						position++
					}
				l418:
					goto l416
				l417:
					position, tokenIndex = position417, tokenIndex417
				}
				add(ruleLocalLabel, position415)
			}
			return true
		l414:
			position, tokenIndex = position414, tokenIndex414
			return false
		},
		/* 31 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position420, tokenIndex420 := position, tokenIndex
			{
				position421 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l420
				}
				position++
			l422:
				{
					position423, tokenIndex423 := position, tokenIndex
					{
						position424, tokenIndex424 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l425
						}
						position++
						goto l424
					l425:
						position, tokenIndex = position424, tokenIndex424
						if buffer[position] != rune('$') {
							goto l423
						}
						position++
					}
				l424:
					goto l422
				l423:
					position, tokenIndex = position423, tokenIndex423
				}
				{
					position426, tokenIndex426 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l427
					}
					position++
					goto l426
				l427:
					position, tokenIndex = position426, tokenIndex426
					if buffer[position] != rune('f') {
						goto l420
					}
					position++
				}
			l426:
				add(ruleLocalLabelRef, position421)
			}
			return true
		l420:
			position, tokenIndex = position420, tokenIndex420
			return false
		},
		/* 32 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
		func() bool {
			position428, tokenIndex428 := position, tokenIndex
			{
				position429 := position
				if !_rules[ruleInstructionName]() {
					goto l428
				}
				{
					position430, tokenIndex430 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l430
					}
					if !_rules[ruleInstructionArg]() {
						goto l430
					}
				l432:
					{
						position433, tokenIndex433 := position, tokenIndex
						{
							position434, tokenIndex434 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l434
							}
							goto l435
						l434:
							position, tokenIndex = position434, tokenIndex434
						}
					l435:
						if buffer[position] != rune(',') {
							goto l433
						}
						position++
						{
							position436, tokenIndex436 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l436
							}
							goto l437
						l436:
							position, tokenIndex = position436, tokenIndex436
						}
					l437:
						if !_rules[ruleInstructionArg]() {
							goto l433
						}
						goto l432
					l433:
						position, tokenIndex = position433, tokenIndex433
					}
					goto l431
				l430:
					position, tokenIndex = position430, tokenIndex430
				}
			l431:
				add(ruleInstruction, position429)
			}
			return true
		l428:
			position, tokenIndex = position428, tokenIndex428
			return false
		},
		/* 33 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position438, tokenIndex438 := position, tokenIndex
			{
				position439 := position
				{
					position440, tokenIndex440 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l441
					}
					position++
					goto l440
				l441:
					position, tokenIndex = position440, tokenIndex440
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l438
					}
					position++
				}
			l440:
			l442:
				{
					position443, tokenIndex443 := position, tokenIndex
					{
						position444, tokenIndex444 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l445
						}
						position++
						goto l444
					l445:
						position, tokenIndex = position444, tokenIndex444
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l446
						}
						position++
						goto l444
					l446:
						position, tokenIndex = position444, tokenIndex444
						if buffer[position] != rune('.') {
							goto l447
						}
						position++
						goto l444
					l447:
						position, tokenIndex = position444, tokenIndex444
						{
							position448, tokenIndex448 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l449
							}
							position++
							goto l448
						l449:
							position, tokenIndex = position448, tokenIndex448
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l443
							}
							position++
						}
					l448:
					}
				l444:
					goto l442
				l443:
					position, tokenIndex = position443, tokenIndex443
				}
				{
					position450, tokenIndex450 := position, tokenIndex
					{
						position452, tokenIndex452 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l453
						}
						position++
						goto l452
					l453:
						position, tokenIndex = position452, tokenIndex452
						if buffer[position] != rune('+') {
							goto l454
						}
						position++
						goto l452
					l454:
						position, tokenIndex = position452, tokenIndex452
						if buffer[position] != rune('-') {
							goto l450
						}
						position++
					}
				l452:
					goto l451
				l450:
					position, tokenIndex = position450, tokenIndex450
				}
			l451:
				add(ruleInstructionName, position439)
			}
			return true
		l438:
			position, tokenIndex = position438, tokenIndex438
			return false
		},
		/* 34 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
		func() bool {
			position455, tokenIndex455 := position, tokenIndex
			{
				position456 := position
				{
					position457, tokenIndex457 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l457
					}
					goto l458
				l457:
					position, tokenIndex = position457, tokenIndex457
				}
			l458:
				{
					position459, tokenIndex459 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l460
					}
					goto l459
				l460:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleRegisterOrConstant]() {
						goto l461
					}
					goto l459
				l461:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleLocalLabelRef]() {
						goto l462
					}
					goto l459
				l462:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleTOCRefHigh]() {
						goto l463
					}
					goto l459
				l463:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleTOCRefLow]() {
						goto l464
					}
					goto l459
				l464:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleGOTLocation]() {
						goto l465
					}
					goto l459
				l465:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleGOTSymbolOffset]() {
						goto l466
					}
					goto l459
				l466:
					position, tokenIndex = position459, tokenIndex459
					if !_rules[ruleMemoryRef]() {
						goto l455
					}
				}
			l459:
			l467:
				{
					position468, tokenIndex468 := position, tokenIndex
					if !_rules[ruleAVX512Token]() {
						goto l468
					}
					goto l467
				l468:
					position, tokenIndex = position468, tokenIndex468
				}
				add(ruleInstructionArg, position456)
			}
			return true
		l455:
			position, tokenIndex = position455, tokenIndex455
			return false
		},
		/* 35 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position469, tokenIndex469 := position, tokenIndex
			{
				position470 := position
				if buffer[position] != rune('$') {
					goto l469
				}
				position++
				if buffer[position] != rune('_') {
					goto l469
				}
				position++
				if buffer[position] != rune('G') {
					goto l469
				}
				position++
				if buffer[position] != rune('L') {
					goto l469
				}
				position++
				if buffer[position] != rune('O') {
					goto l469
				}
				position++
				if buffer[position] != rune('B') {
					goto l469
				}
				position++
				if buffer[position] != rune('A') {
					goto l469
				}
				position++
				if buffer[position] != rune('L') {
					goto l469
				}
				position++
				if buffer[position] != rune('_') {
					goto l469
				}
				position++
				if buffer[position] != rune('O') {
					goto l469
				}
				position++
				if buffer[position] != rune('F') {
					goto l469
				}
				position++
				if buffer[position] != rune('F') {
					goto l469
				}
				position++
				if buffer[position] != rune('S') {
					goto l469
				}
				position++
				if buffer[position] != rune('E') {
					goto l469
				}
				position++
				if buffer[position] != rune('T') {
					goto l469
				}
				position++
				if buffer[position] != rune('_') {
					goto l469
				}
				position++
				if buffer[position] != rune('T') {
					goto l469
				}
				position++
				if buffer[position] != rune('A') {
					goto l469
				}
				position++
				if buffer[position] != rune('B') {
					goto l469
				}
				position++
				if buffer[position] != rune('L') {
					goto l469
				}
				position++
				if buffer[position] != rune('E') {
					goto l469
				}
				position++
				if buffer[position] != rune('_') {
					goto l469
				}
				position++
				if buffer[position] != rune('-') {
					goto l469
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l469
				}
				add(ruleGOTLocation, position470)
			}
			return true
		l469:
			position, tokenIndex = position469, tokenIndex469
			return false
		},
		/* 36 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position471, tokenIndex471 := position, tokenIndex
			{
				position472 := position
				{
					position473, tokenIndex473 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l474
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l474
					}
					if buffer[position] != rune('@') {
						goto l474
					}
					position++
					if buffer[position] != rune('G') {
						goto l474
					}
					position++
					if buffer[position] != rune('O') {
						goto l474
					}
					position++
					if buffer[position] != rune('T') {
						goto l474
					}
					position++
					{
						position475, tokenIndex475 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l475
						}
						position++
						if buffer[position] != rune('F') {
							goto l475
						}
						position++
						if buffer[position] != rune('F') {
							goto l475
						}
						position++
						goto l476
					l475:
						position, tokenIndex = position475, tokenIndex475
					}
				l476:
					goto l473
				l474:
					position, tokenIndex = position473, tokenIndex473
					if buffer[position] != rune(':') {
						goto l471
					}
					position++
					{
						position477, tokenIndex477 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l478
						}
						position++
						goto l477
					l478:
						position, tokenIndex = position477, tokenIndex477
						if buffer[position] != rune('G') {
							goto l471
						}
						position++
					}
				l477:
					{
						position479, tokenIndex479 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l480
						}
						position++
						goto l479
					l480:
						position, tokenIndex = position479, tokenIndex479
						if buffer[position] != rune('O') {
							goto l471
						}
						position++
					}
				l479:
					{
						position481, tokenIndex481 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l482
						}
						position++
						goto l481
					l482:
						position, tokenIndex = position481, tokenIndex481
						if buffer[position] != rune('T') {
							goto l471
						}
						position++
					}
				l481:
					if buffer[position] != rune(':') {
						goto l471
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l471
					}
				}
			l473:
				add(ruleGOTSymbolOffset, position472)
			}
			return true
		l471:
			position, tokenIndex = position471, tokenIndex471
			return false
		},
		/* 37 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position483, tokenIndex483 := position, tokenIndex
			{
				position484 := position
				{
					position485, tokenIndex485 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l485
					}
					goto l486
				l485:
					position, tokenIndex = position485, tokenIndex485
				}
			l486:
				if buffer[position] != rune('{') {
					goto l483
				}
				position++
				{
					position487, tokenIndex487 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l487
					}
					position++
					goto l488
				l487:
					position, tokenIndex = position487, tokenIndex487
				}
			l488:
			l489:
				{
					position490, tokenIndex490 := position, tokenIndex
					{
						position491, tokenIndex491 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l492
						}
						position++
						goto l491
					l492:
						position, tokenIndex = position491, tokenIndex491
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l490
						}
						position++
					}
				l491:
					goto l489
				l490:
					position, tokenIndex = position490, tokenIndex490
				}
				if buffer[position] != rune('}') {
					goto l483
				}
				position++
				add(ruleAVX512Token, position484)
			}
			return true
		l483:
			position, tokenIndex = position483, tokenIndex483
			return false
		},
		/* 38 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position493, tokenIndex493 := position, tokenIndex
			{
				position494 := position
				if buffer[position] != rune('.') {
					goto l493
				}
				position++
				if buffer[position] != rune('T') {
					goto l493
				}
				position++
				if buffer[position] != rune('O') {
					goto l493
				}
				position++
				if buffer[position] != rune('C') {
					goto l493
				}
				position++
				if buffer[position] != rune('.') {
					goto l493
				}
				position++
				if buffer[position] != rune('-') {
					goto l493
				}
				position++
				{
					position495, tokenIndex495 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l496
					}
					position++
					if buffer[position] != rune('b') {
						goto l496
					}
					position++
					goto l495
				l496:
					position, tokenIndex = position495, tokenIndex495
					if buffer[position] != rune('.') {
						goto l493
					}
					position++
					if buffer[position] != rune('L') {
						goto l493
					}
					position++
					{
						position499, tokenIndex499 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l500
						}
						position++
						goto l499
					l500:
						position, tokenIndex = position499, tokenIndex499
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l501
						}
						position++
						goto l499
					l501:
						position, tokenIndex = position499, tokenIndex499
						if buffer[position] != rune('_') {
							goto l502
						}
						position++
						goto l499
					l502:
						position, tokenIndex = position499, tokenIndex499
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l493
						}
						position++
					}
				l499:
				l497:
					{
						position498, tokenIndex498 := position, tokenIndex
						{
							position503, tokenIndex503 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l504
							}
							position++
							goto l503
						l504:
							position, tokenIndex = position503, tokenIndex503
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l505
							}
							position++
							goto l503
						l505:
							position, tokenIndex = position503, tokenIndex503
							if buffer[position] != rune('_') {
								goto l506
							}
							position++
							goto l503
						l506:
							position, tokenIndex = position503, tokenIndex503
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l498
							}
							position++
						}
					l503:
						goto l497
					l498:
						position, tokenIndex = position498, tokenIndex498
					}
				}
			l495:
				if buffer[position] != rune('@') {
					goto l493
				}
				position++
				{
					position507, tokenIndex507 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l508
					}
					position++
					goto l507
				l508:
					position, tokenIndex = position507, tokenIndex507
					if buffer[position] != rune('H') {
						goto l493
					}
					position++
				}
			l507:
				{
					position509, tokenIndex509 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l510
					}
					position++
					goto l509
				l510:
					position, tokenIndex = position509, tokenIndex509
					if buffer[position] != rune('A') {
						goto l493
					}
					position++
				}
			l509:
				add(ruleTOCRefHigh, position494)
			}
			return true
		l493:
			position, tokenIndex = position493, tokenIndex493
			return false
		},
		/* 39 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position511, tokenIndex511 := position, tokenIndex
			{
				position512 := position
				if buffer[position] != rune('.') {
					goto l511
				}
				position++
				if buffer[position] != rune('T') {
					goto l511
				}
				position++
				if buffer[position] != rune('O') {
					goto l511
				}
				position++
				if buffer[position] != rune('C') {
					goto l511
				}
				position++
				if buffer[position] != rune('.') {
					goto l511
				}
				position++
				if buffer[position] != rune('-') {
					goto l511
				}
				position++
				{
					position513, tokenIndex513 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l514
					}
					position++
					if buffer[position] != rune('b') {
						goto l514
					}
					position++
					goto l513
				l514:
					position, tokenIndex = position513, tokenIndex513
					if buffer[position] != rune('.') {
						goto l511
					}
					position++
					if buffer[position] != rune('L') {
						goto l511
					}
					position++
					{
						position517, tokenIndex517 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l518
						}
						position++
						goto l517
					l518:
						position, tokenIndex = position517, tokenIndex517
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l519
						}
						position++
						goto l517
					l519:
						position, tokenIndex = position517, tokenIndex517
						if buffer[position] != rune('_') {
							goto l520
						}
						position++
						goto l517
					l520:
						position, tokenIndex = position517, tokenIndex517
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l511
						}
						position++
					}
				l517:
				l515:
					{
						position516, tokenIndex516 := position, tokenIndex
						{
							position521, tokenIndex521 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l522
							}
							position++
							goto l521
						l522:
							position, tokenIndex = position521, tokenIndex521
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l523
							}
							position++
							goto l521
						l523:
							position, tokenIndex = position521, tokenIndex521
							if buffer[position] != rune('_') {
								goto l524
							}
							position++
							goto l521
						l524:
							position, tokenIndex = position521, tokenIndex521
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l516
							}
							position++
						}
					l521:
						goto l515
					l516:
						position, tokenIndex = position516, tokenIndex516
					}
				}
			l513:
				if buffer[position] != rune('@') {
					goto l511
				}
				position++
				{
					position525, tokenIndex525 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l526
					}
					position++
					goto l525
				l526:
					position, tokenIndex = position525, tokenIndex525
					if buffer[position] != rune('L') {
						goto l511
					}
					position++
				}
			l525:
				add(ruleTOCRefLow, position512)
			}
			return true
		l511:
			position, tokenIndex = position511, tokenIndex511
			return false
		},
		/* 40 IndirectionIndicator <- <'*'> */
		func() bool {
			position527, tokenIndex527 := position, tokenIndex
			{
				position528 := position
				if buffer[position] != rune('*') {
					goto l527
				}
				position++
				add(ruleIndirectionIndicator, position528)
			}
			return true
		l527:
			position, tokenIndex = position527, tokenIndex527
			return false
		},
		/* 41 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
		func() bool {
			position529, tokenIndex529 := position, tokenIndex
			{
				position530 := position
				{
					position531, tokenIndex531 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l532
					}
					position++
					{
						position533, tokenIndex533 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l534
						}
						position++
						goto l533
					l534:
						position, tokenIndex = position533, tokenIndex533
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l532
						}
						position++
					}
				l533:
				l535:
					{
						position536, tokenIndex536 := position, tokenIndex
						{
							position537, tokenIndex537 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l538
							}
							position++
							goto l537
						l538:
							position, tokenIndex = position537, tokenIndex537
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l539
							}
							position++
							goto l537
						l539:
							position, tokenIndex = position537, tokenIndex537
							{
								position540, tokenIndex540 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l541
								}
								position++
								goto l540
							l541:
								position, tokenIndex = position540, tokenIndex540
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l536
								}
								position++
							}
						l540:
						}
					l537:
						goto l535
					l536:
						position, tokenIndex = position536, tokenIndex536
					}
					goto l531
				l532:
					position, tokenIndex = position531, tokenIndex531
					{
						position543, tokenIndex543 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l543
						}
						position++
						goto l544
					l543:
						position, tokenIndex = position543, tokenIndex543
					}
				l544:
					{
						position545, tokenIndex545 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l546
						}
						if !_rules[ruleOffset]() {
							goto l546
						}
						goto l545
					l546:
						position, tokenIndex = position545, tokenIndex545
						if !_rules[ruleOffset]() {
							goto l542
						}
					}
				l545:
					goto l531
				l542:
					position, tokenIndex = position531, tokenIndex531
					if buffer[position] != rune('#') {
						goto l547
					}
					position++
					if !_rules[ruleOffset]() {
						goto l547
					}
					{
						position548, tokenIndex548 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l548
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l548
						}
						position++
					l550:
						{
							position551, tokenIndex551 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l551
							}
							position++
							goto l550
						l551:
							position, tokenIndex = position551, tokenIndex551
						}
						{
							position552, tokenIndex552 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l552
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l552
							}
							position++
						l554:
							{
								position555, tokenIndex555 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l555
								}
								position++
								goto l554
							l555:
								position, tokenIndex = position555, tokenIndex555
							}
							goto l553
						l552:
							position, tokenIndex = position552, tokenIndex552
						}
					l553:
						goto l549
					l548:
						position, tokenIndex = position548, tokenIndex548
					}
				l549:
					goto l531
				l547:
					position, tokenIndex = position531, tokenIndex531
					if buffer[position] != rune('#') {
						goto l556
					}
					position++
					{
						position557, tokenIndex557 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l557
						}
						position++
						goto l558
					l557:
						position, tokenIndex = position557, tokenIndex557
					}
				l558:
					if buffer[position] != rune('(') {
						goto l556
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l556
					}
					position++
					{
						position559, tokenIndex559 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l559
						}
						goto l560
					l559:
						position, tokenIndex = position559, tokenIndex559
					}
				l560:
					if buffer[position] != rune('<') {
						goto l556
					}
					position++
					if buffer[position] != rune('<') {
						goto l556
					}
					position++
					{
						position561, tokenIndex561 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l561
						}
						goto l562
					l561:
						position, tokenIndex = position561, tokenIndex561
					}
				l562:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l556
					}
					position++
					if buffer[position] != rune(')') {
						goto l556
					}
					position++
					goto l531
				l556:
					position, tokenIndex = position531, tokenIndex531
					if !_rules[ruleARMRegister]() {
						goto l529
					}
				}
			l531:
				{
					position563, tokenIndex563 := position, tokenIndex
					{
						position564, tokenIndex564 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l565
						}
						position++
						goto l564
					l565:
						position, tokenIndex = position564, tokenIndex564
						if buffer[position] != rune('b') {
							goto l566
						}
						position++
						goto l564
					l566:
						position, tokenIndex = position564, tokenIndex564
						if buffer[position] != rune(':') {
							goto l567
						}
						position++
						goto l564
					l567:
						position, tokenIndex = position564, tokenIndex564
						if buffer[position] != rune('(') {
							goto l568
						}
						position++
						goto l564
					l568:
						position, tokenIndex = position564, tokenIndex564
						if buffer[position] != rune('+') {
							goto l569
						}
						position++
						goto l564
					l569:
						position, tokenIndex = position564, tokenIndex564
						if buffer[position] != rune('-') {
							goto l563
						}
						position++
					}
				l564:
					goto l529
				l563:
					position, tokenIndex = position563, tokenIndex563
				}
				add(ruleRegisterOrConstant, position530)
			}
			return true
		l529:
			position, tokenIndex = position529, tokenIndex529
			return false
		},
		/* 42 ARMConstantTweak <- <(((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
		func() bool {
			position570, tokenIndex570 := position, tokenIndex
			{
				position571 := position
				{
					position572, tokenIndex572 := position, tokenIndex
					{
						position574, tokenIndex574 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l575
						}
						position++
						goto l574
					l575:
						position, tokenIndex = position574, tokenIndex574
						if buffer[position] != rune('s') {
							goto l573
						}
						position++
					}
				l574:
					{
						position576, tokenIndex576 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l577
						}
						position++
						goto l576
					l577:
						position, tokenIndex = position576, tokenIndex576
						if buffer[position] != rune('X') {
							goto l573
						}
						position++
					}
				l576:
					{
						position578, tokenIndex578 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l579
						}
						position++
						goto l578
					l579:
						position, tokenIndex = position578, tokenIndex578
						if buffer[position] != rune('T') {
							goto l573
						}
						position++
					}
				l578:
					{
						position580, tokenIndex580 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l581
						}
						position++
						goto l580
					l581:
						position, tokenIndex = position580, tokenIndex580
						if buffer[position] != rune('w') {
							goto l582
						}
						position++
						goto l580
					l582:
						position, tokenIndex = position580, tokenIndex580
						if buffer[position] != rune('h') {
							goto l583
						}
						position++
						goto l580
					l583:
						position, tokenIndex = position580, tokenIndex580
						if buffer[position] != rune('b') {
							goto l573
						}
						position++
					}
				l580:
					goto l572
				l573:
					position, tokenIndex = position572, tokenIndex572
					{
						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 l584
						}
						position++
					}
				l585:
					{
						position587, tokenIndex587 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l588
						}
						position++
						goto l587
					l588:
						position, tokenIndex = position587, tokenIndex587
						if buffer[position] != rune('S') {
							goto l584
						}
						position++
					}
				l587:
					{
						position589, tokenIndex589 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l590
						}
						position++
						goto l589
					l590:
						position, tokenIndex = position589, tokenIndex589
						if buffer[position] != rune('L') {
							goto l584
						}
						position++
					}
				l589:
					goto l572
				l584:
					position, tokenIndex = position572, tokenIndex572
					{
						position592, tokenIndex592 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l593
						}
						position++
						goto l592
					l593:
						position, tokenIndex = position592, tokenIndex592
						if buffer[position] != rune('L') {
							goto l591
						}
						position++
					}
				l592:
					{
						position594, tokenIndex594 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l595
						}
						position++
						goto l594
					l595:
						position, tokenIndex = position594, tokenIndex594
						if buffer[position] != rune('S') {
							goto l591
						}
						position++
					}
				l594:
					{
						position596, tokenIndex596 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l597
						}
						position++
						goto l596
					l597:
						position, tokenIndex = position596, tokenIndex596
						if buffer[position] != rune('R') {
							goto l591
						}
						position++
					}
				l596:
					goto l572
				l591:
					position, tokenIndex = position572, tokenIndex572
					{
						position599, tokenIndex599 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l600
						}
						position++
						goto l599
					l600:
						position, tokenIndex = position599, tokenIndex599
						if buffer[position] != rune('R') {
							goto l598
						}
						position++
					}
				l599:
					{
						position601, tokenIndex601 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l602
						}
						position++
						goto l601
					l602:
						position, tokenIndex = position601, tokenIndex601
						if buffer[position] != rune('O') {
							goto l598
						}
						position++
					}
				l601:
					{
						position603, tokenIndex603 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l604
						}
						position++
						goto l603
					l604:
						position, tokenIndex = position603, tokenIndex603
						if buffer[position] != rune('R') {
							goto l598
						}
						position++
					}
				l603:
					goto l572
				l598:
					position, tokenIndex = position572, tokenIndex572
					{
						position605, tokenIndex605 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l606
						}
						position++
						goto l605
					l606:
						position, tokenIndex = position605, tokenIndex605
						if buffer[position] != rune('A') {
							goto l570
						}
						position++
					}
				l605:
					{
						position607, tokenIndex607 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l608
						}
						position++
						goto l607
					l608:
						position, tokenIndex = position607, tokenIndex607
						if buffer[position] != rune('S') {
							goto l570
						}
						position++
					}
				l607:
					{
						position609, tokenIndex609 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l610
						}
						position++
						goto l609
					l610:
						position, tokenIndex = position609, tokenIndex609
						if buffer[position] != rune('R') {
							goto l570
						}
						position++
					}
				l609:
				}
			l572:
				{
					position611, tokenIndex611 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l611
					}
					if buffer[position] != rune('#') {
						goto l611
					}
					position++
					if !_rules[ruleOffset]() {
						goto l611
					}
					goto l612
				l611:
					position, tokenIndex = position611, tokenIndex611
				}
			l612:
				add(ruleARMConstantTweak, position571)
			}
			return true
		l570:
			position, tokenIndex = position570, tokenIndex570
			return false
		},
		/* 43 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
		func() bool {
			position613, tokenIndex613 := position, tokenIndex
			{
				position614 := position
				{
					position615, tokenIndex615 := position, tokenIndex
					{
						position617, tokenIndex617 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l618
						}
						position++
						goto l617
					l618:
						position, tokenIndex = position617, tokenIndex617
						if buffer[position] != rune('S') {
							goto l616
						}
						position++
					}
				l617:
					{
						position619, tokenIndex619 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l620
						}
						position++
						goto l619
					l620:
						position, tokenIndex = position619, tokenIndex619
						if buffer[position] != rune('P') {
							goto l616
						}
						position++
					}
				l619:
					goto l615
				l616:
					position, tokenIndex = position615, tokenIndex615
					{
						position622, tokenIndex622 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l623
						}
						position++
						goto l622
					l623:
						position, tokenIndex = position622, tokenIndex622
						if buffer[position] != rune('w') {
							goto l624
						}
						position++
						goto l622
					l624:
						position, tokenIndex = position622, tokenIndex622
						if buffer[position] != rune('d') {
							goto l625
						}
						position++
						goto l622
					l625:
						position, tokenIndex = position622, tokenIndex622
						if buffer[position] != rune('q') {
							goto l626
						}
						position++
						goto l622
					l626:
						position, tokenIndex = position622, tokenIndex622
						if buffer[position] != rune('s') {
							goto l627
						}
						position++
						goto l622
					l627:
						position, tokenIndex = position622, tokenIndex622
						if buffer[position] != rune('h') {
							goto l628
						}
						position++
						goto l622
					l628:
						position, tokenIndex = position622, tokenIndex622
						if buffer[position] != rune('b') {
							goto l621
						}
						position++
					}
				l622:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l621
					}
					position++
					{
						position629, tokenIndex629 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l629
						}
						position++
						goto l630
					l629:
						position, tokenIndex = position629, tokenIndex629
					}
				l630:
					goto l615
				l621:
					position, tokenIndex = position615, tokenIndex615
					{
						position632, tokenIndex632 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l633
						}
						position++
						goto l632
					l633:
						position, tokenIndex = position632, tokenIndex632
						if buffer[position] != rune('X') {
							goto l631
						}
						position++
					}
				l632:
					{
						position634, tokenIndex634 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l635
						}
						position++
						goto l634
					l635:
						position, tokenIndex = position634, tokenIndex634
						if buffer[position] != rune('Z') {
							goto l631
						}
						position++
					}
				l634:
					{
						position636, tokenIndex636 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l637
						}
						position++
						goto l636
					l637:
						position, tokenIndex = position636, tokenIndex636
						if buffer[position] != rune('R') {
							goto l631
						}
						position++
					}
				l636:
					goto l615
				l631:
					position, tokenIndex = position615, tokenIndex615
					{
						position639, tokenIndex639 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l640
						}
						position++
						goto l639
					l640:
						position, tokenIndex = position639, tokenIndex639
						if buffer[position] != rune('W') {
							goto l638
						}
						position++
					}
				l639:
					{
						position641, tokenIndex641 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l642
						}
						position++
						goto l641
					l642:
						position, tokenIndex = position641, tokenIndex641
						if buffer[position] != rune('Z') {
							goto l638
						}
						position++
					}
				l641:
					{
						position643, tokenIndex643 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l644
						}
						position++
						goto l643
					l644:
						position, tokenIndex = position643, tokenIndex643
						if buffer[position] != rune('R') {
							goto l638
						}
						position++
					}
				l643:
					goto l615
				l638:
					position, tokenIndex = position615, tokenIndex615
					{
						position646, tokenIndex646 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l647
						}
						position++
						goto l646
					l647:
						position, tokenIndex = position646, tokenIndex646
						if buffer[position] != rune('N') {
							goto l645
						}
						position++
					}
				l646:
					{
						position648, tokenIndex648 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l649
						}
						position++
						goto l648
					l649:
						position, tokenIndex = position648, tokenIndex648
						if buffer[position] != rune('Z') {
							goto l645
						}
						position++
					}
				l648:
					{
						position650, tokenIndex650 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l651
						}
						position++
						goto l650
					l651:
						position, tokenIndex = position650, tokenIndex650
						if buffer[position] != rune('C') {
							goto l645
						}
						position++
					}
				l650:
					{
						position652, tokenIndex652 := position, tokenIndex
						if buffer[position] != rune('v') {
							goto l653
						}
						position++
						goto l652
					l653:
						position, tokenIndex = position652, tokenIndex652
						if buffer[position] != rune('V') {
							goto l645
						}
						position++
					}
				l652:
					goto l615
				l645:
					position, tokenIndex = position615, tokenIndex615
					if !_rules[ruleARMVectorRegister]() {
						goto l654
					}
					goto l615
				l654:
					position, tokenIndex = position615, tokenIndex615
					if buffer[position] != rune('{') {
						goto l613
					}
					position++
					{
						position655, tokenIndex655 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l655
						}
						goto l656
					l655:
						position, tokenIndex = position655, tokenIndex655
					}
				l656:
					if !_rules[ruleARMVectorRegister]() {
						goto l613
					}
				l657:
					{
						position658, tokenIndex658 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l658
						}
						position++
						{
							position659, tokenIndex659 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l659
							}
							goto l660
						l659:
							position, tokenIndex = position659, tokenIndex659
						}
					l660:
						if !_rules[ruleARMVectorRegister]() {
							goto l658
						}
						goto l657
					l658:
						position, tokenIndex = position658, tokenIndex658
					}
					{
						position661, tokenIndex661 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l661
						}
						goto l662
					l661:
						position, tokenIndex = position661, tokenIndex661
					}
				l662:
					if buffer[position] != rune('}') {
						goto l613
					}
					position++
					{
						position663, tokenIndex663 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l663
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l663
						}
						position++
						{
							position665, tokenIndex665 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l665
							}
							position++
							goto l666
						l665:
							position, tokenIndex = position665, tokenIndex665
						}
					l666:
						if buffer[position] != rune(']') {
							goto l663
						}
						position++
						goto l664
					l663:
						position, tokenIndex = position663, tokenIndex663
					}
				l664:
				}
			l615:
				add(ruleARMRegister, position614)
			}
			return true
		l613:
			position, tokenIndex = position613, tokenIndex613
			return false
		},
		/* 44 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
		func() bool {
			position667, tokenIndex667 := position, tokenIndex
			{
				position668 := position
				{
					position669, tokenIndex669 := position, tokenIndex
					if buffer[position] != rune('v') {
						goto l670
					}
					position++
					goto l669
				l670:
					position, tokenIndex = position669, tokenIndex669
					if buffer[position] != rune('V') {
						goto l667
					}
					position++
				}
			l669:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l667
				}
				position++
				{
					position671, tokenIndex671 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l671
					}
					position++
					goto l672
				l671:
					position, tokenIndex = position671, tokenIndex671
				}
			l672:
				{
					position673, tokenIndex673 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l673
					}
					position++
				l675:
					{
						position676, tokenIndex676 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l676
						}
						position++
						goto l675
					l676:
						position, tokenIndex = position676, tokenIndex676
					}
					{
						position677, tokenIndex677 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l678
						}
						position++
						goto l677
					l678:
						position, tokenIndex = position677, tokenIndex677
						if buffer[position] != rune('s') {
							goto l679
						}
						position++
						goto l677
					l679:
						position, tokenIndex = position677, tokenIndex677
						if buffer[position] != rune('d') {
							goto l680
						}
						position++
						goto l677
					l680:
						position, tokenIndex = position677, tokenIndex677
						if buffer[position] != rune('h') {
							goto l681
						}
						position++
						goto l677
					l681:
						position, tokenIndex = position677, tokenIndex677
						if buffer[position] != rune('q') {
							goto l673
						}
						position++
					}
				l677:
					{
						position682, tokenIndex682 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l682
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l682
						}
						position++
						{
							position684, tokenIndex684 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l684
							}
							position++
							goto l685
						l684:
							position, tokenIndex = position684, tokenIndex684
						}
					l685:
						if buffer[position] != rune(']') {
							goto l682
						}
						position++
						goto l683
					l682:
						position, tokenIndex = position682, tokenIndex682
					}
				l683:
					goto l674
				l673:
					position, tokenIndex = position673, tokenIndex673
				}
			l674:
				add(ruleARMVectorRegister, position668)
			}
			return true
		l667:
			position, tokenIndex = position667, tokenIndex667
			return false
		},
		/* 45 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position686, tokenIndex686 := position, tokenIndex
			{
				position687 := position
				{
					position688, tokenIndex688 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l689
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l689
					}
					goto l688
				l689:
					position, tokenIndex = position688, tokenIndex688
					if !_rules[ruleSymbolRef]() {
						goto l690
					}
					goto l688
				l690:
					position, tokenIndex = position688, tokenIndex688
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l691
					}
					goto l688
				l691:
					position, tokenIndex = position688, tokenIndex688
				l693:
					{
						position694, tokenIndex694 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l694
						}
						goto l693
					l694:
						position, tokenIndex = position694, tokenIndex694
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l692
					}
					goto l688
				l692:
					position, tokenIndex = position688, tokenIndex688
					if !_rules[ruleSegmentRegister]() {
						goto l695
					}
					if !_rules[ruleOffset]() {
						goto l695
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l695
					}
					goto l688
				l695:
					position, tokenIndex = position688, tokenIndex688
					if !_rules[ruleSegmentRegister]() {
						goto l696
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l696
					}
					goto l688
				l696:
					position, tokenIndex = position688, tokenIndex688
					if !_rules[ruleSegmentRegister]() {
						goto l697
					}
					if !_rules[ruleOffset]() {
						goto l697
					}
					goto l688
				l697:
					position, tokenIndex = position688, tokenIndex688
					if !_rules[ruleARMBaseIndexScale]() {
						goto l698
					}
					goto l688
				l698:
					position, tokenIndex = position688, tokenIndex688
					if !_rules[ruleBaseIndexScale]() {
						goto l686
					}
				}
			l688:
				add(ruleMemoryRef, position687)
			}
			return true
		l686:
			position, tokenIndex = position686, tokenIndex686
			return false
		},
		/* 46 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position699, tokenIndex699 := position, tokenIndex
			{
				position700 := position
				{
					position701, tokenIndex701 := position, tokenIndex
				l703:
					{
						position704, tokenIndex704 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l704
						}
						goto l703
					l704:
						position, tokenIndex = position704, tokenIndex704
					}
					if buffer[position] != rune('+') {
						goto l701
					}
					position++
					goto l702
				l701:
					position, tokenIndex = position701, tokenIndex701
				}
			l702:
				{
					position705, tokenIndex705 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l706
					}
					goto l705
				l706:
					position, tokenIndex = position705, tokenIndex705
					if !_rules[ruleSymbolName]() {
						goto l699
					}
				}
			l705:
			l707:
				{
					position708, tokenIndex708 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l708
					}
					goto l707
				l708:
					position, tokenIndex = position708, tokenIndex708
				}
				{
					position709, tokenIndex709 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l709
					}
					position++
					if !_rules[ruleSection]() {
						goto l709
					}
				l711:
					{
						position712, tokenIndex712 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l712
						}
						goto l711
					l712:
						position, tokenIndex = position712, tokenIndex712
					}
					goto l710
				l709:
					position, tokenIndex = position709, tokenIndex709
				}
			l710:
				add(ruleSymbolRef, position700)
			}
			return true
		l699:
			position, tokenIndex = position699, tokenIndex699
			return false
		},
		/* 47 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position713, tokenIndex713 := position, tokenIndex
			{
				position714 := position
				if buffer[position] != rune(':') {
					goto l713
				}
				position++
				{
					position715, tokenIndex715 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l716
					}
					position++
					goto l715
				l716:
					position, tokenIndex = position715, tokenIndex715
					if buffer[position] != rune('L') {
						goto l713
					}
					position++
				}
			l715:
				{
					position717, tokenIndex717 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l718
					}
					position++
					goto l717
				l718:
					position, tokenIndex = position717, tokenIndex717
					if buffer[position] != rune('O') {
						goto l713
					}
					position++
				}
			l717:
				if buffer[position] != rune('1') {
					goto l713
				}
				position++
				if buffer[position] != rune('2') {
					goto l713
				}
				position++
				if buffer[position] != rune(':') {
					goto l713
				}
				position++
				{
					position719, tokenIndex719 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l720
					}
					goto l719
				l720:
					position, tokenIndex = position719, tokenIndex719
					if !_rules[ruleSymbolName]() {
						goto l713
					}
				}
			l719:
				{
					position721, tokenIndex721 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l721
					}
					goto l722
				l721:
					position, tokenIndex = position721, tokenIndex721
				}
			l722:
				add(ruleLow12BitsSymbolRef, position714)
			}
			return true
		l713:
			position, tokenIndex = position713, tokenIndex713
			return false
		},
		/* 48 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position723, tokenIndex723 := position, tokenIndex
			{
				position724 := position
				if buffer[position] != rune('[') {
					goto l723
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l723
				}
				{
					position725, tokenIndex725 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l725
					}
					position++
					{
						position727, tokenIndex727 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l727
						}
						goto l728
					l727:
						position, tokenIndex = position727, tokenIndex727
					}
				l728:
					{
						position729, tokenIndex729 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l730
						}
						position++
						if !_rules[ruleOffset]() {
							goto l730
						}
						{
							position731, tokenIndex731 := position, tokenIndex
							{
								position733, tokenIndex733 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l734
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l734
								}
								position++
							l735:
								{
									position736, tokenIndex736 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l736
									}
									position++
									goto l735
								l736:
									position, tokenIndex = position736, tokenIndex736
								}
								goto l733
							l734:
								position, tokenIndex = position733, tokenIndex733
								if buffer[position] != rune('*') {
									goto l737
								}
								position++
								if buffer[position] != rune('(') {
									goto l737
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l737
								}
								position++
							l738:
								{
									position739, tokenIndex739 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l739
									}
									position++
									goto l738
								l739:
									position, tokenIndex = position739, tokenIndex739
								}
								if !_rules[ruleOperator]() {
									goto l737
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l737
								}
								position++
							l740:
								{
									position741, tokenIndex741 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l741
									}
									position++
									goto l740
								l741:
									position, tokenIndex = position741, tokenIndex741
								}
								if buffer[position] != rune(')') {
									goto l737
								}
								position++
								goto l733
							l737:
								position, tokenIndex = position733, tokenIndex733
							l742:
								{
									position743, tokenIndex743 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l743
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l743
									}
									position++
								l744:
									{
										position745, tokenIndex745 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l745
										}
										position++
										goto l744
									l745:
										position, tokenIndex = position745, tokenIndex745
									}
									goto l742
								l743:
									position, tokenIndex = position743, tokenIndex743
								}
							}
						l733:
							goto l732

							position, tokenIndex = position731, tokenIndex731
						}
					l732:
						goto l729
					l730:
						position, tokenIndex = position729, tokenIndex729
						if !_rules[ruleARMGOTLow12]() {
							goto l746
						}
						goto l729
					l746:
						position, tokenIndex = position729, tokenIndex729
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l747
						}
						goto l729
					l747:
						position, tokenIndex = position729, tokenIndex729
						if !_rules[ruleARMRegister]() {
							goto l725
						}
					}
				l729:
					{
						position748, tokenIndex748 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l748
						}
						position++
						{
							position750, tokenIndex750 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l750
							}
							goto l751
						l750:
							position, tokenIndex = position750, tokenIndex750
						}
					l751:
						if !_rules[ruleARMConstantTweak]() {
							goto l748
						}
						goto l749
					l748:
						position, tokenIndex = position748, tokenIndex748
					}
				l749:
					goto l726
				l725:
					position, tokenIndex = position725, tokenIndex725
				}
			l726:
				if buffer[position] != rune(']') {
					goto l723
				}
				position++
				{
					position752, tokenIndex752 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l752
					}
					goto l753
				l752:
					position, tokenIndex = position752, tokenIndex752
				}
			l753:
				add(ruleARMBaseIndexScale, position724)
			}
			return true
		l723:
			position, tokenIndex = position723, tokenIndex723
			return false
		},
		/* 49 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position754, tokenIndex754 := position, tokenIndex
			{
				position755 := position
				if buffer[position] != rune(':') {
					goto l754
				}
				position++
				{
					position756, tokenIndex756 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l757
					}
					position++
					goto l756
				l757:
					position, tokenIndex = position756, tokenIndex756
					if buffer[position] != rune('G') {
						goto l754
					}
					position++
				}
			l756:
				{
					position758, tokenIndex758 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l759
					}
					position++
					goto l758
				l759:
					position, tokenIndex = position758, tokenIndex758
					if buffer[position] != rune('O') {
						goto l754
					}
					position++
				}
			l758:
				{
					position760, tokenIndex760 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l761
					}
					position++
					goto l760
				l761:
					position, tokenIndex = position760, tokenIndex760
					if buffer[position] != rune('T') {
						goto l754
					}
					position++
				}
			l760:
				if buffer[position] != rune('_') {
					goto l754
				}
				position++
				{
					position762, tokenIndex762 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l763
					}
					position++
					goto l762
				l763:
					position, tokenIndex = position762, tokenIndex762
					if buffer[position] != rune('L') {
						goto l754
					}
					position++
				}
			l762:
				{
					position764, tokenIndex764 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l765
					}
					position++
					goto l764
				l765:
					position, tokenIndex = position764, tokenIndex764
					if buffer[position] != rune('O') {
						goto l754
					}
					position++
				}
			l764:
				if buffer[position] != rune('1') {
					goto l754
				}
				position++
				if buffer[position] != rune('2') {
					goto l754
				}
				position++
				if buffer[position] != rune(':') {
					goto l754
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l754
				}
				add(ruleARMGOTLow12, position755)
			}
			return true
		l754:
			position, tokenIndex = position754, tokenIndex754
			return false
		},
		/* 50 ARMPostincrement <- <'!'> */
		func() bool {
			position766, tokenIndex766 := position, tokenIndex
			{
				position767 := position
				if buffer[position] != rune('!') {
					goto l766
				}
				position++
				add(ruleARMPostincrement, position767)
			}
			return true
		l766:
			position, tokenIndex = position766, tokenIndex766
			return false
		},
		/* 51 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position768, tokenIndex768 := position, tokenIndex
			{
				position769 := position
				if buffer[position] != rune('(') {
					goto l768
				}
				position++
				{
					position770, tokenIndex770 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l770
					}
					goto l771
				l770:
					position, tokenIndex = position770, tokenIndex770
				}
			l771:
				{
					position772, tokenIndex772 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l772
					}
					goto l773
				l772:
					position, tokenIndex = position772, tokenIndex772
				}
			l773:
				{
					position774, tokenIndex774 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l774
					}
					position++
					{
						position776, tokenIndex776 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l776
						}
						goto l777
					l776:
						position, tokenIndex = position776, tokenIndex776
					}
				l777:
					if !_rules[ruleRegisterOrConstant]() {
						goto l774
					}
					{
						position778, tokenIndex778 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l778
						}
						goto l779
					l778:
						position, tokenIndex = position778, tokenIndex778
					}
				l779:
					{
						position780, tokenIndex780 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l780
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l780
						}
						position++
					l782:
						{
							position783, tokenIndex783 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l783
							}
							position++
							goto l782
						l783:
							position, tokenIndex = position783, tokenIndex783
						}
						goto l781
					l780:
						position, tokenIndex = position780, tokenIndex780
					}
				l781:
					goto l775
				l774:
					position, tokenIndex = position774, tokenIndex774
				}
			l775:
				if buffer[position] != rune(')') {
					goto l768
				}
				position++
				add(ruleBaseIndexScale, position769)
			}
			return true
		l768:
			position, tokenIndex = position768, tokenIndex768
			return false
		},
		/* 52 Operator <- <('+' / '-')> */
		func() bool {
			position784, tokenIndex784 := position, tokenIndex
			{
				position785 := position
				{
					position786, tokenIndex786 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l787
					}
					position++
					goto l786
				l787:
					position, tokenIndex = position786, tokenIndex786
					if buffer[position] != rune('-') {
						goto l784
					}
					position++
				}
			l786:
				add(ruleOperator, position785)
			}
			return true
		l784:
			position, tokenIndex = position784, tokenIndex784
			return false
		},
		/* 53 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position788, tokenIndex788 := position, tokenIndex
			{
				position789 := position
				{
					position790, tokenIndex790 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l790
					}
					position++
					goto l791
				l790:
					position, tokenIndex = position790, tokenIndex790
				}
			l791:
				{
					position792, tokenIndex792 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l792
					}
					position++
					goto l793
				l792:
					position, tokenIndex = position792, tokenIndex792
				}
			l793:
				{
					position794, tokenIndex794 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l795
					}
					position++
					{
						position796, tokenIndex796 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l797
						}
						position++
						goto l796
					l797:
						position, tokenIndex = position796, tokenIndex796
						if buffer[position] != rune('B') {
							goto l795
						}
						position++
					}
				l796:
					{
						position800, tokenIndex800 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l801
						}
						position++
						goto l800
					l801:
						position, tokenIndex = position800, tokenIndex800
						if buffer[position] != rune('1') {
							goto l795
						}
						position++
					}
				l800:
				l798:
					{
						position799, tokenIndex799 := position, tokenIndex
						{
							position802, tokenIndex802 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l803
							}
							position++
							goto l802
						l803:
							position, tokenIndex = position802, tokenIndex802
							if buffer[position] != rune('1') {
								goto l799
							}
							position++
						}
					l802:
						goto l798
					l799:
						position, tokenIndex = position799, tokenIndex799
					}
					goto l794
				l795:
					position, tokenIndex = position794, tokenIndex794
					if buffer[position] != rune('0') {
						goto l804
					}
					position++
					{
						position805, tokenIndex805 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l806
						}
						position++
						goto l805
					l806:
						position, tokenIndex = position805, tokenIndex805
						if buffer[position] != rune('X') {
							goto l804
						}
						position++
					}
				l805:
					{
						position809, tokenIndex809 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l810
						}
						position++
						goto l809
					l810:
						position, tokenIndex = position809, tokenIndex809
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l811
						}
						position++
						goto l809
					l811:
						position, tokenIndex = position809, tokenIndex809
						{
							position812, tokenIndex812 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l813
							}
							position++
							goto l812
						l813:
							position, tokenIndex = position812, tokenIndex812
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l804
							}
							position++
						}
					l812:
					}
				l809:
				l807:
					{
						position808, tokenIndex808 := position, tokenIndex
						{
							position814, tokenIndex814 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l815
							}
							position++
							goto l814
						l815:
							position, tokenIndex = position814, tokenIndex814
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l816
							}
							position++
							goto l814
						l816:
							position, tokenIndex = position814, tokenIndex814
							{
								position817, tokenIndex817 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l818
								}
								position++
								goto l817
							l818:
								position, tokenIndex = position817, tokenIndex817
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l808
								}
								position++
							}
						l817:
						}
					l814:
						goto l807
					l808:
						position, tokenIndex = position808, tokenIndex808
					}
					goto l794
				l804:
					position, tokenIndex = position794, tokenIndex794
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l788
					}
					position++
				l819:
					{
						position820, tokenIndex820 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l820
						}
						position++
						goto l819
					l820:
						position, tokenIndex = position820, tokenIndex820
					}
				}
			l794:
				add(ruleOffset, position789)
			}
			return true
		l788:
			position, tokenIndex = position788, tokenIndex788
			return false
		},
		/* 54 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position821, tokenIndex821 := position, tokenIndex
			{
				position822 := position
				{
					position825, tokenIndex825 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l826
					}
					position++
					goto l825
				l826:
					position, tokenIndex = position825, tokenIndex825
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l827
					}
					position++
					goto l825
				l827:
					position, tokenIndex = position825, tokenIndex825
					if buffer[position] != rune('@') {
						goto l821
					}
					position++
				}
			l825:
			l823:
				{
					position824, tokenIndex824 := position, tokenIndex
					{
						position828, tokenIndex828 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l829
						}
						position++
						goto l828
					l829:
						position, tokenIndex = position828, tokenIndex828
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l830
						}
						position++
						goto l828
					l830:
						position, tokenIndex = position828, tokenIndex828
						if buffer[position] != rune('@') {
							goto l824
						}
						position++
					}
				l828:
					goto l823
				l824:
					position, tokenIndex = position824, tokenIndex824
				}
				add(ruleSection, position822)
			}
			return true
		l821:
			position, tokenIndex = position821, tokenIndex821
			return false
		},
		/* 55 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position831, tokenIndex831 := position, tokenIndex
			{
				position832 := position
				if buffer[position] != rune('%') {
					goto l831
				}
				position++
				{
					position833, tokenIndex833 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l834
					}
					position++
					goto l833
				l834:
					position, tokenIndex = position833, tokenIndex833
					if buffer[position] != rune('s') {
						goto l831
					}
					position++
				}
			l833:
				if buffer[position] != rune('s') {
					goto l831
				}
				position++
				if buffer[position] != rune(':') {
					goto l831
				}
				position++
				add(ruleSegmentRegister, position832)
			}
			return true
		l831:
			position, tokenIndex = position831, tokenIndex831
			return false
		},
	}
	p.rules = _rules
	return nil
}
