Better handle AVX-512 assembly syntax. https://boringssl-review.googlesource.com/c/boringssl/+/24945 was mistaken in that it thought that these AVX-512 assembly extensions were an instruction-level thing, whereas they actually appear to be an argument-level modifier. This change parses them as such and unbreaks some AVX-512 instructions that can be emitted by compilers with certain combinations of flags. Change-Id: I9af5a4fec21f55d3198a248c9175252e229c355a Reviewed-on: https://boringssl-review.googlesource.com/c/32484 Commit-Queue: Adam Langley <agl@google.com> Commit-Queue: David Benjamin <davidben@google.com> Reviewed-by: David Benjamin <davidben@google.com> CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg index 3dcead2..82a3cb5 100644 --- a/util/fipstools/delocate/delocate.peg +++ b/util/fipstools/delocate/delocate.peg
@@ -55,9 +55,10 @@ LocalSymbol <- '.L' [[A-Z.0-9$_]]+ LocalLabel <- [0-9][0-9$]* LocalLabelRef <- [0-9][0-9$]*[bf] -Instruction <- InstructionName (WS InstructionArg ((WS? ',' WS?) InstructionArg)*)? (WS? '{' InstructionArg '}')* +Instruction <- InstructionName (WS InstructionArg ((WS? ',' WS?) InstructionArg)*)? InstructionName <- [[A-Z]][[A-Z0-9]]* [.+\-]? -InstructionArg <- IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) +InstructionArg <- IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) AVX512Token* +AVX512Token <- WS? '{' '%'? [0-9a-z]* '}' TOCRefHigh <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@ha" TOCRefLow <- '.TOC.-' ('0b' / ('.L' [a-zA-Z_0-9]+)) "@l" IndirectionIndicator <- '*'
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go index f0ad78f..e147943 100644 --- a/util/fipstools/delocate/delocate.peg.go +++ b/util/fipstools/delocate/delocate.peg.go
@@ -44,6 +44,7 @@ ruleInstruction ruleInstructionName ruleInstructionArg + ruleAVX512Token ruleTOCRefHigh ruleTOCRefLow ruleIndirectionIndicator @@ -87,6 +88,7 @@ "Instruction", "InstructionName", "InstructionArg", + "AVX512Token", "TOCRefHigh", "TOCRefLow", "IndirectionIndicator", @@ -212,7 +214,7 @@ type Asm struct { Buffer string buffer []rune - rules [40]func() bool + rules [41]func() bool parse func(rule ...int) error reset func() Pretty bool @@ -2706,7 +2708,7 @@ position, tokenIndex = position323, tokenIndex323 return false }, - /* 25 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)? (WS? '{' InstructionArg '}')*)> */ + /* 25 Instruction <- <(InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */ func() bool { position331, tokenIndex331 := position, tokenIndex { @@ -2761,34 +2763,6 @@ position, tokenIndex = position333, tokenIndex333 } l334: - l341: - { - position342, tokenIndex342 := position, tokenIndex - { - position343, tokenIndex343 := position, tokenIndex - if !_rules[ruleWS]() { - goto l343 - } - goto l344 - l343: - position, tokenIndex = position343, tokenIndex343 - } - l344: - if buffer[position] != rune('{') { - goto l342 - } - position++ - if !_rules[ruleInstructionArg]() { - goto l342 - } - if buffer[position] != rune('}') { - goto l342 - } - position++ - goto l341 - l342: - position, tokenIndex = position342, tokenIndex342 - } add(ruleInstruction, position332) } return true @@ -2798,762 +2772,784 @@ }, /* 26 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */ func() bool { - position345, tokenIndex345 := position, tokenIndex + position341, tokenIndex341 := position, tokenIndex { - position346 := position + position342 := position { - position347, tokenIndex347 := position, tokenIndex + position343, tokenIndex343 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l348 + goto l344 } position++ - goto l347 - l348: - position, tokenIndex = position347, tokenIndex347 + goto l343 + l344: + position, tokenIndex = position343, tokenIndex343 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l345 + goto l341 } position++ } - l347: - l349: + l343: + l345: { - position350, tokenIndex350 := position, tokenIndex + position346, tokenIndex346 := position, tokenIndex { - position351, tokenIndex351 := position, tokenIndex + position347, tokenIndex347 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l352 + goto l348 } position++ - goto l351 - l352: - position, tokenIndex = position351, tokenIndex351 + goto l347 + l348: + position, tokenIndex = position347, tokenIndex347 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l353 + goto l349 } position++ - goto l351 - l353: - position, tokenIndex = position351, tokenIndex351 + goto l347 + l349: + position, tokenIndex = position347, tokenIndex347 { - position354, tokenIndex354 := position, tokenIndex + position350, tokenIndex350 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l355 + goto l351 } position++ - goto l354 - l355: - position, tokenIndex = position354, tokenIndex354 + goto l350 + l351: + position, tokenIndex = position350, tokenIndex350 if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l350 + goto l346 } position++ } - l354: + l350: } - l351: - goto l349 - l350: - position, tokenIndex = position350, tokenIndex350 + l347: + goto l345 + l346: + position, tokenIndex = position346, tokenIndex346 } { - position356, tokenIndex356 := position, tokenIndex + position352, tokenIndex352 := position, tokenIndex { - position358, tokenIndex358 := position, tokenIndex + position354, tokenIndex354 := position, tokenIndex if buffer[position] != rune('.') { - goto l359 + goto l355 } position++ - goto l358 - l359: - position, tokenIndex = position358, tokenIndex358 + goto l354 + l355: + position, tokenIndex = position354, tokenIndex354 if buffer[position] != rune('+') { - goto l360 - } - position++ - goto l358 - l360: - position, tokenIndex = position358, tokenIndex358 - if buffer[position] != rune('-') { goto l356 } position++ + goto l354 + l356: + position, tokenIndex = position354, tokenIndex354 + if buffer[position] != rune('-') { + goto l352 + } + position++ } - l358: - goto l357 - l356: - position, tokenIndex = position356, tokenIndex356 + l354: + goto l353 + l352: + position, tokenIndex = position352, tokenIndex352 } - l357: - add(ruleInstructionName, position346) + l353: + add(ruleInstructionName, position342) } return true - l345: - position, tokenIndex = position345, tokenIndex345 + l341: + position, tokenIndex = position341, tokenIndex341 return false }, - /* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef))> */ + /* 27 InstructionArg <- <(IndirectionIndicator? (RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / MemoryRef) AVX512Token*)> */ func() bool { - position361, tokenIndex361 := position, tokenIndex + position357, tokenIndex357 := position, tokenIndex { - position362 := position + position358 := position { - position363, tokenIndex363 := position, tokenIndex + position359, tokenIndex359 := position, tokenIndex if !_rules[ruleIndirectionIndicator]() { + goto l359 + } + goto l360 + l359: + position, tokenIndex = position359, tokenIndex359 + } + l360: + { + position361, tokenIndex361 := position, tokenIndex + if !_rules[ruleRegisterOrConstant]() { + goto l362 + } + goto l361 + l362: + position, tokenIndex = position361, tokenIndex361 + if !_rules[ruleLocalLabelRef]() { goto l363 } - goto l364 + goto l361 l363: - position, tokenIndex = position363, tokenIndex363 - } - l364: - { - position365, tokenIndex365 := position, tokenIndex - if !_rules[ruleRegisterOrConstant]() { - goto l366 + position, tokenIndex = position361, tokenIndex361 + if !_rules[ruleTOCRefHigh]() { + goto l364 } - goto l365 - l366: - position, tokenIndex = position365, tokenIndex365 - if !_rules[ruleLocalLabelRef]() { + goto l361 + l364: + position, tokenIndex = position361, tokenIndex361 + if !_rules[ruleTOCRefLow]() { + goto l365 + } + goto l361 + l365: + position, tokenIndex = position361, tokenIndex361 + if !_rules[ruleMemoryRef]() { + goto l357 + } + } + l361: + l366: + { + position367, tokenIndex367 := position, tokenIndex + if !_rules[ruleAVX512Token]() { goto l367 } - goto l365 + goto l366 l367: - position, tokenIndex = position365, tokenIndex365 - if !_rules[ruleTOCRefHigh]() { - goto l368 - } - goto l365 - l368: - position, tokenIndex = position365, tokenIndex365 - if !_rules[ruleTOCRefLow]() { - goto l369 - } - goto l365 - l369: - position, tokenIndex = position365, tokenIndex365 - if !_rules[ruleMemoryRef]() { - goto l361 - } + position, tokenIndex = position367, tokenIndex367 } - l365: - add(ruleInstructionArg, position362) + add(ruleInstructionArg, position358) } return true - l361: - position, tokenIndex = position361, tokenIndex361 + l357: + position, tokenIndex = position357, tokenIndex357 return false }, - /* 28 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */ + /* 28 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */ func() bool { - position370, tokenIndex370 := position, tokenIndex + position368, tokenIndex368 := position, tokenIndex { - position371 := position - if buffer[position] != rune('.') { - goto l370 + position369 := position + { + position370, tokenIndex370 := position, tokenIndex + if !_rules[ruleWS]() { + goto l370 + } + goto l371 + l370: + position, tokenIndex = position370, tokenIndex370 } - position++ - if buffer[position] != rune('T') { - goto l370 - } - position++ - if buffer[position] != rune('O') { - goto l370 - } - position++ - if buffer[position] != rune('C') { - goto l370 - } - position++ - if buffer[position] != rune('.') { - goto l370 - } - position++ - if buffer[position] != rune('-') { - goto l370 + l371: + if buffer[position] != rune('{') { + goto l368 } position++ { position372, tokenIndex372 := position, tokenIndex - if buffer[position] != rune('0') { - goto l373 + if buffer[position] != rune('%') { + goto l372 } position++ - if buffer[position] != rune('b') { - goto l373 - } - position++ - goto l372 - l373: + goto l373 + l372: position, tokenIndex = position372, tokenIndex372 - if buffer[position] != rune('.') { - goto l370 - } - position++ - if buffer[position] != rune('L') { - goto l370 - } - position++ + } + l373: + l374: + { + position375, tokenIndex375 := position, tokenIndex { position376, tokenIndex376 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('z') { + if c := buffer[position]; c < rune('0') || c > rune('9') { goto l377 } position++ goto l376 l377: position, tokenIndex = position376, tokenIndex376 - if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l378 - } - position++ - goto l376 - l378: - position, tokenIndex = position376, tokenIndex376 - if buffer[position] != rune('_') { - goto l379 - } - position++ - goto l376 - l379: - position, tokenIndex = position376, tokenIndex376 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l370 + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l375 } position++ } l376: - l374: - { - position375, tokenIndex375 := position, tokenIndex - { - position380, tokenIndex380 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l381 - } - position++ - goto l380 - l381: - position, tokenIndex = position380, tokenIndex380 - if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l382 - } - position++ - goto l380 - l382: - position, tokenIndex = position380, tokenIndex380 - if buffer[position] != rune('_') { - goto l383 - } - position++ - goto l380 - l383: - position, tokenIndex = position380, tokenIndex380 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l375 - } - position++ - } - l380: - goto l374 - l375: - position, tokenIndex = position375, tokenIndex375 - } + goto l374 + l375: + position, tokenIndex = position375, tokenIndex375 } - l372: - if buffer[position] != rune('@') { - goto l370 + if buffer[position] != rune('}') { + goto l368 } position++ - { - position384, tokenIndex384 := position, tokenIndex - if buffer[position] != rune('h') { - goto l385 - } - position++ - goto l384 - l385: - position, tokenIndex = position384, tokenIndex384 - if buffer[position] != rune('H') { - goto l370 - } - position++ - } - l384: - { - position386, tokenIndex386 := position, tokenIndex - if buffer[position] != rune('a') { - goto l387 - } - position++ - goto l386 - l387: - position, tokenIndex = position386, tokenIndex386 - if buffer[position] != rune('A') { - goto l370 - } - position++ - } - l386: - add(ruleTOCRefHigh, position371) + add(ruleAVX512Token, position369) } return true - l370: - position, tokenIndex = position370, tokenIndex370 + l368: + position, tokenIndex = position368, tokenIndex368 return false }, - /* 29 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */ + /* 29 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */ func() bool { - position388, tokenIndex388 := position, tokenIndex + position378, tokenIndex378 := position, tokenIndex { - position389 := position + position379 := position if buffer[position] != rune('.') { - goto l388 + goto l378 } position++ if buffer[position] != rune('T') { - goto l388 + goto l378 } position++ if buffer[position] != rune('O') { - goto l388 + goto l378 } position++ if buffer[position] != rune('C') { - goto l388 + goto l378 } position++ if buffer[position] != rune('.') { - goto l388 + goto l378 } position++ if buffer[position] != rune('-') { - goto l388 + goto l378 } position++ { - position390, tokenIndex390 := position, tokenIndex + position380, tokenIndex380 := position, tokenIndex if buffer[position] != rune('0') { - goto l391 + goto l381 } position++ if buffer[position] != rune('b') { - goto l391 + goto l381 } position++ - goto l390 - l391: - position, tokenIndex = position390, tokenIndex390 + goto l380 + l381: + position, tokenIndex = position380, tokenIndex380 if buffer[position] != rune('.') { - goto l388 + goto l378 } position++ if buffer[position] != rune('L') { - goto l388 + goto l378 } position++ { - position394, tokenIndex394 := position, tokenIndex + position384, tokenIndex384 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l395 + goto l385 } position++ - goto l394 - l395: - position, tokenIndex = position394, tokenIndex394 + goto l384 + l385: + position, tokenIndex = position384, tokenIndex384 if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l386 + } + position++ + goto l384 + l386: + position, tokenIndex = position384, tokenIndex384 + if buffer[position] != rune('_') { + goto l387 + } + position++ + goto l384 + l387: + position, tokenIndex = position384, tokenIndex384 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l378 + } + position++ + } + l384: + l382: + { + position383, tokenIndex383 := position, tokenIndex + { + position388, tokenIndex388 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l389 + } + position++ + goto l388 + l389: + position, tokenIndex = position388, tokenIndex388 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l390 + } + position++ + goto l388 + l390: + position, tokenIndex = position388, tokenIndex388 + if buffer[position] != rune('_') { + goto l391 + } + position++ + goto l388 + l391: + position, tokenIndex = position388, tokenIndex388 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l383 + } + position++ + } + l388: + goto l382 + l383: + position, tokenIndex = position383, tokenIndex383 + } + } + l380: + if buffer[position] != rune('@') { + goto l378 + } + position++ + { + position392, tokenIndex392 := position, tokenIndex + if buffer[position] != rune('h') { + goto l393 + } + position++ + goto l392 + l393: + position, tokenIndex = position392, tokenIndex392 + if buffer[position] != rune('H') { + goto l378 + } + position++ + } + l392: + { + position394, tokenIndex394 := position, tokenIndex + if buffer[position] != rune('a') { + goto l395 + } + position++ + goto l394 + l395: + position, tokenIndex = position394, tokenIndex394 + if buffer[position] != rune('A') { + goto l378 + } + position++ + } + l394: + add(ruleTOCRefHigh, position379) + } + return true + l378: + position, tokenIndex = position378, tokenIndex378 + return false + }, + /* 30 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */ + func() bool { + position396, tokenIndex396 := position, tokenIndex + { + position397 := position + if buffer[position] != rune('.') { + goto l396 + } + position++ + if buffer[position] != rune('T') { + goto l396 + } + position++ + if buffer[position] != rune('O') { + goto l396 + } + position++ + if buffer[position] != rune('C') { + goto l396 + } + position++ + if buffer[position] != rune('.') { + goto l396 + } + position++ + if buffer[position] != rune('-') { + goto l396 + } + position++ + { + position398, tokenIndex398 := position, tokenIndex + if buffer[position] != rune('0') { + goto l399 + } + position++ + if buffer[position] != rune('b') { + goto l399 + } + position++ + goto l398 + l399: + position, tokenIndex = position398, tokenIndex398 + if buffer[position] != rune('.') { + goto l396 + } + position++ + if buffer[position] != rune('L') { + goto l396 + } + position++ + { + position402, tokenIndex402 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l403 + } + position++ + goto l402 + l403: + position, tokenIndex = position402, tokenIndex402 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l404 + } + position++ + goto l402 + l404: + position, tokenIndex = position402, tokenIndex402 + if buffer[position] != rune('_') { + goto l405 + } + position++ + goto l402 + l405: + position, tokenIndex = position402, tokenIndex402 + if c := buffer[position]; c < rune('0') || c > rune('9') { goto l396 } position++ - goto l394 - l396: - position, tokenIndex = position394, tokenIndex394 - if buffer[position] != rune('_') { - goto l397 - } - position++ - goto l394 - l397: - position, tokenIndex = position394, tokenIndex394 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l388 - } - position++ } - l394: - l392: + l402: + l400: { - position393, tokenIndex393 := position, tokenIndex + position401, tokenIndex401 := position, tokenIndex { - position398, tokenIndex398 := position, tokenIndex + position406, tokenIndex406 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l399 + goto l407 } position++ - goto l398 - l399: - position, tokenIndex = position398, tokenIndex398 + goto l406 + l407: + position, tokenIndex = position406, tokenIndex406 if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l400 + goto l408 } position++ - goto l398 - l400: - position, tokenIndex = position398, tokenIndex398 + goto l406 + l408: + position, tokenIndex = position406, tokenIndex406 if buffer[position] != rune('_') { + goto l409 + } + position++ + goto l406 + l409: + position, tokenIndex = position406, tokenIndex406 + if c := buffer[position]; c < rune('0') || c > rune('9') { goto l401 } position++ - goto l398 - l401: - position, tokenIndex = position398, tokenIndex398 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l393 - } - position++ } - l398: - goto l392 - l393: - position, tokenIndex = position393, tokenIndex393 + l406: + goto l400 + l401: + position, tokenIndex = position401, tokenIndex401 } } - l390: + l398: if buffer[position] != rune('@') { - goto l388 + goto l396 } position++ { - position402, tokenIndex402 := position, tokenIndex + position410, tokenIndex410 := position, tokenIndex if buffer[position] != rune('l') { - goto l403 + goto l411 } position++ - goto l402 - l403: - position, tokenIndex = position402, tokenIndex402 + goto l410 + l411: + position, tokenIndex = position410, tokenIndex410 if buffer[position] != rune('L') { - goto l388 + goto l396 } position++ } - l402: - add(ruleTOCRefLow, position389) + l410: + add(ruleTOCRefLow, position397) } return true - l388: - position, tokenIndex = position388, tokenIndex388 + l396: + position, tokenIndex = position396, tokenIndex396 return false }, - /* 30 IndirectionIndicator <- <'*'> */ + /* 31 IndirectionIndicator <- <'*'> */ func() bool { - position404, tokenIndex404 := position, tokenIndex + position412, tokenIndex412 := position, tokenIndex { - position405 := position + position413 := position if buffer[position] != rune('*') { - goto l404 + goto l412 } position++ - add(ruleIndirectionIndicator, position405) + add(ruleIndirectionIndicator, position413) } return true - l404: - position, tokenIndex = position404, tokenIndex404 + l412: + position, tokenIndex = position412, tokenIndex412 return false }, - /* 31 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ + /* 32 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset))) !('f' / 'b' / ':' / '(' / '+' / '-'))> */ func() bool { - position406, tokenIndex406 := position, tokenIndex + position414, tokenIndex414 := position, tokenIndex { - position407 := position + position415 := position { - position408, tokenIndex408 := position, tokenIndex + position416, tokenIndex416 := position, tokenIndex if buffer[position] != rune('%') { - goto l409 + goto l417 } position++ { - position410, tokenIndex410 := position, tokenIndex + position418, tokenIndex418 := position, tokenIndex if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l411 - } - position++ - goto l410 - l411: - position, tokenIndex = position410, tokenIndex410 - if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l409 - } - position++ - } - l410: - l412: - { - position413, tokenIndex413 := position, tokenIndex - { - position414, tokenIndex414 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l415 - } - position++ - goto l414 - l415: - position, tokenIndex = position414, tokenIndex414 - if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l416 - } - position++ - goto l414 - l416: - position, tokenIndex = position414, tokenIndex414 - { - position417, tokenIndex417 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l418 - } - position++ - goto l417 - l418: - position, tokenIndex = position417, tokenIndex417 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l413 - } - position++ - } - l417: - } - l414: - goto l412 - l413: - position, tokenIndex = position413, tokenIndex413 - } - goto l408 - l409: - position, tokenIndex = position408, tokenIndex408 - { - position419, tokenIndex419 := position, tokenIndex - if buffer[position] != rune('$') { goto l419 } position++ - goto l420 + goto l418 l419: - position, tokenIndex = position419, tokenIndex419 + position, tokenIndex = position418, tokenIndex418 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l417 + } + position++ } + l418: l420: { position421, tokenIndex421 := position, tokenIndex - if !_rules[ruleOffset]() { + { + position422, tokenIndex422 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l423 + } + position++ goto l422 - } - if !_rules[ruleOffset]() { + l423: + position, tokenIndex = position422, tokenIndex422 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l424 + } + position++ goto l422 + l424: + position, tokenIndex = position422, tokenIndex422 + { + position425, tokenIndex425 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l426 + } + position++ + goto l425 + l426: + position, tokenIndex = position425, tokenIndex425 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l421 + } + position++ + } + l425: } - goto l421 l422: + goto l420 + l421: position, tokenIndex = position421, tokenIndex421 - if !_rules[ruleOffset]() { - goto l406 - } } - l421: - } - l408: - { - position423, tokenIndex423 := position, tokenIndex + goto l416 + l417: + position, tokenIndex = position416, tokenIndex416 { - position424, tokenIndex424 := position, tokenIndex - if buffer[position] != rune('f') { - goto l425 - } - position++ - goto l424 - l425: - position, tokenIndex = position424, tokenIndex424 - if buffer[position] != rune('b') { - goto l426 - } - position++ - goto l424 - l426: - position, tokenIndex = position424, tokenIndex424 - if buffer[position] != rune(':') { + position427, tokenIndex427 := position, tokenIndex + if buffer[position] != rune('$') { goto l427 } position++ - goto l424 + goto l428 l427: - position, tokenIndex = position424, tokenIndex424 - if buffer[position] != rune('(') { - goto l428 - } - position++ - goto l424 - l428: - position, tokenIndex = position424, tokenIndex424 - if buffer[position] != rune('+') { - goto l429 - } - position++ - goto l424 - l429: - position, tokenIndex = position424, tokenIndex424 - if buffer[position] != rune('-') { - goto l423 - } - position++ + position, tokenIndex = position427, tokenIndex427 } - l424: - goto l406 - l423: - position, tokenIndex = position423, tokenIndex423 - } - add(ruleRegisterOrConstant, position407) - } - return true - l406: - position, tokenIndex = position406, tokenIndex406 - return false - }, - /* 32 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */ - func() bool { - position430, tokenIndex430 := position, tokenIndex - { - position431 := position - { - position432, tokenIndex432 := position, tokenIndex - if !_rules[ruleSymbolRef]() { - goto l433 - } - if !_rules[ruleBaseIndexScale]() { - goto l433 - } - goto l432 - l433: - position, tokenIndex = position432, tokenIndex432 - if !_rules[ruleSymbolRef]() { - goto l434 - } - goto l432 - l434: - position, tokenIndex = position432, tokenIndex432 - l436: + l428: { - position437, tokenIndex437 := position, tokenIndex + position429, tokenIndex429 := position, tokenIndex if !_rules[ruleOffset]() { + goto l430 + } + if !_rules[ruleOffset]() { + goto l430 + } + goto l429 + l430: + position, tokenIndex = position429, tokenIndex429 + if !_rules[ruleOffset]() { + goto l414 + } + } + l429: + } + l416: + { + position431, tokenIndex431 := position, tokenIndex + { + position432, tokenIndex432 := position, tokenIndex + if buffer[position] != rune('f') { + goto l433 + } + position++ + goto l432 + l433: + position, tokenIndex = position432, tokenIndex432 + if buffer[position] != rune('b') { + goto l434 + } + position++ + goto l432 + l434: + position, tokenIndex = position432, tokenIndex432 + if buffer[position] != rune(':') { + goto l435 + } + position++ + goto l432 + l435: + position, tokenIndex = position432, tokenIndex432 + if buffer[position] != rune('(') { + goto l436 + } + position++ + goto l432 + l436: + position, tokenIndex = position432, tokenIndex432 + if buffer[position] != rune('+') { goto l437 } - goto l436 + position++ + goto l432 l437: - position, tokenIndex = position437, tokenIndex437 + position, tokenIndex = position432, tokenIndex432 + if buffer[position] != rune('-') { + goto l431 + } + position++ } - if !_rules[ruleBaseIndexScale]() { - goto l435 - } - goto l432 - l435: - position, tokenIndex = position432, tokenIndex432 - if !_rules[ruleSegmentRegister]() { - goto l438 - } - if !_rules[ruleOffset]() { - goto l438 - } - if !_rules[ruleBaseIndexScale]() { - goto l438 - } - goto l432 - l438: - position, tokenIndex = position432, tokenIndex432 - if !_rules[ruleSegmentRegister]() { - goto l439 - } - if !_rules[ruleBaseIndexScale]() { - goto l439 - } - goto l432 - l439: - position, tokenIndex = position432, tokenIndex432 - if !_rules[ruleSegmentRegister]() { - goto l440 - } - if !_rules[ruleOffset]() { - goto l440 - } - goto l432 - l440: - position, tokenIndex = position432, tokenIndex432 - if !_rules[ruleBaseIndexScale]() { - goto l430 - } + l432: + goto l414 + l431: + position, tokenIndex = position431, tokenIndex431 } - l432: - add(ruleMemoryRef, position431) + add(ruleRegisterOrConstant, position415) } return true - l430: - position, tokenIndex = position430, tokenIndex430 + l414: + position, tokenIndex = position414, tokenIndex414 return false }, - /* 33 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ + /* 33 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / BaseIndexScale)> */ func() bool { - position441, tokenIndex441 := position, tokenIndex + position438, tokenIndex438 := position, tokenIndex { - position442 := position + position439 := position { - position443, tokenIndex443 := position, tokenIndex - l445: - { - position446, tokenIndex446 := position, tokenIndex - if !_rules[ruleOffset]() { - goto l446 - } - goto l445 - l446: - position, tokenIndex = position446, tokenIndex446 - } - if buffer[position] != rune('+') { - goto l443 - } - position++ - goto l444 - l443: - position, tokenIndex = position443, tokenIndex443 - } - l444: - { - position447, tokenIndex447 := position, tokenIndex - if !_rules[ruleLocalSymbol]() { - goto l448 - } - goto l447 - l448: - position, tokenIndex = position447, tokenIndex447 - if !_rules[ruleSymbolName]() { + position440, tokenIndex440 := position, tokenIndex + if !_rules[ruleSymbolRef]() { goto l441 } - } - l447: - l449: - { - position450, tokenIndex450 := position, tokenIndex - if !_rules[ruleOffset]() { - goto l450 + if !_rules[ruleBaseIndexScale]() { + goto l441 } - goto l449 - l450: - position, tokenIndex = position450, tokenIndex450 + goto l440 + l441: + position, tokenIndex = position440, tokenIndex440 + if !_rules[ruleSymbolRef]() { + goto l442 + } + goto l440 + l442: + position, tokenIndex = position440, tokenIndex440 + l444: + { + position445, tokenIndex445 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l445 + } + goto l444 + l445: + position, tokenIndex = position445, tokenIndex445 + } + if !_rules[ruleBaseIndexScale]() { + goto l443 + } + goto l440 + l443: + position, tokenIndex = position440, tokenIndex440 + if !_rules[ruleSegmentRegister]() { + goto l446 + } + if !_rules[ruleOffset]() { + goto l446 + } + if !_rules[ruleBaseIndexScale]() { + goto l446 + } + goto l440 + l446: + position, tokenIndex = position440, tokenIndex440 + if !_rules[ruleSegmentRegister]() { + goto l447 + } + if !_rules[ruleBaseIndexScale]() { + goto l447 + } + goto l440 + l447: + position, tokenIndex = position440, tokenIndex440 + if !_rules[ruleSegmentRegister]() { + goto l448 + } + if !_rules[ruleOffset]() { + goto l448 + } + goto l440 + l448: + position, tokenIndex = position440, tokenIndex440 + if !_rules[ruleBaseIndexScale]() { + goto l438 + } } + l440: + add(ruleMemoryRef, position439) + } + return true + l438: + position, tokenIndex = position438, tokenIndex438 + return false + }, + /* 34 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */ + func() bool { + position449, tokenIndex449 := position, tokenIndex + { + position450 := position { position451, tokenIndex451 := position, tokenIndex - if buffer[position] != rune('@') { - goto l451 - } - position++ - if !_rules[ruleSection]() { - goto l451 - } l453: { position454, tokenIndex454 := position, tokenIndex @@ -3564,452 +3560,503 @@ l454: position, tokenIndex = position454, tokenIndex454 } + if buffer[position] != rune('+') { + goto l451 + } + position++ goto l452 l451: position, tokenIndex = position451, tokenIndex451 } l452: - add(ruleSymbolRef, position442) - } - return true - l441: - position, tokenIndex = position441, tokenIndex441 - return false - }, - /* 34 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ - func() bool { - position455, tokenIndex455 := position, tokenIndex - { - position456 := position - if buffer[position] != rune('(') { - goto l455 - } - position++ { - position457, tokenIndex457 := position, tokenIndex - if !_rules[ruleRegisterOrConstant]() { - goto l457 + position455, tokenIndex455 := position, tokenIndex + if !_rules[ruleLocalSymbol]() { + goto l456 } - goto l458 - l457: - position, tokenIndex = position457, tokenIndex457 + goto l455 + l456: + position, tokenIndex = position455, tokenIndex455 + if !_rules[ruleSymbolName]() { + goto l449 + } } - l458: + l455: + l457: + { + position458, tokenIndex458 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l458 + } + goto l457 + l458: + position, tokenIndex = position458, tokenIndex458 + } { position459, tokenIndex459 := position, tokenIndex - if !_rules[ruleWS]() { + if buffer[position] != rune('@') { goto l459 } + position++ + if !_rules[ruleSection]() { + goto l459 + } + l461: + { + position462, tokenIndex462 := position, tokenIndex + if !_rules[ruleOffset]() { + goto l462 + } + goto l461 + l462: + position, tokenIndex = position462, tokenIndex462 + } goto l460 l459: position, tokenIndex = position459, tokenIndex459 } l460: + add(ruleSymbolRef, position450) + } + return true + l449: + position, tokenIndex = position449, tokenIndex449 + return false + }, + /* 35 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */ + func() bool { + position463, tokenIndex463 := position, tokenIndex + { + position464 := position + if buffer[position] != rune('(') { + goto l463 + } + position++ { - position461, tokenIndex461 := position, tokenIndex + position465, tokenIndex465 := position, tokenIndex + if !_rules[ruleRegisterOrConstant]() { + goto l465 + } + goto l466 + l465: + position, tokenIndex = position465, tokenIndex465 + } + l466: + { + position467, tokenIndex467 := position, tokenIndex + if !_rules[ruleWS]() { + goto l467 + } + goto l468 + l467: + position, tokenIndex = position467, tokenIndex467 + } + l468: + { + position469, tokenIndex469 := position, tokenIndex if buffer[position] != rune(',') { - goto l461 + goto l469 } position++ { - position463, tokenIndex463 := position, tokenIndex + position471, tokenIndex471 := position, tokenIndex if !_rules[ruleWS]() { - goto l463 + goto l471 } - goto l464 - l463: - position, tokenIndex = position463, tokenIndex463 + goto l472 + l471: + position, tokenIndex = position471, tokenIndex471 } - l464: + l472: if !_rules[ruleRegisterOrConstant]() { - goto l461 + goto l469 } { - position465, tokenIndex465 := position, tokenIndex + position473, tokenIndex473 := position, tokenIndex if !_rules[ruleWS]() { - goto l465 + goto l473 } - goto l466 - l465: - position, tokenIndex = position465, tokenIndex465 + goto l474 + l473: + position, tokenIndex = position473, tokenIndex473 } - l466: + l474: { - position467, tokenIndex467 := position, tokenIndex + position475, tokenIndex475 := position, tokenIndex if buffer[position] != rune(',') { - goto l467 + goto l475 } position++ if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l467 + goto l475 } position++ - l469: + l477: { - position470, tokenIndex470 := position, tokenIndex + position478, tokenIndex478 := position, tokenIndex if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l470 + goto l478 } position++ - goto l469 - l470: - position, tokenIndex = position470, tokenIndex470 + goto l477 + l478: + position, tokenIndex = position478, tokenIndex478 } - goto l468 - l467: - position, tokenIndex = position467, tokenIndex467 + goto l476 + l475: + position, tokenIndex = position475, tokenIndex475 } - l468: - goto l462 - l461: - position, tokenIndex = position461, tokenIndex461 + l476: + goto l470 + l469: + position, tokenIndex = position469, tokenIndex469 } - l462: + l470: if buffer[position] != rune(')') { - goto l455 + goto l463 } position++ - add(ruleBaseIndexScale, position456) + add(ruleBaseIndexScale, position464) } return true - l455: - position, tokenIndex = position455, tokenIndex455 + l463: + position, tokenIndex = position463, tokenIndex463 return false }, - /* 35 Operator <- <('+' / '-')> */ + /* 36 Operator <- <('+' / '-')> */ func() bool { - position471, tokenIndex471 := position, tokenIndex + position479, tokenIndex479 := position, tokenIndex { - position472 := position + position480 := position { - position473, tokenIndex473 := position, tokenIndex + position481, tokenIndex481 := position, tokenIndex if buffer[position] != rune('+') { - goto l474 + goto l482 } position++ - goto l473 - l474: - position, tokenIndex = position473, tokenIndex473 - if buffer[position] != rune('-') { - goto l471 - } - position++ - } - l473: - add(ruleOperator, position472) - } - return true - l471: - position, tokenIndex = position471, tokenIndex471 - return false - }, - /* 36 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */ - func() bool { - position475, tokenIndex475 := position, tokenIndex - { - position476 := position - { - position477, tokenIndex477 := position, tokenIndex - if buffer[position] != rune('+') { - goto l477 - } - position++ - goto l478 - l477: - position, tokenIndex = position477, tokenIndex477 - } - l478: - { - position479, tokenIndex479 := position, tokenIndex + goto l481 + l482: + position, tokenIndex = position481, tokenIndex481 if buffer[position] != rune('-') { goto l479 } position++ - goto l480 - l479: - position, tokenIndex = position479, tokenIndex479 - } - l480: - { - position481, tokenIndex481 := position, tokenIndex - if buffer[position] != rune('0') { - goto l482 - } - position++ - { - position483, tokenIndex483 := position, tokenIndex - if buffer[position] != rune('b') { - goto l484 - } - position++ - goto l483 - l484: - position, tokenIndex = position483, tokenIndex483 - if buffer[position] != rune('B') { - goto l482 - } - position++ - } - l483: - { - position487, tokenIndex487 := position, tokenIndex - if buffer[position] != rune('0') { - goto l488 - } - position++ - goto l487 - l488: - position, tokenIndex = position487, tokenIndex487 - if buffer[position] != rune('1') { - goto l482 - } - position++ - } - l487: - l485: - { - position486, tokenIndex486 := position, tokenIndex - { - position489, tokenIndex489 := position, tokenIndex - if buffer[position] != rune('0') { - goto l490 - } - position++ - goto l489 - l490: - position, tokenIndex = position489, tokenIndex489 - if buffer[position] != rune('1') { - goto l486 - } - position++ - } - l489: - goto l485 - l486: - position, tokenIndex = position486, tokenIndex486 - } - goto l481 - l482: - position, tokenIndex = position481, tokenIndex481 - if buffer[position] != rune('0') { - goto l491 - } - position++ - { - position492, tokenIndex492 := position, tokenIndex - if buffer[position] != rune('x') { - goto l493 - } - position++ - goto l492 - l493: - position, tokenIndex = position492, tokenIndex492 - if buffer[position] != rune('X') { - goto l491 - } - position++ - } - l492: - { - position496, tokenIndex496 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l497 - } - position++ - goto l496 - l497: - position, tokenIndex = position496, tokenIndex496 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l498 - } - position++ - goto l496 - l498: - position, tokenIndex = position496, tokenIndex496 - { - position499, tokenIndex499 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l500 - } - position++ - goto l499 - l500: - position, tokenIndex = position499, tokenIndex499 - if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l491 - } - position++ - } - l499: - } - l496: - l494: - { - position495, tokenIndex495 := position, tokenIndex - { - position501, tokenIndex501 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l502 - } - position++ - goto l501 - l502: - position, tokenIndex = position501, tokenIndex501 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l503 - } - position++ - goto l501 - l503: - position, tokenIndex = position501, tokenIndex501 - { - position504, tokenIndex504 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('f') { - goto l505 - } - position++ - goto l504 - l505: - position, tokenIndex = position504, tokenIndex504 - if c := buffer[position]; c < rune('A') || c > rune('F') { - goto l495 - } - position++ - } - l504: - } - l501: - goto l494 - l495: - position, tokenIndex = position495, tokenIndex495 - } - goto l481 - l491: - position, tokenIndex = position481, tokenIndex481 - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l475 - } - position++ - l506: - { - position507, tokenIndex507 := position, tokenIndex - if c := buffer[position]; c < rune('0') || c > rune('9') { - goto l507 - } - position++ - goto l506 - l507: - position, tokenIndex = position507, tokenIndex507 - } } l481: - add(ruleOffset, position476) + add(ruleOperator, position480) } return true - l475: - position, tokenIndex = position475, tokenIndex475 + l479: + position, tokenIndex = position479, tokenIndex479 return false }, - /* 37 Section <- <([a-z] / [A-Z] / '@')+> */ + /* 37 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */ func() bool { - position508, tokenIndex508 := position, tokenIndex + position483, tokenIndex483 := position, tokenIndex { - position509 := position + position484 := position { - position512, tokenIndex512 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l513 + position485, tokenIndex485 := position, tokenIndex + if buffer[position] != rune('+') { + goto l485 } position++ - goto l512 - l513: - position, tokenIndex = position512, tokenIndex512 - if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l514 - } - position++ - goto l512 - l514: - position, tokenIndex = position512, tokenIndex512 - if buffer[position] != rune('@') { - goto l508 - } - position++ + goto l486 + l485: + position, tokenIndex = position485, tokenIndex485 } - l512: - l510: + l486: { - position511, tokenIndex511 := position, tokenIndex + position487, tokenIndex487 := position, tokenIndex + if buffer[position] != rune('-') { + goto l487 + } + position++ + goto l488 + l487: + position, tokenIndex = position487, tokenIndex487 + } + l488: + { + position489, tokenIndex489 := position, tokenIndex + if buffer[position] != rune('0') { + goto l490 + } + position++ + { + position491, tokenIndex491 := position, tokenIndex + if buffer[position] != rune('b') { + goto l492 + } + position++ + goto l491 + l492: + position, tokenIndex = position491, tokenIndex491 + if buffer[position] != rune('B') { + goto l490 + } + position++ + } + l491: + { + position495, tokenIndex495 := position, tokenIndex + if buffer[position] != rune('0') { + goto l496 + } + position++ + goto l495 + l496: + position, tokenIndex = position495, tokenIndex495 + if buffer[position] != rune('1') { + goto l490 + } + position++ + } + l495: + l493: + { + position494, tokenIndex494 := position, tokenIndex + { + position497, tokenIndex497 := position, tokenIndex + if buffer[position] != rune('0') { + goto l498 + } + position++ + goto l497 + l498: + position, tokenIndex = position497, tokenIndex497 + if buffer[position] != rune('1') { + goto l494 + } + position++ + } + l497: + goto l493 + l494: + position, tokenIndex = position494, tokenIndex494 + } + goto l489 + l490: + position, tokenIndex = position489, tokenIndex489 + if buffer[position] != rune('0') { + goto l499 + } + position++ + { + position500, tokenIndex500 := position, tokenIndex + if buffer[position] != rune('x') { + goto l501 + } + position++ + goto l500 + l501: + position, tokenIndex = position500, tokenIndex500 + if buffer[position] != rune('X') { + goto l499 + } + position++ + } + l500: + { + position504, tokenIndex504 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l505 + } + position++ + goto l504 + l505: + position, tokenIndex = position504, tokenIndex504 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l506 + } + position++ + goto l504 + l506: + position, tokenIndex = position504, tokenIndex504 + { + position507, tokenIndex507 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('f') { + goto l508 + } + position++ + goto l507 + l508: + position, tokenIndex = position507, tokenIndex507 + if c := buffer[position]; c < rune('A') || c > rune('F') { + goto l499 + } + position++ + } + l507: + } + l504: + l502: + { + position503, tokenIndex503 := position, tokenIndex + { + position509, tokenIndex509 := position, tokenIndex + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l510 + } + position++ + goto l509 + l510: + position, tokenIndex = position509, tokenIndex509 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l511 + } + position++ + goto l509 + l511: + position, tokenIndex = position509, tokenIndex509 + { + position512, tokenIndex512 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('f') { + goto l513 + } + position++ + goto l512 + l513: + position, tokenIndex = position512, tokenIndex512 + if c := buffer[position]; c < rune('A') || c > rune('F') { + goto l503 + } + position++ + } + l512: + } + l509: + goto l502 + l503: + position, tokenIndex = position503, tokenIndex503 + } + goto l489 + l499: + position, tokenIndex = position489, tokenIndex489 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l483 + } + position++ + l514: { position515, tokenIndex515 := position, tokenIndex - if c := buffer[position]; c < rune('a') || c > rune('z') { - goto l516 + if c := buffer[position]; c < rune('0') || c > rune('9') { + goto l515 } position++ - goto l515 - l516: + goto l514 + l515: position, tokenIndex = position515, tokenIndex515 - if c := buffer[position]; c < rune('A') || c > rune('Z') { - goto l517 - } - position++ - goto l515 - l517: - position, tokenIndex = position515, tokenIndex515 - if buffer[position] != rune('@') { - goto l511 - } - position++ } - l515: - goto l510 - l511: - position, tokenIndex = position511, tokenIndex511 } - add(ruleSection, position509) + l489: + add(ruleOffset, position484) } return true - l508: - position, tokenIndex = position508, tokenIndex508 + l483: + position, tokenIndex = position483, tokenIndex483 return false }, - /* 38 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ + /* 38 Section <- <([a-z] / [A-Z] / '@')+> */ func() bool { - position518, tokenIndex518 := position, tokenIndex + position516, tokenIndex516 := position, tokenIndex { - position519 := position - if buffer[position] != rune('%') { - goto l518 - } - position++ + position517 := position { position520, tokenIndex520 := position, tokenIndex - if c := buffer[position]; c < rune('c') || c > rune('g') { + if c := buffer[position]; c < rune('a') || c > rune('z') { goto l521 } position++ goto l520 l521: position, tokenIndex = position520, tokenIndex520 - if buffer[position] != rune('s') { - goto l518 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l522 + } + position++ + goto l520 + l522: + position, tokenIndex = position520, tokenIndex520 + if buffer[position] != rune('@') { + goto l516 } position++ } l520: - if buffer[position] != rune('s') { + l518: + { + position519, tokenIndex519 := position, tokenIndex + { + position523, tokenIndex523 := position, tokenIndex + if c := buffer[position]; c < rune('a') || c > rune('z') { + goto l524 + } + position++ + goto l523 + l524: + position, tokenIndex = position523, tokenIndex523 + if c := buffer[position]; c < rune('A') || c > rune('Z') { + goto l525 + } + position++ + goto l523 + l525: + position, tokenIndex = position523, tokenIndex523 + if buffer[position] != rune('@') { + goto l519 + } + position++ + } + l523: goto l518 + l519: + position, tokenIndex = position519, tokenIndex519 + } + add(ruleSection, position517) + } + return true + l516: + position, tokenIndex = position516, tokenIndex516 + return false + }, + /* 39 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */ + func() bool { + position526, tokenIndex526 := position, tokenIndex + { + position527 := position + if buffer[position] != rune('%') { + goto l526 + } + position++ + { + position528, tokenIndex528 := position, tokenIndex + if c := buffer[position]; c < rune('c') || c > rune('g') { + goto l529 + } + position++ + goto l528 + l529: + position, tokenIndex = position528, tokenIndex528 + if buffer[position] != rune('s') { + goto l526 + } + position++ + } + l528: + if buffer[position] != rune('s') { + goto l526 } position++ if buffer[position] != rune(':') { - goto l518 + goto l526 } position++ - add(ruleSegmentRegister, position519) + add(ruleSegmentRegister, position527) } return true - l518: - position, tokenIndex = position518, tokenIndex518 + l526: + position, tokenIndex = position526, tokenIndex526 return false }, }
diff --git a/util/fipstools/delocate/testdata/x86_64-Basic/in.s b/util/fipstools/delocate/testdata/x86_64-Basic/in.s index 89e8aaf..c54756b 100644 --- a/util/fipstools/delocate/testdata/x86_64-Basic/in.s +++ b/util/fipstools/delocate/testdata/x86_64-Basic/in.s
@@ -38,6 +38,9 @@ vpxor %xmm4,%xmm3,%xmm3 vmovdqu8 %ymm1,%ymm6{%k1}{z} vmovdqu8 %ymm2,%ymm4{%k3} + vpcmpneqq .LCPI508_30(%rip){1to8}, %zmm1, %k0 + vmovdqu64 -88(%rbx), %zmm0 {%k1} + vmovdqu64 352(%rsp,%rbx), %ymm1 {%k1} .byte 0xf3,0xc3 movq %rax, %rbx # Comments can be on the same line as an instruction. .L3: # Or on the same line as a label.
diff --git a/util/fipstools/delocate/testdata/x86_64-Basic/out.s b/util/fipstools/delocate/testdata/x86_64-Basic/out.s index 02a6025..b76fd3f 100644 --- a/util/fipstools/delocate/testdata/x86_64-Basic/out.s +++ b/util/fipstools/delocate/testdata/x86_64-Basic/out.s
@@ -43,6 +43,9 @@ vpxor %xmm4,%xmm3,%xmm3 vmovdqu8 %ymm1,%ymm6{%k1}{z} vmovdqu8 %ymm2,%ymm4{%k3} + vpcmpneqq .LCPI508_30(%rip){1to8}, %zmm1, %k0 + vmovdqu64 -88(%rbx), %zmm0 {%k1} + vmovdqu64 352(%rsp,%rbx), %ymm1 {%k1} .byte 0xf3,0xc3 movq %rax, %rbx # Comments can be on the same line as an instruction. .L3: