aboutsummaryrefslogtreecommitdiff
path: root/src/util/fipstools/delocate
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/fipstools/delocate')
-rw-r--r--src/util/fipstools/delocate/delocate.go16
-rw-r--r--src/util/fipstools/delocate/delocate.peg14
-rw-r--r--src/util/fipstools/delocate/delocate.peg.go3111
-rw-r--r--src/util/fipstools/delocate/testdata/aarch64-Basic/in.s3
-rw-r--r--src/util/fipstools/delocate/testdata/aarch64-Basic/out.s3
-rw-r--r--src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s3
-rw-r--r--src/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s7
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: