package main

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
	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",
	"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  [52]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')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' '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('l') {
							goto l172
						}
						position++
						goto l171
					l172:
						position, tokenIndex = position171, tokenIndex171
						if buffer[position] != rune('L') {
							goto l170
						}
						position++
					}
				l171:
					{
						position173, tokenIndex173 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l174
						}
						position++
						goto l173
					l174:
						position, tokenIndex = position173, tokenIndex173
						if buffer[position] != rune('O') {
							goto l170
						}
						position++
					}
				l173:
					{
						position175, tokenIndex175 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l176
						}
						position++
						goto l175
					l176:
						position, tokenIndex = position175, tokenIndex175
						if buffer[position] != rune('N') {
							goto l170
						}
						position++
					}
				l175:
					{
						position177, tokenIndex177 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l178
						}
						position++
						goto l177
					l178:
						position, tokenIndex = position177, tokenIndex177
						if buffer[position] != rune('G') {
							goto l170
						}
						position++
					}
				l177:
					goto l149
				l170:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l179
					}
					position++
					{
						position180, tokenIndex180 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l181
						}
						position++
						goto l180
					l181:
						position, tokenIndex = position180, tokenIndex180
						if buffer[position] != rune('S') {
							goto l179
						}
						position++
					}
				l180:
					{
						position182, tokenIndex182 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l183
						}
						position++
						goto l182
					l183:
						position, tokenIndex = position182, tokenIndex182
						if buffer[position] != rune('E') {
							goto l179
						}
						position++
					}
				l182:
					{
						position184, tokenIndex184 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l185
						}
						position++
						goto l184
					l185:
						position, tokenIndex = position184, tokenIndex184
						if buffer[position] != rune('T') {
							goto l179
						}
						position++
					}
				l184:
					goto l149
				l179:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l186
					}
					position++
					if buffer[position] != rune('8') {
						goto l186
					}
					position++
					{
						position187, tokenIndex187 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l188
						}
						position++
						goto l187
					l188:
						position, tokenIndex = position187, tokenIndex187
						if buffer[position] != rune('B') {
							goto l186
						}
						position++
					}
				l187:
					{
						position189, tokenIndex189 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l190
						}
						position++
						goto l189
					l190:
						position, tokenIndex = position189, tokenIndex189
						if buffer[position] != rune('Y') {
							goto l186
						}
						position++
					}
				l189:
					{
						position191, tokenIndex191 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l192
						}
						position++
						goto l191
					l192:
						position, tokenIndex = position191, tokenIndex191
						if buffer[position] != rune('T') {
							goto l186
						}
						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 l186
						}
						position++
					}
				l193:
					goto l149
				l186:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l195
					}
					position++
					if buffer[position] != rune('4') {
						goto l195
					}
					position++
					{
						position196, tokenIndex196 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l197
						}
						position++
						goto l196
					l197:
						position, tokenIndex = position196, tokenIndex196
						if buffer[position] != rune('B') {
							goto l195
						}
						position++
					}
				l196:
					{
						position198, tokenIndex198 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l199
						}
						position++
						goto l198
					l199:
						position, tokenIndex = position198, tokenIndex198
						if buffer[position] != rune('Y') {
							goto l195
						}
						position++
					}
				l198:
					{
						position200, tokenIndex200 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l201
						}
						position++
						goto l200
					l201:
						position, tokenIndex = position200, tokenIndex200
						if buffer[position] != rune('T') {
							goto l195
						}
						position++
					}
				l200:
					{
						position202, tokenIndex202 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l203
						}
						position++
						goto l202
					l203:
						position, tokenIndex = position202, tokenIndex202
						if buffer[position] != rune('E') {
							goto l195
						}
						position++
					}
				l202:
					goto l149
				l195:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l204
					}
					position++
					{
						position205, tokenIndex205 := position, tokenIndex
						if buffer[position] != rune('q') {
							goto l206
						}
						position++
						goto l205
					l206:
						position, tokenIndex = position205, tokenIndex205
						if buffer[position] != rune('Q') {
							goto l204
						}
						position++
					}
				l205:
					{
						position207, tokenIndex207 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l208
						}
						position++
						goto l207
					l208:
						position, tokenIndex = position207, tokenIndex207
						if buffer[position] != rune('U') {
							goto l204
						}
						position++
					}
				l207:
					{
						position209, tokenIndex209 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l210
						}
						position++
						goto l209
					l210:
						position, tokenIndex = position209, tokenIndex209
						if buffer[position] != rune('A') {
							goto l204
						}
						position++
					}
				l209:
					{
						position211, tokenIndex211 := position, tokenIndex
						if buffer[position] != rune('d') {
							goto l212
						}
						position++
						goto l211
					l212:
						position, tokenIndex = position211, tokenIndex211
						if buffer[position] != rune('D') {
							goto l204
						}
						position++
					}
				l211:
					goto l149
				l204:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l213
					}
					position++
					{
						position214, tokenIndex214 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l215
						}
						position++
						goto l214
					l215:
						position, tokenIndex = position214, tokenIndex214
						if buffer[position] != rune('T') {
							goto l213
						}
						position++
					}
				l214:
					{
						position216, tokenIndex216 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l217
						}
						position++
						goto l216
					l217:
						position, tokenIndex = position216, tokenIndex216
						if buffer[position] != rune('C') {
							goto l213
						}
						position++
					}
				l216:
					goto l149
				l213:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l218
					}
					position++
					{
						position219, tokenIndex219 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l220
						}
						position++
						goto l219
					l220:
						position, tokenIndex = position219, tokenIndex219
						if buffer[position] != rune('L') {
							goto l218
						}
						position++
					}
				l219:
					{
						position221, tokenIndex221 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l222
						}
						position++
						goto l221
					l222:
						position, tokenIndex = position221, tokenIndex221
						if buffer[position] != rune('O') {
							goto l218
						}
						position++
					}
				l221:
					{
						position223, tokenIndex223 := position, tokenIndex
						if buffer[position] != rune('c') {
							goto l224
						}
						position++
						goto l223
					l224:
						position, tokenIndex = position223, tokenIndex223
						if buffer[position] != rune('C') {
							goto l218
						}
						position++
					}
				l223:
					{
						position225, tokenIndex225 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l226
						}
						position++
						goto l225
					l226:
						position, tokenIndex = position225, tokenIndex225
						if buffer[position] != rune('A') {
							goto l218
						}
						position++
					}
				l225:
					{
						position227, tokenIndex227 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l228
						}
						position++
						goto l227
					l228:
						position, tokenIndex = position227, tokenIndex227
						if buffer[position] != rune('L') {
							goto l218
						}
						position++
					}
				l227:
					{
						position229, tokenIndex229 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l230
						}
						position++
						goto l229
					l230:
						position, tokenIndex = position229, tokenIndex229
						if buffer[position] != rune('E') {
							goto l218
						}
						position++
					}
				l229:
					{
						position231, tokenIndex231 := position, tokenIndex
						if buffer[position] != rune('n') {
							goto l232
						}
						position++
						goto l231
					l232:
						position, tokenIndex = position231, tokenIndex231
						if buffer[position] != rune('N') {
							goto l218
						}
						position++
					}
				l231:
					{
						position233, tokenIndex233 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l234
						}
						position++
						goto l233
					l234:
						position, tokenIndex = position233, tokenIndex233
						if buffer[position] != rune('T') {
							goto l218
						}
						position++
					}
				l233:
					{
						position235, tokenIndex235 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l236
						}
						position++
						goto l235
					l236:
						position, tokenIndex = position235, tokenIndex235
						if buffer[position] != rune('R') {
							goto l218
						}
						position++
					}
				l235:
					{
						position237, tokenIndex237 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l238
						}
						position++
						goto l237
					l238:
						position, tokenIndex = position237, tokenIndex237
						if buffer[position] != rune('Y') {
							goto l218
						}
						position++
					}
				l237:
					goto l149
				l218:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l239
					}
					position++
					{
						position240, tokenIndex240 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l241
						}
						position++
						goto l240
					l241:
						position, tokenIndex = position240, tokenIndex240
						if buffer[position] != rune('S') {
							goto l239
						}
						position++
					}
				l240:
					{
						position242, tokenIndex242 := position, tokenIndex
						if buffer[position] != rune('i') {
							goto l243
						}
						position++
						goto l242
					l243:
						position, tokenIndex = position242, tokenIndex242
						if buffer[position] != rune('I') {
							goto l239
						}
						position++
					}
				l242:
					{
						position244, tokenIndex244 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l245
						}
						position++
						goto l244
					l245:
						position, tokenIndex = position244, tokenIndex244
						if buffer[position] != rune('Z') {
							goto l239
						}
						position++
					}
				l244:
					{
						position246, tokenIndex246 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l247
						}
						position++
						goto l246
					l247:
						position, tokenIndex = position246, tokenIndex246
						if buffer[position] != rune('E') {
							goto l239
						}
						position++
					}
				l246:
					goto l149
				l239:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l248
					}
					position++
					{
						position249, tokenIndex249 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l250
						}
						position++
						goto l249
					l250:
						position, tokenIndex = position249, tokenIndex249
						if buffer[position] != rune('T') {
							goto l248
						}
						position++
					}
				l249:
					{
						position251, tokenIndex251 := position, tokenIndex
						if buffer[position] != rune('y') {
							goto l252
						}
						position++
						goto l251
					l252:
						position, tokenIndex = position251, tokenIndex251
						if buffer[position] != rune('Y') {
							goto l248
						}
						position++
					}
				l251:
					{
						position253, tokenIndex253 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l254
						}
						position++
						goto l253
					l254:
						position, tokenIndex = position253, tokenIndex253
						if buffer[position] != rune('P') {
							goto l248
						}
						position++
					}
				l253:
					{
						position255, tokenIndex255 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l256
						}
						position++
						goto l255
					l256:
						position, tokenIndex = position255, tokenIndex255
						if buffer[position] != rune('E') {
							goto l248
						}
						position++
					}
				l255:
					goto l149
				l248:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l257
					}
					position++
					{
						position258, tokenIndex258 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l259
						}
						position++
						goto l258
					l259:
						position, tokenIndex = position258, tokenIndex258
						if buffer[position] != rune('U') {
							goto l257
						}
						position++
					}
				l258:
					{
						position260, tokenIndex260 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l261
						}
						position++
						goto l260
					l261:
						position, tokenIndex = position260, tokenIndex260
						if buffer[position] != rune('L') {
							goto l257
						}
						position++
					}
				l260:
					{
						position262, tokenIndex262 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l263
						}
						position++
						goto l262
					l263:
						position, tokenIndex = position262, tokenIndex262
						if buffer[position] != rune('E') {
							goto l257
						}
						position++
					}
				l262:
					{
						position264, tokenIndex264 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l265
						}
						position++
						goto l264
					l265:
						position, tokenIndex = position264, tokenIndex264
						if buffer[position] != rune('B') {
							goto l257
						}
						position++
					}
				l264:
					if buffer[position] != rune('1') {
						goto l257
					}
					position++
					if buffer[position] != rune('2') {
						goto l257
					}
					position++
					if buffer[position] != rune('8') {
						goto l257
					}
					position++
					goto l149
				l257:
					position, tokenIndex = position149, tokenIndex149
					if buffer[position] != rune('.') {
						goto l147
					}
					position++
					{
						position266, tokenIndex266 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l267
						}
						position++
						goto l266
					l267:
						position, tokenIndex = position266, tokenIndex266
						if buffer[position] != rune('S') {
							goto l147
						}
						position++
					}
				l266:
					{
						position268, tokenIndex268 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l269
						}
						position++
						goto l268
					l269:
						position, tokenIndex = position268, tokenIndex268
						if buffer[position] != rune('L') {
							goto l147
						}
						position++
					}
				l268:
					{
						position270, tokenIndex270 := position, tokenIndex
						if buffer[position] != rune('e') {
							goto l271
						}
						position++
						goto l270
					l271:
						position, tokenIndex = position270, tokenIndex270
						if buffer[position] != rune('E') {
							goto l147
						}
						position++
					}
				l270:
					{
						position272, tokenIndex272 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l273
						}
						position++
						goto l272
					l273:
						position, tokenIndex = position272, tokenIndex272
						if buffer[position] != rune('B') {
							goto l147
						}
						position++
					}
				l272:
					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 {
			position274, tokenIndex274 := position, tokenIndex
			{
				position275 := position
				if !_rules[ruleSymbolArg]() {
					goto l274
				}
			l276:
				{
					position277, tokenIndex277 := position, tokenIndex
					{
						position278, tokenIndex278 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l278
						}
						goto l279
					l278:
						position, tokenIndex = position278, tokenIndex278
					}
				l279:
					if buffer[position] != rune(',') {
						goto l277
					}
					position++
					{
						position280, tokenIndex280 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l280
						}
						goto l281
					l280:
						position, tokenIndex = position280, tokenIndex280
					}
				l281:
					if !_rules[ruleSymbolArg]() {
						goto l277
					}
					goto l276
				l277:
					position, tokenIndex = position277, tokenIndex277
				}
				add(ruleSymbolArgs, position275)
			}
			return true
		l274:
			position, tokenIndex = position274, tokenIndex274
			return false
		},
		/* 15 SymbolArg <- <(Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?))> */
		func() bool {
			position282, tokenIndex282 := position, tokenIndex
			{
				position283 := position
				{
					position284, tokenIndex284 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l285
					}
					goto l284
				l285:
					position, tokenIndex = position284, tokenIndex284
					if !_rules[ruleSymbolType]() {
						goto l286
					}
					goto l284
				l286:
					position, tokenIndex = position284, tokenIndex284
					{
						position288, tokenIndex288 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l289
						}
						goto l288
					l289:
						position, tokenIndex = position288, tokenIndex288
						if !_rules[ruleLocalSymbol]() {
							goto l290
						}
						goto l288
					l290:
						position, tokenIndex = position288, tokenIndex288
						if !_rules[ruleSymbolName]() {
							goto l291
						}
						goto l288
					l291:
						position, tokenIndex = position288, tokenIndex288
						if !_rules[ruleDot]() {
							goto l287
						}
					}
				l288:
					{
						position292, tokenIndex292 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l292
						}
						goto l293
					l292:
						position, tokenIndex = position292, tokenIndex292
					}
				l293:
					if !_rules[ruleOperator]() {
						goto l287
					}
					{
						position294, tokenIndex294 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l294
						}
						goto l295
					l294:
						position, tokenIndex = position294, tokenIndex294
					}
				l295:
					{
						position296, tokenIndex296 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l297
						}
						goto l296
					l297:
						position, tokenIndex = position296, tokenIndex296
						if !_rules[ruleLocalSymbol]() {
							goto l298
						}
						goto l296
					l298:
						position, tokenIndex = position296, tokenIndex296
						if !_rules[ruleSymbolName]() {
							goto l287
						}
					}
				l296:
					goto l284
				l287:
					position, tokenIndex = position284, tokenIndex284
					if !_rules[ruleLocalSymbol]() {
						goto l299
					}
					{
						position300, tokenIndex300 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l300
						}
						goto l301
					l300:
						position, tokenIndex = position300, tokenIndex300
					}
				l301:
					goto l284
				l299:
					position, tokenIndex = position284, tokenIndex284
					if !_rules[ruleSymbolName]() {
						goto l302
					}
					if !_rules[ruleOffset]() {
						goto l302
					}
					goto l284
				l302:
					position, tokenIndex = position284, tokenIndex284
					if !_rules[ruleSymbolName]() {
						goto l282
					}
					{
						position303, tokenIndex303 := position, tokenIndex
						if !_rules[ruleTCMarker]() {
							goto l303
						}
						goto l304
					l303:
						position, tokenIndex = position303, tokenIndex303
					}
				l304:
				}
			l284:
				add(ruleSymbolArg, position283)
			}
			return true
		l282:
			position, tokenIndex = position282, tokenIndex282
			return false
		},
		/* 16 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
		func() bool {
			position305, tokenIndex305 := position, tokenIndex
			{
				position306 := position
				{
					position307, tokenIndex307 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l308
					}
					position++
					goto l307
				l308:
					position, tokenIndex = position307, tokenIndex307
					if buffer[position] != rune('%') {
						goto l305
					}
					position++
				}
			l307:
				{
					position309, tokenIndex309 := position, tokenIndex
					if buffer[position] != rune('f') {
						goto l310
					}
					position++
					if buffer[position] != rune('u') {
						goto l310
					}
					position++
					if buffer[position] != rune('n') {
						goto l310
					}
					position++
					if buffer[position] != rune('c') {
						goto l310
					}
					position++
					if buffer[position] != rune('t') {
						goto l310
					}
					position++
					if buffer[position] != rune('i') {
						goto l310
					}
					position++
					if buffer[position] != rune('o') {
						goto l310
					}
					position++
					if buffer[position] != rune('n') {
						goto l310
					}
					position++
					goto l309
				l310:
					position, tokenIndex = position309, tokenIndex309
					if buffer[position] != rune('o') {
						goto l305
					}
					position++
					if buffer[position] != rune('b') {
						goto l305
					}
					position++
					if buffer[position] != rune('j') {
						goto l305
					}
					position++
					if buffer[position] != rune('e') {
						goto l305
					}
					position++
					if buffer[position] != rune('c') {
						goto l305
					}
					position++
					if buffer[position] != rune('t') {
						goto l305
					}
					position++
				}
			l309:
				add(ruleSymbolType, position306)
			}
			return true
		l305:
			position, tokenIndex = position305, tokenIndex305
			return false
		},
		/* 17 Dot <- <'.'> */
		func() bool {
			position311, tokenIndex311 := position, tokenIndex
			{
				position312 := position
				if buffer[position] != rune('.') {
					goto l311
				}
				position++
				add(ruleDot, position312)
			}
			return true
		l311:
			position, tokenIndex = position311, tokenIndex311
			return false
		},
		/* 18 TCMarker <- <('[' 'T' 'C' ']')> */
		func() bool {
			position313, tokenIndex313 := position, tokenIndex
			{
				position314 := position
				if buffer[position] != rune('[') {
					goto l313
				}
				position++
				if buffer[position] != rune('T') {
					goto l313
				}
				position++
				if buffer[position] != rune('C') {
					goto l313
				}
				position++
				if buffer[position] != rune(']') {
					goto l313
				}
				position++
				add(ruleTCMarker, position314)
			}
			return true
		l313:
			position, tokenIndex = position313, tokenIndex313
			return false
		},
		/* 19 EscapedChar <- <('\\' .)> */
		func() bool {
			position315, tokenIndex315 := position, tokenIndex
			{
				position316 := position
				if buffer[position] != rune('\\') {
					goto l315
				}
				position++
				if !matchDot() {
					goto l315
				}
				add(ruleEscapedChar, position316)
			}
			return true
		l315:
			position, tokenIndex = position315, tokenIndex315
			return false
		},
		/* 20 WS <- <(' ' / '\t')+> */
		func() bool {
			position317, tokenIndex317 := position, tokenIndex
			{
				position318 := position
				{
					position321, tokenIndex321 := position, tokenIndex
					if buffer[position] != rune(' ') {
						goto l322
					}
					position++
					goto l321
				l322:
					position, tokenIndex = position321, tokenIndex321
					if buffer[position] != rune('\t') {
						goto l317
					}
					position++
				}
			l321:
			l319:
				{
					position320, tokenIndex320 := position, tokenIndex
					{
						position323, tokenIndex323 := position, tokenIndex
						if buffer[position] != rune(' ') {
							goto l324
						}
						position++
						goto l323
					l324:
						position, tokenIndex = position323, tokenIndex323
						if buffer[position] != rune('\t') {
							goto l320
						}
						position++
					}
				l323:
					goto l319
				l320:
					position, tokenIndex = position320, tokenIndex320
				}
				add(ruleWS, position318)
			}
			return true
		l317:
			position, tokenIndex = position317, tokenIndex317
			return false
		},
		/* 21 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
		func() bool {
			position325, tokenIndex325 := position, tokenIndex
			{
				position326 := position
				{
					position327, tokenIndex327 := position, tokenIndex
					if buffer[position] != rune('/') {
						goto l328
					}
					position++
					if buffer[position] != rune('/') {
						goto l328
					}
					position++
					goto l327
				l328:
					position, tokenIndex = position327, tokenIndex327
					if buffer[position] != rune('#') {
						goto l325
					}
					position++
				}
			l327:
			l329:
				{
					position330, tokenIndex330 := position, tokenIndex
					{
						position331, tokenIndex331 := position, tokenIndex
						if buffer[position] != rune('\n') {
							goto l331
						}
						position++
						goto l330
					l331:
						position, tokenIndex = position331, tokenIndex331
					}
					if !matchDot() {
						goto l330
					}
					goto l329
				l330:
					position, tokenIndex = position330, tokenIndex330
				}
				add(ruleComment, position326)
			}
			return true
		l325:
			position, tokenIndex = position325, tokenIndex325
			return false
		},
		/* 22 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
		func() bool {
			position332, tokenIndex332 := position, tokenIndex
			{
				position333 := position
				{
					position334, tokenIndex334 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l335
					}
					goto l334
				l335:
					position, tokenIndex = position334, tokenIndex334
					if !_rules[ruleLocalLabel]() {
						goto l336
					}
					goto l334
				l336:
					position, tokenIndex = position334, tokenIndex334
					if !_rules[ruleSymbolName]() {
						goto l332
					}
				}
			l334:
				if buffer[position] != rune(':') {
					goto l332
				}
				position++
				add(ruleLabel, position333)
			}
			return true
		l332:
			position, tokenIndex = position332, tokenIndex332
			return false
		},
		/* 23 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
		func() bool {
			position337, tokenIndex337 := position, tokenIndex
			{
				position338 := position
				{
					position339, tokenIndex339 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l340
					}
					position++
					goto l339
				l340:
					position, tokenIndex = position339, tokenIndex339
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l341
					}
					position++
					goto l339
				l341:
					position, tokenIndex = position339, tokenIndex339
					if buffer[position] != rune('.') {
						goto l342
					}
					position++
					goto l339
				l342:
					position, tokenIndex = position339, tokenIndex339
					if buffer[position] != rune('_') {
						goto l337
					}
					position++
				}
			l339:
			l343:
				{
					position344, tokenIndex344 := position, tokenIndex
					{
						position345, tokenIndex345 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l346
						}
						position++
						goto l345
					l346:
						position, tokenIndex = position345, tokenIndex345
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l347
						}
						position++
						goto l345
					l347:
						position, tokenIndex = position345, tokenIndex345
						if buffer[position] != rune('.') {
							goto l348
						}
						position++
						goto l345
					l348:
						position, tokenIndex = position345, tokenIndex345
						{
							position350, tokenIndex350 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l351
							}
							position++
							goto l350
						l351:
							position, tokenIndex = position350, tokenIndex350
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l349
							}
							position++
						}
					l350:
						goto l345
					l349:
						position, tokenIndex = position345, tokenIndex345
						if buffer[position] != rune('$') {
							goto l352
						}
						position++
						goto l345
					l352:
						position, tokenIndex = position345, tokenIndex345
						if buffer[position] != rune('_') {
							goto l344
						}
						position++
					}
				l345:
					goto l343
				l344:
					position, tokenIndex = position344, tokenIndex344
				}
				add(ruleSymbolName, position338)
			}
			return true
		l337:
			position, tokenIndex = position337, tokenIndex337
			return false
		},
		/* 24 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
		func() bool {
			position353, tokenIndex353 := position, tokenIndex
			{
				position354 := position
				if buffer[position] != rune('.') {
					goto l353
				}
				position++
				if buffer[position] != rune('L') {
					goto l353
				}
				position++
				{
					position357, tokenIndex357 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l358
					}
					position++
					goto l357
				l358:
					position, tokenIndex = position357, tokenIndex357
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l359
					}
					position++
					goto l357
				l359:
					position, tokenIndex = position357, tokenIndex357
					{
						position361, tokenIndex361 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l362
						}
						position++
						goto l361
					l362:
						position, tokenIndex = position361, tokenIndex361
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l360
						}
						position++
					}
				l361:
					goto l357
				l360:
					position, tokenIndex = position357, tokenIndex357
					if buffer[position] != rune('.') {
						goto l363
					}
					position++
					goto l357
				l363:
					position, tokenIndex = position357, tokenIndex357
					{
						position365, tokenIndex365 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l366
						}
						position++
						goto l365
					l366:
						position, tokenIndex = position365, tokenIndex365
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l364
						}
						position++
					}
				l365:
					goto l357
				l364:
					position, tokenIndex = position357, tokenIndex357
					if buffer[position] != rune('$') {
						goto l367
					}
					position++
					goto l357
				l367:
					position, tokenIndex = position357, tokenIndex357
					if buffer[position] != rune('_') {
						goto l353
					}
					position++
				}
			l357:
			l355:
				{
					position356, tokenIndex356 := position, tokenIndex
					{
						position368, tokenIndex368 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l369
						}
						position++
						goto l368
					l369:
						position, tokenIndex = position368, tokenIndex368
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l370
						}
						position++
						goto l368
					l370:
						position, tokenIndex = position368, tokenIndex368
						{
							position372, tokenIndex372 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l373
							}
							position++
							goto l372
						l373:
							position, tokenIndex = position372, tokenIndex372
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l371
							}
							position++
						}
					l372:
						goto l368
					l371:
						position, tokenIndex = position368, tokenIndex368
						if buffer[position] != rune('.') {
							goto l374
						}
						position++
						goto l368
					l374:
						position, tokenIndex = position368, tokenIndex368
						{
							position376, tokenIndex376 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l377
							}
							position++
							goto l376
						l377:
							position, tokenIndex = position376, tokenIndex376
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l375
							}
							position++
						}
					l376:
						goto l368
					l375:
						position, tokenIndex = position368, tokenIndex368
						if buffer[position] != rune('$') {
							goto l378
						}
						position++
						goto l368
					l378:
						position, tokenIndex = position368, tokenIndex368
						if buffer[position] != rune('_') {
							goto l356
						}
						position++
					}
				l368:
					goto l355
				l356:
					position, tokenIndex = position356, tokenIndex356
				}
				add(ruleLocalSymbol, position354)
			}
			return true
		l353:
			position, tokenIndex = position353, tokenIndex353
			return false
		},
		/* 25 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
		func() bool {
			position379, tokenIndex379 := position, tokenIndex
			{
				position380 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l379
				}
				position++
			l381:
				{
					position382, tokenIndex382 := position, tokenIndex
					{
						position383, tokenIndex383 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l384
						}
						position++
						goto l383
					l384:
						position, tokenIndex = position383, tokenIndex383
						if buffer[position] != rune('$') {
							goto l382
						}
						position++
					}
				l383:
					goto l381
				l382:
					position, tokenIndex = position382, tokenIndex382
				}
				add(ruleLocalLabel, position380)
			}
			return true
		l379:
			position, tokenIndex = position379, tokenIndex379
			return false
		},
		/* 26 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
		func() bool {
			position385, tokenIndex385 := position, tokenIndex
			{
				position386 := position
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l385
				}
				position++
			l387:
				{
					position388, tokenIndex388 := position, tokenIndex
					{
						position389, tokenIndex389 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l390
						}
						position++
						goto l389
					l390:
						position, tokenIndex = position389, tokenIndex389
						if buffer[position] != rune('$') {
							goto l388
						}
						position++
					}
				l389:
					goto l387
				l388:
					position, tokenIndex = position388, tokenIndex388
				}
				{
					position391, tokenIndex391 := position, tokenIndex
					if buffer[position] != rune('b') {
						goto l392
					}
					position++
					goto l391
				l392:
					position, tokenIndex = position391, tokenIndex391
					if buffer[position] != rune('f') {
						goto l385
					}
					position++
				}
			l391:
				add(ruleLocalLabelRef, position386)
			}
			return true
		l385:
			position, tokenIndex = position385, tokenIndex385
			return false
		},
		/* 27 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
		func() bool {
			position393, tokenIndex393 := position, tokenIndex
			{
				position394 := position
				if !_rules[ruleInstructionName]() {
					goto l393
				}
				{
					position395, tokenIndex395 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l395
					}
					if !_rules[ruleInstructionArg]() {
						goto l395
					}
				l397:
					{
						position398, tokenIndex398 := position, tokenIndex
						{
							position399, tokenIndex399 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l399
							}
							goto l400
						l399:
							position, tokenIndex = position399, tokenIndex399
						}
					l400:
						if buffer[position] != rune(',') {
							goto l398
						}
						position++
						{
							position401, tokenIndex401 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l401
							}
							goto l402
						l401:
							position, tokenIndex = position401, tokenIndex401
						}
					l402:
						if !_rules[ruleInstructionArg]() {
							goto l398
						}
						goto l397
					l398:
						position, tokenIndex = position398, tokenIndex398
					}
					goto l396
				l395:
					position, tokenIndex = position395, tokenIndex395
				}
			l396:
				add(ruleInstruction, position394)
			}
			return true
		l393:
			position, tokenIndex = position393, tokenIndex393
			return false
		},
		/* 28 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
		func() bool {
			position403, tokenIndex403 := position, tokenIndex
			{
				position404 := position
				{
					position405, tokenIndex405 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l406
					}
					position++
					goto l405
				l406:
					position, tokenIndex = position405, tokenIndex405
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l403
					}
					position++
				}
			l405:
			l407:
				{
					position408, tokenIndex408 := position, tokenIndex
					{
						position409, tokenIndex409 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l410
						}
						position++
						goto l409
					l410:
						position, tokenIndex = position409, tokenIndex409
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l411
						}
						position++
						goto l409
					l411:
						position, tokenIndex = position409, tokenIndex409
						if buffer[position] != rune('.') {
							goto l412
						}
						position++
						goto l409
					l412:
						position, tokenIndex = position409, tokenIndex409
						{
							position413, tokenIndex413 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l414
							}
							position++
							goto l413
						l414:
							position, tokenIndex = position413, tokenIndex413
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l408
							}
							position++
						}
					l413:
					}
				l409:
					goto l407
				l408:
					position, tokenIndex = position408, tokenIndex408
				}
				{
					position415, tokenIndex415 := position, tokenIndex
					{
						position417, tokenIndex417 := position, tokenIndex
						if buffer[position] != rune('.') {
							goto l418
						}
						position++
						goto l417
					l418:
						position, tokenIndex = position417, tokenIndex417
						if buffer[position] != rune('+') {
							goto l419
						}
						position++
						goto l417
					l419:
						position, tokenIndex = position417, tokenIndex417
						if buffer[position] != rune('-') {
							goto l415
						}
						position++
					}
				l417:
					goto l416
				l415:
					position, tokenIndex = position415, tokenIndex415
				}
			l416:
				add(ruleInstructionName, position404)
			}
			return true
		l403:
			position, tokenIndex = position403, tokenIndex403
			return false
		},
		/* 29 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
		func() bool {
			position420, tokenIndex420 := position, tokenIndex
			{
				position421 := position
				{
					position422, tokenIndex422 := position, tokenIndex
					if !_rules[ruleIndirectionIndicator]() {
						goto l422
					}
					goto l423
				l422:
					position, tokenIndex = position422, tokenIndex422
				}
			l423:
				{
					position424, tokenIndex424 := position, tokenIndex
					if !_rules[ruleARMConstantTweak]() {
						goto l425
					}
					goto l424
				l425:
					position, tokenIndex = position424, tokenIndex424
					if !_rules[ruleRegisterOrConstant]() {
						goto l426
					}
					goto l424
				l426:
					position, tokenIndex = position424, tokenIndex424
					if !_rules[ruleLocalLabelRef]() {
						goto l427
					}
					goto l424
				l427:
					position, tokenIndex = position424, tokenIndex424
					if !_rules[ruleTOCRefHigh]() {
						goto l428
					}
					goto l424
				l428:
					position, tokenIndex = position424, tokenIndex424
					if !_rules[ruleTOCRefLow]() {
						goto l429
					}
					goto l424
				l429:
					position, tokenIndex = position424, tokenIndex424
					if !_rules[ruleGOTLocation]() {
						goto l430
					}
					goto l424
				l430:
					position, tokenIndex = position424, tokenIndex424
					if !_rules[ruleGOTSymbolOffset]() {
						goto l431
					}
					goto l424
				l431:
					position, tokenIndex = position424, tokenIndex424
					if !_rules[ruleMemoryRef]() {
						goto l420
					}
				}
			l424:
			l432:
				{
					position433, tokenIndex433 := position, tokenIndex
					if !_rules[ruleAVX512Token]() {
						goto l433
					}
					goto l432
				l433:
					position, tokenIndex = position433, tokenIndex433
				}
				add(ruleInstructionArg, position421)
			}
			return true
		l420:
			position, tokenIndex = position420, tokenIndex420
			return false
		},
		/* 30 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
		func() bool {
			position434, tokenIndex434 := position, tokenIndex
			{
				position435 := position
				if buffer[position] != rune('$') {
					goto l434
				}
				position++
				if buffer[position] != rune('_') {
					goto l434
				}
				position++
				if buffer[position] != rune('G') {
					goto l434
				}
				position++
				if buffer[position] != rune('L') {
					goto l434
				}
				position++
				if buffer[position] != rune('O') {
					goto l434
				}
				position++
				if buffer[position] != rune('B') {
					goto l434
				}
				position++
				if buffer[position] != rune('A') {
					goto l434
				}
				position++
				if buffer[position] != rune('L') {
					goto l434
				}
				position++
				if buffer[position] != rune('_') {
					goto l434
				}
				position++
				if buffer[position] != rune('O') {
					goto l434
				}
				position++
				if buffer[position] != rune('F') {
					goto l434
				}
				position++
				if buffer[position] != rune('F') {
					goto l434
				}
				position++
				if buffer[position] != rune('S') {
					goto l434
				}
				position++
				if buffer[position] != rune('E') {
					goto l434
				}
				position++
				if buffer[position] != rune('T') {
					goto l434
				}
				position++
				if buffer[position] != rune('_') {
					goto l434
				}
				position++
				if buffer[position] != rune('T') {
					goto l434
				}
				position++
				if buffer[position] != rune('A') {
					goto l434
				}
				position++
				if buffer[position] != rune('B') {
					goto l434
				}
				position++
				if buffer[position] != rune('L') {
					goto l434
				}
				position++
				if buffer[position] != rune('E') {
					goto l434
				}
				position++
				if buffer[position] != rune('_') {
					goto l434
				}
				position++
				if buffer[position] != rune('-') {
					goto l434
				}
				position++
				if !_rules[ruleLocalSymbol]() {
					goto l434
				}
				add(ruleGOTLocation, position435)
			}
			return true
		l434:
			position, tokenIndex = position434, tokenIndex434
			return false
		},
		/* 31 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
		func() bool {
			position436, tokenIndex436 := position, tokenIndex
			{
				position437 := position
				{
					position438, tokenIndex438 := position, tokenIndex
					if buffer[position] != rune('$') {
						goto l439
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l439
					}
					if buffer[position] != rune('@') {
						goto l439
					}
					position++
					if buffer[position] != rune('G') {
						goto l439
					}
					position++
					if buffer[position] != rune('O') {
						goto l439
					}
					position++
					if buffer[position] != rune('T') {
						goto l439
					}
					position++
					{
						position440, tokenIndex440 := position, tokenIndex
						if buffer[position] != rune('O') {
							goto l440
						}
						position++
						if buffer[position] != rune('F') {
							goto l440
						}
						position++
						if buffer[position] != rune('F') {
							goto l440
						}
						position++
						goto l441
					l440:
						position, tokenIndex = position440, tokenIndex440
					}
				l441:
					goto l438
				l439:
					position, tokenIndex = position438, tokenIndex438
					if buffer[position] != rune(':') {
						goto l436
					}
					position++
					{
						position442, tokenIndex442 := position, tokenIndex
						if buffer[position] != rune('g') {
							goto l443
						}
						position++
						goto l442
					l443:
						position, tokenIndex = position442, tokenIndex442
						if buffer[position] != rune('G') {
							goto l436
						}
						position++
					}
				l442:
					{
						position444, tokenIndex444 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l445
						}
						position++
						goto l444
					l445:
						position, tokenIndex = position444, tokenIndex444
						if buffer[position] != rune('O') {
							goto l436
						}
						position++
					}
				l444:
					{
						position446, tokenIndex446 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l447
						}
						position++
						goto l446
					l447:
						position, tokenIndex = position446, tokenIndex446
						if buffer[position] != rune('T') {
							goto l436
						}
						position++
					}
				l446:
					if buffer[position] != rune(':') {
						goto l436
					}
					position++
					if !_rules[ruleSymbolName]() {
						goto l436
					}
				}
			l438:
				add(ruleGOTSymbolOffset, position437)
			}
			return true
		l436:
			position, tokenIndex = position436, tokenIndex436
			return false
		},
		/* 32 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
		func() bool {
			position448, tokenIndex448 := position, tokenIndex
			{
				position449 := position
				{
					position450, tokenIndex450 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l450
					}
					goto l451
				l450:
					position, tokenIndex = position450, tokenIndex450
				}
			l451:
				if buffer[position] != rune('{') {
					goto l448
				}
				position++
				{
					position452, tokenIndex452 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l452
					}
					position++
					goto l453
				l452:
					position, tokenIndex = position452, tokenIndex452
				}
			l453:
			l454:
				{
					position455, tokenIndex455 := position, tokenIndex
					{
						position456, tokenIndex456 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l457
						}
						position++
						goto l456
					l457:
						position, tokenIndex = position456, tokenIndex456
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l455
						}
						position++
					}
				l456:
					goto l454
				l455:
					position, tokenIndex = position455, tokenIndex455
				}
				if buffer[position] != rune('}') {
					goto l448
				}
				position++
				add(ruleAVX512Token, position449)
			}
			return true
		l448:
			position, tokenIndex = position448, tokenIndex448
			return false
		},
		/* 33 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
		func() bool {
			position458, tokenIndex458 := position, tokenIndex
			{
				position459 := position
				if buffer[position] != rune('.') {
					goto l458
				}
				position++
				if buffer[position] != rune('T') {
					goto l458
				}
				position++
				if buffer[position] != rune('O') {
					goto l458
				}
				position++
				if buffer[position] != rune('C') {
					goto l458
				}
				position++
				if buffer[position] != rune('.') {
					goto l458
				}
				position++
				if buffer[position] != rune('-') {
					goto l458
				}
				position++
				{
					position460, tokenIndex460 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l461
					}
					position++
					if buffer[position] != rune('b') {
						goto l461
					}
					position++
					goto l460
				l461:
					position, tokenIndex = position460, tokenIndex460
					if buffer[position] != rune('.') {
						goto l458
					}
					position++
					if buffer[position] != rune('L') {
						goto l458
					}
					position++
					{
						position464, tokenIndex464 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l465
						}
						position++
						goto l464
					l465:
						position, tokenIndex = position464, tokenIndex464
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l466
						}
						position++
						goto l464
					l466:
						position, tokenIndex = position464, tokenIndex464
						if buffer[position] != rune('_') {
							goto l467
						}
						position++
						goto l464
					l467:
						position, tokenIndex = position464, tokenIndex464
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l458
						}
						position++
					}
				l464:
				l462:
					{
						position463, tokenIndex463 := position, tokenIndex
						{
							position468, tokenIndex468 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l469
							}
							position++
							goto l468
						l469:
							position, tokenIndex = position468, tokenIndex468
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l470
							}
							position++
							goto l468
						l470:
							position, tokenIndex = position468, tokenIndex468
							if buffer[position] != rune('_') {
								goto l471
							}
							position++
							goto l468
						l471:
							position, tokenIndex = position468, tokenIndex468
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l463
							}
							position++
						}
					l468:
						goto l462
					l463:
						position, tokenIndex = position463, tokenIndex463
					}
				}
			l460:
				if buffer[position] != rune('@') {
					goto l458
				}
				position++
				{
					position472, tokenIndex472 := position, tokenIndex
					if buffer[position] != rune('h') {
						goto l473
					}
					position++
					goto l472
				l473:
					position, tokenIndex = position472, tokenIndex472
					if buffer[position] != rune('H') {
						goto l458
					}
					position++
				}
			l472:
				{
					position474, tokenIndex474 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l475
					}
					position++
					goto l474
				l475:
					position, tokenIndex = position474, tokenIndex474
					if buffer[position] != rune('A') {
						goto l458
					}
					position++
				}
			l474:
				add(ruleTOCRefHigh, position459)
			}
			return true
		l458:
			position, tokenIndex = position458, tokenIndex458
			return false
		},
		/* 34 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
		func() bool {
			position476, tokenIndex476 := position, tokenIndex
			{
				position477 := position
				if buffer[position] != rune('.') {
					goto l476
				}
				position++
				if buffer[position] != rune('T') {
					goto l476
				}
				position++
				if buffer[position] != rune('O') {
					goto l476
				}
				position++
				if buffer[position] != rune('C') {
					goto l476
				}
				position++
				if buffer[position] != rune('.') {
					goto l476
				}
				position++
				if buffer[position] != rune('-') {
					goto l476
				}
				position++
				{
					position478, tokenIndex478 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l479
					}
					position++
					if buffer[position] != rune('b') {
						goto l479
					}
					position++
					goto l478
				l479:
					position, tokenIndex = position478, tokenIndex478
					if buffer[position] != rune('.') {
						goto l476
					}
					position++
					if buffer[position] != rune('L') {
						goto l476
					}
					position++
					{
						position482, tokenIndex482 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l483
						}
						position++
						goto l482
					l483:
						position, tokenIndex = position482, tokenIndex482
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l484
						}
						position++
						goto l482
					l484:
						position, tokenIndex = position482, tokenIndex482
						if buffer[position] != rune('_') {
							goto l485
						}
						position++
						goto l482
					l485:
						position, tokenIndex = position482, tokenIndex482
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l476
						}
						position++
					}
				l482:
				l480:
					{
						position481, tokenIndex481 := position, tokenIndex
						{
							position486, tokenIndex486 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l487
							}
							position++
							goto l486
						l487:
							position, tokenIndex = position486, tokenIndex486
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l488
							}
							position++
							goto l486
						l488:
							position, tokenIndex = position486, tokenIndex486
							if buffer[position] != rune('_') {
								goto l489
							}
							position++
							goto l486
						l489:
							position, tokenIndex = position486, tokenIndex486
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l481
							}
							position++
						}
					l486:
						goto l480
					l481:
						position, tokenIndex = position481, tokenIndex481
					}
				}
			l478:
				if buffer[position] != rune('@') {
					goto l476
				}
				position++
				{
					position490, tokenIndex490 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l491
					}
					position++
					goto l490
				l491:
					position, tokenIndex = position490, tokenIndex490
					if buffer[position] != rune('L') {
						goto l476
					}
					position++
				}
			l490:
				add(ruleTOCRefLow, position477)
			}
			return true
		l476:
			position, tokenIndex = position476, tokenIndex476
			return false
		},
		/* 35 IndirectionIndicator <- <'*'> */
		func() bool {
			position492, tokenIndex492 := position, tokenIndex
			{
				position493 := position
				if buffer[position] != rune('*') {
					goto l492
				}
				position++
				add(ruleIndirectionIndicator, position493)
			}
			return true
		l492:
			position, tokenIndex = position492, tokenIndex492
			return false
		},
		/* 36 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 {
			position494, tokenIndex494 := position, tokenIndex
			{
				position495 := position
				{
					position496, tokenIndex496 := position, tokenIndex
					if buffer[position] != rune('%') {
						goto l497
					}
					position++
					{
						position498, tokenIndex498 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l499
						}
						position++
						goto l498
					l499:
						position, tokenIndex = position498, tokenIndex498
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l497
						}
						position++
					}
				l498:
				l500:
					{
						position501, tokenIndex501 := position, tokenIndex
						{
							position502, tokenIndex502 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('z') {
								goto l503
							}
							position++
							goto l502
						l503:
							position, tokenIndex = position502, tokenIndex502
							if c := buffer[position]; c < rune('A') || c > rune('Z') {
								goto l504
							}
							position++
							goto l502
						l504:
							position, tokenIndex = position502, tokenIndex502
							{
								position505, tokenIndex505 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l506
								}
								position++
								goto l505
							l506:
								position, tokenIndex = position505, tokenIndex505
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l501
								}
								position++
							}
						l505:
						}
					l502:
						goto l500
					l501:
						position, tokenIndex = position501, tokenIndex501
					}
					goto l496
				l497:
					position, tokenIndex = position496, tokenIndex496
					{
						position508, tokenIndex508 := position, tokenIndex
						if buffer[position] != rune('$') {
							goto l508
						}
						position++
						goto l509
					l508:
						position, tokenIndex = position508, tokenIndex508
					}
				l509:
					{
						position510, tokenIndex510 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l511
						}
						if !_rules[ruleOffset]() {
							goto l511
						}
						goto l510
					l511:
						position, tokenIndex = position510, tokenIndex510
						if !_rules[ruleOffset]() {
							goto l507
						}
					}
				l510:
					goto l496
				l507:
					position, tokenIndex = position496, tokenIndex496
					if buffer[position] != rune('#') {
						goto l512
					}
					position++
					if !_rules[ruleOffset]() {
						goto l512
					}
					{
						position513, tokenIndex513 := position, tokenIndex
						if buffer[position] != rune('*') {
							goto l513
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l513
						}
						position++
					l515:
						{
							position516, tokenIndex516 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l516
							}
							position++
							goto l515
						l516:
							position, tokenIndex = position516, tokenIndex516
						}
						{
							position517, tokenIndex517 := position, tokenIndex
							if buffer[position] != rune('-') {
								goto l517
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l517
							}
							position++
						l519:
							{
								position520, tokenIndex520 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l520
								}
								position++
								goto l519
							l520:
								position, tokenIndex = position520, tokenIndex520
							}
							goto l518
						l517:
							position, tokenIndex = position517, tokenIndex517
						}
					l518:
						goto l514
					l513:
						position, tokenIndex = position513, tokenIndex513
					}
				l514:
					goto l496
				l512:
					position, tokenIndex = position496, tokenIndex496
					if buffer[position] != rune('#') {
						goto l521
					}
					position++
					{
						position522, tokenIndex522 := position, tokenIndex
						if buffer[position] != rune('~') {
							goto l522
						}
						position++
						goto l523
					l522:
						position, tokenIndex = position522, tokenIndex522
					}
				l523:
					if buffer[position] != rune('(') {
						goto l521
					}
					position++
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l521
					}
					position++
					{
						position524, tokenIndex524 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l524
						}
						goto l525
					l524:
						position, tokenIndex = position524, tokenIndex524
					}
				l525:
					if buffer[position] != rune('<') {
						goto l521
					}
					position++
					if buffer[position] != rune('<') {
						goto l521
					}
					position++
					{
						position526, tokenIndex526 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l526
						}
						goto l527
					l526:
						position, tokenIndex = position526, tokenIndex526
					}
				l527:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l521
					}
					position++
					if buffer[position] != rune(')') {
						goto l521
					}
					position++
					goto l496
				l521:
					position, tokenIndex = position496, tokenIndex496
					if !_rules[ruleARMRegister]() {
						goto l494
					}
				}
			l496:
				{
					position528, tokenIndex528 := position, tokenIndex
					{
						position529, tokenIndex529 := position, tokenIndex
						if buffer[position] != rune('f') {
							goto l530
						}
						position++
						goto l529
					l530:
						position, tokenIndex = position529, tokenIndex529
						if buffer[position] != rune('b') {
							goto l531
						}
						position++
						goto l529
					l531:
						position, tokenIndex = position529, tokenIndex529
						if buffer[position] != rune(':') {
							goto l532
						}
						position++
						goto l529
					l532:
						position, tokenIndex = position529, tokenIndex529
						if buffer[position] != rune('(') {
							goto l533
						}
						position++
						goto l529
					l533:
						position, tokenIndex = position529, tokenIndex529
						if buffer[position] != rune('+') {
							goto l534
						}
						position++
						goto l529
					l534:
						position, tokenIndex = position529, tokenIndex529
						if buffer[position] != rune('-') {
							goto l528
						}
						position++
					}
				l529:
					goto l494
				l528:
					position, tokenIndex = position528, tokenIndex528
				}
				add(ruleRegisterOrConstant, position495)
			}
			return true
		l494:
			position, tokenIndex = position494, tokenIndex494
			return false
		},
		/* 37 ARMConstantTweak <- <(((('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('s' / 'S') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('w' / 'W')) / (('u' / 'U') ('x' / 'X') ('t' / 'T') ('b' / 'B')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */
		func() bool {
			position535, tokenIndex535 := position, tokenIndex
			{
				position536 := position
				{
					position537, tokenIndex537 := position, tokenIndex
					{
						position539, tokenIndex539 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l540
						}
						position++
						goto l539
					l540:
						position, tokenIndex = position539, tokenIndex539
						if buffer[position] != rune('L') {
							goto l538
						}
						position++
					}
				l539:
					{
						position541, tokenIndex541 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l542
						}
						position++
						goto l541
					l542:
						position, tokenIndex = position541, tokenIndex541
						if buffer[position] != rune('S') {
							goto l538
						}
						position++
					}
				l541:
					{
						position543, tokenIndex543 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l544
						}
						position++
						goto l543
					l544:
						position, tokenIndex = position543, tokenIndex543
						if buffer[position] != rune('L') {
							goto l538
						}
						position++
					}
				l543:
					goto l537
				l538:
					position, tokenIndex = position537, tokenIndex537
					{
						position546, tokenIndex546 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l547
						}
						position++
						goto l546
					l547:
						position, tokenIndex = position546, tokenIndex546
						if buffer[position] != rune('S') {
							goto l545
						}
						position++
					}
				l546:
					{
						position548, tokenIndex548 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l549
						}
						position++
						goto l548
					l549:
						position, tokenIndex = position548, tokenIndex548
						if buffer[position] != rune('X') {
							goto l545
						}
						position++
					}
				l548:
					{
						position550, tokenIndex550 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l551
						}
						position++
						goto l550
					l551:
						position, tokenIndex = position550, tokenIndex550
						if buffer[position] != rune('T') {
							goto l545
						}
						position++
					}
				l550:
					{
						position552, tokenIndex552 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l553
						}
						position++
						goto l552
					l553:
						position, tokenIndex = position552, tokenIndex552
						if buffer[position] != rune('W') {
							goto l545
						}
						position++
					}
				l552:
					goto l537
				l545:
					position, tokenIndex = position537, tokenIndex537
					{
						position555, tokenIndex555 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l556
						}
						position++
						goto l555
					l556:
						position, tokenIndex = position555, tokenIndex555
						if buffer[position] != rune('U') {
							goto l554
						}
						position++
					}
				l555:
					{
						position557, tokenIndex557 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l558
						}
						position++
						goto l557
					l558:
						position, tokenIndex = position557, tokenIndex557
						if buffer[position] != rune('X') {
							goto l554
						}
						position++
					}
				l557:
					{
						position559, tokenIndex559 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l560
						}
						position++
						goto l559
					l560:
						position, tokenIndex = position559, tokenIndex559
						if buffer[position] != rune('T') {
							goto l554
						}
						position++
					}
				l559:
					{
						position561, tokenIndex561 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l562
						}
						position++
						goto l561
					l562:
						position, tokenIndex = position561, tokenIndex561
						if buffer[position] != rune('W') {
							goto l554
						}
						position++
					}
				l561:
					goto l537
				l554:
					position, tokenIndex = position537, tokenIndex537
					{
						position564, tokenIndex564 := position, tokenIndex
						if buffer[position] != rune('u') {
							goto l565
						}
						position++
						goto l564
					l565:
						position, tokenIndex = position564, tokenIndex564
						if buffer[position] != rune('U') {
							goto l563
						}
						position++
					}
				l564:
					{
						position566, tokenIndex566 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l567
						}
						position++
						goto l566
					l567:
						position, tokenIndex = position566, tokenIndex566
						if buffer[position] != rune('X') {
							goto l563
						}
						position++
					}
				l566:
					{
						position568, tokenIndex568 := position, tokenIndex
						if buffer[position] != rune('t') {
							goto l569
						}
						position++
						goto l568
					l569:
						position, tokenIndex = position568, tokenIndex568
						if buffer[position] != rune('T') {
							goto l563
						}
						position++
					}
				l568:
					{
						position570, tokenIndex570 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l571
						}
						position++
						goto l570
					l571:
						position, tokenIndex = position570, tokenIndex570
						if buffer[position] != rune('B') {
							goto l563
						}
						position++
					}
				l570:
					goto l537
				l563:
					position, tokenIndex = position537, tokenIndex537
					{
						position573, tokenIndex573 := position, tokenIndex
						if buffer[position] != rune('l') {
							goto l574
						}
						position++
						goto l573
					l574:
						position, tokenIndex = position573, tokenIndex573
						if buffer[position] != rune('L') {
							goto l572
						}
						position++
					}
				l573:
					{
						position575, tokenIndex575 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l576
						}
						position++
						goto l575
					l576:
						position, tokenIndex = position575, tokenIndex575
						if buffer[position] != rune('S') {
							goto l572
						}
						position++
					}
				l575:
					{
						position577, tokenIndex577 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l578
						}
						position++
						goto l577
					l578:
						position, tokenIndex = position577, tokenIndex577
						if buffer[position] != rune('R') {
							goto l572
						}
						position++
					}
				l577:
					goto l537
				l572:
					position, tokenIndex = position537, tokenIndex537
					{
						position580, tokenIndex580 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l581
						}
						position++
						goto l580
					l581:
						position, tokenIndex = position580, tokenIndex580
						if buffer[position] != rune('R') {
							goto l579
						}
						position++
					}
				l580:
					{
						position582, tokenIndex582 := position, tokenIndex
						if buffer[position] != rune('o') {
							goto l583
						}
						position++
						goto l582
					l583:
						position, tokenIndex = position582, tokenIndex582
						if buffer[position] != rune('O') {
							goto l579
						}
						position++
					}
				l582:
					{
						position584, tokenIndex584 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l585
						}
						position++
						goto l584
					l585:
						position, tokenIndex = position584, tokenIndex584
						if buffer[position] != rune('R') {
							goto l579
						}
						position++
					}
				l584:
					goto l537
				l579:
					position, tokenIndex = position537, tokenIndex537
					{
						position586, tokenIndex586 := position, tokenIndex
						if buffer[position] != rune('a') {
							goto l587
						}
						position++
						goto l586
					l587:
						position, tokenIndex = position586, tokenIndex586
						if buffer[position] != rune('A') {
							goto l535
						}
						position++
					}
				l586:
					{
						position588, tokenIndex588 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l589
						}
						position++
						goto l588
					l589:
						position, tokenIndex = position588, tokenIndex588
						if buffer[position] != rune('S') {
							goto l535
						}
						position++
					}
				l588:
					{
						position590, tokenIndex590 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l591
						}
						position++
						goto l590
					l591:
						position, tokenIndex = position590, tokenIndex590
						if buffer[position] != rune('R') {
							goto l535
						}
						position++
					}
				l590:
				}
			l537:
				{
					position592, tokenIndex592 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l592
					}
					if buffer[position] != rune('#') {
						goto l592
					}
					position++
					if !_rules[ruleOffset]() {
						goto l592
					}
					goto l593
				l592:
					position, tokenIndex = position592, tokenIndex592
				}
			l593:
				add(ruleARMConstantTweak, position536)
			}
			return true
		l535:
			position, tokenIndex = position535, tokenIndex535
			return false
		},
		/* 38 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] ']')?))> */
		func() bool {
			position594, tokenIndex594 := position, tokenIndex
			{
				position595 := position
				{
					position596, tokenIndex596 := position, tokenIndex
					{
						position598, tokenIndex598 := position, tokenIndex
						if buffer[position] != rune('s') {
							goto l599
						}
						position++
						goto l598
					l599:
						position, tokenIndex = position598, tokenIndex598
						if buffer[position] != rune('S') {
							goto l597
						}
						position++
					}
				l598:
					{
						position600, tokenIndex600 := position, tokenIndex
						if buffer[position] != rune('p') {
							goto l601
						}
						position++
						goto l600
					l601:
						position, tokenIndex = position600, tokenIndex600
						if buffer[position] != rune('P') {
							goto l597
						}
						position++
					}
				l600:
					goto l596
				l597:
					position, tokenIndex = position596, tokenIndex596
					{
						position603, tokenIndex603 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l604
						}
						position++
						goto l603
					l604:
						position, tokenIndex = position603, tokenIndex603
						if buffer[position] != rune('w') {
							goto l605
						}
						position++
						goto l603
					l605:
						position, tokenIndex = position603, tokenIndex603
						if buffer[position] != rune('d') {
							goto l606
						}
						position++
						goto l603
					l606:
						position, tokenIndex = position603, tokenIndex603
						if buffer[position] != rune('q') {
							goto l607
						}
						position++
						goto l603
					l607:
						position, tokenIndex = position603, tokenIndex603
						if buffer[position] != rune('s') {
							goto l602
						}
						position++
					}
				l603:
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l602
					}
					position++
					{
						position608, tokenIndex608 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l608
						}
						position++
						goto l609
					l608:
						position, tokenIndex = position608, tokenIndex608
					}
				l609:
					goto l596
				l602:
					position, tokenIndex = position596, tokenIndex596
					{
						position611, tokenIndex611 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l612
						}
						position++
						goto l611
					l612:
						position, tokenIndex = position611, tokenIndex611
						if buffer[position] != rune('X') {
							goto l610
						}
						position++
					}
				l611:
					{
						position613, tokenIndex613 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l614
						}
						position++
						goto l613
					l614:
						position, tokenIndex = position613, tokenIndex613
						if buffer[position] != rune('Z') {
							goto l610
						}
						position++
					}
				l613:
					{
						position615, tokenIndex615 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l616
						}
						position++
						goto l615
					l616:
						position, tokenIndex = position615, tokenIndex615
						if buffer[position] != rune('R') {
							goto l610
						}
						position++
					}
				l615:
					goto l596
				l610:
					position, tokenIndex = position596, tokenIndex596
					{
						position618, tokenIndex618 := position, tokenIndex
						if buffer[position] != rune('w') {
							goto l619
						}
						position++
						goto l618
					l619:
						position, tokenIndex = position618, tokenIndex618
						if buffer[position] != rune('W') {
							goto l617
						}
						position++
					}
				l618:
					{
						position620, tokenIndex620 := position, tokenIndex
						if buffer[position] != rune('z') {
							goto l621
						}
						position++
						goto l620
					l621:
						position, tokenIndex = position620, tokenIndex620
						if buffer[position] != rune('Z') {
							goto l617
						}
						position++
					}
				l620:
					{
						position622, tokenIndex622 := position, tokenIndex
						if buffer[position] != rune('r') {
							goto l623
						}
						position++
						goto l622
					l623:
						position, tokenIndex = position622, tokenIndex622
						if buffer[position] != rune('R') {
							goto l617
						}
						position++
					}
				l622:
					goto l596
				l617:
					position, tokenIndex = position596, tokenIndex596
					if !_rules[ruleARMVectorRegister]() {
						goto l624
					}
					goto l596
				l624:
					position, tokenIndex = position596, tokenIndex596
					if buffer[position] != rune('{') {
						goto l594
					}
					position++
					{
						position625, tokenIndex625 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l625
						}
						goto l626
					l625:
						position, tokenIndex = position625, tokenIndex625
					}
				l626:
					if !_rules[ruleARMVectorRegister]() {
						goto l594
					}
				l627:
					{
						position628, tokenIndex628 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l628
						}
						position++
						{
							position629, tokenIndex629 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l629
							}
							goto l630
						l629:
							position, tokenIndex = position629, tokenIndex629
						}
					l630:
						if !_rules[ruleARMVectorRegister]() {
							goto l628
						}
						goto l627
					l628:
						position, tokenIndex = position628, tokenIndex628
					}
					{
						position631, tokenIndex631 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l631
						}
						goto l632
					l631:
						position, tokenIndex = position631, tokenIndex631
					}
				l632:
					if buffer[position] != rune('}') {
						goto l594
					}
					position++
					{
						position633, tokenIndex633 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l633
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l633
						}
						position++
						if buffer[position] != rune(']') {
							goto l633
						}
						position++
						goto l634
					l633:
						position, tokenIndex = position633, tokenIndex633
					}
				l634:
				}
			l596:
				add(ruleARMRegister, position595)
			}
			return true
		l594:
			position, tokenIndex = position594, tokenIndex594
			return false
		},
		/* 39 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
		func() bool {
			position635, tokenIndex635 := position, tokenIndex
			{
				position636 := position
				{
					position637, tokenIndex637 := position, tokenIndex
					if buffer[position] != rune('v') {
						goto l638
					}
					position++
					goto l637
				l638:
					position, tokenIndex = position637, tokenIndex637
					if buffer[position] != rune('V') {
						goto l635
					}
					position++
				}
			l637:
				if c := buffer[position]; c < rune('0') || c > rune('9') {
					goto l635
				}
				position++
				{
					position639, tokenIndex639 := position, tokenIndex
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l639
					}
					position++
					goto l640
				l639:
					position, tokenIndex = position639, tokenIndex639
				}
			l640:
				{
					position641, tokenIndex641 := position, tokenIndex
					if buffer[position] != rune('.') {
						goto l641
					}
					position++
				l643:
					{
						position644, tokenIndex644 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l644
						}
						position++
						goto l643
					l644:
						position, tokenIndex = position644, tokenIndex644
					}
					{
						position645, tokenIndex645 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l646
						}
						position++
						goto l645
					l646:
						position, tokenIndex = position645, tokenIndex645
						if buffer[position] != rune('s') {
							goto l647
						}
						position++
						goto l645
					l647:
						position, tokenIndex = position645, tokenIndex645
						if buffer[position] != rune('d') {
							goto l648
						}
						position++
						goto l645
					l648:
						position, tokenIndex = position645, tokenIndex645
						if buffer[position] != rune('h') {
							goto l649
						}
						position++
						goto l645
					l649:
						position, tokenIndex = position645, tokenIndex645
						if buffer[position] != rune('q') {
							goto l641
						}
						position++
					}
				l645:
					{
						position650, tokenIndex650 := position, tokenIndex
						if buffer[position] != rune('[') {
							goto l650
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l650
						}
						position++
						{
							position652, tokenIndex652 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l652
							}
							position++
							goto l653
						l652:
							position, tokenIndex = position652, tokenIndex652
						}
					l653:
						if buffer[position] != rune(']') {
							goto l650
						}
						position++
						goto l651
					l650:
						position, tokenIndex = position650, tokenIndex650
					}
				l651:
					goto l642
				l641:
					position, tokenIndex = position641, tokenIndex641
				}
			l642:
				add(ruleARMVectorRegister, position636)
			}
			return true
		l635:
			position, tokenIndex = position635, tokenIndex635
			return false
		},
		/* 40 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
		func() bool {
			position654, tokenIndex654 := position, tokenIndex
			{
				position655 := position
				{
					position656, tokenIndex656 := position, tokenIndex
					if !_rules[ruleSymbolRef]() {
						goto l657
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l657
					}
					goto l656
				l657:
					position, tokenIndex = position656, tokenIndex656
					if !_rules[ruleSymbolRef]() {
						goto l658
					}
					goto l656
				l658:
					position, tokenIndex = position656, tokenIndex656
					if !_rules[ruleLow12BitsSymbolRef]() {
						goto l659
					}
					goto l656
				l659:
					position, tokenIndex = position656, tokenIndex656
				l661:
					{
						position662, tokenIndex662 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l662
						}
						goto l661
					l662:
						position, tokenIndex = position662, tokenIndex662
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l660
					}
					goto l656
				l660:
					position, tokenIndex = position656, tokenIndex656
					if !_rules[ruleSegmentRegister]() {
						goto l663
					}
					if !_rules[ruleOffset]() {
						goto l663
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l663
					}
					goto l656
				l663:
					position, tokenIndex = position656, tokenIndex656
					if !_rules[ruleSegmentRegister]() {
						goto l664
					}
					if !_rules[ruleBaseIndexScale]() {
						goto l664
					}
					goto l656
				l664:
					position, tokenIndex = position656, tokenIndex656
					if !_rules[ruleSegmentRegister]() {
						goto l665
					}
					if !_rules[ruleOffset]() {
						goto l665
					}
					goto l656
				l665:
					position, tokenIndex = position656, tokenIndex656
					if !_rules[ruleARMBaseIndexScale]() {
						goto l666
					}
					goto l656
				l666:
					position, tokenIndex = position656, tokenIndex656
					if !_rules[ruleBaseIndexScale]() {
						goto l654
					}
				}
			l656:
				add(ruleMemoryRef, position655)
			}
			return true
		l654:
			position, tokenIndex = position654, tokenIndex654
			return false
		},
		/* 41 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
		func() bool {
			position667, tokenIndex667 := position, tokenIndex
			{
				position668 := position
				{
					position669, tokenIndex669 := position, tokenIndex
				l671:
					{
						position672, tokenIndex672 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l672
						}
						goto l671
					l672:
						position, tokenIndex = position672, tokenIndex672
					}
					if buffer[position] != rune('+') {
						goto l669
					}
					position++
					goto l670
				l669:
					position, tokenIndex = position669, tokenIndex669
				}
			l670:
				{
					position673, tokenIndex673 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l674
					}
					goto l673
				l674:
					position, tokenIndex = position673, tokenIndex673
					if !_rules[ruleSymbolName]() {
						goto l667
					}
				}
			l673:
			l675:
				{
					position676, tokenIndex676 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l676
					}
					goto l675
				l676:
					position, tokenIndex = position676, tokenIndex676
				}
				{
					position677, tokenIndex677 := position, tokenIndex
					if buffer[position] != rune('@') {
						goto l677
					}
					position++
					if !_rules[ruleSection]() {
						goto l677
					}
				l679:
					{
						position680, tokenIndex680 := position, tokenIndex
						if !_rules[ruleOffset]() {
							goto l680
						}
						goto l679
					l680:
						position, tokenIndex = position680, tokenIndex680
					}
					goto l678
				l677:
					position, tokenIndex = position677, tokenIndex677
				}
			l678:
				add(ruleSymbolRef, position668)
			}
			return true
		l667:
			position, tokenIndex = position667, tokenIndex667
			return false
		},
		/* 42 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
		func() bool {
			position681, tokenIndex681 := position, tokenIndex
			{
				position682 := position
				if buffer[position] != rune(':') {
					goto l681
				}
				position++
				{
					position683, tokenIndex683 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l684
					}
					position++
					goto l683
				l684:
					position, tokenIndex = position683, tokenIndex683
					if buffer[position] != rune('L') {
						goto l681
					}
					position++
				}
			l683:
				{
					position685, tokenIndex685 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l686
					}
					position++
					goto l685
				l686:
					position, tokenIndex = position685, tokenIndex685
					if buffer[position] != rune('O') {
						goto l681
					}
					position++
				}
			l685:
				if buffer[position] != rune('1') {
					goto l681
				}
				position++
				if buffer[position] != rune('2') {
					goto l681
				}
				position++
				if buffer[position] != rune(':') {
					goto l681
				}
				position++
				{
					position687, tokenIndex687 := position, tokenIndex
					if !_rules[ruleLocalSymbol]() {
						goto l688
					}
					goto l687
				l688:
					position, tokenIndex = position687, tokenIndex687
					if !_rules[ruleSymbolName]() {
						goto l681
					}
				}
			l687:
				{
					position689, tokenIndex689 := position, tokenIndex
					if !_rules[ruleOffset]() {
						goto l689
					}
					goto l690
				l689:
					position, tokenIndex = position689, tokenIndex689
				}
			l690:
				add(ruleLow12BitsSymbolRef, position682)
			}
			return true
		l681:
			position, tokenIndex = position681, tokenIndex681
			return false
		},
		/* 43 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
		func() bool {
			position691, tokenIndex691 := position, tokenIndex
			{
				position692 := position
				if buffer[position] != rune('[') {
					goto l691
				}
				position++
				if !_rules[ruleARMRegister]() {
					goto l691
				}
				{
					position693, tokenIndex693 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l693
					}
					position++
					{
						position695, tokenIndex695 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l695
						}
						goto l696
					l695:
						position, tokenIndex = position695, tokenIndex695
					}
				l696:
					{
						position697, tokenIndex697 := position, tokenIndex
						if buffer[position] != rune('#') {
							goto l698
						}
						position++
						if !_rules[ruleOffset]() {
							goto l698
						}
						{
							position699, tokenIndex699 := position, tokenIndex
							{
								position701, tokenIndex701 := position, tokenIndex
								if buffer[position] != rune('*') {
									goto l702
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l702
								}
								position++
							l703:
								{
									position704, tokenIndex704 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l704
									}
									position++
									goto l703
								l704:
									position, tokenIndex = position704, tokenIndex704
								}
								goto l701
							l702:
								position, tokenIndex = position701, tokenIndex701
								if buffer[position] != rune('*') {
									goto l705
								}
								position++
								if buffer[position] != rune('(') {
									goto l705
								}
								position++
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l705
								}
								position++
							l706:
								{
									position707, tokenIndex707 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l707
									}
									position++
									goto l706
								l707:
									position, tokenIndex = position707, tokenIndex707
								}
								if !_rules[ruleOperator]() {
									goto l705
								}
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l705
								}
								position++
							l708:
								{
									position709, tokenIndex709 := position, tokenIndex
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l709
									}
									position++
									goto l708
								l709:
									position, tokenIndex = position709, tokenIndex709
								}
								if buffer[position] != rune(')') {
									goto l705
								}
								position++
								goto l701
							l705:
								position, tokenIndex = position701, tokenIndex701
							l710:
								{
									position711, tokenIndex711 := position, tokenIndex
									if buffer[position] != rune('+') {
										goto l711
									}
									position++
									if c := buffer[position]; c < rune('0') || c > rune('9') {
										goto l711
									}
									position++
								l712:
									{
										position713, tokenIndex713 := position, tokenIndex
										if c := buffer[position]; c < rune('0') || c > rune('9') {
											goto l713
										}
										position++
										goto l712
									l713:
										position, tokenIndex = position713, tokenIndex713
									}
									goto l710
								l711:
									position, tokenIndex = position711, tokenIndex711
								}
							}
						l701:
							goto l700

							position, tokenIndex = position699, tokenIndex699
						}
					l700:
						goto l697
					l698:
						position, tokenIndex = position697, tokenIndex697
						if !_rules[ruleARMGOTLow12]() {
							goto l714
						}
						goto l697
					l714:
						position, tokenIndex = position697, tokenIndex697
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l715
						}
						goto l697
					l715:
						position, tokenIndex = position697, tokenIndex697
						if !_rules[ruleARMRegister]() {
							goto l693
						}
					}
				l697:
					{
						position716, tokenIndex716 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l716
						}
						position++
						{
							position718, tokenIndex718 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l718
							}
							goto l719
						l718:
							position, tokenIndex = position718, tokenIndex718
						}
					l719:
						if !_rules[ruleARMConstantTweak]() {
							goto l716
						}
						goto l717
					l716:
						position, tokenIndex = position716, tokenIndex716
					}
				l717:
					goto l694
				l693:
					position, tokenIndex = position693, tokenIndex693
				}
			l694:
				if buffer[position] != rune(']') {
					goto l691
				}
				position++
				{
					position720, tokenIndex720 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l720
					}
					goto l721
				l720:
					position, tokenIndex = position720, tokenIndex720
				}
			l721:
				add(ruleARMBaseIndexScale, position692)
			}
			return true
		l691:
			position, tokenIndex = position691, tokenIndex691
			return false
		},
		/* 44 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
		func() bool {
			position722, tokenIndex722 := position, tokenIndex
			{
				position723 := position
				if buffer[position] != rune(':') {
					goto l722
				}
				position++
				{
					position724, tokenIndex724 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l725
					}
					position++
					goto l724
				l725:
					position, tokenIndex = position724, tokenIndex724
					if buffer[position] != rune('G') {
						goto l722
					}
					position++
				}
			l724:
				{
					position726, tokenIndex726 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l727
					}
					position++
					goto l726
				l727:
					position, tokenIndex = position726, tokenIndex726
					if buffer[position] != rune('O') {
						goto l722
					}
					position++
				}
			l726:
				{
					position728, tokenIndex728 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l729
					}
					position++
					goto l728
				l729:
					position, tokenIndex = position728, tokenIndex728
					if buffer[position] != rune('T') {
						goto l722
					}
					position++
				}
			l728:
				if buffer[position] != rune('_') {
					goto l722
				}
				position++
				{
					position730, tokenIndex730 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l731
					}
					position++
					goto l730
				l731:
					position, tokenIndex = position730, tokenIndex730
					if buffer[position] != rune('L') {
						goto l722
					}
					position++
				}
			l730:
				{
					position732, tokenIndex732 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l733
					}
					position++
					goto l732
				l733:
					position, tokenIndex = position732, tokenIndex732
					if buffer[position] != rune('O') {
						goto l722
					}
					position++
				}
			l732:
				if buffer[position] != rune('1') {
					goto l722
				}
				position++
				if buffer[position] != rune('2') {
					goto l722
				}
				position++
				if buffer[position] != rune(':') {
					goto l722
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l722
				}
				add(ruleARMGOTLow12, position723)
			}
			return true
		l722:
			position, tokenIndex = position722, tokenIndex722
			return false
		},
		/* 45 ARMPostincrement <- <'!'> */
		func() bool {
			position734, tokenIndex734 := position, tokenIndex
			{
				position735 := position
				if buffer[position] != rune('!') {
					goto l734
				}
				position++
				add(ruleARMPostincrement, position735)
			}
			return true
		l734:
			position, tokenIndex = position734, tokenIndex734
			return false
		},
		/* 46 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position736, tokenIndex736 := position, tokenIndex
			{
				position737 := position
				if buffer[position] != rune('(') {
					goto l736
				}
				position++
				{
					position738, tokenIndex738 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l738
					}
					goto l739
				l738:
					position, tokenIndex = position738, tokenIndex738
				}
			l739:
				{
					position740, tokenIndex740 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l740
					}
					goto l741
				l740:
					position, tokenIndex = position740, tokenIndex740
				}
			l741:
				{
					position742, tokenIndex742 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l742
					}
					position++
					{
						position744, tokenIndex744 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l744
						}
						goto l745
					l744:
						position, tokenIndex = position744, tokenIndex744
					}
				l745:
					if !_rules[ruleRegisterOrConstant]() {
						goto l742
					}
					{
						position746, tokenIndex746 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l746
						}
						goto l747
					l746:
						position, tokenIndex = position746, tokenIndex746
					}
				l747:
					{
						position748, tokenIndex748 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l748
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l748
						}
						position++
					l750:
						{
							position751, tokenIndex751 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l751
							}
							position++
							goto l750
						l751:
							position, tokenIndex = position751, tokenIndex751
						}
						goto l749
					l748:
						position, tokenIndex = position748, tokenIndex748
					}
				l749:
					goto l743
				l742:
					position, tokenIndex = position742, tokenIndex742
				}
			l743:
				if buffer[position] != rune(')') {
					goto l736
				}
				position++
				add(ruleBaseIndexScale, position737)
			}
			return true
		l736:
			position, tokenIndex = position736, tokenIndex736
			return false
		},
		/* 47 Operator <- <('+' / '-')> */
		func() bool {
			position752, tokenIndex752 := position, tokenIndex
			{
				position753 := position
				{
					position754, tokenIndex754 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l755
					}
					position++
					goto l754
				l755:
					position, tokenIndex = position754, tokenIndex754
					if buffer[position] != rune('-') {
						goto l752
					}
					position++
				}
			l754:
				add(ruleOperator, position753)
			}
			return true
		l752:
			position, tokenIndex = position752, tokenIndex752
			return false
		},
		/* 48 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position756, tokenIndex756 := position, tokenIndex
			{
				position757 := position
				{
					position758, tokenIndex758 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l758
					}
					position++
					goto l759
				l758:
					position, tokenIndex = position758, tokenIndex758
				}
			l759:
				{
					position760, tokenIndex760 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l760
					}
					position++
					goto l761
				l760:
					position, tokenIndex = position760, tokenIndex760
				}
			l761:
				{
					position762, tokenIndex762 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l763
					}
					position++
					{
						position764, tokenIndex764 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l765
						}
						position++
						goto l764
					l765:
						position, tokenIndex = position764, tokenIndex764
						if buffer[position] != rune('B') {
							goto l763
						}
						position++
					}
				l764:
					{
						position768, tokenIndex768 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l769
						}
						position++
						goto l768
					l769:
						position, tokenIndex = position768, tokenIndex768
						if buffer[position] != rune('1') {
							goto l763
						}
						position++
					}
				l768:
				l766:
					{
						position767, tokenIndex767 := position, tokenIndex
						{
							position770, tokenIndex770 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l771
							}
							position++
							goto l770
						l771:
							position, tokenIndex = position770, tokenIndex770
							if buffer[position] != rune('1') {
								goto l767
							}
							position++
						}
					l770:
						goto l766
					l767:
						position, tokenIndex = position767, tokenIndex767
					}
					goto l762
				l763:
					position, tokenIndex = position762, tokenIndex762
					if buffer[position] != rune('0') {
						goto l772
					}
					position++
					{
						position773, tokenIndex773 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l774
						}
						position++
						goto l773
					l774:
						position, tokenIndex = position773, tokenIndex773
						if buffer[position] != rune('X') {
							goto l772
						}
						position++
					}
				l773:
					{
						position777, tokenIndex777 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l778
						}
						position++
						goto l777
					l778:
						position, tokenIndex = position777, tokenIndex777
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l779
						}
						position++
						goto l777
					l779:
						position, tokenIndex = position777, tokenIndex777
						{
							position780, tokenIndex780 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l781
							}
							position++
							goto l780
						l781:
							position, tokenIndex = position780, tokenIndex780
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l772
							}
							position++
						}
					l780:
					}
				l777:
				l775:
					{
						position776, tokenIndex776 := position, tokenIndex
						{
							position782, tokenIndex782 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l783
							}
							position++
							goto l782
						l783:
							position, tokenIndex = position782, tokenIndex782
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l784
							}
							position++
							goto l782
						l784:
							position, tokenIndex = position782, tokenIndex782
							{
								position785, tokenIndex785 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l786
								}
								position++
								goto l785
							l786:
								position, tokenIndex = position785, tokenIndex785
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l776
								}
								position++
							}
						l785:
						}
					l782:
						goto l775
					l776:
						position, tokenIndex = position776, tokenIndex776
					}
					goto l762
				l772:
					position, tokenIndex = position762, tokenIndex762
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l756
					}
					position++
				l787:
					{
						position788, tokenIndex788 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l788
						}
						position++
						goto l787
					l788:
						position, tokenIndex = position788, tokenIndex788
					}
				}
			l762:
				add(ruleOffset, position757)
			}
			return true
		l756:
			position, tokenIndex = position756, tokenIndex756
			return false
		},
		/* 49 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position789, tokenIndex789 := position, tokenIndex
			{
				position790 := position
				{
					position793, tokenIndex793 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l794
					}
					position++
					goto l793
				l794:
					position, tokenIndex = position793, tokenIndex793
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l795
					}
					position++
					goto l793
				l795:
					position, tokenIndex = position793, tokenIndex793
					if buffer[position] != rune('@') {
						goto l789
					}
					position++
				}
			l793:
			l791:
				{
					position792, tokenIndex792 := position, tokenIndex
					{
						position796, tokenIndex796 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l797
						}
						position++
						goto l796
					l797:
						position, tokenIndex = position796, tokenIndex796
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l798
						}
						position++
						goto l796
					l798:
						position, tokenIndex = position796, tokenIndex796
						if buffer[position] != rune('@') {
							goto l792
						}
						position++
					}
				l796:
					goto l791
				l792:
					position, tokenIndex = position792, tokenIndex792
				}
				add(ruleSection, position790)
			}
			return true
		l789:
			position, tokenIndex = position789, tokenIndex789
			return false
		},
		/* 50 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position799, tokenIndex799 := position, tokenIndex
			{
				position800 := position
				if buffer[position] != rune('%') {
					goto l799
				}
				position++
				{
					position801, tokenIndex801 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l802
					}
					position++
					goto l801
				l802:
					position, tokenIndex = position801, tokenIndex801
					if buffer[position] != rune('s') {
						goto l799
					}
					position++
				}
			l801:
				if buffer[position] != rune('s') {
					goto l799
				}
				position++
				if buffer[position] != rune(':') {
					goto l799
				}
				position++
				add(ruleSegmentRegister, position800)
			}
			return true
		l799:
			position, tokenIndex = position799, tokenIndex799
			return false
		},
	}
	p.rules = _rules
	return nil
}
