package main

import (
	"fmt"
	"math"
	"sort"
	"strconv"
)

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
	ruleARMCapReference
	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",
	"ARMCapReference",
	"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(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.Printf(" ")
			}
			rule := rul3s[node.pegRule]
			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
			if !pretty {
				fmt.Printf("%v %v\n", rule, quote)
			} else {
				fmt.Printf("\x1B[34m%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(buffer string) {
	node.print(false, buffer)
}

func (node *node32) PrettyPrint(buffer string) {
	node.print(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(buffer)
}

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

func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
	if tree := t.tree; int(index) >= len(tree) {
		expanded := make([]token32, 2*len(tree))
		copy(expanded, tree)
		t.tree = expanded
	}
	t.tree[index] = token32{
		pegRule: rule,
		begin:   begin,
		end:     end,
	}
}

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

type Asm struct {
	Buffer string
	buffer []rune
	rules  [53]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, error := []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)
		error += 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 error
}

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

func (p *Asm) Init() {
	var (
		max                  token32
		position, tokenIndex uint32
		buffer               []rune
	)
	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 := tokens32{tree: make([]token32, math.MaxInt16)}
	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]+)?) / ARMGOTLow12 / ARMCapReference / 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
							if buffer[position] != rune('*') {
								goto l699
							}
							position++
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l699
							}
							position++
						l701:
							{
								position702, tokenIndex702 := position, tokenIndex
								if c := buffer[position]; c < rune('0') || c > rune('9') {
									goto l702
								}
								position++
								goto l701
							l702:
								position, tokenIndex = position702, tokenIndex702
							}
							goto l700
						l699:
							position, tokenIndex = position699, tokenIndex699
						}
					l700:
						goto l697
					l698:
						position, tokenIndex = position697, tokenIndex697
						if !_rules[ruleARMGOTLow12]() {
							goto l703
						}
						goto l697
					l703:
						position, tokenIndex = position697, tokenIndex697
						if !_rules[ruleARMCapReference]() {
							goto l704
						}
						goto l697
					l704:
						position, tokenIndex = position697, tokenIndex697
						if !_rules[ruleLow12BitsSymbolRef]() {
							goto l705
						}
						goto l697
					l705:
						position, tokenIndex = position697, tokenIndex697
						if !_rules[ruleARMRegister]() {
							goto l693
						}
					}
				l697:
					{
						position706, tokenIndex706 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l706
						}
						position++
						{
							position708, tokenIndex708 := position, tokenIndex
							if !_rules[ruleWS]() {
								goto l708
							}
							goto l709
						l708:
							position, tokenIndex = position708, tokenIndex708
						}
					l709:
						if !_rules[ruleARMConstantTweak]() {
							goto l706
						}
						goto l707
					l706:
						position, tokenIndex = position706, tokenIndex706
					}
				l707:
					goto l694
				l693:
					position, tokenIndex = position693, tokenIndex693
				}
			l694:
				if buffer[position] != rune(']') {
					goto l691
				}
				position++
				{
					position710, tokenIndex710 := position, tokenIndex
					if !_rules[ruleARMPostincrement]() {
						goto l710
					}
					goto l711
				l710:
					position, tokenIndex = position710, tokenIndex710
				}
			l711:
				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 {
			position712, tokenIndex712 := position, tokenIndex
			{
				position713 := position
				if buffer[position] != rune(':') {
					goto l712
				}
				position++
				{
					position714, tokenIndex714 := position, tokenIndex
					if buffer[position] != rune('g') {
						goto l715
					}
					position++
					goto l714
				l715:
					position, tokenIndex = position714, tokenIndex714
					if buffer[position] != rune('G') {
						goto l712
					}
					position++
				}
			l714:
				{
					position716, tokenIndex716 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l717
					}
					position++
					goto l716
				l717:
					position, tokenIndex = position716, tokenIndex716
					if buffer[position] != rune('O') {
						goto l712
					}
					position++
				}
			l716:
				{
					position718, tokenIndex718 := position, tokenIndex
					if buffer[position] != rune('t') {
						goto l719
					}
					position++
					goto l718
				l719:
					position, tokenIndex = position718, tokenIndex718
					if buffer[position] != rune('T') {
						goto l712
					}
					position++
				}
			l718:
				if buffer[position] != rune('_') {
					goto l712
				}
				position++
				{
					position720, tokenIndex720 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l721
					}
					position++
					goto l720
				l721:
					position, tokenIndex = position720, tokenIndex720
					if buffer[position] != rune('L') {
						goto l712
					}
					position++
				}
			l720:
				{
					position722, tokenIndex722 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l723
					}
					position++
					goto l722
				l723:
					position, tokenIndex = position722, tokenIndex722
					if buffer[position] != rune('O') {
						goto l712
					}
					position++
				}
			l722:
				if buffer[position] != rune('1') {
					goto l712
				}
				position++
				if buffer[position] != rune('2') {
					goto l712
				}
				position++
				if buffer[position] != rune(':') {
					goto l712
				}
				position++
				if !_rules[ruleSymbolName]() {
					goto l712
				}
				add(ruleARMGOTLow12, position713)
			}
			return true
		l712:
			position, tokenIndex = position712, tokenIndex712
			return false
		},
		/* 45 ARMCapReference <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' ('o' / 'O') ('p' / 'P') ('e' / 'E') ('n' / 'N') ('s' / 'S') ('s' / 'S') ('l' / 'L') '_' ('a' / 'A') ('r' / 'R') ('m' / 'M') ('c' / 'C') ('a' / 'A') ('p' / 'P') '_' ('p' / 'P'))> */
		func() bool {
			position724, tokenIndex724 := position, tokenIndex
			{
				position725 := position
				if buffer[position] != rune(':') {
					goto l724
				}
				position++
				{
					position726, tokenIndex726 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l727
					}
					position++
					goto l726
				l727:
					position, tokenIndex = position726, tokenIndex726
					if buffer[position] != rune('L') {
						goto l724
					}
					position++
				}
			l726:
				{
					position728, tokenIndex728 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l729
					}
					position++
					goto l728
				l729:
					position, tokenIndex = position728, tokenIndex728
					if buffer[position] != rune('O') {
						goto l724
					}
					position++
				}
			l728:
				if buffer[position] != rune('1') {
					goto l724
				}
				position++
				if buffer[position] != rune('2') {
					goto l724
				}
				position++
				if buffer[position] != rune(':') {
					goto l724
				}
				position++
				{
					position730, tokenIndex730 := position, tokenIndex
					if buffer[position] != rune('o') {
						goto l731
					}
					position++
					goto l730
				l731:
					position, tokenIndex = position730, tokenIndex730
					if buffer[position] != rune('O') {
						goto l724
					}
					position++
				}
			l730:
				{
					position732, tokenIndex732 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l733
					}
					position++
					goto l732
				l733:
					position, tokenIndex = position732, tokenIndex732
					if buffer[position] != rune('P') {
						goto l724
					}
					position++
				}
			l732:
				{
					position734, tokenIndex734 := position, tokenIndex
					if buffer[position] != rune('e') {
						goto l735
					}
					position++
					goto l734
				l735:
					position, tokenIndex = position734, tokenIndex734
					if buffer[position] != rune('E') {
						goto l724
					}
					position++
				}
			l734:
				{
					position736, tokenIndex736 := position, tokenIndex
					if buffer[position] != rune('n') {
						goto l737
					}
					position++
					goto l736
				l737:
					position, tokenIndex = position736, tokenIndex736
					if buffer[position] != rune('N') {
						goto l724
					}
					position++
				}
			l736:
				{
					position738, tokenIndex738 := position, tokenIndex
					if buffer[position] != rune('s') {
						goto l739
					}
					position++
					goto l738
				l739:
					position, tokenIndex = position738, tokenIndex738
					if buffer[position] != rune('S') {
						goto l724
					}
					position++
				}
			l738:
				{
					position740, tokenIndex740 := position, tokenIndex
					if buffer[position] != rune('s') {
						goto l741
					}
					position++
					goto l740
				l741:
					position, tokenIndex = position740, tokenIndex740
					if buffer[position] != rune('S') {
						goto l724
					}
					position++
				}
			l740:
				{
					position742, tokenIndex742 := position, tokenIndex
					if buffer[position] != rune('l') {
						goto l743
					}
					position++
					goto l742
				l743:
					position, tokenIndex = position742, tokenIndex742
					if buffer[position] != rune('L') {
						goto l724
					}
					position++
				}
			l742:
				if buffer[position] != rune('_') {
					goto l724
				}
				position++
				{
					position744, tokenIndex744 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l745
					}
					position++
					goto l744
				l745:
					position, tokenIndex = position744, tokenIndex744
					if buffer[position] != rune('A') {
						goto l724
					}
					position++
				}
			l744:
				{
					position746, tokenIndex746 := position, tokenIndex
					if buffer[position] != rune('r') {
						goto l747
					}
					position++
					goto l746
				l747:
					position, tokenIndex = position746, tokenIndex746
					if buffer[position] != rune('R') {
						goto l724
					}
					position++
				}
			l746:
				{
					position748, tokenIndex748 := position, tokenIndex
					if buffer[position] != rune('m') {
						goto l749
					}
					position++
					goto l748
				l749:
					position, tokenIndex = position748, tokenIndex748
					if buffer[position] != rune('M') {
						goto l724
					}
					position++
				}
			l748:
				{
					position750, tokenIndex750 := position, tokenIndex
					if buffer[position] != rune('c') {
						goto l751
					}
					position++
					goto l750
				l751:
					position, tokenIndex = position750, tokenIndex750
					if buffer[position] != rune('C') {
						goto l724
					}
					position++
				}
			l750:
				{
					position752, tokenIndex752 := position, tokenIndex
					if buffer[position] != rune('a') {
						goto l753
					}
					position++
					goto l752
				l753:
					position, tokenIndex = position752, tokenIndex752
					if buffer[position] != rune('A') {
						goto l724
					}
					position++
				}
			l752:
				{
					position754, tokenIndex754 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l755
					}
					position++
					goto l754
				l755:
					position, tokenIndex = position754, tokenIndex754
					if buffer[position] != rune('P') {
						goto l724
					}
					position++
				}
			l754:
				if buffer[position] != rune('_') {
					goto l724
				}
				position++
				{
					position756, tokenIndex756 := position, tokenIndex
					if buffer[position] != rune('p') {
						goto l757
					}
					position++
					goto l756
				l757:
					position, tokenIndex = position756, tokenIndex756
					if buffer[position] != rune('P') {
						goto l724
					}
					position++
				}
			l756:
				add(ruleARMCapReference, position725)
			}
			return true
		l724:
			position, tokenIndex = position724, tokenIndex724
			return false
		},
		/* 46 ARMPostincrement <- <'!'> */
		func() bool {
			position758, tokenIndex758 := position, tokenIndex
			{
				position759 := position
				if buffer[position] != rune('!') {
					goto l758
				}
				position++
				add(ruleARMPostincrement, position759)
			}
			return true
		l758:
			position, tokenIndex = position758, tokenIndex758
			return false
		},
		/* 47 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
		func() bool {
			position760, tokenIndex760 := position, tokenIndex
			{
				position761 := position
				if buffer[position] != rune('(') {
					goto l760
				}
				position++
				{
					position762, tokenIndex762 := position, tokenIndex
					if !_rules[ruleRegisterOrConstant]() {
						goto l762
					}
					goto l763
				l762:
					position, tokenIndex = position762, tokenIndex762
				}
			l763:
				{
					position764, tokenIndex764 := position, tokenIndex
					if !_rules[ruleWS]() {
						goto l764
					}
					goto l765
				l764:
					position, tokenIndex = position764, tokenIndex764
				}
			l765:
				{
					position766, tokenIndex766 := position, tokenIndex
					if buffer[position] != rune(',') {
						goto l766
					}
					position++
					{
						position768, tokenIndex768 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l768
						}
						goto l769
					l768:
						position, tokenIndex = position768, tokenIndex768
					}
				l769:
					if !_rules[ruleRegisterOrConstant]() {
						goto l766
					}
					{
						position770, tokenIndex770 := position, tokenIndex
						if !_rules[ruleWS]() {
							goto l770
						}
						goto l771
					l770:
						position, tokenIndex = position770, tokenIndex770
					}
				l771:
					{
						position772, tokenIndex772 := position, tokenIndex
						if buffer[position] != rune(',') {
							goto l772
						}
						position++
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l772
						}
						position++
					l774:
						{
							position775, tokenIndex775 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l775
							}
							position++
							goto l774
						l775:
							position, tokenIndex = position775, tokenIndex775
						}
						goto l773
					l772:
						position, tokenIndex = position772, tokenIndex772
					}
				l773:
					goto l767
				l766:
					position, tokenIndex = position766, tokenIndex766
				}
			l767:
				if buffer[position] != rune(')') {
					goto l760
				}
				position++
				add(ruleBaseIndexScale, position761)
			}
			return true
		l760:
			position, tokenIndex = position760, tokenIndex760
			return false
		},
		/* 48 Operator <- <('+' / '-')> */
		func() bool {
			position776, tokenIndex776 := position, tokenIndex
			{
				position777 := position
				{
					position778, tokenIndex778 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l779
					}
					position++
					goto l778
				l779:
					position, tokenIndex = position778, tokenIndex778
					if buffer[position] != rune('-') {
						goto l776
					}
					position++
				}
			l778:
				add(ruleOperator, position777)
			}
			return true
		l776:
			position, tokenIndex = position776, tokenIndex776
			return false
		},
		/* 49 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
		func() bool {
			position780, tokenIndex780 := position, tokenIndex
			{
				position781 := position
				{
					position782, tokenIndex782 := position, tokenIndex
					if buffer[position] != rune('+') {
						goto l782
					}
					position++
					goto l783
				l782:
					position, tokenIndex = position782, tokenIndex782
				}
			l783:
				{
					position784, tokenIndex784 := position, tokenIndex
					if buffer[position] != rune('-') {
						goto l784
					}
					position++
					goto l785
				l784:
					position, tokenIndex = position784, tokenIndex784
				}
			l785:
				{
					position786, tokenIndex786 := position, tokenIndex
					if buffer[position] != rune('0') {
						goto l787
					}
					position++
					{
						position788, tokenIndex788 := position, tokenIndex
						if buffer[position] != rune('b') {
							goto l789
						}
						position++
						goto l788
					l789:
						position, tokenIndex = position788, tokenIndex788
						if buffer[position] != rune('B') {
							goto l787
						}
						position++
					}
				l788:
					{
						position792, tokenIndex792 := position, tokenIndex
						if buffer[position] != rune('0') {
							goto l793
						}
						position++
						goto l792
					l793:
						position, tokenIndex = position792, tokenIndex792
						if buffer[position] != rune('1') {
							goto l787
						}
						position++
					}
				l792:
				l790:
					{
						position791, tokenIndex791 := position, tokenIndex
						{
							position794, tokenIndex794 := position, tokenIndex
							if buffer[position] != rune('0') {
								goto l795
							}
							position++
							goto l794
						l795:
							position, tokenIndex = position794, tokenIndex794
							if buffer[position] != rune('1') {
								goto l791
							}
							position++
						}
					l794:
						goto l790
					l791:
						position, tokenIndex = position791, tokenIndex791
					}
					goto l786
				l787:
					position, tokenIndex = position786, tokenIndex786
					if buffer[position] != rune('0') {
						goto l796
					}
					position++
					{
						position797, tokenIndex797 := position, tokenIndex
						if buffer[position] != rune('x') {
							goto l798
						}
						position++
						goto l797
					l798:
						position, tokenIndex = position797, tokenIndex797
						if buffer[position] != rune('X') {
							goto l796
						}
						position++
					}
				l797:
					{
						position801, tokenIndex801 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l802
						}
						position++
						goto l801
					l802:
						position, tokenIndex = position801, tokenIndex801
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l803
						}
						position++
						goto l801
					l803:
						position, tokenIndex = position801, tokenIndex801
						{
							position804, tokenIndex804 := position, tokenIndex
							if c := buffer[position]; c < rune('a') || c > rune('f') {
								goto l805
							}
							position++
							goto l804
						l805:
							position, tokenIndex = position804, tokenIndex804
							if c := buffer[position]; c < rune('A') || c > rune('F') {
								goto l796
							}
							position++
						}
					l804:
					}
				l801:
				l799:
					{
						position800, tokenIndex800 := position, tokenIndex
						{
							position806, tokenIndex806 := position, tokenIndex
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l807
							}
							position++
							goto l806
						l807:
							position, tokenIndex = position806, tokenIndex806
							if c := buffer[position]; c < rune('0') || c > rune('9') {
								goto l808
							}
							position++
							goto l806
						l808:
							position, tokenIndex = position806, tokenIndex806
							{
								position809, tokenIndex809 := position, tokenIndex
								if c := buffer[position]; c < rune('a') || c > rune('f') {
									goto l810
								}
								position++
								goto l809
							l810:
								position, tokenIndex = position809, tokenIndex809
								if c := buffer[position]; c < rune('A') || c > rune('F') {
									goto l800
								}
								position++
							}
						l809:
						}
					l806:
						goto l799
					l800:
						position, tokenIndex = position800, tokenIndex800
					}
					goto l786
				l796:
					position, tokenIndex = position786, tokenIndex786
					if c := buffer[position]; c < rune('0') || c > rune('9') {
						goto l780
					}
					position++
				l811:
					{
						position812, tokenIndex812 := position, tokenIndex
						if c := buffer[position]; c < rune('0') || c > rune('9') {
							goto l812
						}
						position++
						goto l811
					l812:
						position, tokenIndex = position812, tokenIndex812
					}
				}
			l786:
				add(ruleOffset, position781)
			}
			return true
		l780:
			position, tokenIndex = position780, tokenIndex780
			return false
		},
		/* 50 Section <- <([a-z] / [A-Z] / '@')+> */
		func() bool {
			position813, tokenIndex813 := position, tokenIndex
			{
				position814 := position
				{
					position817, tokenIndex817 := position, tokenIndex
					if c := buffer[position]; c < rune('a') || c > rune('z') {
						goto l818
					}
					position++
					goto l817
				l818:
					position, tokenIndex = position817, tokenIndex817
					if c := buffer[position]; c < rune('A') || c > rune('Z') {
						goto l819
					}
					position++
					goto l817
				l819:
					position, tokenIndex = position817, tokenIndex817
					if buffer[position] != rune('@') {
						goto l813
					}
					position++
				}
			l817:
			l815:
				{
					position816, tokenIndex816 := position, tokenIndex
					{
						position820, tokenIndex820 := position, tokenIndex
						if c := buffer[position]; c < rune('a') || c > rune('z') {
							goto l821
						}
						position++
						goto l820
					l821:
						position, tokenIndex = position820, tokenIndex820
						if c := buffer[position]; c < rune('A') || c > rune('Z') {
							goto l822
						}
						position++
						goto l820
					l822:
						position, tokenIndex = position820, tokenIndex820
						if buffer[position] != rune('@') {
							goto l816
						}
						position++
					}
				l820:
					goto l815
				l816:
					position, tokenIndex = position816, tokenIndex816
				}
				add(ruleSection, position814)
			}
			return true
		l813:
			position, tokenIndex = position813, tokenIndex813
			return false
		},
		/* 51 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
		func() bool {
			position823, tokenIndex823 := position, tokenIndex
			{
				position824 := position
				if buffer[position] != rune('%') {
					goto l823
				}
				position++
				{
					position825, tokenIndex825 := position, tokenIndex
					if c := buffer[position]; c < rune('c') || c > rune('g') {
						goto l826
					}
					position++
					goto l825
				l826:
					position, tokenIndex = position825, tokenIndex825
					if buffer[position] != rune('s') {
						goto l823
					}
					position++
				}
			l825:
				if buffer[position] != rune('s') {
					goto l823
				}
				position++
				if buffer[position] != rune(':') {
					goto l823
				}
				position++
				add(ruleSegmentRegister, position824)
			}
			return true
		l823:
			position, tokenIndex = position823, tokenIndex823
			return false
		},
	}
	p.rules = _rules
}
