Add ML-KEM self-tests.
For some reason I had thought that NIST weren't doing this stuff for new
algorithms, but they are. The following quote is from IG 10.3.A:
> if the module implements ML-KEM decapsulation, the module shall have a CAST for the ML-KEM decapsulation mechanism. The decapsulation algorithm of ML-KEM accepts a decapsulation key (dk) and a ML-KEM ciphertext (c) as input, does not use any randomness, and outputs a shared secret (K’). The CAST shall use the ML-KEM decapsulation algorithm (i.e., Algorithm 21 in FIPS 203), and for a KAT, using fixed/predetermined dk and c values, to compare the resulting outputs to precomputed value of K'. Note21: The ML-KEM decapsulation CASTs shall cover both the implicit rejection and (unnamed) non-rejection paths.
>
> The above CASTs shall be performed on at least one of the following parameter-sets for MLKEM that are implemented in the approved mode: ML-KEM-512, ML-KEM-768, or ML-KEM-1024.
>
> if the module implements ML-KEM key generation, the module shall have an ML-KEM key generation CAST. The ML-KEM key generation does not take input and outputs an encapsulation key (ek) and a decapsulation key (dk). The CAST shall use the ML-KEM key generation algorithm (i.e., Algorithm 19 in FIPS 203), and for a KAT, using a fixed/predetermined random values (i.e., z and d), to compare the resulting outputs to the pre-computed values of ek and dk.
>
> For key pairs generated for use with approved KEMs in FIPS 203, the PCT (described by the tester in TE10.35.01) shall consist of applying the encapsulation key ek to encapsulate a shared secret K leading to ciphertext c, and then applying decapsulation key dk to retrieve the same shared secret K. The PCT passes if the two shared secret K values are equal.
Change-Id: Ic5704e1e59fb9876ce666a88518a37f61fd7d6b9
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/76387
Commit-Queue: Adam Langley <agl@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
diff --git a/build.json b/build.json
index 1ac48f2..45fa003 100644
--- a/build.json
+++ b/build.json
@@ -77,6 +77,7 @@
"crypto/fipsmodule/hmac/hmac.cc.inc",
"crypto/fipsmodule/keccak/keccak.cc.inc",
"crypto/fipsmodule/mldsa/mldsa.cc.inc",
+ "crypto/fipsmodule/mlkem/fips_known_values.inc",
"crypto/fipsmodule/mlkem/mlkem.cc.inc",
"crypto/fipsmodule/rand/ctrdrbg.cc.inc",
"crypto/fipsmodule/rand/rand.cc.inc",
diff --git a/crypto/fipsmodule/bcm.cc b/crypto/fipsmodule/bcm.cc
index a23d312..6429566 100644
--- a/crypto/fipsmodule/bcm.cc
+++ b/crypto/fipsmodule/bcm.cc
@@ -258,7 +258,8 @@
const uint8_t *expected = BORINGSSL_bcm_text_hash;
- if (!check_test(expected, result, sizeof(result), "FIPS integrity test")) {
+ if (!BORINGSSL_check_test(expected, result, sizeof(result),
+ "FIPS integrity test")) {
#if !defined(BORINGSSL_FIPS_BREAK_TESTS)
return 0;
#endif
diff --git a/crypto/fipsmodule/bcm_interface.h b/crypto/fipsmodule/bcm_interface.h
index 065eec0..766aac0 100644
--- a/crypto/fipsmodule/bcm_interface.h
+++ b/crypto/fipsmodule/bcm_interface.h
@@ -492,6 +492,8 @@
} opaque;
};
+
+
OPENSSL_EXPORT bcm_infallible BCM_mlkem768_generate_key(
uint8_t out_encoded_public_key[BCM_MLKEM768_PUBLIC_KEY_BYTES],
uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
@@ -501,6 +503,14 @@
struct BCM_mlkem768_private_key *out_private_key, const uint8_t *seed,
size_t seed_len);
+OPENSSL_EXPORT bcm_status BCM_mlkem768_generate_key_fips(
+ uint8_t out_encoded_public_key[BCM_MLKEM768_PUBLIC_KEY_BYTES],
+ uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
+ struct BCM_mlkem768_private_key *out_private_key);
+
+OPENSSL_EXPORT bcm_status
+BCM_mlkem768_check_fips(const struct BCM_mlkem768_private_key *private_key);
+
OPENSSL_EXPORT bcm_infallible BCM_mlkem768_public_from_private(
struct BCM_mlkem768_public_key *out_public_key,
const struct BCM_mlkem768_private_key *private_key);
@@ -576,6 +586,14 @@
uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
struct BCM_mlkem1024_private_key *out_private_key);
+OPENSSL_EXPORT bcm_status BCM_mlkem1024_generate_key_fips(
+ uint8_t out_encoded_public_key[BCM_MLKEM1024_PUBLIC_KEY_BYTES],
+ uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
+ struct BCM_mlkem1024_private_key *out_private_key);
+
+OPENSSL_EXPORT bcm_status
+BCM_mlkem1024_check_fips(const struct BCM_mlkem1024_private_key *private_key);
+
OPENSSL_EXPORT bcm_status BCM_mlkem1024_private_key_from_seed(
struct BCM_mlkem1024_private_key *out_private_key, const uint8_t *seed,
size_t seed_len);
diff --git a/crypto/fipsmodule/mlkem/fips_known_values.inc b/crypto/fipsmodule/mlkem/fips_known_values.inc
new file mode 100644
index 0000000..81c1b8e
--- /dev/null
+++ b/crypto/fipsmodule/mlkem/fips_known_values.inc
@@ -0,0 +1,411 @@
+const uint8_t kTestEntropy[BCM_MLKEM_SEED_BYTES] = {
+ 0xc8, 0x77, 0x34, 0x04, 0xb3, 0xe5, 0x3e, 0x31, 0x7b, 0xab, 0x41,
+ 0x08, 0xa8, 0x88, 0x9c, 0x90, 0xbe, 0xfb, 0x38, 0x0f, 0x63, 0x89,
+ 0x70, 0xbc, 0xdc, 0x33, 0xeb, 0x2d, 0xe2, 0x99, 0x6b, 0x1a};
+
+const uint8_t kExpectedPublicKeyBytes[BCM_MLKEM768_PUBLIC_KEY_BYTES] = {
+ 0xcb, 0x0b, 0x33, 0xa2, 0xac, 0xc4, 0x94, 0x56, 0x1a, 0x36, 0x1c, 0x0d,
+ 0xa3, 0x57, 0x5b, 0x63, 0x6c, 0x0d, 0x1f, 0xe1, 0xa8, 0x36, 0xd5, 0x5d,
+ 0x38, 0x5c, 0xac, 0xf4, 0x67, 0x39, 0x9a, 0x12, 0x5b, 0xef, 0xa1, 0x0a,
+ 0x57, 0x76, 0x87, 0x83, 0xaa, 0xaf, 0x1d, 0x9c, 0xce, 0x2b, 0x78, 0x9b,
+ 0x40, 0x82, 0x1e, 0x34, 0xb3, 0x55, 0x2d, 0xd0, 0x20, 0xcd, 0x5b, 0x46,
+ 0x8d, 0xda, 0xb8, 0x83, 0xa8, 0xab, 0xfb, 0x36, 0x45, 0xcb, 0x40, 0xae,
+ 0x69, 0x77, 0x03, 0x22, 0xa8, 0xb4, 0xaa, 0x17, 0x53, 0x90, 0x05, 0x6a,
+ 0x69, 0xb9, 0xc5, 0x2d, 0xbc, 0x9a, 0x81, 0xf6, 0x2a, 0x3c, 0x57, 0x96,
+ 0x8c, 0xb2, 0x72, 0xa7, 0xd4, 0x84, 0x77, 0xf9, 0x0b, 0x80, 0xe7, 0x1e,
+ 0x75, 0x61, 0x0e, 0xf9, 0xb0, 0xcf, 0x4c, 0x03, 0xca, 0x30, 0x45, 0x50,
+ 0x25, 0x82, 0x56, 0x02, 0xbb, 0x58, 0xab, 0x99, 0xc7, 0x8d, 0xd5, 0x37,
+ 0x12, 0xc8, 0x36, 0x5b, 0x00, 0x5f, 0x91, 0xf6, 0x2d, 0x9b, 0x91, 0xc2,
+ 0x3e, 0x75, 0x56, 0x83, 0xd2, 0xaa, 0xd4, 0x03, 0xcd, 0xe8, 0xe8, 0x3f,
+ 0x09, 0xc1, 0x8e, 0x84, 0xb1, 0x75, 0x85, 0x06, 0xa7, 0x4a, 0x40, 0xc2,
+ 0xc9, 0x90, 0xb0, 0x0f, 0x59, 0x84, 0xe5, 0xf7, 0xa8, 0xd8, 0x35, 0x33,
+ 0xa5, 0x82, 0x4e, 0xf6, 0xb5, 0xaf, 0xd5, 0xaa, 0xbb, 0x52, 0x30, 0x0b,
+ 0xb1, 0x67, 0x7b, 0xbb, 0xdc, 0x38, 0x58, 0xf4, 0x2f, 0xe4, 0xeb, 0x47,
+ 0xf0, 0x49, 0x76, 0x45, 0x10, 0x02, 0x19, 0xa7, 0xc6, 0x1f, 0x8a, 0x71,
+ 0xda, 0x51, 0x61, 0x79, 0xc4, 0x10, 0xeb, 0x3a, 0x11, 0xd9, 0x93, 0x1d,
+ 0x83, 0x81, 0x48, 0x3d, 0x68, 0x35, 0xff, 0xe3, 0xa6, 0xa8, 0x40, 0x74,
+ 0xdb, 0x7c, 0xb4, 0xb2, 0x05, 0x89, 0xc8, 0x09, 0x42, 0x27, 0x28, 0x55,
+ 0x01, 0x57, 0xc9, 0xf9, 0xfa, 0x36, 0xd3, 0x5c, 0x51, 0x40, 0xca, 0x1e,
+ 0x34, 0xc8, 0xb9, 0x27, 0xf1, 0x15, 0xc9, 0xa4, 0x18, 0x9c, 0xa8, 0x4c,
+ 0x55, 0xf8, 0x4d, 0x90, 0xbc, 0x88, 0xd1, 0x46, 0x01, 0x80, 0x96, 0x54,
+ 0x8d, 0x01, 0x6e, 0xe4, 0x26, 0x0c, 0x7a, 0x08, 0x3d, 0x7c, 0x26, 0x66,
+ 0xb1, 0xd1, 0x15, 0xc7, 0xc0, 0x0b, 0x06, 0x92, 0x9c, 0x26, 0xa6, 0x6c,
+ 0x3a, 0x46, 0x47, 0x15, 0x37, 0xb0, 0x0a, 0xc1, 0x5d, 0xe0, 0x51, 0xae,
+ 0x17, 0x87, 0x2f, 0x75, 0x2c, 0x64, 0xd5, 0x39, 0x09, 0xe6, 0xd0, 0x7c,
+ 0x3d, 0x79, 0x47, 0x78, 0x0a, 0x82, 0xc9, 0xba, 0x37, 0x07, 0x93, 0x94,
+ 0xa4, 0x45, 0x7c, 0x07, 0x69, 0x24, 0x1d, 0xc9, 0x75, 0x41, 0x6b, 0xc1,
+ 0x42, 0x28, 0x06, 0xe3, 0xfc, 0x7b, 0xd2, 0xf8, 0xbf, 0xe7, 0x5a, 0xc2,
+ 0xc0, 0x81, 0x63, 0xf3, 0x84, 0x32, 0x31, 0x4a, 0x8d, 0x6b, 0xe3, 0x3e,
+ 0x22, 0x67, 0x9a, 0x3a, 0x96, 0x09, 0xa6, 0xf9, 0x53, 0x40, 0x41, 0x2a,
+ 0x04, 0xa7, 0xc5, 0x7b, 0x86, 0xcd, 0xed, 0xec, 0xae, 0xfd, 0xc7, 0x11,
+ 0x48, 0x56, 0x77, 0x0b, 0xb7, 0xbb, 0xaf, 0xfb, 0x6c, 0x9e, 0xd6, 0x5c,
+ 0xbc, 0xf7, 0x9a, 0x75, 0xb5, 0xb2, 0x20, 0xd9, 0x60, 0x90, 0x65, 0x02,
+ 0xf9, 0x16, 0x34, 0xdf, 0x0b, 0x16, 0x2a, 0x97, 0x00, 0x5d, 0xc1, 0x65,
+ 0xc3, 0xb9, 0x1f, 0x2e, 0x85, 0x97, 0xbd, 0xca, 0xaa, 0x1d, 0xf2, 0x4f,
+ 0x74, 0xe5, 0x56, 0x94, 0xdc, 0x53, 0xbb, 0xc0, 0x75, 0x1c, 0x2b, 0x59,
+ 0x6b, 0x50, 0x2c, 0x25, 0x4c, 0x78, 0xd7, 0x68, 0x40, 0x0b, 0x91, 0x7a,
+ 0x93, 0x02, 0x83, 0x5e, 0x6c, 0x03, 0xc7, 0xc4, 0x24, 0x6f, 0x8b, 0xa4,
+ 0x70, 0x37, 0x1f, 0xe5, 0x33, 0x59, 0xf6, 0xbb, 0x5f, 0xb8, 0x58, 0x50,
+ 0x62, 0x16, 0x95, 0x2a, 0x88, 0xa3, 0xc6, 0x24, 0x94, 0x4b, 0xb0, 0x03,
+ 0x8e, 0xe6, 0x50, 0xd1, 0x63, 0xa2, 0xab, 0x00, 0x16, 0xf4, 0x0a, 0x7d,
+ 0xe6, 0xe0, 0xb9, 0x0c, 0xd8, 0x08, 0xae, 0xf6, 0x80, 0xb7, 0x48, 0xb8,
+ 0x10, 0xd1, 0x77, 0x57, 0x48, 0x2a, 0xc1, 0xf1, 0x4e, 0x61, 0xb4, 0x06,
+ 0x5a, 0xa1, 0xba, 0x32, 0x4a, 0x9a, 0xab, 0x8c, 0xa8, 0xe3, 0xa0, 0x68,
+ 0x39, 0xa3, 0x25, 0x55, 0x48, 0xcd, 0x12, 0x98, 0x14, 0x1b, 0x39, 0x5b,
+ 0xf4, 0x88, 0xbe, 0x5f, 0xac, 0xba, 0x18, 0x20, 0x74, 0x2c, 0xa1, 0x0b,
+ 0xfc, 0xf1, 0x00, 0x85, 0x24, 0x27, 0x3d, 0x80, 0xb6, 0x30, 0x42, 0x7b,
+ 0x74, 0xb0, 0xbf, 0x87, 0x51, 0x9b, 0xa8, 0x1c, 0x79, 0xbd, 0x50, 0x85,
+ 0x66, 0xe1, 0x93, 0xdd, 0xc5, 0x5d, 0x5d, 0xd0, 0xbe, 0xcb, 0x90, 0x36,
+ 0xf8, 0xc6, 0xc2, 0xea, 0xea, 0x40, 0xce, 0xa7, 0xb0, 0xae, 0xc5, 0x44,
+ 0x3a, 0x27, 0xc5, 0x4a, 0xf0, 0x21, 0x4f, 0xf6, 0x63, 0xb1, 0x8c, 0x20,
+ 0x76, 0x65, 0xb5, 0x79, 0x55, 0x10, 0xa5, 0xa7, 0x4b, 0x57, 0x96, 0xb3,
+ 0x03, 0xe6, 0xa8, 0x93, 0xf5, 0xc5, 0xca, 0xe0, 0x1a, 0x23, 0x30, 0x6d,
+ 0x09, 0x07, 0x81, 0x5e, 0x05, 0xc6, 0x1b, 0x7a, 0x0e, 0xde, 0xf3, 0x00,
+ 0x91, 0xf3, 0xbb, 0x4b, 0xa6, 0x8e, 0x96, 0xc3, 0x3a, 0xc8, 0x72, 0x19,
+ 0x23, 0x23, 0xc7, 0x94, 0x46, 0x75, 0xa2, 0xc5, 0x9e, 0xa3, 0x15, 0x86,
+ 0xb4, 0xa7, 0x95, 0xda, 0x16, 0xae, 0x42, 0xe8, 0xcc, 0xf6, 0x41, 0xbc,
+ 0x9c, 0xe8, 0x07, 0xc9, 0x05, 0x3c, 0x74, 0xb2, 0xad, 0x77, 0xc4, 0x08,
+ 0x56, 0x78, 0xb8, 0x65, 0x2a, 0x33, 0x39, 0x82, 0x16, 0x3c, 0x2b, 0x73,
+ 0x41, 0x2a, 0xbc, 0xc8, 0x36, 0x23, 0x2c, 0x23, 0x29, 0xce, 0x94, 0x8a,
+ 0xba, 0x13, 0x3f, 0xfa, 0xcc, 0x6e, 0x17, 0x40, 0xb0, 0xb4, 0x9c, 0xae,
+ 0xf9, 0x72, 0x40, 0xf7, 0x2a, 0xaf, 0x00, 0x17, 0x7e, 0x88, 0x44, 0x4e,
+ 0x32, 0xa4, 0x80, 0x96, 0x53, 0x20, 0xe4, 0xaa, 0x18, 0x9c, 0x69, 0x63,
+ 0xdb, 0x81, 0x73, 0x0e, 0x64, 0x40, 0x12, 0xc1, 0x26, 0x0e, 0xac, 0x4d,
+ 0x38, 0xa6, 0x4c, 0x05, 0xeb, 0x42, 0x1f, 0x88, 0x6e, 0x6c, 0xa3, 0x98,
+ 0x95, 0xc3, 0x5a, 0x31, 0xfc, 0x8a, 0x7c, 0xd6, 0xa5, 0x6c, 0x5a, 0xc9,
+ 0xf5, 0xf2, 0xb0, 0xf7, 0x05, 0x8d, 0x3a, 0x0b, 0x3f, 0x4d, 0x1b, 0x0e,
+ 0x38, 0x7b, 0x1c, 0xe5, 0xd0, 0x75, 0x40, 0x77, 0xc2, 0xe0, 0x8b, 0xa9,
+ 0xfb, 0xa6, 0xa7, 0x13, 0xf0, 0xbc, 0x0c, 0x13, 0xb0, 0x70, 0x3a, 0x2f,
+ 0x20, 0xe7, 0x38, 0xd8, 0x82, 0xa4, 0xc0, 0x06, 0x96, 0x95, 0x75, 0x5c,
+ 0xbc, 0x68, 0xce, 0xee, 0xa6, 0x44, 0xbb, 0xf2, 0x62, 0x14, 0x43, 0x10,
+ 0xe6, 0x0b, 0x5c, 0x66, 0x02, 0xbf, 0x38, 0xe9, 0x8f, 0x19, 0x69, 0x6c,
+ 0x08, 0xfa, 0x93, 0x23, 0xf1, 0x35, 0x5f, 0x33, 0xcf, 0xe2, 0x32, 0x11,
+ 0xda, 0x31, 0xbb, 0xd8, 0xf5, 0x7e, 0x55, 0xc3, 0x6a, 0xa3, 0x04, 0x8c,
+ 0xef, 0x50, 0x67, 0x0f, 0xe9, 0xbb, 0x11, 0x6b, 0xca, 0x5a, 0x23, 0x15,
+ 0xf7, 0x52, 0x8c, 0x69, 0xbb, 0x2d, 0x26, 0xd3, 0x78, 0x32, 0x33, 0x9b,
+ 0x1d, 0x02, 0x7c, 0x22, 0x4b, 0x57, 0x19, 0xec, 0xcd, 0x16, 0x63, 0x5d,
+ 0x1f, 0x0c, 0x67, 0xda, 0x6a, 0xc7, 0x2c, 0xf1, 0x0b, 0xcf, 0x92, 0x10,
+ 0xcb, 0x78, 0x57, 0x67, 0x61, 0x0e, 0xb3, 0x55, 0xb0, 0x17, 0x32, 0x4e,
+ 0x95, 0xf1, 0xcb, 0xb5, 0xdb, 0x5d, 0x8e, 0x38, 0x97, 0x28, 0x46, 0x1e,
+ 0x37, 0x4b, 0x5c, 0x03, 0xf4, 0x84, 0x0c, 0xfc, 0x49, 0x3b, 0xd2, 0xc6,
+ 0x97, 0xd4, 0x4f, 0xef, 0xe6, 0x5c, 0xb2, 0x96, 0x8e, 0xbc, 0x18, 0x9f,
+ 0xec, 0x8a, 0x67, 0x53, 0xe8, 0x2a, 0x41, 0x5c, 0x6e, 0xfe, 0xca, 0x1a,
+ 0xd0, 0x03, 0x4f, 0xe8, 0xd9, 0xb0, 0xe2, 0xa1, 0x6c, 0x32, 0xd5, 0x37,
+ 0x68, 0x9c, 0x6b, 0x30, 0x87, 0xb4, 0x6e, 0xa8, 0xc5, 0x45, 0xe4, 0x74,
+ 0x4a, 0x80, 0x02, 0x84, 0x78, 0x0e, 0x2c, 0x9c, 0x37, 0x07, 0x26, 0x31,
+ 0x88, 0x0a, 0x89, 0xd2, 0xba, 0x8b, 0x09, 0xb2, 0x16, 0x7b, 0x23, 0xa8,
+ 0x0c, 0x82, 0xc4, 0x22, 0xa2, 0x21, 0x2d, 0xa4, 0xa0, 0xeb, 0xe4, 0xa6,
+ 0xd4, 0x16, 0xa0, 0xa7, 0x19, 0x8b, 0x8f, 0x87, 0x9b, 0x53, 0x6c, 0xba,
+ 0x14, 0xa7, 0xc4, 0x64, 0x08, 0xb4, 0x68, 0xda, 0x85, 0xa6, 0x47, 0xbc,
+ 0x58, 0x34, 0xcd, 0x60, 0x43, 0xad, 0x14, 0xd4, 0xca, 0xd7, 0xb1, 0x6c,
+ 0xc0, 0x05, 0x68, 0xaf, 0xa7, 0x08, 0x9d, 0x6a, 0xb0, 0x70, 0x96, 0x81,
+ 0xb8, 0x55, 0xbf, 0xa1, 0xcc, 0xb1, 0x37, 0xe0, 0x94, 0x42, 0x05, 0x0c,
+ 0x83, 0xef, 0x6d, 0xf0, 0x4e, 0xba, 0xe6, 0x78, 0x49, 0xaf, 0x1f, 0x88,
+ 0xf0, 0x18, 0x0c, 0x17, 0x66, 0x92, 0xd8, 0x50, 0x57, 0x3b, 0x8e, 0xc9,
+ 0xd5, 0x8c, 0xfb, 0x9b, 0x78, 0x65, 0x01, 0x76};
+
+const uint8_t kExpectedPrivateKeyBytes[2400] = {
+ 0xd8, 0xc9, 0x39, 0x7c, 0x31, 0x30, 0xd8, 0xec, 0xb4, 0x11, 0xa6, 0x8e,
+ 0xfc, 0xc8, 0x9a, 0x55, 0x3c, 0xb7, 0xe6, 0x81, 0x7e, 0x02, 0x88, 0xbd,
+ 0x06, 0x91, 0x60, 0x9b, 0xf5, 0x57, 0x6a, 0xf8, 0x73, 0x9e, 0x52, 0xa8,
+ 0x03, 0xf0, 0x97, 0xb4, 0x22, 0xb7, 0x02, 0x23, 0xcd, 0x3e, 0xa1, 0x03,
+ 0x20, 0x66, 0x6e, 0x20, 0x20, 0xcb, 0x42, 0xec, 0xb6, 0xc2, 0x14, 0x2c,
+ 0xe7, 0xa8, 0x88, 0x3d, 0xd2, 0x26, 0x9c, 0xf7, 0xb3, 0x4f, 0x00, 0x27,
+ 0x61, 0xc6, 0x10, 0xb2, 0x72, 0x34, 0x39, 0xf1, 0x79, 0x03, 0xcc, 0x06,
+ 0xd2, 0xe4, 0x29, 0x57, 0x91, 0x2f, 0x0d, 0x45, 0x19, 0x30, 0x27, 0x47,
+ 0xcc, 0xba, 0xbe, 0x19, 0x01, 0x1a, 0xbb, 0xd8, 0xcb, 0x74, 0xca, 0x4a,
+ 0xfa, 0x32, 0x2f, 0xb8, 0xbb, 0x5c, 0x19, 0x2a, 0xbf, 0x31, 0x0a, 0x82,
+ 0xf3, 0x29, 0x74, 0x30, 0xa4, 0x95, 0x4c, 0x42, 0x59, 0x8c, 0xb3, 0xcb,
+ 0xfe, 0xa9, 0xb4, 0x2e, 0x60, 0x71, 0x64, 0x51, 0x6d, 0xf9, 0x73, 0x5b,
+ 0xf5, 0x59, 0x9b, 0xf5, 0xd9, 0x9d, 0x3f, 0x86, 0x3a, 0x50, 0x6c, 0x23,
+ 0x8c, 0x96, 0xc0, 0x5e, 0x7c, 0x48, 0x43, 0xec, 0x08, 0xf5, 0xf7, 0x7e,
+ 0x6b, 0x54, 0x84, 0xb2, 0x6c, 0x52, 0xd5, 0x2b, 0x38, 0x85, 0xf4, 0x40,
+ 0x36, 0x09, 0x2f, 0xe6, 0xd0, 0x9e, 0xe6, 0xb6, 0x96, 0x7a, 0xe1, 0xc3,
+ 0xf7, 0xfa, 0x89, 0xc6, 0x75, 0x6f, 0x65, 0xea, 0x4a, 0x6d, 0x55, 0x33,
+ 0xe2, 0xc6, 0x30, 0xfb, 0x7b, 0xbd, 0xcb, 0x33, 0x4d, 0xd6, 0x84, 0x1b,
+ 0x28, 0x77, 0x60, 0xbf, 0x4b, 0x82, 0xd0, 0xb0, 0xc5, 0x88, 0x0c, 0x51,
+ 0x00, 0x22, 0x5e, 0xd9, 0x41, 0x2e, 0x7e, 0x43, 0xa6, 0x9d, 0x34, 0x5d,
+ 0x24, 0x80, 0xad, 0x7f, 0xd3, 0xae, 0xc7, 0x5a, 0x51, 0x74, 0x06, 0xc0,
+ 0x6f, 0x04, 0xae, 0x9b, 0x79, 0x6e, 0x35, 0xfa, 0x0d, 0xf3, 0xda, 0xa4,
+ 0xfa, 0x38, 0x4a, 0xee, 0xb3, 0xa4, 0x87, 0xa7, 0x27, 0xe2, 0x02, 0x2a,
+ 0x29, 0x27, 0xcf, 0xca, 0x4a, 0x20, 0x01, 0x15, 0x3d, 0x12, 0xc7, 0xcc,
+ 0x74, 0x99, 0x17, 0xa6, 0x7b, 0x04, 0xd7, 0xea, 0x64, 0x88, 0xa3, 0x54,
+ 0xb5, 0xc2, 0xa3, 0xea, 0x69, 0x94, 0xb9, 0xc3, 0x45, 0xf8, 0x2b, 0x3c,
+ 0xe5, 0xc1, 0x25, 0xf6, 0xc9, 0x82, 0xe3, 0x45, 0x25, 0xca, 0x71, 0x3d,
+ 0x73, 0x10, 0x99, 0xa5, 0xb5, 0x79, 0xdc, 0x61, 0x8f, 0x04, 0x3c, 0x61,
+ 0x6b, 0x90, 0x4d, 0x83, 0xa3, 0x0d, 0xb4, 0xba, 0xb7, 0x3b, 0x81, 0xca,
+ 0xbb, 0x59, 0x16, 0x46, 0xf4, 0x75, 0x7c, 0xaa, 0x0f, 0x90, 0xec, 0x37,
+ 0xa4, 0x50, 0xa8, 0x41, 0xb4, 0x33, 0xd2, 0xb7, 0x28, 0xe1, 0xda, 0x74,
+ 0x36, 0x3a, 0xa6, 0x96, 0x76, 0x06, 0x67, 0xd3, 0x8e, 0xda, 0xd5, 0x29,
+ 0x24, 0x1a, 0xbe, 0x82, 0x83, 0x6b, 0x3a, 0x90, 0xc1, 0x86, 0x34, 0x2d,
+ 0xd8, 0xa3, 0xa5, 0x7e, 0xe6, 0xca, 0x3f, 0xc5, 0xbf, 0xba, 0x24, 0x14,
+ 0xd2, 0xfc, 0x3f, 0x97, 0x8c, 0xca, 0x59, 0xa5, 0x52, 0xf1, 0x8c, 0x62,
+ 0x8d, 0x8a, 0x7d, 0x1b, 0x35, 0x76, 0x79, 0x98, 0x39, 0x57, 0x53, 0x1f,
+ 0x78, 0x82, 0x7d, 0xcd, 0x9c, 0xab, 0xb3, 0x12, 0x52, 0x86, 0x87, 0xbf,
+ 0x01, 0x12, 0x58, 0x45, 0x37, 0x75, 0x1a, 0xe0, 0x03, 0xbd, 0x67, 0x4c,
+ 0x76, 0xfa, 0x06, 0x59, 0xa2, 0x1f, 0x48, 0x73, 0x7f, 0x0c, 0x90, 0xc1,
+ 0x82, 0xc0, 0x98, 0x2f, 0x6a, 0x1c, 0x6f, 0x6c, 0x98, 0x70, 0x16, 0x8e,
+ 0x8c, 0x5b, 0x60, 0x92, 0x42, 0x59, 0xd6, 0xb2, 0x13, 0x7a, 0x11, 0xb6,
+ 0x15, 0x1b, 0x07, 0x50, 0x52, 0x73, 0x86, 0xbc, 0x3a, 0xff, 0x66, 0x71,
+ 0x57, 0xf8, 0x89, 0x7a, 0x3a, 0x95, 0xc5, 0xa1, 0x31, 0x48, 0x15, 0xc9,
+ 0xe0, 0x4b, 0x41, 0xb6, 0x07, 0x5a, 0x70, 0x88, 0x11, 0xce, 0xdc, 0xa7,
+ 0x84, 0x23, 0x85, 0x96, 0xd8, 0x20, 0x9f, 0x89, 0x42, 0xbc, 0x0b, 0xd0,
+ 0xd9, 0x11, 0x9f, 0x2f, 0x71, 0x37, 0xa2, 0x10, 0x98, 0x95, 0xa7, 0x1f,
+ 0x99, 0x48, 0x8e, 0x5b, 0x40, 0x65, 0x9f, 0x08, 0x4e, 0x04, 0x16, 0x35,
+ 0xc8, 0x56, 0xa1, 0x02, 0xa1, 0xaf, 0x0e, 0x5b, 0xaf, 0x02, 0x66, 0x2e,
+ 0xc8, 0xa5, 0x49, 0xe7, 0xa4, 0x6b, 0x03, 0xe2, 0x42, 0xb3, 0x37, 0x76,
+ 0x2c, 0x89, 0x00, 0x76, 0x83, 0xb3, 0x93, 0xdc, 0x78, 0x56, 0xc9, 0x02,
+ 0xf1, 0xd3, 0x92, 0xe5, 0x14, 0x36, 0xba, 0x37, 0x1d, 0x86, 0x87, 0x81,
+ 0x5f, 0x30, 0x16, 0x7f, 0xdb, 0x76, 0xe2, 0x46, 0x3d, 0x32, 0xe8, 0x47,
+ 0x35, 0x5b, 0x68, 0x39, 0x70, 0xa3, 0xc2, 0xb8, 0xb3, 0x6e, 0xd0, 0x22,
+ 0x6b, 0x39, 0x9c, 0xd9, 0xa3, 0x93, 0x69, 0xbc, 0xcb, 0xe0, 0xbc, 0x82,
+ 0x1b, 0xfb, 0x9f, 0x72, 0x17, 0x40, 0x72, 0xeb, 0xb2, 0x97, 0x31, 0x66,
+ 0x18, 0x48, 0x9a, 0xe5, 0x3a, 0x2a, 0x41, 0x13, 0x3e, 0xfc, 0xfb, 0xb4,
+ 0xb0, 0x96, 0x6e, 0x53, 0x37, 0x18, 0xbb, 0x26, 0x1d, 0xbe, 0x33, 0x0f,
+ 0x06, 0x8b, 0x8c, 0xb1, 0xfc, 0x8c, 0x24, 0x19, 0x8d, 0x7d, 0x76, 0x52,
+ 0x35, 0x75, 0x71, 0x36, 0x61, 0x7d, 0x75, 0x3a, 0x31, 0x9a, 0x16, 0x05,
+ 0x2d, 0x51, 0x63, 0x6f, 0x07, 0x64, 0xfd, 0x80, 0x16, 0x2d, 0xa3, 0x3a,
+ 0x15, 0xca, 0xaa, 0x76, 0xec, 0x2f, 0x91, 0x47, 0xb2, 0x29, 0x61, 0x04,
+ 0x80, 0x20, 0x8d, 0x3c, 0x31, 0xa6, 0x4f, 0x8b, 0xc8, 0xc0, 0x71, 0xbb,
+ 0x0a, 0xec, 0xbc, 0xdf, 0xdc, 0x91, 0x8c, 0xb9, 0x80, 0xb7, 0x67, 0xa9,
+ 0x7f, 0x30, 0x18, 0x4e, 0xd3, 0x68, 0x27, 0x50, 0x15, 0xad, 0x8c, 0x6a,
+ 0xab, 0xc9, 0xbe, 0xad, 0x41, 0x4b, 0xcd, 0x23, 0x73, 0x9f, 0x77, 0x58,
+ 0xe3, 0xd8, 0x2e, 0x16, 0xcb, 0xa0, 0x17, 0x89, 0x51, 0x31, 0x53, 0x01,
+ 0xa8, 0xf1, 0x9b, 0x61, 0xc3, 0x0a, 0x5b, 0x0c, 0x70, 0x36, 0x48, 0x1b,
+ 0xae, 0x17, 0x51, 0x1f, 0xc7, 0x7b, 0xce, 0xd4, 0x45, 0xff, 0xea, 0xb0,
+ 0x5f, 0x48, 0x07, 0x4f, 0x79, 0x26, 0x5c, 0xb6, 0xce, 0x4c, 0xc4, 0x02,
+ 0xd1, 0x31, 0x88, 0xa9, 0xc0, 0x53, 0x6a, 0x42, 0x6f, 0x9c, 0x32, 0xaa,
+ 0x86, 0xec, 0x25, 0xa7, 0x5b, 0x31, 0x68, 0xc9, 0xa9, 0xd8, 0x2c, 0x70,
+ 0xa0, 0x02, 0x31, 0x52, 0x8a, 0x2c, 0xc0, 0x0a, 0xbe, 0x8c, 0x59, 0x6c,
+ 0x72, 0x42, 0x21, 0xcb, 0x44, 0x07, 0x02, 0x27, 0xa0, 0x71, 0xa3, 0x7f,
+ 0xe3, 0x97, 0x24, 0x70, 0x47, 0x4d, 0x10, 0xfc, 0x54, 0x83, 0xdc, 0x44,
+ 0x09, 0x36, 0x23, 0x4a, 0x26, 0x95, 0x60, 0x96, 0xa4, 0x11, 0x1b, 0x18,
+ 0x9d, 0x01, 0x9c, 0x8c, 0xd7, 0x37, 0x60, 0x08, 0x02, 0xef, 0xe3, 0x81,
+ 0xf3, 0x48, 0x5c, 0x9c, 0xac, 0x4f, 0xb6, 0xc7, 0x66, 0xd6, 0xda, 0x25,
+ 0x78, 0x4a, 0xca, 0x91, 0xf1, 0x16, 0x75, 0x69, 0x8b, 0x09, 0x63, 0x0d,
+ 0x74, 0x49, 0x57, 0x33, 0xe1, 0x23, 0x87, 0xc5, 0x0e, 0x85, 0x27, 0x1e,
+ 0x5a, 0xfa, 0x3f, 0xa8, 0x82, 0xbc, 0x49, 0xc7, 0x99, 0x15, 0xe1, 0x2f,
+ 0x04, 0x36, 0x88, 0xd4, 0xa1, 0x9a, 0xe5, 0xb3, 0x70, 0x95, 0x85, 0x43,
+ 0x76, 0xb9, 0x7d, 0x3b, 0x9c, 0x61, 0xf3, 0x30, 0x59, 0x4e, 0x2a, 0xc6,
+ 0x3f, 0x52, 0x35, 0x81, 0x43, 0x61, 0x72, 0xc0, 0x89, 0x98, 0x67, 0x1e,
+ 0x6f, 0xec, 0xc6, 0x2a, 0x9a, 0x14, 0x36, 0x34, 0x4c, 0x9f, 0xfb, 0x2e,
+ 0xd1, 0xd2, 0x4e, 0x6b, 0xb9, 0xc9, 0x56, 0x74, 0xbe, 0xab, 0xa4, 0x7c,
+ 0x48, 0x84, 0x07, 0xf6, 0x04, 0xb1, 0x89, 0x0b, 0x13, 0x79, 0x13, 0xb5,
+ 0x31, 0xd6, 0x2c, 0x40, 0x47, 0xbd, 0xba, 0x37, 0xb1, 0x65, 0x7c, 0xb3,
+ 0xa3, 0x45, 0x1e, 0x0f, 0x41, 0x62, 0x07, 0xf9, 0x1e, 0x25, 0xa5, 0x78,
+ 0x47, 0xd2, 0xa6, 0x4b, 0x20, 0x7b, 0x9b, 0x39, 0x07, 0x09, 0xf3, 0x9e,
+ 0x09, 0xfb, 0xac, 0x87, 0xb6, 0xb5, 0x9b, 0xd8, 0x09, 0xa3, 0xd6, 0x69,
+ 0xb3, 0x3a, 0x87, 0x09, 0xb0, 0x19, 0xb3, 0xc1, 0x47, 0x8e, 0xd7, 0x3a,
+ 0x6e, 0xb5, 0x48, 0x89, 0x56, 0x87, 0x60, 0xb1, 0xba, 0x52, 0xd5, 0x94,
+ 0x22, 0x54, 0xbd, 0x7c, 0xf1, 0xa4, 0x54, 0xaa, 0x38, 0x5c, 0x76, 0xa8,
+ 0x52, 0x19, 0x97, 0x9a, 0x71, 0x47, 0x6c, 0xa0, 0x39, 0xd1, 0x0b, 0xd0,
+ 0xa6, 0xb3, 0x65, 0xdc, 0xbc, 0xa4, 0x4d, 0x62, 0x44, 0xb2, 0x47, 0x5e,
+ 0x77, 0x77, 0x32, 0x2f, 0x78, 0xa6, 0x97, 0xdb, 0xb5, 0xba, 0x3b, 0x4a,
+ 0xcb, 0x0b, 0x33, 0xa2, 0xac, 0xc4, 0x94, 0x56, 0x1a, 0x36, 0x1c, 0x0d,
+ 0xa3, 0x57, 0x5b, 0x63, 0x6c, 0x0d, 0x1f, 0xe1, 0xa8, 0x36, 0xd5, 0x5d,
+ 0x38, 0x5c, 0xac, 0xf4, 0x67, 0x39, 0x9a, 0x12, 0x5b, 0xef, 0xa1, 0x0a,
+ 0x57, 0x76, 0x87, 0x83, 0xaa, 0xaf, 0x1d, 0x9c, 0xce, 0x2b, 0x78, 0x9b,
+ 0x40, 0x82, 0x1e, 0x34, 0xb3, 0x55, 0x2d, 0xd0, 0x20, 0xcd, 0x5b, 0x46,
+ 0x8d, 0xda, 0xb8, 0x83, 0xa8, 0xab, 0xfb, 0x36, 0x45, 0xcb, 0x40, 0xae,
+ 0x69, 0x77, 0x03, 0x22, 0xa8, 0xb4, 0xaa, 0x17, 0x53, 0x90, 0x05, 0x6a,
+ 0x69, 0xb9, 0xc5, 0x2d, 0xbc, 0x9a, 0x81, 0xf6, 0x2a, 0x3c, 0x57, 0x96,
+ 0x8c, 0xb2, 0x72, 0xa7, 0xd4, 0x84, 0x77, 0xf9, 0x0b, 0x80, 0xe7, 0x1e,
+ 0x75, 0x61, 0x0e, 0xf9, 0xb0, 0xcf, 0x4c, 0x03, 0xca, 0x30, 0x45, 0x50,
+ 0x25, 0x82, 0x56, 0x02, 0xbb, 0x58, 0xab, 0x99, 0xc7, 0x8d, 0xd5, 0x37,
+ 0x12, 0xc8, 0x36, 0x5b, 0x00, 0x5f, 0x91, 0xf6, 0x2d, 0x9b, 0x91, 0xc2,
+ 0x3e, 0x75, 0x56, 0x83, 0xd2, 0xaa, 0xd4, 0x03, 0xcd, 0xe8, 0xe8, 0x3f,
+ 0x09, 0xc1, 0x8e, 0x84, 0xb1, 0x75, 0x85, 0x06, 0xa7, 0x4a, 0x40, 0xc2,
+ 0xc9, 0x90, 0xb0, 0x0f, 0x59, 0x84, 0xe5, 0xf7, 0xa8, 0xd8, 0x35, 0x33,
+ 0xa5, 0x82, 0x4e, 0xf6, 0xb5, 0xaf, 0xd5, 0xaa, 0xbb, 0x52, 0x30, 0x0b,
+ 0xb1, 0x67, 0x7b, 0xbb, 0xdc, 0x38, 0x58, 0xf4, 0x2f, 0xe4, 0xeb, 0x47,
+ 0xf0, 0x49, 0x76, 0x45, 0x10, 0x02, 0x19, 0xa7, 0xc6, 0x1f, 0x8a, 0x71,
+ 0xda, 0x51, 0x61, 0x79, 0xc4, 0x10, 0xeb, 0x3a, 0x11, 0xd9, 0x93, 0x1d,
+ 0x83, 0x81, 0x48, 0x3d, 0x68, 0x35, 0xff, 0xe3, 0xa6, 0xa8, 0x40, 0x74,
+ 0xdb, 0x7c, 0xb4, 0xb2, 0x05, 0x89, 0xc8, 0x09, 0x42, 0x27, 0x28, 0x55,
+ 0x01, 0x57, 0xc9, 0xf9, 0xfa, 0x36, 0xd3, 0x5c, 0x51, 0x40, 0xca, 0x1e,
+ 0x34, 0xc8, 0xb9, 0x27, 0xf1, 0x15, 0xc9, 0xa4, 0x18, 0x9c, 0xa8, 0x4c,
+ 0x55, 0xf8, 0x4d, 0x90, 0xbc, 0x88, 0xd1, 0x46, 0x01, 0x80, 0x96, 0x54,
+ 0x8d, 0x01, 0x6e, 0xe4, 0x26, 0x0c, 0x7a, 0x08, 0x3d, 0x7c, 0x26, 0x66,
+ 0xb1, 0xd1, 0x15, 0xc7, 0xc0, 0x0b, 0x06, 0x92, 0x9c, 0x26, 0xa6, 0x6c,
+ 0x3a, 0x46, 0x47, 0x15, 0x37, 0xb0, 0x0a, 0xc1, 0x5d, 0xe0, 0x51, 0xae,
+ 0x17, 0x87, 0x2f, 0x75, 0x2c, 0x64, 0xd5, 0x39, 0x09, 0xe6, 0xd0, 0x7c,
+ 0x3d, 0x79, 0x47, 0x78, 0x0a, 0x82, 0xc9, 0xba, 0x37, 0x07, 0x93, 0x94,
+ 0xa4, 0x45, 0x7c, 0x07, 0x69, 0x24, 0x1d, 0xc9, 0x75, 0x41, 0x6b, 0xc1,
+ 0x42, 0x28, 0x06, 0xe3, 0xfc, 0x7b, 0xd2, 0xf8, 0xbf, 0xe7, 0x5a, 0xc2,
+ 0xc0, 0x81, 0x63, 0xf3, 0x84, 0x32, 0x31, 0x4a, 0x8d, 0x6b, 0xe3, 0x3e,
+ 0x22, 0x67, 0x9a, 0x3a, 0x96, 0x09, 0xa6, 0xf9, 0x53, 0x40, 0x41, 0x2a,
+ 0x04, 0xa7, 0xc5, 0x7b, 0x86, 0xcd, 0xed, 0xec, 0xae, 0xfd, 0xc7, 0x11,
+ 0x48, 0x56, 0x77, 0x0b, 0xb7, 0xbb, 0xaf, 0xfb, 0x6c, 0x9e, 0xd6, 0x5c,
+ 0xbc, 0xf7, 0x9a, 0x75, 0xb5, 0xb2, 0x20, 0xd9, 0x60, 0x90, 0x65, 0x02,
+ 0xf9, 0x16, 0x34, 0xdf, 0x0b, 0x16, 0x2a, 0x97, 0x00, 0x5d, 0xc1, 0x65,
+ 0xc3, 0xb9, 0x1f, 0x2e, 0x85, 0x97, 0xbd, 0xca, 0xaa, 0x1d, 0xf2, 0x4f,
+ 0x74, 0xe5, 0x56, 0x94, 0xdc, 0x53, 0xbb, 0xc0, 0x75, 0x1c, 0x2b, 0x59,
+ 0x6b, 0x50, 0x2c, 0x25, 0x4c, 0x78, 0xd7, 0x68, 0x40, 0x0b, 0x91, 0x7a,
+ 0x93, 0x02, 0x83, 0x5e, 0x6c, 0x03, 0xc7, 0xc4, 0x24, 0x6f, 0x8b, 0xa4,
+ 0x70, 0x37, 0x1f, 0xe5, 0x33, 0x59, 0xf6, 0xbb, 0x5f, 0xb8, 0x58, 0x50,
+ 0x62, 0x16, 0x95, 0x2a, 0x88, 0xa3, 0xc6, 0x24, 0x94, 0x4b, 0xb0, 0x03,
+ 0x8e, 0xe6, 0x50, 0xd1, 0x63, 0xa2, 0xab, 0x00, 0x16, 0xf4, 0x0a, 0x7d,
+ 0xe6, 0xe0, 0xb9, 0x0c, 0xd8, 0x08, 0xae, 0xf6, 0x80, 0xb7, 0x48, 0xb8,
+ 0x10, 0xd1, 0x77, 0x57, 0x48, 0x2a, 0xc1, 0xf1, 0x4e, 0x61, 0xb4, 0x06,
+ 0x5a, 0xa1, 0xba, 0x32, 0x4a, 0x9a, 0xab, 0x8c, 0xa8, 0xe3, 0xa0, 0x68,
+ 0x39, 0xa3, 0x25, 0x55, 0x48, 0xcd, 0x12, 0x98, 0x14, 0x1b, 0x39, 0x5b,
+ 0xf4, 0x88, 0xbe, 0x5f, 0xac, 0xba, 0x18, 0x20, 0x74, 0x2c, 0xa1, 0x0b,
+ 0xfc, 0xf1, 0x00, 0x85, 0x24, 0x27, 0x3d, 0x80, 0xb6, 0x30, 0x42, 0x7b,
+ 0x74, 0xb0, 0xbf, 0x87, 0x51, 0x9b, 0xa8, 0x1c, 0x79, 0xbd, 0x50, 0x85,
+ 0x66, 0xe1, 0x93, 0xdd, 0xc5, 0x5d, 0x5d, 0xd0, 0xbe, 0xcb, 0x90, 0x36,
+ 0xf8, 0xc6, 0xc2, 0xea, 0xea, 0x40, 0xce, 0xa7, 0xb0, 0xae, 0xc5, 0x44,
+ 0x3a, 0x27, 0xc5, 0x4a, 0xf0, 0x21, 0x4f, 0xf6, 0x63, 0xb1, 0x8c, 0x20,
+ 0x76, 0x65, 0xb5, 0x79, 0x55, 0x10, 0xa5, 0xa7, 0x4b, 0x57, 0x96, 0xb3,
+ 0x03, 0xe6, 0xa8, 0x93, 0xf5, 0xc5, 0xca, 0xe0, 0x1a, 0x23, 0x30, 0x6d,
+ 0x09, 0x07, 0x81, 0x5e, 0x05, 0xc6, 0x1b, 0x7a, 0x0e, 0xde, 0xf3, 0x00,
+ 0x91, 0xf3, 0xbb, 0x4b, 0xa6, 0x8e, 0x96, 0xc3, 0x3a, 0xc8, 0x72, 0x19,
+ 0x23, 0x23, 0xc7, 0x94, 0x46, 0x75, 0xa2, 0xc5, 0x9e, 0xa3, 0x15, 0x86,
+ 0xb4, 0xa7, 0x95, 0xda, 0x16, 0xae, 0x42, 0xe8, 0xcc, 0xf6, 0x41, 0xbc,
+ 0x9c, 0xe8, 0x07, 0xc9, 0x05, 0x3c, 0x74, 0xb2, 0xad, 0x77, 0xc4, 0x08,
+ 0x56, 0x78, 0xb8, 0x65, 0x2a, 0x33, 0x39, 0x82, 0x16, 0x3c, 0x2b, 0x73,
+ 0x41, 0x2a, 0xbc, 0xc8, 0x36, 0x23, 0x2c, 0x23, 0x29, 0xce, 0x94, 0x8a,
+ 0xba, 0x13, 0x3f, 0xfa, 0xcc, 0x6e, 0x17, 0x40, 0xb0, 0xb4, 0x9c, 0xae,
+ 0xf9, 0x72, 0x40, 0xf7, 0x2a, 0xaf, 0x00, 0x17, 0x7e, 0x88, 0x44, 0x4e,
+ 0x32, 0xa4, 0x80, 0x96, 0x53, 0x20, 0xe4, 0xaa, 0x18, 0x9c, 0x69, 0x63,
+ 0xdb, 0x81, 0x73, 0x0e, 0x64, 0x40, 0x12, 0xc1, 0x26, 0x0e, 0xac, 0x4d,
+ 0x38, 0xa6, 0x4c, 0x05, 0xeb, 0x42, 0x1f, 0x88, 0x6e, 0x6c, 0xa3, 0x98,
+ 0x95, 0xc3, 0x5a, 0x31, 0xfc, 0x8a, 0x7c, 0xd6, 0xa5, 0x6c, 0x5a, 0xc9,
+ 0xf5, 0xf2, 0xb0, 0xf7, 0x05, 0x8d, 0x3a, 0x0b, 0x3f, 0x4d, 0x1b, 0x0e,
+ 0x38, 0x7b, 0x1c, 0xe5, 0xd0, 0x75, 0x40, 0x77, 0xc2, 0xe0, 0x8b, 0xa9,
+ 0xfb, 0xa6, 0xa7, 0x13, 0xf0, 0xbc, 0x0c, 0x13, 0xb0, 0x70, 0x3a, 0x2f,
+ 0x20, 0xe7, 0x38, 0xd8, 0x82, 0xa4, 0xc0, 0x06, 0x96, 0x95, 0x75, 0x5c,
+ 0xbc, 0x68, 0xce, 0xee, 0xa6, 0x44, 0xbb, 0xf2, 0x62, 0x14, 0x43, 0x10,
+ 0xe6, 0x0b, 0x5c, 0x66, 0x02, 0xbf, 0x38, 0xe9, 0x8f, 0x19, 0x69, 0x6c,
+ 0x08, 0xfa, 0x93, 0x23, 0xf1, 0x35, 0x5f, 0x33, 0xcf, 0xe2, 0x32, 0x11,
+ 0xda, 0x31, 0xbb, 0xd8, 0xf5, 0x7e, 0x55, 0xc3, 0x6a, 0xa3, 0x04, 0x8c,
+ 0xef, 0x50, 0x67, 0x0f, 0xe9, 0xbb, 0x11, 0x6b, 0xca, 0x5a, 0x23, 0x15,
+ 0xf7, 0x52, 0x8c, 0x69, 0xbb, 0x2d, 0x26, 0xd3, 0x78, 0x32, 0x33, 0x9b,
+ 0x1d, 0x02, 0x7c, 0x22, 0x4b, 0x57, 0x19, 0xec, 0xcd, 0x16, 0x63, 0x5d,
+ 0x1f, 0x0c, 0x67, 0xda, 0x6a, 0xc7, 0x2c, 0xf1, 0x0b, 0xcf, 0x92, 0x10,
+ 0xcb, 0x78, 0x57, 0x67, 0x61, 0x0e, 0xb3, 0x55, 0xb0, 0x17, 0x32, 0x4e,
+ 0x95, 0xf1, 0xcb, 0xb5, 0xdb, 0x5d, 0x8e, 0x38, 0x97, 0x28, 0x46, 0x1e,
+ 0x37, 0x4b, 0x5c, 0x03, 0xf4, 0x84, 0x0c, 0xfc, 0x49, 0x3b, 0xd2, 0xc6,
+ 0x97, 0xd4, 0x4f, 0xef, 0xe6, 0x5c, 0xb2, 0x96, 0x8e, 0xbc, 0x18, 0x9f,
+ 0xec, 0x8a, 0x67, 0x53, 0xe8, 0x2a, 0x41, 0x5c, 0x6e, 0xfe, 0xca, 0x1a,
+ 0xd0, 0x03, 0x4f, 0xe8, 0xd9, 0xb0, 0xe2, 0xa1, 0x6c, 0x32, 0xd5, 0x37,
+ 0x68, 0x9c, 0x6b, 0x30, 0x87, 0xb4, 0x6e, 0xa8, 0xc5, 0x45, 0xe4, 0x74,
+ 0x4a, 0x80, 0x02, 0x84, 0x78, 0x0e, 0x2c, 0x9c, 0x37, 0x07, 0x26, 0x31,
+ 0x88, 0x0a, 0x89, 0xd2, 0xba, 0x8b, 0x09, 0xb2, 0x16, 0x7b, 0x23, 0xa8,
+ 0x0c, 0x82, 0xc4, 0x22, 0xa2, 0x21, 0x2d, 0xa4, 0xa0, 0xeb, 0xe4, 0xa6,
+ 0xd4, 0x16, 0xa0, 0xa7, 0x19, 0x8b, 0x8f, 0x87, 0x9b, 0x53, 0x6c, 0xba,
+ 0x14, 0xa7, 0xc4, 0x64, 0x08, 0xb4, 0x68, 0xda, 0x85, 0xa6, 0x47, 0xbc,
+ 0x58, 0x34, 0xcd, 0x60, 0x43, 0xad, 0x14, 0xd4, 0xca, 0xd7, 0xb1, 0x6c,
+ 0xc0, 0x05, 0x68, 0xaf, 0xa7, 0x08, 0x9d, 0x6a, 0xb0, 0x70, 0x96, 0x81,
+ 0xb8, 0x55, 0xbf, 0xa1, 0xcc, 0xb1, 0x37, 0xe0, 0x94, 0x42, 0x05, 0x0c,
+ 0x83, 0xef, 0x6d, 0xf0, 0x4e, 0xba, 0xe6, 0x78, 0x49, 0xaf, 0x1f, 0x88,
+ 0xf0, 0x18, 0x0c, 0x17, 0x66, 0x92, 0xd8, 0x50, 0x57, 0x3b, 0x8e, 0xc9,
+ 0xd5, 0x8c, 0xfb, 0x9b, 0x78, 0x65, 0x01, 0x76, 0x7a, 0x0e, 0xf0, 0x7f,
+ 0x2b, 0xc4, 0x48, 0x81, 0xc2, 0xb7, 0xc1, 0x6e, 0x4b, 0xc7, 0x33, 0xa3,
+ 0x9b, 0xf1, 0xcf, 0x63, 0x77, 0x52, 0x07, 0xe1, 0x9f, 0xa9, 0x6b, 0xce,
+ 0x02, 0xbf, 0x06, 0x8d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+
+const uint8_t kExpectedCiphertext[BCM_MLKEM768_CIPHERTEXT_BYTES] = {
+ 0x8c, 0xfa, 0xd2, 0x09, 0x06, 0x1b, 0xff, 0x23, 0x9f, 0x84, 0x61, 0xfd,
+ 0x69, 0x7a, 0xa6, 0x2c, 0x57, 0x43, 0x64, 0x6b, 0x6b, 0x6b, 0xa3, 0xe1,
+ 0xa9, 0x4f, 0x3e, 0x29, 0xff, 0x3d, 0xb1, 0x84, 0x51, 0x1d, 0x48, 0xe3,
+ 0xf2, 0xf9, 0x5c, 0x9b, 0xf8, 0x05, 0xa1, 0x4c, 0xf4, 0x78, 0xce, 0xd8,
+ 0xc8, 0x0a, 0xc9, 0x71, 0xa7, 0x50, 0x89, 0xde, 0x66, 0x11, 0x68, 0x2c,
+ 0x70, 0x0f, 0xa3, 0x15, 0xa7, 0x8f, 0xa7, 0xd1, 0x49, 0x32, 0x2b, 0xe7,
+ 0xe3, 0x63, 0xff, 0x6b, 0x8c, 0x77, 0xd8, 0x97, 0x6f, 0x6c, 0x80, 0xc2,
+ 0x73, 0x7d, 0xe2, 0x39, 0x6f, 0x61, 0x4f, 0xa3, 0x85, 0x14, 0x8e, 0x68,
+ 0x58, 0x18, 0xba, 0x1c, 0x19, 0x01, 0x4c, 0x06, 0x73, 0x58, 0x4a, 0x9d,
+ 0xdd, 0x2e, 0x78, 0x82, 0x62, 0xbf, 0x15, 0x0c, 0x8e, 0xa7, 0xcf, 0xee,
+ 0xd7, 0x9a, 0x42, 0x30, 0xf5, 0x44, 0xdc, 0x3f, 0xdc, 0x67, 0x5c, 0x06,
+ 0xf0, 0xcf, 0x3b, 0x24, 0x9e, 0xfa, 0xe8, 0x4b, 0x3b, 0x00, 0x01, 0x7c,
+ 0x4d, 0x50, 0xa8, 0xac, 0x30, 0x74, 0xf4, 0x73, 0x98, 0x5e, 0x09, 0x92,
+ 0xbd, 0xe1, 0xc4, 0x3a, 0x9f, 0xd0, 0x62, 0xc8, 0x4e, 0x7f, 0xb0, 0xaa,
+ 0xb3, 0x8c, 0xb5, 0xf9, 0x57, 0xe3, 0x90, 0x9a, 0x94, 0x0d, 0xdb, 0x9e,
+ 0xf7, 0x78, 0xbf, 0x18, 0xd0, 0x02, 0x8e, 0x02, 0x04, 0xbe, 0xee, 0x87,
+ 0x49, 0xb1, 0xfe, 0x28, 0xd2, 0xdb, 0xd0, 0x7a, 0x12, 0x50, 0xa3, 0xc6,
+ 0x32, 0xd6, 0x06, 0xa6, 0xc5, 0xb0, 0xa8, 0xbe, 0x49, 0x8a, 0x8b, 0xfe,
+ 0xf6, 0xb1, 0xe5, 0xb6, 0xf0, 0x61, 0xc6, 0x1f, 0xe7, 0xcb, 0x4d, 0x66,
+ 0xdd, 0xe4, 0xd2, 0x2b, 0x73, 0xbd, 0x03, 0x79, 0x76, 0x05, 0x87, 0x58,
+ 0x6f, 0x6f, 0x8f, 0x20, 0x4f, 0x1f, 0x81, 0xa9, 0x9c, 0x22, 0x8d, 0xbd,
+ 0xef, 0x41, 0x5e, 0x39, 0x9e, 0x90, 0x4b, 0x63, 0x8b, 0x50, 0xac, 0x4f,
+ 0x20, 0x08, 0x82, 0x53, 0x52, 0x86, 0xce, 0x55, 0xf5, 0x21, 0xd7, 0x8c,
+ 0xdf, 0xf3, 0x54, 0x90, 0xed, 0x27, 0xa9, 0x95, 0xbb, 0xec, 0x7a, 0xe2,
+ 0xeb, 0x80, 0x29, 0xca, 0xc9, 0x4b, 0x1a, 0xfe, 0xe8, 0x40, 0xcf, 0x70,
+ 0x37, 0xb3, 0xb8, 0xb3, 0x04, 0xf6, 0xc3, 0x44, 0x1e, 0xf8, 0x40, 0x95,
+ 0xf9, 0x92, 0x97, 0x63, 0xab, 0x35, 0x11, 0x7b, 0x2d, 0x9e, 0x5b, 0xeb,
+ 0xfe, 0x80, 0xfe, 0xc3, 0xc6, 0xa4, 0x8c, 0xac, 0xd2, 0xa5, 0x0d, 0x11,
+ 0xcd, 0xbc, 0xdd, 0x57, 0x9d, 0xf4, 0xbc, 0xdf, 0xbe, 0xa2, 0xfc, 0xcd,
+ 0x2b, 0x83, 0x0e, 0x4e, 0x77, 0x44, 0x10, 0x93, 0xeb, 0xca, 0xec, 0xb6,
+ 0x26, 0x48, 0x45, 0x08, 0x72, 0xd4, 0xfe, 0xa2, 0xe5, 0xc8, 0x12, 0x8f,
+ 0x38, 0xcd, 0xd6, 0xaa, 0x97, 0xd4, 0xad, 0xb3, 0x0b, 0x19, 0x5b, 0x70,
+ 0x50, 0xbf, 0x9d, 0x45, 0xd6, 0x0d, 0xf6, 0x72, 0x08, 0x0f, 0x98, 0xbd,
+ 0x1f, 0x39, 0xea, 0x4c, 0x76, 0xa8, 0x6e, 0xc2, 0x24, 0xe3, 0x3d, 0xf4,
+ 0x40, 0xe8, 0x68, 0xfe, 0xaf, 0xeb, 0xae, 0x65, 0x84, 0x86, 0x10, 0xb6,
+ 0x58, 0x75, 0xb9, 0x22, 0x6d, 0x74, 0x5d, 0xa7, 0xc0, 0x17, 0x10, 0x0f,
+ 0x36, 0x5f, 0x99, 0xf3, 0x60, 0x39, 0xeb, 0x6e, 0x04, 0x4d, 0x29, 0xc7,
+ 0xec, 0x2a, 0x1d, 0x8f, 0x5c, 0x23, 0x84, 0xba, 0x65, 0xe9, 0xab, 0x32,
+ 0xd4, 0x62, 0xd1, 0x53, 0xb8, 0x71, 0x40, 0x9a, 0xf0, 0x05, 0xdb, 0xa0,
+ 0x5a, 0xca, 0xeb, 0xb0, 0xbf, 0xfe, 0x7e, 0x19, 0x32, 0x42, 0xef, 0xab,
+ 0xf3, 0x49, 0x13, 0x50, 0x08, 0x98, 0xcd, 0xcf, 0x5a, 0x77, 0x5d, 0xe6,
+ 0x3f, 0x9d, 0xa0, 0x21, 0x98, 0xcb, 0x78, 0x69, 0xd8, 0x22, 0xdb, 0xae,
+ 0x87, 0x2c, 0x38, 0x0a, 0x96, 0xa2, 0x30, 0x8f, 0x37, 0xe4, 0xc5, 0x94,
+ 0x57, 0x40, 0x30, 0xa0, 0x4e, 0x7c, 0xfe, 0x6f, 0x2e, 0x15, 0x88, 0x7b,
+ 0xf2, 0x22, 0x9c, 0x95, 0x7e, 0xd6, 0x2d, 0x37, 0xd4, 0x13, 0x95, 0x31,
+ 0xf6, 0xbb, 0xf4, 0xaf, 0x33, 0x42, 0xf0, 0x45, 0xb1, 0xa8, 0xb4, 0x09,
+ 0x9a, 0x6d, 0x7a, 0xdb, 0xb0, 0xf2, 0x00, 0xdc, 0x77, 0x6a, 0x43, 0xf1,
+ 0xbb, 0x56, 0xc5, 0x7c, 0xee, 0xa6, 0xd6, 0x10, 0xa0, 0x81, 0xca, 0x28,
+ 0xab, 0x48, 0xb4, 0x72, 0xbc, 0xe6, 0xe2, 0x24, 0xef, 0x49, 0xdc, 0xb5,
+ 0x1f, 0x83, 0xe7, 0xda, 0xdd, 0x73, 0x5c, 0x7b, 0x85, 0x4a, 0x15, 0x7b,
+ 0xcb, 0xf1, 0x14, 0x6b, 0x32, 0xef, 0xce, 0xaf, 0x37, 0x04, 0xa4, 0x1e,
+ 0xcb, 0x1b, 0x84, 0x1d, 0xdb, 0xbf, 0x2f, 0x88, 0x89, 0xf4, 0x5e, 0xb0,
+ 0x32, 0x99, 0x81, 0x9c, 0x8a, 0xb0, 0xfd, 0x28, 0x6f, 0xc9, 0xe9, 0xaf,
+ 0x60, 0x11, 0xa5, 0x8d, 0xa4, 0xfb, 0x93, 0x91, 0x7a, 0xa0, 0xd2, 0xcd,
+ 0xda, 0x4d, 0xf3, 0xfe, 0xc8, 0x55, 0x4f, 0x26, 0x9d, 0x56, 0x87, 0x12,
+ 0xfe, 0x93, 0x3e, 0x34, 0xf5, 0x3d, 0x4f, 0x6e, 0x26, 0x56, 0xf7, 0x80,
+ 0xa2, 0xb9, 0x0f, 0xa1, 0xf8, 0x72, 0xb0, 0xaa, 0xec, 0xe2, 0x97, 0xd0,
+ 0x3a, 0x6d, 0xe5, 0xe9, 0x12, 0x1b, 0x32, 0x0a, 0xdb, 0x52, 0x8f, 0x9d,
+ 0xd0, 0xff, 0x67, 0xcc, 0x63, 0x41, 0x32, 0x2f, 0xe7, 0x0c, 0xb0, 0xa5,
+ 0x73, 0xc5, 0xc3, 0x54, 0x75, 0x06, 0x8e, 0x36, 0x54, 0xea, 0x9c, 0x6b,
+ 0x60, 0xee, 0x10, 0x06, 0xd2, 0xb3, 0x8c, 0xe3, 0x09, 0xfe, 0x1e, 0x47,
+ 0xc3, 0xd5, 0x6c, 0x0d, 0x0c, 0x84, 0x5e, 0x4f, 0x01, 0xfa, 0xcf, 0xae,
+ 0xc1, 0xac, 0xd9, 0xb0, 0x03, 0x74, 0x8e, 0xc5, 0x57, 0x51, 0x96, 0x23,
+ 0x72, 0xc6, 0x81, 0x7f, 0xf1, 0x6c, 0x29, 0xea, 0x31, 0x2a, 0x23, 0xbb,
+ 0x88, 0x6f, 0x01, 0xa2, 0x2f, 0x69, 0xd2, 0x1c, 0xe8, 0x1e, 0x63, 0x44,
+ 0xd9, 0x90, 0x0b, 0x57, 0x78, 0xc6, 0xd1, 0xb3, 0xf6, 0x97, 0x99, 0xd8,
+ 0x09, 0xe0, 0x9d, 0x69, 0x00, 0xa0, 0xd4, 0xe0, 0x80, 0xfd, 0xdf, 0x23,
+ 0x3a, 0xf8, 0xc0, 0x97, 0xea, 0xb6, 0xbf, 0x87, 0x75, 0x40, 0x1e, 0x0d,
+ 0x1e, 0x6c, 0x84, 0xa4, 0x7e, 0xbb, 0xa3, 0x02, 0x76, 0x76, 0xc8, 0x4e,
+ 0x8b, 0x21, 0x3d, 0x27, 0xbc, 0x38, 0x0f, 0x79, 0xfb, 0xc5, 0xdd, 0x37,
+ 0x67, 0xcb, 0x61, 0x5a, 0x12, 0x85, 0x31, 0x91, 0x3e, 0x7a, 0x4b, 0x6c,
+ 0xfd, 0x4e, 0x54, 0x47, 0xfc, 0xc5, 0x2e, 0x34, 0xe4, 0xaa, 0x3d, 0xa2,
+ 0xd3, 0x1d, 0x15, 0xbc, 0xea, 0xa7, 0xe3, 0xcd, 0xd6, 0x49, 0xee, 0x06,
+ 0x11, 0x2b, 0xf1, 0x58, 0x81, 0xdd, 0x99, 0xe1, 0xbd, 0x63, 0xa0, 0xd7,
+ 0xa0, 0x4b, 0x01, 0xab, 0xf3, 0x5c, 0x35, 0xf0, 0xb0, 0xdc, 0xd0, 0x87,
+ 0x78, 0x02, 0xec, 0x99, 0x0e, 0xb2, 0x23, 0x8b, 0xb1, 0x44, 0x93, 0x65,
+ 0xd5, 0x1c, 0x00, 0x7e, 0x98, 0xb3, 0x5e, 0xf9, 0xca, 0xbc, 0x26, 0x38,
+ 0x18, 0x22, 0x14, 0x3c, 0xed, 0x8d, 0x54, 0xa4, 0x05, 0x00, 0x7f, 0xfb,
+ 0xd5, 0x73, 0x77, 0xf4, 0x98, 0xa0, 0xf7, 0x60, 0xb4, 0x47, 0x10, 0x75,
+ 0x30, 0x2d, 0xde, 0x9c, 0x3e, 0x08, 0x8f, 0xe5, 0xc9, 0x5a, 0xd9, 0x20,
+ 0xf3, 0x97, 0xb5, 0xd1, 0xb3, 0x90, 0x23, 0x6f, 0x9f, 0x5e, 0xf1, 0x0f,
+ 0x76, 0x18, 0xbf, 0x2b, 0x23, 0x8e, 0x45, 0x3f, 0xaf, 0x2b, 0x53, 0x78,
+ 0x27, 0xa2, 0xf6, 0x07, 0x2b, 0x61, 0x24, 0x5b, 0xc7, 0x2e, 0x25, 0xf1,
+ 0xb3, 0x4c, 0x50, 0xe8, 0x6d, 0xee, 0x56, 0x52, 0x37, 0xd0, 0x6e, 0xd6,
+ 0xcb, 0xc8, 0x2a, 0xb1, 0xba, 0x49, 0xc7, 0x5a, 0x55, 0x3c, 0x6f, 0x16,
+ 0x64, 0x08, 0xa6, 0x46, 0x09, 0x37, 0x86, 0x0b, 0xe7, 0x7e, 0x2d, 0xf4,
+ 0x96, 0x80, 0x41, 0x77, 0x1a, 0xf9, 0xd2, 0xe0, 0xf3, 0x64, 0x0e, 0x3f,
+ 0x3d, 0xe1, 0xec, 0x63, 0x40, 0x10, 0x15, 0xcf, 0x4c, 0xc9, 0x1c, 0x9b,
+ 0x9f, 0xe8, 0x50, 0x27, 0xc2, 0x54, 0x44, 0x14, 0xb6, 0x2e, 0xe4, 0x53,
+ 0xf2, 0x60, 0x8a, 0xb6, 0x1c, 0x14, 0xb6, 0x25, 0xf2, 0x44, 0x59, 0xb7,
+ 0x67, 0x3b, 0x94, 0x88, 0x15, 0x70, 0x6f, 0xa8};
+
+const uint8_t kExpectedSharedSecret[BCM_MLKEM_SHARED_SECRET_BYTES] = {
+ 0x7d, 0x9f, 0x1c, 0xb4, 0xae, 0x04, 0xd7, 0x5f, 0xa6, 0x57, 0x5a,
+ 0xe0, 0xe4, 0x29, 0xb5, 0x73, 0xa9, 0x74, 0xb7, 0xa1, 0x25, 0xbd,
+ 0xfb, 0x8a, 0x6e, 0x0f, 0x19, 0xba, 0xe1, 0x16, 0xae, 0x81};
+
+const uint8_t
+ kExpectedImplicitRejectionSharedSecret[BCM_MLKEM_SHARED_SECRET_BYTES] = {
+ 0xa3, 0x19, 0x2a, 0x8c, 0x88, 0xfc, 0x99, 0x6d, 0x2d, 0xf9, 0x85,
+ 0x8d, 0x2c, 0x55, 0x36, 0x39, 0x93, 0xf0, 0x49, 0x4d, 0x7e, 0xc0,
+ 0xbe, 0x5a, 0x56, 0x7b, 0x8a, 0x42, 0x43, 0xa5, 0x74, 0x5d};
diff --git a/crypto/fipsmodule/mlkem/mlkem.cc.inc b/crypto/fipsmodule/mlkem/mlkem.cc.inc
index c543f3c..265b0ca 100644
--- a/crypto/fipsmodule/mlkem/mlkem.cc.inc
+++ b/crypto/fipsmodule/mlkem/mlkem.cc.inc
@@ -26,12 +26,19 @@
#include "../../internal.h"
#include "../bcm_interface.h"
+#include "../delocate.h"
#include "../keccak/internal.h"
namespace mlkem {
namespace {
+namespace fips {
+void ensure_keygen_self_test();
+void ensure_encap_self_test();
+void ensure_decap_self_test();
+} // namespace fips
+
// See
// https://csrc.nist.gov/pubs/fips/203/final
@@ -690,7 +697,7 @@
}
template <int RANK>
-void mlkem_generate_key_external_seed(
+void mlkem_generate_key_external_seed_no_self_test(
uint8_t *out_encoded_public_key, private_key<RANK> *priv,
const uint8_t seed[BCM_MLKEM_SEED_BYTES]) {
uint8_t augmented_seed[33];
@@ -727,6 +734,15 @@
OPENSSL_memcpy(priv->fo_failure_secret, seed + 32, 32);
}
+template <int RANK>
+void mlkem_generate_key_external_seed(
+ uint8_t *out_encoded_public_key, private_key<RANK> *priv,
+ const uint8_t seed[BCM_MLKEM_SEED_BYTES]) {
+ fips::ensure_keygen_self_test();
+ mlkem_generate_key_external_seed_no_self_test(out_encoded_public_key, priv,
+ seed);
+}
+
// Encrypts a message with given randomness to
// the ciphertext in |out|. Without applying the Fujisaki-Okamoto transform this
// would not result in a CCA secure scheme, since lattice schemes are vulnerable
@@ -768,9 +784,9 @@
// See section 6.3
template <int RANK>
-void mlkem_decap(uint8_t out_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES],
- const uint8_t *ciphertext,
- const struct private_key<RANK> *priv) {
+void mlkem_decap_no_self_test(
+ uint8_t out_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES],
+ const uint8_t *ciphertext, const struct private_key<RANK> *priv) {
uint8_t decrypted[64];
decrypt_cpa(decrypted, priv, ciphertext);
OPENSSL_memcpy(decrypted + 32, priv->pub.public_key_hash,
@@ -794,6 +810,14 @@
}
}
+template <int RANK>
+void mlkem_decap(uint8_t out_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES],
+ const uint8_t *ciphertext,
+ const struct private_key<RANK> *priv) {
+ fips::ensure_decap_self_test();
+ mlkem_decap_no_self_test(out_shared_secret, ciphertext, priv);
+}
+
// mlkem_parse_public_key_no_hash parses |in| into |pub| but doesn't calculate
// the value of |pub->public_key_hash|.
template <int RANK>
@@ -863,8 +887,8 @@
return (struct public_key<RANK768> *)external;
}
-static struct public_key<RANK1024> *
-public_key_1024_from_external(const struct BCM_mlkem1024_public_key *external) {
+static struct public_key<RANK1024> *public_key_1024_from_external(
+ const struct BCM_mlkem1024_public_key *external) {
static_assert(sizeof(struct BCM_mlkem1024_public_key) >=
sizeof(struct public_key<RANK1024>),
"MLKEM1024 public key is too small");
@@ -874,8 +898,8 @@
return (struct public_key<RANK1024> *)external;
}
-struct private_key<RANK768> *
-private_key_768_from_external(const struct BCM_mlkem768_private_key *external) {
+struct private_key<RANK768> *private_key_768_from_external(
+ const struct BCM_mlkem768_private_key *external) {
static_assert(sizeof(struct BCM_mlkem768_private_key) >=
sizeof(struct private_key<RANK768>),
"MLKEM private key too small");
@@ -885,8 +909,7 @@
return (struct private_key<RANK768> *)external;
}
-struct private_key<RANK1024> *
-private_key_1024_from_external(
+struct private_key<RANK1024> *private_key_1024_from_external(
const struct BCM_mlkem1024_private_key *external) {
static_assert(sizeof(struct BCM_mlkem1024_private_key) >=
sizeof(struct private_key<RANK1024>),
@@ -897,9 +920,193 @@
return (struct private_key<RANK1024> *)external;
}
+// See section 6.2.
+template <int RANK>
+void mlkem_encap_external_entropy_no_self_test(
+ uint8_t *out_ciphertext,
+ uint8_t out_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES],
+ const struct mlkem::public_key<RANK> *pub,
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY]) {
+ uint8_t input[64];
+ OPENSSL_memcpy(input, entropy, BCM_MLKEM_ENCAP_ENTROPY);
+ OPENSSL_memcpy(input + BCM_MLKEM_ENCAP_ENTROPY, pub->public_key_hash,
+ sizeof(input) - BCM_MLKEM_ENCAP_ENTROPY);
+ uint8_t key_and_randomness[64];
+ mlkem::hash_g(key_and_randomness, input, sizeof(input));
+ encrypt_cpa(out_ciphertext, pub, entropy, key_and_randomness + 32);
+ // The ciphertext is public.
+ CONSTTIME_DECLASSIFY(out_ciphertext, mlkem::ciphertext_size(RANK));
+ static_assert(BCM_MLKEM_SHARED_SECRET_BYTES == 32, "");
+ memcpy(out_shared_secret, key_and_randomness, 32);
+}
+
+template <int RANK>
+void mlkem_encap_external_entropy(
+ uint8_t *out_ciphertext,
+ uint8_t out_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES],
+ const struct mlkem::public_key<RANK> *pub,
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY]) {
+ fips::ensure_encap_self_test();
+ mlkem_encap_external_entropy_no_self_test(out_ciphertext, out_shared_secret,
+ pub, entropy);
+}
+
+namespace fips {
+
+#include "fips_known_values.inc"
+
+static int keygen_self_test() {
+ uint8_t pub_key[BCM_MLKEM768_PUBLIC_KEY_BYTES];
+ private_key<RANK768> priv;
+ static_assert(sizeof(kTestEntropy) >= BCM_MLKEM_SEED_BYTES);
+ mlkem_generate_key_external_seed_no_self_test(pub_key, &priv, kTestEntropy);
+ CBB cbb;
+ constexpr size_t kMarshaledPrivateKeySize = 2400;
+ uint8_t priv_bytes[kMarshaledPrivateKeySize];
+ CBB_init_fixed(&cbb, priv_bytes, sizeof(priv_bytes));
+ static_assert(sizeof(kExpectedPrivateKeyBytes) == kMarshaledPrivateKeySize);
+ static_assert(sizeof(kExpectedPublicKeyBytes) == sizeof(pub_key));
+ if (!mlkem_marshal_private_key(&cbb, &priv) ||
+ !BORINGSSL_check_test(kExpectedPrivateKeyBytes, priv_bytes,
+ sizeof(priv_bytes), "ML-KEM keygen private key") ||
+ !BORINGSSL_check_test(kExpectedPublicKeyBytes, pub_key, sizeof(pub_key),
+ "ML-KEM keygen public key")) {
+ return 0;
+ }
+ return 1;
+}
+
+static int encap_self_test() {
+ CBS cbs;
+ CBS_init(&cbs, kExpectedPublicKeyBytes, sizeof(kExpectedPublicKeyBytes));
+ public_key<RANK768> pub;
+ if (!mlkem_parse_public_key(&pub, &cbs)) {
+ return 0;
+ }
+ uint8_t ciphertext[BCM_MLKEM768_CIPHERTEXT_BYTES];
+ uint8_t shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES];
+ static_assert(sizeof(kTestEntropy) >= BCM_MLKEM_ENCAP_ENTROPY);
+ mlkem_encap_external_entropy_no_self_test(ciphertext, shared_secret, &pub,
+ kTestEntropy);
+ if (!BORINGSSL_check_test(ciphertext, kExpectedCiphertext, sizeof(ciphertext),
+ "ML-KEM encap ciphertext") ||
+ !BORINGSSL_check_test(kExpectedSharedSecret, shared_secret,
+ sizeof(kExpectedSharedSecret),
+ "ML-KEM encap shared secret")) {
+ return 0;
+ }
+ return 1;
+}
+
+static int decap_self_test() {
+ CBS cbs;
+ CBS_init(&cbs, kExpectedPrivateKeyBytes, sizeof(kExpectedPrivateKeyBytes));
+ private_key<RANK768> priv;
+ if (!mlkem_parse_private_key(&priv, &cbs)) {
+ return 0;
+ }
+ uint8_t shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES];
+ mlkem_decap_no_self_test(shared_secret, kExpectedCiphertext, &priv);
+ static_assert(sizeof(kExpectedSharedSecret) == sizeof(shared_secret));
+ if (!BORINGSSL_check_test(kExpectedSharedSecret, shared_secret,
+ sizeof(shared_secret),
+ "ML-KEM decap shared secret")) {
+ return 0;
+ }
+
+ uint8_t implicit_rejection_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES];
+ static_assert(sizeof(kExpectedPrivateKeyBytes) >=
+ sizeof(kExpectedCiphertext));
+ mlkem_decap_no_self_test(implicit_rejection_shared_secret,
+ kExpectedPrivateKeyBytes, &priv);
+ static_assert(sizeof(kExpectedImplicitRejectionSharedSecret) ==
+ sizeof(implicit_rejection_shared_secret));
+ if (!BORINGSSL_check_test(kExpectedImplicitRejectionSharedSecret,
+ implicit_rejection_shared_secret,
+ sizeof(implicit_rejection_shared_secret),
+ "ML-KEM decap implicit rejection shared secret")) {
+ return 0;
+ }
+ return 1;
+}
+
+#if defined(BORINGSSL_FIPS)
+
+DEFINE_STATIC_ONCE(g_mlkem_keygen_self_test_once)
+
+void ensure_keygen_self_test(void) {
+ CRYPTO_once(g_mlkem_keygen_self_test_once_bss_get(), []() {
+ if (!keygen_self_test()) {
+ BORINGSSL_FIPS_abort();
+ }
+ });
+}
+
+DEFINE_STATIC_ONCE(g_mlkem_encap_self_test_once)
+
+void ensure_encap_self_test(void) {
+ CRYPTO_once(g_mlkem_encap_self_test_once_bss_get(), []() {
+ if (!encap_self_test()) {
+ BORINGSSL_FIPS_abort();
+ }
+ });
+}
+
+DEFINE_STATIC_ONCE(g_mlkem_decap_self_test_once)
+
+void ensure_decap_self_test(void) {
+ CRYPTO_once(g_mlkem_decap_self_test_once_bss_get(), []() {
+ if (!decap_self_test()) {
+ BORINGSSL_FIPS_abort();
+ }
+ });
+}
+
+#else
+
+void ensure_keygen_self_test(void) {}
+void ensure_encap_self_test(void) {}
+void ensure_decap_self_test(void) {}
+
+#endif
+} // namespace fips
+
} // namespace
} // namespace mlkem
+bcm_status BCM_mlkem768_check_fips(
+ const struct BCM_mlkem768_private_key *private_key) {
+ mlkem::private_key<RANK768> *priv =
+ mlkem::private_key_768_from_external(private_key);
+
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY] = {1, 2, 3, 4};
+ uint8_t ciphertext[BCM_MLKEM768_CIPHERTEXT_BYTES];
+ uint8_t shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES];
+ mlkem_encap_external_entropy_no_self_test(ciphertext, shared_secret,
+ &priv->pub, entropy);
+
+ if (boringssl_fips_break_test("MLKEM_PWCT")) {
+ shared_secret[0] ^= 1;
+ }
+
+ uint8_t shared_secret2[BCM_MLKEM_SHARED_SECRET_BYTES];
+ mlkem::mlkem_decap_no_self_test(shared_secret2, ciphertext, priv);
+ if (CRYPTO_memcmp(shared_secret, shared_secret2, sizeof(shared_secret)) !=
+ 0) {
+ return bcm_status::failure;
+ }
+ return bcm_status::approved;
+}
+
+bcm_status BCM_mlkem768_generate_key_fips(
+ uint8_t out_encoded_public_key[BCM_MLKEM768_PUBLIC_KEY_BYTES],
+ uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
+ struct BCM_mlkem768_private_key *out_private_key) {
+ BCM_mlkem768_generate_key(out_encoded_public_key, optional_out_seed,
+ out_private_key);
+ return BCM_mlkem768_check_fips(out_private_key);
+}
+
bcm_infallible BCM_mlkem768_generate_key(
uint8_t out_encoded_public_key[BCM_MLKEM768_PUBLIC_KEY_BYTES],
uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
@@ -912,7 +1119,7 @@
}
BCM_mlkem768_generate_key_external_seed(out_encoded_public_key,
out_private_key, seed);
- return bcm_infallible::approved;
+ return bcm_infallible::not_approved;
}
bcm_status BCM_mlkem768_private_key_from_seed(
@@ -921,12 +1128,46 @@
if (seed_len != BCM_MLKEM_SEED_BYTES) {
return bcm_status::failure;
}
+
uint8_t public_key_bytes[BCM_MLKEM768_PUBLIC_KEY_BYTES];
BCM_mlkem768_generate_key_external_seed(public_key_bytes, out_private_key,
seed);
+ return bcm_status::not_approved;
+}
+
+bcm_status BCM_mlkem1024_check_fips(
+ const struct BCM_mlkem1024_private_key *private_key) {
+ mlkem::private_key<RANK1024> *priv =
+ mlkem::private_key_1024_from_external(private_key);
+
+ const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY] = {1, 2, 3, 4};
+ uint8_t ciphertext[BCM_MLKEM1024_CIPHERTEXT_BYTES];
+ uint8_t shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES];
+ mlkem_encap_external_entropy_no_self_test(ciphertext, shared_secret,
+ &priv->pub, entropy);
+
+ if (boringssl_fips_break_test("MLKEM_PWCT")) {
+ shared_secret[0] ^= 1;
+ }
+
+ uint8_t shared_secret2[BCM_MLKEM_SHARED_SECRET_BYTES];
+ mlkem::mlkem_decap_no_self_test(shared_secret2, ciphertext, priv);
+ if (CRYPTO_memcmp(shared_secret, shared_secret2, sizeof(shared_secret)) !=
+ 0) {
+ return bcm_status::failure;
+ }
return bcm_status::approved;
}
+bcm_status BCM_mlkem1024_generate_key_fips(
+ uint8_t out_encoded_public_key[BCM_MLKEM1024_PUBLIC_KEY_BYTES],
+ uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
+ struct BCM_mlkem1024_private_key *out_private_key) {
+ BCM_mlkem1024_generate_key(out_encoded_public_key, optional_out_seed,
+ out_private_key);
+ return BCM_mlkem1024_check_fips(out_private_key);
+}
+
bcm_infallible BCM_mlkem1024_generate_key(
uint8_t out_encoded_public_key[BCM_MLKEM1024_PUBLIC_KEY_BYTES],
uint8_t optional_out_seed[BCM_MLKEM_SEED_BYTES],
@@ -939,7 +1180,7 @@
}
BCM_mlkem1024_generate_key_external_seed(out_encoded_public_key,
out_private_key, seed);
- return bcm_infallible::approved;
+ return bcm_infallible::not_approved;
}
bcm_status BCM_mlkem1024_private_key_from_seed(
@@ -951,7 +1192,7 @@
uint8_t public_key_bytes[BCM_MLKEM1024_PUBLIC_KEY_BYTES];
BCM_mlkem1024_generate_key_external_seed(public_key_bytes, out_private_key,
seed);
- return bcm_status::approved;
+ return bcm_status::not_approved;
}
bcm_infallible BCM_mlkem768_generate_key_external_seed(
@@ -1022,26 +1263,6 @@
return bcm_infallible::approved;
}
-// See section 6.2.
-template <int RANK>
-void mlkem_encap_external_entropy(
- uint8_t *out_ciphertext,
- uint8_t out_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES],
- const struct mlkem::public_key<RANK> *pub,
- const uint8_t entropy[BCM_MLKEM_ENCAP_ENTROPY]) {
- uint8_t input[64];
- OPENSSL_memcpy(input, entropy, BCM_MLKEM_ENCAP_ENTROPY);
- OPENSSL_memcpy(input + BCM_MLKEM_ENCAP_ENTROPY, pub->public_key_hash,
- sizeof(input) - BCM_MLKEM_ENCAP_ENTROPY);
- uint8_t key_and_randomness[64];
- mlkem::hash_g(key_and_randomness, input, sizeof(input));
- encrypt_cpa(out_ciphertext, pub, entropy, key_and_randomness + 32);
- // The ciphertext is public.
- CONSTTIME_DECLASSIFY(out_ciphertext, mlkem::ciphertext_size(RANK));
- static_assert(BCM_MLKEM_SHARED_SECRET_BYTES == 32, "");
- memcpy(out_shared_secret, key_and_randomness, 32);
-}
-
bcm_infallible BCM_mlkem768_encap_external_entropy(
uint8_t out_ciphertext[BCM_MLKEM768_CIPHERTEXT_BYTES],
uint8_t out_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES],
@@ -1163,3 +1384,8 @@
}
return bcm_status::approved;
}
+
+int boringssl_self_test_mlkem() {
+ return mlkem::fips::keygen_self_test() && mlkem::fips::encap_self_test() &&
+ mlkem::fips::decap_self_test();
+}
diff --git a/crypto/fipsmodule/self_check/self_check.cc.inc b/crypto/fipsmodule/self_check/self_check.cc.inc
index 15a68b5..c3b77d4 100644
--- a/crypto/fipsmodule/self_check/self_check.cc.inc
+++ b/crypto/fipsmodule/self_check/self_check.cc.inc
@@ -44,14 +44,6 @@
#include "../tls/internal.h"
-// MSVC wants to put a NUL byte at the end of non-char arrays and so cannot
-// compile the real logic.
-#if defined(_MSC_VER)
-
-int BORINGSSL_self_test(void) { return 0; }
-
-#else
-
static void hexdump(FILE *out, const void *in, size_t len) {
const uint8_t *in8 = reinterpret_cast<const uint8_t *>(in);
for (size_t i = 0; i < len; i++) {
@@ -59,8 +51,8 @@
}
}
-static int check_test(const void *expected, const void *actual,
- size_t expected_len, const char *name) {
+int BORINGSSL_check_test(const void *expected, const void *actual,
+ size_t expected_len, const char *name) {
if (OPENSSL_memcmp(actual, expected, expected_len) != 0) {
FILE *err = CRYPTO_get_stderr();
fprintf(err, "%s failed.\nExpected: ", name);
@@ -74,6 +66,14 @@
return 1;
}
+// MSVC wants to put a NUL byte at the end of non-char arrays and so cannot
+// compile the real logic.
+#if defined(_MSC_VER)
+
+int BORINGSSL_self_test(void) { return 0; }
+
+#else
+
static int set_bignum(BIGNUM **out, const uint8_t *in, size_t len) {
*out = BN_bin2bn(in, len, NULL);
return *out != NULL;
@@ -337,8 +337,8 @@
unsigned sig_len;
if (!rsa_sign_no_self_test(NID_sha256, kRSASignDigest, sizeof(kRSASignDigest),
output, &sig_len, rsa_key) ||
- !check_test(kRSASignSignature, output, sizeof(kRSASignSignature),
- "RSA-sign KAT")) {
+ !BORINGSSL_check_test(kRSASignSignature, output,
+ sizeof(kRSASignSignature), "RSA-sign KAT")) {
fprintf(CRYPTO_get_stderr(), "RSA signing test failed.\n");
goto err;
}
@@ -429,8 +429,9 @@
kECDSASignDigest, sizeof(kECDSASignDigest), ecdsa_sign_output,
&ecdsa_sign_output_len, sizeof(ecdsa_sign_output), ec_key, ecdsa_k,
sizeof(ecdsa_k)) ||
- !check_test(kECDSASignSig, ecdsa_sign_output, sizeof(ecdsa_sign_output),
- "ECDSA-sign signature")) {
+ !BORINGSSL_check_test(kECDSASignSig, ecdsa_sign_output,
+ sizeof(ecdsa_sign_output),
+ "ECDSA-sign signature")) {
fprintf(CRYPTO_get_stderr(), "ECDSA-sign KAT failed.\n");
goto err;
}
@@ -496,8 +497,8 @@
ec_scalar, NULL) ||
!EC_POINT_point2oct(ec_group, ec_point_out, POINT_CONVERSION_UNCOMPRESSED,
z_comp_result, sizeof(z_comp_result), NULL) ||
- !check_test(kP256PointResult, z_comp_result, sizeof(z_comp_result),
- "Z Computation Result")) {
+ !BORINGSSL_check_test(kP256PointResult, z_comp_result,
+ sizeof(z_comp_result), "Z Computation Result")) {
fprintf(CRYPTO_get_stderr(), "Z-computation KAT failed.\n");
goto err;
}
@@ -576,7 +577,7 @@
if (dh == NULL || ffdhe2048_value == NULL || sizeof(dh_out) != DH_size(dh) ||
dh_compute_key_padded_no_self_test(dh_out, ffdhe2048_value, dh) !=
sizeof(dh_out) ||
- !check_test(kDHOutput, dh_out, sizeof(dh_out), "FFC DH")) {
+ !BORINGSSL_check_test(kDHOutput, dh_out, sizeof(dh_out), "FFC DH")) {
fprintf(CRYPTO_get_stderr(), "FFDH failed.\n");
goto err;
}
@@ -655,8 +656,8 @@
// SHA-256 KAT
SHA256(kInput, sizeof(kInput), output);
- return check_test(kPlaintextSHA256, output, sizeof(kPlaintextSHA256),
- "SHA-256 KAT");
+ return BORINGSSL_check_test(kPlaintextSHA256, output,
+ sizeof(kPlaintextSHA256), "SHA-256 KAT");
}
int boringssl_self_test_sha512(void) {
@@ -676,8 +677,8 @@
// SHA-512 KAT
SHA512(kInput, sizeof(kInput), output);
- return check_test(kPlaintextSHA512, output, sizeof(kPlaintextSHA512),
- "SHA-512 KAT");
+ return BORINGSSL_check_test(kPlaintextSHA512, output,
+ sizeof(kPlaintextSHA512), "SHA-512 KAT");
}
int boringssl_self_test_hmac_sha256(void) {
@@ -696,8 +697,8 @@
HMAC(EVP_sha256(), kInput, sizeof(kInput), kInput, sizeof(kInput), output,
&output_len);
return output_len == sizeof(kPlaintextHMACSHA256) &&
- check_test(kPlaintextHMACSHA256, output, sizeof(kPlaintextHMACSHA256),
- "HMAC-SHA-256 KAT");
+ BORINGSSL_check_test(kPlaintextHMACSHA256, output,
+ sizeof(kPlaintextHMACSHA256), "HMAC-SHA-256 KAT");
}
static int boringssl_self_test_fast(void) {
@@ -733,8 +734,9 @@
}
AES_cbc_encrypt(kAESCBCEncPlaintext, output, sizeof(kAESCBCEncPlaintext),
&aes_key, aes_iv, AES_ENCRYPT);
- if (!check_test(kAESCBCEncCiphertext, output, sizeof(kAESCBCEncCiphertext),
- "AES-CBC-encrypt KAT")) {
+ if (!BORINGSSL_check_test(kAESCBCEncCiphertext, output,
+ sizeof(kAESCBCEncCiphertext),
+ "AES-CBC-encrypt KAT")) {
goto err;
}
@@ -756,8 +758,9 @@
}
AES_cbc_encrypt(kAESCBCDecCiphertext, output, sizeof(kAESCBCDecCiphertext),
&aes_key, aes_iv, AES_DECRYPT);
- if (!check_test(kAESCBCDecPlaintext, output, sizeof(kAESCBCDecPlaintext),
- "AES-CBC-decrypt KAT")) {
+ if (!BORINGSSL_check_test(kAESCBCDecPlaintext, output,
+ sizeof(kAESCBCDecPlaintext),
+ "AES-CBC-decrypt KAT")) {
goto err;
}
@@ -786,8 +789,8 @@
EVP_AEAD_nonce_length(EVP_aead_aes_128_gcm()),
kAESGCMEncPlaintext, sizeof(kAESGCMEncPlaintext), NULL,
0) ||
- !check_test(kAESGCMCiphertext, output, sizeof(kAESGCMCiphertext),
- "AES-GCM-encrypt KAT")) {
+ !BORINGSSL_check_test(kAESGCMCiphertext, output,
+ sizeof(kAESGCMCiphertext), "AES-GCM-encrypt KAT")) {
fprintf(CRYPTO_get_stderr(), "EVP_AEAD_CTX_seal for AES-128-GCM failed.\n");
goto err;
}
@@ -809,8 +812,9 @@
EVP_AEAD_nonce_length(EVP_aead_aes_128_gcm()),
kAESGCMDecCiphertext, sizeof(kAESGCMDecCiphertext),
NULL, 0) ||
- !check_test(kAESGCMDecPlaintext, output, sizeof(kAESGCMDecPlaintext),
- "AES-GCM-decrypt KAT")) {
+ !BORINGSSL_check_test(kAESGCMDecPlaintext, output,
+ sizeof(kAESGCMDecPlaintext),
+ "AES-GCM-decrypt KAT")) {
fprintf(CRYPTO_get_stderr(),
"AES-GCM-decrypt KAT failed because EVP_AEAD_CTX_open failed.\n");
goto err;
@@ -826,7 +830,8 @@
0x09, 0x11, 0x6d, 0x1a, 0xfd, 0x0f, 0x1e, 0x11, 0xe3, 0xcb,
};
SHA1(kSHA1Input, sizeof(kSHA1Input), output);
- if (!check_test(kSHA1Digest, output, sizeof(kSHA1Digest), "SHA-1 KAT")) {
+ if (!BORINGSSL_check_test(kSHA1Digest, output, sizeof(kSHA1Digest),
+ "SHA-1 KAT")) {
goto err;
}
@@ -874,13 +879,13 @@
sizeof(kDRBGPersonalization)) ||
!CTR_DRBG_generate(&drbg, output, sizeof(kDRBGOutput), kDRBGAD,
sizeof(kDRBGAD)) ||
- !check_test(kDRBGOutput, output, sizeof(kDRBGOutput),
- "DRBG Generate KAT") ||
+ !BORINGSSL_check_test(kDRBGOutput, output, sizeof(kDRBGOutput),
+ "DRBG Generate KAT") ||
!CTR_DRBG_reseed(&drbg, kDRBGEntropy2, kDRBGAD, sizeof(kDRBGAD)) ||
!CTR_DRBG_generate(&drbg, output, sizeof(kDRBGReseedOutput), kDRBGAD,
sizeof(kDRBGAD)) ||
- !check_test(kDRBGReseedOutput, output, sizeof(kDRBGReseedOutput),
- "DRBG-reseed KAT")) {
+ !BORINGSSL_check_test(kDRBGReseedOutput, output,
+ sizeof(kDRBGReseedOutput), "DRBG-reseed KAT")) {
fprintf(CRYPTO_get_stderr(), "CTR-DRBG failed.\n");
goto err;
}
@@ -888,7 +893,8 @@
CTR_DRBG_STATE kZeroDRBG;
memset(&kZeroDRBG, 0, sizeof(kZeroDRBG));
- if (!check_test(&kZeroDRBG, &drbg, sizeof(drbg), "DRBG Clear KAT")) {
+ if (!BORINGSSL_check_test(&kZeroDRBG, &drbg, sizeof(drbg),
+ "DRBG Clear KAT")) {
goto err;
}
@@ -918,8 +924,8 @@
kTLS10Secret, sizeof(kTLS10Secret), kTLSLabel,
sizeof(kTLSLabel), kTLSSeed1, sizeof(kTLSSeed1),
kTLSSeed2, sizeof(kTLSSeed2)) ||
- !check_test(kTLS10Output, tls10_output, sizeof(kTLS10Output),
- "TLS10-KDF KAT")) {
+ !BORINGSSL_check_test(kTLS10Output, tls10_output, sizeof(kTLS10Output),
+ "TLS10-KDF KAT")) {
fprintf(CRYPTO_get_stderr(), "TLS KDF failed.\n");
goto err;
}
@@ -939,8 +945,8 @@
kTLS12Secret, sizeof(kTLS12Secret), kTLSLabel,
sizeof(kTLSLabel), kTLSSeed1, sizeof(kTLSSeed1),
kTLSSeed2, sizeof(kTLSSeed2)) ||
- !check_test(kTLS12Output, tls12_output, sizeof(kTLS12Output),
- "TLS12-KDF KAT")) {
+ !BORINGSSL_check_test(kTLS12Output, tls12_output, sizeof(kTLS12Output),
+ "TLS12-KDF KAT")) {
fprintf(CRYPTO_get_stderr(), "TLS KDF failed.\n");
goto err;
}
@@ -978,9 +984,9 @@
EVP_sha256(), tls13_extract_output, sizeof(tls13_extract_output),
kTLS13Label, sizeof(kTLS13Label) - 1, kTLS13ClientHelloHash,
sizeof(kTLS13ClientHelloHash)) ||
- !check_test(kTLS13ExpandLabelOutput, tls13_expand_label_output,
- sizeof(kTLS13ExpandLabelOutput),
- "CRYPTO_tls13_hkdf_expand_label")) {
+ !BORINGSSL_check_test(kTLS13ExpandLabelOutput, tls13_expand_label_output,
+ sizeof(kTLS13ExpandLabelOutput),
+ "CRYPTO_tls13_hkdf_expand_label")) {
fprintf(CRYPTO_get_stderr(), "TLS13-KDF failed.\n");
goto err;
}
@@ -1010,7 +1016,8 @@
if (!HKDF(hkdf_output, sizeof(hkdf_output), EVP_sha256(), kHKDFSecret,
sizeof(kHKDFSecret), kHKDFSalt, sizeof(kHKDFSalt), kHKDFInfo,
sizeof(kHKDFInfo)) ||
- !check_test(kHKDFOutput, hkdf_output, sizeof(kHKDFOutput), "HKDF")) {
+ !BORINGSSL_check_test(kHKDFOutput, hkdf_output, sizeof(kHKDFOutput),
+ "HKDF")) {
fprintf(CRYPTO_get_stderr(), "HKDF failed.\n");
goto err;
}
@@ -1026,9 +1033,10 @@
int BORINGSSL_self_test(void) {
if (!boringssl_self_test_fast() ||
// When requested to run self tests, also run the lazy tests.
- !boringssl_self_test_rsa() || //
- !boringssl_self_test_ecc() || //
- !boringssl_self_test_ffdh()) {
+ !boringssl_self_test_rsa() || //
+ !boringssl_self_test_ecc() || //
+ !boringssl_self_test_ffdh() || //
+ !boringssl_self_test_mlkem()) {
return 0;
}
diff --git a/crypto/internal.h b/crypto/internal.h
index 4b14217..2c9a65b 100644
--- a/crypto/internal.h
+++ b/crypto/internal.h
@@ -1048,6 +1048,12 @@
#endif // FIPS
+// BORINGSSL_check_test memcmp's two values of equal length. It returns 1 on
+// success and, on failure, it prints an error message that includes the
+// hexdumps the two values and returns 0.
+int BORINGSSL_check_test(const void *expected, const void *actual,
+ size_t expected_len, const char *name);
+
// boringssl_self_test_sha256 performs a SHA-256 KAT.
int boringssl_self_test_sha256(void);
@@ -1057,6 +1063,9 @@
// boringssl_self_test_hmac_sha256 performs an HMAC-SHA-256 KAT.
int boringssl_self_test_hmac_sha256(void);
+// boringssl_self_test_mlkem performs the ML-KEM KATs.
+OPENSSL_EXPORT int boringssl_self_test_mlkem(void);
+
#if defined(BORINGSSL_FIPS_COUNTERS)
void boringssl_fips_inc_counter(enum fips_counter_t counter);
#else
diff --git a/crypto/mlkem/mlkem_test.cc b/crypto/mlkem/mlkem_test.cc
index 0d8baaa..213991a 100644
--- a/crypto/mlkem/mlkem_test.cc
+++ b/crypto/mlkem/mlkem_test.cc
@@ -527,4 +527,21 @@
0x04, 0xab, 0xdb, 0x94, 0x8b, 0x90, 0x8b, 0x75, 0xba, 0xd5};
EXPECT_EQ(Bytes(result), Bytes(kExpected));
}
+
+TEST(MLKEMTest, Self) { ASSERT_TRUE(boringssl_self_test_mlkem()); }
+
+TEST(MLKEMTest, PWCT) {
+ auto pub768 = std::make_unique<uint8_t[]>(BCM_MLKEM768_PUBLIC_KEY_BYTES);
+ auto priv768 = std::make_unique<BCM_mlkem768_private_key>();
+ ASSERT_EQ(
+ BCM_mlkem768_generate_key_fips(pub768.get(), nullptr, priv768.get()),
+ bcm_status::approved);
+
+ auto pub1024 = std::make_unique<uint8_t[]>(BCM_MLKEM1024_PUBLIC_KEY_BYTES);
+ auto priv1024 = std::make_unique<BCM_mlkem1024_private_key>();
+ ASSERT_EQ(
+ BCM_mlkem1024_generate_key_fips(pub1024.get(), nullptr, priv1024.get()),
+ bcm_status::approved);
+}
+
} // namespace
diff --git a/gen/sources.bzl b/gen/sources.bzl
index 082ac46..16050f5 100644
--- a/gen/sources.bzl
+++ b/gen/sources.bzl
@@ -80,6 +80,7 @@
"crypto/fipsmodule/hmac/hmac.cc.inc",
"crypto/fipsmodule/keccak/keccak.cc.inc",
"crypto/fipsmodule/mldsa/mldsa.cc.inc",
+ "crypto/fipsmodule/mlkem/fips_known_values.inc",
"crypto/fipsmodule/mlkem/mlkem.cc.inc",
"crypto/fipsmodule/rand/ctrdrbg.cc.inc",
"crypto/fipsmodule/rand/rand.cc.inc",
diff --git a/gen/sources.cmake b/gen/sources.cmake
index 5f4afc8..6109220 100644
--- a/gen/sources.cmake
+++ b/gen/sources.cmake
@@ -84,6 +84,7 @@
crypto/fipsmodule/hmac/hmac.cc.inc
crypto/fipsmodule/keccak/keccak.cc.inc
crypto/fipsmodule/mldsa/mldsa.cc.inc
+ crypto/fipsmodule/mlkem/fips_known_values.inc
crypto/fipsmodule/mlkem/mlkem.cc.inc
crypto/fipsmodule/rand/ctrdrbg.cc.inc
crypto/fipsmodule/rand/rand.cc.inc
diff --git a/gen/sources.gni b/gen/sources.gni
index 1cc825f..921bd13 100644
--- a/gen/sources.gni
+++ b/gen/sources.gni
@@ -80,6 +80,7 @@
"crypto/fipsmodule/hmac/hmac.cc.inc",
"crypto/fipsmodule/keccak/keccak.cc.inc",
"crypto/fipsmodule/mldsa/mldsa.cc.inc",
+ "crypto/fipsmodule/mlkem/fips_known_values.inc",
"crypto/fipsmodule/mlkem/mlkem.cc.inc",
"crypto/fipsmodule/rand/ctrdrbg.cc.inc",
"crypto/fipsmodule/rand/rand.cc.inc",
diff --git a/gen/sources.json b/gen/sources.json
index 239b0a8..ced1d06 100644
--- a/gen/sources.json
+++ b/gen/sources.json
@@ -65,6 +65,7 @@
"crypto/fipsmodule/hmac/hmac.cc.inc",
"crypto/fipsmodule/keccak/keccak.cc.inc",
"crypto/fipsmodule/mldsa/mldsa.cc.inc",
+ "crypto/fipsmodule/mlkem/fips_known_values.inc",
"crypto/fipsmodule/mlkem/mlkem.cc.inc",
"crypto/fipsmodule/rand/ctrdrbg.cc.inc",
"crypto/fipsmodule/rand/rand.cc.inc",
diff --git a/util/fipstools/break-kat.go b/util/fipstools/break-kat.go
index aafd1c3..54a544c 100644
--- a/util/fipstools/break-kat.go
+++ b/util/fipstools/break-kat.go
@@ -38,6 +38,9 @@
"DRBG": "c4da0740d505f1ee280b95e58c4931ac6de846a0152fbb4a3f174cf4787a4f1a40c2b50babe14aae530be5886d910a27",
"DRBG-reseed": "c7161ca36c2309b716e9859bb96c6d49bdc8352103a18cd24ef42ec97ef46bf446eb1a4576c186e9351803763a7912fe",
"HKDF": "68678504b9b3add17d5967a1a7bd37993fd8a33ce7303071f39c096d1635b3c9",
+ "MLKEM-keygen": "d8c9397c3130d8ecb411a68efcc89a553cb7e6817e0288bd0691609bf5",
+ "MLKEM-encap": "7d9f1cb4ae04d75fa6575ae0e429b573a974b7",
+ "MLKEM-decap": "a3192a8c88fc996d2df9858d2c55363993f0494d7ec0be5a567b8a4243a5745d",
"SHA-1": "132fd9bad5c1826263bafbb699f707a5",
"SHA-256": "ff3b857da7236a2baa0f396b51522217",
"SHA-512": "212512f8d2ad8322781c6c4d69a9daa1",
@@ -88,6 +91,8 @@
}
for _, test := range sortedKATs() {
+ fmt.Printf("\n### Running test for %q\n\n", test)
+
const outFile = "test_fips_broken"
output, err := os.OpenFile(outFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0755)
if err != nil {
@@ -96,7 +101,6 @@
breakBinary(binaryContents, test, output)
output.Close()
- fmt.Printf("\n### Running test for %q\n\n", test)
cmd := exec.Command("./" + outFile)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stdout
@@ -108,7 +112,7 @@
os.Remove(outFile)
}
- for _, test := range []string{"ECDSA_PWCT", "RSA_PWCT", "CRNG"} {
+ for _, test := range []string{"ECDSA_PWCT", "RSA_PWCT", "MLKEM_PWCT", "CRNG"} {
fmt.Printf("\n### Running test for %q\n\n", test)
cmd := exec.Command("./" + inPath)
@@ -129,24 +133,28 @@
panic("invalid KAT data: " + err.Error())
}
- i := bytes.Index(binaryContents, testInputValue)
- if i < 0 {
- fmt.Fprintln(os.Stderr, "Expected test input value for", test, "was not found in binary.")
- os.Exit(3)
- }
-
brokenContents := make([]byte, len(binaryContents))
copy(brokenContents, binaryContents)
- // Zero out the entire value because the compiler may produce code
- // where parts of the value are embedded in the instructions.
- for j := range testInputValue {
- brokenContents[i+j] = 0
+ found := false
+ for {
+ i := bytes.Index(brokenContents, testInputValue)
+ if i < 0 {
+ break
+ }
+ found = true
+
+ // Zero out the entire value because the compiler may produce code
+ // where parts of the value are embedded in the instructions.
+ // See crbug.com/399818730
+ for j := range testInputValue {
+ brokenContents[i+j] = 0
+ }
}
- if bytes.Index(brokenContents, testInputValue) >= 0 {
- fmt.Fprintln(os.Stderr, "Test input value was still found after erasing it. Second copy?")
- os.Exit(4)
+ if !found {
+ fmt.Fprintln(os.Stderr, "Expected test input value for", test, "was not found in binary.")
+ os.Exit(3)
}
if n, err := output.Write(brokenContents); err != nil || n != len(brokenContents) {
diff --git a/util/fipstools/delocate/delocate.peg b/util/fipstools/delocate/delocate.peg
index 79dbe7f..8fac2d6 100644
--- a/util/fipstools/delocate/delocate.peg
+++ b/util/fipstools/delocate/delocate.peg
@@ -41,7 +41,7 @@
FileDirective <- ".file" WS [^#\n]+
LocDirective <- ".loc" WS [^#/\n]+
Args <- Arg ((WS? ',' WS?) Arg)*
-Arg <- QuotedArg / [[0-9a-z%+\-*_@.]]*
+Arg <- QuotedArg / [[0-9a-z%+\-*_@.$]]*
QuotedArg <- '"' QuotedText '"'
QuotedText <- (EscapedChar / [^"])*
LabelContainingDirective <- LabelContainingDirectiveName WS SymbolArgs
diff --git a/util/fipstools/delocate/delocate.peg.go b/util/fipstools/delocate/delocate.peg.go
index 7baa0e7..0f8ac01 100644
--- a/util/fipstools/delocate/delocate.peg.go
+++ b/util/fipstools/delocate/delocate.peg.go
@@ -364,6 +364,7 @@
return nil
}
}
+
func (p *Asm) Init(options ...func(*Asm) error) error {
var (
max token32
@@ -1246,7 +1247,7 @@
position, tokenIndex = position110, tokenIndex110
return false
},
- /* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.')*)> */
+ /* 9 Arg <- <(QuotedArg / ([0-9] / [0-9] / ([a-z] / [A-Z]) / '%' / '+' / '-' / '*' / '_' / '@' / '.' / '$')*)> */
func() bool {
{
position119 := position
@@ -1338,6 +1339,13 @@
l135:
position, tokenIndex = position124, tokenIndex124
if buffer[position] != rune('.') {
+ goto l136
+ }
+ position++
+ goto l124
+ l136:
+ position, tokenIndex = position124, tokenIndex124
+ if buffer[position] != rune('$') {
goto l123
}
position++
@@ -1355,6304 +1363,6304 @@
},
/* 10 QuotedArg <- <('"' QuotedText '"')> */
func() bool {
- position136, tokenIndex136 := position, tokenIndex
+ position137, tokenIndex137 := position, tokenIndex
{
- position137 := position
+ position138 := position
if buffer[position] != rune('"') {
- goto l136
+ goto l137
}
position++
if !_rules[ruleQuotedText]() {
- goto l136
+ goto l137
}
if buffer[position] != rune('"') {
- goto l136
+ goto l137
}
position++
- add(ruleQuotedArg, position137)
+ add(ruleQuotedArg, position138)
}
return true
- l136:
- position, tokenIndex = position136, tokenIndex136
+ l137:
+ position, tokenIndex = position137, tokenIndex137
return false
},
/* 11 QuotedText <- <(EscapedChar / (!'"' .))*> */
func() bool {
{
- position139 := position
- l140:
+ position140 := position
+ l141:
{
- position141, tokenIndex141 := position, tokenIndex
+ position142, tokenIndex142 := position, tokenIndex
{
- position142, tokenIndex142 := position, tokenIndex
+ position143, tokenIndex143 := position, tokenIndex
if !_rules[ruleEscapedChar]() {
- goto l143
+ goto l144
}
- goto l142
- l143:
- position, tokenIndex = position142, tokenIndex142
+ goto l143
+ l144:
+ position, tokenIndex = position143, tokenIndex143
{
- position144, tokenIndex144 := position, tokenIndex
+ position145, tokenIndex145 := position, tokenIndex
if buffer[position] != rune('"') {
- goto l144
+ goto l145
}
position++
- goto l141
- l144:
- position, tokenIndex = position144, tokenIndex144
+ goto l142
+ l145:
+ position, tokenIndex = position145, tokenIndex145
}
if !matchDot() {
- goto l141
+ goto l142
}
}
+ l143:
+ goto l141
l142:
- goto l140
- l141:
- position, tokenIndex = position141, tokenIndex141
+ position, tokenIndex = position142, tokenIndex142
}
- add(ruleQuotedText, position139)
+ add(ruleQuotedText, position140)
}
return true
},
/* 12 LabelContainingDirective <- <(LabelContainingDirectiveName WS SymbolArgs)> */
func() bool {
- position145, tokenIndex145 := position, tokenIndex
+ position146, tokenIndex146 := position, tokenIndex
{
- position146 := position
+ position147 := position
if !_rules[ruleLabelContainingDirectiveName]() {
- goto l145
+ goto l146
}
if !_rules[ruleWS]() {
- goto l145
+ goto l146
}
if !_rules[ruleSymbolArgs]() {
- goto l145
+ goto l146
}
- add(ruleLabelContainingDirective, position146)
+ add(ruleLabelContainingDirective, position147)
}
return true
- l145:
- position, tokenIndex = position145, tokenIndex145
+ l146:
+ position, tokenIndex = position146, tokenIndex146
return false
},
/* 13 LabelContainingDirectiveName <- <(('.' ('x' / 'X') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('h' / 'H') ('w' / 'W') ('o' / 'O') ('r' / 'R') ('d' / 'D')) / ('.' ('l' / 'L') ('o' / 'O') ('n' / 'N') ('g' / 'G')) / ('.' ('s' / 'S') ('e' / 'E') ('t' / 'T')) / ('.' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '8' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' '4' ('b' / 'B') ('y' / 'Y') ('t' / 'T') ('e' / 'E')) / ('.' ('q' / 'Q') ('u' / 'U') ('a' / 'A') ('d' / 'D')) / ('.' ('t' / 'T') ('c' / 'C')) / ('.' ('l' / 'L') ('o' / 'O') ('c' / 'C') ('a' / 'A') ('l' / 'L') ('e' / 'E') ('n' / 'N') ('t' / 'T') ('r' / 'R') ('y' / 'Y')) / ('.' ('s' / 'S') ('i' / 'I') ('z' / 'Z') ('e' / 'E')) / ('.' ('t' / 'T') ('y' / 'Y') ('p' / 'P') ('e' / 'E')) / ('.' ('u' / 'U') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8') / ('.' ('s' / 'S') ('l' / 'L') ('e' / 'E') ('b' / 'B') '1' '2' '8'))> */
func() bool {
- position147, tokenIndex147 := position, tokenIndex
+ position148, tokenIndex148 := position, tokenIndex
{
- position148 := position
+ position149 := position
{
- position149, tokenIndex149 := position, tokenIndex
+ position150, tokenIndex150 := position, tokenIndex
if buffer[position] != rune('.') {
- goto l150
- }
- position++
- {
- position151, tokenIndex151 := position, tokenIndex
- if buffer[position] != rune('x') {
- goto l152
- }
- position++
goto l151
- l152:
- position, tokenIndex = position151, tokenIndex151
+ }
+ position++
+ {
+ position152, tokenIndex152 := position, tokenIndex
+ if buffer[position] != rune('x') {
+ goto l153
+ }
+ position++
+ goto l152
+ l153:
+ position, tokenIndex = position152, tokenIndex152
if buffer[position] != rune('X') {
- goto l150
+ goto l151
}
position++
}
+ l152:
+ {
+ position154, tokenIndex154 := position, tokenIndex
+ if buffer[position] != rune('w') {
+ goto l155
+ }
+ position++
+ goto l154
+ l155:
+ position, tokenIndex = position154, tokenIndex154
+ if buffer[position] != rune('W') {
+ goto l151
+ }
+ position++
+ }
+ l154:
+ {
+ position156, tokenIndex156 := position, tokenIndex
+ if buffer[position] != rune('o') {
+ goto l157
+ }
+ position++
+ goto l156
+ l157:
+ position, tokenIndex = position156, tokenIndex156
+ if buffer[position] != rune('O') {
+ goto l151
+ }
+ position++
+ }
+ l156:
+ {
+ position158, tokenIndex158 := position, tokenIndex
+ if buffer[position] != rune('r') {
+ goto l159
+ }
+ position++
+ goto l158
+ l159:
+ position, tokenIndex = position158, tokenIndex158
+ if buffer[position] != rune('R') {
+ goto l151
+ }
+ position++
+ }
+ l158:
+ {
+ position160, tokenIndex160 := position, tokenIndex
+ if buffer[position] != rune('d') {
+ goto l161
+ }
+ position++
+ goto l160
+ l161:
+ position, tokenIndex = position160, tokenIndex160
+ if buffer[position] != rune('D') {
+ goto l151
+ }
+ position++
+ }
+ l160:
+ goto l150
l151:
- {
- position153, tokenIndex153 := position, tokenIndex
- if buffer[position] != rune('w') {
- goto l154
- }
- position++
- goto l153
- l154:
- position, tokenIndex = position153, tokenIndex153
- if buffer[position] != rune('W') {
- goto l150
- }
- position++
- }
- l153:
- {
- position155, tokenIndex155 := position, tokenIndex
- if buffer[position] != rune('o') {
- goto l156
- }
- position++
- goto l155
- l156:
- position, tokenIndex = position155, tokenIndex155
- if buffer[position] != rune('O') {
- goto l150
- }
- position++
- }
- l155:
- {
- position157, tokenIndex157 := position, tokenIndex
- if buffer[position] != rune('r') {
- goto l158
- }
- position++
- goto l157
- l158:
- position, tokenIndex = position157, tokenIndex157
- if buffer[position] != rune('R') {
- goto l150
- }
- position++
- }
- l157:
- {
- position159, tokenIndex159 := position, tokenIndex
- if buffer[position] != rune('d') {
- goto l160
- }
- position++
- goto l159
- l160:
- position, tokenIndex = position159, tokenIndex159
- if buffer[position] != rune('D') {
- goto l150
- }
- position++
- }
- l159:
- goto l149
- l150:
- position, tokenIndex = position149, tokenIndex149
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l161
- }
- position++
- {
- position162, tokenIndex162 := position, tokenIndex
- if buffer[position] != rune('w') {
- goto l163
- }
- position++
goto l162
- l163:
- position, tokenIndex = position162, tokenIndex162
- if buffer[position] != rune('W') {
- goto l161
- }
- position++
- }
- l162:
- {
- position164, tokenIndex164 := position, tokenIndex
- if buffer[position] != rune('o') {
- goto l165
- }
- position++
- goto l164
- l165:
- position, tokenIndex = position164, tokenIndex164
- if buffer[position] != rune('O') {
- goto l161
- }
- position++
- }
- l164:
- {
- position166, tokenIndex166 := position, tokenIndex
- if buffer[position] != rune('r') {
- goto l167
- }
- position++
- goto l166
- l167:
- position, tokenIndex = position166, tokenIndex166
- if buffer[position] != rune('R') {
- goto l161
- }
- position++
- }
- l166:
- {
- position168, tokenIndex168 := position, tokenIndex
- if buffer[position] != rune('d') {
- goto l169
- }
- position++
- goto l168
- l169:
- position, tokenIndex = position168, tokenIndex168
- if buffer[position] != rune('D') {
- goto l161
- }
- position++
- }
- l168:
- goto l149
- l161:
- position, tokenIndex = position149, tokenIndex149
- if buffer[position] != rune('.') {
- goto l170
}
position++
{
- position171, tokenIndex171 := position, tokenIndex
- if buffer[position] != rune('h') {
- goto l172
- }
- position++
- goto l171
- l172:
- position, tokenIndex = position171, tokenIndex171
- if buffer[position] != rune('H') {
- goto l170
- }
- position++
- }
- l171:
- {
- position173, tokenIndex173 := position, tokenIndex
+ position163, tokenIndex163 := position, tokenIndex
if buffer[position] != rune('w') {
- goto l174
+ goto l164
}
position++
- goto l173
- l174:
- position, tokenIndex = position173, tokenIndex173
+ goto l163
+ l164:
+ position, tokenIndex = position163, tokenIndex163
if buffer[position] != rune('W') {
- goto l170
+ goto l162
}
position++
}
- l173:
+ l163:
{
- position175, tokenIndex175 := position, tokenIndex
+ position165, tokenIndex165 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l176
+ goto l166
}
position++
- goto l175
- l176:
- position, tokenIndex = position175, tokenIndex175
+ goto l165
+ l166:
+ position, tokenIndex = position165, tokenIndex165
if buffer[position] != rune('O') {
- goto l170
+ goto l162
}
position++
}
- l175:
+ l165:
{
- position177, tokenIndex177 := position, tokenIndex
+ position167, tokenIndex167 := position, tokenIndex
if buffer[position] != rune('r') {
- goto l178
+ goto l168
}
position++
- goto l177
- l178:
- position, tokenIndex = position177, tokenIndex177
+ goto l167
+ l168:
+ position, tokenIndex = position167, tokenIndex167
if buffer[position] != rune('R') {
- goto l170
+ goto l162
}
position++
}
- l177:
+ l167:
{
- position179, tokenIndex179 := position, tokenIndex
+ position169, tokenIndex169 := position, tokenIndex
if buffer[position] != rune('d') {
- goto l180
- }
- position++
- goto l179
- l180:
- position, tokenIndex = position179, tokenIndex179
- if buffer[position] != rune('D') {
goto l170
}
position++
+ goto l169
+ l170:
+ position, tokenIndex = position169, tokenIndex169
+ if buffer[position] != rune('D') {
+ goto l162
+ }
+ position++
}
- l179:
- goto l149
- l170:
- position, tokenIndex = position149, tokenIndex149
+ l169:
+ goto l150
+ l162:
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l181
+ goto l171
}
position++
{
- position182, tokenIndex182 := position, tokenIndex
- if buffer[position] != rune('l') {
- goto l183
+ position172, tokenIndex172 := position, tokenIndex
+ if buffer[position] != rune('h') {
+ goto l173
}
position++
- goto l182
- l183:
- position, tokenIndex = position182, tokenIndex182
- if buffer[position] != rune('L') {
- goto l181
+ goto l172
+ l173:
+ position, tokenIndex = position172, tokenIndex172
+ if buffer[position] != rune('H') {
+ goto l171
}
position++
}
- l182:
+ l172:
{
- position184, tokenIndex184 := position, tokenIndex
+ position174, tokenIndex174 := position, tokenIndex
+ if buffer[position] != rune('w') {
+ goto l175
+ }
+ position++
+ goto l174
+ l175:
+ position, tokenIndex = position174, tokenIndex174
+ if buffer[position] != rune('W') {
+ goto l171
+ }
+ position++
+ }
+ l174:
+ {
+ position176, tokenIndex176 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l185
+ goto l177
}
position++
- goto l184
- l185:
- position, tokenIndex = position184, tokenIndex184
+ goto l176
+ l177:
+ position, tokenIndex = position176, tokenIndex176
if buffer[position] != rune('O') {
- goto l181
+ goto l171
}
position++
}
- l184:
+ l176:
{
- position186, tokenIndex186 := position, tokenIndex
+ position178, tokenIndex178 := position, tokenIndex
+ if buffer[position] != rune('r') {
+ goto l179
+ }
+ position++
+ goto l178
+ l179:
+ position, tokenIndex = position178, tokenIndex178
+ if buffer[position] != rune('R') {
+ goto l171
+ }
+ position++
+ }
+ l178:
+ {
+ position180, tokenIndex180 := position, tokenIndex
+ if buffer[position] != rune('d') {
+ goto l181
+ }
+ position++
+ goto l180
+ l181:
+ position, tokenIndex = position180, tokenIndex180
+ if buffer[position] != rune('D') {
+ goto l171
+ }
+ position++
+ }
+ l180:
+ goto l150
+ l171:
+ position, tokenIndex = position150, tokenIndex150
+ if buffer[position] != rune('.') {
+ goto l182
+ }
+ position++
+ {
+ position183, tokenIndex183 := position, tokenIndex
+ if buffer[position] != rune('l') {
+ goto l184
+ }
+ position++
+ goto l183
+ l184:
+ position, tokenIndex = position183, tokenIndex183
+ if buffer[position] != rune('L') {
+ goto l182
+ }
+ position++
+ }
+ l183:
+ {
+ position185, tokenIndex185 := position, tokenIndex
+ if buffer[position] != rune('o') {
+ goto l186
+ }
+ position++
+ goto l185
+ l186:
+ position, tokenIndex = position185, tokenIndex185
+ if buffer[position] != rune('O') {
+ goto l182
+ }
+ position++
+ }
+ l185:
+ {
+ position187, tokenIndex187 := position, tokenIndex
if buffer[position] != rune('n') {
- goto l187
+ goto l188
}
position++
- goto l186
- l187:
- position, tokenIndex = position186, tokenIndex186
+ goto l187
+ l188:
+ position, tokenIndex = position187, tokenIndex187
if buffer[position] != rune('N') {
- goto l181
+ goto l182
}
position++
}
- l186:
+ l187:
{
- position188, tokenIndex188 := position, tokenIndex
+ position189, tokenIndex189 := position, tokenIndex
if buffer[position] != rune('g') {
- goto l189
+ goto l190
}
position++
- goto l188
- l189:
- position, tokenIndex = position188, tokenIndex188
+ goto l189
+ l190:
+ position, tokenIndex = position189, tokenIndex189
if buffer[position] != rune('G') {
- goto l181
+ goto l182
}
position++
}
- l188:
- goto l149
- l181:
- position, tokenIndex = position149, tokenIndex149
+ l189:
+ goto l150
+ l182:
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l190
- }
- position++
- {
- position191, tokenIndex191 := position, tokenIndex
- if buffer[position] != rune('s') {
- goto l192
- }
- position++
goto l191
- l192:
- position, tokenIndex = position191, tokenIndex191
- if buffer[position] != rune('S') {
- goto l190
- }
- position++
- }
- l191:
- {
- position193, tokenIndex193 := position, tokenIndex
- if buffer[position] != rune('e') {
- goto l194
- }
- position++
- goto l193
- l194:
- position, tokenIndex = position193, tokenIndex193
- if buffer[position] != rune('E') {
- goto l190
- }
- position++
- }
- l193:
- {
- position195, tokenIndex195 := position, tokenIndex
- if buffer[position] != rune('t') {
- goto l196
- }
- position++
- goto l195
- l196:
- position, tokenIndex = position195, tokenIndex195
- if buffer[position] != rune('T') {
- goto l190
- }
- position++
- }
- l195:
- goto l149
- l190:
- position, tokenIndex = position149, tokenIndex149
- if buffer[position] != rune('.') {
- goto l197
}
position++
{
- position198, tokenIndex198 := position, tokenIndex
- if buffer[position] != rune('b') {
- goto l199
+ position192, tokenIndex192 := position, tokenIndex
+ if buffer[position] != rune('s') {
+ goto l193
}
position++
- goto l198
- l199:
- position, tokenIndex = position198, tokenIndex198
- if buffer[position] != rune('B') {
- goto l197
+ goto l192
+ l193:
+ position, tokenIndex = position192, tokenIndex192
+ if buffer[position] != rune('S') {
+ goto l191
}
position++
}
- l198:
+ l192:
{
- position200, tokenIndex200 := position, tokenIndex
- if buffer[position] != rune('y') {
- goto l201
- }
- position++
- goto l200
- l201:
- position, tokenIndex = position200, tokenIndex200
- if buffer[position] != rune('Y') {
- goto l197
- }
- position++
- }
- l200:
- {
- position202, tokenIndex202 := position, tokenIndex
- if buffer[position] != rune('t') {
- goto l203
- }
- position++
- goto l202
- l203:
- position, tokenIndex = position202, tokenIndex202
- if buffer[position] != rune('T') {
- goto l197
- }
- position++
- }
- l202:
- {
- position204, tokenIndex204 := position, tokenIndex
+ position194, tokenIndex194 := position, tokenIndex
if buffer[position] != rune('e') {
- goto l205
+ goto l195
}
position++
- goto l204
- l205:
- position, tokenIndex = position204, tokenIndex204
+ goto l194
+ l195:
+ position, tokenIndex = position194, tokenIndex194
if buffer[position] != rune('E') {
- goto l197
+ goto l191
}
position++
}
- l204:
- goto l149
- l197:
- position, tokenIndex = position149, tokenIndex149
+ l194:
+ {
+ position196, tokenIndex196 := position, tokenIndex
+ if buffer[position] != rune('t') {
+ goto l197
+ }
+ position++
+ goto l196
+ l197:
+ position, tokenIndex = position196, tokenIndex196
+ if buffer[position] != rune('T') {
+ goto l191
+ }
+ position++
+ }
+ l196:
+ goto l150
+ l191:
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l206
+ goto l198
+ }
+ position++
+ {
+ position199, tokenIndex199 := position, tokenIndex
+ if buffer[position] != rune('b') {
+ goto l200
+ }
+ position++
+ goto l199
+ l200:
+ position, tokenIndex = position199, tokenIndex199
+ if buffer[position] != rune('B') {
+ goto l198
+ }
+ position++
+ }
+ l199:
+ {
+ position201, tokenIndex201 := position, tokenIndex
+ if buffer[position] != rune('y') {
+ goto l202
+ }
+ position++
+ goto l201
+ l202:
+ position, tokenIndex = position201, tokenIndex201
+ if buffer[position] != rune('Y') {
+ goto l198
+ }
+ position++
+ }
+ l201:
+ {
+ position203, tokenIndex203 := position, tokenIndex
+ if buffer[position] != rune('t') {
+ goto l204
+ }
+ position++
+ goto l203
+ l204:
+ position, tokenIndex = position203, tokenIndex203
+ if buffer[position] != rune('T') {
+ goto l198
+ }
+ position++
+ }
+ l203:
+ {
+ position205, tokenIndex205 := position, tokenIndex
+ if buffer[position] != rune('e') {
+ goto l206
+ }
+ position++
+ goto l205
+ l206:
+ position, tokenIndex = position205, tokenIndex205
+ if buffer[position] != rune('E') {
+ goto l198
+ }
+ position++
+ }
+ l205:
+ goto l150
+ l198:
+ position, tokenIndex = position150, tokenIndex150
+ if buffer[position] != rune('.') {
+ goto l207
}
position++
if buffer[position] != rune('8') {
- goto l206
+ goto l207
}
position++
{
- position207, tokenIndex207 := position, tokenIndex
+ position208, tokenIndex208 := position, tokenIndex
if buffer[position] != rune('b') {
- goto l208
+ goto l209
}
position++
- goto l207
- l208:
- position, tokenIndex = position207, tokenIndex207
+ goto l208
+ l209:
+ position, tokenIndex = position208, tokenIndex208
if buffer[position] != rune('B') {
- goto l206
+ goto l207
}
position++
}
- l207:
+ l208:
{
- position209, tokenIndex209 := position, tokenIndex
+ position210, tokenIndex210 := position, tokenIndex
if buffer[position] != rune('y') {
- goto l210
+ goto l211
}
position++
- goto l209
- l210:
- position, tokenIndex = position209, tokenIndex209
+ goto l210
+ l211:
+ position, tokenIndex = position210, tokenIndex210
if buffer[position] != rune('Y') {
- goto l206
+ goto l207
}
position++
}
- l209:
+ l210:
{
- position211, tokenIndex211 := position, tokenIndex
+ position212, tokenIndex212 := position, tokenIndex
if buffer[position] != rune('t') {
- goto l212
+ goto l213
}
position++
- goto l211
- l212:
- position, tokenIndex = position211, tokenIndex211
+ goto l212
+ l213:
+ position, tokenIndex = position212, tokenIndex212
if buffer[position] != rune('T') {
- goto l206
+ goto l207
}
position++
}
- l211:
+ l212:
{
- position213, tokenIndex213 := position, tokenIndex
+ position214, tokenIndex214 := position, tokenIndex
if buffer[position] != rune('e') {
- goto l214
+ goto l215
}
position++
- goto l213
- l214:
- position, tokenIndex = position213, tokenIndex213
+ goto l214
+ l215:
+ position, tokenIndex = position214, tokenIndex214
if buffer[position] != rune('E') {
- goto l206
+ goto l207
}
position++
}
- l213:
- goto l149
- l206:
- position, tokenIndex = position149, tokenIndex149
+ l214:
+ goto l150
+ l207:
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l215
+ goto l216
}
position++
if buffer[position] != rune('4') {
- goto l215
- }
- position++
- {
- position216, tokenIndex216 := position, tokenIndex
- if buffer[position] != rune('b') {
- goto l217
- }
- position++
goto l216
- l217:
- position, tokenIndex = position216, tokenIndex216
+ }
+ position++
+ {
+ position217, tokenIndex217 := position, tokenIndex
+ if buffer[position] != rune('b') {
+ goto l218
+ }
+ position++
+ goto l217
+ l218:
+ position, tokenIndex = position217, tokenIndex217
if buffer[position] != rune('B') {
- goto l215
+ goto l216
}
position++
}
+ l217:
+ {
+ position219, tokenIndex219 := position, tokenIndex
+ if buffer[position] != rune('y') {
+ goto l220
+ }
+ position++
+ goto l219
+ l220:
+ position, tokenIndex = position219, tokenIndex219
+ if buffer[position] != rune('Y') {
+ goto l216
+ }
+ position++
+ }
+ l219:
+ {
+ position221, tokenIndex221 := position, tokenIndex
+ if buffer[position] != rune('t') {
+ goto l222
+ }
+ position++
+ goto l221
+ l222:
+ position, tokenIndex = position221, tokenIndex221
+ if buffer[position] != rune('T') {
+ goto l216
+ }
+ position++
+ }
+ l221:
+ {
+ position223, tokenIndex223 := position, tokenIndex
+ if buffer[position] != rune('e') {
+ goto l224
+ }
+ position++
+ goto l223
+ l224:
+ position, tokenIndex = position223, tokenIndex223
+ if buffer[position] != rune('E') {
+ goto l216
+ }
+ position++
+ }
+ l223:
+ goto l150
l216:
- {
- position218, tokenIndex218 := position, tokenIndex
- if buffer[position] != rune('y') {
- goto l219
- }
- position++
- goto l218
- l219:
- position, tokenIndex = position218, tokenIndex218
- if buffer[position] != rune('Y') {
- goto l215
- }
- position++
- }
- l218:
- {
- position220, tokenIndex220 := position, tokenIndex
- if buffer[position] != rune('t') {
- goto l221
- }
- position++
- goto l220
- l221:
- position, tokenIndex = position220, tokenIndex220
- if buffer[position] != rune('T') {
- goto l215
- }
- position++
- }
- l220:
- {
- position222, tokenIndex222 := position, tokenIndex
- if buffer[position] != rune('e') {
- goto l223
- }
- position++
- goto l222
- l223:
- position, tokenIndex = position222, tokenIndex222
- if buffer[position] != rune('E') {
- goto l215
- }
- position++
- }
- l222:
- goto l149
- l215:
- position, tokenIndex = position149, tokenIndex149
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l224
- }
- position++
- {
- position225, tokenIndex225 := position, tokenIndex
- if buffer[position] != rune('q') {
- goto l226
- }
- position++
goto l225
- l226:
- position, tokenIndex = position225, tokenIndex225
+ }
+ position++
+ {
+ position226, tokenIndex226 := position, tokenIndex
+ if buffer[position] != rune('q') {
+ goto l227
+ }
+ position++
+ goto l226
+ l227:
+ position, tokenIndex = position226, tokenIndex226
if buffer[position] != rune('Q') {
- goto l224
+ goto l225
}
position++
}
- l225:
+ l226:
{
- position227, tokenIndex227 := position, tokenIndex
+ position228, tokenIndex228 := position, tokenIndex
if buffer[position] != rune('u') {
- goto l228
+ goto l229
}
position++
- goto l227
- l228:
- position, tokenIndex = position227, tokenIndex227
+ goto l228
+ l229:
+ position, tokenIndex = position228, tokenIndex228
if buffer[position] != rune('U') {
- goto l224
+ goto l225
}
position++
}
- l227:
+ l228:
{
- position229, tokenIndex229 := position, tokenIndex
+ position230, tokenIndex230 := position, tokenIndex
if buffer[position] != rune('a') {
- goto l230
+ goto l231
}
position++
- goto l229
- l230:
- position, tokenIndex = position229, tokenIndex229
+ goto l230
+ l231:
+ position, tokenIndex = position230, tokenIndex230
if buffer[position] != rune('A') {
- goto l224
+ goto l225
}
position++
}
- l229:
+ l230:
{
- position231, tokenIndex231 := position, tokenIndex
+ position232, tokenIndex232 := position, tokenIndex
if buffer[position] != rune('d') {
- goto l232
+ goto l233
}
position++
- goto l231
- l232:
- position, tokenIndex = position231, tokenIndex231
+ goto l232
+ l233:
+ position, tokenIndex = position232, tokenIndex232
if buffer[position] != rune('D') {
- goto l224
+ goto l225
}
position++
}
- l231:
- goto l149
- l224:
- position, tokenIndex = position149, tokenIndex149
+ l232:
+ goto l150
+ l225:
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l233
- }
- position++
- {
- position234, tokenIndex234 := position, tokenIndex
- if buffer[position] != rune('t') {
- goto l235
- }
- position++
goto l234
- l235:
- position, tokenIndex = position234, tokenIndex234
+ }
+ position++
+ {
+ position235, tokenIndex235 := position, tokenIndex
+ if buffer[position] != rune('t') {
+ goto l236
+ }
+ position++
+ goto l235
+ l236:
+ position, tokenIndex = position235, tokenIndex235
if buffer[position] != rune('T') {
- goto l233
+ goto l234
}
position++
}
+ l235:
+ {
+ position237, tokenIndex237 := position, tokenIndex
+ if buffer[position] != rune('c') {
+ goto l238
+ }
+ position++
+ goto l237
+ l238:
+ position, tokenIndex = position237, tokenIndex237
+ if buffer[position] != rune('C') {
+ goto l234
+ }
+ position++
+ }
+ l237:
+ goto l150
l234:
- {
- position236, tokenIndex236 := position, tokenIndex
- if buffer[position] != rune('c') {
- goto l237
- }
- position++
- goto l236
- l237:
- position, tokenIndex = position236, tokenIndex236
- if buffer[position] != rune('C') {
- goto l233
- }
- position++
- }
- l236:
- goto l149
- l233:
- position, tokenIndex = position149, tokenIndex149
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l238
- }
- position++
- {
- position239, tokenIndex239 := position, tokenIndex
- if buffer[position] != rune('l') {
- goto l240
- }
- position++
goto l239
- l240:
- position, tokenIndex = position239, tokenIndex239
+ }
+ position++
+ {
+ position240, tokenIndex240 := position, tokenIndex
+ if buffer[position] != rune('l') {
+ goto l241
+ }
+ position++
+ goto l240
+ l241:
+ position, tokenIndex = position240, tokenIndex240
if buffer[position] != rune('L') {
- goto l238
+ goto l239
}
position++
}
- l239:
+ l240:
{
- position241, tokenIndex241 := position, tokenIndex
+ position242, tokenIndex242 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l242
+ goto l243
}
position++
- goto l241
- l242:
- position, tokenIndex = position241, tokenIndex241
+ goto l242
+ l243:
+ position, tokenIndex = position242, tokenIndex242
if buffer[position] != rune('O') {
- goto l238
+ goto l239
}
position++
}
- l241:
+ l242:
{
- position243, tokenIndex243 := position, tokenIndex
+ position244, tokenIndex244 := position, tokenIndex
if buffer[position] != rune('c') {
- goto l244
+ goto l245
}
position++
- goto l243
- l244:
- position, tokenIndex = position243, tokenIndex243
+ goto l244
+ l245:
+ position, tokenIndex = position244, tokenIndex244
if buffer[position] != rune('C') {
- goto l238
+ goto l239
}
position++
}
- l243:
+ l244:
{
- position245, tokenIndex245 := position, tokenIndex
+ position246, tokenIndex246 := position, tokenIndex
if buffer[position] != rune('a') {
- goto l246
+ goto l247
}
position++
- goto l245
- l246:
- position, tokenIndex = position245, tokenIndex245
+ goto l246
+ l247:
+ position, tokenIndex = position246, tokenIndex246
if buffer[position] != rune('A') {
- goto l238
+ goto l239
}
position++
}
- l245:
+ l246:
{
- position247, tokenIndex247 := position, tokenIndex
+ position248, tokenIndex248 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l248
+ goto l249
}
position++
- goto l247
- l248:
- position, tokenIndex = position247, tokenIndex247
+ goto l248
+ l249:
+ position, tokenIndex = position248, tokenIndex248
if buffer[position] != rune('L') {
- goto l238
+ goto l239
}
position++
}
- l247:
+ l248:
{
- position249, tokenIndex249 := position, tokenIndex
+ position250, tokenIndex250 := position, tokenIndex
if buffer[position] != rune('e') {
- goto l250
+ goto l251
}
position++
- goto l249
- l250:
- position, tokenIndex = position249, tokenIndex249
+ goto l250
+ l251:
+ position, tokenIndex = position250, tokenIndex250
if buffer[position] != rune('E') {
- goto l238
+ goto l239
}
position++
}
- l249:
+ l250:
{
- position251, tokenIndex251 := position, tokenIndex
+ position252, tokenIndex252 := position, tokenIndex
if buffer[position] != rune('n') {
- goto l252
+ goto l253
}
position++
- goto l251
- l252:
- position, tokenIndex = position251, tokenIndex251
+ goto l252
+ l253:
+ position, tokenIndex = position252, tokenIndex252
if buffer[position] != rune('N') {
- goto l238
+ goto l239
}
position++
}
- l251:
+ l252:
{
- position253, tokenIndex253 := position, tokenIndex
+ position254, tokenIndex254 := position, tokenIndex
if buffer[position] != rune('t') {
- goto l254
+ goto l255
}
position++
- goto l253
- l254:
- position, tokenIndex = position253, tokenIndex253
+ goto l254
+ l255:
+ position, tokenIndex = position254, tokenIndex254
if buffer[position] != rune('T') {
- goto l238
+ goto l239
}
position++
}
- l253:
+ l254:
{
- position255, tokenIndex255 := position, tokenIndex
+ position256, tokenIndex256 := position, tokenIndex
if buffer[position] != rune('r') {
- goto l256
+ goto l257
}
position++
- goto l255
- l256:
- position, tokenIndex = position255, tokenIndex255
+ goto l256
+ l257:
+ position, tokenIndex = position256, tokenIndex256
if buffer[position] != rune('R') {
- goto l238
+ goto l239
}
position++
}
- l255:
+ l256:
{
- position257, tokenIndex257 := position, tokenIndex
+ position258, tokenIndex258 := position, tokenIndex
if buffer[position] != rune('y') {
- goto l258
+ goto l259
}
position++
- goto l257
- l258:
- position, tokenIndex = position257, tokenIndex257
+ goto l258
+ l259:
+ position, tokenIndex = position258, tokenIndex258
if buffer[position] != rune('Y') {
- goto l238
+ goto l239
}
position++
}
- l257:
- goto l149
- l238:
- position, tokenIndex = position149, tokenIndex149
+ l258:
+ goto l150
+ l239:
+ position, tokenIndex = position150, tokenIndex150
if buffer[position] != rune('.') {
- goto l259
- }
- position++
- {
- position260, tokenIndex260 := position, tokenIndex
- if buffer[position] != rune('s') {
- goto l261
- }
- position++
goto l260
- l261:
- position, tokenIndex = position260, tokenIndex260
- if buffer[position] != rune('S') {
- goto l259
- }
- position++
- }
- l260:
- {
- position262, tokenIndex262 := position, tokenIndex
- if buffer[position] != rune('i') {
- goto l263
- }
- position++
- goto l262
- l263:
- position, tokenIndex = position262, tokenIndex262
- if buffer[position] != rune('I') {
- goto l259
- }
- position++
- }
- l262:
- {
- position264, tokenIndex264 := position, tokenIndex
- if buffer[position] != rune('z') {
- goto l265
- }
- position++
- goto l264
- l265:
- position, tokenIndex = position264, tokenIndex264
- if buffer[position] != rune('Z') {
- goto l259
- }
- position++
- }
- l264:
- {
- position266, tokenIndex266 := position, tokenIndex
- if buffer[position] != rune('e') {
- goto l267
- }
- position++
- goto l266
- l267:
- position, tokenIndex = position266, tokenIndex266
- if buffer[position] != rune('E') {
- goto l259
- }
- position++
- }
- l266:
- goto l149
- l259:
- position, tokenIndex = position149, tokenIndex149
- if buffer[position] != rune('.') {
- goto l268
}
position++
{
- position269, tokenIndex269 := position, tokenIndex
- if buffer[position] != rune('t') {
- goto l270
- }
- position++
- goto l269
- l270:
- position, tokenIndex = position269, tokenIndex269
- if buffer[position] != rune('T') {
- goto l268
- }
- position++
- }
- l269:
- {
- position271, tokenIndex271 := position, tokenIndex
- if buffer[position] != rune('y') {
- goto l272
- }
- position++
- goto l271
- l272:
- position, tokenIndex = position271, tokenIndex271
- if buffer[position] != rune('Y') {
- goto l268
- }
- position++
- }
- l271:
- {
- position273, tokenIndex273 := position, tokenIndex
- if buffer[position] != rune('p') {
- goto l274
- }
- position++
- goto l273
- l274:
- position, tokenIndex = position273, tokenIndex273
- if buffer[position] != rune('P') {
- goto l268
- }
- position++
- }
- l273:
- {
- position275, tokenIndex275 := position, tokenIndex
- if buffer[position] != rune('e') {
- goto l276
- }
- position++
- goto l275
- l276:
- position, tokenIndex = position275, tokenIndex275
- if buffer[position] != rune('E') {
- goto l268
- }
- position++
- }
- l275:
- goto l149
- l268:
- position, tokenIndex = position149, tokenIndex149
- if buffer[position] != rune('.') {
- goto l277
- }
- position++
- {
- position278, tokenIndex278 := position, tokenIndex
- if buffer[position] != rune('u') {
- goto l279
- }
- position++
- goto l278
- l279:
- position, tokenIndex = position278, tokenIndex278
- if buffer[position] != rune('U') {
- goto l277
- }
- position++
- }
- l278:
- {
- position280, tokenIndex280 := position, tokenIndex
- if buffer[position] != rune('l') {
- goto l281
- }
- position++
- goto l280
- l281:
- position, tokenIndex = position280, tokenIndex280
- if buffer[position] != rune('L') {
- goto l277
- }
- position++
- }
- l280:
- {
- position282, tokenIndex282 := position, tokenIndex
- if buffer[position] != rune('e') {
- goto l283
- }
- position++
- goto l282
- l283:
- position, tokenIndex = position282, tokenIndex282
- if buffer[position] != rune('E') {
- goto l277
- }
- position++
- }
- l282:
- {
- position284, tokenIndex284 := position, tokenIndex
- if buffer[position] != rune('b') {
- goto l285
- }
- position++
- goto l284
- l285:
- position, tokenIndex = position284, tokenIndex284
- if buffer[position] != rune('B') {
- goto l277
- }
- position++
- }
- l284:
- if buffer[position] != rune('1') {
- goto l277
- }
- position++
- if buffer[position] != rune('2') {
- goto l277
- }
- position++
- if buffer[position] != rune('8') {
- goto l277
- }
- position++
- goto l149
- l277:
- position, tokenIndex = position149, tokenIndex149
- if buffer[position] != rune('.') {
- goto l147
- }
- position++
- {
- position286, tokenIndex286 := position, tokenIndex
+ position261, tokenIndex261 := position, tokenIndex
if buffer[position] != rune('s') {
- goto l287
+ goto l262
}
position++
- goto l286
- l287:
- position, tokenIndex = position286, tokenIndex286
+ goto l261
+ l262:
+ position, tokenIndex = position261, tokenIndex261
if buffer[position] != rune('S') {
- goto l147
+ goto l260
}
position++
}
- l286:
+ l261:
{
- position288, tokenIndex288 := position, tokenIndex
- if buffer[position] != rune('l') {
- goto l289
+ position263, tokenIndex263 := position, tokenIndex
+ if buffer[position] != rune('i') {
+ goto l264
}
position++
- goto l288
- l289:
- position, tokenIndex = position288, tokenIndex288
- if buffer[position] != rune('L') {
- goto l147
+ goto l263
+ l264:
+ position, tokenIndex = position263, tokenIndex263
+ if buffer[position] != rune('I') {
+ goto l260
}
position++
}
- l288:
+ l263:
{
- position290, tokenIndex290 := position, tokenIndex
+ position265, tokenIndex265 := position, tokenIndex
+ if buffer[position] != rune('z') {
+ goto l266
+ }
+ position++
+ goto l265
+ l266:
+ position, tokenIndex = position265, tokenIndex265
+ if buffer[position] != rune('Z') {
+ goto l260
+ }
+ position++
+ }
+ l265:
+ {
+ position267, tokenIndex267 := position, tokenIndex
if buffer[position] != rune('e') {
- goto l291
+ goto l268
}
position++
- goto l290
- l291:
- position, tokenIndex = position290, tokenIndex290
+ goto l267
+ l268:
+ position, tokenIndex = position267, tokenIndex267
if buffer[position] != rune('E') {
- goto l147
+ goto l260
}
position++
}
- l290:
+ l267:
+ goto l150
+ l260:
+ position, tokenIndex = position150, tokenIndex150
+ if buffer[position] != rune('.') {
+ goto l269
+ }
+ position++
{
- position292, tokenIndex292 := position, tokenIndex
- if buffer[position] != rune('b') {
- goto l293
+ position270, tokenIndex270 := position, tokenIndex
+ if buffer[position] != rune('t') {
+ goto l271
}
position++
- goto l292
- l293:
- position, tokenIndex = position292, tokenIndex292
- if buffer[position] != rune('B') {
- goto l147
+ goto l270
+ l271:
+ position, tokenIndex = position270, tokenIndex270
+ if buffer[position] != rune('T') {
+ goto l269
}
position++
}
- l292:
+ l270:
+ {
+ position272, tokenIndex272 := position, tokenIndex
+ if buffer[position] != rune('y') {
+ goto l273
+ }
+ position++
+ goto l272
+ l273:
+ position, tokenIndex = position272, tokenIndex272
+ if buffer[position] != rune('Y') {
+ goto l269
+ }
+ position++
+ }
+ l272:
+ {
+ position274, tokenIndex274 := position, tokenIndex
+ if buffer[position] != rune('p') {
+ goto l275
+ }
+ position++
+ goto l274
+ l275:
+ position, tokenIndex = position274, tokenIndex274
+ if buffer[position] != rune('P') {
+ goto l269
+ }
+ position++
+ }
+ l274:
+ {
+ position276, tokenIndex276 := position, tokenIndex
+ if buffer[position] != rune('e') {
+ goto l277
+ }
+ position++
+ goto l276
+ l277:
+ position, tokenIndex = position276, tokenIndex276
+ if buffer[position] != rune('E') {
+ goto l269
+ }
+ position++
+ }
+ l276:
+ goto l150
+ l269:
+ position, tokenIndex = position150, tokenIndex150
+ if buffer[position] != rune('.') {
+ goto l278
+ }
+ position++
+ {
+ position279, tokenIndex279 := position, tokenIndex
+ if buffer[position] != rune('u') {
+ goto l280
+ }
+ position++
+ goto l279
+ l280:
+ position, tokenIndex = position279, tokenIndex279
+ if buffer[position] != rune('U') {
+ goto l278
+ }
+ position++
+ }
+ l279:
+ {
+ position281, tokenIndex281 := position, tokenIndex
+ if buffer[position] != rune('l') {
+ goto l282
+ }
+ position++
+ goto l281
+ l282:
+ position, tokenIndex = position281, tokenIndex281
+ if buffer[position] != rune('L') {
+ goto l278
+ }
+ position++
+ }
+ l281:
+ {
+ position283, tokenIndex283 := position, tokenIndex
+ if buffer[position] != rune('e') {
+ goto l284
+ }
+ position++
+ goto l283
+ l284:
+ position, tokenIndex = position283, tokenIndex283
+ if buffer[position] != rune('E') {
+ goto l278
+ }
+ position++
+ }
+ l283:
+ {
+ position285, tokenIndex285 := position, tokenIndex
+ if buffer[position] != rune('b') {
+ goto l286
+ }
+ position++
+ goto l285
+ l286:
+ position, tokenIndex = position285, tokenIndex285
+ if buffer[position] != rune('B') {
+ goto l278
+ }
+ position++
+ }
+ l285:
if buffer[position] != rune('1') {
- goto l147
+ goto l278
}
position++
if buffer[position] != rune('2') {
- goto l147
+ goto l278
}
position++
if buffer[position] != rune('8') {
- goto l147
+ goto l278
+ }
+ position++
+ goto l150
+ l278:
+ position, tokenIndex = position150, tokenIndex150
+ if buffer[position] != rune('.') {
+ goto l148
+ }
+ position++
+ {
+ position287, tokenIndex287 := position, tokenIndex
+ if buffer[position] != rune('s') {
+ goto l288
+ }
+ position++
+ goto l287
+ l288:
+ position, tokenIndex = position287, tokenIndex287
+ if buffer[position] != rune('S') {
+ goto l148
+ }
+ position++
+ }
+ l287:
+ {
+ position289, tokenIndex289 := position, tokenIndex
+ if buffer[position] != rune('l') {
+ goto l290
+ }
+ position++
+ goto l289
+ l290:
+ position, tokenIndex = position289, tokenIndex289
+ if buffer[position] != rune('L') {
+ goto l148
+ }
+ position++
+ }
+ l289:
+ {
+ position291, tokenIndex291 := position, tokenIndex
+ if buffer[position] != rune('e') {
+ goto l292
+ }
+ position++
+ goto l291
+ l292:
+ position, tokenIndex = position291, tokenIndex291
+ if buffer[position] != rune('E') {
+ goto l148
+ }
+ position++
+ }
+ l291:
+ {
+ position293, tokenIndex293 := position, tokenIndex
+ if buffer[position] != rune('b') {
+ goto l294
+ }
+ position++
+ goto l293
+ l294:
+ position, tokenIndex = position293, tokenIndex293
+ if buffer[position] != rune('B') {
+ goto l148
+ }
+ position++
+ }
+ l293:
+ if buffer[position] != rune('1') {
+ goto l148
+ }
+ position++
+ if buffer[position] != rune('2') {
+ goto l148
+ }
+ position++
+ if buffer[position] != rune('8') {
+ goto l148
}
position++
}
- l149:
- add(ruleLabelContainingDirectiveName, position148)
+ l150:
+ add(ruleLabelContainingDirectiveName, position149)
}
return true
- l147:
- position, tokenIndex = position147, tokenIndex147
+ l148:
+ position, tokenIndex = position148, tokenIndex148
return false
},
/* 14 SymbolArgs <- <(SymbolArg (WS? ',' WS? SymbolArg)*)> */
func() bool {
- position294, tokenIndex294 := position, tokenIndex
+ position295, tokenIndex295 := position, tokenIndex
{
- position295 := position
+ position296 := position
if !_rules[ruleSymbolArg]() {
- goto l294
+ goto l295
}
- l296:
+ l297:
{
- position297, tokenIndex297 := position, tokenIndex
+ position298, tokenIndex298 := position, tokenIndex
{
- position298, tokenIndex298 := position, tokenIndex
+ position299, tokenIndex299 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l298
+ goto l299
}
- goto l299
- l298:
- position, tokenIndex = position298, tokenIndex298
+ goto l300
+ l299:
+ position, tokenIndex = position299, tokenIndex299
}
- l299:
+ l300:
if buffer[position] != rune(',') {
- goto l297
+ goto l298
}
position++
{
- position300, tokenIndex300 := position, tokenIndex
+ position301, tokenIndex301 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l300
+ goto l301
}
- goto l301
- l300:
- position, tokenIndex = position300, tokenIndex300
+ goto l302
+ l301:
+ position, tokenIndex = position301, tokenIndex301
}
- l301:
+ l302:
if !_rules[ruleSymbolArg]() {
- goto l297
+ goto l298
}
- goto l296
- l297:
- position, tokenIndex = position297, tokenIndex297
+ goto l297
+ l298:
+ position, tokenIndex = position298, tokenIndex298
}
- add(ruleSymbolArgs, position295)
+ add(ruleSymbolArgs, position296)
}
return true
- l294:
- position, tokenIndex = position294, tokenIndex294
+ l295:
+ position, tokenIndex = position295, tokenIndex295
return false
},
/* 15 SymbolArg <- <SymbolExpr> */
func() bool {
- position302, tokenIndex302 := position, tokenIndex
+ position303, tokenIndex303 := position, tokenIndex
{
- position303 := position
+ position304 := position
if !_rules[ruleSymbolExpr]() {
- goto l302
+ goto l303
}
- add(ruleSymbolArg, position303)
+ add(ruleSymbolArg, position304)
}
return true
- l302:
- position, tokenIndex = position302, tokenIndex302
+ l303:
+ position, tokenIndex = position303, tokenIndex303
return false
},
/* 16 SymbolExpr <- <(SymbolAtom (WS? SymbolOperator WS? SymbolExpr)?)> */
func() bool {
- position304, tokenIndex304 := position, tokenIndex
+ position305, tokenIndex305 := position, tokenIndex
{
- position305 := position
+ position306 := position
if !_rules[ruleSymbolAtom]() {
- goto l304
+ goto l305
}
{
- position306, tokenIndex306 := position, tokenIndex
+ position307, tokenIndex307 := position, tokenIndex
{
- position308, tokenIndex308 := position, tokenIndex
+ position309, tokenIndex309 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l308
+ goto l309
}
- goto l309
- l308:
- position, tokenIndex = position308, tokenIndex308
+ goto l310
+ l309:
+ position, tokenIndex = position309, tokenIndex309
}
- l309:
+ l310:
if !_rules[ruleSymbolOperator]() {
- goto l306
+ goto l307
}
{
- position310, tokenIndex310 := position, tokenIndex
+ position311, tokenIndex311 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l310
+ goto l311
}
- goto l311
- l310:
- position, tokenIndex = position310, tokenIndex310
+ goto l312
+ l311:
+ position, tokenIndex = position311, tokenIndex311
}
- l311:
+ l312:
if !_rules[ruleSymbolExpr]() {
- goto l306
+ goto l307
}
- goto l307
- l306:
- position, tokenIndex = position306, tokenIndex306
+ goto l308
+ l307:
+ position, tokenIndex = position307, tokenIndex307
}
- l307:
- add(ruleSymbolExpr, position305)
+ l308:
+ add(ruleSymbolExpr, position306)
}
return true
- l304:
- position, tokenIndex = position304, tokenIndex304
+ l305:
+ position, tokenIndex = position305, tokenIndex305
return false
},
/* 17 SymbolAtom <- <(LocalLabelRef / Offset / SymbolType / (LocalSymbol TCMarker?) / (SymbolName Offset) / (SymbolName TCMarker?) / Dot / (OpenParen WS? SymbolExpr WS? CloseParen))> */
func() bool {
- position312, tokenIndex312 := position, tokenIndex
+ position313, tokenIndex313 := position, tokenIndex
{
- position313 := position
+ position314 := position
{
- position314, tokenIndex314 := position, tokenIndex
+ position315, tokenIndex315 := position, tokenIndex
if !_rules[ruleLocalLabelRef]() {
- goto l315
- }
- goto l314
- l315:
- position, tokenIndex = position314, tokenIndex314
- if !_rules[ruleOffset]() {
goto l316
}
- goto l314
+ goto l315
l316:
- position, tokenIndex = position314, tokenIndex314
- if !_rules[ruleSymbolType]() {
+ position, tokenIndex = position315, tokenIndex315
+ if !_rules[ruleOffset]() {
goto l317
}
- goto l314
+ goto l315
l317:
- position, tokenIndex = position314, tokenIndex314
- if !_rules[ruleLocalSymbol]() {
+ position, tokenIndex = position315, tokenIndex315
+ if !_rules[ruleSymbolType]() {
goto l318
}
- {
- position319, tokenIndex319 := position, tokenIndex
- if !_rules[ruleTCMarker]() {
- goto l319
- }
- goto l320
- l319:
- position, tokenIndex = position319, tokenIndex319
- }
- l320:
- goto l314
+ goto l315
l318:
- position, tokenIndex = position314, tokenIndex314
- if !_rules[ruleSymbolName]() {
- goto l321
+ position, tokenIndex = position315, tokenIndex315
+ if !_rules[ruleLocalSymbol]() {
+ goto l319
}
- if !_rules[ruleOffset]() {
+ {
+ position320, tokenIndex320 := position, tokenIndex
+ if !_rules[ruleTCMarker]() {
+ goto l320
+ }
goto l321
+ l320:
+ position, tokenIndex = position320, tokenIndex320
}
- goto l314
l321:
- position, tokenIndex = position314, tokenIndex314
+ goto l315
+ l319:
+ position, tokenIndex = position315, tokenIndex315
if !_rules[ruleSymbolName]() {
goto l322
}
- {
- position323, tokenIndex323 := position, tokenIndex
- if !_rules[ruleTCMarker]() {
- goto l323
- }
- goto l324
- l323:
- position, tokenIndex = position323, tokenIndex323
+ if !_rules[ruleOffset]() {
+ goto l322
}
- l324:
- goto l314
+ goto l315
l322:
- position, tokenIndex = position314, tokenIndex314
- if !_rules[ruleDot]() {
+ position, tokenIndex = position315, tokenIndex315
+ if !_rules[ruleSymbolName]() {
+ goto l323
+ }
+ {
+ position324, tokenIndex324 := position, tokenIndex
+ if !_rules[ruleTCMarker]() {
+ goto l324
+ }
goto l325
+ l324:
+ position, tokenIndex = position324, tokenIndex324
}
- goto l314
l325:
- position, tokenIndex = position314, tokenIndex314
+ goto l315
+ l323:
+ position, tokenIndex = position315, tokenIndex315
+ if !_rules[ruleDot]() {
+ goto l326
+ }
+ goto l315
+ l326:
+ position, tokenIndex = position315, tokenIndex315
if !_rules[ruleOpenParen]() {
- goto l312
+ goto l313
}
{
- position326, tokenIndex326 := position, tokenIndex
+ position327, tokenIndex327 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l326
+ goto l327
}
- goto l327
- l326:
- position, tokenIndex = position326, tokenIndex326
+ goto l328
+ l327:
+ position, tokenIndex = position327, tokenIndex327
}
- l327:
+ l328:
if !_rules[ruleSymbolExpr]() {
- goto l312
+ goto l313
}
{
- position328, tokenIndex328 := position, tokenIndex
+ position329, tokenIndex329 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l328
+ goto l329
}
- goto l329
- l328:
- position, tokenIndex = position328, tokenIndex328
+ goto l330
+ l329:
+ position, tokenIndex = position329, tokenIndex329
}
- l329:
+ l330:
if !_rules[ruleCloseParen]() {
- goto l312
+ goto l313
}
}
- l314:
- add(ruleSymbolAtom, position313)
+ l315:
+ add(ruleSymbolAtom, position314)
}
return true
- l312:
- position, tokenIndex = position312, tokenIndex312
+ l313:
+ position, tokenIndex = position313, tokenIndex313
return false
},
/* 18 SymbolOperator <- <('+' / '-' / '|' / ('<' '<') / ('>' '>'))> */
func() bool {
- position330, tokenIndex330 := position, tokenIndex
+ position331, tokenIndex331 := position, tokenIndex
{
- position331 := position
+ position332 := position
{
- position332, tokenIndex332 := position, tokenIndex
+ position333, tokenIndex333 := position, tokenIndex
if buffer[position] != rune('+') {
- goto l333
- }
- position++
- goto l332
- l333:
- position, tokenIndex = position332, tokenIndex332
- if buffer[position] != rune('-') {
goto l334
}
position++
- goto l332
+ goto l333
l334:
- position, tokenIndex = position332, tokenIndex332
- if buffer[position] != rune('|') {
+ position, tokenIndex = position333, tokenIndex333
+ if buffer[position] != rune('-') {
goto l335
}
position++
- goto l332
+ goto l333
l335:
- position, tokenIndex = position332, tokenIndex332
- if buffer[position] != rune('<') {
+ position, tokenIndex = position333, tokenIndex333
+ if buffer[position] != rune('|') {
goto l336
}
position++
- if buffer[position] != rune('<') {
- goto l336
- }
- position++
- goto l332
+ goto l333
l336:
- position, tokenIndex = position332, tokenIndex332
+ position, tokenIndex = position333, tokenIndex333
+ if buffer[position] != rune('<') {
+ goto l337
+ }
+ position++
+ if buffer[position] != rune('<') {
+ goto l337
+ }
+ position++
+ goto l333
+ l337:
+ position, tokenIndex = position333, tokenIndex333
if buffer[position] != rune('>') {
- goto l330
+ goto l331
}
position++
if buffer[position] != rune('>') {
- goto l330
+ goto l331
}
position++
}
- l332:
- add(ruleSymbolOperator, position331)
+ l333:
+ add(ruleSymbolOperator, position332)
}
return true
- l330:
- position, tokenIndex = position330, tokenIndex330
+ l331:
+ position, tokenIndex = position331, tokenIndex331
return false
},
/* 19 OpenParen <- <'('> */
func() bool {
- position337, tokenIndex337 := position, tokenIndex
+ position338, tokenIndex338 := position, tokenIndex
{
- position338 := position
+ position339 := position
if buffer[position] != rune('(') {
- goto l337
+ goto l338
}
position++
- add(ruleOpenParen, position338)
+ add(ruleOpenParen, position339)
}
return true
- l337:
- position, tokenIndex = position337, tokenIndex337
+ l338:
+ position, tokenIndex = position338, tokenIndex338
return false
},
/* 20 CloseParen <- <')'> */
func() bool {
- position339, tokenIndex339 := position, tokenIndex
+ position340, tokenIndex340 := position, tokenIndex
{
- position340 := position
+ position341 := position
if buffer[position] != rune(')') {
- goto l339
+ goto l340
}
position++
- add(ruleCloseParen, position340)
+ add(ruleCloseParen, position341)
}
return true
- l339:
- position, tokenIndex = position339, tokenIndex339
+ l340:
+ position, tokenIndex = position340, tokenIndex340
return false
},
/* 21 SymbolType <- <(('@' / '%') (('f' 'u' 'n' 'c' 't' 'i' 'o' 'n') / ('o' 'b' 'j' 'e' 'c' 't')))> */
func() bool {
- position341, tokenIndex341 := position, tokenIndex
+ position342, tokenIndex342 := position, tokenIndex
{
- position342 := position
+ position343 := position
{
- position343, tokenIndex343 := position, tokenIndex
+ position344, tokenIndex344 := position, tokenIndex
if buffer[position] != rune('@') {
- goto l344
+ goto l345
}
position++
- goto l343
- l344:
- position, tokenIndex = position343, tokenIndex343
+ goto l344
+ l345:
+ position, tokenIndex = position344, tokenIndex344
if buffer[position] != rune('%') {
- goto l341
+ goto l342
}
position++
}
- l343:
+ l344:
{
- position345, tokenIndex345 := position, tokenIndex
+ position346, tokenIndex346 := position, tokenIndex
if buffer[position] != rune('f') {
- goto l346
+ goto l347
}
position++
if buffer[position] != rune('u') {
- goto l346
+ goto l347
}
position++
if buffer[position] != rune('n') {
- goto l346
+ goto l347
}
position++
if buffer[position] != rune('c') {
- goto l346
+ goto l347
}
position++
if buffer[position] != rune('t') {
- goto l346
+ goto l347
}
position++
if buffer[position] != rune('i') {
- goto l346
+ goto l347
}
position++
if buffer[position] != rune('o') {
- goto l346
+ goto l347
}
position++
if buffer[position] != rune('n') {
- goto l346
+ goto l347
}
position++
- goto l345
- l346:
- position, tokenIndex = position345, tokenIndex345
+ goto l346
+ l347:
+ position, tokenIndex = position346, tokenIndex346
if buffer[position] != rune('o') {
- goto l341
+ goto l342
}
position++
if buffer[position] != rune('b') {
- goto l341
+ goto l342
}
position++
if buffer[position] != rune('j') {
- goto l341
+ goto l342
}
position++
if buffer[position] != rune('e') {
- goto l341
+ goto l342
}
position++
if buffer[position] != rune('c') {
- goto l341
+ goto l342
}
position++
if buffer[position] != rune('t') {
- goto l341
+ goto l342
}
position++
}
- l345:
- add(ruleSymbolType, position342)
+ l346:
+ add(ruleSymbolType, position343)
}
return true
- l341:
- position, tokenIndex = position341, tokenIndex341
+ l342:
+ position, tokenIndex = position342, tokenIndex342
return false
},
/* 22 Dot <- <'.'> */
func() bool {
- position347, tokenIndex347 := position, tokenIndex
+ position348, tokenIndex348 := position, tokenIndex
{
- position348 := position
+ position349 := position
if buffer[position] != rune('.') {
- goto l347
+ goto l348
}
position++
- add(ruleDot, position348)
+ add(ruleDot, position349)
}
return true
- l347:
- position, tokenIndex = position347, tokenIndex347
+ l348:
+ position, tokenIndex = position348, tokenIndex348
return false
},
/* 23 TCMarker <- <('[' 'T' 'C' ']')> */
func() bool {
- position349, tokenIndex349 := position, tokenIndex
+ position350, tokenIndex350 := position, tokenIndex
{
- position350 := position
+ position351 := position
if buffer[position] != rune('[') {
- goto l349
+ goto l350
}
position++
if buffer[position] != rune('T') {
- goto l349
+ goto l350
}
position++
if buffer[position] != rune('C') {
- goto l349
+ goto l350
}
position++
if buffer[position] != rune(']') {
- goto l349
+ goto l350
}
position++
- add(ruleTCMarker, position350)
+ add(ruleTCMarker, position351)
}
return true
- l349:
- position, tokenIndex = position349, tokenIndex349
+ l350:
+ position, tokenIndex = position350, tokenIndex350
return false
},
/* 24 EscapedChar <- <('\\' .)> */
func() bool {
- position351, tokenIndex351 := position, tokenIndex
+ position352, tokenIndex352 := position, tokenIndex
{
- position352 := position
+ position353 := position
if buffer[position] != rune('\\') {
- goto l351
+ goto l352
}
position++
if !matchDot() {
- goto l351
+ goto l352
}
- add(ruleEscapedChar, position352)
+ add(ruleEscapedChar, position353)
}
return true
- l351:
- position, tokenIndex = position351, tokenIndex351
+ l352:
+ position, tokenIndex = position352, tokenIndex352
return false
},
/* 25 WS <- <(' ' / '\t')+> */
func() bool {
- position353, tokenIndex353 := position, tokenIndex
+ position354, tokenIndex354 := position, tokenIndex
{
- position354 := position
+ position355 := position
+ {
+ position358, tokenIndex358 := position, tokenIndex
+ if buffer[position] != rune(' ') {
+ goto l359
+ }
+ position++
+ goto l358
+ l359:
+ position, tokenIndex = position358, tokenIndex358
+ if buffer[position] != rune('\t') {
+ goto l354
+ }
+ position++
+ }
+ l358:
+ l356:
{
position357, tokenIndex357 := position, tokenIndex
- if buffer[position] != rune(' ') {
- goto l358
- }
- position++
- goto l357
- l358:
- position, tokenIndex = position357, tokenIndex357
- if buffer[position] != rune('\t') {
- goto l353
- }
- position++
- }
- l357:
- l355:
- {
- position356, tokenIndex356 := position, tokenIndex
{
- position359, tokenIndex359 := position, tokenIndex
+ position360, tokenIndex360 := position, tokenIndex
if buffer[position] != rune(' ') {
- goto l360
+ goto l361
}
position++
- goto l359
- l360:
- position, tokenIndex = position359, tokenIndex359
+ goto l360
+ l361:
+ position, tokenIndex = position360, tokenIndex360
if buffer[position] != rune('\t') {
- goto l356
+ goto l357
}
position++
}
- l359:
- goto l355
- l356:
- position, tokenIndex = position356, tokenIndex356
+ l360:
+ goto l356
+ l357:
+ position, tokenIndex = position357, tokenIndex357
}
- add(ruleWS, position354)
+ add(ruleWS, position355)
}
return true
- l353:
- position, tokenIndex = position353, tokenIndex353
+ l354:
+ position, tokenIndex = position354, tokenIndex354
return false
},
/* 26 Comment <- <((('/' '/') / '#') (!'\n' .)*)> */
func() bool {
- position361, tokenIndex361 := position, tokenIndex
+ position362, tokenIndex362 := position, tokenIndex
{
- position362 := position
+ position363 := position
{
- position363, tokenIndex363 := position, tokenIndex
+ position364, tokenIndex364 := position, tokenIndex
if buffer[position] != rune('/') {
- goto l364
+ goto l365
}
position++
if buffer[position] != rune('/') {
- goto l364
+ goto l365
}
position++
- goto l363
- l364:
- position, tokenIndex = position363, tokenIndex363
+ goto l364
+ l365:
+ position, tokenIndex = position364, tokenIndex364
if buffer[position] != rune('#') {
- goto l361
+ goto l362
}
position++
}
- l363:
- l365:
+ l364:
+ l366:
{
- position366, tokenIndex366 := position, tokenIndex
+ position367, tokenIndex367 := position, tokenIndex
{
- position367, tokenIndex367 := position, tokenIndex
+ position368, tokenIndex368 := position, tokenIndex
if buffer[position] != rune('\n') {
- goto l367
+ goto l368
}
position++
- goto l366
- l367:
- position, tokenIndex = position367, tokenIndex367
+ goto l367
+ l368:
+ position, tokenIndex = position368, tokenIndex368
}
if !matchDot() {
- goto l366
+ goto l367
}
- goto l365
- l366:
- position, tokenIndex = position366, tokenIndex366
+ goto l366
+ l367:
+ position, tokenIndex = position367, tokenIndex367
}
- add(ruleComment, position362)
+ add(ruleComment, position363)
}
return true
- l361:
- position, tokenIndex = position361, tokenIndex361
+ l362:
+ position, tokenIndex = position362, tokenIndex362
return false
},
/* 27 Label <- <((LocalSymbol / LocalLabel / SymbolName) ':')> */
func() bool {
- position368, tokenIndex368 := position, tokenIndex
+ position369, tokenIndex369 := position, tokenIndex
{
- position369 := position
+ position370 := position
{
- position370, tokenIndex370 := position, tokenIndex
+ position371, tokenIndex371 := position, tokenIndex
if !_rules[ruleLocalSymbol]() {
- goto l371
- }
- goto l370
- l371:
- position, tokenIndex = position370, tokenIndex370
- if !_rules[ruleLocalLabel]() {
goto l372
}
- goto l370
+ goto l371
l372:
- position, tokenIndex = position370, tokenIndex370
+ position, tokenIndex = position371, tokenIndex371
+ if !_rules[ruleLocalLabel]() {
+ goto l373
+ }
+ goto l371
+ l373:
+ position, tokenIndex = position371, tokenIndex371
if !_rules[ruleSymbolName]() {
- goto l368
+ goto l369
}
}
- l370:
+ l371:
if buffer[position] != rune(':') {
- goto l368
+ goto l369
}
position++
- add(ruleLabel, position369)
+ add(ruleLabel, position370)
}
return true
- l368:
- position, tokenIndex = position368, tokenIndex368
+ l369:
+ position, tokenIndex = position369, tokenIndex369
return false
},
/* 28 SymbolName <- <(([a-z] / [A-Z] / '.' / '_') ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]) / '$' / '_')*)> */
func() bool {
- position373, tokenIndex373 := position, tokenIndex
+ position374, tokenIndex374 := position, tokenIndex
{
- position374 := position
+ position375 := position
{
- position375, tokenIndex375 := position, tokenIndex
+ position376, tokenIndex376 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l376
- }
- position++
- goto l375
- l376:
- position, tokenIndex = position375, tokenIndex375
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l377
}
position++
- goto l375
+ goto l376
l377:
- position, tokenIndex = position375, tokenIndex375
- if buffer[position] != rune('.') {
+ position, tokenIndex = position376, tokenIndex376
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l378
}
position++
- goto l375
+ goto l376
l378:
- position, tokenIndex = position375, tokenIndex375
+ position, tokenIndex = position376, tokenIndex376
+ if buffer[position] != rune('.') {
+ goto l379
+ }
+ position++
+ goto l376
+ l379:
+ position, tokenIndex = position376, tokenIndex376
if buffer[position] != rune('_') {
- goto l373
+ goto l374
}
position++
}
- l375:
- l379:
+ l376:
+ l380:
{
- position380, tokenIndex380 := position, tokenIndex
+ position381, tokenIndex381 := position, tokenIndex
{
- position381, tokenIndex381 := position, tokenIndex
+ position382, tokenIndex382 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l382
- }
- position++
- goto l381
- l382:
- position, tokenIndex = position381, tokenIndex381
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l383
}
position++
- goto l381
+ goto l382
l383:
- position, tokenIndex = position381, tokenIndex381
- if buffer[position] != rune('.') {
+ position, tokenIndex = position382, tokenIndex382
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l384
}
position++
- goto l381
+ goto l382
l384:
- position, tokenIndex = position381, tokenIndex381
- {
- position386, tokenIndex386 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l387
- }
- position++
- goto l386
- l387:
- position, tokenIndex = position386, tokenIndex386
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l385
- }
- position++
- }
- l386:
- goto l381
- l385:
- position, tokenIndex = position381, tokenIndex381
- if buffer[position] != rune('$') {
- goto l388
+ position, tokenIndex = position382, tokenIndex382
+ if buffer[position] != rune('.') {
+ goto l385
}
position++
- goto l381
- l388:
- position, tokenIndex = position381, tokenIndex381
+ goto l382
+ l385:
+ position, tokenIndex = position382, tokenIndex382
+ {
+ position387, tokenIndex387 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l388
+ }
+ position++
+ goto l387
+ l388:
+ position, tokenIndex = position387, tokenIndex387
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l386
+ }
+ position++
+ }
+ l387:
+ goto l382
+ l386:
+ position, tokenIndex = position382, tokenIndex382
+ if buffer[position] != rune('$') {
+ goto l389
+ }
+ position++
+ goto l382
+ l389:
+ position, tokenIndex = position382, tokenIndex382
if buffer[position] != rune('_') {
- goto l380
+ goto l381
}
position++
}
+ l382:
+ goto l380
l381:
- goto l379
- l380:
- position, tokenIndex = position380, tokenIndex380
+ position, tokenIndex = position381, tokenIndex381
}
- add(ruleSymbolName, position374)
+ add(ruleSymbolName, position375)
}
return true
- l373:
- position, tokenIndex = position373, tokenIndex373
+ l374:
+ position, tokenIndex = position374, tokenIndex374
return false
},
/* 29 LocalSymbol <- <('.' 'L' ([a-z] / [A-Z] / ([a-z] / [A-Z]) / '.' / ([0-9] / [0-9]) / '$' / '_')+)> */
func() bool {
- position389, tokenIndex389 := position, tokenIndex
+ position390, tokenIndex390 := position, tokenIndex
{
- position390 := position
+ position391 := position
if buffer[position] != rune('.') {
- goto l389
+ goto l390
}
position++
if buffer[position] != rune('L') {
- goto l389
+ goto l390
}
position++
{
- position393, tokenIndex393 := position, tokenIndex
+ position394, tokenIndex394 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l394
- }
- position++
- goto l393
- l394:
- position, tokenIndex = position393, tokenIndex393
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l395
}
position++
- goto l393
+ goto l394
l395:
- position, tokenIndex = position393, tokenIndex393
- {
- position397, tokenIndex397 := position, tokenIndex
- if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l398
- }
- position++
- goto l397
- l398:
- position, tokenIndex = position397, tokenIndex397
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l396
- }
- position++
+ position, tokenIndex = position394, tokenIndex394
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l396
}
- l397:
- goto l393
+ position++
+ goto l394
l396:
- position, tokenIndex = position393, tokenIndex393
- if buffer[position] != rune('.') {
- goto l399
- }
- position++
- goto l393
- l399:
- position, tokenIndex = position393, tokenIndex393
+ position, tokenIndex = position394, tokenIndex394
{
- position401, tokenIndex401 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l402
+ position398, tokenIndex398 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l399
}
position++
- goto l401
- l402:
- position, tokenIndex = position401, tokenIndex401
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l400
+ goto l398
+ l399:
+ position, tokenIndex = position398, tokenIndex398
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l397
}
position++
}
- l401:
- goto l393
- l400:
- position, tokenIndex = position393, tokenIndex393
- if buffer[position] != rune('$') {
- goto l403
+ l398:
+ goto l394
+ l397:
+ position, tokenIndex = position394, tokenIndex394
+ if buffer[position] != rune('.') {
+ goto l400
}
position++
- goto l393
- l403:
- position, tokenIndex = position393, tokenIndex393
+ goto l394
+ l400:
+ position, tokenIndex = position394, tokenIndex394
+ {
+ position402, tokenIndex402 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l403
+ }
+ position++
+ goto l402
+ l403:
+ position, tokenIndex = position402, tokenIndex402
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l401
+ }
+ position++
+ }
+ l402:
+ goto l394
+ l401:
+ position, tokenIndex = position394, tokenIndex394
+ if buffer[position] != rune('$') {
+ goto l404
+ }
+ position++
+ goto l394
+ l404:
+ position, tokenIndex = position394, tokenIndex394
if buffer[position] != rune('_') {
- goto l389
+ goto l390
}
position++
}
- l393:
- l391:
+ l394:
+ l392:
{
- position392, tokenIndex392 := position, tokenIndex
+ position393, tokenIndex393 := position, tokenIndex
{
- position404, tokenIndex404 := position, tokenIndex
+ position405, tokenIndex405 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l405
- }
- position++
- goto l404
- l405:
- position, tokenIndex = position404, tokenIndex404
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l406
}
position++
- goto l404
+ goto l405
l406:
- position, tokenIndex = position404, tokenIndex404
- {
- position408, tokenIndex408 := position, tokenIndex
- if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l409
- }
- position++
- goto l408
- l409:
- position, tokenIndex = position408, tokenIndex408
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l407
- }
- position++
+ position, tokenIndex = position405, tokenIndex405
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l407
}
- l408:
- goto l404
+ position++
+ goto l405
l407:
- position, tokenIndex = position404, tokenIndex404
- if buffer[position] != rune('.') {
- goto l410
- }
- position++
- goto l404
- l410:
- position, tokenIndex = position404, tokenIndex404
+ position, tokenIndex = position405, tokenIndex405
{
- position412, tokenIndex412 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l413
+ position409, tokenIndex409 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l410
}
position++
- goto l412
- l413:
- position, tokenIndex = position412, tokenIndex412
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l411
+ goto l409
+ l410:
+ position, tokenIndex = position409, tokenIndex409
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l408
}
position++
}
- l412:
- goto l404
- l411:
- position, tokenIndex = position404, tokenIndex404
- if buffer[position] != rune('$') {
- goto l414
+ l409:
+ goto l405
+ l408:
+ position, tokenIndex = position405, tokenIndex405
+ if buffer[position] != rune('.') {
+ goto l411
}
position++
- goto l404
- l414:
- position, tokenIndex = position404, tokenIndex404
+ goto l405
+ l411:
+ position, tokenIndex = position405, tokenIndex405
+ {
+ position413, tokenIndex413 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l414
+ }
+ position++
+ goto l413
+ l414:
+ position, tokenIndex = position413, tokenIndex413
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l412
+ }
+ position++
+ }
+ l413:
+ goto l405
+ l412:
+ position, tokenIndex = position405, tokenIndex405
+ if buffer[position] != rune('$') {
+ goto l415
+ }
+ position++
+ goto l405
+ l415:
+ position, tokenIndex = position405, tokenIndex405
if buffer[position] != rune('_') {
- goto l392
+ goto l393
}
position++
}
- l404:
- goto l391
- l392:
- position, tokenIndex = position392, tokenIndex392
+ l405:
+ goto l392
+ l393:
+ position, tokenIndex = position393, tokenIndex393
}
- add(ruleLocalSymbol, position390)
+ add(ruleLocalSymbol, position391)
}
return true
- l389:
- position, tokenIndex = position389, tokenIndex389
+ l390:
+ position, tokenIndex = position390, tokenIndex390
return false
},
/* 30 LocalLabel <- <([0-9] ([0-9] / '$')*)> */
func() bool {
- position415, tokenIndex415 := position, tokenIndex
+ position416, tokenIndex416 := position, tokenIndex
{
- position416 := position
+ position417 := position
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l415
+ goto l416
}
position++
- l417:
+ l418:
{
- position418, tokenIndex418 := position, tokenIndex
+ position419, tokenIndex419 := position, tokenIndex
{
- position419, tokenIndex419 := position, tokenIndex
+ position420, tokenIndex420 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l420
+ goto l421
}
position++
- goto l419
- l420:
- position, tokenIndex = position419, tokenIndex419
+ goto l420
+ l421:
+ position, tokenIndex = position420, tokenIndex420
if buffer[position] != rune('$') {
- goto l418
+ goto l419
}
position++
}
+ l420:
+ goto l418
l419:
- goto l417
- l418:
- position, tokenIndex = position418, tokenIndex418
+ position, tokenIndex = position419, tokenIndex419
}
- add(ruleLocalLabel, position416)
+ add(ruleLocalLabel, position417)
}
return true
- l415:
- position, tokenIndex = position415, tokenIndex415
+ l416:
+ position, tokenIndex = position416, tokenIndex416
return false
},
/* 31 LocalLabelRef <- <([0-9] ([0-9] / '$')* ('b' / 'f'))> */
func() bool {
- position421, tokenIndex421 := position, tokenIndex
+ position422, tokenIndex422 := position, tokenIndex
{
- position422 := position
+ position423 := position
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l421
+ goto l422
}
position++
- l423:
+ l424:
{
- position424, tokenIndex424 := position, tokenIndex
+ position425, tokenIndex425 := position, tokenIndex
{
- position425, tokenIndex425 := position, tokenIndex
+ position426, tokenIndex426 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l426
+ goto l427
}
position++
- goto l425
- l426:
- position, tokenIndex = position425, tokenIndex425
+ goto l426
+ l427:
+ position, tokenIndex = position426, tokenIndex426
if buffer[position] != rune('$') {
- goto l424
+ goto l425
}
position++
}
+ l426:
+ goto l424
l425:
- goto l423
- l424:
- position, tokenIndex = position424, tokenIndex424
+ position, tokenIndex = position425, tokenIndex425
}
{
- position427, tokenIndex427 := position, tokenIndex
+ position428, tokenIndex428 := position, tokenIndex
if buffer[position] != rune('b') {
- goto l428
+ goto l429
}
position++
- goto l427
- l428:
- position, tokenIndex = position427, tokenIndex427
+ goto l428
+ l429:
+ position, tokenIndex = position428, tokenIndex428
if buffer[position] != rune('f') {
- goto l421
+ goto l422
}
position++
}
- l427:
- add(ruleLocalLabelRef, position422)
+ l428:
+ add(ruleLocalLabelRef, position423)
}
return true
- l421:
- position, tokenIndex = position421, tokenIndex421
+ l422:
+ position, tokenIndex = position422, tokenIndex422
return false
},
/* 32 InstructionPrefix <- <(('n' / 'N') ('o' / 'O') ('t' / 'T') ('r' / 'R') ('a' / 'A') ('c' / 'C') ('k' / 'K'))> */
func() bool {
- position429, tokenIndex429 := position, tokenIndex
+ position430, tokenIndex430 := position, tokenIndex
{
- position430 := position
+ position431 := position
{
- position431, tokenIndex431 := position, tokenIndex
+ position432, tokenIndex432 := position, tokenIndex
if buffer[position] != rune('n') {
- goto l432
+ goto l433
}
position++
- goto l431
- l432:
- position, tokenIndex = position431, tokenIndex431
+ goto l432
+ l433:
+ position, tokenIndex = position432, tokenIndex432
if buffer[position] != rune('N') {
- goto l429
+ goto l430
}
position++
}
- l431:
+ l432:
{
- position433, tokenIndex433 := position, tokenIndex
+ position434, tokenIndex434 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l434
+ goto l435
}
position++
- goto l433
- l434:
- position, tokenIndex = position433, tokenIndex433
+ goto l434
+ l435:
+ position, tokenIndex = position434, tokenIndex434
if buffer[position] != rune('O') {
- goto l429
+ goto l430
}
position++
}
- l433:
+ l434:
{
- position435, tokenIndex435 := position, tokenIndex
+ position436, tokenIndex436 := position, tokenIndex
if buffer[position] != rune('t') {
- goto l436
+ goto l437
}
position++
- goto l435
- l436:
- position, tokenIndex = position435, tokenIndex435
+ goto l436
+ l437:
+ position, tokenIndex = position436, tokenIndex436
if buffer[position] != rune('T') {
- goto l429
+ goto l430
}
position++
}
- l435:
+ l436:
{
- position437, tokenIndex437 := position, tokenIndex
+ position438, tokenIndex438 := position, tokenIndex
if buffer[position] != rune('r') {
- goto l438
+ goto l439
}
position++
- goto l437
- l438:
- position, tokenIndex = position437, tokenIndex437
+ goto l438
+ l439:
+ position, tokenIndex = position438, tokenIndex438
if buffer[position] != rune('R') {
- goto l429
+ goto l430
}
position++
}
- l437:
+ l438:
{
- position439, tokenIndex439 := position, tokenIndex
+ position440, tokenIndex440 := position, tokenIndex
if buffer[position] != rune('a') {
- goto l440
+ goto l441
}
position++
- goto l439
- l440:
- position, tokenIndex = position439, tokenIndex439
+ goto l440
+ l441:
+ position, tokenIndex = position440, tokenIndex440
if buffer[position] != rune('A') {
- goto l429
+ goto l430
}
position++
}
- l439:
+ l440:
{
- position441, tokenIndex441 := position, tokenIndex
+ position442, tokenIndex442 := position, tokenIndex
if buffer[position] != rune('c') {
- goto l442
+ goto l443
}
position++
- goto l441
- l442:
- position, tokenIndex = position441, tokenIndex441
+ goto l442
+ l443:
+ position, tokenIndex = position442, tokenIndex442
if buffer[position] != rune('C') {
- goto l429
+ goto l430
}
position++
}
- l441:
+ l442:
{
- position443, tokenIndex443 := position, tokenIndex
+ position444, tokenIndex444 := position, tokenIndex
if buffer[position] != rune('k') {
- goto l444
+ goto l445
}
position++
- goto l443
- l444:
- position, tokenIndex = position443, tokenIndex443
+ goto l444
+ l445:
+ position, tokenIndex = position444, tokenIndex444
if buffer[position] != rune('K') {
- goto l429
+ goto l430
}
position++
}
- l443:
- add(ruleInstructionPrefix, position430)
+ l444:
+ add(ruleInstructionPrefix, position431)
}
return true
- l429:
- position, tokenIndex = position429, tokenIndex429
+ l430:
+ position, tokenIndex = position430, tokenIndex430
return false
},
/* 33 Instruction <- <((InstructionPrefix WS)? InstructionName (WS InstructionArg (WS? ',' WS? InstructionArg)*)?)> */
func() bool {
- position445, tokenIndex445 := position, tokenIndex
+ position446, tokenIndex446 := position, tokenIndex
{
- position446 := position
+ position447 := position
{
- position447, tokenIndex447 := position, tokenIndex
+ position448, tokenIndex448 := position, tokenIndex
if !_rules[ruleInstructionPrefix]() {
- goto l447
+ goto l448
}
if !_rules[ruleWS]() {
- goto l447
+ goto l448
}
- goto l448
- l447:
- position, tokenIndex = position447, tokenIndex447
+ goto l449
+ l448:
+ position, tokenIndex = position448, tokenIndex448
}
- l448:
+ l449:
if !_rules[ruleInstructionName]() {
- goto l445
+ goto l446
}
{
- position449, tokenIndex449 := position, tokenIndex
+ position450, tokenIndex450 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l449
+ goto l450
}
if !_rules[ruleInstructionArg]() {
- goto l449
+ goto l450
}
- l451:
+ l452:
{
- position452, tokenIndex452 := position, tokenIndex
+ position453, tokenIndex453 := position, tokenIndex
{
- position453, tokenIndex453 := position, tokenIndex
+ position454, tokenIndex454 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l453
+ goto l454
}
- goto l454
- l453:
- position, tokenIndex = position453, tokenIndex453
+ goto l455
+ l454:
+ position, tokenIndex = position454, tokenIndex454
}
- l454:
+ l455:
if buffer[position] != rune(',') {
- goto l452
+ goto l453
}
position++
{
- position455, tokenIndex455 := position, tokenIndex
+ position456, tokenIndex456 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l455
+ goto l456
}
- goto l456
- l455:
- position, tokenIndex = position455, tokenIndex455
+ goto l457
+ l456:
+ position, tokenIndex = position456, tokenIndex456
}
- l456:
+ l457:
if !_rules[ruleInstructionArg]() {
- goto l452
+ goto l453
}
- goto l451
- l452:
- position, tokenIndex = position452, tokenIndex452
+ goto l452
+ l453:
+ position, tokenIndex = position453, tokenIndex453
}
- goto l450
- l449:
- position, tokenIndex = position449, tokenIndex449
+ goto l451
+ l450:
+ position, tokenIndex = position450, tokenIndex450
}
- l450:
- add(ruleInstruction, position446)
+ l451:
+ add(ruleInstruction, position447)
}
return true
- l445:
- position, tokenIndex = position445, tokenIndex445
+ l446:
+ position, tokenIndex = position446, tokenIndex446
return false
},
/* 34 InstructionName <- <(([a-z] / [A-Z]) ([a-z] / [A-Z] / '.' / ([0-9] / [0-9]))* ('.' / '+' / '-')?)> */
func() bool {
- position457, tokenIndex457 := position, tokenIndex
+ position458, tokenIndex458 := position, tokenIndex
{
- position458 := position
+ position459 := position
{
- position459, tokenIndex459 := position, tokenIndex
+ position460, tokenIndex460 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l460
+ goto l461
}
position++
- goto l459
- l460:
- position, tokenIndex = position459, tokenIndex459
+ goto l460
+ l461:
+ position, tokenIndex = position460, tokenIndex460
if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l457
+ goto l458
}
position++
}
- l459:
- l461:
+ l460:
+ l462:
{
- position462, tokenIndex462 := position, tokenIndex
+ position463, tokenIndex463 := position, tokenIndex
{
- position463, tokenIndex463 := position, tokenIndex
+ position464, tokenIndex464 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l464
- }
- position++
- goto l463
- l464:
- position, tokenIndex = position463, tokenIndex463
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l465
}
position++
- goto l463
+ goto l464
l465:
- position, tokenIndex = position463, tokenIndex463
- if buffer[position] != rune('.') {
+ position, tokenIndex = position464, tokenIndex464
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l466
}
position++
- goto l463
+ goto l464
l466:
- position, tokenIndex = position463, tokenIndex463
- {
- position467, tokenIndex467 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l468
- }
- position++
- goto l467
- l468:
- position, tokenIndex = position467, tokenIndex467
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l462
- }
- position++
- }
- l467:
- }
- l463:
- goto l461
- l462:
- position, tokenIndex = position462, tokenIndex462
- }
- {
- position469, tokenIndex469 := position, tokenIndex
- {
- position471, tokenIndex471 := position, tokenIndex
+ position, tokenIndex = position464, tokenIndex464
if buffer[position] != rune('.') {
- goto l472
+ goto l467
}
position++
- goto l471
- l472:
- position, tokenIndex = position471, tokenIndex471
- if buffer[position] != rune('+') {
+ goto l464
+ l467:
+ position, tokenIndex = position464, tokenIndex464
+ {
+ position468, tokenIndex468 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l469
+ }
+ position++
+ goto l468
+ l469:
+ position, tokenIndex = position468, tokenIndex468
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l463
+ }
+ position++
+ }
+ l468:
+ }
+ l464:
+ goto l462
+ l463:
+ position, tokenIndex = position463, tokenIndex463
+ }
+ {
+ position470, tokenIndex470 := position, tokenIndex
+ {
+ position472, tokenIndex472 := position, tokenIndex
+ if buffer[position] != rune('.') {
goto l473
}
position++
- goto l471
+ goto l472
l473:
- position, tokenIndex = position471, tokenIndex471
+ position, tokenIndex = position472, tokenIndex472
+ if buffer[position] != rune('+') {
+ goto l474
+ }
+ position++
+ goto l472
+ l474:
+ position, tokenIndex = position472, tokenIndex472
if buffer[position] != rune('-') {
- goto l469
+ goto l470
}
position++
}
- l471:
- goto l470
- l469:
- position, tokenIndex = position469, tokenIndex469
+ l472:
+ goto l471
+ l470:
+ position, tokenIndex = position470, tokenIndex470
}
- l470:
- add(ruleInstructionName, position458)
+ l471:
+ add(ruleInstructionName, position459)
}
return true
- l457:
- position, tokenIndex = position457, tokenIndex457
+ l458:
+ position, tokenIndex = position458, tokenIndex458
return false
},
/* 35 InstructionArg <- <(IndirectionIndicator? (ARMConstantTweak / RegisterOrConstant / LocalLabelRef / TOCRefHigh / TOCRefLow / GOTLocation / GOTAddress / GOTSymbolOffset / MemoryRef) AVX512Token*)> */
func() bool {
- position474, tokenIndex474 := position, tokenIndex
+ position475, tokenIndex475 := position, tokenIndex
{
- position475 := position
+ position476 := position
{
- position476, tokenIndex476 := position, tokenIndex
+ position477, tokenIndex477 := position, tokenIndex
if !_rules[ruleIndirectionIndicator]() {
- goto l476
- }
- goto l477
- l476:
- position, tokenIndex = position476, tokenIndex476
- }
- l477:
- {
- position478, tokenIndex478 := position, tokenIndex
- if !_rules[ruleARMConstantTweak]() {
- goto l479
+ goto l477
}
goto l478
- l479:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleRegisterOrConstant]() {
- goto l480
- }
- goto l478
- l480:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleLocalLabelRef]() {
- goto l481
- }
- goto l478
- l481:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleTOCRefHigh]() {
- goto l482
- }
- goto l478
- l482:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleTOCRefLow]() {
- goto l483
- }
- goto l478
- l483:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleGOTLocation]() {
- goto l484
- }
- goto l478
- l484:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleGOTAddress]() {
- goto l485
- }
- goto l478
- l485:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleGOTSymbolOffset]() {
- goto l486
- }
- goto l478
- l486:
- position, tokenIndex = position478, tokenIndex478
- if !_rules[ruleMemoryRef]() {
- goto l474
- }
+ l477:
+ position, tokenIndex = position477, tokenIndex477
}
l478:
- l487:
{
- position488, tokenIndex488 := position, tokenIndex
- if !_rules[ruleAVX512Token]() {
- goto l488
+ position479, tokenIndex479 := position, tokenIndex
+ if !_rules[ruleARMConstantTweak]() {
+ goto l480
}
- goto l487
- l488:
- position, tokenIndex = position488, tokenIndex488
+ goto l479
+ l480:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleRegisterOrConstant]() {
+ goto l481
+ }
+ goto l479
+ l481:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleLocalLabelRef]() {
+ goto l482
+ }
+ goto l479
+ l482:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleTOCRefHigh]() {
+ goto l483
+ }
+ goto l479
+ l483:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleTOCRefLow]() {
+ goto l484
+ }
+ goto l479
+ l484:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleGOTLocation]() {
+ goto l485
+ }
+ goto l479
+ l485:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleGOTAddress]() {
+ goto l486
+ }
+ goto l479
+ l486:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleGOTSymbolOffset]() {
+ goto l487
+ }
+ goto l479
+ l487:
+ position, tokenIndex = position479, tokenIndex479
+ if !_rules[ruleMemoryRef]() {
+ goto l475
+ }
}
- add(ruleInstructionArg, position475)
+ l479:
+ l488:
+ {
+ position489, tokenIndex489 := position, tokenIndex
+ if !_rules[ruleAVX512Token]() {
+ goto l489
+ }
+ goto l488
+ l489:
+ position, tokenIndex = position489, tokenIndex489
+ }
+ add(ruleInstructionArg, position476)
}
return true
- l474:
- position, tokenIndex = position474, tokenIndex474
+ l475:
+ position, tokenIndex = position475, tokenIndex475
return false
},
/* 36 GOTLocation <- <('$' '_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '-' LocalSymbol)> */
func() bool {
- position489, tokenIndex489 := position, tokenIndex
+ position490, tokenIndex490 := position, tokenIndex
{
- position490 := position
+ position491 := position
if buffer[position] != rune('$') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('_') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('G') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('L') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('O') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('B') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('A') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('L') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('_') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('O') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('F') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('F') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('S') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('E') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('T') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('_') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('T') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('A') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('B') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('L') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('E') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('_') {
- goto l489
+ goto l490
}
position++
if buffer[position] != rune('-') {
- goto l489
+ goto l490
}
position++
if !_rules[ruleLocalSymbol]() {
- goto l489
+ goto l490
}
- add(ruleGOTLocation, position490)
+ add(ruleGOTLocation, position491)
}
return true
- l489:
- position, tokenIndex = position489, tokenIndex489
+ l490:
+ position, tokenIndex = position490, tokenIndex490
return false
},
/* 37 GOTAddress <- <('_' 'G' 'L' 'O' 'B' 'A' 'L' '_' 'O' 'F' 'F' 'S' 'E' 'T' '_' 'T' 'A' 'B' 'L' 'E' '_' '(' '%' 'r' 'i' 'p' ')')> */
func() bool {
- position491, tokenIndex491 := position, tokenIndex
+ position492, tokenIndex492 := position, tokenIndex
{
- position492 := position
+ position493 := position
if buffer[position] != rune('_') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('G') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('L') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('O') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('B') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('A') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('L') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('_') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('O') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('F') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('F') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('S') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('E') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('T') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('_') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('T') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('A') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('B') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('L') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('E') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('_') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('(') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('%') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('r') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('i') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune('p') {
- goto l491
+ goto l492
}
position++
if buffer[position] != rune(')') {
- goto l491
+ goto l492
}
position++
- add(ruleGOTAddress, position492)
+ add(ruleGOTAddress, position493)
}
return true
- l491:
- position, tokenIndex = position491, tokenIndex491
+ l492:
+ position, tokenIndex = position492, tokenIndex492
return false
},
/* 38 GOTSymbolOffset <- <(('$' SymbolName ('@' 'G' 'O' 'T') ('O' 'F' 'F')?) / (':' ('g' / 'G') ('o' / 'O') ('t' / 'T') ':' SymbolName))> */
func() bool {
- position493, tokenIndex493 := position, tokenIndex
+ position494, tokenIndex494 := position, tokenIndex
{
- position494 := position
+ position495 := position
{
- position495, tokenIndex495 := position, tokenIndex
+ position496, tokenIndex496 := position, tokenIndex
if buffer[position] != rune('$') {
- goto l496
+ goto l497
}
position++
if !_rules[ruleSymbolName]() {
- goto l496
+ goto l497
}
if buffer[position] != rune('@') {
- goto l496
+ goto l497
}
position++
if buffer[position] != rune('G') {
- goto l496
+ goto l497
}
position++
if buffer[position] != rune('O') {
- goto l496
+ goto l497
}
position++
if buffer[position] != rune('T') {
- goto l496
+ goto l497
}
position++
{
- position497, tokenIndex497 := position, tokenIndex
+ position498, tokenIndex498 := position, tokenIndex
if buffer[position] != rune('O') {
- goto l497
+ goto l498
}
position++
if buffer[position] != rune('F') {
- goto l497
+ goto l498
}
position++
if buffer[position] != rune('F') {
- goto l497
- }
- position++
- goto l498
- l497:
- position, tokenIndex = position497, tokenIndex497
- }
- l498:
- goto l495
- l496:
- position, tokenIndex = position495, tokenIndex495
- if buffer[position] != rune(':') {
- goto l493
- }
- position++
- {
- position499, tokenIndex499 := position, tokenIndex
- if buffer[position] != rune('g') {
- goto l500
+ goto l498
}
position++
goto l499
- l500:
- position, tokenIndex = position499, tokenIndex499
- if buffer[position] != rune('G') {
- goto l493
- }
- position++
+ l498:
+ position, tokenIndex = position498, tokenIndex498
}
l499:
- {
- position501, tokenIndex501 := position, tokenIndex
- if buffer[position] != rune('o') {
- goto l502
- }
- position++
- goto l501
- l502:
- position, tokenIndex = position501, tokenIndex501
- if buffer[position] != rune('O') {
- goto l493
- }
- position++
- }
- l501:
- {
- position503, tokenIndex503 := position, tokenIndex
- if buffer[position] != rune('t') {
- goto l504
- }
- position++
- goto l503
- l504:
- position, tokenIndex = position503, tokenIndex503
- if buffer[position] != rune('T') {
- goto l493
- }
- position++
- }
- l503:
+ goto l496
+ l497:
+ position, tokenIndex = position496, tokenIndex496
if buffer[position] != rune(':') {
- goto l493
+ goto l494
+ }
+ position++
+ {
+ position500, tokenIndex500 := position, tokenIndex
+ if buffer[position] != rune('g') {
+ goto l501
+ }
+ position++
+ goto l500
+ l501:
+ position, tokenIndex = position500, tokenIndex500
+ if buffer[position] != rune('G') {
+ goto l494
+ }
+ position++
+ }
+ l500:
+ {
+ position502, tokenIndex502 := position, tokenIndex
+ if buffer[position] != rune('o') {
+ goto l503
+ }
+ position++
+ goto l502
+ l503:
+ position, tokenIndex = position502, tokenIndex502
+ if buffer[position] != rune('O') {
+ goto l494
+ }
+ position++
+ }
+ l502:
+ {
+ position504, tokenIndex504 := position, tokenIndex
+ if buffer[position] != rune('t') {
+ goto l505
+ }
+ position++
+ goto l504
+ l505:
+ position, tokenIndex = position504, tokenIndex504
+ if buffer[position] != rune('T') {
+ goto l494
+ }
+ position++
+ }
+ l504:
+ if buffer[position] != rune(':') {
+ goto l494
}
position++
if !_rules[ruleSymbolName]() {
- goto l493
+ goto l494
}
}
- l495:
- add(ruleGOTSymbolOffset, position494)
+ l496:
+ add(ruleGOTSymbolOffset, position495)
}
return true
- l493:
- position, tokenIndex = position493, tokenIndex493
+ l494:
+ position, tokenIndex = position494, tokenIndex494
return false
},
/* 39 AVX512Token <- <(WS? '{' '%'? ([0-9] / [a-z])* '}')> */
func() bool {
- position505, tokenIndex505 := position, tokenIndex
+ position506, tokenIndex506 := position, tokenIndex
{
- position506 := position
+ position507 := position
{
- position507, tokenIndex507 := position, tokenIndex
+ position508, tokenIndex508 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l507
+ goto l508
}
- goto l508
- l507:
- position, tokenIndex = position507, tokenIndex507
+ goto l509
+ l508:
+ position, tokenIndex = position508, tokenIndex508
}
- l508:
+ l509:
if buffer[position] != rune('{') {
- goto l505
+ goto l506
}
position++
{
- position509, tokenIndex509 := position, tokenIndex
+ position510, tokenIndex510 := position, tokenIndex
if buffer[position] != rune('%') {
- goto l509
+ goto l510
}
position++
- goto l510
- l509:
- position, tokenIndex = position509, tokenIndex509
- }
- l510:
- l511:
- {
- position512, tokenIndex512 := position, tokenIndex
- {
- position513, tokenIndex513 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l514
- }
- position++
- goto l513
- l514:
- position, tokenIndex = position513, tokenIndex513
- if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l512
- }
- position++
- }
- l513:
goto l511
- l512:
- position, tokenIndex = position512, tokenIndex512
+ l510:
+ position, tokenIndex = position510, tokenIndex510
}
- if buffer[position] != rune('}') {
- goto l505
- }
- position++
- add(ruleAVX512Token, position506)
- }
- return true
- l505:
- position, tokenIndex = position505, tokenIndex505
- return false
- },
- /* 40 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
- func() bool {
- position515, tokenIndex515 := position, tokenIndex
- {
- position516 := position
- if buffer[position] != rune('.') {
- goto l515
- }
- position++
- if buffer[position] != rune('T') {
- goto l515
- }
- position++
- if buffer[position] != rune('O') {
- goto l515
- }
- position++
- if buffer[position] != rune('C') {
- goto l515
- }
- position++
- if buffer[position] != rune('.') {
- goto l515
- }
- position++
- if buffer[position] != rune('-') {
- goto l515
- }
- position++
+ l511:
+ l512:
{
- position517, tokenIndex517 := position, tokenIndex
- if buffer[position] != rune('0') {
- goto l518
- }
- position++
- if buffer[position] != rune('b') {
- goto l518
- }
- position++
- goto l517
- l518:
- position, tokenIndex = position517, tokenIndex517
- if buffer[position] != rune('.') {
- goto l515
- }
- position++
- if buffer[position] != rune('L') {
- goto l515
- }
- position++
+ position513, tokenIndex513 := position, tokenIndex
{
- position521, tokenIndex521 := position, tokenIndex
- if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l522
- }
- position++
- goto l521
- l522:
- position, tokenIndex = position521, tokenIndex521
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l523
- }
- position++
- goto l521
- l523:
- position, tokenIndex = position521, tokenIndex521
- if buffer[position] != rune('_') {
- goto l524
- }
- position++
- goto l521
- l524:
- position, tokenIndex = position521, tokenIndex521
+ position514, tokenIndex514 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l515
}
position++
- }
- l521:
- l519:
- {
- position520, tokenIndex520 := position, tokenIndex
- {
- position525, tokenIndex525 := position, tokenIndex
- if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l526
- }
- position++
- goto l525
- l526:
- position, tokenIndex = position525, tokenIndex525
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l527
- }
- position++
- goto l525
- l527:
- position, tokenIndex = position525, tokenIndex525
- if buffer[position] != rune('_') {
- goto l528
- }
- position++
- goto l525
- l528:
- position, tokenIndex = position525, tokenIndex525
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l520
- }
- position++
+ goto l514
+ l515:
+ position, tokenIndex = position514, tokenIndex514
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l513
}
- l525:
- goto l519
- l520:
- position, tokenIndex = position520, tokenIndex520
+ position++
}
+ l514:
+ goto l512
+ l513:
+ position, tokenIndex = position513, tokenIndex513
}
- l517:
- if buffer[position] != rune('@') {
- goto l515
+ if buffer[position] != rune('}') {
+ goto l506
+ }
+ position++
+ add(ruleAVX512Token, position507)
+ }
+ return true
+ l506:
+ position, tokenIndex = position506, tokenIndex506
+ return false
+ },
+ /* 40 TOCRefHigh <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('h' / 'H') ('a' / 'A')))> */
+ func() bool {
+ position516, tokenIndex516 := position, tokenIndex
+ {
+ position517 := position
+ if buffer[position] != rune('.') {
+ goto l516
+ }
+ position++
+ if buffer[position] != rune('T') {
+ goto l516
+ }
+ position++
+ if buffer[position] != rune('O') {
+ goto l516
+ }
+ position++
+ if buffer[position] != rune('C') {
+ goto l516
+ }
+ position++
+ if buffer[position] != rune('.') {
+ goto l516
+ }
+ position++
+ if buffer[position] != rune('-') {
+ goto l516
}
position++
{
- position529, tokenIndex529 := position, tokenIndex
- if buffer[position] != rune('h') {
- goto l530
+ position518, tokenIndex518 := position, tokenIndex
+ if buffer[position] != rune('0') {
+ goto l519
}
position++
- goto l529
- l530:
- position, tokenIndex = position529, tokenIndex529
- if buffer[position] != rune('H') {
- goto l515
+ if buffer[position] != rune('b') {
+ goto l519
}
position++
+ goto l518
+ l519:
+ position, tokenIndex = position518, tokenIndex518
+ if buffer[position] != rune('.') {
+ goto l516
+ }
+ position++
+ if buffer[position] != rune('L') {
+ goto l516
+ }
+ position++
+ {
+ position522, tokenIndex522 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l523
+ }
+ position++
+ goto l522
+ l523:
+ position, tokenIndex = position522, tokenIndex522
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l524
+ }
+ position++
+ goto l522
+ l524:
+ position, tokenIndex = position522, tokenIndex522
+ if buffer[position] != rune('_') {
+ goto l525
+ }
+ position++
+ goto l522
+ l525:
+ position, tokenIndex = position522, tokenIndex522
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l516
+ }
+ position++
+ }
+ l522:
+ l520:
+ {
+ position521, tokenIndex521 := position, tokenIndex
+ {
+ position526, tokenIndex526 := position, tokenIndex
+ if c := buffer[position]; c < rune('a') || c > rune('z') {
+ goto l527
+ }
+ position++
+ goto l526
+ l527:
+ position, tokenIndex = position526, tokenIndex526
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l528
+ }
+ position++
+ goto l526
+ l528:
+ position, tokenIndex = position526, tokenIndex526
+ if buffer[position] != rune('_') {
+ goto l529
+ }
+ position++
+ goto l526
+ l529:
+ position, tokenIndex = position526, tokenIndex526
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l521
+ }
+ position++
+ }
+ l526:
+ goto l520
+ l521:
+ position, tokenIndex = position521, tokenIndex521
+ }
}
- l529:
+ l518:
+ if buffer[position] != rune('@') {
+ goto l516
+ }
+ position++
{
- position531, tokenIndex531 := position, tokenIndex
- if buffer[position] != rune('a') {
- goto l532
+ position530, tokenIndex530 := position, tokenIndex
+ if buffer[position] != rune('h') {
+ goto l531
}
position++
- goto l531
- l532:
- position, tokenIndex = position531, tokenIndex531
- if buffer[position] != rune('A') {
- goto l515
+ goto l530
+ l531:
+ position, tokenIndex = position530, tokenIndex530
+ if buffer[position] != rune('H') {
+ goto l516
}
position++
}
- l531:
- add(ruleTOCRefHigh, position516)
+ l530:
+ {
+ position532, tokenIndex532 := position, tokenIndex
+ if buffer[position] != rune('a') {
+ goto l533
+ }
+ position++
+ goto l532
+ l533:
+ position, tokenIndex = position532, tokenIndex532
+ if buffer[position] != rune('A') {
+ goto l516
+ }
+ position++
+ }
+ l532:
+ add(ruleTOCRefHigh, position517)
}
return true
- l515:
- position, tokenIndex = position515, tokenIndex515
+ l516:
+ position, tokenIndex = position516, tokenIndex516
return false
},
/* 41 TOCRefLow <- <('.' 'T' 'O' 'C' '.' '-' (('0' 'b') / ('.' 'L' ([a-z] / [A-Z] / '_' / [0-9])+)) ('@' ('l' / 'L')))> */
func() bool {
- position533, tokenIndex533 := position, tokenIndex
+ position534, tokenIndex534 := position, tokenIndex
{
- position534 := position
+ position535 := position
if buffer[position] != rune('.') {
- goto l533
+ goto l534
}
position++
if buffer[position] != rune('T') {
- goto l533
+ goto l534
}
position++
if buffer[position] != rune('O') {
- goto l533
+ goto l534
}
position++
if buffer[position] != rune('C') {
- goto l533
+ goto l534
}
position++
if buffer[position] != rune('.') {
- goto l533
+ goto l534
}
position++
if buffer[position] != rune('-') {
- goto l533
+ goto l534
}
position++
{
- position535, tokenIndex535 := position, tokenIndex
+ position536, tokenIndex536 := position, tokenIndex
if buffer[position] != rune('0') {
- goto l536
+ goto l537
}
position++
if buffer[position] != rune('b') {
- goto l536
+ goto l537
}
position++
- goto l535
- l536:
- position, tokenIndex = position535, tokenIndex535
+ goto l536
+ l537:
+ position, tokenIndex = position536, tokenIndex536
if buffer[position] != rune('.') {
- goto l533
+ goto l534
}
position++
if buffer[position] != rune('L') {
- goto l533
+ goto l534
}
position++
{
- position539, tokenIndex539 := position, tokenIndex
+ position540, tokenIndex540 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l540
- }
- position++
- goto l539
- l540:
- position, tokenIndex = position539, tokenIndex539
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l541
}
position++
- goto l539
+ goto l540
l541:
- position, tokenIndex = position539, tokenIndex539
- if buffer[position] != rune('_') {
+ position, tokenIndex = position540, tokenIndex540
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l542
}
position++
- goto l539
+ goto l540
l542:
- position, tokenIndex = position539, tokenIndex539
+ position, tokenIndex = position540, tokenIndex540
+ if buffer[position] != rune('_') {
+ goto l543
+ }
+ position++
+ goto l540
+ l543:
+ position, tokenIndex = position540, tokenIndex540
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l533
+ goto l534
}
position++
}
- l539:
- l537:
+ l540:
+ l538:
{
- position538, tokenIndex538 := position, tokenIndex
+ position539, tokenIndex539 := position, tokenIndex
{
- position543, tokenIndex543 := position, tokenIndex
+ position544, tokenIndex544 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l544
- }
- position++
- goto l543
- l544:
- position, tokenIndex = position543, tokenIndex543
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l545
}
position++
- goto l543
+ goto l544
l545:
- position, tokenIndex = position543, tokenIndex543
- if buffer[position] != rune('_') {
+ position, tokenIndex = position544, tokenIndex544
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l546
}
position++
- goto l543
+ goto l544
l546:
- position, tokenIndex = position543, tokenIndex543
+ position, tokenIndex = position544, tokenIndex544
+ if buffer[position] != rune('_') {
+ goto l547
+ }
+ position++
+ goto l544
+ l547:
+ position, tokenIndex = position544, tokenIndex544
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l538
+ goto l539
}
position++
}
- l543:
- goto l537
- l538:
- position, tokenIndex = position538, tokenIndex538
+ l544:
+ goto l538
+ l539:
+ position, tokenIndex = position539, tokenIndex539
}
}
- l535:
+ l536:
if buffer[position] != rune('@') {
- goto l533
+ goto l534
}
position++
{
- position547, tokenIndex547 := position, tokenIndex
+ position548, tokenIndex548 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l548
+ goto l549
}
position++
- goto l547
- l548:
- position, tokenIndex = position547, tokenIndex547
+ goto l548
+ l549:
+ position, tokenIndex = position548, tokenIndex548
if buffer[position] != rune('L') {
- goto l533
+ goto l534
}
position++
}
- l547:
- add(ruleTOCRefLow, position534)
+ l548:
+ add(ruleTOCRefLow, position535)
}
return true
- l533:
- position, tokenIndex = position533, tokenIndex533
+ l534:
+ position, tokenIndex = position534, tokenIndex534
return false
},
/* 42 IndirectionIndicator <- <'*'> */
func() bool {
- position549, tokenIndex549 := position, tokenIndex
+ position550, tokenIndex550 := position, tokenIndex
{
- position550 := position
+ position551 := position
if buffer[position] != rune('*') {
- goto l549
+ goto l550
}
position++
- add(ruleIndirectionIndicator, position550)
+ add(ruleIndirectionIndicator, position551)
}
return true
- l549:
- position, tokenIndex = position549, tokenIndex549
+ l550:
+ position, tokenIndex = position550, tokenIndex550
return false
},
/* 43 Float <- <([0-9]+ '.' [0-9]*)> */
func() bool {
- position551, tokenIndex551 := position, tokenIndex
+ position552, tokenIndex552 := position, tokenIndex
{
- position552 := position
+ position553 := position
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l551
+ goto l552
}
position++
- l553:
+ l554:
{
- position554, tokenIndex554 := position, tokenIndex
+ position555, tokenIndex555 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l554
+ goto l555
}
position++
- goto l553
- l554:
- position, tokenIndex = position554, tokenIndex554
+ goto l554
+ l555:
+ position, tokenIndex = position555, tokenIndex555
}
if buffer[position] != rune('.') {
- goto l551
+ goto l552
}
position++
- l555:
+ l556:
{
- position556, tokenIndex556 := position, tokenIndex
+ position557, tokenIndex557 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l556
+ goto l557
}
position++
- goto l555
- l556:
- position, tokenIndex = position556, tokenIndex556
+ goto l556
+ l557:
+ position, tokenIndex = position557, tokenIndex557
}
- add(ruleFloat, position552)
+ add(ruleFloat, position553)
}
return true
- l551:
- position, tokenIndex = position551, tokenIndex551
+ l552:
+ position, tokenIndex = position552, tokenIndex552
return false
},
/* 44 RegisterOrConstant <- <((('%' ([a-z] / [A-Z]) ([a-z] / [A-Z] / ([0-9] / [0-9]))*) / ('$'? ((Offset Offset) / Offset)) / ('#' Float) / ('#' Offset ('*' [0-9]+ ('-' [0-9] [0-9]*)?)?) / ('#' '~'? '(' [0-9] WS? ('<' '<') WS? [0-9] ')') / ARMRegister) !('f' / 'b' / ':' / '(' / '+' / '-'))> */
func() bool {
- position557, tokenIndex557 := position, tokenIndex
+ position558, tokenIndex558 := position, tokenIndex
{
- position558 := position
+ position559 := position
{
- position559, tokenIndex559 := position, tokenIndex
+ position560, tokenIndex560 := position, tokenIndex
if buffer[position] != rune('%') {
- goto l560
+ goto l561
}
position++
{
- position561, tokenIndex561 := position, tokenIndex
+ position562, tokenIndex562 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l562
+ goto l563
}
position++
- goto l561
- l562:
- position, tokenIndex = position561, tokenIndex561
+ goto l562
+ l563:
+ position, tokenIndex = position562, tokenIndex562
if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l560
+ goto l561
}
position++
}
- l561:
- l563:
+ l562:
+ l564:
{
- position564, tokenIndex564 := position, tokenIndex
+ position565, tokenIndex565 := position, tokenIndex
{
- position565, tokenIndex565 := position, tokenIndex
+ position566, tokenIndex566 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l566
- }
- position++
- goto l565
- l566:
- position, tokenIndex = position565, tokenIndex565
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l567
}
position++
- goto l565
+ goto l566
l567:
- position, tokenIndex = position565, tokenIndex565
+ position, tokenIndex = position566, tokenIndex566
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l568
+ }
+ position++
+ goto l566
+ l568:
+ position, tokenIndex = position566, tokenIndex566
{
- position568, tokenIndex568 := position, tokenIndex
+ position569, tokenIndex569 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l569
+ goto l570
}
position++
- goto l568
- l569:
- position, tokenIndex = position568, tokenIndex568
+ goto l569
+ l570:
+ position, tokenIndex = position569, tokenIndex569
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l564
+ goto l565
}
position++
}
- l568:
+ l569:
}
+ l566:
+ goto l564
l565:
- goto l563
- l564:
- position, tokenIndex = position564, tokenIndex564
+ position, tokenIndex = position565, tokenIndex565
}
- goto l559
- l560:
- position, tokenIndex = position559, tokenIndex559
+ goto l560
+ l561:
+ position, tokenIndex = position560, tokenIndex560
{
- position571, tokenIndex571 := position, tokenIndex
+ position572, tokenIndex572 := position, tokenIndex
if buffer[position] != rune('$') {
- goto l571
+ goto l572
}
position++
- goto l572
- l571:
- position, tokenIndex = position571, tokenIndex571
- }
- l572:
- {
- position573, tokenIndex573 := position, tokenIndex
- if !_rules[ruleOffset]() {
- goto l574
- }
- if !_rules[ruleOffset]() {
- goto l574
- }
goto l573
- l574:
- position, tokenIndex = position573, tokenIndex573
- if !_rules[ruleOffset]() {
- goto l570
- }
+ l572:
+ position, tokenIndex = position572, tokenIndex572
}
l573:
- goto l559
- l570:
- position, tokenIndex = position559, tokenIndex559
+ {
+ position574, tokenIndex574 := position, tokenIndex
+ if !_rules[ruleOffset]() {
+ goto l575
+ }
+ if !_rules[ruleOffset]() {
+ goto l575
+ }
+ goto l574
+ l575:
+ position, tokenIndex = position574, tokenIndex574
+ if !_rules[ruleOffset]() {
+ goto l571
+ }
+ }
+ l574:
+ goto l560
+ l571:
+ position, tokenIndex = position560, tokenIndex560
if buffer[position] != rune('#') {
- goto l575
+ goto l576
}
position++
if !_rules[ruleFloat]() {
- goto l575
- }
- goto l559
- l575:
- position, tokenIndex = position559, tokenIndex559
- if buffer[position] != rune('#') {
goto l576
}
+ goto l560
+ l576:
+ position, tokenIndex = position560, tokenIndex560
+ if buffer[position] != rune('#') {
+ goto l577
+ }
position++
if !_rules[ruleOffset]() {
- goto l576
+ goto l577
}
{
- position577, tokenIndex577 := position, tokenIndex
+ position578, tokenIndex578 := position, tokenIndex
if buffer[position] != rune('*') {
- goto l577
+ goto l578
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l577
+ goto l578
}
position++
- l579:
- {
- position580, tokenIndex580 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l580
- }
- position++
- goto l579
- l580:
- position, tokenIndex = position580, tokenIndex580
- }
+ l580:
{
position581, tokenIndex581 := position, tokenIndex
- if buffer[position] != rune('-') {
- goto l581
- }
- position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l581
}
position++
- l583:
- {
- position584, tokenIndex584 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l584
- }
- position++
- goto l583
- l584:
- position, tokenIndex = position584, tokenIndex584
- }
- goto l582
+ goto l580
l581:
position, tokenIndex = position581, tokenIndex581
}
- l582:
- goto l578
- l577:
- position, tokenIndex = position577, tokenIndex577
+ {
+ position582, tokenIndex582 := position, tokenIndex
+ if buffer[position] != rune('-') {
+ goto l582
+ }
+ position++
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l582
+ }
+ position++
+ l584:
+ {
+ position585, tokenIndex585 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l585
+ }
+ position++
+ goto l584
+ l585:
+ position, tokenIndex = position585, tokenIndex585
+ }
+ goto l583
+ l582:
+ position, tokenIndex = position582, tokenIndex582
+ }
+ l583:
+ goto l579
+ l578:
+ position, tokenIndex = position578, tokenIndex578
}
- l578:
- goto l559
- l576:
- position, tokenIndex = position559, tokenIndex559
+ l579:
+ goto l560
+ l577:
+ position, tokenIndex = position560, tokenIndex560
if buffer[position] != rune('#') {
- goto l585
+ goto l586
}
position++
{
- position586, tokenIndex586 := position, tokenIndex
+ position587, tokenIndex587 := position, tokenIndex
if buffer[position] != rune('~') {
- goto l586
+ goto l587
}
position++
- goto l587
- l586:
- position, tokenIndex = position586, tokenIndex586
+ goto l588
+ l587:
+ position, tokenIndex = position587, tokenIndex587
}
- l587:
+ l588:
if buffer[position] != rune('(') {
- goto l585
+ goto l586
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l585
+ goto l586
}
position++
{
- position588, tokenIndex588 := position, tokenIndex
+ position589, tokenIndex589 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l588
+ goto l589
}
- goto l589
- l588:
- position, tokenIndex = position588, tokenIndex588
+ goto l590
+ l589:
+ position, tokenIndex = position589, tokenIndex589
}
- l589:
+ l590:
if buffer[position] != rune('<') {
- goto l585
+ goto l586
}
position++
if buffer[position] != rune('<') {
- goto l585
+ goto l586
}
position++
{
- position590, tokenIndex590 := position, tokenIndex
+ position591, tokenIndex591 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l590
+ goto l591
}
- goto l591
- l590:
- position, tokenIndex = position590, tokenIndex590
+ goto l592
+ l591:
+ position, tokenIndex = position591, tokenIndex591
}
- l591:
+ l592:
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l585
+ goto l586
}
position++
if buffer[position] != rune(')') {
- goto l585
+ goto l586
}
position++
- goto l559
- l585:
- position, tokenIndex = position559, tokenIndex559
+ goto l560
+ l586:
+ position, tokenIndex = position560, tokenIndex560
if !_rules[ruleARMRegister]() {
- goto l557
+ goto l558
}
}
- l559:
+ l560:
{
- position592, tokenIndex592 := position, tokenIndex
+ position593, tokenIndex593 := position, tokenIndex
{
- position593, tokenIndex593 := position, tokenIndex
+ position594, tokenIndex594 := position, tokenIndex
if buffer[position] != rune('f') {
- goto l594
- }
- position++
- goto l593
- l594:
- position, tokenIndex = position593, tokenIndex593
- if buffer[position] != rune('b') {
goto l595
}
position++
- goto l593
+ goto l594
l595:
- position, tokenIndex = position593, tokenIndex593
- if buffer[position] != rune(':') {
+ position, tokenIndex = position594, tokenIndex594
+ if buffer[position] != rune('b') {
goto l596
}
position++
- goto l593
+ goto l594
l596:
- position, tokenIndex = position593, tokenIndex593
- if buffer[position] != rune('(') {
+ position, tokenIndex = position594, tokenIndex594
+ if buffer[position] != rune(':') {
goto l597
}
position++
- goto l593
+ goto l594
l597:
- position, tokenIndex = position593, tokenIndex593
- if buffer[position] != rune('+') {
+ position, tokenIndex = position594, tokenIndex594
+ if buffer[position] != rune('(') {
goto l598
}
position++
- goto l593
+ goto l594
l598:
- position, tokenIndex = position593, tokenIndex593
+ position, tokenIndex = position594, tokenIndex594
+ if buffer[position] != rune('+') {
+ goto l599
+ }
+ position++
+ goto l594
+ l599:
+ position, tokenIndex = position594, tokenIndex594
if buffer[position] != rune('-') {
- goto l592
+ goto l593
}
position++
}
+ l594:
+ goto l558
l593:
- goto l557
- l592:
- position, tokenIndex = position592, tokenIndex592
+ position, tokenIndex = position593, tokenIndex593
}
- add(ruleRegisterOrConstant, position558)
+ add(ruleRegisterOrConstant, position559)
}
return true
- l557:
- position, tokenIndex = position557, tokenIndex557
+ l558:
+ position, tokenIndex = position558, tokenIndex558
return false
},
/* 45 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')) / (('m' / 'M') ('u' / 'U') ('l' / 'L') ' ' '#' [0-9]))> */
func() bool {
- position599, tokenIndex599 := position, tokenIndex
+ position600, tokenIndex600 := position, tokenIndex
{
- position600 := position
+ position601 := position
{
- position601, tokenIndex601 := position, tokenIndex
+ position602, tokenIndex602 := position, tokenIndex
{
- position603, tokenIndex603 := position, tokenIndex
+ position604, tokenIndex604 := position, tokenIndex
{
- position605, tokenIndex605 := position, tokenIndex
+ position606, tokenIndex606 := position, tokenIndex
if buffer[position] != rune('u') {
- goto l606
+ goto l607
}
position++
- goto l605
- l606:
- position, tokenIndex = position605, tokenIndex605
+ goto l606
+ l607:
+ position, tokenIndex = position606, tokenIndex606
if buffer[position] != rune('s') {
- goto l604
+ goto l605
}
position++
}
- l605:
+ l606:
{
- position607, tokenIndex607 := position, tokenIndex
+ position608, tokenIndex608 := position, tokenIndex
if buffer[position] != rune('x') {
- goto l608
+ goto l609
}
position++
- goto l607
- l608:
- position, tokenIndex = position607, tokenIndex607
+ goto l608
+ l609:
+ position, tokenIndex = position608, tokenIndex608
if buffer[position] != rune('X') {
- goto l604
+ goto l605
}
position++
}
- l607:
+ l608:
{
- position609, tokenIndex609 := position, tokenIndex
+ position610, tokenIndex610 := position, tokenIndex
if buffer[position] != rune('t') {
- goto l610
+ goto l611
}
position++
- goto l609
- l610:
- position, tokenIndex = position609, tokenIndex609
+ goto l610
+ l611:
+ position, tokenIndex = position610, tokenIndex610
if buffer[position] != rune('T') {
- goto l604
+ goto l605
}
position++
}
- l609:
+ l610:
{
- position611, tokenIndex611 := position, tokenIndex
+ position612, tokenIndex612 := position, tokenIndex
if buffer[position] != rune('x') {
- goto l612
- }
- position++
- goto l611
- l612:
- position, tokenIndex = position611, tokenIndex611
- if buffer[position] != rune('w') {
goto l613
}
position++
- goto l611
+ goto l612
l613:
- position, tokenIndex = position611, tokenIndex611
- if buffer[position] != rune('h') {
+ position, tokenIndex = position612, tokenIndex612
+ if buffer[position] != rune('w') {
goto l614
}
position++
- goto l611
+ goto l612
l614:
- position, tokenIndex = position611, tokenIndex611
+ position, tokenIndex = position612, tokenIndex612
+ if buffer[position] != rune('h') {
+ goto l615
+ }
+ position++
+ goto l612
+ l615:
+ position, tokenIndex = position612, tokenIndex612
if buffer[position] != rune('b') {
- goto l604
+ goto l605
}
position++
}
- l611:
- goto l603
- l604:
- position, tokenIndex = position603, tokenIndex603
+ l612:
+ goto l604
+ l605:
+ position, tokenIndex = position604, tokenIndex604
{
- position616, tokenIndex616 := position, tokenIndex
+ position617, tokenIndex617 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l617
+ goto l618
}
position++
- goto l616
- l617:
- position, tokenIndex = position616, tokenIndex616
+ goto l617
+ l618:
+ position, tokenIndex = position617, tokenIndex617
if buffer[position] != rune('L') {
- goto l615
+ goto l616
}
position++
}
+ l617:
+ {
+ position619, tokenIndex619 := position, tokenIndex
+ if buffer[position] != rune('s') {
+ goto l620
+ }
+ position++
+ goto l619
+ l620:
+ position, tokenIndex = position619, tokenIndex619
+ if buffer[position] != rune('S') {
+ goto l616
+ }
+ position++
+ }
+ l619:
+ {
+ position621, tokenIndex621 := position, tokenIndex
+ if buffer[position] != rune('l') {
+ goto l622
+ }
+ position++
+ goto l621
+ l622:
+ position, tokenIndex = position621, tokenIndex621
+ if buffer[position] != rune('L') {
+ goto l616
+ }
+ position++
+ }
+ l621:
+ goto l604
l616:
+ position, tokenIndex = position604, tokenIndex604
{
- position618, tokenIndex618 := position, tokenIndex
+ position624, tokenIndex624 := position, tokenIndex
+ if buffer[position] != rune('l') {
+ goto l625
+ }
+ position++
+ goto l624
+ l625:
+ position, tokenIndex = position624, tokenIndex624
+ if buffer[position] != rune('L') {
+ goto l623
+ }
+ position++
+ }
+ l624:
+ {
+ position626, tokenIndex626 := position, tokenIndex
if buffer[position] != rune('s') {
- goto l619
+ goto l627
}
position++
- goto l618
- l619:
- position, tokenIndex = position618, tokenIndex618
+ goto l626
+ l627:
+ position, tokenIndex = position626, tokenIndex626
if buffer[position] != rune('S') {
- goto l615
+ goto l623
}
position++
}
- l618:
+ l626:
{
- position620, tokenIndex620 := position, tokenIndex
- if buffer[position] != rune('l') {
- goto l621
+ position628, tokenIndex628 := position, tokenIndex
+ if buffer[position] != rune('r') {
+ goto l629
}
position++
- goto l620
- l621:
- position, tokenIndex = position620, tokenIndex620
- if buffer[position] != rune('L') {
- goto l615
+ goto l628
+ l629:
+ position, tokenIndex = position628, tokenIndex628
+ if buffer[position] != rune('R') {
+ goto l623
}
position++
}
- l620:
- goto l603
- l615:
- position, tokenIndex = position603, tokenIndex603
- {
- position623, tokenIndex623 := position, tokenIndex
- if buffer[position] != rune('l') {
- goto l624
- }
- position++
- goto l623
- l624:
- position, tokenIndex = position623, tokenIndex623
- if buffer[position] != rune('L') {
- goto l622
- }
- position++
- }
+ l628:
+ goto l604
l623:
+ position, tokenIndex = position604, tokenIndex604
{
- position625, tokenIndex625 := position, tokenIndex
- if buffer[position] != rune('s') {
- goto l626
- }
- position++
- goto l625
- l626:
- position, tokenIndex = position625, tokenIndex625
- if buffer[position] != rune('S') {
- goto l622
- }
- position++
- }
- l625:
- {
- position627, tokenIndex627 := position, tokenIndex
+ position631, tokenIndex631 := position, tokenIndex
if buffer[position] != rune('r') {
- goto l628
+ goto l632
}
position++
- goto l627
- l628:
- position, tokenIndex = position627, tokenIndex627
+ goto l631
+ l632:
+ position, tokenIndex = position631, tokenIndex631
if buffer[position] != rune('R') {
- goto l622
+ goto l630
}
position++
}
- l627:
- goto l603
- l622:
- position, tokenIndex = position603, tokenIndex603
+ l631:
{
- position630, tokenIndex630 := position, tokenIndex
- if buffer[position] != rune('r') {
- goto l631
- }
- position++
- goto l630
- l631:
- position, tokenIndex = position630, tokenIndex630
- if buffer[position] != rune('R') {
- goto l629
- }
- position++
- }
- l630:
- {
- position632, tokenIndex632 := position, tokenIndex
+ position633, tokenIndex633 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l633
+ goto l634
}
position++
- goto l632
- l633:
- position, tokenIndex = position632, tokenIndex632
+ goto l633
+ l634:
+ position, tokenIndex = position633, tokenIndex633
if buffer[position] != rune('O') {
- goto l629
+ goto l630
}
position++
}
- l632:
+ l633:
{
- position634, tokenIndex634 := position, tokenIndex
+ position635, tokenIndex635 := position, tokenIndex
if buffer[position] != rune('r') {
- goto l635
+ goto l636
}
position++
- goto l634
- l635:
- position, tokenIndex = position634, tokenIndex634
+ goto l635
+ l636:
+ position, tokenIndex = position635, tokenIndex635
if buffer[position] != rune('R') {
- goto l629
+ goto l630
}
position++
}
- l634:
- goto l603
- l629:
- position, tokenIndex = position603, tokenIndex603
+ l635:
+ goto l604
+ l630:
+ position, tokenIndex = position604, tokenIndex604
{
- position636, tokenIndex636 := position, tokenIndex
+ position637, tokenIndex637 := position, tokenIndex
if buffer[position] != rune('a') {
- goto l637
+ goto l638
}
position++
- goto l636
- l637:
- position, tokenIndex = position636, tokenIndex636
+ goto l637
+ l638:
+ position, tokenIndex = position637, tokenIndex637
if buffer[position] != rune('A') {
- goto l602
+ goto l603
}
position++
}
- l636:
+ l637:
{
- position638, tokenIndex638 := position, tokenIndex
+ position639, tokenIndex639 := position, tokenIndex
if buffer[position] != rune('s') {
- goto l639
+ goto l640
}
position++
- goto l638
- l639:
- position, tokenIndex = position638, tokenIndex638
+ goto l639
+ l640:
+ position, tokenIndex = position639, tokenIndex639
if buffer[position] != rune('S') {
- goto l602
+ goto l603
}
position++
}
- l638:
+ l639:
{
- position640, tokenIndex640 := position, tokenIndex
+ position641, tokenIndex641 := position, tokenIndex
if buffer[position] != rune('r') {
- goto l641
+ goto l642
}
position++
- goto l640
- l641:
- position, tokenIndex = position640, tokenIndex640
+ goto l641
+ l642:
+ position, tokenIndex = position641, tokenIndex641
if buffer[position] != rune('R') {
- goto l602
+ goto l603
}
position++
}
- l640:
+ l641:
}
- l603:
+ l604:
{
- position642, tokenIndex642 := position, tokenIndex
+ position643, tokenIndex643 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l642
+ goto l643
}
if buffer[position] != rune('#') {
- goto l642
+ goto l643
}
position++
if !_rules[ruleOffset]() {
- goto l642
+ goto l643
}
- goto l643
- l642:
- position, tokenIndex = position642, tokenIndex642
- }
- l643:
- goto l601
- l602:
- position, tokenIndex = position601, tokenIndex601
- {
- position645, tokenIndex645 := position, tokenIndex
- if buffer[position] != rune('m') {
- goto l646
- }
- position++
- goto l645
- l646:
- position, tokenIndex = position645, tokenIndex645
- if buffer[position] != rune('M') {
- goto l644
- }
- position++
- }
- l645:
- {
- position647, tokenIndex647 := position, tokenIndex
- if buffer[position] != rune('u') {
- goto l648
- }
- position++
- goto l647
- l648:
- position, tokenIndex = position647, tokenIndex647
- if buffer[position] != rune('U') {
- goto l644
- }
- position++
- }
- l647:
- {
- position649, tokenIndex649 := position, tokenIndex
- if buffer[position] != rune('l') {
- goto l650
- }
- position++
- goto l649
- l650:
- position, tokenIndex = position649, tokenIndex649
- if buffer[position] != rune('L') {
- goto l644
- }
- position++
- }
- l649:
- if buffer[position] != rune(' ') {
goto l644
+ l643:
+ position, tokenIndex = position643, tokenIndex643
+ }
+ l644:
+ goto l602
+ l603:
+ position, tokenIndex = position602, tokenIndex602
+ {
+ position646, tokenIndex646 := position, tokenIndex
+ if buffer[position] != rune('m') {
+ goto l647
+ }
+ position++
+ goto l646
+ l647:
+ position, tokenIndex = position646, tokenIndex646
+ if buffer[position] != rune('M') {
+ goto l645
+ }
+ position++
+ }
+ l646:
+ {
+ position648, tokenIndex648 := position, tokenIndex
+ if buffer[position] != rune('u') {
+ goto l649
+ }
+ position++
+ goto l648
+ l649:
+ position, tokenIndex = position648, tokenIndex648
+ if buffer[position] != rune('U') {
+ goto l645
+ }
+ position++
+ }
+ l648:
+ {
+ position650, tokenIndex650 := position, tokenIndex
+ if buffer[position] != rune('l') {
+ goto l651
+ }
+ position++
+ goto l650
+ l651:
+ position, tokenIndex = position650, tokenIndex650
+ if buffer[position] != rune('L') {
+ goto l645
+ }
+ position++
+ }
+ l650:
+ if buffer[position] != rune(' ') {
+ goto l645
}
position++
{
- position651, tokenIndex651 := position, tokenIndex
+ position652, tokenIndex652 := position, tokenIndex
if buffer[position] != rune('v') {
- goto l652
+ goto l653
}
position++
- goto l651
- l652:
- position, tokenIndex = position651, tokenIndex651
+ goto l652
+ l653:
+ position, tokenIndex = position652, tokenIndex652
if buffer[position] != rune('V') {
- goto l644
+ goto l645
}
position++
}
- l651:
+ l652:
{
- position653, tokenIndex653 := position, tokenIndex
+ position654, tokenIndex654 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l654
+ goto l655
}
position++
- goto l653
- l654:
- position, tokenIndex = position653, tokenIndex653
+ goto l654
+ l655:
+ position, tokenIndex = position654, tokenIndex654
if buffer[position] != rune('L') {
- goto l644
+ goto l645
}
position++
}
- l653:
- goto l601
- l644:
- position, tokenIndex = position601, tokenIndex601
+ l654:
+ goto l602
+ l645:
+ position, tokenIndex = position602, tokenIndex602
{
- position655, tokenIndex655 := position, tokenIndex
+ position656, tokenIndex656 := position, tokenIndex
if buffer[position] != rune('m') {
- goto l656
+ goto l657
}
position++
- goto l655
- l656:
- position, tokenIndex = position655, tokenIndex655
+ goto l656
+ l657:
+ position, tokenIndex = position656, tokenIndex656
if buffer[position] != rune('M') {
- goto l599
+ goto l600
}
position++
}
- l655:
+ l656:
{
- position657, tokenIndex657 := position, tokenIndex
+ position658, tokenIndex658 := position, tokenIndex
if buffer[position] != rune('u') {
- goto l658
+ goto l659
}
position++
- goto l657
- l658:
- position, tokenIndex = position657, tokenIndex657
+ goto l658
+ l659:
+ position, tokenIndex = position658, tokenIndex658
if buffer[position] != rune('U') {
- goto l599
+ goto l600
}
position++
}
- l657:
+ l658:
{
- position659, tokenIndex659 := position, tokenIndex
+ position660, tokenIndex660 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l660
+ goto l661
}
position++
- goto l659
- l660:
- position, tokenIndex = position659, tokenIndex659
+ goto l660
+ l661:
+ position, tokenIndex = position660, tokenIndex660
if buffer[position] != rune('L') {
- goto l599
+ goto l600
}
position++
}
- l659:
+ l660:
if buffer[position] != rune(' ') {
- goto l599
+ goto l600
}
position++
if buffer[position] != rune('#') {
- goto l599
+ goto l600
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l599
+ goto l600
}
position++
}
- l601:
- add(ruleARMConstantTweak, position600)
+ l602:
+ add(ruleARMConstantTweak, position601)
}
return true
- l599:
- position, tokenIndex = position599, tokenIndex599
+ l600:
+ position, tokenIndex = position600, tokenIndex600
return false
},
/* 46 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')) / SVE2PredicateRegister / ARMVectorRegister / SVE2SpecialValue / ('{' WS? ARMVectorRegister (',' WS? ARMVectorRegister)* WS? '}' ('[' [0-9] [0-9]? ']')?))> */
func() bool {
- position661, tokenIndex661 := position, tokenIndex
+ position662, tokenIndex662 := position, tokenIndex
{
- position662 := position
+ position663 := position
{
- position663, tokenIndex663 := position, tokenIndex
+ position664, tokenIndex664 := position, tokenIndex
{
- position665, tokenIndex665 := position, tokenIndex
+ position666, tokenIndex666 := position, tokenIndex
if buffer[position] != rune('s') {
- goto l666
+ goto l667
}
position++
- goto l665
- l666:
- position, tokenIndex = position665, tokenIndex665
+ goto l666
+ l667:
+ position, tokenIndex = position666, tokenIndex666
if buffer[position] != rune('S') {
- goto l664
+ goto l665
}
position++
}
- l665:
+ l666:
{
- position667, tokenIndex667 := position, tokenIndex
+ position668, tokenIndex668 := position, tokenIndex
if buffer[position] != rune('p') {
- goto l668
- }
- position++
- goto l667
- l668:
- position, tokenIndex = position667, tokenIndex667
- if buffer[position] != rune('P') {
- goto l664
- }
- position++
- }
- l667:
- goto l663
- l664:
- position, tokenIndex = position663, tokenIndex663
- {
- position670, tokenIndex670 := position, tokenIndex
- if buffer[position] != rune('x') {
- goto l671
- }
- position++
- goto l670
- l671:
- position, tokenIndex = position670, tokenIndex670
- if buffer[position] != rune('w') {
- goto l672
- }
- position++
- goto l670
- l672:
- position, tokenIndex = position670, tokenIndex670
- if buffer[position] != rune('d') {
- goto l673
- }
- position++
- goto l670
- l673:
- position, tokenIndex = position670, tokenIndex670
- if buffer[position] != rune('q') {
- goto l674
- }
- position++
- goto l670
- l674:
- position, tokenIndex = position670, tokenIndex670
- if buffer[position] != rune('s') {
- goto l675
- }
- position++
- goto l670
- l675:
- position, tokenIndex = position670, tokenIndex670
- if buffer[position] != rune('h') {
- goto l676
- }
- position++
- goto l670
- l676:
- position, tokenIndex = position670, tokenIndex670
- if buffer[position] != rune('b') {
goto l669
}
position++
+ goto l668
+ l669:
+ position, tokenIndex = position668, tokenIndex668
+ if buffer[position] != rune('P') {
+ goto l665
+ }
+ position++
}
- l670:
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l669
- }
- position++
+ l668:
+ goto l664
+ l665:
+ position, tokenIndex = position664, tokenIndex664
{
- position677, tokenIndex677 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
+ position671, tokenIndex671 := position, tokenIndex
+ if buffer[position] != rune('x') {
+ goto l672
+ }
+ position++
+ goto l671
+ l672:
+ position, tokenIndex = position671, tokenIndex671
+ if buffer[position] != rune('w') {
+ goto l673
+ }
+ position++
+ goto l671
+ l673:
+ position, tokenIndex = position671, tokenIndex671
+ if buffer[position] != rune('d') {
+ goto l674
+ }
+ position++
+ goto l671
+ l674:
+ position, tokenIndex = position671, tokenIndex671
+ if buffer[position] != rune('q') {
+ goto l675
+ }
+ position++
+ goto l671
+ l675:
+ position, tokenIndex = position671, tokenIndex671
+ if buffer[position] != rune('s') {
+ goto l676
+ }
+ position++
+ goto l671
+ l676:
+ position, tokenIndex = position671, tokenIndex671
+ if buffer[position] != rune('h') {
goto l677
}
position++
- goto l678
+ goto l671
l677:
- position, tokenIndex = position677, tokenIndex677
- }
- l678:
- goto l663
- l669:
- position, tokenIndex = position663, tokenIndex663
- {
- position680, tokenIndex680 := position, tokenIndex
- if buffer[position] != rune('x') {
- goto l681
- }
- position++
- goto l680
- l681:
- position, tokenIndex = position680, tokenIndex680
- if buffer[position] != rune('X') {
- goto l679
+ position, tokenIndex = position671, tokenIndex671
+ if buffer[position] != rune('b') {
+ goto l670
}
position++
}
- l680:
- {
- position682, tokenIndex682 := position, tokenIndex
- if buffer[position] != rune('z') {
- goto l683
- }
- position++
- goto l682
- l683:
- position, tokenIndex = position682, tokenIndex682
- if buffer[position] != rune('Z') {
- goto l679
- }
- position++
- }
- l682:
- {
- position684, tokenIndex684 := position, tokenIndex
- if buffer[position] != rune('r') {
- goto l685
- }
- position++
- goto l684
- l685:
- position, tokenIndex = position684, tokenIndex684
- if buffer[position] != rune('R') {
- goto l679
- }
- position++
- }
- l684:
- goto l663
- l679:
- position, tokenIndex = position663, tokenIndex663
- {
- position687, tokenIndex687 := position, tokenIndex
- if buffer[position] != rune('w') {
- goto l688
- }
- position++
- goto l687
- l688:
- position, tokenIndex = position687, tokenIndex687
- if buffer[position] != rune('W') {
- goto l686
- }
- position++
- }
- l687:
- {
- position689, tokenIndex689 := position, tokenIndex
- if buffer[position] != rune('z') {
- goto l690
- }
- position++
- goto l689
- l690:
- position, tokenIndex = position689, tokenIndex689
- if buffer[position] != rune('Z') {
- goto l686
- }
- position++
- }
- l689:
- {
- position691, tokenIndex691 := position, tokenIndex
- if buffer[position] != rune('r') {
- goto l692
- }
- position++
- goto l691
- l692:
- position, tokenIndex = position691, tokenIndex691
- if buffer[position] != rune('R') {
- goto l686
- }
- position++
- }
- l691:
- goto l663
- l686:
- position, tokenIndex = position663, tokenIndex663
- {
- position694, tokenIndex694 := position, tokenIndex
- if buffer[position] != rune('n') {
- goto l695
- }
- position++
- goto l694
- l695:
- position, tokenIndex = position694, tokenIndex694
- if buffer[position] != rune('N') {
- goto l693
- }
- position++
- }
- l694:
- {
- position696, tokenIndex696 := position, tokenIndex
- if buffer[position] != rune('z') {
- goto l697
- }
- position++
- goto l696
- l697:
- position, tokenIndex = position696, tokenIndex696
- if buffer[position] != rune('Z') {
- goto l693
- }
- position++
- }
- l696:
- {
- position698, tokenIndex698 := position, tokenIndex
- if buffer[position] != rune('c') {
- goto l699
- }
- position++
- goto l698
- l699:
- position, tokenIndex = position698, tokenIndex698
- if buffer[position] != rune('C') {
- goto l693
- }
- position++
- }
- l698:
- {
- position700, tokenIndex700 := position, tokenIndex
- if buffer[position] != rune('v') {
- goto l701
- }
- position++
- goto l700
- l701:
- position, tokenIndex = position700, tokenIndex700
- if buffer[position] != rune('V') {
- goto l693
- }
- position++
- }
- l700:
- goto l663
- l693:
- position, tokenIndex = position663, tokenIndex663
- if !_rules[ruleSVE2PredicateRegister]() {
- goto l702
- }
- goto l663
- l702:
- position, tokenIndex = position663, tokenIndex663
- if !_rules[ruleARMVectorRegister]() {
- goto l703
- }
- goto l663
- l703:
- position, tokenIndex = position663, tokenIndex663
- if !_rules[ruleSVE2SpecialValue]() {
- goto l704
- }
- goto l663
- l704:
- position, tokenIndex = position663, tokenIndex663
- if buffer[position] != rune('{') {
- goto l661
+ l671:
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l670
}
position++
{
- position705, tokenIndex705 := position, tokenIndex
- if !_rules[ruleWS]() {
- goto l705
+ position678, tokenIndex678 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l678
}
- goto l706
- l705:
- position, tokenIndex = position705, tokenIndex705
+ position++
+ goto l679
+ l678:
+ position, tokenIndex = position678, tokenIndex678
}
- l706:
+ l679:
+ goto l664
+ l670:
+ position, tokenIndex = position664, tokenIndex664
+ {
+ position681, tokenIndex681 := position, tokenIndex
+ if buffer[position] != rune('x') {
+ goto l682
+ }
+ position++
+ goto l681
+ l682:
+ position, tokenIndex = position681, tokenIndex681
+ if buffer[position] != rune('X') {
+ goto l680
+ }
+ position++
+ }
+ l681:
+ {
+ position683, tokenIndex683 := position, tokenIndex
+ if buffer[position] != rune('z') {
+ goto l684
+ }
+ position++
+ goto l683
+ l684:
+ position, tokenIndex = position683, tokenIndex683
+ if buffer[position] != rune('Z') {
+ goto l680
+ }
+ position++
+ }
+ l683:
+ {
+ position685, tokenIndex685 := position, tokenIndex
+ if buffer[position] != rune('r') {
+ goto l686
+ }
+ position++
+ goto l685
+ l686:
+ position, tokenIndex = position685, tokenIndex685
+ if buffer[position] != rune('R') {
+ goto l680
+ }
+ position++
+ }
+ l685:
+ goto l664
+ l680:
+ position, tokenIndex = position664, tokenIndex664
+ {
+ position688, tokenIndex688 := position, tokenIndex
+ if buffer[position] != rune('w') {
+ goto l689
+ }
+ position++
+ goto l688
+ l689:
+ position, tokenIndex = position688, tokenIndex688
+ if buffer[position] != rune('W') {
+ goto l687
+ }
+ position++
+ }
+ l688:
+ {
+ position690, tokenIndex690 := position, tokenIndex
+ if buffer[position] != rune('z') {
+ goto l691
+ }
+ position++
+ goto l690
+ l691:
+ position, tokenIndex = position690, tokenIndex690
+ if buffer[position] != rune('Z') {
+ goto l687
+ }
+ position++
+ }
+ l690:
+ {
+ position692, tokenIndex692 := position, tokenIndex
+ if buffer[position] != rune('r') {
+ goto l693
+ }
+ position++
+ goto l692
+ l693:
+ position, tokenIndex = position692, tokenIndex692
+ if buffer[position] != rune('R') {
+ goto l687
+ }
+ position++
+ }
+ l692:
+ goto l664
+ l687:
+ position, tokenIndex = position664, tokenIndex664
+ {
+ position695, tokenIndex695 := position, tokenIndex
+ if buffer[position] != rune('n') {
+ goto l696
+ }
+ position++
+ goto l695
+ l696:
+ position, tokenIndex = position695, tokenIndex695
+ if buffer[position] != rune('N') {
+ goto l694
+ }
+ position++
+ }
+ l695:
+ {
+ position697, tokenIndex697 := position, tokenIndex
+ if buffer[position] != rune('z') {
+ goto l698
+ }
+ position++
+ goto l697
+ l698:
+ position, tokenIndex = position697, tokenIndex697
+ if buffer[position] != rune('Z') {
+ goto l694
+ }
+ position++
+ }
+ l697:
+ {
+ position699, tokenIndex699 := position, tokenIndex
+ if buffer[position] != rune('c') {
+ goto l700
+ }
+ position++
+ goto l699
+ l700:
+ position, tokenIndex = position699, tokenIndex699
+ if buffer[position] != rune('C') {
+ goto l694
+ }
+ position++
+ }
+ l699:
+ {
+ position701, tokenIndex701 := position, tokenIndex
+ if buffer[position] != rune('v') {
+ goto l702
+ }
+ position++
+ goto l701
+ l702:
+ position, tokenIndex = position701, tokenIndex701
+ if buffer[position] != rune('V') {
+ goto l694
+ }
+ position++
+ }
+ l701:
+ goto l664
+ l694:
+ position, tokenIndex = position664, tokenIndex664
+ if !_rules[ruleSVE2PredicateRegister]() {
+ goto l703
+ }
+ goto l664
+ l703:
+ position, tokenIndex = position664, tokenIndex664
if !_rules[ruleARMVectorRegister]() {
- goto l661
+ goto l704
+ }
+ goto l664
+ l704:
+ position, tokenIndex = position664, tokenIndex664
+ if !_rules[ruleSVE2SpecialValue]() {
+ goto l705
+ }
+ goto l664
+ l705:
+ position, tokenIndex = position664, tokenIndex664
+ if buffer[position] != rune('{') {
+ goto l662
+ }
+ position++
+ {
+ position706, tokenIndex706 := position, tokenIndex
+ if !_rules[ruleWS]() {
+ goto l706
+ }
+ goto l707
+ l706:
+ position, tokenIndex = position706, tokenIndex706
}
l707:
+ if !_rules[ruleARMVectorRegister]() {
+ goto l662
+ }
+ l708:
{
- position708, tokenIndex708 := position, tokenIndex
+ position709, tokenIndex709 := position, tokenIndex
if buffer[position] != rune(',') {
- goto l708
+ goto l709
}
position++
{
- position709, tokenIndex709 := position, tokenIndex
+ position710, tokenIndex710 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l709
+ goto l710
}
- goto l710
- l709:
- position, tokenIndex = position709, tokenIndex709
+ goto l711
+ l710:
+ position, tokenIndex = position710, tokenIndex710
}
- l710:
+ l711:
if !_rules[ruleARMVectorRegister]() {
- goto l708
+ goto l709
}
- goto l707
- l708:
- position, tokenIndex = position708, tokenIndex708
+ goto l708
+ l709:
+ position, tokenIndex = position709, tokenIndex709
}
{
- position711, tokenIndex711 := position, tokenIndex
+ position712, tokenIndex712 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l711
+ goto l712
}
- goto l712
- l711:
- position, tokenIndex = position711, tokenIndex711
+ goto l713
+ l712:
+ position, tokenIndex = position712, tokenIndex712
}
- l712:
+ l713:
if buffer[position] != rune('}') {
- goto l661
+ goto l662
}
position++
{
- position713, tokenIndex713 := position, tokenIndex
+ position714, tokenIndex714 := position, tokenIndex
if buffer[position] != rune('[') {
- goto l713
+ goto l714
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l713
+ goto l714
}
position++
{
- position715, tokenIndex715 := position, tokenIndex
+ position716, tokenIndex716 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l715
+ goto l716
}
position++
- goto l716
- l715:
- position, tokenIndex = position715, tokenIndex715
+ goto l717
+ l716:
+ position, tokenIndex = position716, tokenIndex716
}
- l716:
+ l717:
if buffer[position] != rune(']') {
- goto l713
+ goto l714
}
position++
- goto l714
- l713:
- position, tokenIndex = position713, tokenIndex713
+ goto l715
+ l714:
+ position, tokenIndex = position714, tokenIndex714
}
- l714:
+ l715:
}
- l663:
- add(ruleARMRegister, position662)
+ l664:
+ add(ruleARMRegister, position663)
}
return true
- l661:
- position, tokenIndex = position661, tokenIndex661
+ l662:
+ position, tokenIndex = position662, tokenIndex662
return false
},
/* 47 ARMVectorRegister <- <(('p' / 'v' / 'z') [0-9] [0-9]? !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_') ('.' [0-9]* ('b' / 's' / 'd' / 'h' / 'q') ('[' [0-9] [0-9]? ']')?)?)> */
func() bool {
- position717, tokenIndex717 := position, tokenIndex
+ position718, tokenIndex718 := position, tokenIndex
{
- position718 := position
+ position719 := position
{
- position719, tokenIndex719 := position, tokenIndex
+ position720, tokenIndex720 := position, tokenIndex
if buffer[position] != rune('p') {
- goto l720
- }
- position++
- goto l719
- l720:
- position, tokenIndex = position719, tokenIndex719
- if buffer[position] != rune('v') {
goto l721
}
position++
- goto l719
+ goto l720
l721:
- position, tokenIndex = position719, tokenIndex719
- if buffer[position] != rune('z') {
- goto l717
- }
- position++
- }
- l719:
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l717
- }
- position++
- {
- position722, tokenIndex722 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
+ position, tokenIndex = position720, tokenIndex720
+ if buffer[position] != rune('v') {
goto l722
}
position++
- goto l723
+ goto l720
l722:
- position, tokenIndex = position722, tokenIndex722
+ position, tokenIndex = position720, tokenIndex720
+ if buffer[position] != rune('z') {
+ goto l718
+ }
+ position++
}
- l723:
+ l720:
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l718
+ }
+ position++
{
- position724, tokenIndex724 := position, tokenIndex
+ position723, tokenIndex723 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l723
+ }
+ position++
+ goto l724
+ l723:
+ position, tokenIndex = position723, tokenIndex723
+ }
+ l724:
+ {
+ position725, tokenIndex725 := position, tokenIndex
{
- position725, tokenIndex725 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l726
- }
- position++
- goto l725
- l726:
- position, tokenIndex = position725, tokenIndex725
+ position726, tokenIndex726 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l727
}
position++
- goto l725
+ goto l726
l727:
- position, tokenIndex = position725, tokenIndex725
+ position, tokenIndex = position726, tokenIndex726
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l728
+ }
+ position++
+ goto l726
+ l728:
+ position, tokenIndex = position726, tokenIndex726
{
- position729, tokenIndex729 := position, tokenIndex
+ position730, tokenIndex730 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l730
+ goto l731
}
position++
- goto l729
- l730:
- position, tokenIndex = position729, tokenIndex729
+ goto l730
+ l731:
+ position, tokenIndex = position730, tokenIndex730
if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l728
+ goto l729
}
position++
}
+ l730:
+ goto l726
l729:
- goto l725
- l728:
- position, tokenIndex = position725, tokenIndex725
+ position, tokenIndex = position726, tokenIndex726
if buffer[position] != rune('_') {
- goto l724
+ goto l725
}
position++
}
+ l726:
+ goto l718
l725:
- goto l717
- l724:
- position, tokenIndex = position724, tokenIndex724
+ position, tokenIndex = position725, tokenIndex725
}
{
- position731, tokenIndex731 := position, tokenIndex
+ position732, tokenIndex732 := position, tokenIndex
if buffer[position] != rune('.') {
- goto l731
+ goto l732
}
position++
- l733:
- {
- position734, tokenIndex734 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l734
- }
- position++
- goto l733
- l734:
- position, tokenIndex = position734, tokenIndex734
- }
+ l734:
{
position735, tokenIndex735 := position, tokenIndex
- if buffer[position] != rune('b') {
- goto l736
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l735
}
position++
- goto l735
- l736:
+ goto l734
+ l735:
position, tokenIndex = position735, tokenIndex735
- if buffer[position] != rune('s') {
+ }
+ {
+ position736, tokenIndex736 := position, tokenIndex
+ if buffer[position] != rune('b') {
goto l737
}
position++
- goto l735
+ goto l736
l737:
- position, tokenIndex = position735, tokenIndex735
- if buffer[position] != rune('d') {
+ position, tokenIndex = position736, tokenIndex736
+ if buffer[position] != rune('s') {
goto l738
}
position++
- goto l735
+ goto l736
l738:
- position, tokenIndex = position735, tokenIndex735
- if buffer[position] != rune('h') {
+ position, tokenIndex = position736, tokenIndex736
+ if buffer[position] != rune('d') {
goto l739
}
position++
- goto l735
+ goto l736
l739:
- position, tokenIndex = position735, tokenIndex735
+ position, tokenIndex = position736, tokenIndex736
+ if buffer[position] != rune('h') {
+ goto l740
+ }
+ position++
+ goto l736
+ l740:
+ position, tokenIndex = position736, tokenIndex736
if buffer[position] != rune('q') {
- goto l731
+ goto l732
}
position++
}
- l735:
+ l736:
{
- position740, tokenIndex740 := position, tokenIndex
+ position741, tokenIndex741 := position, tokenIndex
if buffer[position] != rune('[') {
- goto l740
+ goto l741
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l740
+ goto l741
}
position++
{
- position742, tokenIndex742 := position, tokenIndex
+ position743, tokenIndex743 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l742
+ goto l743
}
position++
- goto l743
- l742:
- position, tokenIndex = position742, tokenIndex742
+ goto l744
+ l743:
+ position, tokenIndex = position743, tokenIndex743
}
- l743:
+ l744:
if buffer[position] != rune(']') {
- goto l740
+ goto l741
}
position++
- goto l741
- l740:
- position, tokenIndex = position740, tokenIndex740
+ goto l742
+ l741:
+ position, tokenIndex = position741, tokenIndex741
}
- l741:
- goto l732
- l731:
- position, tokenIndex = position731, tokenIndex731
+ l742:
+ goto l733
+ l732:
+ position, tokenIndex = position732, tokenIndex732
}
- l732:
- add(ruleARMVectorRegister, position718)
+ l733:
+ add(ruleARMVectorRegister, position719)
}
return true
- l717:
- position, tokenIndex = position717, tokenIndex717
+ l718:
+ position, tokenIndex = position718, tokenIndex718
return false
},
/* 48 SVE2PredicateRegister <- <(('p' / 'P') [0-9] [0-9]? '/' ('m' / 'M' / ('z' / 'Z')))> */
func() bool {
- position744, tokenIndex744 := position, tokenIndex
+ position745, tokenIndex745 := position, tokenIndex
{
- position745 := position
+ position746 := position
{
- position746, tokenIndex746 := position, tokenIndex
+ position747, tokenIndex747 := position, tokenIndex
if buffer[position] != rune('p') {
- goto l747
- }
- position++
- goto l746
- l747:
- position, tokenIndex = position746, tokenIndex746
- if buffer[position] != rune('P') {
- goto l744
- }
- position++
- }
- l746:
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l744
- }
- position++
- {
- position748, tokenIndex748 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l748
}
position++
- goto l749
+ goto l747
l748:
- position, tokenIndex = position748, tokenIndex748
+ position, tokenIndex = position747, tokenIndex747
+ if buffer[position] != rune('P') {
+ goto l745
+ }
+ position++
}
- l749:
- if buffer[position] != rune('/') {
- goto l744
+ l747:
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l745
}
position++
{
- position750, tokenIndex750 := position, tokenIndex
- if buffer[position] != rune('m') {
- goto l751
+ position749, tokenIndex749 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l749
}
position++
goto l750
- l751:
- position, tokenIndex = position750, tokenIndex750
- if buffer[position] != rune('M') {
+ l749:
+ position, tokenIndex = position749, tokenIndex749
+ }
+ l750:
+ if buffer[position] != rune('/') {
+ goto l745
+ }
+ position++
+ {
+ position751, tokenIndex751 := position, tokenIndex
+ if buffer[position] != rune('m') {
goto l752
}
position++
- goto l750
+ goto l751
l752:
- position, tokenIndex = position750, tokenIndex750
+ position, tokenIndex = position751, tokenIndex751
+ if buffer[position] != rune('M') {
+ goto l753
+ }
+ position++
+ goto l751
+ l753:
+ position, tokenIndex = position751, tokenIndex751
{
- position753, tokenIndex753 := position, tokenIndex
+ position754, tokenIndex754 := position, tokenIndex
if buffer[position] != rune('z') {
- goto l754
+ goto l755
}
position++
- goto l753
- l754:
- position, tokenIndex = position753, tokenIndex753
+ goto l754
+ l755:
+ position, tokenIndex = position754, tokenIndex754
if buffer[position] != rune('Z') {
- goto l744
+ goto l745
}
position++
}
- l753:
+ l754:
}
- l750:
- add(ruleSVE2PredicateRegister, position745)
+ l751:
+ add(ruleSVE2PredicateRegister, position746)
}
return true
- l744:
- position, tokenIndex = position744, tokenIndex744
+ l745:
+ position, tokenIndex = position745, tokenIndex745
return false
},
/* 49 SVE2SpecialValue <- <(((('p' / 'P') ('o' / 'O') ('w' / 'W') '2') / (('v' / 'V') ('l' / 'L') ('1' / '2' / '3' / '4' / '5' / '6' / '7' / '8') ![0-9]) / (('v' / 'V') ('l' / 'L') '1' '6') / (('v' / 'V') ('l' / 'L') '3' '2') / (('v' / 'V') ('l' / 'L') '6' '4') / (('v' / 'V') ('l' / 'L') '1' '2' '8') / (('v' / 'V') ('l' / 'L') '2' '5' '6') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '3') / (('m' / 'M') ('u' / 'U') ('l' / 'L') '4') / (('a' / 'A') ('l' / 'L') ('l' / 'L'))) !([0-9] / [0-9] / ([a-z] / [A-Z]) / '_'))> */
func() bool {
- position755, tokenIndex755 := position, tokenIndex
+ position756, tokenIndex756 := position, tokenIndex
{
- position756 := position
+ position757 := position
{
- position757, tokenIndex757 := position, tokenIndex
+ position758, tokenIndex758 := position, tokenIndex
{
- position759, tokenIndex759 := position, tokenIndex
+ position760, tokenIndex760 := position, tokenIndex
if buffer[position] != rune('p') {
- goto l760
+ goto l761
}
position++
- goto l759
- l760:
- position, tokenIndex = position759, tokenIndex759
+ goto l760
+ l761:
+ position, tokenIndex = position760, tokenIndex760
if buffer[position] != rune('P') {
- goto l758
+ goto l759
}
position++
}
- l759:
+ l760:
{
- position761, tokenIndex761 := position, tokenIndex
+ position762, tokenIndex762 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l762
+ goto l763
}
position++
- goto l761
- l762:
- position, tokenIndex = position761, tokenIndex761
+ goto l762
+ l763:
+ position, tokenIndex = position762, tokenIndex762
if buffer[position] != rune('O') {
- goto l758
+ goto l759
}
position++
}
- l761:
+ l762:
{
- position763, tokenIndex763 := position, tokenIndex
+ position764, tokenIndex764 := position, tokenIndex
if buffer[position] != rune('w') {
- goto l764
+ goto l765
}
position++
- goto l763
- l764:
- position, tokenIndex = position763, tokenIndex763
+ goto l764
+ l765:
+ position, tokenIndex = position764, tokenIndex764
if buffer[position] != rune('W') {
- goto l758
+ goto l759
}
position++
}
- l763:
+ l764:
if buffer[position] != rune('2') {
- goto l758
+ goto l759
}
position++
- goto l757
- l758:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l759:
+ position, tokenIndex = position758, tokenIndex758
{
- position766, tokenIndex766 := position, tokenIndex
+ position767, tokenIndex767 := position, tokenIndex
if buffer[position] != rune('v') {
- goto l767
+ goto l768
}
position++
- goto l766
- l767:
- position, tokenIndex = position766, tokenIndex766
+ goto l767
+ l768:
+ position, tokenIndex = position767, tokenIndex767
if buffer[position] != rune('V') {
- goto l765
+ goto l766
}
position++
}
- l766:
+ l767:
{
- position768, tokenIndex768 := position, tokenIndex
+ position769, tokenIndex769 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l769
+ goto l770
}
position++
- goto l768
- l769:
- position, tokenIndex = position768, tokenIndex768
+ goto l769
+ l770:
+ position, tokenIndex = position769, tokenIndex769
if buffer[position] != rune('L') {
- goto l765
+ goto l766
}
position++
}
- l768:
+ l769:
{
- position770, tokenIndex770 := position, tokenIndex
+ position771, tokenIndex771 := position, tokenIndex
if buffer[position] != rune('1') {
- goto l771
- }
- position++
- goto l770
- l771:
- position, tokenIndex = position770, tokenIndex770
- if buffer[position] != rune('2') {
goto l772
}
position++
- goto l770
+ goto l771
l772:
- position, tokenIndex = position770, tokenIndex770
- if buffer[position] != rune('3') {
+ position, tokenIndex = position771, tokenIndex771
+ if buffer[position] != rune('2') {
goto l773
}
position++
- goto l770
+ goto l771
l773:
- position, tokenIndex = position770, tokenIndex770
- if buffer[position] != rune('4') {
+ position, tokenIndex = position771, tokenIndex771
+ if buffer[position] != rune('3') {
goto l774
}
position++
- goto l770
+ goto l771
l774:
- position, tokenIndex = position770, tokenIndex770
- if buffer[position] != rune('5') {
+ position, tokenIndex = position771, tokenIndex771
+ if buffer[position] != rune('4') {
goto l775
}
position++
- goto l770
+ goto l771
l775:
- position, tokenIndex = position770, tokenIndex770
- if buffer[position] != rune('6') {
+ position, tokenIndex = position771, tokenIndex771
+ if buffer[position] != rune('5') {
goto l776
}
position++
- goto l770
+ goto l771
l776:
- position, tokenIndex = position770, tokenIndex770
- if buffer[position] != rune('7') {
+ position, tokenIndex = position771, tokenIndex771
+ if buffer[position] != rune('6') {
goto l777
}
position++
- goto l770
+ goto l771
l777:
- position, tokenIndex = position770, tokenIndex770
- if buffer[position] != rune('8') {
- goto l765
- }
- position++
- }
- l770:
- {
- position778, tokenIndex778 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
+ position, tokenIndex = position771, tokenIndex771
+ if buffer[position] != rune('7') {
goto l778
}
position++
- goto l765
+ goto l771
l778:
- position, tokenIndex = position778, tokenIndex778
+ position, tokenIndex = position771, tokenIndex771
+ if buffer[position] != rune('8') {
+ goto l766
+ }
+ position++
}
- goto l757
- l765:
- position, tokenIndex = position757, tokenIndex757
+ l771:
{
- position780, tokenIndex780 := position, tokenIndex
+ position779, tokenIndex779 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l779
+ }
+ position++
+ goto l766
+ l779:
+ position, tokenIndex = position779, tokenIndex779
+ }
+ goto l758
+ l766:
+ position, tokenIndex = position758, tokenIndex758
+ {
+ position781, tokenIndex781 := position, tokenIndex
if buffer[position] != rune('v') {
- goto l781
+ goto l782
}
position++
- goto l780
- l781:
- position, tokenIndex = position780, tokenIndex780
+ goto l781
+ l782:
+ position, tokenIndex = position781, tokenIndex781
if buffer[position] != rune('V') {
- goto l779
+ goto l780
}
position++
}
- l780:
+ l781:
{
- position782, tokenIndex782 := position, tokenIndex
+ position783, tokenIndex783 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l783
+ goto l784
}
position++
- goto l782
- l783:
- position, tokenIndex = position782, tokenIndex782
+ goto l783
+ l784:
+ position, tokenIndex = position783, tokenIndex783
if buffer[position] != rune('L') {
- goto l779
+ goto l780
}
position++
}
- l782:
+ l783:
if buffer[position] != rune('1') {
- goto l779
+ goto l780
}
position++
if buffer[position] != rune('6') {
- goto l779
+ goto l780
}
position++
- goto l757
- l779:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l780:
+ position, tokenIndex = position758, tokenIndex758
{
- position785, tokenIndex785 := position, tokenIndex
+ position786, tokenIndex786 := position, tokenIndex
if buffer[position] != rune('v') {
- goto l786
+ goto l787
}
position++
- goto l785
- l786:
- position, tokenIndex = position785, tokenIndex785
+ goto l786
+ l787:
+ position, tokenIndex = position786, tokenIndex786
if buffer[position] != rune('V') {
- goto l784
+ goto l785
}
position++
}
- l785:
+ l786:
{
- position787, tokenIndex787 := position, tokenIndex
+ position788, tokenIndex788 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l788
+ goto l789
}
position++
- goto l787
- l788:
- position, tokenIndex = position787, tokenIndex787
+ goto l788
+ l789:
+ position, tokenIndex = position788, tokenIndex788
if buffer[position] != rune('L') {
- goto l784
+ goto l785
}
position++
}
- l787:
+ l788:
if buffer[position] != rune('3') {
- goto l784
+ goto l785
}
position++
if buffer[position] != rune('2') {
- goto l784
+ goto l785
}
position++
- goto l757
- l784:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l785:
+ position, tokenIndex = position758, tokenIndex758
{
- position790, tokenIndex790 := position, tokenIndex
+ position791, tokenIndex791 := position, tokenIndex
if buffer[position] != rune('v') {
- goto l791
+ goto l792
}
position++
- goto l790
- l791:
- position, tokenIndex = position790, tokenIndex790
+ goto l791
+ l792:
+ position, tokenIndex = position791, tokenIndex791
if buffer[position] != rune('V') {
- goto l789
+ goto l790
}
position++
}
- l790:
+ l791:
{
- position792, tokenIndex792 := position, tokenIndex
+ position793, tokenIndex793 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l793
+ goto l794
}
position++
- goto l792
- l793:
- position, tokenIndex = position792, tokenIndex792
+ goto l793
+ l794:
+ position, tokenIndex = position793, tokenIndex793
if buffer[position] != rune('L') {
- goto l789
+ goto l790
}
position++
}
- l792:
+ l793:
if buffer[position] != rune('6') {
- goto l789
+ goto l790
}
position++
if buffer[position] != rune('4') {
- goto l789
+ goto l790
}
position++
- goto l757
- l789:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l790:
+ position, tokenIndex = position758, tokenIndex758
{
- position795, tokenIndex795 := position, tokenIndex
+ position796, tokenIndex796 := position, tokenIndex
if buffer[position] != rune('v') {
- goto l796
+ goto l797
}
position++
- goto l795
- l796:
- position, tokenIndex = position795, tokenIndex795
+ goto l796
+ l797:
+ position, tokenIndex = position796, tokenIndex796
if buffer[position] != rune('V') {
- goto l794
+ goto l795
}
position++
}
- l795:
+ l796:
{
- position797, tokenIndex797 := position, tokenIndex
+ position798, tokenIndex798 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l798
+ goto l799
}
position++
- goto l797
- l798:
- position, tokenIndex = position797, tokenIndex797
+ goto l798
+ l799:
+ position, tokenIndex = position798, tokenIndex798
if buffer[position] != rune('L') {
- goto l794
+ goto l795
}
position++
}
- l797:
+ l798:
if buffer[position] != rune('1') {
- goto l794
+ goto l795
}
position++
if buffer[position] != rune('2') {
- goto l794
+ goto l795
}
position++
if buffer[position] != rune('8') {
- goto l794
+ goto l795
}
position++
- goto l757
- l794:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l795:
+ position, tokenIndex = position758, tokenIndex758
{
- position800, tokenIndex800 := position, tokenIndex
+ position801, tokenIndex801 := position, tokenIndex
if buffer[position] != rune('v') {
- goto l801
+ goto l802
}
position++
- goto l800
- l801:
- position, tokenIndex = position800, tokenIndex800
+ goto l801
+ l802:
+ position, tokenIndex = position801, tokenIndex801
if buffer[position] != rune('V') {
- goto l799
+ goto l800
}
position++
}
- l800:
+ l801:
{
- position802, tokenIndex802 := position, tokenIndex
+ position803, tokenIndex803 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l803
+ goto l804
}
position++
- goto l802
- l803:
- position, tokenIndex = position802, tokenIndex802
+ goto l803
+ l804:
+ position, tokenIndex = position803, tokenIndex803
if buffer[position] != rune('L') {
- goto l799
+ goto l800
}
position++
}
- l802:
+ l803:
if buffer[position] != rune('2') {
- goto l799
+ goto l800
}
position++
if buffer[position] != rune('5') {
- goto l799
+ goto l800
}
position++
if buffer[position] != rune('6') {
- goto l799
+ goto l800
}
position++
- goto l757
- l799:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l800:
+ position, tokenIndex = position758, tokenIndex758
{
- position805, tokenIndex805 := position, tokenIndex
+ position806, tokenIndex806 := position, tokenIndex
if buffer[position] != rune('m') {
- goto l806
+ goto l807
}
position++
- goto l805
- l806:
- position, tokenIndex = position805, tokenIndex805
+ goto l806
+ l807:
+ position, tokenIndex = position806, tokenIndex806
if buffer[position] != rune('M') {
- goto l804
+ goto l805
}
position++
}
- l805:
+ l806:
{
- position807, tokenIndex807 := position, tokenIndex
+ position808, tokenIndex808 := position, tokenIndex
if buffer[position] != rune('u') {
- goto l808
+ goto l809
}
position++
- goto l807
- l808:
- position, tokenIndex = position807, tokenIndex807
+ goto l808
+ l809:
+ position, tokenIndex = position808, tokenIndex808
if buffer[position] != rune('U') {
- goto l804
+ goto l805
}
position++
}
- l807:
+ l808:
{
- position809, tokenIndex809 := position, tokenIndex
+ position810, tokenIndex810 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l810
+ goto l811
}
position++
- goto l809
- l810:
- position, tokenIndex = position809, tokenIndex809
+ goto l810
+ l811:
+ position, tokenIndex = position810, tokenIndex810
if buffer[position] != rune('L') {
- goto l804
+ goto l805
}
position++
}
- l809:
+ l810:
if buffer[position] != rune('3') {
- goto l804
+ goto l805
}
position++
- goto l757
- l804:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l805:
+ position, tokenIndex = position758, tokenIndex758
{
- position812, tokenIndex812 := position, tokenIndex
+ position813, tokenIndex813 := position, tokenIndex
if buffer[position] != rune('m') {
- goto l813
+ goto l814
}
position++
- goto l812
- l813:
- position, tokenIndex = position812, tokenIndex812
+ goto l813
+ l814:
+ position, tokenIndex = position813, tokenIndex813
if buffer[position] != rune('M') {
- goto l811
+ goto l812
}
position++
}
- l812:
+ l813:
{
- position814, tokenIndex814 := position, tokenIndex
+ position815, tokenIndex815 := position, tokenIndex
if buffer[position] != rune('u') {
- goto l815
+ goto l816
}
position++
- goto l814
- l815:
- position, tokenIndex = position814, tokenIndex814
+ goto l815
+ l816:
+ position, tokenIndex = position815, tokenIndex815
if buffer[position] != rune('U') {
- goto l811
+ goto l812
}
position++
}
- l814:
+ l815:
{
- position816, tokenIndex816 := position, tokenIndex
+ position817, tokenIndex817 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l817
+ goto l818
}
position++
- goto l816
- l817:
- position, tokenIndex = position816, tokenIndex816
+ goto l817
+ l818:
+ position, tokenIndex = position817, tokenIndex817
if buffer[position] != rune('L') {
- goto l811
+ goto l812
}
position++
}
- l816:
+ l817:
if buffer[position] != rune('4') {
- goto l811
+ goto l812
}
position++
- goto l757
- l811:
- position, tokenIndex = position757, tokenIndex757
+ goto l758
+ l812:
+ position, tokenIndex = position758, tokenIndex758
{
- position818, tokenIndex818 := position, tokenIndex
+ position819, tokenIndex819 := position, tokenIndex
if buffer[position] != rune('a') {
- goto l819
+ goto l820
}
position++
- goto l818
- l819:
- position, tokenIndex = position818, tokenIndex818
+ goto l819
+ l820:
+ position, tokenIndex = position819, tokenIndex819
if buffer[position] != rune('A') {
- goto l755
+ goto l756
}
position++
}
- l818:
+ l819:
{
- position820, tokenIndex820 := position, tokenIndex
+ position821, tokenIndex821 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l821
+ goto l822
}
position++
- goto l820
- l821:
- position, tokenIndex = position820, tokenIndex820
+ goto l821
+ l822:
+ position, tokenIndex = position821, tokenIndex821
if buffer[position] != rune('L') {
- goto l755
+ goto l756
}
position++
}
- l820:
+ l821:
{
- position822, tokenIndex822 := position, tokenIndex
+ position823, tokenIndex823 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l823
+ goto l824
}
position++
- goto l822
- l823:
- position, tokenIndex = position822, tokenIndex822
+ goto l823
+ l824:
+ position, tokenIndex = position823, tokenIndex823
if buffer[position] != rune('L') {
- goto l755
+ goto l756
}
position++
}
- l822:
+ l823:
}
- l757:
+ l758:
{
- position824, tokenIndex824 := position, tokenIndex
+ position825, tokenIndex825 := position, tokenIndex
{
- position825, tokenIndex825 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l826
- }
- position++
- goto l825
- l826:
- position, tokenIndex = position825, tokenIndex825
+ position826, tokenIndex826 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l827
}
position++
- goto l825
+ goto l826
l827:
- position, tokenIndex = position825, tokenIndex825
+ position, tokenIndex = position826, tokenIndex826
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l828
+ }
+ position++
+ goto l826
+ l828:
+ position, tokenIndex = position826, tokenIndex826
{
- position829, tokenIndex829 := position, tokenIndex
+ position830, tokenIndex830 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l830
+ goto l831
}
position++
- goto l829
- l830:
- position, tokenIndex = position829, tokenIndex829
+ goto l830
+ l831:
+ position, tokenIndex = position830, tokenIndex830
if c := buffer[position]; c < rune('A') || c > rune('Z') {
- goto l828
+ goto l829
}
position++
}
+ l830:
+ goto l826
l829:
- goto l825
- l828:
- position, tokenIndex = position825, tokenIndex825
+ position, tokenIndex = position826, tokenIndex826
if buffer[position] != rune('_') {
- goto l824
+ goto l825
}
position++
}
+ l826:
+ goto l756
l825:
- goto l755
- l824:
- position, tokenIndex = position824, tokenIndex824
+ position, tokenIndex = position825, tokenIndex825
}
- add(ruleSVE2SpecialValue, position756)
+ add(ruleSVE2SpecialValue, position757)
}
return true
- l755:
- position, tokenIndex = position755, tokenIndex755
+ l756:
+ position, tokenIndex = position756, tokenIndex756
return false
},
/* 50 MemoryRef <- <((SymbolRef BaseIndexScale) / SymbolRef / Low12BitsSymbolRef / (Offset* BaseIndexScale) / (SegmentRegister Offset BaseIndexScale) / (SegmentRegister BaseIndexScale) / (SegmentRegister Offset) / ARMBaseIndexScale / BaseIndexScale)> */
func() bool {
- position831, tokenIndex831 := position, tokenIndex
+ position832, tokenIndex832 := position, tokenIndex
{
- position832 := position
+ position833 := position
{
- position833, tokenIndex833 := position, tokenIndex
- if !_rules[ruleSymbolRef]() {
- goto l834
- }
- if !_rules[ruleBaseIndexScale]() {
- goto l834
- }
- goto l833
- l834:
- position, tokenIndex = position833, tokenIndex833
+ position834, tokenIndex834 := position, tokenIndex
if !_rules[ruleSymbolRef]() {
goto l835
}
- goto l833
+ if !_rules[ruleBaseIndexScale]() {
+ goto l835
+ }
+ goto l834
l835:
- position, tokenIndex = position833, tokenIndex833
- if !_rules[ruleLow12BitsSymbolRef]() {
+ position, tokenIndex = position834, tokenIndex834
+ if !_rules[ruleSymbolRef]() {
goto l836
}
- goto l833
+ goto l834
l836:
- position, tokenIndex = position833, tokenIndex833
- l838:
- {
- position839, tokenIndex839 := position, tokenIndex
- if !_rules[ruleOffset]() {
- goto l839
- }
- goto l838
- l839:
- position, tokenIndex = position839, tokenIndex839
- }
- if !_rules[ruleBaseIndexScale]() {
+ position, tokenIndex = position834, tokenIndex834
+ if !_rules[ruleLow12BitsSymbolRef]() {
goto l837
}
- goto l833
+ goto l834
l837:
- position, tokenIndex = position833, tokenIndex833
+ position, tokenIndex = position834, tokenIndex834
+ l839:
+ {
+ position840, tokenIndex840 := position, tokenIndex
+ if !_rules[ruleOffset]() {
+ goto l840
+ }
+ goto l839
+ l840:
+ position, tokenIndex = position840, tokenIndex840
+ }
+ if !_rules[ruleBaseIndexScale]() {
+ goto l838
+ }
+ goto l834
+ l838:
+ position, tokenIndex = position834, tokenIndex834
if !_rules[ruleSegmentRegister]() {
- goto l840
+ goto l841
}
if !_rules[ruleOffset]() {
- goto l840
- }
- if !_rules[ruleBaseIndexScale]() {
- goto l840
- }
- goto l833
- l840:
- position, tokenIndex = position833, tokenIndex833
- if !_rules[ruleSegmentRegister]() {
goto l841
}
if !_rules[ruleBaseIndexScale]() {
goto l841
}
- goto l833
+ goto l834
l841:
- position, tokenIndex = position833, tokenIndex833
+ position, tokenIndex = position834, tokenIndex834
if !_rules[ruleSegmentRegister]() {
goto l842
}
- if !_rules[ruleOffset]() {
+ if !_rules[ruleBaseIndexScale]() {
goto l842
}
- goto l833
+ goto l834
l842:
- position, tokenIndex = position833, tokenIndex833
- if !_rules[ruleARMBaseIndexScale]() {
+ position, tokenIndex = position834, tokenIndex834
+ if !_rules[ruleSegmentRegister]() {
goto l843
}
- goto l833
+ if !_rules[ruleOffset]() {
+ goto l843
+ }
+ goto l834
l843:
- position, tokenIndex = position833, tokenIndex833
+ position, tokenIndex = position834, tokenIndex834
+ if !_rules[ruleARMBaseIndexScale]() {
+ goto l844
+ }
+ goto l834
+ l844:
+ position, tokenIndex = position834, tokenIndex834
if !_rules[ruleBaseIndexScale]() {
- goto l831
+ goto l832
}
}
- l833:
- add(ruleMemoryRef, position832)
+ l834:
+ add(ruleMemoryRef, position833)
}
return true
- l831:
- position, tokenIndex = position831, tokenIndex831
+ l832:
+ position, tokenIndex = position832, tokenIndex832
return false
},
/* 51 SymbolRef <- <((Offset* '+')? (LocalSymbol / SymbolName) Offset* ('@' Section Offset*)?)> */
func() bool {
- position844, tokenIndex844 := position, tokenIndex
+ position845, tokenIndex845 := position, tokenIndex
{
- position845 := position
+ position846 := position
{
- position846, tokenIndex846 := position, tokenIndex
- l848:
+ position847, tokenIndex847 := position, tokenIndex
+ l849:
{
- position849, tokenIndex849 := position, tokenIndex
+ position850, tokenIndex850 := position, tokenIndex
if !_rules[ruleOffset]() {
- goto l849
+ goto l850
}
- goto l848
- l849:
- position, tokenIndex = position849, tokenIndex849
+ goto l849
+ l850:
+ position, tokenIndex = position850, tokenIndex850
}
if buffer[position] != rune('+') {
- goto l846
+ goto l847
}
position++
- goto l847
- l846:
- position, tokenIndex = position846, tokenIndex846
+ goto l848
+ l847:
+ position, tokenIndex = position847, tokenIndex847
}
- l847:
+ l848:
{
- position850, tokenIndex850 := position, tokenIndex
+ position851, tokenIndex851 := position, tokenIndex
if !_rules[ruleLocalSymbol]() {
- goto l851
+ goto l852
}
- goto l850
- l851:
- position, tokenIndex = position850, tokenIndex850
+ goto l851
+ l852:
+ position, tokenIndex = position851, tokenIndex851
if !_rules[ruleSymbolName]() {
- goto l844
+ goto l845
}
}
- l850:
- l852:
- {
- position853, tokenIndex853 := position, tokenIndex
- if !_rules[ruleOffset]() {
- goto l853
- }
- goto l852
- l853:
- position, tokenIndex = position853, tokenIndex853
- }
+ l851:
+ l853:
{
position854, tokenIndex854 := position, tokenIndex
- if buffer[position] != rune('@') {
+ if !_rules[ruleOffset]() {
goto l854
}
- position++
- if !_rules[ruleSection]() {
- goto l854
- }
- l856:
- {
- position857, tokenIndex857 := position, tokenIndex
- if !_rules[ruleOffset]() {
- goto l857
- }
- goto l856
- l857:
- position, tokenIndex = position857, tokenIndex857
- }
- goto l855
+ goto l853
l854:
position, tokenIndex = position854, tokenIndex854
}
- l855:
- add(ruleSymbolRef, position845)
+ {
+ position855, tokenIndex855 := position, tokenIndex
+ if buffer[position] != rune('@') {
+ goto l855
+ }
+ position++
+ if !_rules[ruleSection]() {
+ goto l855
+ }
+ l857:
+ {
+ position858, tokenIndex858 := position, tokenIndex
+ if !_rules[ruleOffset]() {
+ goto l858
+ }
+ goto l857
+ l858:
+ position, tokenIndex = position858, tokenIndex858
+ }
+ goto l856
+ l855:
+ position, tokenIndex = position855, tokenIndex855
+ }
+ l856:
+ add(ruleSymbolRef, position846)
}
return true
- l844:
- position, tokenIndex = position844, tokenIndex844
+ l845:
+ position, tokenIndex = position845, tokenIndex845
return false
},
/* 52 Low12BitsSymbolRef <- <(':' ('l' / 'L') ('o' / 'O') '1' '2' ':' (LocalSymbol / SymbolName) Offset?)> */
func() bool {
- position858, tokenIndex858 := position, tokenIndex
+ position859, tokenIndex859 := position, tokenIndex
{
- position859 := position
+ position860 := position
if buffer[position] != rune(':') {
- goto l858
+ goto l859
}
position++
{
- position860, tokenIndex860 := position, tokenIndex
+ position861, tokenIndex861 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l861
+ goto l862
}
position++
- goto l860
- l861:
- position, tokenIndex = position860, tokenIndex860
+ goto l861
+ l862:
+ position, tokenIndex = position861, tokenIndex861
if buffer[position] != rune('L') {
- goto l858
+ goto l859
}
position++
}
- l860:
+ l861:
{
- position862, tokenIndex862 := position, tokenIndex
+ position863, tokenIndex863 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l863
+ goto l864
}
position++
- goto l862
- l863:
- position, tokenIndex = position862, tokenIndex862
+ goto l863
+ l864:
+ position, tokenIndex = position863, tokenIndex863
if buffer[position] != rune('O') {
- goto l858
+ goto l859
}
position++
}
- l862:
+ l863:
if buffer[position] != rune('1') {
- goto l858
+ goto l859
}
position++
if buffer[position] != rune('2') {
- goto l858
+ goto l859
}
position++
if buffer[position] != rune(':') {
- goto l858
+ goto l859
}
position++
{
- position864, tokenIndex864 := position, tokenIndex
+ position865, tokenIndex865 := position, tokenIndex
if !_rules[ruleLocalSymbol]() {
- goto l865
- }
- goto l864
- l865:
- position, tokenIndex = position864, tokenIndex864
- if !_rules[ruleSymbolName]() {
- goto l858
- }
- }
- l864:
- {
- position866, tokenIndex866 := position, tokenIndex
- if !_rules[ruleOffset]() {
goto l866
}
- goto l867
+ goto l865
l866:
- position, tokenIndex = position866, tokenIndex866
+ position, tokenIndex = position865, tokenIndex865
+ if !_rules[ruleSymbolName]() {
+ goto l859
+ }
}
- l867:
- add(ruleLow12BitsSymbolRef, position859)
+ l865:
+ {
+ position867, tokenIndex867 := position, tokenIndex
+ if !_rules[ruleOffset]() {
+ goto l867
+ }
+ goto l868
+ l867:
+ position, tokenIndex = position867, tokenIndex867
+ }
+ l868:
+ add(ruleLow12BitsSymbolRef, position860)
}
return true
- l858:
- position, tokenIndex = position858, tokenIndex858
+ l859:
+ position, tokenIndex = position859, tokenIndex859
return false
},
/* 53 ARMBaseIndexScale <- <('[' ARMRegister (',' WS? (('#' Offset (('*' [0-9]+) / ('*' '(' [0-9]+ Operator [0-9]+ ')') / ('+' [0-9]+)*)?) / ARMGOTLow12 / Low12BitsSymbolRef / ARMRegister) (',' WS? ARMConstantTweak)?)? ']' ARMPostincrement?)> */
func() bool {
- position868, tokenIndex868 := position, tokenIndex
+ position869, tokenIndex869 := position, tokenIndex
{
- position869 := position
+ position870 := position
if buffer[position] != rune('[') {
- goto l868
+ goto l869
}
position++
if !_rules[ruleARMRegister]() {
- goto l868
+ goto l869
}
{
- position870, tokenIndex870 := position, tokenIndex
+ position871, tokenIndex871 := position, tokenIndex
if buffer[position] != rune(',') {
- goto l870
+ goto l871
}
position++
{
- position872, tokenIndex872 := position, tokenIndex
+ position873, tokenIndex873 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l872
- }
- goto l873
- l872:
- position, tokenIndex = position872, tokenIndex872
- }
- l873:
- {
- position874, tokenIndex874 := position, tokenIndex
- if buffer[position] != rune('#') {
- goto l875
- }
- position++
- if !_rules[ruleOffset]() {
- goto l875
- }
- {
- position876, tokenIndex876 := position, tokenIndex
- {
- position878, tokenIndex878 := position, tokenIndex
- if buffer[position] != rune('*') {
- goto l879
- }
- position++
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l879
- }
- position++
- l880:
- {
- position881, tokenIndex881 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l881
- }
- position++
- goto l880
- l881:
- position, tokenIndex = position881, tokenIndex881
- }
- goto l878
- l879:
- position, tokenIndex = position878, tokenIndex878
- if buffer[position] != rune('*') {
- goto l882
- }
- position++
- if buffer[position] != rune('(') {
- goto l882
- }
- position++
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l882
- }
- position++
- l883:
- {
- position884, tokenIndex884 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l884
- }
- position++
- goto l883
- l884:
- position, tokenIndex = position884, tokenIndex884
- }
- if !_rules[ruleOperator]() {
- goto l882
- }
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l882
- }
- position++
- l885:
- {
- position886, tokenIndex886 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l886
- }
- position++
- goto l885
- l886:
- position, tokenIndex = position886, tokenIndex886
- }
- if buffer[position] != rune(')') {
- goto l882
- }
- position++
- goto l878
- l882:
- position, tokenIndex = position878, tokenIndex878
- l887:
- {
- position888, tokenIndex888 := position, tokenIndex
- if buffer[position] != rune('+') {
- goto l888
- }
- position++
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l888
- }
- position++
- l889:
- {
- position890, tokenIndex890 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l890
- }
- position++
- goto l889
- l890:
- position, tokenIndex = position890, tokenIndex890
- }
- goto l887
- l888:
- position, tokenIndex = position888, tokenIndex888
- }
- }
- l878:
- goto l877
-
- position, tokenIndex = position876, tokenIndex876
- }
- l877:
- goto l874
- l875:
- position, tokenIndex = position874, tokenIndex874
- if !_rules[ruleARMGOTLow12]() {
- goto l891
+ goto l873
}
goto l874
- l891:
- position, tokenIndex = position874, tokenIndex874
- if !_rules[ruleLow12BitsSymbolRef]() {
- goto l892
- }
- goto l874
- l892:
- position, tokenIndex = position874, tokenIndex874
- if !_rules[ruleARMRegister]() {
- goto l870
- }
+ l873:
+ position, tokenIndex = position873, tokenIndex873
}
l874:
{
- position893, tokenIndex893 := position, tokenIndex
- if buffer[position] != rune(',') {
+ position875, tokenIndex875 := position, tokenIndex
+ if buffer[position] != rune('#') {
+ goto l876
+ }
+ position++
+ if !_rules[ruleOffset]() {
+ goto l876
+ }
+ {
+ position877, tokenIndex877 := position, tokenIndex
+ {
+ position879, tokenIndex879 := position, tokenIndex
+ if buffer[position] != rune('*') {
+ goto l880
+ }
+ position++
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l880
+ }
+ position++
+ l881:
+ {
+ position882, tokenIndex882 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l882
+ }
+ position++
+ goto l881
+ l882:
+ position, tokenIndex = position882, tokenIndex882
+ }
+ goto l879
+ l880:
+ position, tokenIndex = position879, tokenIndex879
+ if buffer[position] != rune('*') {
+ goto l883
+ }
+ position++
+ if buffer[position] != rune('(') {
+ goto l883
+ }
+ position++
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l883
+ }
+ position++
+ l884:
+ {
+ position885, tokenIndex885 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l885
+ }
+ position++
+ goto l884
+ l885:
+ position, tokenIndex = position885, tokenIndex885
+ }
+ if !_rules[ruleOperator]() {
+ goto l883
+ }
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l883
+ }
+ position++
+ l886:
+ {
+ position887, tokenIndex887 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l887
+ }
+ position++
+ goto l886
+ l887:
+ position, tokenIndex = position887, tokenIndex887
+ }
+ if buffer[position] != rune(')') {
+ goto l883
+ }
+ position++
+ goto l879
+ l883:
+ position, tokenIndex = position879, tokenIndex879
+ l888:
+ {
+ position889, tokenIndex889 := position, tokenIndex
+ if buffer[position] != rune('+') {
+ goto l889
+ }
+ position++
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l889
+ }
+ position++
+ l890:
+ {
+ position891, tokenIndex891 := position, tokenIndex
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l891
+ }
+ position++
+ goto l890
+ l891:
+ position, tokenIndex = position891, tokenIndex891
+ }
+ goto l888
+ l889:
+ position, tokenIndex = position889, tokenIndex889
+ }
+ }
+ l879:
+ goto l878
+
+ position, tokenIndex = position877, tokenIndex877
+ }
+ l878:
+ goto l875
+ l876:
+ position, tokenIndex = position875, tokenIndex875
+ if !_rules[ruleARMGOTLow12]() {
+ goto l892
+ }
+ goto l875
+ l892:
+ position, tokenIndex = position875, tokenIndex875
+ if !_rules[ruleLow12BitsSymbolRef]() {
goto l893
}
+ goto l875
+ l893:
+ position, tokenIndex = position875, tokenIndex875
+ if !_rules[ruleARMRegister]() {
+ goto l871
+ }
+ }
+ l875:
+ {
+ position894, tokenIndex894 := position, tokenIndex
+ if buffer[position] != rune(',') {
+ goto l894
+ }
position++
{
- position895, tokenIndex895 := position, tokenIndex
+ position896, tokenIndex896 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l895
+ goto l896
}
- goto l896
- l895:
- position, tokenIndex = position895, tokenIndex895
+ goto l897
+ l896:
+ position, tokenIndex = position896, tokenIndex896
}
- l896:
+ l897:
if !_rules[ruleARMConstantTweak]() {
- goto l893
+ goto l894
}
- goto l894
- l893:
- position, tokenIndex = position893, tokenIndex893
+ goto l895
+ l894:
+ position, tokenIndex = position894, tokenIndex894
}
- l894:
- goto l871
- l870:
- position, tokenIndex = position870, tokenIndex870
+ l895:
+ goto l872
+ l871:
+ position, tokenIndex = position871, tokenIndex871
}
- l871:
+ l872:
if buffer[position] != rune(']') {
- goto l868
+ goto l869
}
position++
{
- position897, tokenIndex897 := position, tokenIndex
+ position898, tokenIndex898 := position, tokenIndex
if !_rules[ruleARMPostincrement]() {
- goto l897
+ goto l898
}
- goto l898
- l897:
- position, tokenIndex = position897, tokenIndex897
+ goto l899
+ l898:
+ position, tokenIndex = position898, tokenIndex898
}
- l898:
- add(ruleARMBaseIndexScale, position869)
+ l899:
+ add(ruleARMBaseIndexScale, position870)
}
return true
- l868:
- position, tokenIndex = position868, tokenIndex868
+ l869:
+ position, tokenIndex = position869, tokenIndex869
return false
},
/* 54 ARMGOTLow12 <- <(':' ('g' / 'G') ('o' / 'O') ('t' / 'T') '_' ('l' / 'L') ('o' / 'O') '1' '2' ':' SymbolName)> */
func() bool {
- position899, tokenIndex899 := position, tokenIndex
+ position900, tokenIndex900 := position, tokenIndex
{
- position900 := position
+ position901 := position
if buffer[position] != rune(':') {
- goto l899
+ goto l900
}
position++
{
- position901, tokenIndex901 := position, tokenIndex
+ position902, tokenIndex902 := position, tokenIndex
if buffer[position] != rune('g') {
- goto l902
+ goto l903
}
position++
- goto l901
- l902:
- position, tokenIndex = position901, tokenIndex901
+ goto l902
+ l903:
+ position, tokenIndex = position902, tokenIndex902
if buffer[position] != rune('G') {
- goto l899
+ goto l900
}
position++
}
- l901:
+ l902:
{
- position903, tokenIndex903 := position, tokenIndex
+ position904, tokenIndex904 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l904
+ goto l905
}
position++
- goto l903
- l904:
- position, tokenIndex = position903, tokenIndex903
+ goto l904
+ l905:
+ position, tokenIndex = position904, tokenIndex904
if buffer[position] != rune('O') {
- goto l899
+ goto l900
}
position++
}
- l903:
+ l904:
{
- position905, tokenIndex905 := position, tokenIndex
+ position906, tokenIndex906 := position, tokenIndex
if buffer[position] != rune('t') {
- goto l906
+ goto l907
}
position++
- goto l905
- l906:
- position, tokenIndex = position905, tokenIndex905
+ goto l906
+ l907:
+ position, tokenIndex = position906, tokenIndex906
if buffer[position] != rune('T') {
- goto l899
+ goto l900
}
position++
}
- l905:
+ l906:
if buffer[position] != rune('_') {
- goto l899
+ goto l900
}
position++
{
- position907, tokenIndex907 := position, tokenIndex
+ position908, tokenIndex908 := position, tokenIndex
if buffer[position] != rune('l') {
- goto l908
+ goto l909
}
position++
- goto l907
- l908:
- position, tokenIndex = position907, tokenIndex907
+ goto l908
+ l909:
+ position, tokenIndex = position908, tokenIndex908
if buffer[position] != rune('L') {
- goto l899
+ goto l900
}
position++
}
- l907:
+ l908:
{
- position909, tokenIndex909 := position, tokenIndex
+ position910, tokenIndex910 := position, tokenIndex
if buffer[position] != rune('o') {
- goto l910
+ goto l911
}
position++
- goto l909
- l910:
- position, tokenIndex = position909, tokenIndex909
+ goto l910
+ l911:
+ position, tokenIndex = position910, tokenIndex910
if buffer[position] != rune('O') {
- goto l899
+ goto l900
}
position++
}
- l909:
+ l910:
if buffer[position] != rune('1') {
- goto l899
+ goto l900
}
position++
if buffer[position] != rune('2') {
- goto l899
+ goto l900
}
position++
if buffer[position] != rune(':') {
- goto l899
+ goto l900
}
position++
if !_rules[ruleSymbolName]() {
- goto l899
+ goto l900
}
- add(ruleARMGOTLow12, position900)
+ add(ruleARMGOTLow12, position901)
}
return true
- l899:
- position, tokenIndex = position899, tokenIndex899
+ l900:
+ position, tokenIndex = position900, tokenIndex900
return false
},
/* 55 ARMPostincrement <- <'!'> */
func() bool {
- position911, tokenIndex911 := position, tokenIndex
+ position912, tokenIndex912 := position, tokenIndex
{
- position912 := position
+ position913 := position
if buffer[position] != rune('!') {
- goto l911
+ goto l912
}
position++
- add(ruleARMPostincrement, position912)
+ add(ruleARMPostincrement, position913)
}
return true
- l911:
- position, tokenIndex = position911, tokenIndex911
+ l912:
+ position, tokenIndex = position912, tokenIndex912
return false
},
/* 56 BaseIndexScale <- <('(' RegisterOrConstant? WS? (',' WS? RegisterOrConstant WS? (',' [0-9]+)?)? ')')> */
func() bool {
- position913, tokenIndex913 := position, tokenIndex
+ position914, tokenIndex914 := position, tokenIndex
{
- position914 := position
+ position915 := position
if buffer[position] != rune('(') {
- goto l913
+ goto l914
}
position++
{
- position915, tokenIndex915 := position, tokenIndex
+ position916, tokenIndex916 := position, tokenIndex
if !_rules[ruleRegisterOrConstant]() {
- goto l915
+ goto l916
}
- goto l916
- l915:
- position, tokenIndex = position915, tokenIndex915
+ goto l917
+ l916:
+ position, tokenIndex = position916, tokenIndex916
}
- l916:
+ l917:
{
- position917, tokenIndex917 := position, tokenIndex
+ position918, tokenIndex918 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l917
+ goto l918
}
- goto l918
- l917:
- position, tokenIndex = position917, tokenIndex917
+ goto l919
+ l918:
+ position, tokenIndex = position918, tokenIndex918
}
- l918:
+ l919:
{
- position919, tokenIndex919 := position, tokenIndex
+ position920, tokenIndex920 := position, tokenIndex
if buffer[position] != rune(',') {
- goto l919
+ goto l920
}
position++
{
- position921, tokenIndex921 := position, tokenIndex
+ position922, tokenIndex922 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l921
+ goto l922
}
- goto l922
- l921:
- position, tokenIndex = position921, tokenIndex921
+ goto l923
+ l922:
+ position, tokenIndex = position922, tokenIndex922
}
- l922:
+ l923:
if !_rules[ruleRegisterOrConstant]() {
- goto l919
+ goto l920
}
{
- position923, tokenIndex923 := position, tokenIndex
+ position924, tokenIndex924 := position, tokenIndex
if !_rules[ruleWS]() {
- goto l923
+ goto l924
}
- goto l924
- l923:
- position, tokenIndex = position923, tokenIndex923
+ goto l925
+ l924:
+ position, tokenIndex = position924, tokenIndex924
}
- l924:
+ l925:
{
- position925, tokenIndex925 := position, tokenIndex
+ position926, tokenIndex926 := position, tokenIndex
if buffer[position] != rune(',') {
- goto l925
+ goto l926
}
position++
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l925
+ goto l926
}
position++
- l927:
+ l928:
{
- position928, tokenIndex928 := position, tokenIndex
+ position929, tokenIndex929 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l928
+ goto l929
}
position++
- goto l927
- l928:
- position, tokenIndex = position928, tokenIndex928
+ goto l928
+ l929:
+ position, tokenIndex = position929, tokenIndex929
}
- goto l926
- l925:
- position, tokenIndex = position925, tokenIndex925
+ goto l927
+ l926:
+ position, tokenIndex = position926, tokenIndex926
}
- l926:
- goto l920
- l919:
- position, tokenIndex = position919, tokenIndex919
+ l927:
+ goto l921
+ l920:
+ position, tokenIndex = position920, tokenIndex920
}
- l920:
+ l921:
if buffer[position] != rune(')') {
- goto l913
+ goto l914
}
position++
- add(ruleBaseIndexScale, position914)
+ add(ruleBaseIndexScale, position915)
}
return true
- l913:
- position, tokenIndex = position913, tokenIndex913
+ l914:
+ position, tokenIndex = position914, tokenIndex914
return false
},
/* 57 Operator <- <('+' / '-')> */
func() bool {
- position929, tokenIndex929 := position, tokenIndex
+ position930, tokenIndex930 := position, tokenIndex
{
- position930 := position
+ position931 := position
{
- position931, tokenIndex931 := position, tokenIndex
+ position932, tokenIndex932 := position, tokenIndex
if buffer[position] != rune('+') {
- goto l932
+ goto l933
}
position++
- goto l931
- l932:
- position, tokenIndex = position931, tokenIndex931
+ goto l932
+ l933:
+ position, tokenIndex = position932, tokenIndex932
if buffer[position] != rune('-') {
- goto l929
+ goto l930
}
position++
}
- l931:
- add(ruleOperator, position930)
+ l932:
+ add(ruleOperator, position931)
}
return true
- l929:
- position, tokenIndex = position929, tokenIndex929
+ l930:
+ position, tokenIndex = position930, tokenIndex930
return false
},
/* 58 Offset <- <('+'? '-'? (('0' ('b' / 'B') ('0' / '1')+) / ('0' ('x' / 'X') ([0-9] / [0-9] / ([a-f] / [A-F]))+) / [0-9]+))> */
func() bool {
- position933, tokenIndex933 := position, tokenIndex
+ position934, tokenIndex934 := position, tokenIndex
{
- position934 := position
+ position935 := position
{
- position935, tokenIndex935 := position, tokenIndex
+ position936, tokenIndex936 := position, tokenIndex
if buffer[position] != rune('+') {
- goto l935
+ goto l936
}
position++
- goto l936
- l935:
- position, tokenIndex = position935, tokenIndex935
+ goto l937
+ l936:
+ position, tokenIndex = position936, tokenIndex936
}
- l936:
+ l937:
{
- position937, tokenIndex937 := position, tokenIndex
+ position938, tokenIndex938 := position, tokenIndex
if buffer[position] != rune('-') {
- goto l937
+ goto l938
}
position++
- goto l938
- l937:
- position, tokenIndex = position937, tokenIndex937
+ goto l939
+ l938:
+ position, tokenIndex = position938, tokenIndex938
}
- l938:
+ l939:
{
- position939, tokenIndex939 := position, tokenIndex
+ position940, tokenIndex940 := position, tokenIndex
if buffer[position] != rune('0') {
- goto l940
+ goto l941
}
position++
{
- position941, tokenIndex941 := position, tokenIndex
+ position942, tokenIndex942 := position, tokenIndex
if buffer[position] != rune('b') {
- goto l942
+ goto l943
}
position++
- goto l941
- l942:
- position, tokenIndex = position941, tokenIndex941
+ goto l942
+ l943:
+ position, tokenIndex = position942, tokenIndex942
if buffer[position] != rune('B') {
- goto l940
+ goto l941
}
position++
}
- l941:
+ l942:
+ {
+ position946, tokenIndex946 := position, tokenIndex
+ if buffer[position] != rune('0') {
+ goto l947
+ }
+ position++
+ goto l946
+ l947:
+ position, tokenIndex = position946, tokenIndex946
+ if buffer[position] != rune('1') {
+ goto l941
+ }
+ position++
+ }
+ l946:
+ l944:
{
position945, tokenIndex945 := position, tokenIndex
- if buffer[position] != rune('0') {
- goto l946
- }
- position++
- goto l945
- l946:
- position, tokenIndex = position945, tokenIndex945
- if buffer[position] != rune('1') {
- goto l940
- }
- position++
- }
- l945:
- l943:
- {
- position944, tokenIndex944 := position, tokenIndex
{
- position947, tokenIndex947 := position, tokenIndex
+ position948, tokenIndex948 := position, tokenIndex
if buffer[position] != rune('0') {
- goto l948
+ goto l949
}
position++
- goto l947
- l948:
- position, tokenIndex = position947, tokenIndex947
+ goto l948
+ l949:
+ position, tokenIndex = position948, tokenIndex948
if buffer[position] != rune('1') {
- goto l944
+ goto l945
}
position++
}
- l947:
- goto l943
- l944:
- position, tokenIndex = position944, tokenIndex944
+ l948:
+ goto l944
+ l945:
+ position, tokenIndex = position945, tokenIndex945
}
- goto l939
- l940:
- position, tokenIndex = position939, tokenIndex939
+ goto l940
+ l941:
+ position, tokenIndex = position940, tokenIndex940
if buffer[position] != rune('0') {
- goto l949
+ goto l950
}
position++
{
- position950, tokenIndex950 := position, tokenIndex
+ position951, tokenIndex951 := position, tokenIndex
if buffer[position] != rune('x') {
- goto l951
+ goto l952
}
position++
- goto l950
- l951:
- position, tokenIndex = position950, tokenIndex950
+ goto l951
+ l952:
+ position, tokenIndex = position951, tokenIndex951
if buffer[position] != rune('X') {
- goto l949
+ goto l950
}
position++
}
- l950:
+ l951:
{
- position954, tokenIndex954 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l955
- }
- position++
- goto l954
- l955:
- position, tokenIndex = position954, tokenIndex954
+ position955, tokenIndex955 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l956
}
position++
- goto l954
+ goto l955
l956:
- position, tokenIndex = position954, tokenIndex954
+ position, tokenIndex = position955, tokenIndex955
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l957
+ }
+ position++
+ goto l955
+ l957:
+ position, tokenIndex = position955, tokenIndex955
{
- position957, tokenIndex957 := position, tokenIndex
+ position958, tokenIndex958 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('f') {
- goto l958
+ goto l959
}
position++
- goto l957
- l958:
- position, tokenIndex = position957, tokenIndex957
+ goto l958
+ l959:
+ position, tokenIndex = position958, tokenIndex958
if c := buffer[position]; c < rune('A') || c > rune('F') {
- goto l949
+ goto l950
}
position++
}
- l957:
+ l958:
}
- l954:
- l952:
+ l955:
+ l953:
{
- position953, tokenIndex953 := position, tokenIndex
+ position954, tokenIndex954 := position, tokenIndex
{
- position959, tokenIndex959 := position, tokenIndex
- if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l960
- }
- position++
- goto l959
- l960:
- position, tokenIndex = position959, tokenIndex959
+ position960, tokenIndex960 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
goto l961
}
position++
- goto l959
+ goto l960
l961:
- position, tokenIndex = position959, tokenIndex959
+ position, tokenIndex = position960, tokenIndex960
+ if c := buffer[position]; c < rune('0') || c > rune('9') {
+ goto l962
+ }
+ position++
+ goto l960
+ l962:
+ position, tokenIndex = position960, tokenIndex960
{
- position962, tokenIndex962 := position, tokenIndex
+ position963, tokenIndex963 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('f') {
- goto l963
+ goto l964
}
position++
- goto l962
- l963:
- position, tokenIndex = position962, tokenIndex962
+ goto l963
+ l964:
+ position, tokenIndex = position963, tokenIndex963
if c := buffer[position]; c < rune('A') || c > rune('F') {
- goto l953
+ goto l954
}
position++
}
- l962:
+ l963:
}
- l959:
- goto l952
- l953:
- position, tokenIndex = position953, tokenIndex953
+ l960:
+ goto l953
+ l954:
+ position, tokenIndex = position954, tokenIndex954
}
- goto l939
- l949:
- position, tokenIndex = position939, tokenIndex939
+ goto l940
+ l950:
+ position, tokenIndex = position940, tokenIndex940
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l933
+ goto l934
}
position++
- l964:
+ l965:
{
- position965, tokenIndex965 := position, tokenIndex
+ position966, tokenIndex966 := position, tokenIndex
if c := buffer[position]; c < rune('0') || c > rune('9') {
- goto l965
+ goto l966
}
position++
- goto l964
- l965:
- position, tokenIndex = position965, tokenIndex965
+ goto l965
+ l966:
+ position, tokenIndex = position966, tokenIndex966
}
}
- l939:
- add(ruleOffset, position934)
+ l940:
+ add(ruleOffset, position935)
}
return true
- l933:
- position, tokenIndex = position933, tokenIndex933
+ l934:
+ position, tokenIndex = position934, tokenIndex934
return false
},
/* 59 Section <- <([a-z] / [A-Z] / '@')+> */
func() bool {
- position966, tokenIndex966 := position, tokenIndex
+ position967, tokenIndex967 := position, tokenIndex
{
- position967 := position
+ position968 := position
{
- position970, tokenIndex970 := position, tokenIndex
+ position971, tokenIndex971 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l971
- }
- position++
- goto l970
- l971:
- position, tokenIndex = position970, tokenIndex970
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l972
}
position++
- goto l970
+ goto l971
l972:
- position, tokenIndex = position970, tokenIndex970
+ position, tokenIndex = position971, tokenIndex971
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l973
+ }
+ position++
+ goto l971
+ l973:
+ position, tokenIndex = position971, tokenIndex971
if buffer[position] != rune('@') {
- goto l966
+ goto l967
}
position++
}
- l970:
- l968:
+ l971:
+ l969:
{
- position969, tokenIndex969 := position, tokenIndex
+ position970, tokenIndex970 := position, tokenIndex
{
- position973, tokenIndex973 := position, tokenIndex
+ position974, tokenIndex974 := position, tokenIndex
if c := buffer[position]; c < rune('a') || c > rune('z') {
- goto l974
- }
- position++
- goto l973
- l974:
- position, tokenIndex = position973, tokenIndex973
- if c := buffer[position]; c < rune('A') || c > rune('Z') {
goto l975
}
position++
- goto l973
+ goto l974
l975:
- position, tokenIndex = position973, tokenIndex973
+ position, tokenIndex = position974, tokenIndex974
+ if c := buffer[position]; c < rune('A') || c > rune('Z') {
+ goto l976
+ }
+ position++
+ goto l974
+ l976:
+ position, tokenIndex = position974, tokenIndex974
if buffer[position] != rune('@') {
- goto l969
+ goto l970
}
position++
}
- l973:
- goto l968
- l969:
- position, tokenIndex = position969, tokenIndex969
+ l974:
+ goto l969
+ l970:
+ position, tokenIndex = position970, tokenIndex970
}
- add(ruleSection, position967)
+ add(ruleSection, position968)
}
return true
- l966:
- position, tokenIndex = position966, tokenIndex966
+ l967:
+ position, tokenIndex = position967, tokenIndex967
return false
},
/* 60 SegmentRegister <- <('%' ([c-g] / 's') ('s' ':'))> */
func() bool {
- position976, tokenIndex976 := position, tokenIndex
+ position977, tokenIndex977 := position, tokenIndex
{
- position977 := position
+ position978 := position
if buffer[position] != rune('%') {
- goto l976
+ goto l977
}
position++
{
- position978, tokenIndex978 := position, tokenIndex
+ position979, tokenIndex979 := position, tokenIndex
if c := buffer[position]; c < rune('c') || c > rune('g') {
- goto l979
+ goto l980
}
position++
- goto l978
- l979:
- position, tokenIndex = position978, tokenIndex978
+ goto l979
+ l980:
+ position, tokenIndex = position979, tokenIndex979
if buffer[position] != rune('s') {
- goto l976
+ goto l977
}
position++
}
- l978:
+ l979:
if buffer[position] != rune('s') {
- goto l976
+ goto l977
}
position++
if buffer[position] != rune(':') {
- goto l976
+ goto l977
}
position++
- add(ruleSegmentRegister, position977)
+ add(ruleSegmentRegister, position978)
}
return true
- l976:
- position, tokenIndex = position976, tokenIndex976
+ l977:
+ position, tokenIndex = position977, tokenIndex977
return false
},
}
diff --git a/util/fipstools/test_fips.cc b/util/fipstools/test_fips.cc
index 2411248..68024b6 100644
--- a/util/fipstools/test_fips.cc
+++ b/util/fipstools/test_fips.cc
@@ -20,6 +20,7 @@
#include <openssl/aead.h>
#include <openssl/aes.h>
#include <openssl/bn.h>
+#include <openssl/bytestring.h>
#include <openssl/crypto.h>
#include <openssl/ctrdrbg.h>
#include <openssl/des.h>
@@ -33,6 +34,7 @@
#include <openssl/rsa.h>
#include <openssl/sha.h>
+#include "../../crypto/fipsmodule/bcm_interface.h"
#include "../../crypto/fipsmodule/rand/internal.h"
#include "../../crypto/fipsmodule/tls/internal.h"
#include "../../crypto/internal.h"
@@ -406,6 +408,44 @@
printf(" got ");
hexdump(dh_result, sizeof(dh_result));
+ /* ML-KEM */
+ printf("About to generate ML-KEM key:\n");
+ auto mlkem_public_key_bytes =
+ std::make_unique<uint8_t[]>(BCM_MLKEM768_PUBLIC_KEY_BYTES);
+ auto mlkem_private_key = std::make_unique<BCM_mlkem768_private_key>();
+ if (BCM_mlkem768_generate_key_fips(mlkem_public_key_bytes.get(), nullptr,
+ mlkem_private_key.get()) !=
+ bcm_status::approved) {
+ fprintf(stderr, "ML-KEM generation failed");
+ return 0;
+ }
+ printf(" got ");
+ hexdump(mlkem_public_key_bytes.get(), BCM_MLKEM768_PUBLIC_KEY_BYTES);
+
+ printf("About to do ML-KEM encap:\n");
+ auto mlkem_ciphertext = std::make_unique<uint8_t[]>(BCM_MLKEM768_CIPHERTEXT_BYTES);
+ uint8_t mlkem_shared_secret[BCM_MLKEM_SHARED_SECRET_BYTES];
+ auto mlkem_public_key = std::make_unique<BCM_mlkem768_public_key>();
+ BCM_mlkem768_public_from_private(mlkem_public_key.get(),
+ mlkem_private_key.get());
+ if (BCM_mlkem768_encap(mlkem_ciphertext.get(), mlkem_shared_secret,
+ mlkem_public_key.get()) != bcm_infallible::approved) {
+ fprintf(stderr, "ML-KEM encap failed");
+ return 0;
+ }
+ printf(" got ");
+ hexdump(mlkem_shared_secret, sizeof(mlkem_shared_secret));
+
+ printf("About to do ML-KEM decap:\n");
+ if (BCM_mlkem768_decap(mlkem_shared_secret, mlkem_ciphertext.get(),
+ BCM_MLKEM768_CIPHERTEXT_BYTES,
+ mlkem_private_key.get()) != bcm_status::approved) {
+ fprintf(stderr, "ML-KEM decap failed");
+ return 0;
+ }
+ printf(" got ");
+ hexdump(mlkem_shared_secret, sizeof(mlkem_shared_secret));
+
printf("PASS\n");
return 1;
#endif // !defined(BORINGSSL_FIPS)