From 9afe966b5bafddbf9d9a44c953380ade132bf7fb Mon Sep 17 00:00:00 2001 From: Torben Hansen <50673096+torben-hansen@users.noreply.github.com> Date: Tue, 27 Aug 2024 08:31:21 -0700 Subject: [PATCH 1/3] Add boundary condition to arm register rule --- util/fipstools/delocate/delocate.peg | 3 +- util/fipstools/delocate/delocate.peg.go | 2178 ++++++++++++----------- 2 files changed, 1117 insertions(+), 1064 deletions(-) diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg index 45984d67d1..14f9200d05 100644 --- a/util/fipstools/delocate/delocate.peg +++ b/util/fipstools/delocate/delocate.peg @@ -88,10 +88,11 @@ RegisterOrConstant <- (('%'[[A-Z]][[A-Z0-9]]*) / ![fb:(+\-] ARMConstantTweak <- ((([us] "xt" [xwhb]) / "lsl" / "lsr" / "ror" / "asr") (WS '#'? Offset)?)/ "mul vl" # multiply offset by the hardware's vector length -ARMRegister <- "sp" / ([xwdqshb] [0-9] [0-9]?) / "xzr" / "wzr" / "NZCV" / ARMVectorRegister / SVE2PredicateRegister / +ARMRegister <- "sp" / ([xwdqshb] [0-9] [0-9]? !(ARMRegisterBoundary)) / "xzr" / "wzr" / "NZCV" / ARMVectorRegister / SVE2PredicateRegister / ('{' WS? ARMVectorRegister WS? ([,\-] WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')? ) ARMVectorRegister <- [vz] [0-9] [0-9]? ('.' [0-9]* [bsdhq] ('[' [0-9] [0-9]? ']')? )? SVE2PredicateRegister <- "p" [0-9] [0-9]? "/" [mMzZ] +ARMRegisterBoundary <- [a-zA-Z0-9_] # Compilers only output a very limited number of expression forms. Rather than # implement a full expression parser, this enumerate those forms plus a few # that appear in our hand-written assembly. diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go index f20936ea08..c37a68c5f4 100644 --- a/util/fipstools/delocate/delocate.peg.go +++ b/util/fipstools/delocate/delocate.peg.go @@ -1,6 +1,6 @@ package main -// Code generated by /Users/smittals/go/bin/peg /Users/smittals/Desktop/aws-lc/util/fipstools/delocate/delocate.peg DO NOT EDIT. +// Code generated by /Users/htorben/go/bin/peg delocate.peg DO NOT EDIT. import ( "fmt" @@ -65,6 +65,7 @@ const ( ruleARMRegister ruleARMVectorRegister ruleSVE2PredicateRegister + ruleARMRegisterBoundary ruleMemoryRef ruleSymbolRef ruleLow12BitsSymbolRef @@ -128,6 +129,7 @@ var rul3s = [...]string{ "ARMRegister", "ARMVectorRegister", "SVE2PredicateRegister", + "ARMRegisterBoundary", "MemoryRef", "SymbolRef", "Low12BitsSymbolRef", @@ -254,7 +256,7 @@ func (t *tokens32) Tokens() []token32 { type Asm struct { Buffer string buffer []rune - rules [60]func() bool + rules [61]func() bool parse func(rule ...int) error reset func() Pretty bool @@ -5461,7 +5463,7 @@ func (p *Asm) Init(options ...func(*Asm) error) error { position, tokenIndex = position631, tokenIndex631 return false }, - /* 44 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / SVE2PredicateRegister / ('{' WS? ARMVectorRegister WS? ((',' / '-') WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */ + /* 44 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]? !ARMRegisterBoundary) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / SVE2PredicateRegister / ('{' WS? ARMVectorRegister WS? ((',' / '-') WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */ func() bool { position688, tokenIndex688 := position, tokenIndex { @@ -5566,286 +5568,295 @@ func (p *Asm) Init(options ...func(*Asm) error) error { position, tokenIndex = position704, tokenIndex704 } l705: + { + position706, tokenIndex706 := position, tokenIndex + if !_rules[ruleARMRegisterBoundary]() { + goto l706 + } + goto l696 + l706: + position, tokenIndex = position706, tokenIndex706 + } goto l690 l696: position, tokenIndex = position690, tokenIndex690 { - position707, tokenIndex707 := position, tokenIndex + position708, tokenIndex708 := position, tokenIndex if buffer[position] != rune('x') { - goto l708 + goto l709 } position++ - goto l707 - l708: - position, tokenIndex = position707, tokenIndex707 + goto l708 + l709: + position, tokenIndex = position708, tokenIndex708 if buffer[position] != rune('X') { - goto l706 + goto l707 } position++ } - l707: + l708: { - position709, tokenIndex709 := position, tokenIndex + position710, tokenIndex710 := position, tokenIndex if buffer[position] != rune('z') { - goto l710 + goto l711 } position++ - goto l709 - l710: - position, tokenIndex = position709, tokenIndex709 + goto l710 + l711: + position, tokenIndex = position710, tokenIndex710 if buffer[position] != rune('Z') { - goto l706 + goto l707 } position++ } - l709: + l710: { - position711, tokenIndex711 := position, tokenIndex + position712, tokenIndex712 := position, tokenIndex if buffer[position] != rune('r') { - goto l712 + goto l713 } position++ - goto l711 - l712: - position, tokenIndex = position711, tokenIndex711 + goto l712 + l713: + position, tokenIndex = position712, tokenIndex712 if buffer[position] != rune('R') { - goto l706 + goto l707 } position++ } - l711: + l712: goto l690 - l706: + l707: position, tokenIndex = position690, tokenIndex690 { - position714, tokenIndex714 := position, tokenIndex + position715, tokenIndex715 := position, tokenIndex if buffer[position] != rune('w') { - goto l715 + goto l716 } position++ - goto l714 - l715: - position, tokenIndex = position714, tokenIndex714 + goto l715 + l716: + position, tokenIndex = position715, tokenIndex715 if buffer[position] != rune('W') { - goto l713 + goto l714 } position++ } - l714: + l715: { - position716, tokenIndex716 := position, tokenIndex + position717, tokenIndex717 := position, tokenIndex if buffer[position] != rune('z') { - goto l717 + goto l718 } position++ - goto l716 - l717: - position, tokenIndex = position716, tokenIndex716 + goto l717 + l718: + position, tokenIndex = position717, tokenIndex717 if buffer[position] != rune('Z') { - goto l713 + goto l714 } position++ } - l716: + l717: { - position718, tokenIndex718 := position, tokenIndex + position719, tokenIndex719 := position, tokenIndex if buffer[position] != rune('r') { - goto l719 + goto l720 } position++ - goto l718 - l719: - position, tokenIndex = position718, tokenIndex718 + goto l719 + l720: + position, tokenIndex = position719, tokenIndex719 if buffer[position] != rune('R') { - goto l713 + goto l714 } position++ } - l718: + l719: goto l690 - l713: + l714: position, tokenIndex = position690, tokenIndex690 { - position721, tokenIndex721 := position, tokenIndex + position722, tokenIndex722 := position, tokenIndex if buffer[position] != rune('n') { - goto l722 + goto l723 } position++ - goto l721 - l722: - position, tokenIndex = position721, tokenIndex721 + goto l722 + l723: + position, tokenIndex = position722, tokenIndex722 if buffer[position] != rune('N') { - goto l720 + goto l721 } position++ } - l721: + l722: { - position723, tokenIndex723 := position, tokenIndex + position724, tokenIndex724 := position, tokenIndex if buffer[position] != rune('z') { - goto l724 + goto l725 } position++ - goto l723 - l724: - position, tokenIndex = position723, tokenIndex723 + goto l724 + l725: + position, tokenIndex = position724, tokenIndex724 if buffer[position] != rune('Z') { - goto l720 + goto l721 } position++ } - l723: + l724: { - position725, tokenIndex725 := position, tokenIndex + position726, tokenIndex726 := position, tokenIndex if buffer[position] != rune('c') { - goto l726 + goto l727 } position++ - goto l725 - l726: - position, tokenIndex = position725, tokenIndex725 + goto l726 + l727: + position, tokenIndex = position726, tokenIndex726 if buffer[position] != rune('C') { - goto l720 + goto l721 } position++ } - l725: + l726: { - position727, tokenIndex727 := position, tokenIndex + position728, tokenIndex728 := position, tokenIndex if buffer[position] != rune('v') { - goto l728 + goto l729 } position++ - goto l727 - l728: - position, tokenIndex = position727, tokenIndex727 + goto l728 + l729: + position, tokenIndex = position728, tokenIndex728 if buffer[position] != rune('V') { - goto l720 + goto l721 } position++ } - l727: + l728: goto l690 - l720: + l721: position, tokenIndex = position690, tokenIndex690 if !_rules[ruleARMVectorRegister]() { - goto l729 + goto l730 } goto l690 - l729: + l730: position, tokenIndex = position690, tokenIndex690 if !_rules[ruleSVE2PredicateRegister]() { - goto l730 + goto l731 } goto l690 - l730: + l731: position, tokenIndex = position690, tokenIndex690 if buffer[position] != rune('{') { goto l688 } position++ { - position731, tokenIndex731 := position, tokenIndex + position732, tokenIndex732 := position, tokenIndex if !_rules[ruleWS]() { - goto l731 + goto l732 } - goto l732 - l731: - position, tokenIndex = position731, tokenIndex731 + goto l733 + l732: + position, tokenIndex = position732, tokenIndex732 } - l732: + l733: if !_rules[ruleARMVectorRegister]() { goto l688 } { - position733, tokenIndex733 := position, tokenIndex + position734, tokenIndex734 := position, tokenIndex if !_rules[ruleWS]() { - goto l733 + goto l734 } - goto l734 - l733: - position, tokenIndex = position733, tokenIndex733 + goto l735 + l734: + position, tokenIndex = position734, tokenIndex734 } - l734: l735: + l736: { - position736, tokenIndex736 := position, tokenIndex + position737, tokenIndex737 := position, tokenIndex { - position737, tokenIndex737 := position, tokenIndex + position738, tokenIndex738 := position, tokenIndex if buffer[position] != rune(',') { - goto l738 + goto l739 } position++ - goto l737 - l738: - position, tokenIndex = position737, tokenIndex737 + goto l738 + l739: + position, tokenIndex = position738, tokenIndex738 if buffer[position] != rune('-') { - goto l736 + goto l737 } position++ } - l737: + l738: { - position739, tokenIndex739 := position, tokenIndex + position740, tokenIndex740 := position, tokenIndex if !_rules[ruleWS]() { - goto l739 + goto l740 } - goto l740 - l739: - position, tokenIndex = position739, tokenIndex739 + goto l741 + l740: + position, tokenIndex = position740, tokenIndex740 } - l740: + l741: if !_rules[ruleARMVectorRegister]() { - goto l736 + goto l737 } - goto l735 - l736: - position, tokenIndex = position736, tokenIndex736 + goto l736 + l737: + position, tokenIndex = position737, tokenIndex737 } { - position741, tokenIndex741 := position, tokenIndex + position742, tokenIndex742 := position, tokenIndex if !_rules[ruleWS]() { - goto l741 + goto l742 } - goto l742 - l741: - position, tokenIndex = position741, tokenIndex741 + goto l743 + l742: + position, tokenIndex = position742, tokenIndex742 } - l742: + l743: if buffer[position] != rune('}') { goto l688 } position++ { - position743, tokenIndex743 := position, tokenIndex + position744, tokenIndex744 := position, tokenIndex if buffer[position] != rune('[') { - goto l743 + goto l744 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l743 + goto l744 } position++ { - position745, tokenIndex745 := position, tokenIndex + position746, tokenIndex746 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l745 + goto l746 } position++ - goto l746 - l745: - position, tokenIndex = position745, tokenIndex745 + goto l747 + l746: + position, tokenIndex = position746, tokenIndex746 } - l746: + l747: if buffer[position] != rune(']') { - goto l743 + goto l744 } position++ - goto l744 - l743: - position, tokenIndex = position743, tokenIndex743 + goto l745 + l744: + position, tokenIndex = position744, tokenIndex744 } - l744: + l745: } l690: add(ruleARMRegister, position689) @@ -5857,1876 +5868,1917 @@ func (p *Asm) Init(options ...func(*Asm) error) error { }, /* 45 ARMVectorRegister <- <(('v' / 'z') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */ func() bool { - position747, tokenIndex747 := position, tokenIndex + position748, tokenIndex748 := position, tokenIndex { - position748 := position + position749 := position { - position749, tokenIndex749 := position, tokenIndex + position750, tokenIndex750 := position, tokenIndex if buffer[position] != rune('v') { - goto l750 + goto l751 } position++ - goto l749 - l750: - position, tokenIndex = position749, tokenIndex749 + goto l750 + l751: + position, tokenIndex = position750, tokenIndex750 if buffer[position] != rune('z') { - goto l747 + goto l748 } position++ } - l749: + l750: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l747 + goto l748 } position++ { - position751, tokenIndex751 := position, tokenIndex + position752, tokenIndex752 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l751 + goto l752 } position++ - goto l752 - l751: - position, tokenIndex = position751, tokenIndex751 + goto l753 + l752: + position, tokenIndex = position752, tokenIndex752 } - l752: + l753: { - position753, tokenIndex753 := position, tokenIndex + position754, tokenIndex754 := position, tokenIndex if buffer[position] != rune('.') { - goto l753 + goto l754 } position++ - l755: + l756: { - position756, tokenIndex756 := position, tokenIndex + position757, tokenIndex757 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l756 + goto l757 } position++ - goto l755 - l756: - position, tokenIndex = position756, tokenIndex756 + goto l756 + l757: + position, tokenIndex = position757, tokenIndex757 } { - position757, tokenIndex757 := position, tokenIndex + position758, tokenIndex758 := position, tokenIndex if buffer[position] != rune('b') { - goto l758 - } - position++ - goto l757 - l758: - position, tokenIndex = position757, tokenIndex757 - if buffer[position] != rune('s') { goto l759 } position++ - goto l757 + goto l758 l759: - position, tokenIndex = position757, tokenIndex757 - if buffer[position] != rune('d') { + position, tokenIndex = position758, tokenIndex758 + if buffer[position] != rune('s') { goto l760 } position++ - goto l757 + goto l758 l760: - position, tokenIndex = position757, tokenIndex757 - if buffer[position] != rune('h') { + position, tokenIndex = position758, tokenIndex758 + if buffer[position] != rune('d') { goto l761 } position++ - goto l757 + goto l758 l761: - position, tokenIndex = position757, tokenIndex757 + position, tokenIndex = position758, tokenIndex758 + if buffer[position] != rune('h') { + goto l762 + } + position++ + goto l758 + l762: + position, tokenIndex = position758, tokenIndex758 if buffer[position] != rune('q') { - goto l753 + goto l754 } position++ } - l757: + l758: { - position762, tokenIndex762 := position, tokenIndex + position763, tokenIndex763 := position, tokenIndex if buffer[position] != rune('[') { - goto l762 + goto l763 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l762 + goto l763 } position++ { - position764, tokenIndex764 := position, tokenIndex + position765, tokenIndex765 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l764 + goto l765 } position++ - goto l765 - l764: - position, tokenIndex = position764, tokenIndex764 + goto l766 + l765: + position, tokenIndex = position765, tokenIndex765 } - l765: + l766: if buffer[position] != rune(']') { - goto l762 + goto l763 } position++ - goto l763 - l762: - position, tokenIndex = position762, tokenIndex762 + goto l764 + l763: + position, tokenIndex = position763, tokenIndex763 } - l763: - goto l754 - l753: - position, tokenIndex = position753, tokenIndex753 + l764: + goto l755 + l754: + position, tokenIndex = position754, tokenIndex754 } - l754: - add(ruleARMVectorRegister, position748) + l755: + add(ruleARMVectorRegister, position749) } return true - l747: - position, tokenIndex = position747, tokenIndex747 + l748: + position, tokenIndex = position748, tokenIndex748 return false }, /* 46 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / 'z' / 'Z'))> */ func() bool { - position766, tokenIndex766 := position, tokenIndex + position767, tokenIndex767 := position, tokenIndex { - position767 := position + position768 := position { - position768, tokenIndex768 := position, tokenIndex + position769, tokenIndex769 := position, tokenIndex if buffer[position] != rune('p') { - goto l769 + goto l770 } position++ - goto l768 - l769: - position, tokenIndex = position768, tokenIndex768 + goto l769 + l770: + position, tokenIndex = position769, tokenIndex769 if buffer[position] != rune('P') { - goto l766 + goto l767 } position++ } - l768: + l769: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l766 + goto l767 } position++ { - position770, tokenIndex770 := position, tokenIndex + position771, tokenIndex771 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l770 + goto l771 } position++ - goto l771 - l770: - position, tokenIndex = position770, tokenIndex770 + goto l772 + l771: + position, tokenIndex = position771, tokenIndex771 } - l771: + l772: if buffer[position] != rune('/') { - goto l766 + goto l767 } position++ { - position772, tokenIndex772 := position, tokenIndex + position773, tokenIndex773 := position, tokenIndex if buffer[position] != rune('m') { - goto l773 - } - position++ - goto l772 - l773: - position, tokenIndex = position772, tokenIndex772 - if buffer[position] != rune('M') { goto l774 } position++ - goto l772 + goto l773 l774: - position, tokenIndex = position772, tokenIndex772 - if buffer[position] != rune('z') { + position, tokenIndex = position773, tokenIndex773 + if buffer[position] != rune('M') { goto l775 } position++ - goto l772 + goto l773 l775: - position, tokenIndex = position772, tokenIndex772 + position, tokenIndex = position773, tokenIndex773 + if buffer[position] != rune('z') { + goto l776 + } + position++ + goto l773 + l776: + position, tokenIndex = position773, tokenIndex773 if buffer[position] != rune('Z') { - goto l766 + goto l767 } position++ } - l772: - add(ruleSVE2PredicateRegister, position767) + l773: + add(ruleSVE2PredicateRegister, position768) + } + return true + l767: + position, tokenIndex = position767, tokenIndex767 + return false + }, + /* 47 ARMRegisterBoundary <- <([a-z] / [A-Z] / [0-9] / '_')> */ + func() bool { + position777, tokenIndex777 := position, tokenIndex + { + position778 := position + { + position779, tokenIndex779 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l780 + } + position++ + goto l779 + l780: + position, tokenIndex = position779, tokenIndex779 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l781 + } + position++ + goto l779 + l781: + position, tokenIndex = position779, tokenIndex779 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l782 + } + position++ + goto l779 + l782: + position, tokenIndex = position779, tokenIndex779 + if buffer[position] != rune('_') { + goto l777 + } + position++ + } + l779: + add(ruleARMRegisterBoundary, position778) } return true - l766: - position, tokenIndex = position766, tokenIndex766 + l777: + position, tokenIndex = position777, tokenIndex777 return false }, - /* 47 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */ + /* 48 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */ func() bool { - position776, tokenIndex776 := position, tokenIndex + position783, tokenIndex783 := position, tokenIndex { - position777 := position + position784 := position { - position778, tokenIndex778 := position, tokenIndex + position785, tokenIndex785 := position, tokenIndex if !_rules[ruleSymbolRef]() { - goto l779 + goto l786 } if !_rules[ruleBaseIndexScale]() { - goto l779 + goto l786 } - goto l778 - l779: - position, tokenIndex = position778, tokenIndex778 + goto l785 + l786: + position, tokenIndex = position785, tokenIndex785 if !_rules[ruleSymbolRef]() { - goto l780 + goto l787 } - goto l778 - l780: - position, tokenIndex = position778, tokenIndex778 + goto l785 + l787: + position, tokenIndex = position785, tokenIndex785 if !_rules[ruleLow12BitsSymbolRef]() { - goto l781 + goto l788 } - goto l778 - l781: - position, tokenIndex = position778, tokenIndex778 - l783: + goto l785 + l788: + position, tokenIndex = position785, tokenIndex785 + l790: { - position784, tokenIndex784 := position, tokenIndex + position791, tokenIndex791 := position, tokenIndex if !_rules[ruleOffset]() { - goto l784 + goto l791 } - goto l783 - l784: - position, tokenIndex = position784, tokenIndex784 + goto l790 + l791: + position, tokenIndex = position791, tokenIndex791 } if !_rules[ruleBaseIndexScale]() { - goto l782 + goto l789 } - goto l778 - l782: - position, tokenIndex = position778, tokenIndex778 + goto l785 + l789: + position, tokenIndex = position785, tokenIndex785 if !_rules[ruleSegmentRegister]() { - goto l785 + goto l792 } if !_rules[ruleOffset]() { - goto l785 + goto l792 } if !_rules[ruleBaseIndexScale]() { - goto l785 + goto l792 } - goto l778 - l785: - position, tokenIndex = position778, tokenIndex778 + goto l785 + l792: + position, tokenIndex = position785, tokenIndex785 if !_rules[ruleSegmentRegister]() { - goto l786 + goto l793 } if !_rules[ruleBaseIndexScale]() { - goto l786 + goto l793 } - goto l778 - l786: - position, tokenIndex = position778, tokenIndex778 + goto l785 + l793: + position, tokenIndex = position785, tokenIndex785 if !_rules[ruleSegmentRegister]() { - goto l787 + goto l794 } if !_rules[ruleOffset]() { - goto l787 + goto l794 } - goto l778 - l787: - position, tokenIndex = position778, tokenIndex778 + goto l785 + l794: + position, tokenIndex = position785, tokenIndex785 if !_rules[ruleARMBaseIndexScale]() { - goto l788 + goto l795 } - goto l778 - l788: - position, tokenIndex = position778, tokenIndex778 + goto l785 + l795: + position, tokenIndex = position785, tokenIndex785 if !_rules[ruleBaseIndexScale]() { - goto l776 + goto l783 } } - l778: - add(ruleMemoryRef, position777) + l785: + add(ruleMemoryRef, position784) } return true - l776: - position, tokenIndex = position776, tokenIndex776 + l783: + position, tokenIndex = position783, tokenIndex783 return false }, - /* 48 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ + /* 49 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ func() bool { - position789, tokenIndex789 := position, tokenIndex + position796, tokenIndex796 := position, tokenIndex { - position790 := position + position797 := position { - position791, tokenIndex791 := position, tokenIndex - l793: + position798, tokenIndex798 := position, tokenIndex + l800: { - position794, tokenIndex794 := position, tokenIndex + position801, tokenIndex801 := position, tokenIndex if !_rules[ruleOffset]() { - goto l794 + goto l801 } - goto l793 - l794: - position, tokenIndex = position794, tokenIndex794 + goto l800 + l801: + position, tokenIndex = position801, tokenIndex801 } if buffer[position] != rune('+') { - goto l791 + goto l798 } position++ - goto l792 - l791: - position, tokenIndex = position791, tokenIndex791 + goto l799 + l798: + position, tokenIndex = position798, tokenIndex798 } - l792: + l799: { - position795, tokenIndex795 := position, tokenIndex + position802, tokenIndex802 := position, tokenIndex if !_rules[ruleLocalSymbol]() { - goto l796 + goto l803 } - goto l795 - l796: - position, tokenIndex = position795, tokenIndex795 + goto l802 + l803: + position, tokenIndex = position802, tokenIndex802 if !_rules[ruleSymbolName]() { - goto l789 + goto l796 } } - l795: - l797: + l802: + l804: { - position798, tokenIndex798 := position, tokenIndex + position805, tokenIndex805 := position, tokenIndex if !_rules[ruleOffset]() { - goto l798 + goto l805 } - goto l797 - l798: - position, tokenIndex = position798, tokenIndex798 + goto l804 + l805: + position, tokenIndex = position805, tokenIndex805 } { - position799, tokenIndex799 := position, tokenIndex + position806, tokenIndex806 := position, tokenIndex if buffer[position] != rune('@') { - goto l799 + goto l806 } position++ if !_rules[ruleSection]() { - goto l799 + goto l806 } - l801: + l808: { - position802, tokenIndex802 := position, tokenIndex + position809, tokenIndex809 := position, tokenIndex if !_rules[ruleOffset]() { - goto l802 + goto l809 } - goto l801 - l802: - position, tokenIndex = position802, tokenIndex802 + goto l808 + l809: + position, tokenIndex = position809, tokenIndex809 } - goto l800 - l799: - position, tokenIndex = position799, tokenIndex799 + goto l807 + l806: + position, tokenIndex = position806, tokenIndex806 } - l800: - add(ruleSymbolRef, position790) + l807: + add(ruleSymbolRef, position797) } return true - l789: - position, tokenIndex = position789, tokenIndex789 + l796: + position, tokenIndex = position796, tokenIndex796 return false }, - /* 49 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */ + /* 50 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */ func() bool { - position803, tokenIndex803 := position, tokenIndex + position810, tokenIndex810 := position, tokenIndex { - position804 := position + position811 := position if buffer[position] != rune(':') { - goto l803 + goto l810 } position++ { - position805, tokenIndex805 := position, tokenIndex + position812, tokenIndex812 := position, tokenIndex if buffer[position] != rune('l') { - goto l806 + goto l813 } position++ - goto l805 - l806: - position, tokenIndex = position805, tokenIndex805 + goto l812 + l813: + position, tokenIndex = position812, tokenIndex812 if buffer[position] != rune('L') { - goto l803 + goto l810 } position++ } - l805: + l812: { - position807, tokenIndex807 := position, tokenIndex + position814, tokenIndex814 := position, tokenIndex if buffer[position] != rune('o') { - goto l808 + goto l815 } position++ - goto l807 - l808: - position, tokenIndex = position807, tokenIndex807 + goto l814 + l815: + position, tokenIndex = position814, tokenIndex814 if buffer[position] != rune('O') { - goto l803 + goto l810 } position++ } - l807: + l814: if buffer[position] != rune('1') { - goto l803 + goto l810 } position++ if buffer[position] != rune('2') { - goto l803 + goto l810 } position++ if buffer[position] != rune(':') { - goto l803 + goto l810 } position++ { - position809, tokenIndex809 := position, tokenIndex + position816, tokenIndex816 := position, tokenIndex if !_rules[ruleLocalSymbol]() { - goto l810 + goto l817 } - goto l809 - l810: - position, tokenIndex = position809, tokenIndex809 + goto l816 + l817: + position, tokenIndex = position816, tokenIndex816 if !_rules[ruleSymbolName]() { - goto l803 + goto l810 } } - l809: + l816: { - position811, tokenIndex811 := position, tokenIndex + position818, tokenIndex818 := position, tokenIndex if !_rules[ruleOffset]() { - goto l811 + goto l818 } - goto l812 - l811: - position, tokenIndex = position811, tokenIndex811 + goto l819 + l818: + position, tokenIndex = position818, tokenIndex818 } - l812: - add(ruleLow12BitsSymbolRef, position804) + l819: + add(ruleLow12BitsSymbolRef, position811) } return true - l803: - position, tokenIndex = position803, tokenIndex803 + l810: + position, tokenIndex = position810, tokenIndex810 return false }, - /* 50 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#'? Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ('#'? ARMGOTLow12) / ('#'? Low12BitsSymbolRef) / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */ + /* 51 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#'? Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ('#'? ARMGOTLow12) / ('#'? Low12BitsSymbolRef) / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */ func() bool { - position813, tokenIndex813 := position, tokenIndex + position820, tokenIndex820 := position, tokenIndex { - position814 := position + position821 := position if buffer[position] != rune('[') { - goto l813 + goto l820 } position++ if !_rules[ruleARMRegister]() { - goto l813 + goto l820 } { - position815, tokenIndex815 := position, tokenIndex + position822, tokenIndex822 := position, tokenIndex if buffer[position] != rune(',') { - goto l815 + goto l822 } position++ { - position817, tokenIndex817 := position, tokenIndex + position824, tokenIndex824 := position, tokenIndex if !_rules[ruleWS]() { - goto l817 + goto l824 } - goto l818 - l817: - position, tokenIndex = position817, tokenIndex817 + goto l825 + l824: + position, tokenIndex = position824, tokenIndex824 } - l818: + l825: { - position819, tokenIndex819 := position, tokenIndex + position826, tokenIndex826 := position, tokenIndex { - position821, tokenIndex821 := position, tokenIndex + position828, tokenIndex828 := position, tokenIndex if buffer[position] != rune('#') { - goto l821 + goto l828 } position++ - goto l822 - l821: - position, tokenIndex = position821, tokenIndex821 + goto l829 + l828: + position, tokenIndex = position828, tokenIndex828 } - l822: + l829: if !_rules[ruleOffset]() { - goto l820 + goto l827 } { - position823, tokenIndex823 := position, tokenIndex + position830, tokenIndex830 := position, tokenIndex { - position825, tokenIndex825 := position, tokenIndex + position832, tokenIndex832 := position, tokenIndex if buffer[position] != rune('*') { - goto l826 + goto l833 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l826 + goto l833 } position++ - l827: + l834: { - position828, tokenIndex828 := position, tokenIndex + position835, tokenIndex835 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l828 + goto l835 } position++ - goto l827 - l828: - position, tokenIndex = position828, tokenIndex828 + goto l834 + l835: + position, tokenIndex = position835, tokenIndex835 } - goto l825 - l826: - position, tokenIndex = position825, tokenIndex825 + goto l832 + l833: + position, tokenIndex = position832, tokenIndex832 if buffer[position] != rune('*') { - goto l829 + goto l836 } position++ if buffer[position] != rune('(') { - goto l829 + goto l836 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l829 + goto l836 } position++ - l830: + l837: { - position831, tokenIndex831 := position, tokenIndex + position838, tokenIndex838 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l831 + goto l838 } position++ - goto l830 - l831: - position, tokenIndex = position831, tokenIndex831 + goto l837 + l838: + position, tokenIndex = position838, tokenIndex838 } if !_rules[ruleOperator]() { - goto l829 + goto l836 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l829 + goto l836 } position++ - l832: + l839: { - position833, tokenIndex833 := position, tokenIndex + position840, tokenIndex840 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l833 + goto l840 } position++ - goto l832 - l833: - position, tokenIndex = position833, tokenIndex833 + goto l839 + l840: + position, tokenIndex = position840, tokenIndex840 } if buffer[position] != rune(')') { - goto l829 + goto l836 } position++ - goto l825 - l829: - position, tokenIndex = position825, tokenIndex825 - l834: + goto l832 + l836: + position, tokenIndex = position832, tokenIndex832 + l841: { - position835, tokenIndex835 := position, tokenIndex + position842, tokenIndex842 := position, tokenIndex if buffer[position] != rune('+') { - goto l835 + goto l842 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l835 + goto l842 } position++ - l836: + l843: { - position837, tokenIndex837 := position, tokenIndex + position844, tokenIndex844 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l837 + goto l844 } position++ - goto l836 - l837: - position, tokenIndex = position837, tokenIndex837 + goto l843 + l844: + position, tokenIndex = position844, tokenIndex844 } - goto l834 - l835: - position, tokenIndex = position835, tokenIndex835 + goto l841 + l842: + position, tokenIndex = position842, tokenIndex842 } } - l825: - goto l824 + l832: + goto l831 - position, tokenIndex = position823, tokenIndex823 + position, tokenIndex = position830, tokenIndex830 } - l824: - goto l819 - l820: - position, tokenIndex = position819, tokenIndex819 + l831: + goto l826 + l827: + position, tokenIndex = position826, tokenIndex826 { - position839, tokenIndex839 := position, tokenIndex + position846, tokenIndex846 := position, tokenIndex if buffer[position] != rune('#') { - goto l839 + goto l846 } position++ - goto l840 - l839: - position, tokenIndex = position839, tokenIndex839 + goto l847 + l846: + position, tokenIndex = position846, tokenIndex846 } - l840: + l847: if !_rules[ruleARMGOTLow12]() { - goto l838 + goto l845 } - goto l819 - l838: - position, tokenIndex = position819, tokenIndex819 + goto l826 + l845: + position, tokenIndex = position826, tokenIndex826 { - position842, tokenIndex842 := position, tokenIndex + position849, tokenIndex849 := position, tokenIndex if buffer[position] != rune('#') { - goto l842 + goto l849 } position++ - goto l843 - l842: - position, tokenIndex = position842, tokenIndex842 + goto l850 + l849: + position, tokenIndex = position849, tokenIndex849 } - l843: + l850: if !_rules[ruleLow12BitsSymbolRef]() { - goto l841 + goto l848 } - goto l819 - l841: - position, tokenIndex = position819, tokenIndex819 + goto l826 + l848: + position, tokenIndex = position826, tokenIndex826 if !_rules[ruleARMRegister]() { - goto l815 + goto l822 } } - l819: + l826: { - position844, tokenIndex844 := position, tokenIndex + position851, tokenIndex851 := position, tokenIndex if buffer[position] != rune(',') { - goto l844 + goto l851 } position++ { - position846, tokenIndex846 := position, tokenIndex + position853, tokenIndex853 := position, tokenIndex if !_rules[ruleWS]() { - goto l846 + goto l853 } - goto l847 - l846: - position, tokenIndex = position846, tokenIndex846 + goto l854 + l853: + position, tokenIndex = position853, tokenIndex853 } - l847: + l854: if !_rules[ruleARMConstantTweak]() { - goto l844 + goto l851 } - goto l845 - l844: - position, tokenIndex = position844, tokenIndex844 + goto l852 + l851: + position, tokenIndex = position851, tokenIndex851 } - l845: - goto l816 - l815: - position, tokenIndex = position815, tokenIndex815 + l852: + goto l823 + l822: + position, tokenIndex = position822, tokenIndex822 } - l816: + l823: if buffer[position] != rune(']') { - goto l813 + goto l820 } position++ { - position848, tokenIndex848 := position, tokenIndex + position855, tokenIndex855 := position, tokenIndex if !_rules[ruleARMPostincrement]() { - goto l848 + goto l855 } - goto l849 - l848: - position, tokenIndex = position848, tokenIndex848 + goto l856 + l855: + position, tokenIndex = position855, tokenIndex855 } - l849: - add(ruleARMBaseIndexScale, position814) + l856: + add(ruleARMBaseIndexScale, position821) } return true - l813: - position, tokenIndex = position813, tokenIndex813 + l820: + position, tokenIndex = position820, tokenIndex820 return false }, - /* 51 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */ + /* 52 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */ func() bool { - position850, tokenIndex850 := position, tokenIndex + position857, tokenIndex857 := position, tokenIndex { - position851 := position + position858 := position if buffer[position] != rune(':') { - goto l850 + goto l857 } position++ { - position852, tokenIndex852 := position, tokenIndex + position859, tokenIndex859 := position, tokenIndex if buffer[position] != rune('g') { - goto l853 + goto l860 } position++ - goto l852 - l853: - position, tokenIndex = position852, tokenIndex852 + goto l859 + l860: + position, tokenIndex = position859, tokenIndex859 if buffer[position] != rune('G') { - goto l850 + goto l857 } position++ } - l852: + l859: { - position854, tokenIndex854 := position, tokenIndex + position861, tokenIndex861 := position, tokenIndex if buffer[position] != rune('o') { - goto l855 + goto l862 } position++ - goto l854 - l855: - position, tokenIndex = position854, tokenIndex854 + goto l861 + l862: + position, tokenIndex = position861, tokenIndex861 if buffer[position] != rune('O') { - goto l850 + goto l857 } position++ } - l854: + l861: { - position856, tokenIndex856 := position, tokenIndex + position863, tokenIndex863 := position, tokenIndex if buffer[position] != rune('t') { - goto l857 + goto l864 } position++ - goto l856 - l857: - position, tokenIndex = position856, tokenIndex856 + goto l863 + l864: + position, tokenIndex = position863, tokenIndex863 if buffer[position] != rune('T') { - goto l850 + goto l857 } position++ } - l856: + l863: if buffer[position] != rune('_') { - goto l850 + goto l857 } position++ { - position858, tokenIndex858 := position, tokenIndex + position865, tokenIndex865 := position, tokenIndex if buffer[position] != rune('l') { - goto l859 + goto l866 } position++ - goto l858 - l859: - position, tokenIndex = position858, tokenIndex858 + goto l865 + l866: + position, tokenIndex = position865, tokenIndex865 if buffer[position] != rune('L') { - goto l850 + goto l857 } position++ } - l858: + l865: { - position860, tokenIndex860 := position, tokenIndex + position867, tokenIndex867 := position, tokenIndex if buffer[position] != rune('o') { - goto l861 + goto l868 } position++ - goto l860 - l861: - position, tokenIndex = position860, tokenIndex860 + goto l867 + l868: + position, tokenIndex = position867, tokenIndex867 if buffer[position] != rune('O') { - goto l850 + goto l857 } position++ } - l860: + l867: if buffer[position] != rune('1') { - goto l850 + goto l857 } position++ if buffer[position] != rune('2') { - goto l850 + goto l857 } position++ if buffer[position] != rune(':') { - goto l850 + goto l857 } position++ if !_rules[ruleSymbolName]() { - goto l850 + goto l857 } - add(ruleARMGOTLow12, position851) + add(ruleARMGOTLow12, position858) } return true - l850: - position, tokenIndex = position850, tokenIndex850 + l857: + position, tokenIndex = position857, tokenIndex857 return false }, - /* 52 ARMPostincrement <- <'!'> */ + /* 53 ARMPostincrement <- <'!'> */ func() bool { - position862, tokenIndex862 := position, tokenIndex + position869, tokenIndex869 := position, tokenIndex { - position863 := position + position870 := position if buffer[position] != rune('!') { - goto l862 + goto l869 } position++ - add(ruleARMPostincrement, position863) + add(ruleARMPostincrement, position870) } return true - l862: - position, tokenIndex = position862, tokenIndex862 + l869: + position, tokenIndex = position869, tokenIndex869 return false }, - /* 53 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ + /* 54 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ func() bool { - position864, tokenIndex864 := position, tokenIndex + position871, tokenIndex871 := position, tokenIndex { - position865 := position + position872 := position if buffer[position] != rune('(') { - goto l864 + goto l871 } position++ { - position866, tokenIndex866 := position, tokenIndex + position873, tokenIndex873 := position, tokenIndex if !_rules[ruleRegisterOrConstant]() { - goto l866 + goto l873 } - goto l867 - l866: - position, tokenIndex = position866, tokenIndex866 + goto l874 + l873: + position, tokenIndex = position873, tokenIndex873 } - l867: + l874: { - position868, tokenIndex868 := position, tokenIndex + position875, tokenIndex875 := position, tokenIndex if !_rules[ruleWS]() { - goto l868 + goto l875 } - goto l869 - l868: - position, tokenIndex = position868, tokenIndex868 + goto l876 + l875: + position, tokenIndex = position875, tokenIndex875 } - l869: + l876: { - position870, tokenIndex870 := position, tokenIndex + position877, tokenIndex877 := position, tokenIndex if buffer[position] != rune(',') { - goto l870 + goto l877 } position++ { - position872, tokenIndex872 := position, tokenIndex + position879, tokenIndex879 := position, tokenIndex if !_rules[ruleWS]() { - goto l872 + goto l879 } - goto l873 - l872: - position, tokenIndex = position872, tokenIndex872 + goto l880 + l879: + position, tokenIndex = position879, tokenIndex879 } - l873: + l880: if !_rules[ruleRegisterOrConstant]() { - goto l870 + goto l877 } { - position874, tokenIndex874 := position, tokenIndex + position881, tokenIndex881 := position, tokenIndex if !_rules[ruleWS]() { - goto l874 + goto l881 } - goto l875 - l874: - position, tokenIndex = position874, tokenIndex874 + goto l882 + l881: + position, tokenIndex = position881, tokenIndex881 } - l875: + l882: { - position876, tokenIndex876 := position, tokenIndex + position883, tokenIndex883 := position, tokenIndex if buffer[position] != rune(',') { - goto l876 + goto l883 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l876 + goto l883 } position++ - l878: + l885: { - position879, tokenIndex879 := position, tokenIndex + position886, tokenIndex886 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l879 + goto l886 } position++ - goto l878 - l879: - position, tokenIndex = position879, tokenIndex879 + goto l885 + l886: + position, tokenIndex = position886, tokenIndex886 } - goto l877 - l876: - position, tokenIndex = position876, tokenIndex876 + goto l884 + l883: + position, tokenIndex = position883, tokenIndex883 } + l884: + goto l878 l877: - goto l871 - l870: - position, tokenIndex = position870, tokenIndex870 + position, tokenIndex = position877, tokenIndex877 } - l871: + l878: if buffer[position] != rune(')') { - goto l864 + goto l871 } position++ - add(ruleBaseIndexScale, position865) + add(ruleBaseIndexScale, position872) } return true - l864: - position, tokenIndex = position864, tokenIndex864 + l871: + position, tokenIndex = position871, tokenIndex871 return false }, - /* 54 Operator <- <('+' / '-')> */ + /* 55 Operator <- <('+' / '-')> */ func() bool { - position880, tokenIndex880 := position, tokenIndex + position887, tokenIndex887 := position, tokenIndex { - position881 := position + position888 := position { - position882, tokenIndex882 := position, tokenIndex + position889, tokenIndex889 := position, tokenIndex if buffer[position] != rune('+') { - goto l883 + goto l890 } position++ - goto l882 - l883: - position, tokenIndex = position882, tokenIndex882 + goto l889 + l890: + position, tokenIndex = position889, tokenIndex889 if buffer[position] != rune('-') { - goto l880 + goto l887 } position++ } - l882: - add(ruleOperator, position881) + l889: + add(ruleOperator, position888) } return true - l880: - position, tokenIndex = position880, tokenIndex880 + l887: + position, tokenIndex = position887, tokenIndex887 return false }, - /* 55 OffsetOperator <- <('+' / '-' / '*')> */ + /* 56 OffsetOperator <- <('+' / '-' / '*')> */ func() bool { - position884, tokenIndex884 := position, tokenIndex + position891, tokenIndex891 := position, tokenIndex { - position885 := position + position892 := position { - position886, tokenIndex886 := position, tokenIndex + position893, tokenIndex893 := position, tokenIndex if buffer[position] != rune('+') { - goto l887 + goto l894 } position++ - goto l886 - l887: - position, tokenIndex = position886, tokenIndex886 + goto l893 + l894: + position, tokenIndex = position893, tokenIndex893 if buffer[position] != rune('-') { - goto l888 + goto l895 } position++ - goto l886 - l888: - position, tokenIndex = position886, tokenIndex886 + goto l893 + l895: + position, tokenIndex = position893, tokenIndex893 if buffer[position] != rune('*') { - goto l884 + goto l891 } position++ } - l886: - add(ruleOffsetOperator, position885) + l893: + add(ruleOffsetOperator, position892) } return true - l884: - position, tokenIndex = position884, tokenIndex884 + l891: + position, tokenIndex = position891, tokenIndex891 return false }, - /* 56 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / ((([0-9]+ WS OffsetOperator [0-9]+) / ([0-9]+ (OffsetOperator '(' [0-9]+ OffsetOperator [0-9]+ ')')?) / ([0-9]+ (OffsetOperator [0-9]+ OffsetOperator [0-9]+)?) / ([0-9]+ (OffsetOperator [0-9]+)?) / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ ')' OffsetOperator [0-9]+ OffsetOperator [0-9]+) / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ ')' OffsetOperator [0-9]+ !'x') / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ ')') / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ WS? OffsetOperator WS? [0-9]+ ')')) !([a-z] / [A-Z]))))> */ + /* 57 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / ((([0-9]+ WS OffsetOperator [0-9]+) / ([0-9]+ (OffsetOperator '(' [0-9]+ OffsetOperator [0-9]+ ')')?) / ([0-9]+ (OffsetOperator [0-9]+ OffsetOperator [0-9]+)?) / ([0-9]+ (OffsetOperator [0-9]+)?) / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ ')' OffsetOperator [0-9]+ OffsetOperator [0-9]+) / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ ')' OffsetOperator [0-9]+ !'x') / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ ')') / ('(' [0-9]+ WS? OffsetOperator WS? [0-9]+ WS? OffsetOperator WS? [0-9]+ ')')) !([a-z] / [A-Z]))))> */ func() bool { - position889, tokenIndex889 := position, tokenIndex + position896, tokenIndex896 := position, tokenIndex { - position890 := position + position897 := position { - position891, tokenIndex891 := position, tokenIndex + position898, tokenIndex898 := position, tokenIndex if buffer[position] != rune('+') { - goto l891 + goto l898 } position++ - goto l892 - l891: - position, tokenIndex = position891, tokenIndex891 + goto l899 + l898: + position, tokenIndex = position898, tokenIndex898 } - l892: + l899: { - position893, tokenIndex893 := position, tokenIndex + position900, tokenIndex900 := position, tokenIndex if buffer[position] != rune('-') { - goto l893 + goto l900 } position++ - goto l894 - l893: - position, tokenIndex = position893, tokenIndex893 + goto l901 + l900: + position, tokenIndex = position900, tokenIndex900 } - l894: + l901: { - position895, tokenIndex895 := position, tokenIndex + position902, tokenIndex902 := position, tokenIndex if buffer[position] != rune('0') { - goto l896 + goto l903 } position++ { - position897, tokenIndex897 := position, tokenIndex + position904, tokenIndex904 := position, tokenIndex if buffer[position] != rune('b') { - goto l898 + goto l905 } position++ - goto l897 - l898: - position, tokenIndex = position897, tokenIndex897 + goto l904 + l905: + position, tokenIndex = position904, tokenIndex904 if buffer[position] != rune('B') { - goto l896 + goto l903 } position++ } - l897: + l904: { - position901, tokenIndex901 := position, tokenIndex + position908, tokenIndex908 := position, tokenIndex if buffer[position] != rune('0') { - goto l902 + goto l909 } position++ - goto l901 - l902: - position, tokenIndex = position901, tokenIndex901 + goto l908 + l909: + position, tokenIndex = position908, tokenIndex908 if buffer[position] != rune('1') { - goto l896 + goto l903 } position++ } - l901: - l899: + l908: + l906: { - position900, tokenIndex900 := position, tokenIndex + position907, tokenIndex907 := position, tokenIndex { - position903, tokenIndex903 := position, tokenIndex + position910, tokenIndex910 := position, tokenIndex if buffer[position] != rune('0') { - goto l904 + goto l911 } position++ - goto l903 - l904: - position, tokenIndex = position903, tokenIndex903 + goto l910 + l911: + position, tokenIndex = position910, tokenIndex910 if buffer[position] != rune('1') { - goto l900 + goto l907 } position++ } - l903: - goto l899 - l900: - position, tokenIndex = position900, tokenIndex900 + l910: + goto l906 + l907: + position, tokenIndex = position907, tokenIndex907 } - goto l895 - l896: - position, tokenIndex = position895, tokenIndex895 + goto l902 + l903: + position, tokenIndex = position902, tokenIndex902 if buffer[position] != rune('0') { - goto l905 + goto l912 } position++ { - position906, tokenIndex906 := position, tokenIndex + position913, tokenIndex913 := position, tokenIndex if buffer[position] != rune('x') { - goto l907 + goto l914 } position++ - goto l906 - l907: - position, tokenIndex = position906, tokenIndex906 + goto l913 + l914: + position, tokenIndex = position913, tokenIndex913 if buffer[position] != rune('X') { - goto l905 + goto l912 } position++ } - l906: + l913: { - position910, tokenIndex910 := position, tokenIndex + position917, tokenIndex917 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l911 + goto l918 } position++ - goto l910 - l911: - position, tokenIndex = position910, tokenIndex910 + goto l917 + l918: + position, tokenIndex = position917, tokenIndex917 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l912 + goto l919 } position++ - goto l910 - l912: - position, tokenIndex = position910, tokenIndex910 + goto l917 + l919: + position, tokenIndex = position917, tokenIndex917 { - position913, tokenIndex913 := position, tokenIndex + position920, tokenIndex920 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l914 + goto l921 } position++ - goto l913 - l914: - position, tokenIndex = position913, tokenIndex913 + goto l920 + l921: + position, tokenIndex = position920, tokenIndex920 if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l905 + goto l912 } position++ } - l913: + l920: } - l910: - l908: + l917: + l915: { - position909, tokenIndex909 := position, tokenIndex + position916, tokenIndex916 := position, tokenIndex { - position915, tokenIndex915 := position, tokenIndex + position922, tokenIndex922 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l916 + goto l923 } position++ - goto l915 - l916: - position, tokenIndex = position915, tokenIndex915 + goto l922 + l923: + position, tokenIndex = position922, tokenIndex922 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l917 + goto l924 } position++ - goto l915 - l917: - position, tokenIndex = position915, tokenIndex915 + goto l922 + l924: + position, tokenIndex = position922, tokenIndex922 { - position918, tokenIndex918 := position, tokenIndex + position925, tokenIndex925 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l919 + goto l926 } position++ - goto l918 - l919: - position, tokenIndex = position918, tokenIndex918 + goto l925 + l926: + position, tokenIndex = position925, tokenIndex925 if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l909 + goto l916 } position++ } - l918: + l925: } - l915: - goto l908 - l909: - position, tokenIndex = position909, tokenIndex909 + l922: + goto l915 + l916: + position, tokenIndex = position916, tokenIndex916 } - goto l895 - l905: - position, tokenIndex = position895, tokenIndex895 + goto l902 + l912: + position, tokenIndex = position902, tokenIndex902 { - position920, tokenIndex920 := position, tokenIndex + position927, tokenIndex927 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l921 + goto l928 } position++ - l922: + l929: { - position923, tokenIndex923 := position, tokenIndex + position930, tokenIndex930 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l923 + goto l930 } position++ - goto l922 - l923: - position, tokenIndex = position923, tokenIndex923 + goto l929 + l930: + position, tokenIndex = position930, tokenIndex930 } if !_rules[ruleWS]() { - goto l921 + goto l928 } if !_rules[ruleOffsetOperator]() { - goto l921 + goto l928 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l921 + goto l928 } position++ - l924: + l931: { - position925, tokenIndex925 := position, tokenIndex + position932, tokenIndex932 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l925 + goto l932 } position++ - goto l924 - l925: - position, tokenIndex = position925, tokenIndex925 + goto l931 + l932: + position, tokenIndex = position932, tokenIndex932 } - goto l920 - l921: - position, tokenIndex = position920, tokenIndex920 + goto l927 + l928: + position, tokenIndex = position927, tokenIndex927 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l926 + goto l933 } position++ - l927: + l934: { - position928, tokenIndex928 := position, tokenIndex + position935, tokenIndex935 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l928 + goto l935 } position++ - goto l927 - l928: - position, tokenIndex = position928, tokenIndex928 + goto l934 + l935: + position, tokenIndex = position935, tokenIndex935 } { - position929, tokenIndex929 := position, tokenIndex + position936, tokenIndex936 := position, tokenIndex if !_rules[ruleOffsetOperator]() { - goto l929 + goto l936 } if buffer[position] != rune('(') { - goto l929 + goto l936 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l929 + goto l936 } position++ - l931: + l938: { - position932, tokenIndex932 := position, tokenIndex + position939, tokenIndex939 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l932 + goto l939 } position++ - goto l931 - l932: - position, tokenIndex = position932, tokenIndex932 + goto l938 + l939: + position, tokenIndex = position939, tokenIndex939 } if !_rules[ruleOffsetOperator]() { - goto l929 + goto l936 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l929 + goto l936 } position++ - l933: + l940: { - position934, tokenIndex934 := position, tokenIndex + position941, tokenIndex941 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l934 + goto l941 } position++ - goto l933 - l934: - position, tokenIndex = position934, tokenIndex934 + goto l940 + l941: + position, tokenIndex = position941, tokenIndex941 } if buffer[position] != rune(')') { - goto l929 + goto l936 } position++ - goto l930 - l929: - position, tokenIndex = position929, tokenIndex929 - } - l930: - goto l920 - l926: - position, tokenIndex = position920, tokenIndex920 + goto l937 + l936: + position, tokenIndex = position936, tokenIndex936 + } + l937: + goto l927 + l933: + position, tokenIndex = position927, tokenIndex927 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l935 + goto l942 } position++ - l936: + l943: { - position937, tokenIndex937 := position, tokenIndex + position944, tokenIndex944 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l937 + goto l944 } position++ - goto l936 - l937: - position, tokenIndex = position937, tokenIndex937 + goto l943 + l944: + position, tokenIndex = position944, tokenIndex944 } { - position938, tokenIndex938 := position, tokenIndex + position945, tokenIndex945 := position, tokenIndex if !_rules[ruleOffsetOperator]() { - goto l938 + goto l945 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l938 + goto l945 } position++ - l940: + l947: { - position941, tokenIndex941 := position, tokenIndex + position948, tokenIndex948 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l941 + goto l948 } position++ - goto l940 - l941: - position, tokenIndex = position941, tokenIndex941 + goto l947 + l948: + position, tokenIndex = position948, tokenIndex948 } if !_rules[ruleOffsetOperator]() { - goto l938 + goto l945 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l938 + goto l945 } position++ - l942: + l949: { - position943, tokenIndex943 := position, tokenIndex + position950, tokenIndex950 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l943 + goto l950 } position++ - goto l942 - l943: - position, tokenIndex = position943, tokenIndex943 + goto l949 + l950: + position, tokenIndex = position950, tokenIndex950 } - goto l939 - l938: - position, tokenIndex = position938, tokenIndex938 + goto l946 + l945: + position, tokenIndex = position945, tokenIndex945 } - l939: - goto l920 - l935: - position, tokenIndex = position920, tokenIndex920 + l946: + goto l927 + l942: + position, tokenIndex = position927, tokenIndex927 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l944 + goto l951 } position++ - l945: + l952: { - position946, tokenIndex946 := position, tokenIndex + position953, tokenIndex953 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l946 + goto l953 } position++ - goto l945 - l946: - position, tokenIndex = position946, tokenIndex946 + goto l952 + l953: + position, tokenIndex = position953, tokenIndex953 } { - position947, tokenIndex947 := position, tokenIndex + position954, tokenIndex954 := position, tokenIndex if !_rules[ruleOffsetOperator]() { - goto l947 + goto l954 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l947 + goto l954 } position++ - l949: + l956: { - position950, tokenIndex950 := position, tokenIndex + position957, tokenIndex957 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l950 + goto l957 } position++ - goto l949 - l950: - position, tokenIndex = position950, tokenIndex950 + goto l956 + l957: + position, tokenIndex = position957, tokenIndex957 } - goto l948 - l947: - position, tokenIndex = position947, tokenIndex947 + goto l955 + l954: + position, tokenIndex = position954, tokenIndex954 } - l948: - goto l920 - l944: - position, tokenIndex = position920, tokenIndex920 + l955: + goto l927 + l951: + position, tokenIndex = position927, tokenIndex927 if buffer[position] != rune('(') { - goto l951 + goto l958 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l951 + goto l958 } position++ - l952: + l959: { - position953, tokenIndex953 := position, tokenIndex + position960, tokenIndex960 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l953 + goto l960 } position++ - goto l952 - l953: - position, tokenIndex = position953, tokenIndex953 + goto l959 + l960: + position, tokenIndex = position960, tokenIndex960 } { - position954, tokenIndex954 := position, tokenIndex + position961, tokenIndex961 := position, tokenIndex if !_rules[ruleWS]() { - goto l954 + goto l961 } - goto l955 - l954: - position, tokenIndex = position954, tokenIndex954 + goto l962 + l961: + position, tokenIndex = position961, tokenIndex961 } - l955: + l962: if !_rules[ruleOffsetOperator]() { - goto l951 + goto l958 } { - position956, tokenIndex956 := position, tokenIndex + position963, tokenIndex963 := position, tokenIndex if !_rules[ruleWS]() { - goto l956 + goto l963 } - goto l957 - l956: - position, tokenIndex = position956, tokenIndex956 + goto l964 + l963: + position, tokenIndex = position963, tokenIndex963 } - l957: + l964: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l951 + goto l958 } position++ - l958: + l965: { - position959, tokenIndex959 := position, tokenIndex + position966, tokenIndex966 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l959 + goto l966 } position++ - goto l958 - l959: - position, tokenIndex = position959, tokenIndex959 + goto l965 + l966: + position, tokenIndex = position966, tokenIndex966 } if buffer[position] != rune(')') { - goto l951 + goto l958 } position++ if !_rules[ruleOffsetOperator]() { - goto l951 + goto l958 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l951 + goto l958 } position++ - l960: + l967: { - position961, tokenIndex961 := position, tokenIndex + position968, tokenIndex968 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l961 + goto l968 } position++ - goto l960 - l961: - position, tokenIndex = position961, tokenIndex961 + goto l967 + l968: + position, tokenIndex = position968, tokenIndex968 } if !_rules[ruleOffsetOperator]() { - goto l951 + goto l958 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l951 + goto l958 } position++ - l962: + l969: { - position963, tokenIndex963 := position, tokenIndex + position970, tokenIndex970 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l963 + goto l970 } position++ - goto l962 - l963: - position, tokenIndex = position963, tokenIndex963 + goto l969 + l970: + position, tokenIndex = position970, tokenIndex970 } - goto l920 - l951: - position, tokenIndex = position920, tokenIndex920 + goto l927 + l958: + position, tokenIndex = position927, tokenIndex927 if buffer[position] != rune('(') { - goto l964 + goto l971 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l964 + goto l971 } position++ - l965: + l972: { - position966, tokenIndex966 := position, tokenIndex + position973, tokenIndex973 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l966 + goto l973 } position++ - goto l965 - l966: - position, tokenIndex = position966, tokenIndex966 + goto l972 + l973: + position, tokenIndex = position973, tokenIndex973 } { - position967, tokenIndex967 := position, tokenIndex + position974, tokenIndex974 := position, tokenIndex if !_rules[ruleWS]() { - goto l967 + goto l974 } - goto l968 - l967: - position, tokenIndex = position967, tokenIndex967 + goto l975 + l974: + position, tokenIndex = position974, tokenIndex974 } - l968: + l975: if !_rules[ruleOffsetOperator]() { - goto l964 + goto l971 } { - position969, tokenIndex969 := position, tokenIndex + position976, tokenIndex976 := position, tokenIndex if !_rules[ruleWS]() { - goto l969 + goto l976 } - goto l970 - l969: - position, tokenIndex = position969, tokenIndex969 + goto l977 + l976: + position, tokenIndex = position976, tokenIndex976 } - l970: + l977: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l964 + goto l971 } position++ - l971: + l978: { - position972, tokenIndex972 := position, tokenIndex + position979, tokenIndex979 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l972 + goto l979 } position++ - goto l971 - l972: - position, tokenIndex = position972, tokenIndex972 + goto l978 + l979: + position, tokenIndex = position979, tokenIndex979 } if buffer[position] != rune(')') { - goto l964 + goto l971 } position++ if !_rules[ruleOffsetOperator]() { - goto l964 + goto l971 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l964 + goto l971 } position++ - l973: + l980: { - position974, tokenIndex974 := position, tokenIndex + position981, tokenIndex981 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l974 + goto l981 } position++ - goto l973 - l974: - position, tokenIndex = position974, tokenIndex974 + goto l980 + l981: + position, tokenIndex = position981, tokenIndex981 } { - position975, tokenIndex975 := position, tokenIndex + position982, tokenIndex982 := position, tokenIndex if buffer[position] != rune('x') { - goto l975 + goto l982 } position++ - goto l964 - l975: - position, tokenIndex = position975, tokenIndex975 + goto l971 + l982: + position, tokenIndex = position982, tokenIndex982 } - goto l920 - l964: - position, tokenIndex = position920, tokenIndex920 + goto l927 + l971: + position, tokenIndex = position927, tokenIndex927 if buffer[position] != rune('(') { - goto l976 + goto l983 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l976 + goto l983 } position++ - l977: + l984: { - position978, tokenIndex978 := position, tokenIndex + position985, tokenIndex985 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l978 + goto l985 } position++ - goto l977 - l978: - position, tokenIndex = position978, tokenIndex978 + goto l984 + l985: + position, tokenIndex = position985, tokenIndex985 } { - position979, tokenIndex979 := position, tokenIndex + position986, tokenIndex986 := position, tokenIndex if !_rules[ruleWS]() { - goto l979 + goto l986 } - goto l980 - l979: - position, tokenIndex = position979, tokenIndex979 + goto l987 + l986: + position, tokenIndex = position986, tokenIndex986 } - l980: + l987: if !_rules[ruleOffsetOperator]() { - goto l976 + goto l983 } { - position981, tokenIndex981 := position, tokenIndex + position988, tokenIndex988 := position, tokenIndex if !_rules[ruleWS]() { - goto l981 + goto l988 } - goto l982 - l981: - position, tokenIndex = position981, tokenIndex981 + goto l989 + l988: + position, tokenIndex = position988, tokenIndex988 } - l982: + l989: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l976 + goto l983 } position++ - l983: + l990: { - position984, tokenIndex984 := position, tokenIndex + position991, tokenIndex991 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l984 + goto l991 } position++ - goto l983 - l984: - position, tokenIndex = position984, tokenIndex984 + goto l990 + l991: + position, tokenIndex = position991, tokenIndex991 } if buffer[position] != rune(')') { - goto l976 + goto l983 } position++ - goto l920 - l976: - position, tokenIndex = position920, tokenIndex920 + goto l927 + l983: + position, tokenIndex = position927, tokenIndex927 if buffer[position] != rune('(') { - goto l889 + goto l896 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l889 + goto l896 } position++ - l985: + l992: { - position986, tokenIndex986 := position, tokenIndex + position993, tokenIndex993 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l986 + goto l993 } position++ - goto l985 - l986: - position, tokenIndex = position986, tokenIndex986 + goto l992 + l993: + position, tokenIndex = position993, tokenIndex993 } { - position987, tokenIndex987 := position, tokenIndex + position994, tokenIndex994 := position, tokenIndex if !_rules[ruleWS]() { - goto l987 + goto l994 } - goto l988 - l987: - position, tokenIndex = position987, tokenIndex987 + goto l995 + l994: + position, tokenIndex = position994, tokenIndex994 } - l988: + l995: if !_rules[ruleOffsetOperator]() { - goto l889 + goto l896 } { - position989, tokenIndex989 := position, tokenIndex + position996, tokenIndex996 := position, tokenIndex if !_rules[ruleWS]() { - goto l989 + goto l996 } - goto l990 - l989: - position, tokenIndex = position989, tokenIndex989 + goto l997 + l996: + position, tokenIndex = position996, tokenIndex996 } - l990: + l997: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l889 + goto l896 } position++ - l991: + l998: { - position992, tokenIndex992 := position, tokenIndex + position999, tokenIndex999 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l992 + goto l999 } position++ - goto l991 - l992: - position, tokenIndex = position992, tokenIndex992 + goto l998 + l999: + position, tokenIndex = position999, tokenIndex999 } { - position993, tokenIndex993 := position, tokenIndex + position1000, tokenIndex1000 := position, tokenIndex if !_rules[ruleWS]() { - goto l993 + goto l1000 } - goto l994 - l993: - position, tokenIndex = position993, tokenIndex993 + goto l1001 + l1000: + position, tokenIndex = position1000, tokenIndex1000 } - l994: + l1001: if !_rules[ruleOffsetOperator]() { - goto l889 + goto l896 } { - position995, tokenIndex995 := position, tokenIndex + position1002, tokenIndex1002 := position, tokenIndex if !_rules[ruleWS]() { - goto l995 + goto l1002 } - goto l996 - l995: - position, tokenIndex = position995, tokenIndex995 + goto l1003 + l1002: + position, tokenIndex = position1002, tokenIndex1002 } - l996: + l1003: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l889 + goto l896 } position++ - l997: + l1004: { - position998, tokenIndex998 := position, tokenIndex + position1005, tokenIndex1005 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l998 + goto l1005 } position++ - goto l997 - l998: - position, tokenIndex = position998, tokenIndex998 + goto l1004 + l1005: + position, tokenIndex = position1005, tokenIndex1005 } if buffer[position] != rune(')') { - goto l889 + goto l896 } position++ } - l920: + l927: { - position999, tokenIndex999 := position, tokenIndex + position1006, tokenIndex1006 := position, tokenIndex { - position1000, tokenIndex1000 := position, tokenIndex + position1007, tokenIndex1007 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l1001 + goto l1008 } position++ - goto l1000 - l1001: - position, tokenIndex = position1000, tokenIndex1000 + goto l1007 + l1008: + position, tokenIndex = position1007, tokenIndex1007 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l999 + goto l1006 } position++ } - l1000: - goto l889 - l999: - position, tokenIndex = position999, tokenIndex999 + l1007: + goto l896 + l1006: + position, tokenIndex = position1006, tokenIndex1006 } } - l895: - add(ruleOffset, position890) + l902: + add(ruleOffset, position897) } return true - l889: - position, tokenIndex = position889, tokenIndex889 + l896: + position, tokenIndex = position896, tokenIndex896 return false }, - /* 57 Section <- <([a-z] / [A-Z] / '@')+> */ + /* 58 Section <- <([a-z] / [A-Z] / '@')+> */ func() bool { - position1002, tokenIndex1002 := position, tokenIndex + position1009, tokenIndex1009 := position, tokenIndex { - position1003 := position + position1010 := position { - position1006, tokenIndex1006 := position, tokenIndex + position1013, tokenIndex1013 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l1007 + goto l1014 } position++ - goto l1006 - l1007: - position, tokenIndex = position1006, tokenIndex1006 + goto l1013 + l1014: + position, tokenIndex = position1013, tokenIndex1013 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l1008 + goto l1015 } position++ - goto l1006 - l1008: - position, tokenIndex = position1006, tokenIndex1006 + goto l1013 + l1015: + position, tokenIndex = position1013, tokenIndex1013 if buffer[position] != rune('@') { - goto l1002 + goto l1009 } position++ } - l1006: - l1004: + l1013: + l1011: { - position1005, tokenIndex1005 := position, tokenIndex + position1012, tokenIndex1012 := position, tokenIndex { - position1009, tokenIndex1009 := position, tokenIndex + position1016, tokenIndex1016 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l1010 + goto l1017 } position++ - goto l1009 - l1010: - position, tokenIndex = position1009, tokenIndex1009 + goto l1016 + l1017: + position, tokenIndex = position1016, tokenIndex1016 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l1011 + goto l1018 } position++ - goto l1009 - l1011: - position, tokenIndex = position1009, tokenIndex1009 + goto l1016 + l1018: + position, tokenIndex = position1016, tokenIndex1016 if buffer[position] != rune('@') { - goto l1005 + goto l1012 } position++ } - l1009: - goto l1004 - l1005: - position, tokenIndex = position1005, tokenIndex1005 + l1016: + goto l1011 + l1012: + position, tokenIndex = position1012, tokenIndex1012 } - add(ruleSection, position1003) + add(ruleSection, position1010) } return true - l1002: - position, tokenIndex = position1002, tokenIndex1002 + l1009: + position, tokenIndex = position1009, tokenIndex1009 return false }, - /* 58 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ + /* 59 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ func() bool { - position1012, tokenIndex1012 := position, tokenIndex + position1019, tokenIndex1019 := position, tokenIndex { - position1013 := position + position1020 := position if buffer[position] != rune('%') { - goto l1012 + goto l1019 } position++ { - position1014, tokenIndex1014 := position, tokenIndex + position1021, tokenIndex1021 := position, tokenIndex if c := buffer[position]; c < rune('c') || c > rune('g') { - goto l1015 + goto l1022 } position++ - goto l1014 - l1015: - position, tokenIndex = position1014, tokenIndex1014 + goto l1021 + l1022: + position, tokenIndex = position1021, tokenIndex1021 if buffer[position] != rune('s') { - goto l1012 + goto l1019 } position++ } - l1014: + l1021: if buffer[position] != rune('s') { - goto l1012 + goto l1019 } position++ if buffer[position] != rune(':') { - goto l1012 + goto l1019 } position++ - add(ruleSegmentRegister, position1013) + add(ruleSegmentRegister, position1020) } return true - l1012: - position, tokenIndex = position1012, tokenIndex1012 + l1019: + position, tokenIndex = position1019, tokenIndex1019 return false }, } From b11fcf1b01cc3f60e0dc23037039543d1da43702 Mon Sep 17 00:00:00 2001 From: Torben Hansen <50673096+torben-hansen@users.noreply.github.com> Date: Tue, 27 Aug 2024 08:31:48 -0700 Subject: [PATCH 2/3] Add test case for correct matching --- .../delocate/testdata/x86_64-LabelRewrite/in1.s | 10 ++++++++++ .../delocate/testdata/x86_64-LabelRewrite/out.s | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s index 8ee708967b..40e8b59ed5 100644 --- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s +++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s @@ -4,6 +4,12 @@ foo: movq $0, %rax ret + .type xfoo, @function + .globl xfoo +xfoo: + movq $0, %rax + ret + bar: # References to globals must be rewritten to their local targets. call foo @@ -11,6 +17,10 @@ bar: jbe foo jne foo + # References potentially matching arm registers e.g. 'x[a-z][a-z]' should be + # matched as global symbols and rewritten to the corresponding local target. + call xfoo + # Jumps to PLT symbols are rewritten through redirectors. call memcpy@PLT jmp memcpy@PLT diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s index 10e40481b7..d01d57654a 100644 --- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s +++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s @@ -9,6 +9,13 @@ foo: movq $0, %rax ret + .type xfoo, @function + .globl xfoo +.Lxfoo_local_target: +xfoo: + movq $0, %rax + ret + .Lbar_local_target: bar: # References to globals must be rewritten to their local targets. @@ -21,6 +28,11 @@ bar: # WAS jne foo jne .Lfoo_local_target + # References potentially matching arm registers e.g. 'x[a-z][a-z]' should be + # matched as global symbols and rewritten to the corresponding local target. +# WAS call xfoo + call .Lxfoo_local_target + # Jumps to PLT symbols are rewritten through redirectors. # WAS call memcpy@PLT call .Lbcm_redirector_memcpy From c8ce45c365774dd6e5a3abdd378baeeae95de990 Mon Sep 17 00:00:00 2001 From: Torben Hansen <50673096+torben-hansen@users.noreply.github.com> Date: Tue, 27 Aug 2024 08:55:41 -0700 Subject: [PATCH 3/3] Use correct symbol form --- .../delocate/testdata/x86_64-LabelRewrite/in1.s | 10 +++++----- .../delocate/testdata/x86_64-LabelRewrite/out.s | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s index 40e8b59ed5..8bb2ffc55c 100644 --- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s +++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s @@ -4,9 +4,9 @@ foo: movq $0, %rax ret - .type xfoo, @function - .globl xfoo -xfoo: + .type x25519_foo, @function + .globl x25519_foo +x25519_foo: movq $0, %rax ret @@ -17,9 +17,9 @@ bar: jbe foo jne foo - # References potentially matching arm registers e.g. 'x[a-z][a-z]' should be + # References potentially matching arm registers e.g. 'x[0-9][0-9]' should be # matched as global symbols and rewritten to the corresponding local target. - call xfoo + call x25519_foo # Jumps to PLT symbols are rewritten through redirectors. call memcpy@PLT diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s index d01d57654a..7cc74fb8ab 100644 --- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s +++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s @@ -9,10 +9,10 @@ foo: movq $0, %rax ret - .type xfoo, @function - .globl xfoo -.Lxfoo_local_target: -xfoo: + .type x25519_foo, @function + .globl x25519_foo +.Lx25519_foo_local_target: +x25519_foo: movq $0, %rax ret @@ -28,10 +28,10 @@ bar: # WAS jne foo jne .Lfoo_local_target - # References potentially matching arm registers e.g. 'x[a-z][a-z]' should be + # References potentially matching arm registers e.g. 'x[0-9][0-9]' should be # matched as global symbols and rewritten to the corresponding local target. -# WAS call xfoo - call .Lxfoo_local_target +# WAS call x25519_foo + call .Lx25519_foo_local_target # Jumps to PLT symbols are rewritten through redirectors. # WAS call memcpy@PLT