diff options
Diffstat (limited to 'src/util/fipstools/delocate')
-rw-r--r-- | src/util/fipstools/delocate/delocate.go | 16 | ||||
-rw-r--r-- | src/util/fipstools/delocate/delocate.peg | 14 | ||||
-rw-r--r-- | src/util/fipstools/delocate/delocate.peg.go | 3111 | ||||
-rw-r--r-- | src/util/fipstools/delocate/testdata/aarch64-Basic/in.s | 3 | ||||
-rw-r--r-- | src/util/fipstools/delocate/testdata/aarch64-Basic/out.s | 3 | ||||
-rw-r--r-- | src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s | 3 | ||||
-rw-r--r-- | src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s | 7 |
7 files changed, 1746 insertions, 1411 deletions
diff --git a/src/util/fipstools/delocate/delocate.go b/src/util/fipstools/delocate/delocate.go index 8e0e508..cd08bed 100644 --- a/src/util/fipstools/delocate/delocate.go +++ b/src/util/fipstools/delocate/delocate.go @@ -1163,6 +1163,22 @@ Args: args = append(args, argStr) + case ruleGOTAddress: + if instructionName != "leaq" { + return nil, fmt.Errorf("_GLOBAL_OFFSET_TABLE_ used outside of lea") + } + if i != 0 || len(argNodes) != 2 { + return nil, fmt.Errorf("Load of _GLOBAL_OFFSET_TABLE_ address didn't have expected form") + } + d.gotDeltaNeeded = true + changed = true + targetReg := d.contents(argNodes[1]) + args = append(args, ".Lboringssl_got_delta(%rip)") + wrappers = append(wrappers, func(k func()) { + k() + d.output.WriteString(fmt.Sprintf("\taddq .Lboringssl_got_delta(%%rip), %s\n", targetReg)) + }) + case ruleGOTLocation: if instructionName != "movabsq" { return nil, fmt.Errorf("_GLOBAL_OFFSET_TABLE_ lookup didn't use movabsq") diff --git a/src/util/fipstools/delocate/delocate.peg b/src/util/fipstools/delocate/delocate.peg index d5537e2..3381cae 100644 --- a/src/util/fipstools/delocate/delocate.peg +++ b/src/util/fipstools/delocate/delocate.peg @@ -68,8 +68,9 @@ LocalLabel <- [0-9][0-9$]* LocalLabelRef <- [0-9][0-9$]*[bf] Instruction <- InstructionName (WS InstructionArg ((WS? ',' WS?) InstructionArg)*)? InstructionName <- [[A-Z]][[A-Z.0-9]]* [.+\-]? -InstructionArg <- IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token* +InstructionArg <- IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token* GOTLocation <- '$_GLOBAL_OFFSET_TABLE_-' LocalSymbol +GOTAddress <- '_GLOBAL_OFFSET_TABLE_(%rip)' GOTSymbolOffset <- ('$' SymbolName '@GOT' 'OFF'?) / (":got:" SymbolName) AVX512Token <- WS? '{' '%'? [0-9a-z]* '}' TOCRefHigh <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@ha" @@ -81,9 +82,14 @@ RegisterOrConstant <- (('%'[[A-Z]][[A-Z0-9]]*) / ('#' '~'? '(' [0-9] WS? "<<" WS? [0-9] ')' ) / ARMRegister) ![fb:(+\-] -ARMConstantTweak <- (([us] "xt" [xwhb]) / "lsl" / "lsr" / "ror" / "asr") (WS '#' Offset)? -ARMRegister <- "sp" / ([xwdqshb] [0-9] [0-9]?) / "xzr" / "wzr" / "NZCV" / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')? ) -ARMVectorRegister <- "v" [0-9] [0-9]? ('.' [0-9]* [bsdhq] ('[' [0-9] [0-9]? ']')? )? +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 / + ('{' WS? ARMVectorRegister (',' 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] # 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/src/util/fipstools/delocate/delocate.peg.go b/src/util/fipstools/delocate/delocate.peg.go index 7659cbc..f0963cc 100644 --- a/src/util/fipstools/delocate/delocate.peg.go +++ b/src/util/fipstools/delocate/delocate.peg.go @@ -54,6 +54,7 @@ const ( ruleInstructionName ruleInstructionArg ruleGOTLocation + ruleGOTAddress ruleGOTSymbolOffset ruleAVX512Token ruleTOCRefHigh @@ -63,6 +64,7 @@ const ( ruleARMConstantTweak ruleARMRegister ruleARMVectorRegister + ruleSVE2PredicateRegister ruleMemoryRef ruleSymbolRef ruleLow12BitsSymbolRef @@ -114,6 +116,7 @@ var rul3s = [...]string{ "InstructionName", "InstructionArg", "GOTLocation", + "GOTAddress", "GOTSymbolOffset", "AVX512Token", "TOCRefHigh", @@ -123,6 +126,7 @@ var rul3s = [...]string{ "ARMConstantTweak", "ARMRegister", "ARMVectorRegister", + "SVE2PredicateRegister", "MemoryRef", "SymbolRef", "Low12BitsSymbolRef", @@ -248,7 +252,7 @@ func (t *tokens32) Tokens() []token32 { type Asm struct { Buffer string buffer []rune - rules [57]func() bool + rules [59]func() bool parse func(rule ...int) error reset func() Pretty bool @@ -3671,7 +3675,7 @@ func (p *Asm) Init(options ...func(*Asm) error) error { position, tokenIndex = position438, tokenIndex438 return false }, - /* 34 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTSymbolOffset / MemoryRef) AVX512Token*)> */ + /* 34 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */ func() bool { position455, tokenIndex455 := position, tokenIndex { @@ -3724,26 +3728,32 @@ func (p *Asm) Init(options ...func(*Asm) error) error { goto l459 l465: position, tokenIndex = position459, tokenIndex459 - if !_rules[ruleGOTSymbolOffset]() { + if !_rules[ruleGOTAddress]() { goto l466 } goto l459 l466: position, tokenIndex = position459, tokenIndex459 + if !_rules[ruleGOTSymbolOffset]() { + goto l467 + } + goto l459 + l467: + position, tokenIndex = position459, tokenIndex459 if !_rules[ruleMemoryRef]() { goto l455 } } l459: - l467: + l468: { - position468, tokenIndex468 := position, tokenIndex + position469, tokenIndex469 := position, tokenIndex if !_rules[ruleAVX512Token]() { - goto l468 + goto l469 } - goto l467 - l468: - position, tokenIndex = position468, tokenIndex468 + goto l468 + l469: + position, tokenIndex = position469, tokenIndex469 } add(ruleInstructionArg, position456) } @@ -3754,2715 +3764,3002 @@ func (p *Asm) Init(options ...func(*Asm) error) error { }, /* 35 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */ func() bool { - position469, tokenIndex469 := position, tokenIndex + position470, tokenIndex470 := position, tokenIndex { - position470 := position + position471 := position if buffer[position] != rune('$') { - goto l469 + goto l470 } position++ if buffer[position] != rune('_') { - goto l469 + goto l470 } position++ if buffer[position] != rune('G') { - goto l469 + goto l470 } position++ if buffer[position] != rune('L') { - goto l469 + goto l470 } position++ if buffer[position] != rune('O') { - goto l469 + goto l470 } position++ if buffer[position] != rune('B') { - goto l469 + goto l470 } position++ if buffer[position] != rune('A') { - goto l469 + goto l470 } position++ if buffer[position] != rune('L') { - goto l469 + goto l470 } position++ if buffer[position] != rune('_') { - goto l469 + goto l470 } position++ if buffer[position] != rune('O') { - goto l469 + goto l470 } position++ if buffer[position] != rune('F') { - goto l469 + goto l470 } position++ if buffer[position] != rune('F') { - goto l469 + goto l470 } position++ if buffer[position] != rune('S') { - goto l469 + goto l470 } position++ if buffer[position] != rune('E') { - goto l469 + goto l470 } position++ if buffer[position] != rune('T') { - goto l469 + goto l470 } position++ if buffer[position] != rune('_') { - goto l469 + goto l470 } position++ if buffer[position] != rune('T') { - goto l469 + goto l470 } position++ if buffer[position] != rune('A') { - goto l469 + goto l470 } position++ if buffer[position] != rune('B') { - goto l469 + goto l470 } position++ if buffer[position] != rune('L') { - goto l469 + goto l470 } position++ if buffer[position] != rune('E') { - goto l469 + goto l470 } position++ if buffer[position] != rune('_') { - goto l469 + goto l470 } position++ if buffer[position] != rune('-') { - goto l469 + goto l470 } position++ if !_rules[ruleLocalSymbol]() { - goto l469 + goto l470 + } + add(ruleGOTLocation, position471) + } + return true + l470: + position, tokenIndex = position470, tokenIndex470 + return false + }, + /* 36 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */ + func() bool { + position472, tokenIndex472 := position, tokenIndex + { + position473 := position + if buffer[position] != rune('_') { + goto l472 + } + position++ + if buffer[position] != rune('G') { + goto l472 + } + position++ + if buffer[position] != rune('L') { + goto l472 + } + position++ + if buffer[position] != rune('O') { + goto l472 + } + position++ + if buffer[position] != rune('B') { + goto l472 + } + position++ + if buffer[position] != rune('A') { + goto l472 + } + position++ + if buffer[position] != rune('L') { + goto l472 + } + position++ + if buffer[position] != rune('_') { + goto l472 + } + position++ + if buffer[position] != rune('O') { + goto l472 + } + position++ + if buffer[position] != rune('F') { + goto l472 + } + position++ + if buffer[position] != rune('F') { + goto l472 + } + position++ + if buffer[position] != rune('S') { + goto l472 + } + position++ + if buffer[position] != rune('E') { + goto l472 + } + position++ + if buffer[position] != rune('T') { + goto l472 } - add(ruleGOTLocation, position470) + position++ + if buffer[position] != rune('_') { + goto l472 + } + position++ + if buffer[position] != rune('T') { + goto l472 + } + position++ + if buffer[position] != rune('A') { + goto l472 + } + position++ + if buffer[position] != rune('B') { + goto l472 + } + position++ + if buffer[position] != rune('L') { + goto l472 + } + position++ + if buffer[position] != rune('E') { + goto l472 + } + position++ + if buffer[position] != rune('_') { + goto l472 + } + position++ + if buffer[position] != rune('(') { + goto l472 + } + position++ + if buffer[position] != rune('%') { + goto l472 + } + position++ + if buffer[position] != rune('r') { + goto l472 + } + position++ + if buffer[position] != rune('i') { + goto l472 + } + position++ + if buffer[position] != rune('p') { + goto l472 + } + position++ + if buffer[position] != rune(')') { + goto l472 + } + position++ + add(ruleGOTAddress, position473) } return true - l469: - position, tokenIndex = position469, tokenIndex469 + l472: + position, tokenIndex = position472, tokenIndex472 return false }, - /* 36 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */ + /* 37 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */ func() bool { - position471, tokenIndex471 := position, tokenIndex + position474, tokenIndex474 := position, tokenIndex { - position472 := position + position475 := position { - position473, tokenIndex473 := position, tokenIndex + position476, tokenIndex476 := position, tokenIndex if buffer[position] != rune('$') { - goto l474 + goto l477 } position++ if !_rules[ruleSymbolName]() { - goto l474 + goto l477 } if buffer[position] != rune('@') { - goto l474 + goto l477 } position++ if buffer[position] != rune('G') { - goto l474 + goto l477 } position++ if buffer[position] != rune('O') { - goto l474 + goto l477 } position++ if buffer[position] != rune('T') { - goto l474 + goto l477 } position++ { - position475, tokenIndex475 := position, tokenIndex + position478, tokenIndex478 := position, tokenIndex if buffer[position] != rune('O') { - goto l475 + goto l478 } position++ if buffer[position] != rune('F') { - goto l475 + goto l478 } position++ if buffer[position] != rune('F') { - goto l475 + goto l478 } position++ - goto l476 - l475: - position, tokenIndex = position475, tokenIndex475 + goto l479 + l478: + position, tokenIndex = position478, tokenIndex478 } - l476: - goto l473 - l474: - position, tokenIndex = position473, tokenIndex473 + l479: + goto l476 + l477: + position, tokenIndex = position476, tokenIndex476 if buffer[position] != rune(':') { - goto l471 + goto l474 } position++ { - position477, tokenIndex477 := position, tokenIndex + position480, tokenIndex480 := position, tokenIndex if buffer[position] != rune('g') { - goto l478 + goto l481 } position++ - goto l477 - l478: - position, tokenIndex = position477, tokenIndex477 + goto l480 + l481: + position, tokenIndex = position480, tokenIndex480 if buffer[position] != rune('G') { - goto l471 + goto l474 } position++ } - l477: + l480: { - position479, tokenIndex479 := position, tokenIndex + position482, tokenIndex482 := position, tokenIndex if buffer[position] != rune('o') { - goto l480 + goto l483 } position++ - goto l479 - l480: - position, tokenIndex = position479, tokenIndex479 + goto l482 + l483: + position, tokenIndex = position482, tokenIndex482 if buffer[position] != rune('O') { - goto l471 + goto l474 } position++ } - l479: + l482: { - position481, tokenIndex481 := position, tokenIndex + position484, tokenIndex484 := position, tokenIndex if buffer[position] != rune('t') { - goto l482 + goto l485 } position++ - goto l481 - l482: - position, tokenIndex = position481, tokenIndex481 + goto l484 + l485: + position, tokenIndex = position484, tokenIndex484 if buffer[position] != rune('T') { - goto l471 + goto l474 } position++ } - l481: + l484: if buffer[position] != rune(':') { - goto l471 + goto l474 } position++ if !_rules[ruleSymbolName]() { - goto l471 + goto l474 } } - l473: - add(ruleGOTSymbolOffset, position472) + l476: + add(ruleGOTSymbolOffset, position475) } return true - l471: - position, tokenIndex = position471, tokenIndex471 + l474: + position, tokenIndex = position474, tokenIndex474 return false }, - /* 37 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */ + /* 38 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */ func() bool { - position483, tokenIndex483 := position, tokenIndex + position486, tokenIndex486 := position, tokenIndex { - position484 := position + position487 := position { - position485, tokenIndex485 := position, tokenIndex + position488, tokenIndex488 := position, tokenIndex if !_rules[ruleWS]() { - goto l485 + goto l488 } - goto l486 - l485: - position, tokenIndex = position485, tokenIndex485 + goto l489 + l488: + position, tokenIndex = position488, tokenIndex488 } - l486: + l489: if buffer[position] != rune('{') { - goto l483 + goto l486 } position++ { - position487, tokenIndex487 := position, tokenIndex + position490, tokenIndex490 := position, tokenIndex if buffer[position] != rune('%') { - goto l487 + goto l490 } position++ - goto l488 - l487: - position, tokenIndex = position487, tokenIndex487 + goto l491 + l490: + position, tokenIndex = position490, tokenIndex490 } - l488: - l489: + l491: + l492: { - position490, tokenIndex490 := position, tokenIndex + position493, tokenIndex493 := position, tokenIndex { - position491, tokenIndex491 := position, tokenIndex + position494, tokenIndex494 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l492 + goto l495 } position++ - goto l491 - l492: - position, tokenIndex = position491, tokenIndex491 + goto l494 + l495: + position, tokenIndex = position494, tokenIndex494 if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l490 + goto l493 } position++ } - l491: - goto l489 - l490: - position, tokenIndex = position490, tokenIndex490 + l494: + goto l492 + l493: + position, tokenIndex = position493, tokenIndex493 } if buffer[position] != rune('}') { - goto l483 + goto l486 } position++ - add(ruleAVX512Token, position484) + add(ruleAVX512Token, position487) } return true - l483: - position, tokenIndex = position483, tokenIndex483 + l486: + position, tokenIndex = position486, tokenIndex486 return false }, - /* 38 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */ + /* 39 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */ func() bool { - position493, tokenIndex493 := position, tokenIndex + position496, tokenIndex496 := position, tokenIndex { - position494 := position + position497 := position if buffer[position] != rune('.') { - goto l493 + goto l496 } position++ if buffer[position] != rune('T') { - goto l493 + goto l496 } position++ if buffer[position] != rune('O') { - goto l493 + goto l496 } position++ if buffer[position] != rune('C') { - goto l493 + goto l496 } position++ if buffer[position] != rune('.') { - goto l493 + goto l496 } position++ if buffer[position] != rune('-') { - goto l493 + goto l496 } position++ { - position495, tokenIndex495 := position, tokenIndex + position498, tokenIndex498 := position, tokenIndex if buffer[position] != rune('0') { - goto l496 + goto l499 } position++ if buffer[position] != rune('b') { - goto l496 + goto l499 } position++ - goto l495 - l496: - position, tokenIndex = position495, tokenIndex495 + goto l498 + l499: + position, tokenIndex = position498, tokenIndex498 if buffer[position] != rune('.') { - goto l493 + goto l496 } position++ if buffer[position] != rune('L') { - goto l493 + goto l496 } position++ { - position499, tokenIndex499 := position, tokenIndex + position502, tokenIndex502 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l500 + goto l503 } position++ - goto l499 - l500: - position, tokenIndex = position499, tokenIndex499 + goto l502 + l503: + position, tokenIndex = position502, tokenIndex502 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l501 + goto l504 } position++ - goto l499 - l501: - position, tokenIndex = position499, tokenIndex499 + goto l502 + l504: + position, tokenIndex = position502, tokenIndex502 if buffer[position] != rune('_') { - goto l502 + goto l505 } position++ - goto l499 - l502: - position, tokenIndex = position499, tokenIndex499 + goto l502 + l505: + position, tokenIndex = position502, tokenIndex502 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l493 + goto l496 } position++ } - l499: - l497: + l502: + l500: { - position498, tokenIndex498 := position, tokenIndex + position501, tokenIndex501 := position, tokenIndex { - position503, tokenIndex503 := position, tokenIndex + position506, tokenIndex506 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l504 + goto l507 } position++ - goto l503 - l504: - position, tokenIndex = position503, tokenIndex503 + goto l506 + l507: + position, tokenIndex = position506, tokenIndex506 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l505 + goto l508 } position++ - goto l503 - l505: - position, tokenIndex = position503, tokenIndex503 + goto l506 + l508: + position, tokenIndex = position506, tokenIndex506 if buffer[position] != rune('_') { - goto l506 + goto l509 } position++ - goto l503 - l506: - position, tokenIndex = position503, tokenIndex503 + goto l506 + l509: + position, tokenIndex = position506, tokenIndex506 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l498 + goto l501 } position++ } - l503: - goto l497 - l498: - position, tokenIndex = position498, tokenIndex498 + l506: + goto l500 + l501: + position, tokenIndex = position501, tokenIndex501 } } - l495: + l498: if buffer[position] != rune('@') { - goto l493 + goto l496 } position++ { - position507, tokenIndex507 := position, tokenIndex + position510, tokenIndex510 := position, tokenIndex if buffer[position] != rune('h') { - goto l508 + goto l511 } position++ - goto l507 - l508: - position, tokenIndex = position507, tokenIndex507 + goto l510 + l511: + position, tokenIndex = position510, tokenIndex510 if buffer[position] != rune('H') { - goto l493 + goto l496 } position++ } - l507: + l510: { - position509, tokenIndex509 := position, tokenIndex + position512, tokenIndex512 := position, tokenIndex if buffer[position] != rune('a') { - goto l510 + goto l513 } position++ - goto l509 - l510: - position, tokenIndex = position509, tokenIndex509 + goto l512 + l513: + position, tokenIndex = position512, tokenIndex512 if buffer[position] != rune('A') { - goto l493 + goto l496 } position++ } - l509: - add(ruleTOCRefHigh, position494) + l512: + add(ruleTOCRefHigh, position497) } return true - l493: - position, tokenIndex = position493, tokenIndex493 + l496: + position, tokenIndex = position496, tokenIndex496 return false }, - /* 39 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */ + /* 40 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */ func() bool { - position511, tokenIndex511 := position, tokenIndex + position514, tokenIndex514 := position, tokenIndex { - position512 := position + position515 := position if buffer[position] != rune('.') { - goto l511 + goto l514 } position++ if buffer[position] != rune('T') { - goto l511 + goto l514 } position++ if buffer[position] != rune('O') { - goto l511 + goto l514 } position++ if buffer[position] != rune('C') { - goto l511 + goto l514 } position++ if buffer[position] != rune('.') { - goto l511 + goto l514 } position++ if buffer[position] != rune('-') { - goto l511 + goto l514 } position++ { - position513, tokenIndex513 := position, tokenIndex + position516, tokenIndex516 := position, tokenIndex if buffer[position] != rune('0') { - goto l514 + goto l517 } position++ if buffer[position] != rune('b') { - goto l514 + goto l517 } position++ - goto l513 - l514: - position, tokenIndex = position513, tokenIndex513 + goto l516 + l517: + position, tokenIndex = position516, tokenIndex516 if buffer[position] != rune('.') { - goto l511 + goto l514 } position++ if buffer[position] != rune('L') { - goto l511 + goto l514 } position++ { - position517, tokenIndex517 := position, tokenIndex + position520, tokenIndex520 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l518 + goto l521 } position++ - goto l517 - l518: - position, tokenIndex = position517, tokenIndex517 + goto l520 + l521: + position, tokenIndex = position520, tokenIndex520 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l519 + goto l522 } position++ - goto l517 - l519: - position, tokenIndex = position517, tokenIndex517 + goto l520 + l522: + position, tokenIndex = position520, tokenIndex520 if buffer[position] != rune('_') { - goto l520 + goto l523 } position++ - goto l517 - l520: - position, tokenIndex = position517, tokenIndex517 + goto l520 + l523: + position, tokenIndex = position520, tokenIndex520 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l511 + goto l514 } position++ } - l517: - l515: + l520: + l518: { - position516, tokenIndex516 := position, tokenIndex + position519, tokenIndex519 := position, tokenIndex { - position521, tokenIndex521 := position, tokenIndex + position524, tokenIndex524 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l522 + goto l525 } position++ - goto l521 - l522: - position, tokenIndex = position521, tokenIndex521 + goto l524 + l525: + position, tokenIndex = position524, tokenIndex524 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l523 + goto l526 } position++ - goto l521 - l523: - position, tokenIndex = position521, tokenIndex521 + goto l524 + l526: + position, tokenIndex = position524, tokenIndex524 if buffer[position] != rune('_') { - goto l524 + goto l527 } position++ - goto l521 - l524: - position, tokenIndex = position521, tokenIndex521 + goto l524 + l527: + position, tokenIndex = position524, tokenIndex524 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l516 + goto l519 } position++ } - l521: - goto l515 - l516: - position, tokenIndex = position516, tokenIndex516 + l524: + goto l518 + l519: + position, tokenIndex = position519, tokenIndex519 } } - l513: + l516: if buffer[position] != rune('@') { - goto l511 + goto l514 } position++ { - position525, tokenIndex525 := position, tokenIndex + position528, tokenIndex528 := position, tokenIndex if buffer[position] != rune('l') { - goto l526 + goto l529 } position++ - goto l525 - l526: - position, tokenIndex = position525, tokenIndex525 + goto l528 + l529: + position, tokenIndex = position528, tokenIndex528 if buffer[position] != rune('L') { - goto l511 + goto l514 } position++ } - l525: - add(ruleTOCRefLow, position512) + l528: + add(ruleTOCRefLow, position515) } return true - l511: - position, tokenIndex = position511, tokenIndex511 + l514: + position, tokenIndex = position514, tokenIndex514 return false }, - /* 40 IndirectionIndicator <- <'*'> */ + /* 41 IndirectionIndicator <- <'*'> */ func() bool { - position527, tokenIndex527 := position, tokenIndex + position530, tokenIndex530 := position, tokenIndex { - position528 := position + position531 := position if buffer[position] != rune('*') { - goto l527 + goto l530 } position++ - add(ruleIndirectionIndicator, position528) + add(ruleIndirectionIndicator, position531) } return true - l527: - position, tokenIndex = position527, tokenIndex527 + l530: + position, tokenIndex = position530, tokenIndex530 return false }, - /* 41 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ + /* 42 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ func() bool { - position529, tokenIndex529 := position, tokenIndex + position532, tokenIndex532 := position, tokenIndex { - position530 := position + position533 := position { - position531, tokenIndex531 := position, tokenIndex + position534, tokenIndex534 := position, tokenIndex if buffer[position] != rune('%') { - goto l532 + goto l535 } position++ { - position533, tokenIndex533 := position, tokenIndex + position536, tokenIndex536 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l534 + goto l537 } position++ - goto l533 - l534: - position, tokenIndex = position533, tokenIndex533 + goto l536 + l537: + position, tokenIndex = position536, tokenIndex536 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l532 + goto l535 } position++ } - l533: - l535: + l536: + l538: { - position536, tokenIndex536 := position, tokenIndex + position539, tokenIndex539 := position, tokenIndex { - position537, tokenIndex537 := position, tokenIndex + position540, tokenIndex540 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l538 + goto l541 } position++ - goto l537 - l538: - position, tokenIndex = position537, tokenIndex537 + goto l540 + l541: + position, tokenIndex = position540, tokenIndex540 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l539 + goto l542 } position++ - goto l537 - l539: - position, tokenIndex = position537, tokenIndex537 + goto l540 + l542: + position, tokenIndex = position540, tokenIndex540 { - position540, tokenIndex540 := position, tokenIndex + position543, tokenIndex543 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l541 + goto l544 } position++ - goto l540 - l541: - position, tokenIndex = position540, tokenIndex540 + goto l543 + l544: + position, tokenIndex = position543, tokenIndex543 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l536 + goto l539 } position++ } - l540: + l543: } - l537: - goto l535 - l536: - position, tokenIndex = position536, tokenIndex536 + l540: + goto l538 + l539: + position, tokenIndex = position539, tokenIndex539 } - goto l531 - l532: - position, tokenIndex = position531, tokenIndex531 + goto l534 + l535: + position, tokenIndex = position534, tokenIndex534 { - position543, tokenIndex543 := position, tokenIndex + position546, tokenIndex546 := position, tokenIndex if buffer[position] != rune('$') { - goto l543 + goto l546 } position++ - goto l544 - l543: - position, tokenIndex = position543, tokenIndex543 + goto l547 + l546: + position, tokenIndex = position546, tokenIndex546 } - l544: + l547: { - position545, tokenIndex545 := position, tokenIndex + position548, tokenIndex548 := position, tokenIndex if !_rules[ruleOffset]() { - goto l546 + goto l549 } if !_rules[ruleOffset]() { - goto l546 + goto l549 } - goto l545 - l546: - position, tokenIndex = position545, tokenIndex545 + goto l548 + l549: + position, tokenIndex = position548, tokenIndex548 if !_rules[ruleOffset]() { - goto l542 + goto l545 } } + l548: + goto l534 l545: - goto l531 - l542: - position, tokenIndex = position531, tokenIndex531 + position, tokenIndex = position534, tokenIndex534 if buffer[position] != rune('#') { - goto l547 + goto l550 } position++ if !_rules[ruleOffset]() { - goto l547 + goto l550 } { - position548, tokenIndex548 := position, tokenIndex + position551, tokenIndex551 := position, tokenIndex if buffer[position] != rune('*') { - goto l548 + goto l551 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l548 + goto l551 } position++ - l550: + l553: { - position551, tokenIndex551 := position, tokenIndex + position554, tokenIndex554 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l551 + goto l554 } position++ - goto l550 - l551: - position, tokenIndex = position551, tokenIndex551 + goto l553 + l554: + position, tokenIndex = position554, tokenIndex554 } { - position552, tokenIndex552 := position, tokenIndex + position555, tokenIndex555 := position, tokenIndex if buffer[position] != rune('-') { - goto l552 + goto l555 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l552 + goto l555 } position++ - l554: + l557: { - position555, tokenIndex555 := position, tokenIndex + position558, tokenIndex558 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l555 + goto l558 } position++ - goto l554 - l555: - position, tokenIndex = position555, tokenIndex555 + goto l557 + l558: + position, tokenIndex = position558, tokenIndex558 } - goto l553 - l552: - position, tokenIndex = position552, tokenIndex552 - } - l553: - goto l549 - l548: - position, tokenIndex = position548, tokenIndex548 - } - l549: - goto l531 - l547: - position, tokenIndex = position531, tokenIndex531 + goto l556 + l555: + position, tokenIndex = position555, tokenIndex555 + } + l556: + goto l552 + l551: + position, tokenIndex = position551, tokenIndex551 + } + l552: + goto l534 + l550: + position, tokenIndex = position534, tokenIndex534 if buffer[position] != rune('#') { - goto l556 + goto l559 } position++ { - position557, tokenIndex557 := position, tokenIndex + position560, tokenIndex560 := position, tokenIndex if buffer[position] != rune('~') { - goto l557 + goto l560 } position++ - goto l558 - l557: - position, tokenIndex = position557, tokenIndex557 + goto l561 + l560: + position, tokenIndex = position560, tokenIndex560 } - l558: + l561: if buffer[position] != rune('(') { - goto l556 + goto l559 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l556 + goto l559 } position++ { - position559, tokenIndex559 := position, tokenIndex + position562, tokenIndex562 := position, tokenIndex if !_rules[ruleWS]() { - goto l559 + goto l562 } - goto l560 - l559: - position, tokenIndex = position559, tokenIndex559 + goto l563 + l562: + position, tokenIndex = position562, tokenIndex562 } - l560: + l563: if buffer[position] != rune('<') { - goto l556 + goto l559 } position++ if buffer[position] != rune('<') { - goto l556 + goto l559 } position++ { - position561, tokenIndex561 := position, tokenIndex + position564, tokenIndex564 := position, tokenIndex if !_rules[ruleWS]() { - goto l561 + goto l564 } - goto l562 - l561: - position, tokenIndex = position561, tokenIndex561 + goto l565 + l564: + position, tokenIndex = position564, tokenIndex564 } - l562: + l565: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l556 + goto l559 } position++ if buffer[position] != rune(')') { - goto l556 + goto l559 } position++ - goto l531 - l556: - position, tokenIndex = position531, tokenIndex531 + goto l534 + l559: + position, tokenIndex = position534, tokenIndex534 if !_rules[ruleARMRegister]() { - goto l529 + goto l532 } } - l531: + l534: { - position563, tokenIndex563 := position, tokenIndex + position566, tokenIndex566 := position, tokenIndex { - position564, tokenIndex564 := position, tokenIndex + position567, tokenIndex567 := position, tokenIndex if buffer[position] != rune('f') { - goto l565 + goto l568 } position++ - goto l564 - l565: - position, tokenIndex = position564, tokenIndex564 + goto l567 + l568: + position, tokenIndex = position567, tokenIndex567 if buffer[position] != rune('b') { - goto l566 + goto l569 } position++ - goto l564 - l566: - position, tokenIndex = position564, tokenIndex564 + goto l567 + l569: + position, tokenIndex = position567, tokenIndex567 if buffer[position] != rune(':') { - goto l567 + goto l570 } position++ - goto l564 - l567: - position, tokenIndex = position564, tokenIndex564 + goto l567 + l570: + position, tokenIndex = position567, tokenIndex567 if buffer[position] != rune('(') { - goto l568 + goto l571 } position++ - goto l564 - l568: - position, tokenIndex = position564, tokenIndex564 + goto l567 + l571: + position, tokenIndex = position567, tokenIndex567 if buffer[position] != rune('+') { - goto l569 + goto l572 } position++ - goto l564 - l569: - position, tokenIndex = position564, tokenIndex564 + goto l567 + l572: + position, tokenIndex = position567, tokenIndex567 if buffer[position] != rune('-') { - goto l563 + goto l566 } position++ } - l564: - goto l529 - l563: - position, tokenIndex = position563, tokenIndex563 + l567: + goto l532 + l566: + position, tokenIndex = position566, tokenIndex566 } - add(ruleRegisterOrConstant, position530) + add(ruleRegisterOrConstant, position533) } return true - l529: - position, tokenIndex = position529, tokenIndex529 + l532: + position, tokenIndex = position532, tokenIndex532 return false }, - /* 42 ARMConstantTweak <- <(((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?)> */ + /* 43 ARMConstantTweak <- <((((('u' / 's') (('x' / 'X') ('t' / 'T')) ('x' / 'w' / 'h' / 'b')) / (('l' / 'L') ('s' / 'S') ('l' / 'L')) / (('l' / 'L') ('s' / 'S') ('r' / 'R')) / (('r' / 'R') ('o' / 'O') ('r' / 'R')) / (('a' / 'A') ('s' / 'S') ('r' / 'R'))) (WS '#' Offset)?) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' ('v' / 'V') ('l' / 'L')))> */ func() bool { - position570, tokenIndex570 := position, tokenIndex + position573, tokenIndex573 := position, tokenIndex { - position571 := position + position574 := position { - position572, tokenIndex572 := position, tokenIndex - { - position574, tokenIndex574 := position, tokenIndex - if buffer[position] != rune('u') { - goto l575 - } - position++ - goto l574 - l575: - position, tokenIndex = position574, tokenIndex574 - if buffer[position] != rune('s') { - goto l573 - } - position++ - } - l574: + position575, tokenIndex575 := position, tokenIndex { - position576, tokenIndex576 := position, tokenIndex - if buffer[position] != rune('x') { - goto l577 - } - position++ - goto l576 - l577: - position, tokenIndex = position576, tokenIndex576 - if buffer[position] != rune('X') { - goto l573 - } - position++ - } - l576: - { - position578, tokenIndex578 := position, tokenIndex - if buffer[position] != rune('t') { + position577, tokenIndex577 := position, tokenIndex + { + position579, tokenIndex579 := position, tokenIndex + if buffer[position] != rune('u') { + goto l580 + } + position++ goto l579 + l580: + position, tokenIndex = position579, tokenIndex579 + if buffer[position] != rune('s') { + goto l578 + } + position++ } - position++ - goto l578 l579: - position, tokenIndex = position578, tokenIndex578 - if buffer[position] != rune('T') { - goto l573 - } - position++ - } - l578: - { - position580, tokenIndex580 := position, tokenIndex - if buffer[position] != rune('x') { + { + position581, tokenIndex581 := position, tokenIndex + if buffer[position] != rune('x') { + goto l582 + } + position++ goto l581 + l582: + position, tokenIndex = position581, tokenIndex581 + if buffer[position] != rune('X') { + goto l578 + } + position++ } - position++ - goto l580 l581: - position, tokenIndex = position580, tokenIndex580 - if buffer[position] != rune('w') { - goto l582 - } - position++ - goto l580 - l582: - position, tokenIndex = position580, tokenIndex580 - if buffer[position] != rune('h') { + { + position583, tokenIndex583 := position, tokenIndex + if buffer[position] != rune('t') { + goto l584 + } + position++ goto l583 + l584: + position, tokenIndex = position583, tokenIndex583 + if buffer[position] != rune('T') { + goto l578 + } + position++ } - position++ - goto l580 l583: - position, tokenIndex = position580, tokenIndex580 - if buffer[position] != rune('b') { - goto l573 + { + position585, tokenIndex585 := position, tokenIndex + if buffer[position] != rune('x') { + goto l586 + } + position++ + goto l585 + l586: + position, tokenIndex = position585, tokenIndex585 + if buffer[position] != rune('w') { + goto l587 + } + position++ + goto l585 + l587: + position, tokenIndex = position585, tokenIndex585 + if buffer[position] != rune('h') { + goto l588 + } + position++ + goto l585 + l588: + position, tokenIndex = position585, tokenIndex585 + if buffer[position] != rune('b') { + goto l578 + } + position++ } - position++ - } - l580: - goto l572 - l573: - position, tokenIndex = position572, tokenIndex572 - { - position585, tokenIndex585 := position, tokenIndex - if buffer[position] != rune('l') { - goto l586 + l585: + goto l577 + l578: + position, tokenIndex = position577, tokenIndex577 + { + position590, tokenIndex590 := position, tokenIndex + if buffer[position] != rune('l') { + goto l591 + } + position++ + goto l590 + l591: + position, tokenIndex = position590, tokenIndex590 + if buffer[position] != rune('L') { + goto l589 + } + position++ } - position++ - goto l585 - l586: - position, tokenIndex = position585, tokenIndex585 - if buffer[position] != rune('L') { - goto l584 + l590: + { + position592, tokenIndex592 := position, tokenIndex + if buffer[position] != rune('s') { + goto l593 + } + position++ + goto l592 + l593: + position, tokenIndex = position592, tokenIndex592 + if buffer[position] != rune('S') { + goto l589 + } + position++ } - position++ - } - l585: - { - position587, tokenIndex587 := position, tokenIndex - if buffer[position] != rune('s') { - goto l588 + l592: + { + position594, tokenIndex594 := position, tokenIndex + if buffer[position] != rune('l') { + goto l595 + } + position++ + goto l594 + l595: + position, tokenIndex = position594, tokenIndex594 + if buffer[position] != rune('L') { + goto l589 + } + position++ } - position++ - goto l587 - l588: - position, tokenIndex = position587, tokenIndex587 - if buffer[position] != rune('S') { - goto l584 + l594: + goto l577 + l589: + position, tokenIndex = position577, tokenIndex577 + { + position597, tokenIndex597 := position, tokenIndex + if buffer[position] != rune('l') { + goto l598 + } + position++ + goto l597 + l598: + position, tokenIndex = position597, tokenIndex597 + if buffer[position] != rune('L') { + goto l596 + } + position++ } - position++ - } - l587: - { - position589, tokenIndex589 := position, tokenIndex - if buffer[position] != rune('l') { - goto l590 + l597: + { + position599, tokenIndex599 := position, tokenIndex + if buffer[position] != rune('s') { + goto l600 + } + position++ + goto l599 + l600: + position, tokenIndex = position599, tokenIndex599 + if buffer[position] != rune('S') { + goto l596 + } + position++ } - position++ - goto l589 - l590: - position, tokenIndex = position589, tokenIndex589 - if buffer[position] != rune('L') { - goto l584 + l599: + { + position601, tokenIndex601 := position, tokenIndex + if buffer[position] != rune('r') { + goto l602 + } + position++ + goto l601 + l602: + position, tokenIndex = position601, tokenIndex601 + if buffer[position] != rune('R') { + goto l596 + } + position++ } - position++ - } - l589: - goto l572 - l584: - position, tokenIndex = position572, tokenIndex572 - { - position592, tokenIndex592 := position, tokenIndex - if buffer[position] != rune('l') { - goto l593 + l601: + goto l577 + l596: + position, tokenIndex = position577, tokenIndex577 + { + position604, tokenIndex604 := position, tokenIndex + if buffer[position] != rune('r') { + goto l605 + } + position++ + goto l604 + l605: + position, tokenIndex = position604, tokenIndex604 + if buffer[position] != rune('R') { + goto l603 + } + position++ } - position++ - goto l592 - l593: - position, tokenIndex = position592, tokenIndex592 - if buffer[position] != rune('L') { - goto l591 + l604: + { + position606, tokenIndex606 := position, tokenIndex + if buffer[position] != rune('o') { + goto l607 + } + position++ + goto l606 + l607: + position, tokenIndex = position606, tokenIndex606 + if buffer[position] != rune('O') { + goto l603 + } + position++ } - position++ - } - l592: - { - position594, tokenIndex594 := position, tokenIndex - if buffer[position] != rune('s') { - goto l595 + l606: + { + position608, tokenIndex608 := position, tokenIndex + if buffer[position] != rune('r') { + goto l609 + } + position++ + goto l608 + l609: + position, tokenIndex = position608, tokenIndex608 + if buffer[position] != rune('R') { + goto l603 + } + position++ } - position++ - goto l594 - l595: - position, tokenIndex = position594, tokenIndex594 - if buffer[position] != rune('S') { - goto l591 + l608: + goto l577 + l603: + position, tokenIndex = position577, tokenIndex577 + { + position610, tokenIndex610 := position, tokenIndex + if buffer[position] != rune('a') { + goto l611 + } + position++ + goto l610 + l611: + position, tokenIndex = position610, tokenIndex610 + if buffer[position] != rune('A') { + goto l576 + } + position++ } - position++ - } - l594: - { - position596, tokenIndex596 := position, tokenIndex - if buffer[position] != rune('r') { - goto l597 + l610: + { + position612, tokenIndex612 := position, tokenIndex + if buffer[position] != rune('s') { + goto l613 + } + position++ + goto l612 + l613: + position, tokenIndex = position612, tokenIndex612 + if buffer[position] != rune('S') { + goto l576 + } + position++ } - position++ - goto l596 - l597: - position, tokenIndex = position596, tokenIndex596 - if buffer[position] != rune('R') { - goto l591 + l612: + { + position614, tokenIndex614 := position, tokenIndex + if buffer[position] != rune('r') { + goto l615 + } + position++ + goto l614 + l615: + position, tokenIndex = position614, tokenIndex614 + if buffer[position] != rune('R') { + goto l576 + } + position++ } - position++ + l614: } - l596: - goto l572 - l591: - position, tokenIndex = position572, tokenIndex572 + l577: { - position599, tokenIndex599 := position, tokenIndex - if buffer[position] != rune('r') { - goto l600 + position616, tokenIndex616 := position, tokenIndex + if !_rules[ruleWS]() { + goto l616 } - position++ - goto l599 - l600: - position, tokenIndex = position599, tokenIndex599 - if buffer[position] != rune('R') { - goto l598 + if buffer[position] != rune('#') { + goto l616 } position++ + if !_rules[ruleOffset]() { + goto l616 + } + goto l617 + l616: + position, tokenIndex = position616, tokenIndex616 } - l599: + l617: + goto l575 + l576: + position, tokenIndex = position575, tokenIndex575 { - position601, tokenIndex601 := position, tokenIndex - if buffer[position] != rune('o') { - goto l602 + position618, tokenIndex618 := position, tokenIndex + if buffer[position] != rune('m') { + goto l619 } position++ - goto l601 - l602: - position, tokenIndex = position601, tokenIndex601 - if buffer[position] != rune('O') { - goto l598 + goto l618 + l619: + position, tokenIndex = position618, tokenIndex618 + if buffer[position] != rune('M') { + goto l573 } position++ } - l601: + l618: { - position603, tokenIndex603 := position, tokenIndex - if buffer[position] != rune('r') { - goto l604 + position620, tokenIndex620 := position, tokenIndex + if buffer[position] != rune('u') { + goto l621 } position++ - goto l603 - l604: - position, tokenIndex = position603, tokenIndex603 - if buffer[position] != rune('R') { - goto l598 + goto l620 + l621: + position, tokenIndex = position620, tokenIndex620 + if buffer[position] != rune('U') { + goto l573 } position++ } - l603: - goto l572 - l598: - position, tokenIndex = position572, tokenIndex572 + l620: { - position605, tokenIndex605 := position, tokenIndex - if buffer[position] != rune('a') { - goto l606 + position622, tokenIndex622 := position, tokenIndex + if buffer[position] != rune('l') { + goto l623 } position++ - goto l605 - l606: - position, tokenIndex = position605, tokenIndex605 - if buffer[position] != rune('A') { - goto l570 + goto l622 + l623: + position, tokenIndex = position622, tokenIndex622 + if buffer[position] != rune('L') { + goto l573 } position++ } - l605: + l622: + if buffer[position] != rune(' ') { + goto l573 + } + position++ { - position607, tokenIndex607 := position, tokenIndex - if buffer[position] != rune('s') { - goto l608 + position624, tokenIndex624 := position, tokenIndex + if buffer[position] != rune('v') { + goto l625 } position++ - goto l607 - l608: - position, tokenIndex = position607, tokenIndex607 - if buffer[position] != rune('S') { - goto l570 + goto l624 + l625: + position, tokenIndex = position624, tokenIndex624 + if buffer[position] != rune('V') { + goto l573 } position++ } - l607: + l624: { - position609, tokenIndex609 := position, tokenIndex - if buffer[position] != rune('r') { - goto l610 + position626, tokenIndex626 := position, tokenIndex + if buffer[position] != rune('l') { + goto l627 } position++ - goto l609 - l610: - position, tokenIndex = position609, tokenIndex609 - if buffer[position] != rune('R') { - goto l570 + goto l626 + l627: + position, tokenIndex = position626, tokenIndex626 + if buffer[position] != rune('L') { + goto l573 } position++ } - l609: - } - l572: - { - position611, tokenIndex611 := position, tokenIndex - if !_rules[ruleWS]() { - goto l611 - } - if buffer[position] != rune('#') { - goto l611 - } - position++ - if !_rules[ruleOffset]() { - goto l611 - } - goto l612 - l611: - position, tokenIndex = position611, tokenIndex611 + l626: } - l612: - add(ruleARMConstantTweak, position571) + l575: + add(ruleARMConstantTweak, position574) } return true - l570: - position, tokenIndex = position570, tokenIndex570 + l573: + position, tokenIndex = position573, tokenIndex573 return false }, - /* 43 ARMRegister <- <((('s' / 'S') ('p' / 'P')) / (('x' / 'w' / 'd' / 'q' / 's' / 'h' / 'b') [0-9] [0-9]?) / (('x' / 'X') ('z' / 'Z') ('r' / 'R')) / (('w' / 'W') ('z' / 'Z') ('r' / 'R')) / (('n' / 'N') ('z' / 'Z') ('c' / 'C') ('v' / 'V')) / ARMVectorRegister / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */ + /* 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? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */ func() bool { - position613, tokenIndex613 := position, tokenIndex + position628, tokenIndex628 := position, tokenIndex { - position614 := position + position629 := position { - position615, tokenIndex615 := position, tokenIndex + position630, tokenIndex630 := position, tokenIndex { - position617, tokenIndex617 := position, tokenIndex + position632, tokenIndex632 := position, tokenIndex if buffer[position] != rune('s') { - goto l618 + goto l633 } position++ - goto l617 - l618: - position, tokenIndex = position617, tokenIndex617 + goto l632 + l633: + position, tokenIndex = position632, tokenIndex632 if buffer[position] != rune('S') { - goto l616 + goto l631 } position++ } - l617: + l632: { - position619, tokenIndex619 := position, tokenIndex + position634, tokenIndex634 := position, tokenIndex if buffer[position] != rune('p') { - goto l620 + goto l635 } position++ - goto l619 - l620: - position, tokenIndex = position619, tokenIndex619 + goto l634 + l635: + position, tokenIndex = position634, tokenIndex634 if buffer[position] != rune('P') { - goto l616 + goto l631 } position++ } - l619: - goto l615 - l616: - position, tokenIndex = position615, tokenIndex615 + l634: + goto l630 + l631: + position, tokenIndex = position630, tokenIndex630 { - position622, tokenIndex622 := position, tokenIndex + position637, tokenIndex637 := position, tokenIndex if buffer[position] != rune('x') { - goto l623 + goto l638 } position++ - goto l622 - l623: - position, tokenIndex = position622, tokenIndex622 + goto l637 + l638: + position, tokenIndex = position637, tokenIndex637 if buffer[position] != rune('w') { - goto l624 + goto l639 } position++ - goto l622 - l624: - position, tokenIndex = position622, tokenIndex622 + goto l637 + l639: + position, tokenIndex = position637, tokenIndex637 if buffer[position] != rune('d') { - goto l625 + goto l640 } position++ - goto l622 - l625: - position, tokenIndex = position622, tokenIndex622 + goto l637 + l640: + position, tokenIndex = position637, tokenIndex637 if buffer[position] != rune('q') { - goto l626 + goto l641 } position++ - goto l622 - l626: - position, tokenIndex = position622, tokenIndex622 + goto l637 + l641: + position, tokenIndex = position637, tokenIndex637 if buffer[position] != rune('s') { - goto l627 + goto l642 } position++ - goto l622 - l627: - position, tokenIndex = position622, tokenIndex622 + goto l637 + l642: + position, tokenIndex = position637, tokenIndex637 if buffer[position] != rune('h') { - goto l628 + goto l643 } position++ - goto l622 - l628: - position, tokenIndex = position622, tokenIndex622 + goto l637 + l643: + position, tokenIndex = position637, tokenIndex637 if buffer[position] != rune('b') { - goto l621 + goto l636 } position++ } - l622: + l637: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l621 + goto l636 } position++ { - position629, tokenIndex629 := position, tokenIndex + position644, tokenIndex644 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l629 + goto l644 } position++ - goto l630 - l629: - position, tokenIndex = position629, tokenIndex629 + goto l645 + l644: + position, tokenIndex = position644, tokenIndex644 } - l630: - goto l615 - l621: - position, tokenIndex = position615, tokenIndex615 + l645: + goto l630 + l636: + position, tokenIndex = position630, tokenIndex630 { - position632, tokenIndex632 := position, tokenIndex + position647, tokenIndex647 := position, tokenIndex if buffer[position] != rune('x') { - goto l633 + goto l648 } position++ - goto l632 - l633: - position, tokenIndex = position632, tokenIndex632 + goto l647 + l648: + position, tokenIndex = position647, tokenIndex647 if buffer[position] != rune('X') { - goto l631 + goto l646 } position++ } - l632: + l647: { - position634, tokenIndex634 := position, tokenIndex + position649, tokenIndex649 := position, tokenIndex if buffer[position] != rune('z') { - goto l635 + goto l650 } position++ - goto l634 - l635: - position, tokenIndex = position634, tokenIndex634 + goto l649 + l650: + position, tokenIndex = position649, tokenIndex649 if buffer[position] != rune('Z') { - goto l631 + goto l646 } position++ } - l634: + l649: { - position636, tokenIndex636 := position, tokenIndex + position651, tokenIndex651 := position, tokenIndex if buffer[position] != rune('r') { - goto l637 + goto l652 } position++ - goto l636 - l637: - position, tokenIndex = position636, tokenIndex636 + goto l651 + l652: + position, tokenIndex = position651, tokenIndex651 if buffer[position] != rune('R') { - goto l631 + goto l646 } position++ } - l636: - goto l615 - l631: - position, tokenIndex = position615, tokenIndex615 + l651: + goto l630 + l646: + position, tokenIndex = position630, tokenIndex630 { - position639, tokenIndex639 := position, tokenIndex + position654, tokenIndex654 := position, tokenIndex if buffer[position] != rune('w') { - goto l640 + goto l655 } position++ - goto l639 - l640: - position, tokenIndex = position639, tokenIndex639 + goto l654 + l655: + position, tokenIndex = position654, tokenIndex654 if buffer[position] != rune('W') { - goto l638 + goto l653 } position++ } - l639: + l654: { - position641, tokenIndex641 := position, tokenIndex + position656, tokenIndex656 := position, tokenIndex if buffer[position] != rune('z') { - goto l642 + goto l657 } position++ - goto l641 - l642: - position, tokenIndex = position641, tokenIndex641 + goto l656 + l657: + position, tokenIndex = position656, tokenIndex656 if buffer[position] != rune('Z') { - goto l638 + goto l653 } position++ } - l641: + l656: { - position643, tokenIndex643 := position, tokenIndex + position658, tokenIndex658 := position, tokenIndex if buffer[position] != rune('r') { - goto l644 + goto l659 } position++ - goto l643 - l644: - position, tokenIndex = position643, tokenIndex643 + goto l658 + l659: + position, tokenIndex = position658, tokenIndex658 if buffer[position] != rune('R') { - goto l638 + goto l653 } position++ } - l643: - goto l615 - l638: - position, tokenIndex = position615, tokenIndex615 + l658: + goto l630 + l653: + position, tokenIndex = position630, tokenIndex630 { - position646, tokenIndex646 := position, tokenIndex + position661, tokenIndex661 := position, tokenIndex if buffer[position] != rune('n') { - goto l647 + goto l662 } position++ - goto l646 - l647: - position, tokenIndex = position646, tokenIndex646 + goto l661 + l662: + position, tokenIndex = position661, tokenIndex661 if buffer[position] != rune('N') { - goto l645 + goto l660 } position++ } - l646: + l661: { - position648, tokenIndex648 := position, tokenIndex + position663, tokenIndex663 := position, tokenIndex if buffer[position] != rune('z') { - goto l649 + goto l664 } position++ - goto l648 - l649: - position, tokenIndex = position648, tokenIndex648 + goto l663 + l664: + position, tokenIndex = position663, tokenIndex663 if buffer[position] != rune('Z') { - goto l645 + goto l660 } position++ } - l648: + l663: { - position650, tokenIndex650 := position, tokenIndex + position665, tokenIndex665 := position, tokenIndex if buffer[position] != rune('c') { - goto l651 + goto l666 } position++ - goto l650 - l651: - position, tokenIndex = position650, tokenIndex650 + goto l665 + l666: + position, tokenIndex = position665, tokenIndex665 if buffer[position] != rune('C') { - goto l645 + goto l660 } position++ } - l650: + l665: { - position652, tokenIndex652 := position, tokenIndex + position667, tokenIndex667 := position, tokenIndex if buffer[position] != rune('v') { - goto l653 + goto l668 } position++ - goto l652 - l653: - position, tokenIndex = position652, tokenIndex652 + goto l667 + l668: + position, tokenIndex = position667, tokenIndex667 if buffer[position] != rune('V') { - goto l645 + goto l660 } position++ } - l652: - goto l615 - l645: - position, tokenIndex = position615, tokenIndex615 + l667: + goto l630 + l660: + position, tokenIndex = position630, tokenIndex630 if !_rules[ruleARMVectorRegister]() { - goto l654 + goto l669 } - goto l615 - l654: - position, tokenIndex = position615, tokenIndex615 + goto l630 + l669: + position, tokenIndex = position630, tokenIndex630 + if !_rules[ruleSVE2PredicateRegister]() { + goto l670 + } + goto l630 + l670: + position, tokenIndex = position630, tokenIndex630 if buffer[position] != rune('{') { - goto l613 + goto l628 } position++ { - position655, tokenIndex655 := position, tokenIndex + position671, tokenIndex671 := position, tokenIndex if !_rules[ruleWS]() { - goto l655 + goto l671 } - goto l656 - l655: - position, tokenIndex = position655, tokenIndex655 + goto l672 + l671: + position, tokenIndex = position671, tokenIndex671 } - l656: + l672: if !_rules[ruleARMVectorRegister]() { - goto l613 + goto l628 } - l657: + l673: { - position658, tokenIndex658 := position, tokenIndex + position674, tokenIndex674 := position, tokenIndex if buffer[position] != rune(',') { - goto l658 + goto l674 } position++ { - position659, tokenIndex659 := position, tokenIndex + position675, tokenIndex675 := position, tokenIndex if !_rules[ruleWS]() { - goto l659 + goto l675 } - goto l660 - l659: - position, tokenIndex = position659, tokenIndex659 + goto l676 + l675: + position, tokenIndex = position675, tokenIndex675 } - l660: + l676: if !_rules[ruleARMVectorRegister]() { - goto l658 + goto l674 } - goto l657 - l658: - position, tokenIndex = position658, tokenIndex658 + goto l673 + l674: + position, tokenIndex = position674, tokenIndex674 } { - position661, tokenIndex661 := position, tokenIndex + position677, tokenIndex677 := position, tokenIndex if !_rules[ruleWS]() { - goto l661 + goto l677 } - goto l662 - l661: - position, tokenIndex = position661, tokenIndex661 + goto l678 + l677: + position, tokenIndex = position677, tokenIndex677 } - l662: + l678: if buffer[position] != rune('}') { - goto l613 + goto l628 } position++ { - position663, tokenIndex663 := position, tokenIndex + position679, tokenIndex679 := position, tokenIndex if buffer[position] != rune('[') { - goto l663 + goto l679 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l663 + goto l679 } position++ { - position665, tokenIndex665 := position, tokenIndex + position681, tokenIndex681 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l665 + goto l681 } position++ - goto l666 - l665: - position, tokenIndex = position665, tokenIndex665 + goto l682 + l681: + position, tokenIndex = position681, tokenIndex681 } - l666: + l682: if buffer[position] != rune(']') { - goto l663 + goto l679 } position++ - goto l664 - l663: - position, tokenIndex = position663, tokenIndex663 + goto l680 + l679: + position, tokenIndex = position679, tokenIndex679 } - l664: + l680: } - l615: - add(ruleARMRegister, position614) + l630: + add(ruleARMRegister, position629) } return true - l613: - position, tokenIndex = position613, tokenIndex613 + l628: + position, tokenIndex = position628, tokenIndex628 return false }, - /* 44 ARMVectorRegister <- <(('v' / 'V') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */ + /* 45 ARMVectorRegister <- <(('v' / 'z') [0-9] [0-9]? ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */ func() bool { - position667, tokenIndex667 := position, tokenIndex + position683, tokenIndex683 := position, tokenIndex { - position668 := position + position684 := position { - position669, tokenIndex669 := position, tokenIndex + position685, tokenIndex685 := position, tokenIndex if buffer[position] != rune('v') { - goto l670 + goto l686 } position++ - goto l669 - l670: - position, tokenIndex = position669, tokenIndex669 - if buffer[position] != rune('V') { - goto l667 + goto l685 + l686: + position, tokenIndex = position685, tokenIndex685 + if buffer[position] != rune('z') { + goto l683 } position++ } - l669: + l685: if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l667 + goto l683 } position++ { - position671, tokenIndex671 := position, tokenIndex + position687, tokenIndex687 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l671 + goto l687 } position++ - goto l672 - l671: - position, tokenIndex = position671, tokenIndex671 + goto l688 + l687: + position, tokenIndex = position687, tokenIndex687 } - l672: + l688: { - position673, tokenIndex673 := position, tokenIndex + position689, tokenIndex689 := position, tokenIndex if buffer[position] != rune('.') { - goto l673 + goto l689 } position++ - l675: + l691: { - position676, tokenIndex676 := position, tokenIndex + position692, tokenIndex692 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l676 + goto l692 } position++ - goto l675 - l676: - position, tokenIndex = position676, tokenIndex676 + goto l691 + l692: + position, tokenIndex = position692, tokenIndex692 } { - position677, tokenIndex677 := position, tokenIndex + position693, tokenIndex693 := position, tokenIndex if buffer[position] != rune('b') { - goto l678 + goto l694 } position++ - goto l677 - l678: - position, tokenIndex = position677, tokenIndex677 + goto l693 + l694: + position, tokenIndex = position693, tokenIndex693 if buffer[position] != rune('s') { - goto l679 + goto l695 } position++ - goto l677 - l679: - position, tokenIndex = position677, tokenIndex677 + goto l693 + l695: + position, tokenIndex = position693, tokenIndex693 if buffer[position] != rune('d') { - goto l680 + goto l696 } position++ - goto l677 - l680: - position, tokenIndex = position677, tokenIndex677 + goto l693 + l696: + position, tokenIndex = position693, tokenIndex693 if buffer[position] != rune('h') { - goto l681 + goto l697 } position++ - goto l677 - l681: - position, tokenIndex = position677, tokenIndex677 + goto l693 + l697: + position, tokenIndex = position693, tokenIndex693 if buffer[position] != rune('q') { - goto l673 + goto l689 } position++ } - l677: + l693: { - position682, tokenIndex682 := position, tokenIndex + position698, tokenIndex698 := position, tokenIndex if buffer[position] != rune('[') { - goto l682 + goto l698 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l682 + goto l698 } position++ { - position684, tokenIndex684 := position, tokenIndex + position700, tokenIndex700 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l684 + goto l700 } position++ - goto l685 - l684: - position, tokenIndex = position684, tokenIndex684 + goto l701 + l700: + position, tokenIndex = position700, tokenIndex700 } - l685: + l701: if buffer[position] != rune(']') { - goto l682 + goto l698 } position++ - goto l683 - l682: - position, tokenIndex = position682, tokenIndex682 + goto l699 + l698: + position, tokenIndex = position698, tokenIndex698 } - l683: - goto l674 - l673: - position, tokenIndex = position673, tokenIndex673 + l699: + goto l690 + l689: + position, tokenIndex = position689, tokenIndex689 + } + l690: + add(ruleARMVectorRegister, position684) + } + return true + l683: + position, tokenIndex = position683, tokenIndex683 + return false + }, + /* 46 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / 'z' / 'Z'))> */ + func() bool { + position702, tokenIndex702 := position, tokenIndex + { + position703 := position + { + position704, tokenIndex704 := position, tokenIndex + if buffer[position] != rune('p') { + goto l705 + } + position++ + goto l704 + l705: + position, tokenIndex = position704, tokenIndex704 + if buffer[position] != rune('P') { + goto l702 + } + position++ + } + l704: + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l702 + } + position++ + { + position706, tokenIndex706 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l706 + } + position++ + goto l707 + l706: + position, tokenIndex = position706, tokenIndex706 } - l674: - add(ruleARMVectorRegister, position668) + l707: + if buffer[position] != rune('/') { + goto l702 + } + position++ + { + position708, tokenIndex708 := position, tokenIndex + if buffer[position] != rune('m') { + goto l709 + } + position++ + goto l708 + l709: + position, tokenIndex = position708, tokenIndex708 + if buffer[position] != rune('M') { + goto l710 + } + position++ + goto l708 + l710: + position, tokenIndex = position708, tokenIndex708 + if buffer[position] != rune('z') { + goto l711 + } + position++ + goto l708 + l711: + position, tokenIndex = position708, tokenIndex708 + if buffer[position] != rune('Z') { + goto l702 + } + position++ + } + l708: + add(ruleSVE2PredicateRegister, position703) } return true - l667: - position, tokenIndex = position667, tokenIndex667 + l702: + position, tokenIndex = position702, tokenIndex702 return false }, - /* 45 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */ + /* 47 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */ func() bool { - position686, tokenIndex686 := position, tokenIndex + position712, tokenIndex712 := position, tokenIndex { - position687 := position + position713 := position { - position688, tokenIndex688 := position, tokenIndex + position714, tokenIndex714 := position, tokenIndex if !_rules[ruleSymbolRef]() { - goto l689 + goto l715 } if !_rules[ruleBaseIndexScale]() { - goto l689 + goto l715 } - goto l688 - l689: - position, tokenIndex = position688, tokenIndex688 + goto l714 + l715: + position, tokenIndex = position714, tokenIndex714 if !_rules[ruleSymbolRef]() { - goto l690 + goto l716 } - goto l688 - l690: - position, tokenIndex = position688, tokenIndex688 + goto l714 + l716: + position, tokenIndex = position714, tokenIndex714 if !_rules[ruleLow12BitsSymbolRef]() { - goto l691 + goto l717 } - goto l688 - l691: - position, tokenIndex = position688, tokenIndex688 - l693: + goto l714 + l717: + position, tokenIndex = position714, tokenIndex714 + l719: { - position694, tokenIndex694 := position, tokenIndex + position720, tokenIndex720 := position, tokenIndex if !_rules[ruleOffset]() { - goto l694 + goto l720 } - goto l693 - l694: - position, tokenIndex = position694, tokenIndex694 + goto l719 + l720: + position, tokenIndex = position720, tokenIndex720 } if !_rules[ruleBaseIndexScale]() { - goto l692 + goto l718 } - goto l688 - l692: - position, tokenIndex = position688, tokenIndex688 + goto l714 + l718: + position, tokenIndex = position714, tokenIndex714 if !_rules[ruleSegmentRegister]() { - goto l695 + goto l721 } if !_rules[ruleOffset]() { - goto l695 + goto l721 } if !_rules[ruleBaseIndexScale]() { - goto l695 + goto l721 } - goto l688 - l695: - position, tokenIndex = position688, tokenIndex688 + goto l714 + l721: + position, tokenIndex = position714, tokenIndex714 if !_rules[ruleSegmentRegister]() { - goto l696 + goto l722 } if !_rules[ruleBaseIndexScale]() { - goto l696 + goto l722 } - goto l688 - l696: - position, tokenIndex = position688, tokenIndex688 + goto l714 + l722: + position, tokenIndex = position714, tokenIndex714 if !_rules[ruleSegmentRegister]() { - goto l697 + goto l723 } if !_rules[ruleOffset]() { - goto l697 + goto l723 } - goto l688 - l697: - position, tokenIndex = position688, tokenIndex688 + goto l714 + l723: + position, tokenIndex = position714, tokenIndex714 if !_rules[ruleARMBaseIndexScale]() { - goto l698 + goto l724 } - goto l688 - l698: - position, tokenIndex = position688, tokenIndex688 + goto l714 + l724: + position, tokenIndex = position714, tokenIndex714 if !_rules[ruleBaseIndexScale]() { - goto l686 + goto l712 } } - l688: - add(ruleMemoryRef, position687) + l714: + add(ruleMemoryRef, position713) } return true - l686: - position, tokenIndex = position686, tokenIndex686 + l712: + position, tokenIndex = position712, tokenIndex712 return false }, - /* 46 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ + /* 48 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ func() bool { - position699, tokenIndex699 := position, tokenIndex + position725, tokenIndex725 := position, tokenIndex { - position700 := position + position726 := position { - position701, tokenIndex701 := position, tokenIndex - l703: + position727, tokenIndex727 := position, tokenIndex + l729: { - position704, tokenIndex704 := position, tokenIndex + position730, tokenIndex730 := position, tokenIndex if !_rules[ruleOffset]() { - goto l704 + goto l730 } - goto l703 - l704: - position, tokenIndex = position704, tokenIndex704 + goto l729 + l730: + position, tokenIndex = position730, tokenIndex730 } if buffer[position] != rune('+') { - goto l701 + goto l727 } position++ - goto l702 - l701: - position, tokenIndex = position701, tokenIndex701 + goto l728 + l727: + position, tokenIndex = position727, tokenIndex727 } - l702: + l728: { - position705, tokenIndex705 := position, tokenIndex + position731, tokenIndex731 := position, tokenIndex if !_rules[ruleLocalSymbol]() { - goto l706 + goto l732 } - goto l705 - l706: - position, tokenIndex = position705, tokenIndex705 + goto l731 + l732: + position, tokenIndex = position731, tokenIndex731 if !_rules[ruleSymbolName]() { - goto l699 + goto l725 } } - l705: - l707: + l731: + l733: { - position708, tokenIndex708 := position, tokenIndex + position734, tokenIndex734 := position, tokenIndex if !_rules[ruleOffset]() { - goto l708 + goto l734 } - goto l707 - l708: - position, tokenIndex = position708, tokenIndex708 + goto l733 + l734: + position, tokenIndex = position734, tokenIndex734 } { - position709, tokenIndex709 := position, tokenIndex + position735, tokenIndex735 := position, tokenIndex if buffer[position] != rune('@') { - goto l709 + goto l735 } position++ if !_rules[ruleSection]() { - goto l709 + goto l735 } - l711: + l737: { - position712, tokenIndex712 := position, tokenIndex + position738, tokenIndex738 := position, tokenIndex if !_rules[ruleOffset]() { - goto l712 + goto l738 } - goto l711 - l712: - position, tokenIndex = position712, tokenIndex712 + goto l737 + l738: + position, tokenIndex = position738, tokenIndex738 } - goto l710 - l709: - position, tokenIndex = position709, tokenIndex709 + goto l736 + l735: + position, tokenIndex = position735, tokenIndex735 } - l710: - add(ruleSymbolRef, position700) + l736: + add(ruleSymbolRef, position726) } return true - l699: - position, tokenIndex = position699, tokenIndex699 + l725: + position, tokenIndex = position725, tokenIndex725 return false }, - /* 47 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */ + /* 49 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */ func() bool { - position713, tokenIndex713 := position, tokenIndex + position739, tokenIndex739 := position, tokenIndex { - position714 := position + position740 := position if buffer[position] != rune(':') { - goto l713 + goto l739 } position++ { - position715, tokenIndex715 := position, tokenIndex + position741, tokenIndex741 := position, tokenIndex if buffer[position] != rune('l') { - goto l716 + goto l742 } position++ - goto l715 - l716: - position, tokenIndex = position715, tokenIndex715 + goto l741 + l742: + position, tokenIndex = position741, tokenIndex741 if buffer[position] != rune('L') { - goto l713 + goto l739 } position++ } - l715: + l741: { - position717, tokenIndex717 := position, tokenIndex + position743, tokenIndex743 := position, tokenIndex if buffer[position] != rune('o') { - goto l718 + goto l744 } position++ - goto l717 - l718: - position, tokenIndex = position717, tokenIndex717 + goto l743 + l744: + position, tokenIndex = position743, tokenIndex743 if buffer[position] != rune('O') { - goto l713 + goto l739 } position++ } - l717: + l743: if buffer[position] != rune('1') { - goto l713 + goto l739 } position++ if buffer[position] != rune('2') { - goto l713 + goto l739 } position++ if buffer[position] != rune(':') { - goto l713 + goto l739 } position++ { - position719, tokenIndex719 := position, tokenIndex + position745, tokenIndex745 := position, tokenIndex if !_rules[ruleLocalSymbol]() { - goto l720 + goto l746 } - goto l719 - l720: - position, tokenIndex = position719, tokenIndex719 + goto l745 + l746: + position, tokenIndex = position745, tokenIndex745 if !_rules[ruleSymbolName]() { - goto l713 + goto l739 } } - l719: + l745: { - position721, tokenIndex721 := position, tokenIndex + position747, tokenIndex747 := position, tokenIndex if !_rules[ruleOffset]() { - goto l721 + goto l747 } - goto l722 - l721: - position, tokenIndex = position721, tokenIndex721 + goto l748 + l747: + position, tokenIndex = position747, tokenIndex747 } - l722: - add(ruleLow12BitsSymbolRef, position714) + l748: + add(ruleLow12BitsSymbolRef, position740) } return true - l713: - position, tokenIndex = position713, tokenIndex713 + l739: + position, tokenIndex = position739, tokenIndex739 return false }, - /* 48 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */ + /* 50 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */ func() bool { - position723, tokenIndex723 := position, tokenIndex + position749, tokenIndex749 := position, tokenIndex { - position724 := position + position750 := position if buffer[position] != rune('[') { - goto l723 + goto l749 } position++ if !_rules[ruleARMRegister]() { - goto l723 + goto l749 } { - position725, tokenIndex725 := position, tokenIndex + position751, tokenIndex751 := position, tokenIndex if buffer[position] != rune(',') { - goto l725 + goto l751 } position++ { - position727, tokenIndex727 := position, tokenIndex + position753, tokenIndex753 := position, tokenIndex if !_rules[ruleWS]() { - goto l727 + goto l753 } - goto l728 - l727: - position, tokenIndex = position727, tokenIndex727 + goto l754 + l753: + position, tokenIndex = position753, tokenIndex753 } - l728: + l754: { - position729, tokenIndex729 := position, tokenIndex + position755, tokenIndex755 := position, tokenIndex if buffer[position] != rune('#') { - goto l730 + goto l756 } position++ if !_rules[ruleOffset]() { - goto l730 + goto l756 } { - position731, tokenIndex731 := position, tokenIndex + position757, tokenIndex757 := position, tokenIndex { - position733, tokenIndex733 := position, tokenIndex + position759, tokenIndex759 := position, tokenIndex if buffer[position] != rune('*') { - goto l734 + goto l760 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l734 + goto l760 } position++ - l735: + l761: { - position736, tokenIndex736 := position, tokenIndex + position762, tokenIndex762 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l736 + goto l762 } position++ - goto l735 - l736: - position, tokenIndex = position736, tokenIndex736 + goto l761 + l762: + position, tokenIndex = position762, tokenIndex762 } - goto l733 - l734: - position, tokenIndex = position733, tokenIndex733 + goto l759 + l760: + position, tokenIndex = position759, tokenIndex759 if buffer[position] != rune('*') { - goto l737 + goto l763 } position++ if buffer[position] != rune('(') { - goto l737 + goto l763 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l737 + goto l763 } position++ - l738: + l764: { - position739, tokenIndex739 := position, tokenIndex + position765, tokenIndex765 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l739 + goto l765 } position++ - goto l738 - l739: - position, tokenIndex = position739, tokenIndex739 + goto l764 + l765: + position, tokenIndex = position765, tokenIndex765 } if !_rules[ruleOperator]() { - goto l737 + goto l763 } if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l737 + goto l763 } position++ - l740: + l766: { - position741, tokenIndex741 := position, tokenIndex + position767, tokenIndex767 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l741 + goto l767 } position++ - goto l740 - l741: - position, tokenIndex = position741, tokenIndex741 + goto l766 + l767: + position, tokenIndex = position767, tokenIndex767 } if buffer[position] != rune(')') { - goto l737 + goto l763 } position++ - goto l733 - l737: - position, tokenIndex = position733, tokenIndex733 - l742: + goto l759 + l763: + position, tokenIndex = position759, tokenIndex759 + l768: { - position743, tokenIndex743 := position, tokenIndex + position769, tokenIndex769 := position, tokenIndex if buffer[position] != rune('+') { - goto l743 + goto l769 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l743 + goto l769 } position++ - l744: + l770: { - position745, tokenIndex745 := position, tokenIndex + position771, tokenIndex771 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l745 + goto l771 } position++ - goto l744 - l745: - position, tokenIndex = position745, tokenIndex745 + goto l770 + l771: + position, tokenIndex = position771, tokenIndex771 } - goto l742 - l743: - position, tokenIndex = position743, tokenIndex743 + goto l768 + l769: + position, tokenIndex = position769, tokenIndex769 } } - l733: - goto l732 + l759: + goto l758 - position, tokenIndex = position731, tokenIndex731 + position, tokenIndex = position757, tokenIndex757 } - l732: - goto l729 - l730: - position, tokenIndex = position729, tokenIndex729 + l758: + goto l755 + l756: + position, tokenIndex = position755, tokenIndex755 if !_rules[ruleARMGOTLow12]() { - goto l746 + goto l772 } - goto l729 - l746: - position, tokenIndex = position729, tokenIndex729 + goto l755 + l772: + position, tokenIndex = position755, tokenIndex755 if !_rules[ruleLow12BitsSymbolRef]() { - goto l747 + goto l773 } - goto l729 - l747: - position, tokenIndex = position729, tokenIndex729 + goto l755 + l773: + position, tokenIndex = position755, tokenIndex755 if !_rules[ruleARMRegister]() { - goto l725 + goto l751 } } - l729: + l755: { - position748, tokenIndex748 := position, tokenIndex + position774, tokenIndex774 := position, tokenIndex if buffer[position] != rune(',') { - goto l748 + goto l774 } position++ { - position750, tokenIndex750 := position, tokenIndex + position776, tokenIndex776 := position, tokenIndex if !_rules[ruleWS]() { - goto l750 + goto l776 } - goto l751 - l750: - position, tokenIndex = position750, tokenIndex750 + goto l777 + l776: + position, tokenIndex = position776, tokenIndex776 } - l751: + l777: if !_rules[ruleARMConstantTweak]() { - goto l748 + goto l774 } - goto l749 - l748: - position, tokenIndex = position748, tokenIndex748 + goto l775 + l774: + position, tokenIndex = position774, tokenIndex774 } - l749: - goto l726 - l725: - position, tokenIndex = position725, tokenIndex725 + l775: + goto l752 + l751: + position, tokenIndex = position751, tokenIndex751 } - l726: + l752: if buffer[position] != rune(']') { - goto l723 + goto l749 } position++ { - position752, tokenIndex752 := position, tokenIndex + position778, tokenIndex778 := position, tokenIndex if !_rules[ruleARMPostincrement]() { - goto l752 + goto l778 } - goto l753 - l752: - position, tokenIndex = position752, tokenIndex752 + goto l779 + l778: + position, tokenIndex = position778, tokenIndex778 } - l753: - add(ruleARMBaseIndexScale, position724) + l779: + add(ruleARMBaseIndexScale, position750) } return true - l723: - position, tokenIndex = position723, tokenIndex723 + l749: + position, tokenIndex = position749, tokenIndex749 return false }, - /* 49 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */ + /* 51 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */ func() bool { - position754, tokenIndex754 := position, tokenIndex + position780, tokenIndex780 := position, tokenIndex { - position755 := position + position781 := position if buffer[position] != rune(':') { - goto l754 + goto l780 } position++ { - position756, tokenIndex756 := position, tokenIndex + position782, tokenIndex782 := position, tokenIndex if buffer[position] != rune('g') { - goto l757 + goto l783 } position++ - goto l756 - l757: - position, tokenIndex = position756, tokenIndex756 + goto l782 + l783: + position, tokenIndex = position782, tokenIndex782 if buffer[position] != rune('G') { - goto l754 + goto l780 } position++ } - l756: + l782: { - position758, tokenIndex758 := position, tokenIndex + position784, tokenIndex784 := position, tokenIndex if buffer[position] != rune('o') { - goto l759 + goto l785 } position++ - goto l758 - l759: - position, tokenIndex = position758, tokenIndex758 + goto l784 + l785: + position, tokenIndex = position784, tokenIndex784 if buffer[position] != rune('O') { - goto l754 + goto l780 } position++ } - l758: + l784: { - position760, tokenIndex760 := position, tokenIndex + position786, tokenIndex786 := position, tokenIndex if buffer[position] != rune('t') { - goto l761 + goto l787 } position++ - goto l760 - l761: - position, tokenIndex = position760, tokenIndex760 + goto l786 + l787: + position, tokenIndex = position786, tokenIndex786 if buffer[position] != rune('T') { - goto l754 + goto l780 } position++ } - l760: + l786: if buffer[position] != rune('_') { - goto l754 + goto l780 } position++ { - position762, tokenIndex762 := position, tokenIndex + position788, tokenIndex788 := position, tokenIndex if buffer[position] != rune('l') { - goto l763 + goto l789 } position++ - goto l762 - l763: - position, tokenIndex = position762, tokenIndex762 + goto l788 + l789: + position, tokenIndex = position788, tokenIndex788 if buffer[position] != rune('L') { - goto l754 + goto l780 } position++ } - l762: + l788: { - position764, tokenIndex764 := position, tokenIndex + position790, tokenIndex790 := position, tokenIndex if buffer[position] != rune('o') { - goto l765 + goto l791 } position++ - goto l764 - l765: - position, tokenIndex = position764, tokenIndex764 + goto l790 + l791: + position, tokenIndex = position790, tokenIndex790 if buffer[position] != rune('O') { - goto l754 + goto l780 } position++ } - l764: + l790: if buffer[position] != rune('1') { - goto l754 + goto l780 } position++ if buffer[position] != rune('2') { - goto l754 + goto l780 } position++ if buffer[position] != rune(':') { - goto l754 + goto l780 } position++ if !_rules[ruleSymbolName]() { - goto l754 + goto l780 } - add(ruleARMGOTLow12, position755) + add(ruleARMGOTLow12, position781) } return true - l754: - position, tokenIndex = position754, tokenIndex754 + l780: + position, tokenIndex = position780, tokenIndex780 return false }, - /* 50 ARMPostincrement <- <'!'> */ + /* 52 ARMPostincrement <- <'!'> */ func() bool { - position766, tokenIndex766 := position, tokenIndex + position792, tokenIndex792 := position, tokenIndex { - position767 := position + position793 := position if buffer[position] != rune('!') { - goto l766 + goto l792 } position++ - add(ruleARMPostincrement, position767) + add(ruleARMPostincrement, position793) } return true - l766: - position, tokenIndex = position766, tokenIndex766 + l792: + position, tokenIndex = position792, tokenIndex792 return false }, - /* 51 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ + /* 53 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ func() bool { - position768, tokenIndex768 := position, tokenIndex + position794, tokenIndex794 := position, tokenIndex { - position769 := position + position795 := position if buffer[position] != rune('(') { - goto l768 + goto l794 } position++ { - position770, tokenIndex770 := position, tokenIndex + position796, tokenIndex796 := position, tokenIndex if !_rules[ruleRegisterOrConstant]() { - goto l770 + goto l796 } - goto l771 - l770: - position, tokenIndex = position770, tokenIndex770 + goto l797 + l796: + position, tokenIndex = position796, tokenIndex796 } - l771: + l797: { - position772, tokenIndex772 := position, tokenIndex + position798, tokenIndex798 := position, tokenIndex if !_rules[ruleWS]() { - goto l772 + goto l798 } - goto l773 - l772: - position, tokenIndex = position772, tokenIndex772 + goto l799 + l798: + position, tokenIndex = position798, tokenIndex798 } - l773: + l799: { - position774, tokenIndex774 := position, tokenIndex + position800, tokenIndex800 := position, tokenIndex if buffer[position] != rune(',') { - goto l774 + goto l800 } position++ { - position776, tokenIndex776 := position, tokenIndex + position802, tokenIndex802 := position, tokenIndex if !_rules[ruleWS]() { - goto l776 + goto l802 } - goto l777 - l776: - position, tokenIndex = position776, tokenIndex776 + goto l803 + l802: + position, tokenIndex = position802, tokenIndex802 } - l777: + l803: if !_rules[ruleRegisterOrConstant]() { - goto l774 + goto l800 } { - position778, tokenIndex778 := position, tokenIndex + position804, tokenIndex804 := position, tokenIndex if !_rules[ruleWS]() { - goto l778 + goto l804 } - goto l779 - l778: - position, tokenIndex = position778, tokenIndex778 + goto l805 + l804: + position, tokenIndex = position804, tokenIndex804 } - l779: + l805: { - position780, tokenIndex780 := position, tokenIndex + position806, tokenIndex806 := position, tokenIndex if buffer[position] != rune(',') { - goto l780 + goto l806 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l780 + goto l806 } position++ - l782: + l808: { - position783, tokenIndex783 := position, tokenIndex + position809, tokenIndex809 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l783 + goto l809 } position++ - goto l782 - l783: - position, tokenIndex = position783, tokenIndex783 + goto l808 + l809: + position, tokenIndex = position809, tokenIndex809 } - goto l781 - l780: - position, tokenIndex = position780, tokenIndex780 + goto l807 + l806: + position, tokenIndex = position806, tokenIndex806 } - l781: - goto l775 - l774: - position, tokenIndex = position774, tokenIndex774 + l807: + goto l801 + l800: + position, tokenIndex = position800, tokenIndex800 } - l775: + l801: if buffer[position] != rune(')') { - goto l768 + goto l794 } position++ - add(ruleBaseIndexScale, position769) + add(ruleBaseIndexScale, position795) } return true - l768: - position, tokenIndex = position768, tokenIndex768 + l794: + position, tokenIndex = position794, tokenIndex794 return false }, - /* 52 Operator <- <('+' / '-')> */ + /* 54 Operator <- <('+' / '-')> */ func() bool { - position784, tokenIndex784 := position, tokenIndex + position810, tokenIndex810 := position, tokenIndex { - position785 := position + position811 := position { - position786, tokenIndex786 := position, tokenIndex + position812, tokenIndex812 := position, tokenIndex if buffer[position] != rune('+') { - goto l787 + goto l813 } position++ - goto l786 - l787: - position, tokenIndex = position786, tokenIndex786 + goto l812 + l813: + position, tokenIndex = position812, tokenIndex812 if buffer[position] != rune('-') { - goto l784 + goto l810 } position++ } - l786: - add(ruleOperator, position785) + l812: + add(ruleOperator, position811) } return true - l784: - position, tokenIndex = position784, tokenIndex784 + l810: + position, tokenIndex = position810, tokenIndex810 return false }, - /* 53 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */ + /* 55 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */ func() bool { - position788, tokenIndex788 := position, tokenIndex + position814, tokenIndex814 := position, tokenIndex { - position789 := position + position815 := position { - position790, tokenIndex790 := position, tokenIndex + position816, tokenIndex816 := position, tokenIndex if buffer[position] != rune('+') { - goto l790 + goto l816 } position++ - goto l791 - l790: - position, tokenIndex = position790, tokenIndex790 + goto l817 + l816: + position, tokenIndex = position816, tokenIndex816 } - l791: + l817: { - position792, tokenIndex792 := position, tokenIndex + position818, tokenIndex818 := position, tokenIndex if buffer[position] != rune('-') { - goto l792 + goto l818 } position++ - goto l793 - l792: - position, tokenIndex = position792, tokenIndex792 + goto l819 + l818: + position, tokenIndex = position818, tokenIndex818 } - l793: + l819: { - position794, tokenIndex794 := position, tokenIndex + position820, tokenIndex820 := position, tokenIndex if buffer[position] != rune('0') { - goto l795 + goto l821 } position++ { - position796, tokenIndex796 := position, tokenIndex + position822, tokenIndex822 := position, tokenIndex if buffer[position] != rune('b') { - goto l797 + goto l823 } position++ - goto l796 - l797: - position, tokenIndex = position796, tokenIndex796 + goto l822 + l823: + position, tokenIndex = position822, tokenIndex822 if buffer[position] != rune('B') { - goto l795 + goto l821 } position++ } - l796: + l822: { - position800, tokenIndex800 := position, tokenIndex + position826, tokenIndex826 := position, tokenIndex if buffer[position] != rune('0') { - goto l801 + goto l827 } position++ - goto l800 - l801: - position, tokenIndex = position800, tokenIndex800 + goto l826 + l827: + position, tokenIndex = position826, tokenIndex826 if buffer[position] != rune('1') { - goto l795 + goto l821 } position++ } - l800: - l798: + l826: + l824: { - position799, tokenIndex799 := position, tokenIndex + position825, tokenIndex825 := position, tokenIndex { - position802, tokenIndex802 := position, tokenIndex + position828, tokenIndex828 := position, tokenIndex if buffer[position] != rune('0') { - goto l803 + goto l829 } position++ - goto l802 - l803: - position, tokenIndex = position802, tokenIndex802 + goto l828 + l829: + position, tokenIndex = position828, tokenIndex828 if buffer[position] != rune('1') { - goto l799 + goto l825 } position++ } - l802: - goto l798 - l799: - position, tokenIndex = position799, tokenIndex799 + l828: + goto l824 + l825: + position, tokenIndex = position825, tokenIndex825 } - goto l794 - l795: - position, tokenIndex = position794, tokenIndex794 + goto l820 + l821: + position, tokenIndex = position820, tokenIndex820 if buffer[position] != rune('0') { - goto l804 + goto l830 } position++ { - position805, tokenIndex805 := position, tokenIndex + position831, tokenIndex831 := position, tokenIndex if buffer[position] != rune('x') { - goto l806 + goto l832 } position++ - goto l805 - l806: - position, tokenIndex = position805, tokenIndex805 + goto l831 + l832: + position, tokenIndex = position831, tokenIndex831 if buffer[position] != rune('X') { - goto l804 + goto l830 } position++ } - l805: + l831: { - position809, tokenIndex809 := position, tokenIndex + position835, tokenIndex835 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l810 + goto l836 } position++ - goto l809 - l810: - position, tokenIndex = position809, tokenIndex809 + goto l835 + l836: + position, tokenIndex = position835, tokenIndex835 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l811 + goto l837 } position++ - goto l809 - l811: - position, tokenIndex = position809, tokenIndex809 + goto l835 + l837: + position, tokenIndex = position835, tokenIndex835 { - position812, tokenIndex812 := position, tokenIndex + position838, tokenIndex838 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l813 + goto l839 } position++ - goto l812 - l813: - position, tokenIndex = position812, tokenIndex812 + goto l838 + l839: + position, tokenIndex = position838, tokenIndex838 if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l804 + goto l830 } position++ } - l812: + l838: } - l809: - l807: + l835: + l833: { - position808, tokenIndex808 := position, tokenIndex + position834, tokenIndex834 := position, tokenIndex { - position814, tokenIndex814 := position, tokenIndex + position840, tokenIndex840 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l815 + goto l841 } position++ - goto l814 - l815: - position, tokenIndex = position814, tokenIndex814 + goto l840 + l841: + position, tokenIndex = position840, tokenIndex840 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l816 + goto l842 } position++ - goto l814 - l816: - position, tokenIndex = position814, tokenIndex814 + goto l840 + l842: + position, tokenIndex = position840, tokenIndex840 { - position817, tokenIndex817 := position, tokenIndex + position843, tokenIndex843 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l818 + goto l844 } position++ - goto l817 - l818: - position, tokenIndex = position817, tokenIndex817 + goto l843 + l844: + position, tokenIndex = position843, tokenIndex843 if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l808 + goto l834 } position++ } - l817: + l843: } - l814: - goto l807 - l808: - position, tokenIndex = position808, tokenIndex808 + l840: + goto l833 + l834: + position, tokenIndex = position834, tokenIndex834 } - goto l794 - l804: - position, tokenIndex = position794, tokenIndex794 + goto l820 + l830: + position, tokenIndex = position820, tokenIndex820 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l788 + goto l814 } position++ - l819: + l845: { - position820, tokenIndex820 := position, tokenIndex + position846, tokenIndex846 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l820 + goto l846 } position++ - goto l819 - l820: - position, tokenIndex = position820, tokenIndex820 + goto l845 + l846: + position, tokenIndex = position846, tokenIndex846 } } - l794: - add(ruleOffset, position789) + l820: + add(ruleOffset, position815) } return true - l788: - position, tokenIndex = position788, tokenIndex788 + l814: + position, tokenIndex = position814, tokenIndex814 return false }, - /* 54 Section <- <([a-z] / [A-Z] / '@')+> */ + /* 56 Section <- <([a-z] / [A-Z] / '@')+> */ func() bool { - position821, tokenIndex821 := position, tokenIndex + position847, tokenIndex847 := position, tokenIndex { - position822 := position + position848 := position { - position825, tokenIndex825 := position, tokenIndex + position851, tokenIndex851 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l826 + goto l852 } position++ - goto l825 - l826: - position, tokenIndex = position825, tokenIndex825 + goto l851 + l852: + position, tokenIndex = position851, tokenIndex851 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l827 + goto l853 } position++ - goto l825 - l827: - position, tokenIndex = position825, tokenIndex825 + goto l851 + l853: + position, tokenIndex = position851, tokenIndex851 if buffer[position] != rune('@') { - goto l821 + goto l847 } position++ } - l825: - l823: + l851: + l849: { - position824, tokenIndex824 := position, tokenIndex + position850, tokenIndex850 := position, tokenIndex { - position828, tokenIndex828 := position, tokenIndex + position854, tokenIndex854 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l829 + goto l855 } position++ - goto l828 - l829: - position, tokenIndex = position828, tokenIndex828 + goto l854 + l855: + position, tokenIndex = position854, tokenIndex854 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l830 + goto l856 } position++ - goto l828 - l830: - position, tokenIndex = position828, tokenIndex828 + goto l854 + l856: + position, tokenIndex = position854, tokenIndex854 if buffer[position] != rune('@') { - goto l824 + goto l850 } position++ } - l828: - goto l823 - l824: - position, tokenIndex = position824, tokenIndex824 + l854: + goto l849 + l850: + position, tokenIndex = position850, tokenIndex850 } - add(ruleSection, position822) + add(ruleSection, position848) } return true - l821: - position, tokenIndex = position821, tokenIndex821 + l847: + position, tokenIndex = position847, tokenIndex847 return false }, - /* 55 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ + /* 57 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ func() bool { - position831, tokenIndex831 := position, tokenIndex + position857, tokenIndex857 := position, tokenIndex { - position832 := position + position858 := position if buffer[position] != rune('%') { - goto l831 + goto l857 } position++ { - position833, tokenIndex833 := position, tokenIndex + position859, tokenIndex859 := position, tokenIndex if c := buffer[position]; c < rune('c') || c > rune('g') { - goto l834 + goto l860 } position++ - goto l833 - l834: - position, tokenIndex = position833, tokenIndex833 + goto l859 + l860: + position, tokenIndex = position859, tokenIndex859 if buffer[position] != rune('s') { - goto l831 + goto l857 } position++ } - l833: + l859: if buffer[position] != rune('s') { - goto l831 + goto l857 } position++ if buffer[position] != rune(':') { - goto l831 + goto l857 } position++ - add(ruleSegmentRegister, position832) + add(ruleSegmentRegister, position858) } return true - l831: - position, tokenIndex = position831, tokenIndex831 + l857: + position, tokenIndex = position857, tokenIndex857 return false }, } diff --git a/src/util/fipstools/delocate/testdata/aarch64-Basic/in.s b/src/util/fipstools/delocate/testdata/aarch64-Basic/in.s index 8b45e25..b21ebcb 100644 --- a/src/util/fipstools/delocate/testdata/aarch64-Basic/in.s +++ b/src/util/fipstools/delocate/testdata/aarch64-Basic/in.s @@ -78,6 +78,9 @@ foo: add w0, w1, b2, sxtw add w0, w1, b2, sxtx + // Aarch64 SVE2 added these forms: + ld1d { z1.d }, p0/z, [x13, x11, lsl #3] + ld1b { z11.b }, p15/z, [x10, #1, mul vl] local_function: diff --git a/src/util/fipstools/delocate/testdata/aarch64-Basic/out.s b/src/util/fipstools/delocate/testdata/aarch64-Basic/out.s index 852312b..4c03265 100644 --- a/src/util/fipstools/delocate/testdata/aarch64-Basic/out.s +++ b/src/util/fipstools/delocate/testdata/aarch64-Basic/out.s @@ -125,6 +125,9 @@ foo: add w0, w1, b2, sxtw add w0, w1, b2, sxtx + // Aarch64 SVE2 added these forms: + ld1d { z1.d }, p0/z, [x13, x11, lsl #3] + ld1b { z11.b }, p15/z, [x10, #1, mul vl] .Llocal_function_local_target: local_function: diff --git a/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s b/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s index a00a691..3b7a1ed 100644 --- a/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s +++ b/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s @@ -65,4 +65,7 @@ bar: cmpq foo@GOTPCREL(%rip), %rax cmpq %rax, foo@GOTPCREL(%rip) + # With -mcmodel=medium, the code may load the address of the GOT directly. + leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx + .comm foobar,64,32 diff --git a/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s b/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s index f118e4f..ae47e41 100644 --- a/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s +++ b/src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s @@ -268,6 +268,11 @@ bar: popq %rbx leaq 128(%rsp), %rsp + # With -mcmodel=medium, the code may load the address of the GOT directly. +# WAS leaq _GLOBAL_OFFSET_TABLE_(%rip), %rcx + leaq .Lboringssl_got_delta(%rip), %rcx + addq .Lboringssl_got_delta(%rip), %rcx + .comm foobar,64,32 .text .loc 1 2 0 @@ -302,6 +307,8 @@ OPENSSL_ia32cap_get: .size OPENSSL_ia32cap_addr_delta, 8 OPENSSL_ia32cap_addr_delta: .quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta +.Lboringssl_got_delta: + .quad _GLOBAL_OFFSET_TABLE_-.Lboringssl_got_delta .type BORINGSSL_bcm_text_hash, @object .size BORINGSSL_bcm_text_hash, 32 BORINGSSL_bcm_text_hash: |