• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1package main
2
3import (
4	"fmt"
5	"math"
6	"sort"
7	"strconv"
8)
9
10const endSymbol rune = 1114112
11
12/* The rule types inferred from the grammar are below. */
13type pegRule uint8
14
15const (
16	ruleUnknown pegRule = iota
17	ruleAsmFile
18	ruleStatement
19	ruleGlobalDirective
20	ruleDirective
21	ruleDirectiveName
22	ruleLocationDirective
23	ruleFileDirective
24	ruleLocDirective
25	ruleArgs
26	ruleArg
27	ruleQuotedArg
28	ruleQuotedText
29	ruleLabelContainingDirective
30	ruleLabelContainingDirectiveName
31	ruleSymbolArgs
32	ruleSymbolArg
33	ruleSymbolType
34	ruleDot
35	ruleTCMarker
36	ruleEscapedChar
37	ruleWS
38	ruleComment
39	ruleLabel
40	ruleSymbolName
41	ruleLocalSymbol
42	ruleLocalLabel
43	ruleLocalLabelRef
44	ruleInstruction
45	ruleInstructionName
46	ruleInstructionArg
47	ruleGOTLocation
48	ruleGOTSymbolOffset
49	ruleAVX512Token
50	ruleTOCRefHigh
51	ruleTOCRefLow
52	ruleIndirectionIndicator
53	ruleRegisterOrConstant
54	ruleARMConstantTweak
55	ruleARMRegister
56	ruleARMVectorRegister
57	ruleMemoryRef
58	ruleSymbolRef
59	ruleLow12BitsSymbolRef
60	ruleARMBaseIndexScale
61	ruleARMGOTLow12
62	ruleARMPostincrement
63	ruleBaseIndexScale
64	ruleOperator
65	ruleOffset
66	ruleSection
67	ruleSegmentRegister
68)
69
70var rul3s = [...]string{
71	"Unknown",
72	"AsmFile",
73	"Statement",
74	"GlobalDirective",
75	"Directive",
76	"DirectiveName",
77	"LocationDirective",
78	"FileDirective",
79	"LocDirective",
80	"Args",
81	"Arg",
82	"QuotedArg",
83	"QuotedText",
84	"LabelContainingDirective",
85	"LabelContainingDirectiveName",
86	"SymbolArgs",
87	"SymbolArg",
88	"SymbolType",
89	"Dot",
90	"TCMarker",
91	"EscapedChar",
92	"WS",
93	"Comment",
94	"Label",
95	"SymbolName",
96	"LocalSymbol",
97	"LocalLabel",
98	"LocalLabelRef",
99	"Instruction",
100	"InstructionName",
101	"InstructionArg",
102	"GOTLocation",
103	"GOTSymbolOffset",
104	"AVX512Token",
105	"TOCRefHigh",
106	"TOCRefLow",
107	"IndirectionIndicator",
108	"RegisterOrConstant",
109	"ARMConstantTweak",
110	"ARMRegister",
111	"ARMVectorRegister",
112	"MemoryRef",
113	"SymbolRef",
114	"Low12BitsSymbolRef",
115	"ARMBaseIndexScale",
116	"ARMGOTLow12",
117	"ARMPostincrement",
118	"BaseIndexScale",
119	"Operator",
120	"Offset",
121	"Section",
122	"SegmentRegister",
123}
124
125type token32 struct {
126	pegRule
127	begin, end uint32
128}
129
130func (t *token32) String() string {
131	return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end)
132}
133
134type node32 struct {
135	token32
136	up, next *node32
137}
138
139func (node *node32) print(pretty bool, buffer string) {
140	var print func(node *node32, depth int)
141	print = func(node *node32, depth int) {
142		for node != nil {
143			for c := 0; c < depth; c++ {
144				fmt.Printf(" ")
145			}
146			rule := rul3s[node.pegRule]
147			quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end])))
148			if !pretty {
149				fmt.Printf("%v %v\n", rule, quote)
150			} else {
151				fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote)
152			}
153			if node.up != nil {
154				print(node.up, depth+1)
155			}
156			node = node.next
157		}
158	}
159	print(node, 0)
160}
161
162func (node *node32) Print(buffer string) {
163	node.print(false, buffer)
164}
165
166func (node *node32) PrettyPrint(buffer string) {
167	node.print(true, buffer)
168}
169
170type tokens32 struct {
171	tree []token32
172}
173
174func (t *tokens32) Trim(length uint32) {
175	t.tree = t.tree[:length]
176}
177
178func (t *tokens32) Print() {
179	for _, token := range t.tree {
180		fmt.Println(token.String())
181	}
182}
183
184func (t *tokens32) AST() *node32 {
185	type element struct {
186		node *node32
187		down *element
188	}
189	tokens := t.Tokens()
190	var stack *element
191	for _, token := range tokens {
192		if token.begin == token.end {
193			continue
194		}
195		node := &node32{token32: token}
196		for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end {
197			stack.node.next = node.up
198			node.up = stack.node
199			stack = stack.down
200		}
201		stack = &element{node: node, down: stack}
202	}
203	if stack != nil {
204		return stack.node
205	}
206	return nil
207}
208
209func (t *tokens32) PrintSyntaxTree(buffer string) {
210	t.AST().Print(buffer)
211}
212
213func (t *tokens32) PrettyPrintSyntaxTree(buffer string) {
214	t.AST().PrettyPrint(buffer)
215}
216
217func (t *tokens32) Add(rule pegRule, begin, end, index uint32) {
218	if tree := t.tree; int(index) >= len(tree) {
219		expanded := make([]token32, 2*len(tree))
220		copy(expanded, tree)
221		t.tree = expanded
222	}
223	t.tree[index] = token32{
224		pegRule: rule,
225		begin:   begin,
226		end:     end,
227	}
228}
229
230func (t *tokens32) Tokens() []token32 {
231	return t.tree
232}
233
234type Asm struct {
235	Buffer string
236	buffer []rune
237	rules  [52]func() bool
238	parse  func(rule ...int) error
239	reset  func()
240	Pretty bool
241	tokens32
242}
243
244func (p *Asm) Parse(rule ...int) error {
245	return p.parse(rule...)
246}
247
248func (p *Asm) Reset() {
249	p.reset()
250}
251
252type textPosition struct {
253	line, symbol int
254}
255
256type textPositionMap map[int]textPosition
257
258func translatePositions(buffer []rune, positions []int) textPositionMap {
259	length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0
260	sort.Ints(positions)
261
262search:
263	for i, c := range buffer {
264		if c == '\n' {
265			line, symbol = line+1, 0
266		} else {
267			symbol++
268		}
269		if i == positions[j] {
270			translations[positions[j]] = textPosition{line, symbol}
271			for j++; j < length; j++ {
272				if i != positions[j] {
273					continue search
274				}
275			}
276			break search
277		}
278	}
279
280	return translations
281}
282
283type parseError struct {
284	p   *Asm
285	max token32
286}
287
288func (e *parseError) Error() string {
289	tokens, error := []token32{e.max}, "\n"
290	positions, p := make([]int, 2*len(tokens)), 0
291	for _, token := range tokens {
292		positions[p], p = int(token.begin), p+1
293		positions[p], p = int(token.end), p+1
294	}
295	translations := translatePositions(e.p.buffer, positions)
296	format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n"
297	if e.p.Pretty {
298		format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n"
299	}
300	for _, token := range tokens {
301		begin, end := int(token.begin), int(token.end)
302		error += fmt.Sprintf(format,
303			rul3s[token.pegRule],
304			translations[begin].line, translations[begin].symbol,
305			translations[end].line, translations[end].symbol,
306			strconv.Quote(string(e.p.buffer[begin:end])))
307	}
308
309	return error
310}
311
312func (p *Asm) PrintSyntaxTree() {
313	if p.Pretty {
314		p.tokens32.PrettyPrintSyntaxTree(p.Buffer)
315	} else {
316		p.tokens32.PrintSyntaxTree(p.Buffer)
317	}
318}
319
320func (p *Asm) Init() {
321	var (
322		max                  token32
323		position, tokenIndex uint32
324		buffer               []rune
325	)
326	p.reset = func() {
327		max = token32{}
328		position, tokenIndex = 0, 0
329
330		p.buffer = []rune(p.Buffer)
331		if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol {
332			p.buffer = append(p.buffer, endSymbol)
333		}
334		buffer = p.buffer
335	}
336	p.reset()
337
338	_rules := p.rules
339	tree := tokens32{tree: make([]token32, math.MaxInt16)}
340	p.parse = func(rule ...int) error {
341		r := 1
342		if len(rule) > 0 {
343			r = rule[0]
344		}
345		matches := p.rules[r]()
346		p.tokens32 = tree
347		if matches {
348			p.Trim(tokenIndex)
349			return nil
350		}
351		return &parseError{p, max}
352	}
353
354	add := func(rule pegRule, begin uint32) {
355		tree.Add(rule, begin, position, tokenIndex)
356		tokenIndex++
357		if begin != position && position > max.end {
358			max = token32{rule, begin, position}
359		}
360	}
361
362	matchDot := func() bool {
363		if buffer[position] != endSymbol {
364			position++
365			return true
366		}
367		return false
368	}
369
370	/*matchChar := func(c byte) bool {
371		if buffer[position] == c {
372			position++
373			return true
374		}
375		return false
376	}*/
377
378	/*matchRange := func(lower byte, upper byte) bool {
379		if c := buffer[position]; c >= lower && c <= upper {
380			position++
381			return true
382		}
383		return false
384	}*/
385
386	_rules = [...]func() bool{
387		nil,
388		/* 0 AsmFile <- <(Statement* !.)> */
389		func() bool {
390			position0, tokenIndex0 := position, tokenIndex
391			{
392				position1 := position
393			l2:
394				{
395					position3, tokenIndex3 := position, tokenIndex
396					if !_rules[ruleStatement]() {
397						goto l3
398					}
399					goto l2
400				l3:
401					position, tokenIndex = position3, tokenIndex3
402				}
403				{
404					position4, tokenIndex4 := position, tokenIndex
405					if !matchDot() {
406						goto l4
407					}
408					goto l0
409				l4:
410					position, tokenIndex = position4, tokenIndex4
411				}
412				add(ruleAsmFile, position1)
413			}
414			return true
415		l0:
416			position, tokenIndex = position0, tokenIndex0
417			return false
418		},
419		/* 1 Statement <- <(WS? (Label / ((GlobalDirective / LocationDirective / LabelContainingDirective / Instruction / Directive / Comment / ) WS? ((Comment? '\n') / ';'))))> */
420		func() bool {
421			position5, tokenIndex5 := position, tokenIndex
422			{
423				position6 := position
424				{
425					position7, tokenIndex7 := position, tokenIndex
426					if !_rules[ruleWS]() {
427						goto l7
428					}
429					goto l8
430				l7:
431					position, tokenIndex = position7, tokenIndex7
432				}
433			l8:
434				{
435					position9, tokenIndex9 := position, tokenIndex
436					if !_rules[ruleLabel]() {
437						goto l10
438					}
439					goto l9
440				l10:
441					position, tokenIndex = position9, tokenIndex9
442					{
443						position11, tokenIndex11 := position, tokenIndex
444						if !_rules[ruleGlobalDirective]() {
445							goto l12
446						}
447						goto l11
448					l12:
449						position, tokenIndex = position11, tokenIndex11
450						if !_rules[ruleLocationDirective]() {
451							goto l13
452						}
453						goto l11
454					l13:
455						position, tokenIndex = position11, tokenIndex11
456						if !_rules[ruleLabelContainingDirective]() {
457							goto l14
458						}
459						goto l11
460					l14:
461						position, tokenIndex = position11, tokenIndex11
462						if !_rules[ruleInstruction]() {
463							goto l15
464						}
465						goto l11
466					l15:
467						position, tokenIndex = position11, tokenIndex11
468						if !_rules[ruleDirective]() {
469							goto l16
470						}
471						goto l11
472					l16:
473						position, tokenIndex = position11, tokenIndex11
474						if !_rules[ruleComment]() {
475							goto l17
476						}
477						goto l11
478					l17:
479						position, tokenIndex = position11, tokenIndex11
480					}
481				l11:
482					{
483						position18, tokenIndex18 := position, tokenIndex
484						if !_rules[ruleWS]() {
485							goto l18
486						}
487						goto l19
488					l18:
489						position, tokenIndex = position18, tokenIndex18
490					}
491				l19:
492					{
493						position20, tokenIndex20 := position, tokenIndex
494						{
495							position22, tokenIndex22 := position, tokenIndex
496							if !_rules[ruleComment]() {
497								goto l22
498							}
499							goto l23
500						l22:
501							position, tokenIndex = position22, tokenIndex22
502						}
503					l23:
504						if buffer[position] != rune('\n') {
505							goto l21
506						}
507						position++
508						goto l20
509					l21:
510						position, tokenIndex = position20, tokenIndex20
511						if buffer[position] != rune(';') {
512							goto l5
513						}
514						position++
515					}
516				l20:
517				}
518			l9:
519				add(ruleStatement, position6)
520			}
521			return true
522		l5:
523			position, tokenIndex = position5, tokenIndex5
524			return false
525		},
526		/* 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)> */
527		func() bool {
528			position24, tokenIndex24 := position, tokenIndex
529			{
530				position25 := position
531				{
532					position26, tokenIndex26 := position, tokenIndex
533					if buffer[position] != rune('.') {
534						goto l27
535					}
536					position++
537					{
538						position28, tokenIndex28 := position, tokenIndex
539						if buffer[position] != rune('g') {
540							goto l29
541						}
542						position++
543						goto l28
544					l29:
545						position, tokenIndex = position28, tokenIndex28
546						if buffer[position] != rune('G') {
547							goto l27
548						}
549						position++
550					}
551				l28:
552					{
553						position30, tokenIndex30 := position, tokenIndex
554						if buffer[position] != rune('l') {
555							goto l31
556						}
557						position++
558						goto l30
559					l31:
560						position, tokenIndex = position30, tokenIndex30
561						if buffer[position] != rune('L') {
562							goto l27
563						}
564						position++
565					}
566				l30:
567					{
568						position32, tokenIndex32 := position, tokenIndex
569						if buffer[position] != rune('o') {
570							goto l33
571						}
572						position++
573						goto l32
574					l33:
575						position, tokenIndex = position32, tokenIndex32
576						if buffer[position] != rune('O') {
577							goto l27
578						}
579						position++
580					}
581				l32:
582					{
583						position34, tokenIndex34 := position, tokenIndex
584						if buffer[position] != rune('b') {
585							goto l35
586						}
587						position++
588						goto l34
589					l35:
590						position, tokenIndex = position34, tokenIndex34
591						if buffer[position] != rune('B') {
592							goto l27
593						}
594						position++
595					}
596				l34:
597					{
598						position36, tokenIndex36 := position, tokenIndex
599						if buffer[position] != rune('a') {
600							goto l37
601						}
602						position++
603						goto l36
604					l37:
605						position, tokenIndex = position36, tokenIndex36
606						if buffer[position] != rune('A') {
607							goto l27
608						}
609						position++
610					}
611				l36:
612					{
613						position38, tokenIndex38 := position, tokenIndex
614						if buffer[position] != rune('l') {
615							goto l39
616						}
617						position++
618						goto l38
619					l39:
620						position, tokenIndex = position38, tokenIndex38
621						if buffer[position] != rune('L') {
622							goto l27
623						}
624						position++
625					}
626				l38:
627					goto l26
628				l27:
629					position, tokenIndex = position26, tokenIndex26
630					if buffer[position] != rune('.') {
631						goto l24
632					}
633					position++
634					{
635						position40, tokenIndex40 := position, tokenIndex
636						if buffer[position] != rune('g') {
637							goto l41
638						}
639						position++
640						goto l40
641					l41:
642						position, tokenIndex = position40, tokenIndex40
643						if buffer[position] != rune('G') {
644							goto l24
645						}
646						position++
647					}
648				l40:
649					{
650						position42, tokenIndex42 := position, tokenIndex
651						if buffer[position] != rune('l') {
652							goto l43
653						}
654						position++
655						goto l42
656					l43:
657						position, tokenIndex = position42, tokenIndex42
658						if buffer[position] != rune('L') {
659							goto l24
660						}
661						position++
662					}
663				l42:
664					{
665						position44, tokenIndex44 := position, tokenIndex
666						if buffer[position] != rune('o') {
667							goto l45
668						}
669						position++
670						goto l44
671					l45:
672						position, tokenIndex = position44, tokenIndex44
673						if buffer[position] != rune('O') {
674							goto l24
675						}
676						position++
677					}
678				l44:
679					{
680						position46, tokenIndex46 := position, tokenIndex
681						if buffer[position] != rune('b') {
682							goto l47
683						}
684						position++
685						goto l46
686					l47:
687						position, tokenIndex = position46, tokenIndex46
688						if buffer[position] != rune('B') {
689							goto l24
690						}
691						position++
692					}
693				l46:
694					{
695						position48, tokenIndex48 := position, tokenIndex
696						if buffer[position] != rune('l') {
697							goto l49
698						}
699						position++
700						goto l48
701					l49:
702						position, tokenIndex = position48, tokenIndex48
703						if buffer[position] != rune('L') {
704							goto l24
705						}
706						position++
707					}
708				l48:
709				}
710			l26:
711				if !_rules[ruleWS]() {
712					goto l24
713				}
714				if !_rules[ruleSymbolName]() {
715					goto l24
716				}
717				add(ruleGlobalDirective, position25)
718			}
719			return true
720		l24:
721			position, tokenIndex = position24, tokenIndex24
722			return false
723		},
724		/* 3 Directive <- <('.' DirectiveName (WS Args)?)> */
725		func() bool {
726			position50, tokenIndex50 := position, tokenIndex
727			{
728				position51 := position
729				if buffer[position] != rune('.') {
730					goto l50
731				}
732				position++
733				if !_rules[ruleDirectiveName]() {
734					goto l50
735				}
736				{
737					position52, tokenIndex52 := position, tokenIndex
738					if !_rules[ruleWS]() {
739						goto l52
740					}
741					if !_rules[ruleArgs]() {
742						goto l52
743					}
744					goto l53
745				l52:
746					position, tokenIndex = position52, tokenIndex52
747				}
748			l53:
749				add(ruleDirective, position51)
750			}
751			return true
752		l50:
753			position, tokenIndex = position50, tokenIndex50
754			return false
755		},
756		/* 4 DirectiveName <- <([a-z] / [A-Z] / ([0-9] / [0-9]) / '_')+> */
757		func() bool {
758			position54, tokenIndex54 := position, tokenIndex
759			{
760				position55 := position
761				{
762					position58, tokenIndex58 := position, tokenIndex
763					if c := buffer[position]; c < rune('a') || c > rune('z') {
764						goto l59
765					}
766					position++
767					goto l58
768				l59:
769					position, tokenIndex = position58, tokenIndex58
770					if c := buffer[position]; c < rune('A') || c > rune('Z') {
771						goto l60
772					}
773					position++
774					goto l58
775				l60:
776					position, tokenIndex = position58, tokenIndex58
777					{
778						position62, tokenIndex62 := position, tokenIndex
779						if c := buffer[position]; c < rune('0') || c > rune('9') {
780							goto l63
781						}
782						position++
783						goto l62
784					l63:
785						position, tokenIndex = position62, tokenIndex62
786						if c := buffer[position]; c < rune('0') || c > rune('9') {
787							goto l61
788						}
789						position++
790					}
791				l62:
792					goto l58
793				l61:
794					position, tokenIndex = position58, tokenIndex58
795					if buffer[position] != rune('_') {
796						goto l54
797					}
798					position++
799				}
800			l58:
801			l56:
802				{
803					position57, tokenIndex57 := position, tokenIndex
804					{
805						position64, tokenIndex64 := position, tokenIndex
806						if c := buffer[position]; c < rune('a') || c > rune('z') {
807							goto l65
808						}
809						position++
810						goto l64
811					l65:
812						position, tokenIndex = position64, tokenIndex64
813						if c := buffer[position]; c < rune('A') || c > rune('Z') {
814							goto l66
815						}
816						position++
817						goto l64
818					l66:
819						position, tokenIndex = position64, tokenIndex64
820						{
821							position68, tokenIndex68 := position, tokenIndex
822							if c := buffer[position]; c < rune('0') || c > rune('9') {
823								goto l69
824							}
825							position++
826							goto l68
827						l69:
828							position, tokenIndex = position68, tokenIndex68
829							if c := buffer[position]; c < rune('0') || c > rune('9') {
830								goto l67
831							}
832							position++
833						}
834					l68:
835						goto l64
836					l67:
837						position, tokenIndex = position64, tokenIndex64
838						if buffer[position] != rune('_') {
839							goto l57
840						}
841						position++
842					}
843				l64:
844					goto l56
845				l57:
846					position, tokenIndex = position57, tokenIndex57
847				}
848				add(ruleDirectiveName, position55)
849			}
850			return true
851		l54:
852			position, tokenIndex = position54, tokenIndex54
853			return false
854		},
855		/* 5 LocationDirective <- <(FileDirective / LocDirective)> */
856		func() bool {
857			position70, tokenIndex70 := position, tokenIndex
858			{
859				position71 := position
860				{
861					position72, tokenIndex72 := position, tokenIndex
862					if !_rules[ruleFileDirective]() {
863						goto l73
864					}
865					goto l72
866				l73:
867					position, tokenIndex = position72, tokenIndex72
868					if !_rules[ruleLocDirective]() {
869						goto l70
870					}
871				}
872			l72:
873				add(ruleLocationDirective, position71)
874			}
875			return true
876		l70:
877			position, tokenIndex = position70, tokenIndex70
878			return false
879		},
880		/* 6 FileDirective <- <('.' ('f' / 'F') ('i' / 'I') ('l' / 'L') ('e' / 'E') WS (!('#' / '\n') .)+)> */
881		func() bool {
882			position74, tokenIndex74 := position, tokenIndex
883			{
884				position75 := position
885				if buffer[position] != rune('.') {
886					goto l74
887				}
888				position++
889				{
890					position76, tokenIndex76 := position, tokenIndex
891					if buffer[position] != rune('f') {
892						goto l77
893					}
894					position++
895					goto l76
896				l77:
897					position, tokenIndex = position76, tokenIndex76
898					if buffer[position] != rune('F') {
899						goto l74
900					}
901					position++
902				}
903			l76:
904				{
905					position78, tokenIndex78 := position, tokenIndex
906					if buffer[position] != rune('i') {
907						goto l79
908					}
909					position++
910					goto l78
911				l79:
912					position, tokenIndex = position78, tokenIndex78
913					if buffer[position] != rune('I') {
914						goto l74
915					}
916					position++
917				}
918			l78:
919				{
920					position80, tokenIndex80 := position, tokenIndex
921					if buffer[position] != rune('l') {
922						goto l81
923					}
924					position++
925					goto l80
926				l81:
927					position, tokenIndex = position80, tokenIndex80
928					if buffer[position] != rune('L') {
929						goto l74
930					}
931					position++
932				}
933			l80:
934				{
935					position82, tokenIndex82 := position, tokenIndex
936					if buffer[position] != rune('e') {
937						goto l83
938					}
939					position++
940					goto l82
941				l83:
942					position, tokenIndex = position82, tokenIndex82
943					if buffer[position] != rune('E') {
944						goto l74
945					}
946					position++
947				}
948			l82:
949				if !_rules[ruleWS]() {
950					goto l74
951				}
952				{
953					position86, tokenIndex86 := position, tokenIndex
954					{
955						position87, tokenIndex87 := position, tokenIndex
956						if buffer[position] != rune('#') {
957							goto l88
958						}
959						position++
960						goto l87
961					l88:
962						position, tokenIndex = position87, tokenIndex87
963						if buffer[position] != rune('\n') {
964							goto l86
965						}
966						position++
967					}
968				l87:
969					goto l74
970				l86:
971					position, tokenIndex = position86, tokenIndex86
972				}
973				if !matchDot() {
974					goto l74
975				}
976			l84:
977				{
978					position85, tokenIndex85 := position, tokenIndex
979					{
980						position89, tokenIndex89 := position, tokenIndex
981						{
982							position90, tokenIndex90 := position, tokenIndex
983							if buffer[position] != rune('#') {
984								goto l91
985							}
986							position++
987							goto l90
988						l91:
989							position, tokenIndex = position90, tokenIndex90
990							if buffer[position] != rune('\n') {
991								goto l89
992							}
993							position++
994						}
995					l90:
996						goto l85
997					l89:
998						position, tokenIndex = position89, tokenIndex89
999					}
1000					if !matchDot() {
1001						goto l85
1002					}
1003					goto l84
1004				l85:
1005					position, tokenIndex = position85, tokenIndex85
1006				}
1007				add(ruleFileDirective, position75)
1008			}
1009			return true
1010		l74:
1011			position, tokenIndex = position74, tokenIndex74
1012			return false
1013		},
1014		/* 7 LocDirective <- <('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') WS (!('#' / '/' / '\n') .)+)> */
1015		func() bool {
1016			position92, tokenIndex92 := position, tokenIndex
1017			{
1018				position93 := position
1019				if buffer[position] != rune('.') {
1020					goto l92
1021				}
1022				position++
1023				{
1024					position94, tokenIndex94 := position, tokenIndex
1025					if buffer[position] != rune('l') {
1026						goto l95
1027					}
1028					position++
1029					goto l94
1030				l95:
1031					position, tokenIndex = position94, tokenIndex94
1032					if buffer[position] != rune('L') {
1033						goto l92
1034					}
1035					position++
1036				}
1037			l94:
1038				{
1039					position96, tokenIndex96 := position, tokenIndex
1040					if buffer[position] != rune('o') {
1041						goto l97
1042					}
1043					position++
1044					goto l96
1045				l97:
1046					position, tokenIndex = position96, tokenIndex96
1047					if buffer[position] != rune('O') {
1048						goto l92
1049					}
1050					position++
1051				}
1052			l96:
1053				{
1054					position98, tokenIndex98 := position, tokenIndex
1055					if buffer[position] != rune('c') {
1056						goto l99
1057					}
1058					position++
1059					goto l98
1060				l99:
1061					position, tokenIndex = position98, tokenIndex98
1062					if buffer[position] != rune('C') {
1063						goto l92
1064					}
1065					position++
1066				}
1067			l98:
1068				if !_rules[ruleWS]() {
1069					goto l92
1070				}
1071				{
1072					position102, tokenIndex102 := position, tokenIndex
1073					{
1074						position103, tokenIndex103 := position, tokenIndex
1075						if buffer[position] != rune('#') {
1076							goto l104
1077						}
1078						position++
1079						goto l103
1080					l104:
1081						position, tokenIndex = position103, tokenIndex103
1082						if buffer[position] != rune('/') {
1083							goto l105
1084						}
1085						position++
1086						goto l103
1087					l105:
1088						position, tokenIndex = position103, tokenIndex103
1089						if buffer[position] != rune('\n') {
1090							goto l102
1091						}
1092						position++
1093					}
1094				l103:
1095					goto l92
1096				l102:
1097					position, tokenIndex = position102, tokenIndex102
1098				}
1099				if !matchDot() {
1100					goto l92
1101				}
1102			l100:
1103				{
1104					position101, tokenIndex101 := position, tokenIndex
1105					{
1106						position106, tokenIndex106 := position, tokenIndex
1107						{
1108							position107, tokenIndex107 := position, tokenIndex
1109							if buffer[position] != rune('#') {
1110								goto l108
1111							}
1112							position++
1113							goto l107
1114						l108:
1115							position, tokenIndex = position107, tokenIndex107
1116							if buffer[position] != rune('/') {
1117								goto l109
1118							}
1119							position++
1120							goto l107
1121						l109:
1122							position, tokenIndex = position107, tokenIndex107
1123							if buffer[position] != rune('\n') {
1124								goto l106
1125							}
1126							position++
1127						}
1128					l107:
1129						goto l101
1130					l106:
1131						position, tokenIndex = position106, tokenIndex106
1132					}
1133					if !matchDot() {
1134						goto l101
1135					}
1136					goto l100
1137				l101:
1138					position, tokenIndex = position101, tokenIndex101
1139				}
1140				add(ruleLocDirective, position93)
1141			}
1142			return true
1143		l92:
1144			position, tokenIndex = position92, tokenIndex92
1145			return false
1146		},
1147		/* 8 Args <- <(Arg (WS? ',' WS? Arg)*)> */
1148		func() bool {
1149			position110, tokenIndex110 := position, tokenIndex
1150			{
1151				position111 := position
1152				if !_rules[ruleArg]() {
1153					goto l110
1154				}
1155			l112:
1156				{
1157					position113, tokenIndex113 := position, tokenIndex
1158					{
1159						position114, tokenIndex114 := position, tokenIndex
1160						if !_rules[ruleWS]() {
1161							goto l114
1162						}
1163						goto l115
1164					l114:
1165						position, tokenIndex = position114, tokenIndex114
1166					}
1167				l115:
1168					if buffer[position] != rune(',') {
1169						goto l113
1170					}
1171					position++
1172					{
1173						position116, tokenIndex116 := position, tokenIndex
1174						if !_rules[ruleWS]() {
1175							goto l116
1176						}
1177						goto l117
1178					l116:
1179						position, tokenIndex = position116, tokenIndex116
1180					}
1181				l117:
1182					if !_rules[ruleArg]() {
1183						goto l113
1184					}
1185					goto l112
1186				l113:
1187					position, tokenIndex = position113, tokenIndex113
1188				}
1189				add(ruleArgs, position111)
1190			}
1191			return true
1192		l110:
1193			position, tokenIndex = position110, tokenIndex110
1194			return false
1195		},
1196		/* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
1197		func() bool {
1198			{
1199				position119 := position
1200				{
1201					position120, tokenIndex120 := position, tokenIndex
1202					if !_rules[ruleQuotedArg]() {
1203						goto l121
1204					}
1205					goto l120
1206				l121:
1207					position, tokenIndex = position120, tokenIndex120
1208				l122:
1209					{
1210						position123, tokenIndex123 := position, tokenIndex
1211						{
1212							position124, tokenIndex124 := position, tokenIndex
1213							if c := buffer[position]; c < rune('0') || c > rune('9') {
1214								goto l125
1215							}
1216							position++
1217							goto l124
1218						l125:
1219							position, tokenIndex = position124, tokenIndex124
1220							if c := buffer[position]; c < rune('0') || c > rune('9') {
1221								goto l126
1222							}
1223							position++
1224							goto l124
1225						l126:
1226							position, tokenIndex = position124, tokenIndex124
1227							{
1228								position128, tokenIndex128 := position, tokenIndex
1229								if c := buffer[position]; c < rune('a') || c > rune('z') {
1230									goto l129
1231								}
1232								position++
1233								goto l128
1234							l129:
1235								position, tokenIndex = position128, tokenIndex128
1236								if c := buffer[position]; c < rune('A') || c > rune('Z') {
1237									goto l127
1238								}
1239								position++
1240							}
1241						l128:
1242							goto l124
1243						l127:
1244							position, tokenIndex = position124, tokenIndex124
1245							if buffer[position] != rune('%') {
1246								goto l130
1247							}
1248							position++
1249							goto l124
1250						l130:
1251							position, tokenIndex = position124, tokenIndex124
1252							if buffer[position] != rune('+') {
1253								goto l131
1254							}
1255							position++
1256							goto l124
1257						l131:
1258							position, tokenIndex = position124, tokenIndex124
1259							if buffer[position] != rune('-') {
1260								goto l132
1261							}
1262							position++
1263							goto l124
1264						l132:
1265							position, tokenIndex = position124, tokenIndex124
1266							if buffer[position] != rune('*') {
1267								goto l133
1268							}
1269							position++
1270							goto l124
1271						l133:
1272							position, tokenIndex = position124, tokenIndex124
1273							if buffer[position] != rune('_') {
1274								goto l134
1275							}
1276							position++
1277							goto l124
1278						l134:
1279							position, tokenIndex = position124, tokenIndex124
1280							if buffer[position] != rune('@') {
1281								goto l135
1282							}
1283							position++
1284							goto l124
1285						l135:
1286							position, tokenIndex = position124, tokenIndex124
1287							if buffer[position] != rune('.') {
1288								goto l123
1289							}
1290							position++
1291						}
1292					l124:
1293						goto l122
1294					l123:
1295						position, tokenIndex = position123, tokenIndex123
1296					}
1297				}
1298			l120:
1299				add(ruleArg, position119)
1300			}
1301			return true
1302		},
1303		/* 10 QuotedArg <- <('"' QuotedText '"')> */
1304		func() bool {
1305			position136, tokenIndex136 := position, tokenIndex
1306			{
1307				position137 := position
1308				if buffer[position] != rune('"') {
1309					goto l136
1310				}
1311				position++
1312				if !_rules[ruleQuotedText]() {
1313					goto l136
1314				}
1315				if buffer[position] != rune('"') {
1316					goto l136
1317				}
1318				position++
1319				add(ruleQuotedArg, position137)
1320			}
1321			return true
1322		l136:
1323			position, tokenIndex = position136, tokenIndex136
1324			return false
1325		},
1326		/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
1327		func() bool {
1328			{
1329				position139 := position
1330			l140:
1331				{
1332					position141, tokenIndex141 := position, tokenIndex
1333					{
1334						position142, tokenIndex142 := position, tokenIndex
1335						if !_rules[ruleEscapedChar]() {
1336							goto l143
1337						}
1338						goto l142
1339					l143:
1340						position, tokenIndex = position142, tokenIndex142
1341						{
1342							position144, tokenIndex144 := position, tokenIndex
1343							if buffer[position] != rune('"') {
1344								goto l144
1345							}
1346							position++
1347							goto l141
1348						l144:
1349							position, tokenIndex = position144, tokenIndex144
1350						}
1351						if !matchDot() {
1352							goto l141
1353						}
1354					}
1355				l142:
1356					goto l140
1357				l141:
1358					position, tokenIndex = position141, tokenIndex141
1359				}
1360				add(ruleQuotedText, position139)
1361			}
1362			return true
1363		},
1364		/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
1365		func() bool {
1366			position145, tokenIndex145 := position, tokenIndex
1367			{
1368				position146 := position
1369				if !_rules[ruleLabelContainingDirectiveName]() {
1370					goto l145
1371				}
1372				if !_rules[ruleWS]() {
1373					goto l145
1374				}
1375				if !_rules[ruleSymbolArgs]() {
1376					goto l145
1377				}
1378				add(ruleLabelContainingDirective, position146)
1379			}
1380			return true
1381		l145:
1382			position, tokenIndex = position145, tokenIndex145
1383			return false
1384		},
1385		/* 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'))> */
1386		func() bool {
1387			position147, tokenIndex147 := position, tokenIndex
1388			{
1389				position148 := position
1390				{
1391					position149, tokenIndex149 := position, tokenIndex
1392					if buffer[position] != rune('.') {
1393						goto l150
1394					}
1395					position++
1396					{
1397						position151, tokenIndex151 := position, tokenIndex
1398						if buffer[position] != rune('x') {
1399							goto l152
1400						}
1401						position++
1402						goto l151
1403					l152:
1404						position, tokenIndex = position151, tokenIndex151
1405						if buffer[position] != rune('X') {
1406							goto l150
1407						}
1408						position++
1409					}
1410				l151:
1411					{
1412						position153, tokenIndex153 := position, tokenIndex
1413						if buffer[position] != rune('w') {
1414							goto l154
1415						}
1416						position++
1417						goto l153
1418					l154:
1419						position, tokenIndex = position153, tokenIndex153
1420						if buffer[position] != rune('W') {
1421							goto l150
1422						}
1423						position++
1424					}
1425				l153:
1426					{
1427						position155, tokenIndex155 := position, tokenIndex
1428						if buffer[position] != rune('o') {
1429							goto l156
1430						}
1431						position++
1432						goto l155
1433					l156:
1434						position, tokenIndex = position155, tokenIndex155
1435						if buffer[position] != rune('O') {
1436							goto l150
1437						}
1438						position++
1439					}
1440				l155:
1441					{
1442						position157, tokenIndex157 := position, tokenIndex
1443						if buffer[position] != rune('r') {
1444							goto l158
1445						}
1446						position++
1447						goto l157
1448					l158:
1449						position, tokenIndex = position157, tokenIndex157
1450						if buffer[position] != rune('R') {
1451							goto l150
1452						}
1453						position++
1454					}
1455				l157:
1456					{
1457						position159, tokenIndex159 := position, tokenIndex
1458						if buffer[position] != rune('d') {
1459							goto l160
1460						}
1461						position++
1462						goto l159
1463					l160:
1464						position, tokenIndex = position159, tokenIndex159
1465						if buffer[position] != rune('D') {
1466							goto l150
1467						}
1468						position++
1469					}
1470				l159:
1471					goto l149
1472				l150:
1473					position, tokenIndex = position149, tokenIndex149
1474					if buffer[position] != rune('.') {
1475						goto l161
1476					}
1477					position++
1478					{
1479						position162, tokenIndex162 := position, tokenIndex
1480						if buffer[position] != rune('w') {
1481							goto l163
1482						}
1483						position++
1484						goto l162
1485					l163:
1486						position, tokenIndex = position162, tokenIndex162
1487						if buffer[position] != rune('W') {
1488							goto l161
1489						}
1490						position++
1491					}
1492				l162:
1493					{
1494						position164, tokenIndex164 := position, tokenIndex
1495						if buffer[position] != rune('o') {
1496							goto l165
1497						}
1498						position++
1499						goto l164
1500					l165:
1501						position, tokenIndex = position164, tokenIndex164
1502						if buffer[position] != rune('O') {
1503							goto l161
1504						}
1505						position++
1506					}
1507				l164:
1508					{
1509						position166, tokenIndex166 := position, tokenIndex
1510						if buffer[position] != rune('r') {
1511							goto l167
1512						}
1513						position++
1514						goto l166
1515					l167:
1516						position, tokenIndex = position166, tokenIndex166
1517						if buffer[position] != rune('R') {
1518							goto l161
1519						}
1520						position++
1521					}
1522				l166:
1523					{
1524						position168, tokenIndex168 := position, tokenIndex
1525						if buffer[position] != rune('d') {
1526							goto l169
1527						}
1528						position++
1529						goto l168
1530					l169:
1531						position, tokenIndex = position168, tokenIndex168
1532						if buffer[position] != rune('D') {
1533							goto l161
1534						}
1535						position++
1536					}
1537				l168:
1538					goto l149
1539				l161:
1540					position, tokenIndex = position149, tokenIndex149
1541					if buffer[position] != rune('.') {
1542						goto l170
1543					}
1544					position++
1545					{
1546						position171, tokenIndex171 := position, tokenIndex
1547						if buffer[position] != rune('l') {
1548							goto l172
1549						}
1550						position++
1551						goto l171
1552					l172:
1553						position, tokenIndex = position171, tokenIndex171
1554						if buffer[position] != rune('L') {
1555							goto l170
1556						}
1557						position++
1558					}
1559				l171:
1560					{
1561						position173, tokenIndex173 := position, tokenIndex
1562						if buffer[position] != rune('o') {
1563							goto l174
1564						}
1565						position++
1566						goto l173
1567					l174:
1568						position, tokenIndex = position173, tokenIndex173
1569						if buffer[position] != rune('O') {
1570							goto l170
1571						}
1572						position++
1573					}
1574				l173:
1575					{
1576						position175, tokenIndex175 := position, tokenIndex
1577						if buffer[position] != rune('n') {
1578							goto l176
1579						}
1580						position++
1581						goto l175
1582					l176:
1583						position, tokenIndex = position175, tokenIndex175
1584						if buffer[position] != rune('N') {
1585							goto l170
1586						}
1587						position++
1588					}
1589				l175:
1590					{
1591						position177, tokenIndex177 := position, tokenIndex
1592						if buffer[position] != rune('g') {
1593							goto l178
1594						}
1595						position++
1596						goto l177
1597					l178:
1598						position, tokenIndex = position177, tokenIndex177
1599						if buffer[position] != rune('G') {
1600							goto l170
1601						}
1602						position++
1603					}
1604				l177:
1605					goto l149
1606				l170:
1607					position, tokenIndex = position149, tokenIndex149
1608					if buffer[position] != rune('.') {
1609						goto l179
1610					}
1611					position++
1612					{
1613						position180, tokenIndex180 := position, tokenIndex
1614						if buffer[position] != rune('s') {
1615							goto l181
1616						}
1617						position++
1618						goto l180
1619					l181:
1620						position, tokenIndex = position180, tokenIndex180
1621						if buffer[position] != rune('S') {
1622							goto l179
1623						}
1624						position++
1625					}
1626				l180:
1627					{
1628						position182, tokenIndex182 := position, tokenIndex
1629						if buffer[position] != rune('e') {
1630							goto l183
1631						}
1632						position++
1633						goto l182
1634					l183:
1635						position, tokenIndex = position182, tokenIndex182
1636						if buffer[position] != rune('E') {
1637							goto l179
1638						}
1639						position++
1640					}
1641				l182:
1642					{
1643						position184, tokenIndex184 := position, tokenIndex
1644						if buffer[position] != rune('t') {
1645							goto l185
1646						}
1647						position++
1648						goto l184
1649					l185:
1650						position, tokenIndex = position184, tokenIndex184
1651						if buffer[position] != rune('T') {
1652							goto l179
1653						}
1654						position++
1655					}
1656				l184:
1657					goto l149
1658				l179:
1659					position, tokenIndex = position149, tokenIndex149
1660					if buffer[position] != rune('.') {
1661						goto l186
1662					}
1663					position++
1664					if buffer[position] != rune('8') {
1665						goto l186
1666					}
1667					position++
1668					{
1669						position187, tokenIndex187 := position, tokenIndex
1670						if buffer[position] != rune('b') {
1671							goto l188
1672						}
1673						position++
1674						goto l187
1675					l188:
1676						position, tokenIndex = position187, tokenIndex187
1677						if buffer[position] != rune('B') {
1678							goto l186
1679						}
1680						position++
1681					}
1682				l187:
1683					{
1684						position189, tokenIndex189 := position, tokenIndex
1685						if buffer[position] != rune('y') {
1686							goto l190
1687						}
1688						position++
1689						goto l189
1690					l190:
1691						position, tokenIndex = position189, tokenIndex189
1692						if buffer[position] != rune('Y') {
1693							goto l186
1694						}
1695						position++
1696					}
1697				l189:
1698					{
1699						position191, tokenIndex191 := position, tokenIndex
1700						if buffer[position] != rune('t') {
1701							goto l192
1702						}
1703						position++
1704						goto l191
1705					l192:
1706						position, tokenIndex = position191, tokenIndex191
1707						if buffer[position] != rune('T') {
1708							goto l186
1709						}
1710						position++
1711					}
1712				l191:
1713					{
1714						position193, tokenIndex193 := position, tokenIndex
1715						if buffer[position] != rune('e') {
1716							goto l194
1717						}
1718						position++
1719						goto l193
1720					l194:
1721						position, tokenIndex = position193, tokenIndex193
1722						if buffer[position] != rune('E') {
1723							goto l186
1724						}
1725						position++
1726					}
1727				l193:
1728					goto l149
1729				l186:
1730					position, tokenIndex = position149, tokenIndex149
1731					if buffer[position] != rune('.') {
1732						goto l195
1733					}
1734					position++
1735					if buffer[position] != rune('4') {
1736						goto l195
1737					}
1738					position++
1739					{
1740						position196, tokenIndex196 := position, tokenIndex
1741						if buffer[position] != rune('b') {
1742							goto l197
1743						}
1744						position++
1745						goto l196
1746					l197:
1747						position, tokenIndex = position196, tokenIndex196
1748						if buffer[position] != rune('B') {
1749							goto l195
1750						}
1751						position++
1752					}
1753				l196:
1754					{
1755						position198, tokenIndex198 := position, tokenIndex
1756						if buffer[position] != rune('y') {
1757							goto l199
1758						}
1759						position++
1760						goto l198
1761					l199:
1762						position, tokenIndex = position198, tokenIndex198
1763						if buffer[position] != rune('Y') {
1764							goto l195
1765						}
1766						position++
1767					}
1768				l198:
1769					{
1770						position200, tokenIndex200 := position, tokenIndex
1771						if buffer[position] != rune('t') {
1772							goto l201
1773						}
1774						position++
1775						goto l200
1776					l201:
1777						position, tokenIndex = position200, tokenIndex200
1778						if buffer[position] != rune('T') {
1779							goto l195
1780						}
1781						position++
1782					}
1783				l200:
1784					{
1785						position202, tokenIndex202 := position, tokenIndex
1786						if buffer[position] != rune('e') {
1787							goto l203
1788						}
1789						position++
1790						goto l202
1791					l203:
1792						position, tokenIndex = position202, tokenIndex202
1793						if buffer[position] != rune('E') {
1794							goto l195
1795						}
1796						position++
1797					}
1798				l202:
1799					goto l149
1800				l195:
1801					position, tokenIndex = position149, tokenIndex149
1802					if buffer[position] != rune('.') {
1803						goto l204
1804					}
1805					position++
1806					{
1807						position205, tokenIndex205 := position, tokenIndex
1808						if buffer[position] != rune('q') {
1809							goto l206
1810						}
1811						position++
1812						goto l205
1813					l206:
1814						position, tokenIndex = position205, tokenIndex205
1815						if buffer[position] != rune('Q') {
1816							goto l204
1817						}
1818						position++
1819					}
1820				l205:
1821					{
1822						position207, tokenIndex207 := position, tokenIndex
1823						if buffer[position] != rune('u') {
1824							goto l208
1825						}
1826						position++
1827						goto l207
1828					l208:
1829						position, tokenIndex = position207, tokenIndex207
1830						if buffer[position] != rune('U') {
1831							goto l204
1832						}
1833						position++
1834					}
1835				l207:
1836					{
1837						position209, tokenIndex209 := position, tokenIndex
1838						if buffer[position] != rune('a') {
1839							goto l210
1840						}
1841						position++
1842						goto l209
1843					l210:
1844						position, tokenIndex = position209, tokenIndex209
1845						if buffer[position] != rune('A') {
1846							goto l204
1847						}
1848						position++
1849					}
1850				l209:
1851					{
1852						position211, tokenIndex211 := position, tokenIndex
1853						if buffer[position] != rune('d') {
1854							goto l212
1855						}
1856						position++
1857						goto l211
1858					l212:
1859						position, tokenIndex = position211, tokenIndex211
1860						if buffer[position] != rune('D') {
1861							goto l204
1862						}
1863						position++
1864					}
1865				l211:
1866					goto l149
1867				l204:
1868					position, tokenIndex = position149, tokenIndex149
1869					if buffer[position] != rune('.') {
1870						goto l213
1871					}
1872					position++
1873					{
1874						position214, tokenIndex214 := position, tokenIndex
1875						if buffer[position] != rune('t') {
1876							goto l215
1877						}
1878						position++
1879						goto l214
1880					l215:
1881						position, tokenIndex = position214, tokenIndex214
1882						if buffer[position] != rune('T') {
1883							goto l213
1884						}
1885						position++
1886					}
1887				l214:
1888					{
1889						position216, tokenIndex216 := position, tokenIndex
1890						if buffer[position] != rune('c') {
1891							goto l217
1892						}
1893						position++
1894						goto l216
1895					l217:
1896						position, tokenIndex = position216, tokenIndex216
1897						if buffer[position] != rune('C') {
1898							goto l213
1899						}
1900						position++
1901					}
1902				l216:
1903					goto l149
1904				l213:
1905					position, tokenIndex = position149, tokenIndex149
1906					if buffer[position] != rune('.') {
1907						goto l218
1908					}
1909					position++
1910					{
1911						position219, tokenIndex219 := position, tokenIndex
1912						if buffer[position] != rune('l') {
1913							goto l220
1914						}
1915						position++
1916						goto l219
1917					l220:
1918						position, tokenIndex = position219, tokenIndex219
1919						if buffer[position] != rune('L') {
1920							goto l218
1921						}
1922						position++
1923					}
1924				l219:
1925					{
1926						position221, tokenIndex221 := position, tokenIndex
1927						if buffer[position] != rune('o') {
1928							goto l222
1929						}
1930						position++
1931						goto l221
1932					l222:
1933						position, tokenIndex = position221, tokenIndex221
1934						if buffer[position] != rune('O') {
1935							goto l218
1936						}
1937						position++
1938					}
1939				l221:
1940					{
1941						position223, tokenIndex223 := position, tokenIndex
1942						if buffer[position] != rune('c') {
1943							goto l224
1944						}
1945						position++
1946						goto l223
1947					l224:
1948						position, tokenIndex = position223, tokenIndex223
1949						if buffer[position] != rune('C') {
1950							goto l218
1951						}
1952						position++
1953					}
1954				l223:
1955					{
1956						position225, tokenIndex225 := position, tokenIndex
1957						if buffer[position] != rune('a') {
1958							goto l226
1959						}
1960						position++
1961						goto l225
1962					l226:
1963						position, tokenIndex = position225, tokenIndex225
1964						if buffer[position] != rune('A') {
1965							goto l218
1966						}
1967						position++
1968					}
1969				l225:
1970					{
1971						position227, tokenIndex227 := position, tokenIndex
1972						if buffer[position] != rune('l') {
1973							goto l228
1974						}
1975						position++
1976						goto l227
1977					l228:
1978						position, tokenIndex = position227, tokenIndex227
1979						if buffer[position] != rune('L') {
1980							goto l218
1981						}
1982						position++
1983					}
1984				l227:
1985					{
1986						position229, tokenIndex229 := position, tokenIndex
1987						if buffer[position] != rune('e') {
1988							goto l230
1989						}
1990						position++
1991						goto l229
1992					l230:
1993						position, tokenIndex = position229, tokenIndex229
1994						if buffer[position] != rune('E') {
1995							goto l218
1996						}
1997						position++
1998					}
1999				l229:
2000					{
2001						position231, tokenIndex231 := position, tokenIndex
2002						if buffer[position] != rune('n') {
2003							goto l232
2004						}
2005						position++
2006						goto l231
2007					l232:
2008						position, tokenIndex = position231, tokenIndex231
2009						if buffer[position] != rune('N') {
2010							goto l218
2011						}
2012						position++
2013					}
2014				l231:
2015					{
2016						position233, tokenIndex233 := position, tokenIndex
2017						if buffer[position] != rune('t') {
2018							goto l234
2019						}
2020						position++
2021						goto l233
2022					l234:
2023						position, tokenIndex = position233, tokenIndex233
2024						if buffer[position] != rune('T') {
2025							goto l218
2026						}
2027						position++
2028					}
2029				l233:
2030					{
2031						position235, tokenIndex235 := position, tokenIndex
2032						if buffer[position] != rune('r') {
2033							goto l236
2034						}
2035						position++
2036						goto l235
2037					l236:
2038						position, tokenIndex = position235, tokenIndex235
2039						if buffer[position] != rune('R') {
2040							goto l218
2041						}
2042						position++
2043					}
2044				l235:
2045					{
2046						position237, tokenIndex237 := position, tokenIndex
2047						if buffer[position] != rune('y') {
2048							goto l238
2049						}
2050						position++
2051						goto l237
2052					l238:
2053						position, tokenIndex = position237, tokenIndex237
2054						if buffer[position] != rune('Y') {
2055							goto l218
2056						}
2057						position++
2058					}
2059				l237:
2060					goto l149
2061				l218:
2062					position, tokenIndex = position149, tokenIndex149
2063					if buffer[position] != rune('.') {
2064						goto l239
2065					}
2066					position++
2067					{
2068						position240, tokenIndex240 := position, tokenIndex
2069						if buffer[position] != rune('s') {
2070							goto l241
2071						}
2072						position++
2073						goto l240
2074					l241:
2075						position, tokenIndex = position240, tokenIndex240
2076						if buffer[position] != rune('S') {
2077							goto l239
2078						}
2079						position++
2080					}
2081				l240:
2082					{
2083						position242, tokenIndex242 := position, tokenIndex
2084						if buffer[position] != rune('i') {
2085							goto l243
2086						}
2087						position++
2088						goto l242
2089					l243:
2090						position, tokenIndex = position242, tokenIndex242
2091						if buffer[position] != rune('I') {
2092							goto l239
2093						}
2094						position++
2095					}
2096				l242:
2097					{
2098						position244, tokenIndex244 := position, tokenIndex
2099						if buffer[position] != rune('z') {
2100							goto l245
2101						}
2102						position++
2103						goto l244
2104					l245:
2105						position, tokenIndex = position244, tokenIndex244
2106						if buffer[position] != rune('Z') {
2107							goto l239
2108						}
2109						position++
2110					}
2111				l244:
2112					{
2113						position246, tokenIndex246 := position, tokenIndex
2114						if buffer[position] != rune('e') {
2115							goto l247
2116						}
2117						position++
2118						goto l246
2119					l247:
2120						position, tokenIndex = position246, tokenIndex246
2121						if buffer[position] != rune('E') {
2122							goto l239
2123						}
2124						position++
2125					}
2126				l246:
2127					goto l149
2128				l239:
2129					position, tokenIndex = position149, tokenIndex149
2130					if buffer[position] != rune('.') {
2131						goto l248
2132					}
2133					position++
2134					{
2135						position249, tokenIndex249 := position, tokenIndex
2136						if buffer[position] != rune('t') {
2137							goto l250
2138						}
2139						position++
2140						goto l249
2141					l250:
2142						position, tokenIndex = position249, tokenIndex249
2143						if buffer[position] != rune('T') {
2144							goto l248
2145						}
2146						position++
2147					}
2148				l249:
2149					{
2150						position251, tokenIndex251 := position, tokenIndex
2151						if buffer[position] != rune('y') {
2152							goto l252
2153						}
2154						position++
2155						goto l251
2156					l252:
2157						position, tokenIndex = position251, tokenIndex251
2158						if buffer[position] != rune('Y') {
2159							goto l248
2160						}
2161						position++
2162					}
2163				l251:
2164					{
2165						position253, tokenIndex253 := position, tokenIndex
2166						if buffer[position] != rune('p') {
2167							goto l254
2168						}
2169						position++
2170						goto l253
2171					l254:
2172						position, tokenIndex = position253, tokenIndex253
2173						if buffer[position] != rune('P') {
2174							goto l248
2175						}
2176						position++
2177					}
2178				l253:
2179					{
2180						position255, tokenIndex255 := position, tokenIndex
2181						if buffer[position] != rune('e') {
2182							goto l256
2183						}
2184						position++
2185						goto l255
2186					l256:
2187						position, tokenIndex = position255, tokenIndex255
2188						if buffer[position] != rune('E') {
2189							goto l248
2190						}
2191						position++
2192					}
2193				l255:
2194					goto l149
2195				l248:
2196					position, tokenIndex = position149, tokenIndex149
2197					if buffer[position] != rune('.') {
2198						goto l257
2199					}
2200					position++
2201					{
2202						position258, tokenIndex258 := position, tokenIndex
2203						if buffer[position] != rune('u') {
2204							goto l259
2205						}
2206						position++
2207						goto l258
2208					l259:
2209						position, tokenIndex = position258, tokenIndex258
2210						if buffer[position] != rune('U') {
2211							goto l257
2212						}
2213						position++
2214					}
2215				l258:
2216					{
2217						position260, tokenIndex260 := position, tokenIndex
2218						if buffer[position] != rune('l') {
2219							goto l261
2220						}
2221						position++
2222						goto l260
2223					l261:
2224						position, tokenIndex = position260, tokenIndex260
2225						if buffer[position] != rune('L') {
2226							goto l257
2227						}
2228						position++
2229					}
2230				l260:
2231					{
2232						position262, tokenIndex262 := position, tokenIndex
2233						if buffer[position] != rune('e') {
2234							goto l263
2235						}
2236						position++
2237						goto l262
2238					l263:
2239						position, tokenIndex = position262, tokenIndex262
2240						if buffer[position] != rune('E') {
2241							goto l257
2242						}
2243						position++
2244					}
2245				l262:
2246					{
2247						position264, tokenIndex264 := position, tokenIndex
2248						if buffer[position] != rune('b') {
2249							goto l265
2250						}
2251						position++
2252						goto l264
2253					l265:
2254						position, tokenIndex = position264, tokenIndex264
2255						if buffer[position] != rune('B') {
2256							goto l257
2257						}
2258						position++
2259					}
2260				l264:
2261					if buffer[position] != rune('1') {
2262						goto l257
2263					}
2264					position++
2265					if buffer[position] != rune('2') {
2266						goto l257
2267					}
2268					position++
2269					if buffer[position] != rune('8') {
2270						goto l257
2271					}
2272					position++
2273					goto l149
2274				l257:
2275					position, tokenIndex = position149, tokenIndex149
2276					if buffer[position] != rune('.') {
2277						goto l147
2278					}
2279					position++
2280					{
2281						position266, tokenIndex266 := position, tokenIndex
2282						if buffer[position] != rune('s') {
2283							goto l267
2284						}
2285						position++
2286						goto l266
2287					l267:
2288						position, tokenIndex = position266, tokenIndex266
2289						if buffer[position] != rune('S') {
2290							goto l147
2291						}
2292						position++
2293					}
2294				l266:
2295					{
2296						position268, tokenIndex268 := position, tokenIndex
2297						if buffer[position] != rune('l') {
2298							goto l269
2299						}
2300						position++
2301						goto l268
2302					l269:
2303						position, tokenIndex = position268, tokenIndex268
2304						if buffer[position] != rune('L') {
2305							goto l147
2306						}
2307						position++
2308					}
2309				l268:
2310					{
2311						position270, tokenIndex270 := position, tokenIndex
2312						if buffer[position] != rune('e') {
2313							goto l271
2314						}
2315						position++
2316						goto l270
2317					l271:
2318						position, tokenIndex = position270, tokenIndex270
2319						if buffer[position] != rune('E') {
2320							goto l147
2321						}
2322						position++
2323					}
2324				l270:
2325					{
2326						position272, tokenIndex272 := position, tokenIndex
2327						if buffer[position] != rune('b') {
2328							goto l273
2329						}
2330						position++
2331						goto l272
2332					l273:
2333						position, tokenIndex = position272, tokenIndex272
2334						if buffer[position] != rune('B') {
2335							goto l147
2336						}
2337						position++
2338					}
2339				l272:
2340					if buffer[position] != rune('1') {
2341						goto l147
2342					}
2343					position++
2344					if buffer[position] != rune('2') {
2345						goto l147
2346					}
2347					position++
2348					if buffer[position] != rune('8') {
2349						goto l147
2350					}
2351					position++
2352				}
2353			l149:
2354				add(ruleLabelContainingDirectiveName, position148)
2355			}
2356			return true
2357		l147:
2358			position, tokenIndex = position147, tokenIndex147
2359			return false
2360		},
2361		/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
2362		func() bool {
2363			position274, tokenIndex274 := position, tokenIndex
2364			{
2365				position275 := position
2366				if !_rules[ruleSymbolArg]() {
2367					goto l274
2368				}
2369			l276:
2370				{
2371					position277, tokenIndex277 := position, tokenIndex
2372					{
2373						position278, tokenIndex278 := position, tokenIndex
2374						if !_rules[ruleWS]() {
2375							goto l278
2376						}
2377						goto l279
2378					l278:
2379						position, tokenIndex = position278, tokenIndex278
2380					}
2381				l279:
2382					if buffer[position] != rune(',') {
2383						goto l277
2384					}
2385					position++
2386					{
2387						position280, tokenIndex280 := position, tokenIndex
2388						if !_rules[ruleWS]() {
2389							goto l280
2390						}
2391						goto l281
2392					l280:
2393						position, tokenIndex = position280, tokenIndex280
2394					}
2395				l281:
2396					if !_rules[ruleSymbolArg]() {
2397						goto l277
2398					}
2399					goto l276
2400				l277:
2401					position, tokenIndex = position277, tokenIndex277
2402				}
2403				add(ruleSymbolArgs, position275)
2404			}
2405			return true
2406		l274:
2407			position, tokenIndex = position274, tokenIndex274
2408			return false
2409		},
2410		/* 15 SymbolArg <- <(Offset / SymbolType / ((Offset / LocalSymbol / SymbolName / Dot) WS? Operator WS? (Offset / LocalSymbol / SymbolName)) / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?))> */
2411		func() bool {
2412			position282, tokenIndex282 := position, tokenIndex
2413			{
2414				position283 := position
2415				{
2416					position284, tokenIndex284 := position, tokenIndex
2417					if !_rules[ruleOffset]() {
2418						goto l285
2419					}
2420					goto l284
2421				l285:
2422					position, tokenIndex = position284, tokenIndex284
2423					if !_rules[ruleSymbolType]() {
2424						goto l286
2425					}
2426					goto l284
2427				l286:
2428					position, tokenIndex = position284, tokenIndex284
2429					{
2430						position288, tokenIndex288 := position, tokenIndex
2431						if !_rules[ruleOffset]() {
2432							goto l289
2433						}
2434						goto l288
2435					l289:
2436						position, tokenIndex = position288, tokenIndex288
2437						if !_rules[ruleLocalSymbol]() {
2438							goto l290
2439						}
2440						goto l288
2441					l290:
2442						position, tokenIndex = position288, tokenIndex288
2443						if !_rules[ruleSymbolName]() {
2444							goto l291
2445						}
2446						goto l288
2447					l291:
2448						position, tokenIndex = position288, tokenIndex288
2449						if !_rules[ruleDot]() {
2450							goto l287
2451						}
2452					}
2453				l288:
2454					{
2455						position292, tokenIndex292 := position, tokenIndex
2456						if !_rules[ruleWS]() {
2457							goto l292
2458						}
2459						goto l293
2460					l292:
2461						position, tokenIndex = position292, tokenIndex292
2462					}
2463				l293:
2464					if !_rules[ruleOperator]() {
2465						goto l287
2466					}
2467					{
2468						position294, tokenIndex294 := position, tokenIndex
2469						if !_rules[ruleWS]() {
2470							goto l294
2471						}
2472						goto l295
2473					l294:
2474						position, tokenIndex = position294, tokenIndex294
2475					}
2476				l295:
2477					{
2478						position296, tokenIndex296 := position, tokenIndex
2479						if !_rules[ruleOffset]() {
2480							goto l297
2481						}
2482						goto l296
2483					l297:
2484						position, tokenIndex = position296, tokenIndex296
2485						if !_rules[ruleLocalSymbol]() {
2486							goto l298
2487						}
2488						goto l296
2489					l298:
2490						position, tokenIndex = position296, tokenIndex296
2491						if !_rules[ruleSymbolName]() {
2492							goto l287
2493						}
2494					}
2495				l296:
2496					goto l284
2497				l287:
2498					position, tokenIndex = position284, tokenIndex284
2499					if !_rules[ruleLocalSymbol]() {
2500						goto l299
2501					}
2502					{
2503						position300, tokenIndex300 := position, tokenIndex
2504						if !_rules[ruleTCMarker]() {
2505							goto l300
2506						}
2507						goto l301
2508					l300:
2509						position, tokenIndex = position300, tokenIndex300
2510					}
2511				l301:
2512					goto l284
2513				l299:
2514					position, tokenIndex = position284, tokenIndex284
2515					if !_rules[ruleSymbolName]() {
2516						goto l302
2517					}
2518					if !_rules[ruleOffset]() {
2519						goto l302
2520					}
2521					goto l284
2522				l302:
2523					position, tokenIndex = position284, tokenIndex284
2524					if !_rules[ruleSymbolName]() {
2525						goto l282
2526					}
2527					{
2528						position303, tokenIndex303 := position, tokenIndex
2529						if !_rules[ruleTCMarker]() {
2530							goto l303
2531						}
2532						goto l304
2533					l303:
2534						position, tokenIndex = position303, tokenIndex303
2535					}
2536				l304:
2537				}
2538			l284:
2539				add(ruleSymbolArg, position283)
2540			}
2541			return true
2542		l282:
2543			position, tokenIndex = position282, tokenIndex282
2544			return false
2545		},
2546		/* 16 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
2547		func() bool {
2548			position305, tokenIndex305 := position, tokenIndex
2549			{
2550				position306 := position
2551				{
2552					position307, tokenIndex307 := position, tokenIndex
2553					if buffer[position] != rune('@') {
2554						goto l308
2555					}
2556					position++
2557					goto l307
2558				l308:
2559					position, tokenIndex = position307, tokenIndex307
2560					if buffer[position] != rune('%') {
2561						goto l305
2562					}
2563					position++
2564				}
2565			l307:
2566				{
2567					position309, tokenIndex309 := position, tokenIndex
2568					if buffer[position] != rune('f') {
2569						goto l310
2570					}
2571					position++
2572					if buffer[position] != rune('u') {
2573						goto l310
2574					}
2575					position++
2576					if buffer[position] != rune('n') {
2577						goto l310
2578					}
2579					position++
2580					if buffer[position] != rune('c') {
2581						goto l310
2582					}
2583					position++
2584					if buffer[position] != rune('t') {
2585						goto l310
2586					}
2587					position++
2588					if buffer[position] != rune('i') {
2589						goto l310
2590					}
2591					position++
2592					if buffer[position] != rune('o') {
2593						goto l310
2594					}
2595					position++
2596					if buffer[position] != rune('n') {
2597						goto l310
2598					}
2599					position++
2600					goto l309
2601				l310:
2602					position, tokenIndex = position309, tokenIndex309
2603					if buffer[position] != rune('o') {
2604						goto l305
2605					}
2606					position++
2607					if buffer[position] != rune('b') {
2608						goto l305
2609					}
2610					position++
2611					if buffer[position] != rune('j') {
2612						goto l305
2613					}
2614					position++
2615					if buffer[position] != rune('e') {
2616						goto l305
2617					}
2618					position++
2619					if buffer[position] != rune('c') {
2620						goto l305
2621					}
2622					position++
2623					if buffer[position] != rune('t') {
2624						goto l305
2625					}
2626					position++
2627				}
2628			l309:
2629				add(ruleSymbolType, position306)
2630			}
2631			return true
2632		l305:
2633			position, tokenIndex = position305, tokenIndex305
2634			return false
2635		},
2636		/* 17 Dot <- <'.'> */
2637		func() bool {
2638			position311, tokenIndex311 := position, tokenIndex
2639			{
2640				position312 := position
2641				if buffer[position] != rune('.') {
2642					goto l311
2643				}
2644				position++
2645				add(ruleDot, position312)
2646			}
2647			return true
2648		l311:
2649			position, tokenIndex = position311, tokenIndex311
2650			return false
2651		},
2652		/* 18 TCMarker <- <('[' 'T' 'C' ']')> */
2653		func() bool {
2654			position313, tokenIndex313 := position, tokenIndex
2655			{
2656				position314 := position
2657				if buffer[position] != rune('[') {
2658					goto l313
2659				}
2660				position++
2661				if buffer[position] != rune('T') {
2662					goto l313
2663				}
2664				position++
2665				if buffer[position] != rune('C') {
2666					goto l313
2667				}
2668				position++
2669				if buffer[position] != rune(']') {
2670					goto l313
2671				}
2672				position++
2673				add(ruleTCMarker, position314)
2674			}
2675			return true
2676		l313:
2677			position, tokenIndex = position313, tokenIndex313
2678			return false
2679		},
2680		/* 19 EscapedChar <- <('\\' .)> */
2681		func() bool {
2682			position315, tokenIndex315 := position, tokenIndex
2683			{
2684				position316 := position
2685				if buffer[position] != rune('\\') {
2686					goto l315
2687				}
2688				position++
2689				if !matchDot() {
2690					goto l315
2691				}
2692				add(ruleEscapedChar, position316)
2693			}
2694			return true
2695		l315:
2696			position, tokenIndex = position315, tokenIndex315
2697			return false
2698		},
2699		/* 20 WS <- <(' ' / '\t')+> */
2700		func() bool {
2701			position317, tokenIndex317 := position, tokenIndex
2702			{
2703				position318 := position
2704				{
2705					position321, tokenIndex321 := position, tokenIndex
2706					if buffer[position] != rune(' ') {
2707						goto l322
2708					}
2709					position++
2710					goto l321
2711				l322:
2712					position, tokenIndex = position321, tokenIndex321
2713					if buffer[position] != rune('\t') {
2714						goto l317
2715					}
2716					position++
2717				}
2718			l321:
2719			l319:
2720				{
2721					position320, tokenIndex320 := position, tokenIndex
2722					{
2723						position323, tokenIndex323 := position, tokenIndex
2724						if buffer[position] != rune(' ') {
2725							goto l324
2726						}
2727						position++
2728						goto l323
2729					l324:
2730						position, tokenIndex = position323, tokenIndex323
2731						if buffer[position] != rune('\t') {
2732							goto l320
2733						}
2734						position++
2735					}
2736				l323:
2737					goto l319
2738				l320:
2739					position, tokenIndex = position320, tokenIndex320
2740				}
2741				add(ruleWS, position318)
2742			}
2743			return true
2744		l317:
2745			position, tokenIndex = position317, tokenIndex317
2746			return false
2747		},
2748		/* 21 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
2749		func() bool {
2750			position325, tokenIndex325 := position, tokenIndex
2751			{
2752				position326 := position
2753				{
2754					position327, tokenIndex327 := position, tokenIndex
2755					if buffer[position] != rune('/') {
2756						goto l328
2757					}
2758					position++
2759					if buffer[position] != rune('/') {
2760						goto l328
2761					}
2762					position++
2763					goto l327
2764				l328:
2765					position, tokenIndex = position327, tokenIndex327
2766					if buffer[position] != rune('#') {
2767						goto l325
2768					}
2769					position++
2770				}
2771			l327:
2772			l329:
2773				{
2774					position330, tokenIndex330 := position, tokenIndex
2775					{
2776						position331, tokenIndex331 := position, tokenIndex
2777						if buffer[position] != rune('\n') {
2778							goto l331
2779						}
2780						position++
2781						goto l330
2782					l331:
2783						position, tokenIndex = position331, tokenIndex331
2784					}
2785					if !matchDot() {
2786						goto l330
2787					}
2788					goto l329
2789				l330:
2790					position, tokenIndex = position330, tokenIndex330
2791				}
2792				add(ruleComment, position326)
2793			}
2794			return true
2795		l325:
2796			position, tokenIndex = position325, tokenIndex325
2797			return false
2798		},
2799		/* 22 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
2800		func() bool {
2801			position332, tokenIndex332 := position, tokenIndex
2802			{
2803				position333 := position
2804				{
2805					position334, tokenIndex334 := position, tokenIndex
2806					if !_rules[ruleLocalSymbol]() {
2807						goto l335
2808					}
2809					goto l334
2810				l335:
2811					position, tokenIndex = position334, tokenIndex334
2812					if !_rules[ruleLocalLabel]() {
2813						goto l336
2814					}
2815					goto l334
2816				l336:
2817					position, tokenIndex = position334, tokenIndex334
2818					if !_rules[ruleSymbolName]() {
2819						goto l332
2820					}
2821				}
2822			l334:
2823				if buffer[position] != rune(':') {
2824					goto l332
2825				}
2826				position++
2827				add(ruleLabel, position333)
2828			}
2829			return true
2830		l332:
2831			position, tokenIndex = position332, tokenIndex332
2832			return false
2833		},
2834		/* 23 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
2835		func() bool {
2836			position337, tokenIndex337 := position, tokenIndex
2837			{
2838				position338 := position
2839				{
2840					position339, tokenIndex339 := position, tokenIndex
2841					if c := buffer[position]; c < rune('a') || c > rune('z') {
2842						goto l340
2843					}
2844					position++
2845					goto l339
2846				l340:
2847					position, tokenIndex = position339, tokenIndex339
2848					if c := buffer[position]; c < rune('A') || c > rune('Z') {
2849						goto l341
2850					}
2851					position++
2852					goto l339
2853				l341:
2854					position, tokenIndex = position339, tokenIndex339
2855					if buffer[position] != rune('.') {
2856						goto l342
2857					}
2858					position++
2859					goto l339
2860				l342:
2861					position, tokenIndex = position339, tokenIndex339
2862					if buffer[position] != rune('_') {
2863						goto l337
2864					}
2865					position++
2866				}
2867			l339:
2868			l343:
2869				{
2870					position344, tokenIndex344 := position, tokenIndex
2871					{
2872						position345, tokenIndex345 := position, tokenIndex
2873						if c := buffer[position]; c < rune('a') || c > rune('z') {
2874							goto l346
2875						}
2876						position++
2877						goto l345
2878					l346:
2879						position, tokenIndex = position345, tokenIndex345
2880						if c := buffer[position]; c < rune('A') || c > rune('Z') {
2881							goto l347
2882						}
2883						position++
2884						goto l345
2885					l347:
2886						position, tokenIndex = position345, tokenIndex345
2887						if buffer[position] != rune('.') {
2888							goto l348
2889						}
2890						position++
2891						goto l345
2892					l348:
2893						position, tokenIndex = position345, tokenIndex345
2894						{
2895							position350, tokenIndex350 := position, tokenIndex
2896							if c := buffer[position]; c < rune('0') || c > rune('9') {
2897								goto l351
2898							}
2899							position++
2900							goto l350
2901						l351:
2902							position, tokenIndex = position350, tokenIndex350
2903							if c := buffer[position]; c < rune('0') || c > rune('9') {
2904								goto l349
2905							}
2906							position++
2907						}
2908					l350:
2909						goto l345
2910					l349:
2911						position, tokenIndex = position345, tokenIndex345
2912						if buffer[position] != rune('$') {
2913							goto l352
2914						}
2915						position++
2916						goto l345
2917					l352:
2918						position, tokenIndex = position345, tokenIndex345
2919						if buffer[position] != rune('_') {
2920							goto l344
2921						}
2922						position++
2923					}
2924				l345:
2925					goto l343
2926				l344:
2927					position, tokenIndex = position344, tokenIndex344
2928				}
2929				add(ruleSymbolName, position338)
2930			}
2931			return true
2932		l337:
2933			position, tokenIndex = position337, tokenIndex337
2934			return false
2935		},
2936		/* 24 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
2937		func() bool {
2938			position353, tokenIndex353 := position, tokenIndex
2939			{
2940				position354 := position
2941				if buffer[position] != rune('.') {
2942					goto l353
2943				}
2944				position++
2945				if buffer[position] != rune('L') {
2946					goto l353
2947				}
2948				position++
2949				{
2950					position357, tokenIndex357 := position, tokenIndex
2951					if c := buffer[position]; c < rune('a') || c > rune('z') {
2952						goto l358
2953					}
2954					position++
2955					goto l357
2956				l358:
2957					position, tokenIndex = position357, tokenIndex357
2958					if c := buffer[position]; c < rune('A') || c > rune('Z') {
2959						goto l359
2960					}
2961					position++
2962					goto l357
2963				l359:
2964					position, tokenIndex = position357, tokenIndex357
2965					{
2966						position361, tokenIndex361 := position, tokenIndex
2967						if c := buffer[position]; c < rune('a') || c > rune('z') {
2968							goto l362
2969						}
2970						position++
2971						goto l361
2972					l362:
2973						position, tokenIndex = position361, tokenIndex361
2974						if c := buffer[position]; c < rune('A') || c > rune('Z') {
2975							goto l360
2976						}
2977						position++
2978					}
2979				l361:
2980					goto l357
2981				l360:
2982					position, tokenIndex = position357, tokenIndex357
2983					if buffer[position] != rune('.') {
2984						goto l363
2985					}
2986					position++
2987					goto l357
2988				l363:
2989					position, tokenIndex = position357, tokenIndex357
2990					{
2991						position365, tokenIndex365 := position, tokenIndex
2992						if c := buffer[position]; c < rune('0') || c > rune('9') {
2993							goto l366
2994						}
2995						position++
2996						goto l365
2997					l366:
2998						position, tokenIndex = position365, tokenIndex365
2999						if c := buffer[position]; c < rune('0') || c > rune('9') {
3000							goto l364
3001						}
3002						position++
3003					}
3004				l365:
3005					goto l357
3006				l364:
3007					position, tokenIndex = position357, tokenIndex357
3008					if buffer[position] != rune('$') {
3009						goto l367
3010					}
3011					position++
3012					goto l357
3013				l367:
3014					position, tokenIndex = position357, tokenIndex357
3015					if buffer[position] != rune('_') {
3016						goto l353
3017					}
3018					position++
3019				}
3020			l357:
3021			l355:
3022				{
3023					position356, tokenIndex356 := position, tokenIndex
3024					{
3025						position368, tokenIndex368 := position, tokenIndex
3026						if c := buffer[position]; c < rune('a') || c > rune('z') {
3027							goto l369
3028						}
3029						position++
3030						goto l368
3031					l369:
3032						position, tokenIndex = position368, tokenIndex368
3033						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3034							goto l370
3035						}
3036						position++
3037						goto l368
3038					l370:
3039						position, tokenIndex = position368, tokenIndex368
3040						{
3041							position372, tokenIndex372 := position, tokenIndex
3042							if c := buffer[position]; c < rune('a') || c > rune('z') {
3043								goto l373
3044							}
3045							position++
3046							goto l372
3047						l373:
3048							position, tokenIndex = position372, tokenIndex372
3049							if c := buffer[position]; c < rune('A') || c > rune('Z') {
3050								goto l371
3051							}
3052							position++
3053						}
3054					l372:
3055						goto l368
3056					l371:
3057						position, tokenIndex = position368, tokenIndex368
3058						if buffer[position] != rune('.') {
3059							goto l374
3060						}
3061						position++
3062						goto l368
3063					l374:
3064						position, tokenIndex = position368, tokenIndex368
3065						{
3066							position376, tokenIndex376 := position, tokenIndex
3067							if c := buffer[position]; c < rune('0') || c > rune('9') {
3068								goto l377
3069							}
3070							position++
3071							goto l376
3072						l377:
3073							position, tokenIndex = position376, tokenIndex376
3074							if c := buffer[position]; c < rune('0') || c > rune('9') {
3075								goto l375
3076							}
3077							position++
3078						}
3079					l376:
3080						goto l368
3081					l375:
3082						position, tokenIndex = position368, tokenIndex368
3083						if buffer[position] != rune('$') {
3084							goto l378
3085						}
3086						position++
3087						goto l368
3088					l378:
3089						position, tokenIndex = position368, tokenIndex368
3090						if buffer[position] != rune('_') {
3091							goto l356
3092						}
3093						position++
3094					}
3095				l368:
3096					goto l355
3097				l356:
3098					position, tokenIndex = position356, tokenIndex356
3099				}
3100				add(ruleLocalSymbol, position354)
3101			}
3102			return true
3103		l353:
3104			position, tokenIndex = position353, tokenIndex353
3105			return false
3106		},
3107		/* 25 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
3108		func() bool {
3109			position379, tokenIndex379 := position, tokenIndex
3110			{
3111				position380 := position
3112				if c := buffer[position]; c < rune('0') || c > rune('9') {
3113					goto l379
3114				}
3115				position++
3116			l381:
3117				{
3118					position382, tokenIndex382 := position, tokenIndex
3119					{
3120						position383, tokenIndex383 := position, tokenIndex
3121						if c := buffer[position]; c < rune('0') || c > rune('9') {
3122							goto l384
3123						}
3124						position++
3125						goto l383
3126					l384:
3127						position, tokenIndex = position383, tokenIndex383
3128						if buffer[position] != rune('$') {
3129							goto l382
3130						}
3131						position++
3132					}
3133				l383:
3134					goto l381
3135				l382:
3136					position, tokenIndex = position382, tokenIndex382
3137				}
3138				add(ruleLocalLabel, position380)
3139			}
3140			return true
3141		l379:
3142			position, tokenIndex = position379, tokenIndex379
3143			return false
3144		},
3145		/* 26 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
3146		func() bool {
3147			position385, tokenIndex385 := position, tokenIndex
3148			{
3149				position386 := position
3150				if c := buffer[position]; c < rune('0') || c > rune('9') {
3151					goto l385
3152				}
3153				position++
3154			l387:
3155				{
3156					position388, tokenIndex388 := position, tokenIndex
3157					{
3158						position389, tokenIndex389 := position, tokenIndex
3159						if c := buffer[position]; c < rune('0') || c > rune('9') {
3160							goto l390
3161						}
3162						position++
3163						goto l389
3164					l390:
3165						position, tokenIndex = position389, tokenIndex389
3166						if buffer[position] != rune('$') {
3167							goto l388
3168						}
3169						position++
3170					}
3171				l389:
3172					goto l387
3173				l388:
3174					position, tokenIndex = position388, tokenIndex388
3175				}
3176				{
3177					position391, tokenIndex391 := position, tokenIndex
3178					if buffer[position] != rune('b') {
3179						goto l392
3180					}
3181					position++
3182					goto l391
3183				l392:
3184					position, tokenIndex = position391, tokenIndex391
3185					if buffer[position] != rune('f') {
3186						goto l385
3187					}
3188					position++
3189				}
3190			l391:
3191				add(ruleLocalLabelRef, position386)
3192			}
3193			return true
3194		l385:
3195			position, tokenIndex = position385, tokenIndex385
3196			return false
3197		},
3198		/* 27 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
3199		func() bool {
3200			position393, tokenIndex393 := position, tokenIndex
3201			{
3202				position394 := position
3203				if !_rules[ruleInstructionName]() {
3204					goto l393
3205				}
3206				{
3207					position395, tokenIndex395 := position, tokenIndex
3208					if !_rules[ruleWS]() {
3209						goto l395
3210					}
3211					if !_rules[ruleInstructionArg]() {
3212						goto l395
3213					}
3214				l397:
3215					{
3216						position398, tokenIndex398 := position, tokenIndex
3217						{
3218							position399, tokenIndex399 := position, tokenIndex
3219							if !_rules[ruleWS]() {
3220								goto l399
3221							}
3222							goto l400
3223						l399:
3224							position, tokenIndex = position399, tokenIndex399
3225						}
3226					l400:
3227						if buffer[position] != rune(',') {
3228							goto l398
3229						}
3230						position++
3231						{
3232							position401, tokenIndex401 := position, tokenIndex
3233							if !_rules[ruleWS]() {
3234								goto l401
3235							}
3236							goto l402
3237						l401:
3238							position, tokenIndex = position401, tokenIndex401
3239						}
3240					l402:
3241						if !_rules[ruleInstructionArg]() {
3242							goto l398
3243						}
3244						goto l397
3245					l398:
3246						position, tokenIndex = position398, tokenIndex398
3247					}
3248					goto l396
3249				l395:
3250					position, tokenIndex = position395, tokenIndex395
3251				}
3252			l396:
3253				add(ruleInstruction, position394)
3254			}
3255			return true
3256		l393:
3257			position, tokenIndex = position393, tokenIndex393
3258			return false
3259		},
3260		/* 28 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
3261		func() bool {
3262			position403, tokenIndex403 := position, tokenIndex
3263			{
3264				position404 := position
3265				{
3266					position405, tokenIndex405 := position, tokenIndex
3267					if c := buffer[position]; c < rune('a') || c > rune('z') {
3268						goto l406
3269					}
3270					position++
3271					goto l405
3272				l406:
3273					position, tokenIndex = position405, tokenIndex405
3274					if c := buffer[position]; c < rune('A') || c > rune('Z') {
3275						goto l403
3276					}
3277					position++
3278				}
3279			l405:
3280			l407:
3281				{
3282					position408, tokenIndex408 := position, tokenIndex
3283					{
3284						position409, tokenIndex409 := position, tokenIndex
3285						if c := buffer[position]; c < rune('a') || c > rune('z') {
3286							goto l410
3287						}
3288						position++
3289						goto l409
3290					l410:
3291						position, tokenIndex = position409, tokenIndex409
3292						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3293							goto l411
3294						}
3295						position++
3296						goto l409
3297					l411:
3298						position, tokenIndex = position409, tokenIndex409
3299						if buffer[position] != rune('.') {
3300							goto l412
3301						}
3302						position++
3303						goto l409
3304					l412:
3305						position, tokenIndex = position409, tokenIndex409
3306						{
3307							position413, tokenIndex413 := position, tokenIndex
3308							if c := buffer[position]; c < rune('0') || c > rune('9') {
3309								goto l414
3310							}
3311							position++
3312							goto l413
3313						l414:
3314							position, tokenIndex = position413, tokenIndex413
3315							if c := buffer[position]; c < rune('0') || c > rune('9') {
3316								goto l408
3317							}
3318							position++
3319						}
3320					l413:
3321					}
3322				l409:
3323					goto l407
3324				l408:
3325					position, tokenIndex = position408, tokenIndex408
3326				}
3327				{
3328					position415, tokenIndex415 := position, tokenIndex
3329					{
3330						position417, tokenIndex417 := position, tokenIndex
3331						if buffer[position] != rune('.') {
3332							goto l418
3333						}
3334						position++
3335						goto l417
3336					l418:
3337						position, tokenIndex = position417, tokenIndex417
3338						if buffer[position] != rune('+') {
3339							goto l419
3340						}
3341						position++
3342						goto l417
3343					l419:
3344						position, tokenIndex = position417, tokenIndex417
3345						if buffer[position] != rune('-') {
3346							goto l415
3347						}
3348						position++
3349					}
3350				l417:
3351					goto l416
3352				l415:
3353					position, tokenIndex = position415, tokenIndex415
3354				}
3355			l416:
3356				add(ruleInstructionName, position404)
3357			}
3358			return true
3359		l403:
3360			position, tokenIndex = position403, tokenIndex403
3361			return false
3362		},
3363		/* 29 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
3364		func() bool {
3365			position420, tokenIndex420 := position, tokenIndex
3366			{
3367				position421 := position
3368				{
3369					position422, tokenIndex422 := position, tokenIndex
3370					if !_rules[ruleIndirectionIndicator]() {
3371						goto l422
3372					}
3373					goto l423
3374				l422:
3375					position, tokenIndex = position422, tokenIndex422
3376				}
3377			l423:
3378				{
3379					position424, tokenIndex424 := position, tokenIndex
3380					if !_rules[ruleARMConstantTweak]() {
3381						goto l425
3382					}
3383					goto l424
3384				l425:
3385					position, tokenIndex = position424, tokenIndex424
3386					if !_rules[ruleRegisterOrConstant]() {
3387						goto l426
3388					}
3389					goto l424
3390				l426:
3391					position, tokenIndex = position424, tokenIndex424
3392					if !_rules[ruleLocalLabelRef]() {
3393						goto l427
3394					}
3395					goto l424
3396				l427:
3397					position, tokenIndex = position424, tokenIndex424
3398					if !_rules[ruleTOCRefHigh]() {
3399						goto l428
3400					}
3401					goto l424
3402				l428:
3403					position, tokenIndex = position424, tokenIndex424
3404					if !_rules[ruleTOCRefLow]() {
3405						goto l429
3406					}
3407					goto l424
3408				l429:
3409					position, tokenIndex = position424, tokenIndex424
3410					if !_rules[ruleGOTLocation]() {
3411						goto l430
3412					}
3413					goto l424
3414				l430:
3415					position, tokenIndex = position424, tokenIndex424
3416					if !_rules[ruleGOTSymbolOffset]() {
3417						goto l431
3418					}
3419					goto l424
3420				l431:
3421					position, tokenIndex = position424, tokenIndex424
3422					if !_rules[ruleMemoryRef]() {
3423						goto l420
3424					}
3425				}
3426			l424:
3427			l432:
3428				{
3429					position433, tokenIndex433 := position, tokenIndex
3430					if !_rules[ruleAVX512Token]() {
3431						goto l433
3432					}
3433					goto l432
3434				l433:
3435					position, tokenIndex = position433, tokenIndex433
3436				}
3437				add(ruleInstructionArg, position421)
3438			}
3439			return true
3440		l420:
3441			position, tokenIndex = position420, tokenIndex420
3442			return false
3443		},
3444		/* 30 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
3445		func() bool {
3446			position434, tokenIndex434 := position, tokenIndex
3447			{
3448				position435 := position
3449				if buffer[position] != rune('$') {
3450					goto l434
3451				}
3452				position++
3453				if buffer[position] != rune('_') {
3454					goto l434
3455				}
3456				position++
3457				if buffer[position] != rune('G') {
3458					goto l434
3459				}
3460				position++
3461				if buffer[position] != rune('L') {
3462					goto l434
3463				}
3464				position++
3465				if buffer[position] != rune('O') {
3466					goto l434
3467				}
3468				position++
3469				if buffer[position] != rune('B') {
3470					goto l434
3471				}
3472				position++
3473				if buffer[position] != rune('A') {
3474					goto l434
3475				}
3476				position++
3477				if buffer[position] != rune('L') {
3478					goto l434
3479				}
3480				position++
3481				if buffer[position] != rune('_') {
3482					goto l434
3483				}
3484				position++
3485				if buffer[position] != rune('O') {
3486					goto l434
3487				}
3488				position++
3489				if buffer[position] != rune('F') {
3490					goto l434
3491				}
3492				position++
3493				if buffer[position] != rune('F') {
3494					goto l434
3495				}
3496				position++
3497				if buffer[position] != rune('S') {
3498					goto l434
3499				}
3500				position++
3501				if buffer[position] != rune('E') {
3502					goto l434
3503				}
3504				position++
3505				if buffer[position] != rune('T') {
3506					goto l434
3507				}
3508				position++
3509				if buffer[position] != rune('_') {
3510					goto l434
3511				}
3512				position++
3513				if buffer[position] != rune('T') {
3514					goto l434
3515				}
3516				position++
3517				if buffer[position] != rune('A') {
3518					goto l434
3519				}
3520				position++
3521				if buffer[position] != rune('B') {
3522					goto l434
3523				}
3524				position++
3525				if buffer[position] != rune('L') {
3526					goto l434
3527				}
3528				position++
3529				if buffer[position] != rune('E') {
3530					goto l434
3531				}
3532				position++
3533				if buffer[position] != rune('_') {
3534					goto l434
3535				}
3536				position++
3537				if buffer[position] != rune('-') {
3538					goto l434
3539				}
3540				position++
3541				if !_rules[ruleLocalSymbol]() {
3542					goto l434
3543				}
3544				add(ruleGOTLocation, position435)
3545			}
3546			return true
3547		l434:
3548			position, tokenIndex = position434, tokenIndex434
3549			return false
3550		},
3551		/* 31 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
3552		func() bool {
3553			position436, tokenIndex436 := position, tokenIndex
3554			{
3555				position437 := position
3556				{
3557					position438, tokenIndex438 := position, tokenIndex
3558					if buffer[position] != rune('$') {
3559						goto l439
3560					}
3561					position++
3562					if !_rules[ruleSymbolName]() {
3563						goto l439
3564					}
3565					if buffer[position] != rune('@') {
3566						goto l439
3567					}
3568					position++
3569					if buffer[position] != rune('G') {
3570						goto l439
3571					}
3572					position++
3573					if buffer[position] != rune('O') {
3574						goto l439
3575					}
3576					position++
3577					if buffer[position] != rune('T') {
3578						goto l439
3579					}
3580					position++
3581					{
3582						position440, tokenIndex440 := position, tokenIndex
3583						if buffer[position] != rune('O') {
3584							goto l440
3585						}
3586						position++
3587						if buffer[position] != rune('F') {
3588							goto l440
3589						}
3590						position++
3591						if buffer[position] != rune('F') {
3592							goto l440
3593						}
3594						position++
3595						goto l441
3596					l440:
3597						position, tokenIndex = position440, tokenIndex440
3598					}
3599				l441:
3600					goto l438
3601				l439:
3602					position, tokenIndex = position438, tokenIndex438
3603					if buffer[position] != rune(':') {
3604						goto l436
3605					}
3606					position++
3607					{
3608						position442, tokenIndex442 := position, tokenIndex
3609						if buffer[position] != rune('g') {
3610							goto l443
3611						}
3612						position++
3613						goto l442
3614					l443:
3615						position, tokenIndex = position442, tokenIndex442
3616						if buffer[position] != rune('G') {
3617							goto l436
3618						}
3619						position++
3620					}
3621				l442:
3622					{
3623						position444, tokenIndex444 := position, tokenIndex
3624						if buffer[position] != rune('o') {
3625							goto l445
3626						}
3627						position++
3628						goto l444
3629					l445:
3630						position, tokenIndex = position444, tokenIndex444
3631						if buffer[position] != rune('O') {
3632							goto l436
3633						}
3634						position++
3635					}
3636				l444:
3637					{
3638						position446, tokenIndex446 := position, tokenIndex
3639						if buffer[position] != rune('t') {
3640							goto l447
3641						}
3642						position++
3643						goto l446
3644					l447:
3645						position, tokenIndex = position446, tokenIndex446
3646						if buffer[position] != rune('T') {
3647							goto l436
3648						}
3649						position++
3650					}
3651				l446:
3652					if buffer[position] != rune(':') {
3653						goto l436
3654					}
3655					position++
3656					if !_rules[ruleSymbolName]() {
3657						goto l436
3658					}
3659				}
3660			l438:
3661				add(ruleGOTSymbolOffset, position437)
3662			}
3663			return true
3664		l436:
3665			position, tokenIndex = position436, tokenIndex436
3666			return false
3667		},
3668		/* 32 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
3669		func() bool {
3670			position448, tokenIndex448 := position, tokenIndex
3671			{
3672				position449 := position
3673				{
3674					position450, tokenIndex450 := position, tokenIndex
3675					if !_rules[ruleWS]() {
3676						goto l450
3677					}
3678					goto l451
3679				l450:
3680					position, tokenIndex = position450, tokenIndex450
3681				}
3682			l451:
3683				if buffer[position] != rune('{') {
3684					goto l448
3685				}
3686				position++
3687				{
3688					position452, tokenIndex452 := position, tokenIndex
3689					if buffer[position] != rune('%') {
3690						goto l452
3691					}
3692					position++
3693					goto l453
3694				l452:
3695					position, tokenIndex = position452, tokenIndex452
3696				}
3697			l453:
3698			l454:
3699				{
3700					position455, tokenIndex455 := position, tokenIndex
3701					{
3702						position456, tokenIndex456 := position, tokenIndex
3703						if c := buffer[position]; c < rune('0') || c > rune('9') {
3704							goto l457
3705						}
3706						position++
3707						goto l456
3708					l457:
3709						position, tokenIndex = position456, tokenIndex456
3710						if c := buffer[position]; c < rune('a') || c > rune('z') {
3711							goto l455
3712						}
3713						position++
3714					}
3715				l456:
3716					goto l454
3717				l455:
3718					position, tokenIndex = position455, tokenIndex455
3719				}
3720				if buffer[position] != rune('}') {
3721					goto l448
3722				}
3723				position++
3724				add(ruleAVX512Token, position449)
3725			}
3726			return true
3727		l448:
3728			position, tokenIndex = position448, tokenIndex448
3729			return false
3730		},
3731		/* 33 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
3732		func() bool {
3733			position458, tokenIndex458 := position, tokenIndex
3734			{
3735				position459 := position
3736				if buffer[position] != rune('.') {
3737					goto l458
3738				}
3739				position++
3740				if buffer[position] != rune('T') {
3741					goto l458
3742				}
3743				position++
3744				if buffer[position] != rune('O') {
3745					goto l458
3746				}
3747				position++
3748				if buffer[position] != rune('C') {
3749					goto l458
3750				}
3751				position++
3752				if buffer[position] != rune('.') {
3753					goto l458
3754				}
3755				position++
3756				if buffer[position] != rune('-') {
3757					goto l458
3758				}
3759				position++
3760				{
3761					position460, tokenIndex460 := position, tokenIndex
3762					if buffer[position] != rune('0') {
3763						goto l461
3764					}
3765					position++
3766					if buffer[position] != rune('b') {
3767						goto l461
3768					}
3769					position++
3770					goto l460
3771				l461:
3772					position, tokenIndex = position460, tokenIndex460
3773					if buffer[position] != rune('.') {
3774						goto l458
3775					}
3776					position++
3777					if buffer[position] != rune('L') {
3778						goto l458
3779					}
3780					position++
3781					{
3782						position464, tokenIndex464 := position, tokenIndex
3783						if c := buffer[position]; c < rune('a') || c > rune('z') {
3784							goto l465
3785						}
3786						position++
3787						goto l464
3788					l465:
3789						position, tokenIndex = position464, tokenIndex464
3790						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3791							goto l466
3792						}
3793						position++
3794						goto l464
3795					l466:
3796						position, tokenIndex = position464, tokenIndex464
3797						if buffer[position] != rune('_') {
3798							goto l467
3799						}
3800						position++
3801						goto l464
3802					l467:
3803						position, tokenIndex = position464, tokenIndex464
3804						if c := buffer[position]; c < rune('0') || c > rune('9') {
3805							goto l458
3806						}
3807						position++
3808					}
3809				l464:
3810				l462:
3811					{
3812						position463, tokenIndex463 := position, tokenIndex
3813						{
3814							position468, tokenIndex468 := position, tokenIndex
3815							if c := buffer[position]; c < rune('a') || c > rune('z') {
3816								goto l469
3817							}
3818							position++
3819							goto l468
3820						l469:
3821							position, tokenIndex = position468, tokenIndex468
3822							if c := buffer[position]; c < rune('A') || c > rune('Z') {
3823								goto l470
3824							}
3825							position++
3826							goto l468
3827						l470:
3828							position, tokenIndex = position468, tokenIndex468
3829							if buffer[position] != rune('_') {
3830								goto l471
3831							}
3832							position++
3833							goto l468
3834						l471:
3835							position, tokenIndex = position468, tokenIndex468
3836							if c := buffer[position]; c < rune('0') || c > rune('9') {
3837								goto l463
3838							}
3839							position++
3840						}
3841					l468:
3842						goto l462
3843					l463:
3844						position, tokenIndex = position463, tokenIndex463
3845					}
3846				}
3847			l460:
3848				if buffer[position] != rune('@') {
3849					goto l458
3850				}
3851				position++
3852				{
3853					position472, tokenIndex472 := position, tokenIndex
3854					if buffer[position] != rune('h') {
3855						goto l473
3856					}
3857					position++
3858					goto l472
3859				l473:
3860					position, tokenIndex = position472, tokenIndex472
3861					if buffer[position] != rune('H') {
3862						goto l458
3863					}
3864					position++
3865				}
3866			l472:
3867				{
3868					position474, tokenIndex474 := position, tokenIndex
3869					if buffer[position] != rune('a') {
3870						goto l475
3871					}
3872					position++
3873					goto l474
3874				l475:
3875					position, tokenIndex = position474, tokenIndex474
3876					if buffer[position] != rune('A') {
3877						goto l458
3878					}
3879					position++
3880				}
3881			l474:
3882				add(ruleTOCRefHigh, position459)
3883			}
3884			return true
3885		l458:
3886			position, tokenIndex = position458, tokenIndex458
3887			return false
3888		},
3889		/* 34 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
3890		func() bool {
3891			position476, tokenIndex476 := position, tokenIndex
3892			{
3893				position477 := position
3894				if buffer[position] != rune('.') {
3895					goto l476
3896				}
3897				position++
3898				if buffer[position] != rune('T') {
3899					goto l476
3900				}
3901				position++
3902				if buffer[position] != rune('O') {
3903					goto l476
3904				}
3905				position++
3906				if buffer[position] != rune('C') {
3907					goto l476
3908				}
3909				position++
3910				if buffer[position] != rune('.') {
3911					goto l476
3912				}
3913				position++
3914				if buffer[position] != rune('-') {
3915					goto l476
3916				}
3917				position++
3918				{
3919					position478, tokenIndex478 := position, tokenIndex
3920					if buffer[position] != rune('0') {
3921						goto l479
3922					}
3923					position++
3924					if buffer[position] != rune('b') {
3925						goto l479
3926					}
3927					position++
3928					goto l478
3929				l479:
3930					position, tokenIndex = position478, tokenIndex478
3931					if buffer[position] != rune('.') {
3932						goto l476
3933					}
3934					position++
3935					if buffer[position] != rune('L') {
3936						goto l476
3937					}
3938					position++
3939					{
3940						position482, tokenIndex482 := position, tokenIndex
3941						if c := buffer[position]; c < rune('a') || c > rune('z') {
3942							goto l483
3943						}
3944						position++
3945						goto l482
3946					l483:
3947						position, tokenIndex = position482, tokenIndex482
3948						if c := buffer[position]; c < rune('A') || c > rune('Z') {
3949							goto l484
3950						}
3951						position++
3952						goto l482
3953					l484:
3954						position, tokenIndex = position482, tokenIndex482
3955						if buffer[position] != rune('_') {
3956							goto l485
3957						}
3958						position++
3959						goto l482
3960					l485:
3961						position, tokenIndex = position482, tokenIndex482
3962						if c := buffer[position]; c < rune('0') || c > rune('9') {
3963							goto l476
3964						}
3965						position++
3966					}
3967				l482:
3968				l480:
3969					{
3970						position481, tokenIndex481 := position, tokenIndex
3971						{
3972							position486, tokenIndex486 := position, tokenIndex
3973							if c := buffer[position]; c < rune('a') || c > rune('z') {
3974								goto l487
3975							}
3976							position++
3977							goto l486
3978						l487:
3979							position, tokenIndex = position486, tokenIndex486
3980							if c := buffer[position]; c < rune('A') || c > rune('Z') {
3981								goto l488
3982							}
3983							position++
3984							goto l486
3985						l488:
3986							position, tokenIndex = position486, tokenIndex486
3987							if buffer[position] != rune('_') {
3988								goto l489
3989							}
3990							position++
3991							goto l486
3992						l489:
3993							position, tokenIndex = position486, tokenIndex486
3994							if c := buffer[position]; c < rune('0') || c > rune('9') {
3995								goto l481
3996							}
3997							position++
3998						}
3999					l486:
4000						goto l480
4001					l481:
4002						position, tokenIndex = position481, tokenIndex481
4003					}
4004				}
4005			l478:
4006				if buffer[position] != rune('@') {
4007					goto l476
4008				}
4009				position++
4010				{
4011					position490, tokenIndex490 := position, tokenIndex
4012					if buffer[position] != rune('l') {
4013						goto l491
4014					}
4015					position++
4016					goto l490
4017				l491:
4018					position, tokenIndex = position490, tokenIndex490
4019					if buffer[position] != rune('L') {
4020						goto l476
4021					}
4022					position++
4023				}
4024			l490:
4025				add(ruleTOCRefLow, position477)
4026			}
4027			return true
4028		l476:
4029			position, tokenIndex = position476, tokenIndex476
4030			return false
4031		},
4032		/* 35 IndirectionIndicator <- <'*'> */
4033		func() bool {
4034			position492, tokenIndex492 := position, tokenIndex
4035			{
4036				position493 := position
4037				if buffer[position] != rune('*') {
4038					goto l492
4039				}
4040				position++
4041				add(ruleIndirectionIndicator, position493)
4042			}
4043			return true
4044		l492:
4045			position, tokenIndex = position492, tokenIndex492
4046			return false
4047		},
4048		/* 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' / ':' / '(' / '+' / '-'))> */
4049		func() bool {
4050			position494, tokenIndex494 := position, tokenIndex
4051			{
4052				position495 := position
4053				{
4054					position496, tokenIndex496 := position, tokenIndex
4055					if buffer[position] != rune('%') {
4056						goto l497
4057					}
4058					position++
4059					{
4060						position498, tokenIndex498 := position, tokenIndex
4061						if c := buffer[position]; c < rune('a') || c > rune('z') {
4062							goto l499
4063						}
4064						position++
4065						goto l498
4066					l499:
4067						position, tokenIndex = position498, tokenIndex498
4068						if c := buffer[position]; c < rune('A') || c > rune('Z') {
4069							goto l497
4070						}
4071						position++
4072					}
4073				l498:
4074				l500:
4075					{
4076						position501, tokenIndex501 := position, tokenIndex
4077						{
4078							position502, tokenIndex502 := position, tokenIndex
4079							if c := buffer[position]; c < rune('a') || c > rune('z') {
4080								goto l503
4081							}
4082							position++
4083							goto l502
4084						l503:
4085							position, tokenIndex = position502, tokenIndex502
4086							if c := buffer[position]; c < rune('A') || c > rune('Z') {
4087								goto l504
4088							}
4089							position++
4090							goto l502
4091						l504:
4092							position, tokenIndex = position502, tokenIndex502
4093							{
4094								position505, tokenIndex505 := position, tokenIndex
4095								if c := buffer[position]; c < rune('0') || c > rune('9') {
4096									goto l506
4097								}
4098								position++
4099								goto l505
4100							l506:
4101								position, tokenIndex = position505, tokenIndex505
4102								if c := buffer[position]; c < rune('0') || c > rune('9') {
4103									goto l501
4104								}
4105								position++
4106							}
4107						l505:
4108						}
4109					l502:
4110						goto l500
4111					l501:
4112						position, tokenIndex = position501, tokenIndex501
4113					}
4114					goto l496
4115				l497:
4116					position, tokenIndex = position496, tokenIndex496
4117					{
4118						position508, tokenIndex508 := position, tokenIndex
4119						if buffer[position] != rune('$') {
4120							goto l508
4121						}
4122						position++
4123						goto l509
4124					l508:
4125						position, tokenIndex = position508, tokenIndex508
4126					}
4127				l509:
4128					{
4129						position510, tokenIndex510 := position, tokenIndex
4130						if !_rules[ruleOffset]() {
4131							goto l511
4132						}
4133						if !_rules[ruleOffset]() {
4134							goto l511
4135						}
4136						goto l510
4137					l511:
4138						position, tokenIndex = position510, tokenIndex510
4139						if !_rules[ruleOffset]() {
4140							goto l507
4141						}
4142					}
4143				l510:
4144					goto l496
4145				l507:
4146					position, tokenIndex = position496, tokenIndex496
4147					if buffer[position] != rune('#') {
4148						goto l512
4149					}
4150					position++
4151					if !_rules[ruleOffset]() {
4152						goto l512
4153					}
4154					{
4155						position513, tokenIndex513 := position, tokenIndex
4156						if buffer[position] != rune('*') {
4157							goto l513
4158						}
4159						position++
4160						if c := buffer[position]; c < rune('0') || c > rune('9') {
4161							goto l513
4162						}
4163						position++
4164					l515:
4165						{
4166							position516, tokenIndex516 := position, tokenIndex
4167							if c := buffer[position]; c < rune('0') || c > rune('9') {
4168								goto l516
4169							}
4170							position++
4171							goto l515
4172						l516:
4173							position, tokenIndex = position516, tokenIndex516
4174						}
4175						{
4176							position517, tokenIndex517 := position, tokenIndex
4177							if buffer[position] != rune('-') {
4178								goto l517
4179							}
4180							position++
4181							if c := buffer[position]; c < rune('0') || c > rune('9') {
4182								goto l517
4183							}
4184							position++
4185						l519:
4186							{
4187								position520, tokenIndex520 := position, tokenIndex
4188								if c := buffer[position]; c < rune('0') || c > rune('9') {
4189									goto l520
4190								}
4191								position++
4192								goto l519
4193							l520:
4194								position, tokenIndex = position520, tokenIndex520
4195							}
4196							goto l518
4197						l517:
4198							position, tokenIndex = position517, tokenIndex517
4199						}
4200					l518:
4201						goto l514
4202					l513:
4203						position, tokenIndex = position513, tokenIndex513
4204					}
4205				l514:
4206					goto l496
4207				l512:
4208					position, tokenIndex = position496, tokenIndex496
4209					if buffer[position] != rune('#') {
4210						goto l521
4211					}
4212					position++
4213					{
4214						position522, tokenIndex522 := position, tokenIndex
4215						if buffer[position] != rune('~') {
4216							goto l522
4217						}
4218						position++
4219						goto l523
4220					l522:
4221						position, tokenIndex = position522, tokenIndex522
4222					}
4223				l523:
4224					if buffer[position] != rune('(') {
4225						goto l521
4226					}
4227					position++
4228					if c := buffer[position]; c < rune('0') || c > rune('9') {
4229						goto l521
4230					}
4231					position++
4232					{
4233						position524, tokenIndex524 := position, tokenIndex
4234						if !_rules[ruleWS]() {
4235							goto l524
4236						}
4237						goto l525
4238					l524:
4239						position, tokenIndex = position524, tokenIndex524
4240					}
4241				l525:
4242					if buffer[position] != rune('<') {
4243						goto l521
4244					}
4245					position++
4246					if buffer[position] != rune('<') {
4247						goto l521
4248					}
4249					position++
4250					{
4251						position526, tokenIndex526 := position, tokenIndex
4252						if !_rules[ruleWS]() {
4253							goto l526
4254						}
4255						goto l527
4256					l526:
4257						position, tokenIndex = position526, tokenIndex526
4258					}
4259				l527:
4260					if c := buffer[position]; c < rune('0') || c > rune('9') {
4261						goto l521
4262					}
4263					position++
4264					if buffer[position] != rune(')') {
4265						goto l521
4266					}
4267					position++
4268					goto l496
4269				l521:
4270					position, tokenIndex = position496, tokenIndex496
4271					if !_rules[ruleARMRegister]() {
4272						goto l494
4273					}
4274				}
4275			l496:
4276				{
4277					position528, tokenIndex528 := position, tokenIndex
4278					{
4279						position529, tokenIndex529 := position, tokenIndex
4280						if buffer[position] != rune('f') {
4281							goto l530
4282						}
4283						position++
4284						goto l529
4285					l530:
4286						position, tokenIndex = position529, tokenIndex529
4287						if buffer[position] != rune('b') {
4288							goto l531
4289						}
4290						position++
4291						goto l529
4292					l531:
4293						position, tokenIndex = position529, tokenIndex529
4294						if buffer[position] != rune(':') {
4295							goto l532
4296						}
4297						position++
4298						goto l529
4299					l532:
4300						position, tokenIndex = position529, tokenIndex529
4301						if buffer[position] != rune('(') {
4302							goto l533
4303						}
4304						position++
4305						goto l529
4306					l533:
4307						position, tokenIndex = position529, tokenIndex529
4308						if buffer[position] != rune('+') {
4309							goto l534
4310						}
4311						position++
4312						goto l529
4313					l534:
4314						position, tokenIndex = position529, tokenIndex529
4315						if buffer[position] != rune('-') {
4316							goto l528
4317						}
4318						position++
4319					}
4320				l529:
4321					goto l494
4322				l528:
4323					position, tokenIndex = position528, tokenIndex528
4324				}
4325				add(ruleRegisterOrConstant, position495)
4326			}
4327			return true
4328		l494:
4329			position, tokenIndex = position494, tokenIndex494
4330			return false
4331		},
4332		/* 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)?)> */
4333		func() bool {
4334			position535, tokenIndex535 := position, tokenIndex
4335			{
4336				position536 := position
4337				{
4338					position537, tokenIndex537 := position, tokenIndex
4339					{
4340						position539, tokenIndex539 := position, tokenIndex
4341						if buffer[position] != rune('l') {
4342							goto l540
4343						}
4344						position++
4345						goto l539
4346					l540:
4347						position, tokenIndex = position539, tokenIndex539
4348						if buffer[position] != rune('L') {
4349							goto l538
4350						}
4351						position++
4352					}
4353				l539:
4354					{
4355						position541, tokenIndex541 := position, tokenIndex
4356						if buffer[position] != rune('s') {
4357							goto l542
4358						}
4359						position++
4360						goto l541
4361					l542:
4362						position, tokenIndex = position541, tokenIndex541
4363						if buffer[position] != rune('S') {
4364							goto l538
4365						}
4366						position++
4367					}
4368				l541:
4369					{
4370						position543, tokenIndex543 := position, tokenIndex
4371						if buffer[position] != rune('l') {
4372							goto l544
4373						}
4374						position++
4375						goto l543
4376					l544:
4377						position, tokenIndex = position543, tokenIndex543
4378						if buffer[position] != rune('L') {
4379							goto l538
4380						}
4381						position++
4382					}
4383				l543:
4384					goto l537
4385				l538:
4386					position, tokenIndex = position537, tokenIndex537
4387					{
4388						position546, tokenIndex546 := position, tokenIndex
4389						if buffer[position] != rune('s') {
4390							goto l547
4391						}
4392						position++
4393						goto l546
4394					l547:
4395						position, tokenIndex = position546, tokenIndex546
4396						if buffer[position] != rune('S') {
4397							goto l545
4398						}
4399						position++
4400					}
4401				l546:
4402					{
4403						position548, tokenIndex548 := position, tokenIndex
4404						if buffer[position] != rune('x') {
4405							goto l549
4406						}
4407						position++
4408						goto l548
4409					l549:
4410						position, tokenIndex = position548, tokenIndex548
4411						if buffer[position] != rune('X') {
4412							goto l545
4413						}
4414						position++
4415					}
4416				l548:
4417					{
4418						position550, tokenIndex550 := position, tokenIndex
4419						if buffer[position] != rune('t') {
4420							goto l551
4421						}
4422						position++
4423						goto l550
4424					l551:
4425						position, tokenIndex = position550, tokenIndex550
4426						if buffer[position] != rune('T') {
4427							goto l545
4428						}
4429						position++
4430					}
4431				l550:
4432					{
4433						position552, tokenIndex552 := position, tokenIndex
4434						if buffer[position] != rune('w') {
4435							goto l553
4436						}
4437						position++
4438						goto l552
4439					l553:
4440						position, tokenIndex = position552, tokenIndex552
4441						if buffer[position] != rune('W') {
4442							goto l545
4443						}
4444						position++
4445					}
4446				l552:
4447					goto l537
4448				l545:
4449					position, tokenIndex = position537, tokenIndex537
4450					{
4451						position555, tokenIndex555 := position, tokenIndex
4452						if buffer[position] != rune('u') {
4453							goto l556
4454						}
4455						position++
4456						goto l555
4457					l556:
4458						position, tokenIndex = position555, tokenIndex555
4459						if buffer[position] != rune('U') {
4460							goto l554
4461						}
4462						position++
4463					}
4464				l555:
4465					{
4466						position557, tokenIndex557 := position, tokenIndex
4467						if buffer[position] != rune('x') {
4468							goto l558
4469						}
4470						position++
4471						goto l557
4472					l558:
4473						position, tokenIndex = position557, tokenIndex557
4474						if buffer[position] != rune('X') {
4475							goto l554
4476						}
4477						position++
4478					}
4479				l557:
4480					{
4481						position559, tokenIndex559 := position, tokenIndex
4482						if buffer[position] != rune('t') {
4483							goto l560
4484						}
4485						position++
4486						goto l559
4487					l560:
4488						position, tokenIndex = position559, tokenIndex559
4489						if buffer[position] != rune('T') {
4490							goto l554
4491						}
4492						position++
4493					}
4494				l559:
4495					{
4496						position561, tokenIndex561 := position, tokenIndex
4497						if buffer[position] != rune('w') {
4498							goto l562
4499						}
4500						position++
4501						goto l561
4502					l562:
4503						position, tokenIndex = position561, tokenIndex561
4504						if buffer[position] != rune('W') {
4505							goto l554
4506						}
4507						position++
4508					}
4509				l561:
4510					goto l537
4511				l554:
4512					position, tokenIndex = position537, tokenIndex537
4513					{
4514						position564, tokenIndex564 := position, tokenIndex
4515						if buffer[position] != rune('u') {
4516							goto l565
4517						}
4518						position++
4519						goto l564
4520					l565:
4521						position, tokenIndex = position564, tokenIndex564
4522						if buffer[position] != rune('U') {
4523							goto l563
4524						}
4525						position++
4526					}
4527				l564:
4528					{
4529						position566, tokenIndex566 := position, tokenIndex
4530						if buffer[position] != rune('x') {
4531							goto l567
4532						}
4533						position++
4534						goto l566
4535					l567:
4536						position, tokenIndex = position566, tokenIndex566
4537						if buffer[position] != rune('X') {
4538							goto l563
4539						}
4540						position++
4541					}
4542				l566:
4543					{
4544						position568, tokenIndex568 := position, tokenIndex
4545						if buffer[position] != rune('t') {
4546							goto l569
4547						}
4548						position++
4549						goto l568
4550					l569:
4551						position, tokenIndex = position568, tokenIndex568
4552						if buffer[position] != rune('T') {
4553							goto l563
4554						}
4555						position++
4556					}
4557				l568:
4558					{
4559						position570, tokenIndex570 := position, tokenIndex
4560						if buffer[position] != rune('b') {
4561							goto l571
4562						}
4563						position++
4564						goto l570
4565					l571:
4566						position, tokenIndex = position570, tokenIndex570
4567						if buffer[position] != rune('B') {
4568							goto l563
4569						}
4570						position++
4571					}
4572				l570:
4573					goto l537
4574				l563:
4575					position, tokenIndex = position537, tokenIndex537
4576					{
4577						position573, tokenIndex573 := position, tokenIndex
4578						if buffer[position] != rune('l') {
4579							goto l574
4580						}
4581						position++
4582						goto l573
4583					l574:
4584						position, tokenIndex = position573, tokenIndex573
4585						if buffer[position] != rune('L') {
4586							goto l572
4587						}
4588						position++
4589					}
4590				l573:
4591					{
4592						position575, tokenIndex575 := position, tokenIndex
4593						if buffer[position] != rune('s') {
4594							goto l576
4595						}
4596						position++
4597						goto l575
4598					l576:
4599						position, tokenIndex = position575, tokenIndex575
4600						if buffer[position] != rune('S') {
4601							goto l572
4602						}
4603						position++
4604					}
4605				l575:
4606					{
4607						position577, tokenIndex577 := position, tokenIndex
4608						if buffer[position] != rune('r') {
4609							goto l578
4610						}
4611						position++
4612						goto l577
4613					l578:
4614						position, tokenIndex = position577, tokenIndex577
4615						if buffer[position] != rune('R') {
4616							goto l572
4617						}
4618						position++
4619					}
4620				l577:
4621					goto l537
4622				l572:
4623					position, tokenIndex = position537, tokenIndex537
4624					{
4625						position580, tokenIndex580 := position, tokenIndex
4626						if buffer[position] != rune('r') {
4627							goto l581
4628						}
4629						position++
4630						goto l580
4631					l581:
4632						position, tokenIndex = position580, tokenIndex580
4633						if buffer[position] != rune('R') {
4634							goto l579
4635						}
4636						position++
4637					}
4638				l580:
4639					{
4640						position582, tokenIndex582 := position, tokenIndex
4641						if buffer[position] != rune('o') {
4642							goto l583
4643						}
4644						position++
4645						goto l582
4646					l583:
4647						position, tokenIndex = position582, tokenIndex582
4648						if buffer[position] != rune('O') {
4649							goto l579
4650						}
4651						position++
4652					}
4653				l582:
4654					{
4655						position584, tokenIndex584 := position, tokenIndex
4656						if buffer[position] != rune('r') {
4657							goto l585
4658						}
4659						position++
4660						goto l584
4661					l585:
4662						position, tokenIndex = position584, tokenIndex584
4663						if buffer[position] != rune('R') {
4664							goto l579
4665						}
4666						position++
4667					}
4668				l584:
4669					goto l537
4670				l579:
4671					position, tokenIndex = position537, tokenIndex537
4672					{
4673						position586, tokenIndex586 := position, tokenIndex
4674						if buffer[position] != rune('a') {
4675							goto l587
4676						}
4677						position++
4678						goto l586
4679					l587:
4680						position, tokenIndex = position586, tokenIndex586
4681						if buffer[position] != rune('A') {
4682							goto l535
4683						}
4684						position++
4685					}
4686				l586:
4687					{
4688						position588, tokenIndex588 := position, tokenIndex
4689						if buffer[position] != rune('s') {
4690							goto l589
4691						}
4692						position++
4693						goto l588
4694					l589:
4695						position, tokenIndex = position588, tokenIndex588
4696						if buffer[position] != rune('S') {
4697							goto l535
4698						}
4699						position++
4700					}
4701				l588:
4702					{
4703						position590, tokenIndex590 := position, tokenIndex
4704						if buffer[position] != rune('r') {
4705							goto l591
4706						}
4707						position++
4708						goto l590
4709					l591:
4710						position, tokenIndex = position590, tokenIndex590
4711						if buffer[position] != rune('R') {
4712							goto l535
4713						}
4714						position++
4715					}
4716				l590:
4717				}
4718			l537:
4719				{
4720					position592, tokenIndex592 := position, tokenIndex
4721					if !_rules[ruleWS]() {
4722						goto l592
4723					}
4724					if buffer[position] != rune('#') {
4725						goto l592
4726					}
4727					position++
4728					if !_rules[ruleOffset]() {
4729						goto l592
4730					}
4731					goto l593
4732				l592:
4733					position, tokenIndex = position592, tokenIndex592
4734				}
4735			l593:
4736				add(ruleARMConstantTweak, position536)
4737			}
4738			return true
4739		l535:
4740			position, tokenIndex = position535, tokenIndex535
4741			return false
4742		},
4743		/* 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] ']')?))> */
4744		func() bool {
4745			position594, tokenIndex594 := position, tokenIndex
4746			{
4747				position595 := position
4748				{
4749					position596, tokenIndex596 := position, tokenIndex
4750					{
4751						position598, tokenIndex598 := position, tokenIndex
4752						if buffer[position] != rune('s') {
4753							goto l599
4754						}
4755						position++
4756						goto l598
4757					l599:
4758						position, tokenIndex = position598, tokenIndex598
4759						if buffer[position] != rune('S') {
4760							goto l597
4761						}
4762						position++
4763					}
4764				l598:
4765					{
4766						position600, tokenIndex600 := position, tokenIndex
4767						if buffer[position] != rune('p') {
4768							goto l601
4769						}
4770						position++
4771						goto l600
4772					l601:
4773						position, tokenIndex = position600, tokenIndex600
4774						if buffer[position] != rune('P') {
4775							goto l597
4776						}
4777						position++
4778					}
4779				l600:
4780					goto l596
4781				l597:
4782					position, tokenIndex = position596, tokenIndex596
4783					{
4784						position603, tokenIndex603 := position, tokenIndex
4785						if buffer[position] != rune('x') {
4786							goto l604
4787						}
4788						position++
4789						goto l603
4790					l604:
4791						position, tokenIndex = position603, tokenIndex603
4792						if buffer[position] != rune('w') {
4793							goto l605
4794						}
4795						position++
4796						goto l603
4797					l605:
4798						position, tokenIndex = position603, tokenIndex603
4799						if buffer[position] != rune('d') {
4800							goto l606
4801						}
4802						position++
4803						goto l603
4804					l606:
4805						position, tokenIndex = position603, tokenIndex603
4806						if buffer[position] != rune('q') {
4807							goto l607
4808						}
4809						position++
4810						goto l603
4811					l607:
4812						position, tokenIndex = position603, tokenIndex603
4813						if buffer[position] != rune('s') {
4814							goto l602
4815						}
4816						position++
4817					}
4818				l603:
4819					if c := buffer[position]; c < rune('0') || c > rune('9') {
4820						goto l602
4821					}
4822					position++
4823					{
4824						position608, tokenIndex608 := position, tokenIndex
4825						if c := buffer[position]; c < rune('0') || c > rune('9') {
4826							goto l608
4827						}
4828						position++
4829						goto l609
4830					l608:
4831						position, tokenIndex = position608, tokenIndex608
4832					}
4833				l609:
4834					goto l596
4835				l602:
4836					position, tokenIndex = position596, tokenIndex596
4837					{
4838						position611, tokenIndex611 := position, tokenIndex
4839						if buffer[position] != rune('x') {
4840							goto l612
4841						}
4842						position++
4843						goto l611
4844					l612:
4845						position, tokenIndex = position611, tokenIndex611
4846						if buffer[position] != rune('X') {
4847							goto l610
4848						}
4849						position++
4850					}
4851				l611:
4852					{
4853						position613, tokenIndex613 := position, tokenIndex
4854						if buffer[position] != rune('z') {
4855							goto l614
4856						}
4857						position++
4858						goto l613
4859					l614:
4860						position, tokenIndex = position613, tokenIndex613
4861						if buffer[position] != rune('Z') {
4862							goto l610
4863						}
4864						position++
4865					}
4866				l613:
4867					{
4868						position615, tokenIndex615 := position, tokenIndex
4869						if buffer[position] != rune('r') {
4870							goto l616
4871						}
4872						position++
4873						goto l615
4874					l616:
4875						position, tokenIndex = position615, tokenIndex615
4876						if buffer[position] != rune('R') {
4877							goto l610
4878						}
4879						position++
4880					}
4881				l615:
4882					goto l596
4883				l610:
4884					position, tokenIndex = position596, tokenIndex596
4885					{
4886						position618, tokenIndex618 := position, tokenIndex
4887						if buffer[position] != rune('w') {
4888							goto l619
4889						}
4890						position++
4891						goto l618
4892					l619:
4893						position, tokenIndex = position618, tokenIndex618
4894						if buffer[position] != rune('W') {
4895							goto l617
4896						}
4897						position++
4898					}
4899				l618:
4900					{
4901						position620, tokenIndex620 := position, tokenIndex
4902						if buffer[position] != rune('z') {
4903							goto l621
4904						}
4905						position++
4906						goto l620
4907					l621:
4908						position, tokenIndex = position620, tokenIndex620
4909						if buffer[position] != rune('Z') {
4910							goto l617
4911						}
4912						position++
4913					}
4914				l620:
4915					{
4916						position622, tokenIndex622 := position, tokenIndex
4917						if buffer[position] != rune('r') {
4918							goto l623
4919						}
4920						position++
4921						goto l622
4922					l623:
4923						position, tokenIndex = position622, tokenIndex622
4924						if buffer[position] != rune('R') {
4925							goto l617
4926						}
4927						position++
4928					}
4929				l622:
4930					goto l596
4931				l617:
4932					position, tokenIndex = position596, tokenIndex596
4933					if !_rules[ruleARMVectorRegister]() {
4934						goto l624
4935					}
4936					goto l596
4937				l624:
4938					position, tokenIndex = position596, tokenIndex596
4939					if buffer[position] != rune('{') {
4940						goto l594
4941					}
4942					position++
4943					{
4944						position625, tokenIndex625 := position, tokenIndex
4945						if !_rules[ruleWS]() {
4946							goto l625
4947						}
4948						goto l626
4949					l625:
4950						position, tokenIndex = position625, tokenIndex625
4951					}
4952				l626:
4953					if !_rules[ruleARMVectorRegister]() {
4954						goto l594
4955					}
4956				l627:
4957					{
4958						position628, tokenIndex628 := position, tokenIndex
4959						if buffer[position] != rune(',') {
4960							goto l628
4961						}
4962						position++
4963						{
4964							position629, tokenIndex629 := position, tokenIndex
4965							if !_rules[ruleWS]() {
4966								goto l629
4967							}
4968							goto l630
4969						l629:
4970							position, tokenIndex = position629, tokenIndex629
4971						}
4972					l630:
4973						if !_rules[ruleARMVectorRegister]() {
4974							goto l628
4975						}
4976						goto l627
4977					l628:
4978						position, tokenIndex = position628, tokenIndex628
4979					}
4980					{
4981						position631, tokenIndex631 := position, tokenIndex
4982						if !_rules[ruleWS]() {
4983							goto l631
4984						}
4985						goto l632
4986					l631:
4987						position, tokenIndex = position631, tokenIndex631
4988					}
4989				l632:
4990					if buffer[position] != rune('}') {
4991						goto l594
4992					}
4993					position++
4994					{
4995						position633, tokenIndex633 := position, tokenIndex
4996						if buffer[position] != rune('[') {
4997							goto l633
4998						}
4999						position++
5000						if c := buffer[position]; c < rune('0') || c > rune('9') {
5001							goto l633
5002						}
5003						position++
5004						if buffer[position] != rune(']') {
5005							goto l633
5006						}
5007						position++
5008						goto l634
5009					l633:
5010						position, tokenIndex = position633, tokenIndex633
5011					}
5012				l634:
5013				}
5014			l596:
5015				add(ruleARMRegister, position595)
5016			}
5017			return true
5018		l594:
5019			position, tokenIndex = position594, tokenIndex594
5020			return false
5021		},
5022		/* 39 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
5023		func() bool {
5024			position635, tokenIndex635 := position, tokenIndex
5025			{
5026				position636 := position
5027				{
5028					position637, tokenIndex637 := position, tokenIndex
5029					if buffer[position] != rune('v') {
5030						goto l638
5031					}
5032					position++
5033					goto l637
5034				l638:
5035					position, tokenIndex = position637, tokenIndex637
5036					if buffer[position] != rune('V') {
5037						goto l635
5038					}
5039					position++
5040				}
5041			l637:
5042				if c := buffer[position]; c < rune('0') || c > rune('9') {
5043					goto l635
5044				}
5045				position++
5046				{
5047					position639, tokenIndex639 := position, tokenIndex
5048					if c := buffer[position]; c < rune('0') || c > rune('9') {
5049						goto l639
5050					}
5051					position++
5052					goto l640
5053				l639:
5054					position, tokenIndex = position639, tokenIndex639
5055				}
5056			l640:
5057				{
5058					position641, tokenIndex641 := position, tokenIndex
5059					if buffer[position] != rune('.') {
5060						goto l641
5061					}
5062					position++
5063				l643:
5064					{
5065						position644, tokenIndex644 := position, tokenIndex
5066						if c := buffer[position]; c < rune('0') || c > rune('9') {
5067							goto l644
5068						}
5069						position++
5070						goto l643
5071					l644:
5072						position, tokenIndex = position644, tokenIndex644
5073					}
5074					{
5075						position645, tokenIndex645 := position, tokenIndex
5076						if buffer[position] != rune('b') {
5077							goto l646
5078						}
5079						position++
5080						goto l645
5081					l646:
5082						position, tokenIndex = position645, tokenIndex645
5083						if buffer[position] != rune('s') {
5084							goto l647
5085						}
5086						position++
5087						goto l645
5088					l647:
5089						position, tokenIndex = position645, tokenIndex645
5090						if buffer[position] != rune('d') {
5091							goto l648
5092						}
5093						position++
5094						goto l645
5095					l648:
5096						position, tokenIndex = position645, tokenIndex645
5097						if buffer[position] != rune('h') {
5098							goto l649
5099						}
5100						position++
5101						goto l645
5102					l649:
5103						position, tokenIndex = position645, tokenIndex645
5104						if buffer[position] != rune('q') {
5105							goto l641
5106						}
5107						position++
5108					}
5109				l645:
5110					{
5111						position650, tokenIndex650 := position, tokenIndex
5112						if buffer[position] != rune('[') {
5113							goto l650
5114						}
5115						position++
5116						if c := buffer[position]; c < rune('0') || c > rune('9') {
5117							goto l650
5118						}
5119						position++
5120						{
5121							position652, tokenIndex652 := position, tokenIndex
5122							if c := buffer[position]; c < rune('0') || c > rune('9') {
5123								goto l652
5124							}
5125							position++
5126							goto l653
5127						l652:
5128							position, tokenIndex = position652, tokenIndex652
5129						}
5130					l653:
5131						if buffer[position] != rune(']') {
5132							goto l650
5133						}
5134						position++
5135						goto l651
5136					l650:
5137						position, tokenIndex = position650, tokenIndex650
5138					}
5139				l651:
5140					goto l642
5141				l641:
5142					position, tokenIndex = position641, tokenIndex641
5143				}
5144			l642:
5145				add(ruleARMVectorRegister, position636)
5146			}
5147			return true
5148		l635:
5149			position, tokenIndex = position635, tokenIndex635
5150			return false
5151		},
5152		/* 40 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
5153		func() bool {
5154			position654, tokenIndex654 := position, tokenIndex
5155			{
5156				position655 := position
5157				{
5158					position656, tokenIndex656 := position, tokenIndex
5159					if !_rules[ruleSymbolRef]() {
5160						goto l657
5161					}
5162					if !_rules[ruleBaseIndexScale]() {
5163						goto l657
5164					}
5165					goto l656
5166				l657:
5167					position, tokenIndex = position656, tokenIndex656
5168					if !_rules[ruleSymbolRef]() {
5169						goto l658
5170					}
5171					goto l656
5172				l658:
5173					position, tokenIndex = position656, tokenIndex656
5174					if !_rules[ruleLow12BitsSymbolRef]() {
5175						goto l659
5176					}
5177					goto l656
5178				l659:
5179					position, tokenIndex = position656, tokenIndex656
5180				l661:
5181					{
5182						position662, tokenIndex662 := position, tokenIndex
5183						if !_rules[ruleOffset]() {
5184							goto l662
5185						}
5186						goto l661
5187					l662:
5188						position, tokenIndex = position662, tokenIndex662
5189					}
5190					if !_rules[ruleBaseIndexScale]() {
5191						goto l660
5192					}
5193					goto l656
5194				l660:
5195					position, tokenIndex = position656, tokenIndex656
5196					if !_rules[ruleSegmentRegister]() {
5197						goto l663
5198					}
5199					if !_rules[ruleOffset]() {
5200						goto l663
5201					}
5202					if !_rules[ruleBaseIndexScale]() {
5203						goto l663
5204					}
5205					goto l656
5206				l663:
5207					position, tokenIndex = position656, tokenIndex656
5208					if !_rules[ruleSegmentRegister]() {
5209						goto l664
5210					}
5211					if !_rules[ruleBaseIndexScale]() {
5212						goto l664
5213					}
5214					goto l656
5215				l664:
5216					position, tokenIndex = position656, tokenIndex656
5217					if !_rules[ruleSegmentRegister]() {
5218						goto l665
5219					}
5220					if !_rules[ruleOffset]() {
5221						goto l665
5222					}
5223					goto l656
5224				l665:
5225					position, tokenIndex = position656, tokenIndex656
5226					if !_rules[ruleARMBaseIndexScale]() {
5227						goto l666
5228					}
5229					goto l656
5230				l666:
5231					position, tokenIndex = position656, tokenIndex656
5232					if !_rules[ruleBaseIndexScale]() {
5233						goto l654
5234					}
5235				}
5236			l656:
5237				add(ruleMemoryRef, position655)
5238			}
5239			return true
5240		l654:
5241			position, tokenIndex = position654, tokenIndex654
5242			return false
5243		},
5244		/* 41 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
5245		func() bool {
5246			position667, tokenIndex667 := position, tokenIndex
5247			{
5248				position668 := position
5249				{
5250					position669, tokenIndex669 := position, tokenIndex
5251				l671:
5252					{
5253						position672, tokenIndex672 := position, tokenIndex
5254						if !_rules[ruleOffset]() {
5255							goto l672
5256						}
5257						goto l671
5258					l672:
5259						position, tokenIndex = position672, tokenIndex672
5260					}
5261					if buffer[position] != rune('+') {
5262						goto l669
5263					}
5264					position++
5265					goto l670
5266				l669:
5267					position, tokenIndex = position669, tokenIndex669
5268				}
5269			l670:
5270				{
5271					position673, tokenIndex673 := position, tokenIndex
5272					if !_rules[ruleLocalSymbol]() {
5273						goto l674
5274					}
5275					goto l673
5276				l674:
5277					position, tokenIndex = position673, tokenIndex673
5278					if !_rules[ruleSymbolName]() {
5279						goto l667
5280					}
5281				}
5282			l673:
5283			l675:
5284				{
5285					position676, tokenIndex676 := position, tokenIndex
5286					if !_rules[ruleOffset]() {
5287						goto l676
5288					}
5289					goto l675
5290				l676:
5291					position, tokenIndex = position676, tokenIndex676
5292				}
5293				{
5294					position677, tokenIndex677 := position, tokenIndex
5295					if buffer[position] != rune('@') {
5296						goto l677
5297					}
5298					position++
5299					if !_rules[ruleSection]() {
5300						goto l677
5301					}
5302				l679:
5303					{
5304						position680, tokenIndex680 := position, tokenIndex
5305						if !_rules[ruleOffset]() {
5306							goto l680
5307						}
5308						goto l679
5309					l680:
5310						position, tokenIndex = position680, tokenIndex680
5311					}
5312					goto l678
5313				l677:
5314					position, tokenIndex = position677, tokenIndex677
5315				}
5316			l678:
5317				add(ruleSymbolRef, position668)
5318			}
5319			return true
5320		l667:
5321			position, tokenIndex = position667, tokenIndex667
5322			return false
5323		},
5324		/* 42 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
5325		func() bool {
5326			position681, tokenIndex681 := position, tokenIndex
5327			{
5328				position682 := position
5329				if buffer[position] != rune(':') {
5330					goto l681
5331				}
5332				position++
5333				{
5334					position683, tokenIndex683 := position, tokenIndex
5335					if buffer[position] != rune('l') {
5336						goto l684
5337					}
5338					position++
5339					goto l683
5340				l684:
5341					position, tokenIndex = position683, tokenIndex683
5342					if buffer[position] != rune('L') {
5343						goto l681
5344					}
5345					position++
5346				}
5347			l683:
5348				{
5349					position685, tokenIndex685 := position, tokenIndex
5350					if buffer[position] != rune('o') {
5351						goto l686
5352					}
5353					position++
5354					goto l685
5355				l686:
5356					position, tokenIndex = position685, tokenIndex685
5357					if buffer[position] != rune('O') {
5358						goto l681
5359					}
5360					position++
5361				}
5362			l685:
5363				if buffer[position] != rune('1') {
5364					goto l681
5365				}
5366				position++
5367				if buffer[position] != rune('2') {
5368					goto l681
5369				}
5370				position++
5371				if buffer[position] != rune(':') {
5372					goto l681
5373				}
5374				position++
5375				{
5376					position687, tokenIndex687 := position, tokenIndex
5377					if !_rules[ruleLocalSymbol]() {
5378						goto l688
5379					}
5380					goto l687
5381				l688:
5382					position, tokenIndex = position687, tokenIndex687
5383					if !_rules[ruleSymbolName]() {
5384						goto l681
5385					}
5386				}
5387			l687:
5388				{
5389					position689, tokenIndex689 := position, tokenIndex
5390					if !_rules[ruleOffset]() {
5391						goto l689
5392					}
5393					goto l690
5394				l689:
5395					position, tokenIndex = position689, tokenIndex689
5396				}
5397			l690:
5398				add(ruleLow12BitsSymbolRef, position682)
5399			}
5400			return true
5401		l681:
5402			position, tokenIndex = position681, tokenIndex681
5403			return false
5404		},
5405		/* 43 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset ('*' [0-9]+)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
5406		func() bool {
5407			position691, tokenIndex691 := position, tokenIndex
5408			{
5409				position692 := position
5410				if buffer[position] != rune('[') {
5411					goto l691
5412				}
5413				position++
5414				if !_rules[ruleARMRegister]() {
5415					goto l691
5416				}
5417				{
5418					position693, tokenIndex693 := position, tokenIndex
5419					if buffer[position] != rune(',') {
5420						goto l693
5421					}
5422					position++
5423					{
5424						position695, tokenIndex695 := position, tokenIndex
5425						if !_rules[ruleWS]() {
5426							goto l695
5427						}
5428						goto l696
5429					l695:
5430						position, tokenIndex = position695, tokenIndex695
5431					}
5432				l696:
5433					{
5434						position697, tokenIndex697 := position, tokenIndex
5435						if buffer[position] != rune('#') {
5436							goto l698
5437						}
5438						position++
5439						if !_rules[ruleOffset]() {
5440							goto l698
5441						}
5442						{
5443							position699, tokenIndex699 := position, tokenIndex
5444							if buffer[position] != rune('*') {
5445								goto l699
5446							}
5447							position++
5448							if c := buffer[position]; c < rune('0') || c > rune('9') {
5449								goto l699
5450							}
5451							position++
5452						l701:
5453							{
5454								position702, tokenIndex702 := position, tokenIndex
5455								if c := buffer[position]; c < rune('0') || c > rune('9') {
5456									goto l702
5457								}
5458								position++
5459								goto l701
5460							l702:
5461								position, tokenIndex = position702, tokenIndex702
5462							}
5463							goto l700
5464						l699:
5465							position, tokenIndex = position699, tokenIndex699
5466						}
5467					l700:
5468						goto l697
5469					l698:
5470						position, tokenIndex = position697, tokenIndex697
5471						if !_rules[ruleARMGOTLow12]() {
5472							goto l703
5473						}
5474						goto l697
5475					l703:
5476						position, tokenIndex = position697, tokenIndex697
5477						if !_rules[ruleLow12BitsSymbolRef]() {
5478							goto l704
5479						}
5480						goto l697
5481					l704:
5482						position, tokenIndex = position697, tokenIndex697
5483						if !_rules[ruleARMRegister]() {
5484							goto l693
5485						}
5486					}
5487				l697:
5488					{
5489						position705, tokenIndex705 := position, tokenIndex
5490						if buffer[position] != rune(',') {
5491							goto l705
5492						}
5493						position++
5494						{
5495							position707, tokenIndex707 := position, tokenIndex
5496							if !_rules[ruleWS]() {
5497								goto l707
5498							}
5499							goto l708
5500						l707:
5501							position, tokenIndex = position707, tokenIndex707
5502						}
5503					l708:
5504						if !_rules[ruleARMConstantTweak]() {
5505							goto l705
5506						}
5507						goto l706
5508					l705:
5509						position, tokenIndex = position705, tokenIndex705
5510					}
5511				l706:
5512					goto l694
5513				l693:
5514					position, tokenIndex = position693, tokenIndex693
5515				}
5516			l694:
5517				if buffer[position] != rune(']') {
5518					goto l691
5519				}
5520				position++
5521				{
5522					position709, tokenIndex709 := position, tokenIndex
5523					if !_rules[ruleARMPostincrement]() {
5524						goto l709
5525					}
5526					goto l710
5527				l709:
5528					position, tokenIndex = position709, tokenIndex709
5529				}
5530			l710:
5531				add(ruleARMBaseIndexScale, position692)
5532			}
5533			return true
5534		l691:
5535			position, tokenIndex = position691, tokenIndex691
5536			return false
5537		},
5538		/* 44 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
5539		func() bool {
5540			position711, tokenIndex711 := position, tokenIndex
5541			{
5542				position712 := position
5543				if buffer[position] != rune(':') {
5544					goto l711
5545				}
5546				position++
5547				{
5548					position713, tokenIndex713 := position, tokenIndex
5549					if buffer[position] != rune('g') {
5550						goto l714
5551					}
5552					position++
5553					goto l713
5554				l714:
5555					position, tokenIndex = position713, tokenIndex713
5556					if buffer[position] != rune('G') {
5557						goto l711
5558					}
5559					position++
5560				}
5561			l713:
5562				{
5563					position715, tokenIndex715 := position, tokenIndex
5564					if buffer[position] != rune('o') {
5565						goto l716
5566					}
5567					position++
5568					goto l715
5569				l716:
5570					position, tokenIndex = position715, tokenIndex715
5571					if buffer[position] != rune('O') {
5572						goto l711
5573					}
5574					position++
5575				}
5576			l715:
5577				{
5578					position717, tokenIndex717 := position, tokenIndex
5579					if buffer[position] != rune('t') {
5580						goto l718
5581					}
5582					position++
5583					goto l717
5584				l718:
5585					position, tokenIndex = position717, tokenIndex717
5586					if buffer[position] != rune('T') {
5587						goto l711
5588					}
5589					position++
5590				}
5591			l717:
5592				if buffer[position] != rune('_') {
5593					goto l711
5594				}
5595				position++
5596				{
5597					position719, tokenIndex719 := position, tokenIndex
5598					if buffer[position] != rune('l') {
5599						goto l720
5600					}
5601					position++
5602					goto l719
5603				l720:
5604					position, tokenIndex = position719, tokenIndex719
5605					if buffer[position] != rune('L') {
5606						goto l711
5607					}
5608					position++
5609				}
5610			l719:
5611				{
5612					position721, tokenIndex721 := position, tokenIndex
5613					if buffer[position] != rune('o') {
5614						goto l722
5615					}
5616					position++
5617					goto l721
5618				l722:
5619					position, tokenIndex = position721, tokenIndex721
5620					if buffer[position] != rune('O') {
5621						goto l711
5622					}
5623					position++
5624				}
5625			l721:
5626				if buffer[position] != rune('1') {
5627					goto l711
5628				}
5629				position++
5630				if buffer[position] != rune('2') {
5631					goto l711
5632				}
5633				position++
5634				if buffer[position] != rune(':') {
5635					goto l711
5636				}
5637				position++
5638				if !_rules[ruleSymbolName]() {
5639					goto l711
5640				}
5641				add(ruleARMGOTLow12, position712)
5642			}
5643			return true
5644		l711:
5645			position, tokenIndex = position711, tokenIndex711
5646			return false
5647		},
5648		/* 45 ARMPostincrement <- <'!'> */
5649		func() bool {
5650			position723, tokenIndex723 := position, tokenIndex
5651			{
5652				position724 := position
5653				if buffer[position] != rune('!') {
5654					goto l723
5655				}
5656				position++
5657				add(ruleARMPostincrement, position724)
5658			}
5659			return true
5660		l723:
5661			position, tokenIndex = position723, tokenIndex723
5662			return false
5663		},
5664		/* 46 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
5665		func() bool {
5666			position725, tokenIndex725 := position, tokenIndex
5667			{
5668				position726 := position
5669				if buffer[position] != rune('(') {
5670					goto l725
5671				}
5672				position++
5673				{
5674					position727, tokenIndex727 := position, tokenIndex
5675					if !_rules[ruleRegisterOrConstant]() {
5676						goto l727
5677					}
5678					goto l728
5679				l727:
5680					position, tokenIndex = position727, tokenIndex727
5681				}
5682			l728:
5683				{
5684					position729, tokenIndex729 := position, tokenIndex
5685					if !_rules[ruleWS]() {
5686						goto l729
5687					}
5688					goto l730
5689				l729:
5690					position, tokenIndex = position729, tokenIndex729
5691				}
5692			l730:
5693				{
5694					position731, tokenIndex731 := position, tokenIndex
5695					if buffer[position] != rune(',') {
5696						goto l731
5697					}
5698					position++
5699					{
5700						position733, tokenIndex733 := position, tokenIndex
5701						if !_rules[ruleWS]() {
5702							goto l733
5703						}
5704						goto l734
5705					l733:
5706						position, tokenIndex = position733, tokenIndex733
5707					}
5708				l734:
5709					if !_rules[ruleRegisterOrConstant]() {
5710						goto l731
5711					}
5712					{
5713						position735, tokenIndex735 := position, tokenIndex
5714						if !_rules[ruleWS]() {
5715							goto l735
5716						}
5717						goto l736
5718					l735:
5719						position, tokenIndex = position735, tokenIndex735
5720					}
5721				l736:
5722					{
5723						position737, tokenIndex737 := position, tokenIndex
5724						if buffer[position] != rune(',') {
5725							goto l737
5726						}
5727						position++
5728						if c := buffer[position]; c < rune('0') || c > rune('9') {
5729							goto l737
5730						}
5731						position++
5732					l739:
5733						{
5734							position740, tokenIndex740 := position, tokenIndex
5735							if c := buffer[position]; c < rune('0') || c > rune('9') {
5736								goto l740
5737							}
5738							position++
5739							goto l739
5740						l740:
5741							position, tokenIndex = position740, tokenIndex740
5742						}
5743						goto l738
5744					l737:
5745						position, tokenIndex = position737, tokenIndex737
5746					}
5747				l738:
5748					goto l732
5749				l731:
5750					position, tokenIndex = position731, tokenIndex731
5751				}
5752			l732:
5753				if buffer[position] != rune(')') {
5754					goto l725
5755				}
5756				position++
5757				add(ruleBaseIndexScale, position726)
5758			}
5759			return true
5760		l725:
5761			position, tokenIndex = position725, tokenIndex725
5762			return false
5763		},
5764		/* 47 Operator <- <('+' / '-')> */
5765		func() bool {
5766			position741, tokenIndex741 := position, tokenIndex
5767			{
5768				position742 := position
5769				{
5770					position743, tokenIndex743 := position, tokenIndex
5771					if buffer[position] != rune('+') {
5772						goto l744
5773					}
5774					position++
5775					goto l743
5776				l744:
5777					position, tokenIndex = position743, tokenIndex743
5778					if buffer[position] != rune('-') {
5779						goto l741
5780					}
5781					position++
5782				}
5783			l743:
5784				add(ruleOperator, position742)
5785			}
5786			return true
5787		l741:
5788			position, tokenIndex = position741, tokenIndex741
5789			return false
5790		},
5791		/* 48 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
5792		func() bool {
5793			position745, tokenIndex745 := position, tokenIndex
5794			{
5795				position746 := position
5796				{
5797					position747, tokenIndex747 := position, tokenIndex
5798					if buffer[position] != rune('+') {
5799						goto l747
5800					}
5801					position++
5802					goto l748
5803				l747:
5804					position, tokenIndex = position747, tokenIndex747
5805				}
5806			l748:
5807				{
5808					position749, tokenIndex749 := position, tokenIndex
5809					if buffer[position] != rune('-') {
5810						goto l749
5811					}
5812					position++
5813					goto l750
5814				l749:
5815					position, tokenIndex = position749, tokenIndex749
5816				}
5817			l750:
5818				{
5819					position751, tokenIndex751 := position, tokenIndex
5820					if buffer[position] != rune('0') {
5821						goto l752
5822					}
5823					position++
5824					{
5825						position753, tokenIndex753 := position, tokenIndex
5826						if buffer[position] != rune('b') {
5827							goto l754
5828						}
5829						position++
5830						goto l753
5831					l754:
5832						position, tokenIndex = position753, tokenIndex753
5833						if buffer[position] != rune('B') {
5834							goto l752
5835						}
5836						position++
5837					}
5838				l753:
5839					{
5840						position757, tokenIndex757 := position, tokenIndex
5841						if buffer[position] != rune('0') {
5842							goto l758
5843						}
5844						position++
5845						goto l757
5846					l758:
5847						position, tokenIndex = position757, tokenIndex757
5848						if buffer[position] != rune('1') {
5849							goto l752
5850						}
5851						position++
5852					}
5853				l757:
5854				l755:
5855					{
5856						position756, tokenIndex756 := position, tokenIndex
5857						{
5858							position759, tokenIndex759 := position, tokenIndex
5859							if buffer[position] != rune('0') {
5860								goto l760
5861							}
5862							position++
5863							goto l759
5864						l760:
5865							position, tokenIndex = position759, tokenIndex759
5866							if buffer[position] != rune('1') {
5867								goto l756
5868							}
5869							position++
5870						}
5871					l759:
5872						goto l755
5873					l756:
5874						position, tokenIndex = position756, tokenIndex756
5875					}
5876					goto l751
5877				l752:
5878					position, tokenIndex = position751, tokenIndex751
5879					if buffer[position] != rune('0') {
5880						goto l761
5881					}
5882					position++
5883					{
5884						position762, tokenIndex762 := position, tokenIndex
5885						if buffer[position] != rune('x') {
5886							goto l763
5887						}
5888						position++
5889						goto l762
5890					l763:
5891						position, tokenIndex = position762, tokenIndex762
5892						if buffer[position] != rune('X') {
5893							goto l761
5894						}
5895						position++
5896					}
5897				l762:
5898					{
5899						position766, tokenIndex766 := position, tokenIndex
5900						if c := buffer[position]; c < rune('0') || c > rune('9') {
5901							goto l767
5902						}
5903						position++
5904						goto l766
5905					l767:
5906						position, tokenIndex = position766, tokenIndex766
5907						if c := buffer[position]; c < rune('0') || c > rune('9') {
5908							goto l768
5909						}
5910						position++
5911						goto l766
5912					l768:
5913						position, tokenIndex = position766, tokenIndex766
5914						{
5915							position769, tokenIndex769 := position, tokenIndex
5916							if c := buffer[position]; c < rune('a') || c > rune('f') {
5917								goto l770
5918							}
5919							position++
5920							goto l769
5921						l770:
5922							position, tokenIndex = position769, tokenIndex769
5923							if c := buffer[position]; c < rune('A') || c > rune('F') {
5924								goto l761
5925							}
5926							position++
5927						}
5928					l769:
5929					}
5930				l766:
5931				l764:
5932					{
5933						position765, tokenIndex765 := position, tokenIndex
5934						{
5935							position771, tokenIndex771 := position, tokenIndex
5936							if c := buffer[position]; c < rune('0') || c > rune('9') {
5937								goto l772
5938							}
5939							position++
5940							goto l771
5941						l772:
5942							position, tokenIndex = position771, tokenIndex771
5943							if c := buffer[position]; c < rune('0') || c > rune('9') {
5944								goto l773
5945							}
5946							position++
5947							goto l771
5948						l773:
5949							position, tokenIndex = position771, tokenIndex771
5950							{
5951								position774, tokenIndex774 := position, tokenIndex
5952								if c := buffer[position]; c < rune('a') || c > rune('f') {
5953									goto l775
5954								}
5955								position++
5956								goto l774
5957							l775:
5958								position, tokenIndex = position774, tokenIndex774
5959								if c := buffer[position]; c < rune('A') || c > rune('F') {
5960									goto l765
5961								}
5962								position++
5963							}
5964						l774:
5965						}
5966					l771:
5967						goto l764
5968					l765:
5969						position, tokenIndex = position765, tokenIndex765
5970					}
5971					goto l751
5972				l761:
5973					position, tokenIndex = position751, tokenIndex751
5974					if c := buffer[position]; c < rune('0') || c > rune('9') {
5975						goto l745
5976					}
5977					position++
5978				l776:
5979					{
5980						position777, tokenIndex777 := position, tokenIndex
5981						if c := buffer[position]; c < rune('0') || c > rune('9') {
5982							goto l777
5983						}
5984						position++
5985						goto l776
5986					l777:
5987						position, tokenIndex = position777, tokenIndex777
5988					}
5989				}
5990			l751:
5991				add(ruleOffset, position746)
5992			}
5993			return true
5994		l745:
5995			position, tokenIndex = position745, tokenIndex745
5996			return false
5997		},
5998		/* 49 Section <- <([a-z] / [A-Z] / '@')+> */
5999		func() bool {
6000			position778, tokenIndex778 := position, tokenIndex
6001			{
6002				position779 := position
6003				{
6004					position782, tokenIndex782 := position, tokenIndex
6005					if c := buffer[position]; c < rune('a') || c > rune('z') {
6006						goto l783
6007					}
6008					position++
6009					goto l782
6010				l783:
6011					position, tokenIndex = position782, tokenIndex782
6012					if c := buffer[position]; c < rune('A') || c > rune('Z') {
6013						goto l784
6014					}
6015					position++
6016					goto l782
6017				l784:
6018					position, tokenIndex = position782, tokenIndex782
6019					if buffer[position] != rune('@') {
6020						goto l778
6021					}
6022					position++
6023				}
6024			l782:
6025			l780:
6026				{
6027					position781, tokenIndex781 := position, tokenIndex
6028					{
6029						position785, tokenIndex785 := position, tokenIndex
6030						if c := buffer[position]; c < rune('a') || c > rune('z') {
6031							goto l786
6032						}
6033						position++
6034						goto l785
6035					l786:
6036						position, tokenIndex = position785, tokenIndex785
6037						if c := buffer[position]; c < rune('A') || c > rune('Z') {
6038							goto l787
6039						}
6040						position++
6041						goto l785
6042					l787:
6043						position, tokenIndex = position785, tokenIndex785
6044						if buffer[position] != rune('@') {
6045							goto l781
6046						}
6047						position++
6048					}
6049				l785:
6050					goto l780
6051				l781:
6052					position, tokenIndex = position781, tokenIndex781
6053				}
6054				add(ruleSection, position779)
6055			}
6056			return true
6057		l778:
6058			position, tokenIndex = position778, tokenIndex778
6059			return false
6060		},
6061		/* 50 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
6062		func() bool {
6063			position788, tokenIndex788 := position, tokenIndex
6064			{
6065				position789 := position
6066				if buffer[position] != rune('%') {
6067					goto l788
6068				}
6069				position++
6070				{
6071					position790, tokenIndex790 := position, tokenIndex
6072					if c := buffer[position]; c < rune('c') || c > rune('g') {
6073						goto l791
6074					}
6075					position++
6076					goto l790
6077				l791:
6078					position, tokenIndex = position790, tokenIndex790
6079					if buffer[position] != rune('s') {
6080						goto l788
6081					}
6082					position++
6083				}
6084			l790:
6085				if buffer[position] != rune('s') {
6086					goto l788
6087				}
6088				position++
6089				if buffer[position] != rune(':') {
6090					goto l788
6091				}
6092				position++
6093				add(ruleSegmentRegister, position789)
6094			}
6095			return true
6096		l788:
6097			position, tokenIndex = position788, tokenIndex788
6098			return false
6099		},
6100	}
6101	p.rules = _rules
6102}
6103