> Matthew Malcomson <matthew.malcom...@arm.com> writes: >> @@ -326,16 +326,18 @@ int opt_ext_cmp (const void* a, const void* b) >> turns on as a dependency. As an example +dotprod turns on FL_DOTPROD >> and >> FL_SIMD. As such the set of bits represented by this option is >> {FL_DOTPROD, FL_SIMD}. */ >> - unsigned long total_flags_a = opt_a->flag_canonical & opt_a->flags_on; >> - unsigned long total_flags_b = opt_b->flag_canonical & opt_b->flags_on; >> + uint64_t total_flags_a = opt_a->flag_canonical & opt_a->flags_on; >> + uint64_t total_flags_b = opt_b->flag_canonical & opt_b->flags_on; >> int popcnt_a = popcount_hwi ((HOST_WIDE_INT)total_flags_a); >> int popcnt_b = popcount_hwi ((HOST_WIDE_INT)total_flags_b); >> int order = popcnt_b - popcnt_a; >> >> /* If they have the same amount of bits set, give it a more >> - deterministic ordering by using the value of the bits themselves. */ >> + deterministic ordering by using the value of the bits themselves. >> + Since the value of the bits themselves can be larger than that >> + representable by an integer, we manually truncate the value. */ >> if (order == 0) >> - return total_flags_b - total_flags_a; >> + return (total_flags_b - total_flags_a) & INT_MAX; > > This means that we return 1 if the flags differ in the low 31 bits > and 0 otherwise. I think we should use: > > return total_flags_a < total_flags_b ? 1 : -1; >
I've used the below to handle equal flags (without the check for equal flags qsort complains about the function not being antisymmetric). if (order == 0) { if (total_flags_a == total_flags_b) return 0; return total_flags_a < total_flags_b ? 1 : -1; } >> +/* Enabling "bitperm" also enables "sve2", "sve", "fp", "fp16" and "simd". >> + Disabling "bitperm" just disables "bitperm". */ >> +AARCH64_OPT_EXTENSION("bitperm", AARCH64_FL_SVE2BITPERM, AARCH64_FL_SVE | >> AARCH64_FL_SVE2 | AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16, 0, >> false, "") >> + > > Very minor, sorry, but I think it'd be more readable to separate > SVE2 and things like AES with "_". > > The new features need documenting in the aarch64-feature-modifiers > section of doc/invoke.texi. Done. Patch attached has been bootstrapped and regtested on aarch64, the documentation manually checked with `info`, and command line arguments have been checked in the same way as the previous patch. > > Thanks, > Richard gcc/ChangeLog: 2019-05-15 Matthew Malcomson <matthew.malcom...@arm.com> * common/config/aarch64/aarch64-common.c (struct aarch64_option_extension, struct processor_name_to_arch, struct arch_to_arch_name, aarch64_parse_extension, opt_ext_cmp, aarch64_contains_opt, aarch64_get_extension_string_for_isa_flags): Change type of variables storing flags to uint64_t. * config/aarch64/aarch64-option-extensions.def (sve2, sve2-sm4, sve2-aes, sve2-sha3, bitperm): New optional SVE2 extension flags. * config/aarch64/aarch64.c (struct processor, aarch64_parse_arch, aarch64_parse_cpu, aarch64_validate_mcpu, aarch64_validate_march, aarch64_override_options, aarch64_option_print, aarch64_handle_attr_isa_flags, aarch64_declare_function_name, aarch64_start_file): Make flag variables uint64_t. * config/aarch64/aarch64.h (AARCH64_FL_SVE2, AARCH64_FL_SVE2_AES, AARCH64_FL_SVE2_SM4, AARCH64_FL_SVE2_SHA3, AARCH64_FL_SVE2_BITPERM): New macro feature flags. * config/aarch64/aarch64.opt (aarch64_isa_flags): Make uint64_t. * config/aarch64/driver-aarch64.c (struct aarch64_arch_extension, struct aarch64_core_data, struct aarch64_arch_driver_info, host_detect_local_cpu): Make flag variables uint64_t. * doc/invoke.texi: Add documentation for new arguments. ############### Attachment also inlined for ease of reply ############### diff --git a/gcc/common/config/aarch64/aarch64-common.c b/gcc/common/config/aarch64/aarch64-common.c index bab3ab3fa36c66906d1b4367e2b7bfb1bf6aa08c..0a77a42005316b921b0aaeac95366fde02eb57bf 100644 --- a/gcc/common/config/aarch64/aarch64-common.c +++ b/gcc/common/config/aarch64/aarch64-common.c @@ -170,9 +170,9 @@ aarch64_handle_option (struct gcc_options *opts, struct aarch64_option_extension { const char *const name; - const unsigned long flag_canonical; - const unsigned long flags_on; - const unsigned long flags_off; + const uint64_t flag_canonical; + const uint64_t flags_on; + const uint64_t flags_off; const bool is_synthetic; }; @@ -201,14 +201,14 @@ struct processor_name_to_arch { const std::string processor_name; const enum aarch64_arch arch; - const unsigned long flags; + const uint64_t flags; }; struct arch_to_arch_name { const enum aarch64_arch arch; const std::string arch_name; - const unsigned long flags; + const uint64_t flags; }; /* Map processor names to the architecture revision they implement and @@ -238,7 +238,7 @@ static const struct arch_to_arch_name all_architectures[] = a copy of the string is created and stored to INVALID_EXTENSION. */ enum aarch64_parse_opt_result -aarch64_parse_extension (const char *str, unsigned long *isa_flags, +aarch64_parse_extension (const char *str, uint64_t *isa_flags, std::string *invalid_extension) { /* The extension string is parsed left to right. */ @@ -326,16 +326,22 @@ int opt_ext_cmp (const void* a, const void* b) turns on as a dependency. As an example +dotprod turns on FL_DOTPROD and FL_SIMD. As such the set of bits represented by this option is {FL_DOTPROD, FL_SIMD}. */ - unsigned long total_flags_a = opt_a->flag_canonical & opt_a->flags_on; - unsigned long total_flags_b = opt_b->flag_canonical & opt_b->flags_on; + uint64_t total_flags_a = opt_a->flag_canonical & opt_a->flags_on; + uint64_t total_flags_b = opt_b->flag_canonical & opt_b->flags_on; int popcnt_a = popcount_hwi ((HOST_WIDE_INT)total_flags_a); int popcnt_b = popcount_hwi ((HOST_WIDE_INT)total_flags_b); int order = popcnt_b - popcnt_a; /* If they have the same amount of bits set, give it a more - deterministic ordering by using the value of the bits themselves. */ + deterministic ordering by using the value of the bits themselves. + Since the value of the bits themselves can be larger than that + representable by an integer, we manually truncate the value. */ if (order == 0) - return total_flags_b - total_flags_a; + { + if (total_flags_a == total_flags_b) + return 0; + return total_flags_a < total_flags_b ? 1 : -1; + } return order; } @@ -373,9 +379,9 @@ aarch64_option_init_struct (struct gcc_options *opts ATTRIBUTE_UNUSED) */ static bool -aarch64_contains_opt (unsigned long isa_flag_bits, opt_ext *opt) +aarch64_contains_opt (uint64_t isa_flag_bits, opt_ext *opt) { - unsigned long flags_check + uint64_t flags_check = opt->is_synthetic ? opt->flags_on : opt->flag_canonical; return (isa_flag_bits & flags_check) == flags_check; @@ -388,13 +394,13 @@ aarch64_contains_opt (unsigned long isa_flag_bits, opt_ext *opt) that all the "+" flags come before the "+no" flags. */ std::string -aarch64_get_extension_string_for_isa_flags (unsigned long isa_flags, - unsigned long default_arch_flags) +aarch64_get_extension_string_for_isa_flags (uint64_t isa_flags, + uint64_t default_arch_flags) { const struct aarch64_option_extension *opt = NULL; std::string outstr = ""; - unsigned long isa_flag_bits = isa_flags; + uint64_t isa_flag_bits = isa_flags; /* Pass one: Minimize the search space by reducing the set of options to the smallest set that still turns on the same features as before in diff --git a/gcc/config/aarch64/aarch64-option-extensions.def b/gcc/config/aarch64/aarch64-option-extensions.def index 53dcd03590d2e4eebac83f03039c442fca7f5d5d..c023bca5c511c132575529b1d154f4a798ce10f9 100644 --- a/gcc/config/aarch64/aarch64-option-extensions.def +++ b/gcc/config/aarch64/aarch64-option-extensions.def @@ -57,17 +57,20 @@ /* Enabling "fp" just enables "fp". Disabling "fp" also disables "simd", "crypto", "fp16", "aes", "sha2", - "sha3", sm3/sm4 and "sve". */ -AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO | AARCH64_FL_F16 | AARCH64_FL_AES | AARCH64_FL_SHA2 | AARCH64_FL_SHA3 | AARCH64_FL_SM4 | AARCH64_FL_SVE, false, "fp") + "sha3", sm3/sm4, "sve", "sve2-sm4", "sve2-sha3", "sve2-aes", "bitperm" and + "sve2". */ +AARCH64_OPT_EXTENSION("fp", AARCH64_FL_FP, 0, AARCH64_FL_SIMD | AARCH64_FL_CRYPTO | AARCH64_FL_F16 | AARCH64_FL_AES | AARCH64_FL_SHA2 | AARCH64_FL_SHA3 | AARCH64_FL_SM4 | AARCH64_FL_SVE | AARCH64_FL_SVE2 | AARCH64_FL_SVE2_AES | AARCH64_FL_SVE2_SHA3 | AARCH64_FL_SVE2_SM4 | AARCH64_FL_SVE2_BITPERM, false, "fp") /* Enabling "simd" also enables "fp". Disabling "simd" also disables "crypto", "dotprod", "aes", "sha2", "sha3", - "sm3/sm4" and "sve". */ -AARCH64_OPT_EXTENSION("simd", AARCH64_FL_SIMD, AARCH64_FL_FP, AARCH64_FL_CRYPTO | AARCH64_FL_DOTPROD | AARCH64_FL_AES | AARCH64_FL_SHA2 | AARCH64_FL_SHA3 | AARCH64_FL_SM4 | AARCH64_FL_SVE, false, "asimd") + "sm3/sm4", "sve", "sve2-sm4", "sve2-sha3", "sve2-aes", "bitperm" and "sve2". + */ +AARCH64_OPT_EXTENSION("simd", AARCH64_FL_SIMD, AARCH64_FL_FP, AARCH64_FL_CRYPTO | AARCH64_FL_DOTPROD | AARCH64_FL_AES | AARCH64_FL_SHA2 | AARCH64_FL_SHA3 | AARCH64_FL_SM4 | AARCH64_FL_SVE | AARCH64_FL_SVE2 | AARCH64_FL_SVE2_AES | AARCH64_FL_SVE2_SHA3 | AARCH64_FL_SVE2_SM4 | AARCH64_FL_SVE2_BITPERM, false, "asimd") /* Enabling "crypto" also enables "fp", "simd", "aes" and "sha2". - Disabling "crypto" disables "crypto", "aes", "sha2", "sha3" and "sm3/sm4". */ -AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO, AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_AES | AARCH64_FL_SHA2, AARCH64_FL_AES | AARCH64_FL_SHA2 |AARCH64_FL_SHA3 | AARCH64_FL_SM4, true, "aes pmull sha1 sha2") + Disabling "crypto" disables "crypto", "aes", "sha2", "sha3" and "sm3/sm4", + "sve2-aes", "sve2-sm4", "sve2-sha3". */ +AARCH64_OPT_EXTENSION("crypto", AARCH64_FL_CRYPTO, AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_AES | AARCH64_FL_SHA2, AARCH64_FL_AES | AARCH64_FL_SHA2 | AARCH64_FL_SHA3 | AARCH64_FL_SM4 | AARCH64_FL_SVE2_AES | AARCH64_FL_SVE2_SHA3 | AARCH64_FL_SVE2_SM4, true, "aes pmull sha1 sha2") /* Enabling or disabling "crc" only changes "crc". */ AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, 0, 0, false, "crc32") @@ -76,8 +79,9 @@ AARCH64_OPT_EXTENSION("crc", AARCH64_FL_CRC, 0, 0, false, "crc32") AARCH64_OPT_EXTENSION("lse", AARCH64_FL_LSE, 0, 0, false, "atomics") /* Enabling "fp16" also enables "fp". - Disabling "fp16" disables "fp16", "fp16fml" and "sve". */ -AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, AARCH64_FL_F16FML | AARCH64_FL_SVE, false, "fphp asimdhp") + Disabling "fp16" disables "fp16", "fp16fml", "sve", "sve2-sm4", "sve2-sha3", + "sve2-aes", "bitperm" and "sve2". */ +AARCH64_OPT_EXTENSION("fp16", AARCH64_FL_F16, AARCH64_FL_FP, AARCH64_FL_F16FML | AARCH64_FL_SVE | AARCH64_FL_SVE2 | AARCH64_FL_SVE2_AES | AARCH64_FL_SVE2_SHA3 | AARCH64_FL_SVE2_SM4 | AARCH64_FL_SVE2_BITPERM, false, "fphp asimdhp") /* Enabling or disabling "rcpc" only changes "rcpc". */ AARCH64_OPT_EXTENSION("rcpc", AARCH64_FL_RCPC, 0, 0, false, "lrcpc") @@ -91,28 +95,29 @@ AARCH64_OPT_EXTENSION("rdma", AARCH64_FL_RDMA, AARCH64_FL_FP | AARCH64_FL_SIMD, AARCH64_OPT_EXTENSION("dotprod", AARCH64_FL_DOTPROD, AARCH64_FL_SIMD, 0, false, "asimddp") /* Enabling "aes" also enables "simd". - Disabling "aes" just disables "aes". */ -AARCH64_OPT_EXTENSION("aes", AARCH64_FL_AES, AARCH64_FL_SIMD, 0, false, "aes") + Disabling "aes" disables "aes" and "sve2-aes'. */ +AARCH64_OPT_EXTENSION("aes", AARCH64_FL_AES, AARCH64_FL_SIMD, AARCH64_FL_SVE2_AES, false, "aes") /* Enabling "sha2" also enables "simd". Disabling "sha2" just disables "sha2". */ AARCH64_OPT_EXTENSION("sha2", AARCH64_FL_SHA2, AARCH64_FL_SIMD, 0, false, "sha1 sha2") /* Enabling "sha3" enables "simd" and "sha2". - Disabling "sha3" just disables "sha3". */ -AARCH64_OPT_EXTENSION("sha3", AARCH64_FL_SHA3, AARCH64_FL_SIMD | AARCH64_FL_SHA2, 0, false, "sha3 sha512") + Disabling "sha3" disables "sha3" and "sve2-sha3". */ +AARCH64_OPT_EXTENSION("sha3", AARCH64_FL_SHA3, AARCH64_FL_SIMD | AARCH64_FL_SHA2, AARCH64_FL_SVE2_SHA3, false, "sha3 sha512") /* Enabling "sm4" also enables "simd". - Disabling "sm4" just disables "sm4". */ -AARCH64_OPT_EXTENSION("sm4", AARCH64_FL_SM4, AARCH64_FL_SIMD, 0, false, "sm3 sm4") + Disabling "sm4" disables "sm4" and "sve2-sm4". */ +AARCH64_OPT_EXTENSION("sm4", AARCH64_FL_SM4, AARCH64_FL_SIMD, AARCH64_FL_SVE2_SM4, false, "sm3 sm4") /* Enabling "fp16fml" also enables "fp" and "fp16". Disabling "fp16fml" just disables "fp16fml". */ AARCH64_OPT_EXTENSION("fp16fml", AARCH64_FL_F16FML, AARCH64_FL_FP | AARCH64_FL_F16, 0, false, "asimdfml") /* Enabling "sve" also enables "fp16", "fp" and "simd". - Disabling "sve" just disables "sve". */ -AARCH64_OPT_EXTENSION("sve", AARCH64_FL_SVE, AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16, 0, false, "sve") + Disabling "sve" disables "sve", "sve2", "bitperm", "sve2-sha3", "sve2-sm4" and + "sve2-aes". */ +AARCH64_OPT_EXTENSION("sve", AARCH64_FL_SVE, AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16, AARCH64_FL_SVE2 | AARCH64_FL_SVE2_AES | AARCH64_FL_SVE2_SHA3 | AARCH64_FL_SVE2_SM4 | AARCH64_FL_SVE2_BITPERM, false, "sve") /* Enabling/Disabling "profile" does not enable/disable any other feature. */ AARCH64_OPT_EXTENSION("profile", AARCH64_FL_PROFILE, 0, 0, false, "") @@ -132,4 +137,25 @@ AARCH64_OPT_EXTENSION("ssbs", AARCH64_FL_SSBS, 0, 0, false, "") /* Enabling/Disabling "predres" only changes "predres". */ AARCH64_OPT_EXTENSION("predres", AARCH64_FL_PREDRES, 0, 0, false, "") +/* Enabling "sve2" also enables "sve", "fp16", "fp", and "simd". + Disabling "sve2" disables "sve2", "sve2-sm4", "sve2-sha3", "sve2-aes", and + "bitperm". */ +AARCH64_OPT_EXTENSION("sve2", AARCH64_FL_SVE2, AARCH64_FL_SVE | AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16, AARCH64_FL_SVE2_SM4 | AARCH64_FL_SVE2_AES | AARCH64_FL_SVE2_SHA3 | AARCH64_FL_SVE2_BITPERM, false, "") + +/* Enabling "sve2-sm4" also enables "sve2", "sve", "fp", "fp16" "simd", and + "sm4". Disabling "sve2-sm4" just disables "sve2-sm4". */ +AARCH64_OPT_EXTENSION("sve2-sm4", AARCH64_FL_SVE2_SM4, AARCH64_FL_SVE | AARCH64_FL_SVE2 | AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16 | AARCH64_FL_SM4, 0, false, "") + +/* Enabling "sve2-aes" also enables "sve2", "sve", "fp", "fp16", "simd", and + "aes". Disabling "sve2-aes" just disables "sve2-aes". */ +AARCH64_OPT_EXTENSION("sve2-aes", AARCH64_FL_SVE2_AES, AARCH64_FL_SVE | AARCH64_FL_SVE2 | AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16 | AARCH64_FL_AES, 0, false, "") + +/* Enabling "sve2-sha3" also enables "sve2", "sve", "fp", "fp16", "simd", and + "sha3". Disabling "sve2-sha3" just disables "sve2-sha3". */ +AARCH64_OPT_EXTENSION("sve2-sha3", AARCH64_FL_SVE2_SHA3, AARCH64_FL_SVE | AARCH64_FL_SVE2 | AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16 | AARCH64_FL_SHA3, 0, false, "") + +/* Enabling "bitperm" also enables "sve2", "sve", "fp", "fp16" and "simd". + Disabling "bitperm" just disables "bitperm". */ +AARCH64_OPT_EXTENSION("bitperm", AARCH64_FL_SVE2_BITPERM, AARCH64_FL_SVE | AARCH64_FL_SVE2 | AARCH64_FL_FP | AARCH64_FL_SIMD | AARCH64_FL_F16, 0, false, "") + #undef AARCH64_OPT_EXTENSION diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h index 7bd3bf525dd71347a12ed9cd2227bc2cd6e9cc55..be6981889ab6a796183ef1fd96c3af99243f4466 100644 --- a/gcc/config/aarch64/aarch64.h +++ b/gcc/config/aarch64/aarch64.h @@ -192,6 +192,13 @@ extern unsigned aarch64_architecture_version; /* Execution and Data Prediction Restriction instructions supported. */ #define AARCH64_FL_PREDRES (1 << 27) +/* SVE2 instruction supported. */ +#define AARCH64_FL_SVE2 (1 << 28) +#define AARCH64_FL_SVE2_AES (1 << 29) +#define AARCH64_FL_SVE2_SM4 (1 << 30) +#define AARCH64_FL_SVE2_SHA3 (1ULL << 31) +#define AARCH64_FL_SVE2_BITPERM (1ULL << 32) + /* Has FP and SIMD. */ #define AARCH64_FL_FPSIMD (AARCH64_FL_FP | AARCH64_FL_SIMD) diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c index 1f904671c6909573290fa97858b7c933b431d8f2..a22f4976dd0ba554fc64caf994b303e1f3e70012 100644 --- a/gcc/config/aarch64/aarch64.c +++ b/gcc/config/aarch64/aarch64.c @@ -177,7 +177,7 @@ unsigned aarch64_architecture_version; enum aarch64_processor aarch64_tune = cortexa53; /* Mask to specify which instruction scheduling options should be used. */ -unsigned long aarch64_tune_flags = 0; +uint64_t aarch64_tune_flags = 0; /* Global flag for PC relative loads. */ bool aarch64_pcrelative_literal_loads; @@ -1139,7 +1139,7 @@ struct processor enum aarch64_processor sched_core; enum aarch64_arch arch; unsigned architecture_version; - const unsigned long flags; + const uint64_t flags; const struct tune_params *const tune; }; @@ -11039,7 +11039,7 @@ static void initialize_aarch64_code_model (struct gcc_options *); static enum aarch64_parse_opt_result aarch64_parse_arch (const char *to_parse, const struct processor **res, - unsigned long *isa_flags, std::string *invalid_extension) + uint64_t *isa_flags, std::string *invalid_extension) { const char *ext; const struct processor *arch; @@ -11062,7 +11062,7 @@ aarch64_parse_arch (const char *to_parse, const struct processor **res, if (strlen (arch->name) == len && strncmp (arch->name, to_parse, len) == 0) { - unsigned long isa_temp = arch->flags; + uint64_t isa_temp = arch->flags; if (ext != NULL) { @@ -11094,7 +11094,7 @@ aarch64_parse_arch (const char *to_parse, const struct processor **res, static enum aarch64_parse_opt_result aarch64_parse_cpu (const char *to_parse, const struct processor **res, - unsigned long *isa_flags, std::string *invalid_extension) + uint64_t *isa_flags, std::string *invalid_extension) { const char *ext; const struct processor *cpu; @@ -11116,7 +11116,7 @@ aarch64_parse_cpu (const char *to_parse, const struct processor **res, { if (strlen (cpu->name) == len && strncmp (cpu->name, to_parse, len) == 0) { - unsigned long isa_temp = cpu->flags; + uint64_t isa_temp = cpu->flags; if (ext != NULL) @@ -11701,7 +11701,7 @@ aarch64_print_hint_for_extensions (const std::string &str) static bool aarch64_validate_mcpu (const char *str, const struct processor **res, - unsigned long *isa_flags) + uint64_t *isa_flags) { std::string invalid_extension; enum aarch64_parse_opt_result parse_res @@ -11842,7 +11842,7 @@ aarch64_validate_mbranch_protection (const char *const_str) static bool aarch64_validate_march (const char *str, const struct processor **res, - unsigned long *isa_flags) + uint64_t *isa_flags) { std::string invalid_extension; enum aarch64_parse_opt_result parse_res @@ -11957,8 +11957,8 @@ aarch64_convert_sve_vector_bits (aarch64_sve_vector_bits_enum value) static void aarch64_override_options (void) { - unsigned long cpu_isa = 0; - unsigned long arch_isa = 0; + uint64_t cpu_isa = 0; + uint64_t arch_isa = 0; aarch64_isa_flags = 0; bool valid_cpu = true; @@ -12198,7 +12198,7 @@ aarch64_option_print (FILE *file, int indent, struct cl_target_option *ptr) { const struct processor *cpu = aarch64_get_tune_cpu (ptr->x_explicit_tune_core); - unsigned long isa_flags = ptr->x_aarch64_isa_flags; + uint64_t isa_flags = ptr->x_aarch64_isa_flags; const struct processor *arch = aarch64_get_arch (ptr->x_explicit_arch); std::string extension = aarch64_get_extension_string_for_isa_flags (isa_flags, arch->flags); @@ -12451,7 +12451,7 @@ static bool aarch64_handle_attr_isa_flags (char *str) { enum aarch64_parse_opt_result parse_res; - unsigned long isa_flags = aarch64_isa_flags; + uint64_t isa_flags = aarch64_isa_flags; /* We allow "+nothing" in the beginning to clear out all architectural features if the user wants to handpick specific features. */ @@ -15295,7 +15295,7 @@ aarch64_declare_function_name (FILE *stream, const char* name, const struct processor *this_arch = aarch64_get_arch (targ_options->x_explicit_arch); - unsigned long isa_flags = targ_options->x_aarch64_isa_flags; + uint64_t isa_flags = targ_options->x_aarch64_isa_flags; std::string extension = aarch64_get_extension_string_for_isa_flags (isa_flags, this_arch->flags); @@ -15336,7 +15336,7 @@ aarch64_start_file (void) const struct processor *default_arch = aarch64_get_arch (default_options->x_explicit_arch); - unsigned long default_isa_flags = default_options->x_aarch64_isa_flags; + uint64_t default_isa_flags = default_options->x_aarch64_isa_flags; std::string extension = aarch64_get_extension_string_for_isa_flags (default_isa_flags, default_arch->flags); diff --git a/gcc/config/aarch64/aarch64.opt b/gcc/config/aarch64/aarch64.opt index 7719c3b635242642ad1975721e8699d84f359eea..2c8b22c3b09a6000dc79913586dcaa00b80b50b9 100644 --- a/gcc/config/aarch64/aarch64.opt +++ b/gcc/config/aarch64/aarch64.opt @@ -31,7 +31,7 @@ TargetSave const char *x_aarch64_override_tune_string TargetVariable -unsigned long aarch64_isa_flags = 0 +uint64_t aarch64_isa_flags = 0 TargetVariable unsigned aarch64_enable_bti = 2 diff --git a/gcc/config/aarch64/driver-aarch64.c b/gcc/config/aarch64/driver-aarch64.c index 6f16775f47d44288c45d1bbf2cc1b59dc08528ac..ef4f183524868b3b1ea444a2f132ac63d1235c3a 100644 --- a/gcc/config/aarch64/driver-aarch64.c +++ b/gcc/config/aarch64/driver-aarch64.c @@ -32,7 +32,7 @@ std::string aarch64_get_extension_string_for_isa_flags (unsigned long, struct aarch64_arch_extension { const char *ext; - unsigned int flag; + uint64_t flag; const char *feat_string; }; @@ -52,7 +52,7 @@ struct aarch64_core_data unsigned char implementer_id; /* Exactly 8 bits */ unsigned int part_no; /* 12 bits + 12 bits */ unsigned variant; - const unsigned long flags; + const uint64_t flags; }; #define AARCH64_BIG_LITTLE(BIG, LITTLE) \ @@ -75,7 +75,7 @@ struct aarch64_arch_driver_info { const char* id; const char* name; - const unsigned long flags; + const uint64_t flags; }; #define AARCH64_ARCH(NAME, CORE, ARCH_IDENT, ARCH_REV, FLAGS) \ @@ -179,8 +179,8 @@ host_detect_local_cpu (int argc, const char **argv) unsigned int variants[2] = { ALL_VARIANTS, ALL_VARIANTS }; unsigned int n_variants = 0; bool processed_exts = false; - unsigned long extension_flags = 0; - unsigned long default_flags = 0; + uint64_t extension_flags = 0; + uint64_t default_flags = 0; gcc_assert (argc); diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index 5e3e8873d355b443a01fceb5c3df4cb98dd26d60..6ff548a2e902e876d8e2c6f56c75381941307f32 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -16008,6 +16008,21 @@ generation. This option is enabled by default for @option{-march=armv8.5-a}. Enable the Armv8-a Execution and Data Prediction Restriction instructions. This option is only to enable the extension at the assembler level and does not affect code generation. This option is enabled by default for +@item sve2 + Enable the Armv8-a Scalable Vector Extension 2. This option is only to enable + the extension at the assembler level and does not affect code generation. +@item bitperm + Enable SVE2 bitperm Extension. This option is only to enable the extension at + the assembler level and does not affect code generation. +@item sve2-sm4 + Enable SVE2 sm4 Extension. This option is only to enable the extension at the + assembler level and does not affect code generation. +@item sve2-aes + Enable SVE2 aes Extension. This option is only to enable the extension at the + assembler level and does not affect code generation. +@item sve2-sha3 + Enable SVE2 sha3 Extension. This option is only to enable the extension at the + assembler level and does not affect code generation. @option{-march=armv8.5-a}. @end table --===============5339346251674605661== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="sve2-flags.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb21tb24vY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1jb21tb24uYyBi L2djYy9jb21tb24vY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1jb21tb24uYwppbmRleCBiYWIzYWIz ZmEzNmM2NjkwNmQxYjQzNjdlMmI3YmZiMWJmNmFhMDhjLi4wYTc3YTQyMDA1MzE2YjkyMWIwYWFl YWM5NTM2NmZkZTAyZWI1N2JmIDEwMDY0NAotLS0gYS9nY2MvY29tbW9uL2NvbmZpZy9hYXJjaDY0 L2FhcmNoNjQtY29tbW9uLmMKKysrIGIvZ2NjL2NvbW1vbi9jb25maWcvYWFyY2g2NC9hYXJjaDY0 LWNvbW1vbi5jCkBAIC0xNzAsOSArMTcwLDkgQEAgYWFyY2g2NF9oYW5kbGVfb3B0aW9uIChzdHJ1 Y3QgZ2NjX29wdGlvbnMgKm9wdHMsCiBzdHJ1Y3QgYWFyY2g2NF9vcHRpb25fZXh0ZW5zaW9uCiB7 CiAgIGNvbnN0IGNoYXIgKmNvbnN0IG5hbWU7Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ19j YW5vbmljYWw7Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3Nfb247Ci0gIGNvbnN0IHVuc2ln bmVkIGxvbmcgZmxhZ3Nfb2ZmOworICBjb25zdCB1aW50NjRfdCBmbGFnX2Nhbm9uaWNhbDsKKyAg Y29uc3QgdWludDY0X3QgZmxhZ3Nfb247CisgIGNvbnN0IHVpbnQ2NF90IGZsYWdzX29mZjsKICAg Y29uc3QgYm9vbCBpc19zeW50aGV0aWM7CiB9OwogCkBAIC0yMDEsMTQgKzIwMSwxNCBAQCBzdHJ1 Y3QgcHJvY2Vzc29yX25hbWVfdG9fYXJjaAogewogICBjb25zdCBzdGQ6OnN0cmluZyBwcm9jZXNz b3JfbmFtZTsKICAgY29uc3QgZW51bSBhYXJjaDY0X2FyY2ggYXJjaDsKLSAgY29uc3QgdW5zaWdu ZWQgbG9uZyBmbGFnczsKKyAgY29uc3QgdWludDY0X3QgZmxhZ3M7CiB9OwogCiBzdHJ1Y3QgYXJj aF90b19hcmNoX25hbWUKIHsKICAgY29uc3QgZW51bSBhYXJjaDY0X2FyY2ggYXJjaDsKICAgY29u c3Qgc3RkOjpzdHJpbmcgYXJjaF9uYW1lOwotICBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzOwor ICBjb25zdCB1aW50NjRfdCBmbGFnczsKIH07CiAKIC8qIE1hcCBwcm9jZXNzb3IgbmFtZXMgdG8g dGhlIGFyY2hpdGVjdHVyZSByZXZpc2lvbiB0aGV5IGltcGxlbWVudCBhbmQKQEAgLTIzOCw3ICsy MzgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGFyY2hfdG9fYXJjaF9uYW1lIGFsbF9hcmNoaXRl Y3R1cmVzW10gPQogICAgYSBjb3B5IG9mIHRoZSBzdHJpbmcgaXMgY3JlYXRlZCBhbmQgc3RvcmVk IHRvIElOVkFMSURfRVhURU5TSU9OLiAgKi8KIAogZW51bSBhYXJjaDY0X3BhcnNlX29wdF9yZXN1 bHQKLWFhcmNoNjRfcGFyc2VfZXh0ZW5zaW9uIChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIGxv bmcgKmlzYV9mbGFncywKK2FhcmNoNjRfcGFyc2VfZXh0ZW5zaW9uIChjb25zdCBjaGFyICpzdHIs IHVpbnQ2NF90ICppc2FfZmxhZ3MsCiAJCQkgc3RkOjpzdHJpbmcgKmludmFsaWRfZXh0ZW5zaW9u KQogewogICAvKiBUaGUgZXh0ZW5zaW9uIHN0cmluZyBpcyBwYXJzZWQgbGVmdCB0byByaWdodC4g ICovCkBAIC0zMjYsMTYgKzMyNiwyMiBAQCBpbnQgb3B0X2V4dF9jbXAgKGNvbnN0IHZvaWQqIGEs IGNvbnN0IHZvaWQqIGIpCiAgICAgIHR1cm5zIG9uIGFzIGEgZGVwZW5kZW5jeS4gIEFzIGFuIGV4 YW1wbGUgK2RvdHByb2QgdHVybnMgb24gRkxfRE9UUFJPRCBhbmQKICAgICAgRkxfU0lNRC4gIEFz IHN1Y2ggdGhlIHNldCBvZiBiaXRzIHJlcHJlc2VudGVkIGJ5IHRoaXMgb3B0aW9uIGlzCiAgICAg IHtGTF9ET1RQUk9ELCBGTF9TSU1EfS4gKi8KLSAgdW5zaWduZWQgbG9uZyB0b3RhbF9mbGFnc19h ID0gb3B0X2EtPmZsYWdfY2Fub25pY2FsICYgb3B0X2EtPmZsYWdzX29uOwotICB1bnNpZ25lZCBs b25nIHRvdGFsX2ZsYWdzX2IgPSBvcHRfYi0+ZmxhZ19jYW5vbmljYWwgJiBvcHRfYi0+ZmxhZ3Nf b247CisgIHVpbnQ2NF90IHRvdGFsX2ZsYWdzX2EgPSBvcHRfYS0+ZmxhZ19jYW5vbmljYWwgJiBv cHRfYS0+ZmxhZ3Nfb247CisgIHVpbnQ2NF90IHRvdGFsX2ZsYWdzX2IgPSBvcHRfYi0+ZmxhZ19j YW5vbmljYWwgJiBvcHRfYi0+ZmxhZ3Nfb247CiAgIGludCBwb3BjbnRfYSA9IHBvcGNvdW50X2h3 aSAoKEhPU1RfV0lERV9JTlQpdG90YWxfZmxhZ3NfYSk7CiAgIGludCBwb3BjbnRfYiA9IHBvcGNv dW50X2h3aSAoKEhPU1RfV0lERV9JTlQpdG90YWxfZmxhZ3NfYik7CiAgIGludCBvcmRlciA9IHBv cGNudF9iIC0gcG9wY250X2E7CiAKICAgLyogSWYgdGhleSBoYXZlIHRoZSBzYW1lIGFtb3VudCBv ZiBiaXRzIHNldCwgZ2l2ZSBpdCBhIG1vcmUKLSAgICAgZGV0ZXJtaW5pc3RpYyBvcmRlcmluZyBi eSB1c2luZyB0aGUgdmFsdWUgb2YgdGhlIGJpdHMgdGhlbXNlbHZlcy4gICovCisgICAgIGRldGVy bWluaXN0aWMgb3JkZXJpbmcgYnkgdXNpbmcgdGhlIHZhbHVlIG9mIHRoZSBiaXRzIHRoZW1zZWx2 ZXMuCisgICAgIFNpbmNlIHRoZSB2YWx1ZSBvZiB0aGUgYml0cyB0aGVtc2VsdmVzIGNhbiBiZSBs YXJnZXIgdGhhbiB0aGF0CisgICAgIHJlcHJlc2VudGFibGUgYnkgYW4gaW50ZWdlciwgd2UgbWFu dWFsbHkgdHJ1bmNhdGUgdGhlIHZhbHVlLiAgKi8KICAgaWYgKG9yZGVyID09IDApCi0gICAgcmV0 dXJuIHRvdGFsX2ZsYWdzX2IgLSB0b3RhbF9mbGFnc19hOworICB7CisgICAgaWYgKHRvdGFsX2Zs YWdzX2EgPT0gdG90YWxfZmxhZ3NfYikKKyAgICAgIHJldHVybiAwOworICAgIHJldHVybiB0b3Rh bF9mbGFnc19hIDwgdG90YWxfZmxhZ3NfYiA/IDEgOiAtMTsKKyAgfQogCiAgIHJldHVybiBvcmRl cjsKIH0KQEAgLTM3Myw5ICszNzksOSBAQCBhYXJjaDY0X29wdGlvbl9pbml0X3N0cnVjdCAoc3Ry dWN0IGdjY19vcHRpb25zICpvcHRzIEFUVFJJQlVURV9VTlVTRUQpCiAqLwogCiBzdGF0aWMgYm9v bAotYWFyY2g2NF9jb250YWluc19vcHQgKHVuc2lnbmVkIGxvbmcgaXNhX2ZsYWdfYml0cywgb3B0 X2V4dCAqb3B0KQorYWFyY2g2NF9jb250YWluc19vcHQgKHVpbnQ2NF90IGlzYV9mbGFnX2JpdHMs IG9wdF9leHQgKm9wdCkKIHsKLSAgdW5zaWduZWQgbG9uZyBmbGFnc19jaGVjaworICB1aW50NjRf dCBmbGFnc19jaGVjawogICAgID0gb3B0LT5pc19zeW50aGV0aWMgPyBvcHQtPmZsYWdzX29uIDog b3B0LT5mbGFnX2Nhbm9uaWNhbDsKIAogICByZXR1cm4gKGlzYV9mbGFnX2JpdHMgJiBmbGFnc19j aGVjaykgPT0gZmxhZ3NfY2hlY2s7CkBAIC0zODgsMTMgKzM5NCwxMyBAQCBhYXJjaDY0X2NvbnRh aW5zX29wdCAodW5zaWduZWQgbG9uZyBpc2FfZmxhZ19iaXRzLCBvcHRfZXh0ICpvcHQpCiAgICB0 aGF0IGFsbCB0aGUgIisiIGZsYWdzIGNvbWUgYmVmb3JlIHRoZSAiK25vIiBmbGFncy4gICovCiAK IHN0ZDo6c3RyaW5nCi1hYXJjaDY0X2dldF9leHRlbnNpb25fc3RyaW5nX2Zvcl9pc2FfZmxhZ3Mg KHVuc2lnbmVkIGxvbmcgaXNhX2ZsYWdzLAotCQkJCQkgICAgdW5zaWduZWQgbG9uZyBkZWZhdWx0 X2FyY2hfZmxhZ3MpCithYXJjaDY0X2dldF9leHRlbnNpb25fc3RyaW5nX2Zvcl9pc2FfZmxhZ3Mg KHVpbnQ2NF90IGlzYV9mbGFncywKKwkJCQkJICAgIHVpbnQ2NF90IGRlZmF1bHRfYXJjaF9mbGFn cykKIHsKICAgY29uc3Qgc3RydWN0IGFhcmNoNjRfb3B0aW9uX2V4dGVuc2lvbiAqb3B0ID0gTlVM TDsKICAgc3RkOjpzdHJpbmcgb3V0c3RyID0gIiI7CiAKLSAgdW5zaWduZWQgbG9uZyBpc2FfZmxh Z19iaXRzID0gaXNhX2ZsYWdzOworICB1aW50NjRfdCBpc2FfZmxhZ19iaXRzID0gaXNhX2ZsYWdz OwogCiAgIC8qIFBhc3Mgb25lOiBNaW5pbWl6ZSB0aGUgc2VhcmNoIHNwYWNlIGJ5IHJlZHVjaW5n IHRoZSBzZXQgb2Ygb3B0aW9ucwogICAgICB0byB0aGUgc21hbGxlc3Qgc2V0IHRoYXQgc3RpbGwg dHVybnMgb24gdGhlIHNhbWUgZmVhdHVyZXMgYXMgYmVmb3JlIGluCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2FhcmNoNjQvYWFyY2g2NC1vcHRpb24tZXh0ZW5zaW9ucy5kZWYgYi9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC1vcHRpb24tZXh0ZW5zaW9ucy5kZWYKaW5kZXggNTNkY2QwMzU5MGQy ZTRlZWJhYzgzZjAzMDM5YzQ0MmZjYTdmNWQ1ZC4uYzAyM2JjYTVjNTExYzEzMjU3NTUyOWIxZDE1 NGY0YTc5OGNlMTBmOSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtb3B0 aW9uLWV4dGVuc2lvbnMuZGVmCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LW9wdGlv bi1leHRlbnNpb25zLmRlZgpAQCAtNTcsMTcgKzU3LDIwIEBACiAKIC8qIEVuYWJsaW5nICJmcCIg anVzdCBlbmFibGVzICJmcCIuCiAgICBEaXNhYmxpbmcgImZwIiBhbHNvIGRpc2FibGVzICJzaW1k IiwgImNyeXB0byIsICJmcDE2IiwgImFlcyIsICJzaGEyIiwKLSAgICJzaGEzIiwgc20zL3NtNCBh bmQgInN2ZSIuICAqLwotQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJmcCIsIEFBUkNINjRfRkxfRlAs IDAsIEFBUkNINjRfRkxfU0lNRCB8IEFBUkNINjRfRkxfQ1JZUFRPIHwgQUFSQ0g2NF9GTF9GMTYg fCBBQVJDSDY0X0ZMX0FFUyB8IEFBUkNINjRfRkxfU0hBMiB8IEFBUkNINjRfRkxfU0hBMyB8IEFB UkNINjRfRkxfU000IHwgQUFSQ0g2NF9GTF9TVkUsIGZhbHNlLCAiZnAiKQorICAgInNoYTMiLCBz bTMvc200LCAic3ZlIiwgInN2ZTItc200IiwgInN2ZTItc2hhMyIsICJzdmUyLWFlcyIsICJiaXRw ZXJtIiBhbmQKKyAgICJzdmUyIi4gICovCitBQVJDSDY0X09QVF9FWFRFTlNJT04oImZwIiwgQUFS Q0g2NF9GTF9GUCwgMCwgQUFSQ0g2NF9GTF9TSU1EIHwgQUFSQ0g2NF9GTF9DUllQVE8gfCBBQVJD SDY0X0ZMX0YxNiB8IEFBUkNINjRfRkxfQUVTIHwgQUFSQ0g2NF9GTF9TSEEyIHwgQUFSQ0g2NF9G TF9TSEEzIHwgQUFSQ0g2NF9GTF9TTTQgfCBBQVJDSDY0X0ZMX1NWRSB8IEFBUkNINjRfRkxfU1ZF MiB8IEFBUkNINjRfRkxfU1ZFMl9BRVMgfCBBQVJDSDY0X0ZMX1NWRTJfU0hBMyB8IEFBUkNINjRf RkxfU1ZFMl9TTTQgfCBBQVJDSDY0X0ZMX1NWRTJfQklUUEVSTSwgZmFsc2UsICJmcCIpCiAKIC8q IEVuYWJsaW5nICJzaW1kIiBhbHNvIGVuYWJsZXMgImZwIi4KICAgIERpc2FibGluZyAic2ltZCIg YWxzbyBkaXNhYmxlcyAiY3J5cHRvIiwgImRvdHByb2QiLCAiYWVzIiwgInNoYTIiLCAic2hhMyIs Ci0gICAic20zL3NtNCIgYW5kICJzdmUiLiAgKi8KLUFBUkNINjRfT1BUX0VYVEVOU0lPTigic2lt ZCIsIEFBUkNINjRfRkxfU0lNRCwgQUFSQ0g2NF9GTF9GUCwgQUFSQ0g2NF9GTF9DUllQVE8gfCBB QVJDSDY0X0ZMX0RPVFBST0QgfCBBQVJDSDY0X0ZMX0FFUyB8IEFBUkNINjRfRkxfU0hBMiB8IEFB UkNINjRfRkxfU0hBMyB8IEFBUkNINjRfRkxfU000IHwgQUFSQ0g2NF9GTF9TVkUsIGZhbHNlLCAi YXNpbWQiKQorICAgInNtMy9zbTQiLCAic3ZlIiwgInN2ZTItc200IiwgInN2ZTItc2hhMyIsICJz dmUyLWFlcyIsICJiaXRwZXJtIiBhbmQgInN2ZTIiLgorICAgKi8KK0FBUkNINjRfT1BUX0VYVEVO U0lPTigic2ltZCIsIEFBUkNINjRfRkxfU0lNRCwgQUFSQ0g2NF9GTF9GUCwgQUFSQ0g2NF9GTF9D UllQVE8gfCBBQVJDSDY0X0ZMX0RPVFBST0QgfCBBQVJDSDY0X0ZMX0FFUyB8IEFBUkNINjRfRkxf U0hBMiB8IEFBUkNINjRfRkxfU0hBMyB8IEFBUkNINjRfRkxfU000IHwgQUFSQ0g2NF9GTF9TVkUg fCBBQVJDSDY0X0ZMX1NWRTIgfCBBQVJDSDY0X0ZMX1NWRTJfQUVTIHwgQUFSQ0g2NF9GTF9TVkUy X1NIQTMgfCBBQVJDSDY0X0ZMX1NWRTJfU000IHwgQUFSQ0g2NF9GTF9TVkUyX0JJVFBFUk0sIGZh bHNlLCAiYXNpbWQiKQogCiAvKiBFbmFibGluZyAiY3J5cHRvIiBhbHNvIGVuYWJsZXMgImZwIiwg InNpbWQiLCAiYWVzIiBhbmQgInNoYTIiLgotICAgRGlzYWJsaW5nICJjcnlwdG8iIGRpc2FibGVz ICJjcnlwdG8iLCAiYWVzIiwgInNoYTIiLCAic2hhMyIgYW5kICJzbTMvc200Ii4gICovCi1BQVJD SDY0X09QVF9FWFRFTlNJT04oImNyeXB0byIsIEFBUkNINjRfRkxfQ1JZUFRPLCBBQVJDSDY0X0ZM X0ZQIHwgQUFSQ0g2NF9GTF9TSU1EIHwgQUFSQ0g2NF9GTF9BRVMgfCBBQVJDSDY0X0ZMX1NIQTIs IEFBUkNINjRfRkxfQUVTIHwgQUFSQ0g2NF9GTF9TSEEyIHxBQVJDSDY0X0ZMX1NIQTMgfCBBQVJD SDY0X0ZMX1NNNCwgdHJ1ZSwgImFlcyBwbXVsbCBzaGExIHNoYTIiKQorICAgRGlzYWJsaW5nICJj cnlwdG8iIGRpc2FibGVzICJjcnlwdG8iLCAiYWVzIiwgInNoYTIiLCAic2hhMyIgYW5kICJzbTMv c200IiwKKyAgICJzdmUyLWFlcyIsICJzdmUyLXNtNCIsICJzdmUyLXNoYTMiLiAgKi8KK0FBUkNI NjRfT1BUX0VYVEVOU0lPTigiY3J5cHRvIiwgQUFSQ0g2NF9GTF9DUllQVE8sIEFBUkNINjRfRkxf RlAgfCBBQVJDSDY0X0ZMX1NJTUQgfCBBQVJDSDY0X0ZMX0FFUyB8IEFBUkNINjRfRkxfU0hBMiwg QUFSQ0g2NF9GTF9BRVMgfCBBQVJDSDY0X0ZMX1NIQTIgfCBBQVJDSDY0X0ZMX1NIQTMgfCBBQVJD SDY0X0ZMX1NNNCB8IEFBUkNINjRfRkxfU1ZFMl9BRVMgfCBBQVJDSDY0X0ZMX1NWRTJfU0hBMyB8 IEFBUkNINjRfRkxfU1ZFMl9TTTQsIHRydWUsICJhZXMgcG11bGwgc2hhMSBzaGEyIikKIAogLyog RW5hYmxpbmcgb3IgZGlzYWJsaW5nICJjcmMiIG9ubHkgY2hhbmdlcyAiY3JjIi4gICovCiBBQVJD SDY0X09QVF9FWFRFTlNJT04oImNyYyIsIEFBUkNINjRfRkxfQ1JDLCAwLCAwLCBmYWxzZSwgImNy YzMyIikKQEAgLTc2LDggKzc5LDkgQEAgQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJjcmMiLCBBQVJD SDY0X0ZMX0NSQywgMCwgMCwgZmFsc2UsICJjcmMzMiIpCiBBQVJDSDY0X09QVF9FWFRFTlNJT04o ImxzZSIsIEFBUkNINjRfRkxfTFNFLCAwLCAwLCBmYWxzZSwgImF0b21pY3MiKQogCiAvKiBFbmFi bGluZyAiZnAxNiIgYWxzbyBlbmFibGVzICJmcCIuCi0gICBEaXNhYmxpbmcgImZwMTYiIGRpc2Fi bGVzICJmcDE2IiwgImZwMTZmbWwiIGFuZCAic3ZlIi4gICovCi1BQVJDSDY0X09QVF9FWFRFTlNJ T04oImZwMTYiLCBBQVJDSDY0X0ZMX0YxNiwgQUFSQ0g2NF9GTF9GUCwgQUFSQ0g2NF9GTF9GMTZG TUwgfCBBQVJDSDY0X0ZMX1NWRSwgZmFsc2UsICJmcGhwIGFzaW1kaHAiKQorICAgRGlzYWJsaW5n ICJmcDE2IiBkaXNhYmxlcyAiZnAxNiIsICJmcDE2Zm1sIiwgInN2ZSIsICJzdmUyLXNtNCIsICJz dmUyLXNoYTMiLAorICAgInN2ZTItYWVzIiwgImJpdHBlcm0iIGFuZCAic3ZlMiIuICAqLworQUFS Q0g2NF9PUFRfRVhURU5TSU9OKCJmcDE2IiwgQUFSQ0g2NF9GTF9GMTYsIEFBUkNINjRfRkxfRlAs IEFBUkNINjRfRkxfRjE2Rk1MIHwgQUFSQ0g2NF9GTF9TVkUgfCBBQVJDSDY0X0ZMX1NWRTIgfCBB QVJDSDY0X0ZMX1NWRTJfQUVTIHwgQUFSQ0g2NF9GTF9TVkUyX1NIQTMgfCBBQVJDSDY0X0ZMX1NW RTJfU000IHwgQUFSQ0g2NF9GTF9TVkUyX0JJVFBFUk0sIGZhbHNlLCAiZnBocCBhc2ltZGhwIikK IAogLyogRW5hYmxpbmcgb3IgZGlzYWJsaW5nICJyY3BjIiBvbmx5IGNoYW5nZXMgInJjcGMiLiAg Ki8KIEFBUkNINjRfT1BUX0VYVEVOU0lPTigicmNwYyIsIEFBUkNINjRfRkxfUkNQQywgMCwgMCwg ZmFsc2UsICJscmNwYyIpCkBAIC05MSwyOCArOTUsMjkgQEAgQUFSQ0g2NF9PUFRfRVhURU5TSU9O KCJyZG1hIiwgQUFSQ0g2NF9GTF9SRE1BLCBBQVJDSDY0X0ZMX0ZQIHwgQUFSQ0g2NF9GTF9TSU1E LAogQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJkb3Rwcm9kIiwgQUFSQ0g2NF9GTF9ET1RQUk9ELCBB QVJDSDY0X0ZMX1NJTUQsIDAsIGZhbHNlLCAiYXNpbWRkcCIpCiAKIC8qIEVuYWJsaW5nICJhZXMi IGFsc28gZW5hYmxlcyAic2ltZCIuCi0gICBEaXNhYmxpbmcgImFlcyIganVzdCBkaXNhYmxlcyAi YWVzIi4gICovCi1BQVJDSDY0X09QVF9FWFRFTlNJT04oImFlcyIsIEFBUkNINjRfRkxfQUVTLCBB QVJDSDY0X0ZMX1NJTUQsIDAsIGZhbHNlLCAiYWVzIikKKyAgIERpc2FibGluZyAiYWVzIiBkaXNh YmxlcyAiYWVzIiBhbmQgInN2ZTItYWVzJy4gICovCitBQVJDSDY0X09QVF9FWFRFTlNJT04oImFl cyIsIEFBUkNINjRfRkxfQUVTLCBBQVJDSDY0X0ZMX1NJTUQsIEFBUkNINjRfRkxfU1ZFMl9BRVMs IGZhbHNlLCAiYWVzIikKIAogLyogRW5hYmxpbmcgInNoYTIiIGFsc28gZW5hYmxlcyAic2ltZCIu CiAgICBEaXNhYmxpbmcgInNoYTIiIGp1c3QgZGlzYWJsZXMgInNoYTIiLiAgKi8KIEFBUkNINjRf T1BUX0VYVEVOU0lPTigic2hhMiIsIEFBUkNINjRfRkxfU0hBMiwgQUFSQ0g2NF9GTF9TSU1ELCAw LCBmYWxzZSwgInNoYTEgc2hhMiIpCiAKIC8qIEVuYWJsaW5nICJzaGEzIiBlbmFibGVzICJzaW1k IiBhbmQgInNoYTIiLgotICAgRGlzYWJsaW5nICJzaGEzIiBqdXN0IGRpc2FibGVzICJzaGEzIi4g ICovCi1BQVJDSDY0X09QVF9FWFRFTlNJT04oInNoYTMiLCBBQVJDSDY0X0ZMX1NIQTMsIEFBUkNI NjRfRkxfU0lNRCB8IEFBUkNINjRfRkxfU0hBMiwgMCwgZmFsc2UsICJzaGEzIHNoYTUxMiIpCisg ICBEaXNhYmxpbmcgInNoYTMiIGRpc2FibGVzICJzaGEzIiBhbmQgInN2ZTItc2hhMyIuICAqLwor QUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJzaGEzIiwgQUFSQ0g2NF9GTF9TSEEzLCBBQVJDSDY0X0ZM X1NJTUQgfCBBQVJDSDY0X0ZMX1NIQTIsIEFBUkNINjRfRkxfU1ZFMl9TSEEzLCBmYWxzZSwgInNo YTMgc2hhNTEyIikKIAogLyogRW5hYmxpbmcgInNtNCIgYWxzbyBlbmFibGVzICJzaW1kIi4KLSAg IERpc2FibGluZyAic200IiBqdXN0IGRpc2FibGVzICJzbTQiLiAgKi8KLUFBUkNINjRfT1BUX0VY VEVOU0lPTigic200IiwgQUFSQ0g2NF9GTF9TTTQsIEFBUkNINjRfRkxfU0lNRCwgMCwgZmFsc2Us ICJzbTMgc200IikKKyAgIERpc2FibGluZyAic200IiBkaXNhYmxlcyAic200IiBhbmQgInN2ZTIt c200Ii4gICovCitBQVJDSDY0X09QVF9FWFRFTlNJT04oInNtNCIsIEFBUkNINjRfRkxfU000LCBB QVJDSDY0X0ZMX1NJTUQsIEFBUkNINjRfRkxfU1ZFMl9TTTQsIGZhbHNlLCAic20zIHNtNCIpCiAK IC8qIEVuYWJsaW5nICJmcDE2Zm1sIiBhbHNvIGVuYWJsZXMgImZwIiBhbmQgImZwMTYiLgogICAg RGlzYWJsaW5nICJmcDE2Zm1sIiBqdXN0IGRpc2FibGVzICJmcDE2Zm1sIi4gICovCiBBQVJDSDY0 X09QVF9FWFRFTlNJT04oImZwMTZmbWwiLCBBQVJDSDY0X0ZMX0YxNkZNTCwgQUFSQ0g2NF9GTF9G UCB8IEFBUkNINjRfRkxfRjE2LCAwLCBmYWxzZSwgImFzaW1kZm1sIikKIAogLyogRW5hYmxpbmcg InN2ZSIgYWxzbyBlbmFibGVzICJmcDE2IiwgImZwIiBhbmQgInNpbWQiLgotICAgRGlzYWJsaW5n ICJzdmUiIGp1c3QgZGlzYWJsZXMgInN2ZSIuICAqLwotQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJz dmUiLCBBQVJDSDY0X0ZMX1NWRSwgQUFSQ0g2NF9GTF9GUCB8IEFBUkNINjRfRkxfU0lNRCB8IEFB UkNINjRfRkxfRjE2LCAwLCBmYWxzZSwgInN2ZSIpCisgICBEaXNhYmxpbmcgInN2ZSIgZGlzYWJs ZXMgInN2ZSIsICJzdmUyIiwgImJpdHBlcm0iLCAic3ZlMi1zaGEzIiwgInN2ZTItc200IiBhbmQK KyAgICJzdmUyLWFlcyIuICAqLworQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJzdmUiLCBBQVJDSDY0 X0ZMX1NWRSwgQUFSQ0g2NF9GTF9GUCB8IEFBUkNINjRfRkxfU0lNRCB8IEFBUkNINjRfRkxfRjE2 LCBBQVJDSDY0X0ZMX1NWRTIgfCBBQVJDSDY0X0ZMX1NWRTJfQUVTIHwgQUFSQ0g2NF9GTF9TVkUy X1NIQTMgfCBBQVJDSDY0X0ZMX1NWRTJfU000IHwgQUFSQ0g2NF9GTF9TVkUyX0JJVFBFUk0sIGZh bHNlLCAic3ZlIikKIAogLyogRW5hYmxpbmcvRGlzYWJsaW5nICJwcm9maWxlIiBkb2VzIG5vdCBl bmFibGUvZGlzYWJsZSBhbnkgb3RoZXIgZmVhdHVyZS4gICovCiBBQVJDSDY0X09QVF9FWFRFTlNJ T04oInByb2ZpbGUiLCBBQVJDSDY0X0ZMX1BST0ZJTEUsIDAsIDAsIGZhbHNlLCAiIikKQEAgLTEz Miw0ICsxMzcsMjUgQEAgQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJzc2JzIiwgQUFSQ0g2NF9GTF9T U0JTLCAwLCAwLCBmYWxzZSwgIiIpCiAvKiBFbmFibGluZy9EaXNhYmxpbmcgInByZWRyZXMiIG9u bHkgY2hhbmdlcyAicHJlZHJlcyIuICAqLwogQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJwcmVkcmVz IiwgQUFSQ0g2NF9GTF9QUkVEUkVTLCAwLCAwLCBmYWxzZSwgIiIpCiAKKy8qIEVuYWJsaW5nICJz dmUyIiBhbHNvIGVuYWJsZXMgInN2ZSIsICJmcDE2IiwgImZwIiwgYW5kICJzaW1kIi4KKyAgIERp c2FibGluZyAic3ZlMiIgZGlzYWJsZXMgInN2ZTIiLCAic3ZlMi1zbTQiLCAic3ZlMi1zaGEzIiwg InN2ZTItYWVzIiwgYW5kCisgICAiYml0cGVybSIuICAqLworQUFSQ0g2NF9PUFRfRVhURU5TSU9O KCJzdmUyIiwgQUFSQ0g2NF9GTF9TVkUyLCBBQVJDSDY0X0ZMX1NWRSB8IEFBUkNINjRfRkxfRlAg fCBBQVJDSDY0X0ZMX1NJTUQgfCBBQVJDSDY0X0ZMX0YxNiwgQUFSQ0g2NF9GTF9TVkUyX1NNNCB8 IEFBUkNINjRfRkxfU1ZFMl9BRVMgfCBBQVJDSDY0X0ZMX1NWRTJfU0hBMyB8IEFBUkNINjRfRkxf U1ZFMl9CSVRQRVJNLCBmYWxzZSwgIiIpCisKKy8qIEVuYWJsaW5nICJzdmUyLXNtNCIgYWxzbyBl bmFibGVzICJzdmUyIiwgInN2ZSIsICJmcCIsICJmcDE2IiAic2ltZCIsIGFuZAorICAgInNtNCIu IERpc2FibGluZyAic3ZlMi1zbTQiIGp1c3QgZGlzYWJsZXMgInN2ZTItc200Ii4gICovCitBQVJD SDY0X09QVF9FWFRFTlNJT04oInN2ZTItc200IiwgQUFSQ0g2NF9GTF9TVkUyX1NNNCwgQUFSQ0g2 NF9GTF9TVkUgfCBBQVJDSDY0X0ZMX1NWRTIgfCBBQVJDSDY0X0ZMX0ZQIHwgQUFSQ0g2NF9GTF9T SU1EIHwgQUFSQ0g2NF9GTF9GMTYgfCBBQVJDSDY0X0ZMX1NNNCwgMCwgZmFsc2UsICIiKQorCisv KiBFbmFibGluZyAic3ZlMi1hZXMiIGFsc28gZW5hYmxlcyAic3ZlMiIsICJzdmUiLCAiZnAiLCAi ZnAxNiIsICJzaW1kIiwgYW5kCisgICAiYWVzIi4gRGlzYWJsaW5nICJzdmUyLWFlcyIganVzdCBk aXNhYmxlcyAic3ZlMi1hZXMiLiAgKi8KK0FBUkNINjRfT1BUX0VYVEVOU0lPTigic3ZlMi1hZXMi LCBBQVJDSDY0X0ZMX1NWRTJfQUVTLCBBQVJDSDY0X0ZMX1NWRSB8IEFBUkNINjRfRkxfU1ZFMiB8 ICBBQVJDSDY0X0ZMX0ZQIHwgQUFSQ0g2NF9GTF9TSU1EIHwgQUFSQ0g2NF9GTF9GMTYgfCBBQVJD SDY0X0ZMX0FFUywgMCwgZmFsc2UsICIiKQorCisvKiBFbmFibGluZyAic3ZlMi1zaGEzIiBhbHNv IGVuYWJsZXMgInN2ZTIiLCAic3ZlIiwgImZwIiwgImZwMTYiLCAic2ltZCIsIGFuZAorICAgInNo YTMiLiBEaXNhYmxpbmcgInN2ZTItc2hhMyIganVzdCBkaXNhYmxlcyAic3ZlMi1zaGEzIi4gICov CitBQVJDSDY0X09QVF9FWFRFTlNJT04oInN2ZTItc2hhMyIsIEFBUkNINjRfRkxfU1ZFMl9TSEEz LCBBQVJDSDY0X0ZMX1NWRSB8IEFBUkNINjRfRkxfU1ZFMiB8ICBBQVJDSDY0X0ZMX0ZQIHwgQUFS Q0g2NF9GTF9TSU1EIHwgQUFSQ0g2NF9GTF9GMTYgfCBBQVJDSDY0X0ZMX1NIQTMsIDAsIGZhbHNl LCAiIikKKworLyogRW5hYmxpbmcgImJpdHBlcm0iIGFsc28gZW5hYmxlcyAic3ZlMiIsICJzdmUi LCAiZnAiLCAiZnAxNiIgYW5kICJzaW1kIi4KKyAgIERpc2FibGluZyAiYml0cGVybSIganVzdCBk aXNhYmxlcyAiYml0cGVybSIuICAqLworQUFSQ0g2NF9PUFRfRVhURU5TSU9OKCJiaXRwZXJtIiwg QUFSQ0g2NF9GTF9TVkUyX0JJVFBFUk0sIEFBUkNINjRfRkxfU1ZFIHwgQUFSQ0g2NF9GTF9TVkUy IHwgIEFBUkNINjRfRkxfRlAgfCBBQVJDSDY0X0ZMX1NJTUQgfCBBQVJDSDY0X0ZMX0YxNiwgMCwg ZmFsc2UsICIiKQorCiAjdW5kZWYgQUFSQ0g2NF9PUFRfRVhURU5TSU9OCmRpZmYgLS1naXQgYS9n Y2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQu aAppbmRleCA3YmQzYmY1MjVkZDcxMzQ3YTEyZWQ5Y2QyMjI3YmMyY2Q2ZTljYzU1Li5iZTY5ODE4 ODlhYjZhNzk2MTgzZWYxZmQ5NmMzYWY5OTI0M2Y0NDY2IDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC5oCisrKyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmgKQEAg LTE5Miw2ICsxOTIsMTMgQEAgZXh0ZXJuIHVuc2lnbmVkIGFhcmNoNjRfYXJjaGl0ZWN0dXJlX3Zl cnNpb247CiAvKiBFeGVjdXRpb24gYW5kIERhdGEgUHJlZGljdGlvbiBSZXN0cmljdGlvbiBpbnN0 cnVjdGlvbnMgc3VwcG9ydGVkLiAgKi8KICNkZWZpbmUgQUFSQ0g2NF9GTF9QUkVEUkVTICAgICgx IDw8IDI3KQogCisvKiBTVkUyIGluc3RydWN0aW9uIHN1cHBvcnRlZC4gICovCisjZGVmaW5lIEFB UkNINjRfRkxfU1ZFMgkJKDEgPDwgMjgpCisjZGVmaW5lIEFBUkNINjRfRkxfU1ZFMl9BRVMJKDEg PDwgMjkpCisjZGVmaW5lIEFBUkNINjRfRkxfU1ZFMl9TTTQJKDEgPDwgMzApCisjZGVmaW5lIEFB UkNINjRfRkxfU1ZFMl9TSEEzCSgxVUxMIDw8IDMxKQorI2RlZmluZSBBQVJDSDY0X0ZMX1NWRTJf QklUUEVSTQkoMVVMTCA8PCAzMikKKwogLyogSGFzIEZQIGFuZCBTSU1ELiAgKi8KICNkZWZpbmUg QUFSQ0g2NF9GTF9GUFNJTUQgICAgIChBQVJDSDY0X0ZMX0ZQIHwgQUFSQ0g2NF9GTF9TSU1EKQog CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jIGIvZ2NjL2NvbmZpZy9h YXJjaDY0L2FhcmNoNjQuYwppbmRleCAxZjkwNDY3MWM2OTA5NTczMjkwZmE5Nzg1OGI3YzkzM2I0 MzFkOGYyLi5hMjJmNDk3NmRkMGJhNTU0ZmM2NGNhZjk5NGIzMDNlMWYzZTcwMDEyIDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jCisrKyBiL2djYy9jb25maWcvYWFyY2g2 NC9hYXJjaDY0LmMKQEAgLTE3Nyw3ICsxNzcsNyBAQCB1bnNpZ25lZCBhYXJjaDY0X2FyY2hpdGVj dHVyZV92ZXJzaW9uOwogZW51bSBhYXJjaDY0X3Byb2Nlc3NvciBhYXJjaDY0X3R1bmUgPSBjb3J0 ZXhhNTM7CiAKIC8qIE1hc2sgdG8gc3BlY2lmeSB3aGljaCBpbnN0cnVjdGlvbiBzY2hlZHVsaW5n IG9wdGlvbnMgc2hvdWxkIGJlIHVzZWQuICAqLwotdW5zaWduZWQgbG9uZyBhYXJjaDY0X3R1bmVf ZmxhZ3MgPSAwOwordWludDY0X3QgYWFyY2g2NF90dW5lX2ZsYWdzID0gMDsKIAogLyogR2xvYmFs IGZsYWcgZm9yIFBDIHJlbGF0aXZlIGxvYWRzLiAgKi8KIGJvb2wgYWFyY2g2NF9wY3JlbGF0aXZl X2xpdGVyYWxfbG9hZHM7CkBAIC0xMTM5LDcgKzExMzksNyBAQCBzdHJ1Y3QgcHJvY2Vzc29yCiAg IGVudW0gYWFyY2g2NF9wcm9jZXNzb3Igc2NoZWRfY29yZTsKICAgZW51bSBhYXJjaDY0X2FyY2gg YXJjaDsKICAgdW5zaWduZWQgYXJjaGl0ZWN0dXJlX3ZlcnNpb247Ci0gIGNvbnN0IHVuc2lnbmVk IGxvbmcgZmxhZ3M7CisgIGNvbnN0IHVpbnQ2NF90IGZsYWdzOwogICBjb25zdCBzdHJ1Y3QgdHVu ZV9wYXJhbXMgKmNvbnN0IHR1bmU7CiB9OwogCkBAIC0xMTAzOSw3ICsxMTAzOSw3IEBAIHN0YXRp YyB2b2lkIGluaXRpYWxpemVfYWFyY2g2NF9jb2RlX21vZGVsIChzdHJ1Y3QgZ2NjX29wdGlvbnMg Kik7CiAKIHN0YXRpYyBlbnVtIGFhcmNoNjRfcGFyc2Vfb3B0X3Jlc3VsdAogYWFyY2g2NF9wYXJz ZV9hcmNoIChjb25zdCBjaGFyICp0b19wYXJzZSwgY29uc3Qgc3RydWN0IHByb2Nlc3NvciAqKnJl cywKLQkJICAgIHVuc2lnbmVkIGxvbmcgKmlzYV9mbGFncywgc3RkOjpzdHJpbmcgKmludmFsaWRf ZXh0ZW5zaW9uKQorCQkgICAgdWludDY0X3QgKmlzYV9mbGFncywgc3RkOjpzdHJpbmcgKmludmFs aWRfZXh0ZW5zaW9uKQogewogICBjb25zdCBjaGFyICpleHQ7CiAgIGNvbnN0IHN0cnVjdCBwcm9j ZXNzb3IgKmFyY2g7CkBAIC0xMTA2Miw3ICsxMTA2Miw3IEBAIGFhcmNoNjRfcGFyc2VfYXJjaCAo Y29uc3QgY2hhciAqdG9fcGFyc2UsIGNvbnN0IHN0cnVjdCBwcm9jZXNzb3IgKipyZXMsCiAgICAg ICBpZiAoc3RybGVuIChhcmNoLT5uYW1lKSA9PSBsZW4KIAkgICYmIHN0cm5jbXAgKGFyY2gtPm5h bWUsIHRvX3BhcnNlLCBsZW4pID09IDApCiAJewotCSAgdW5zaWduZWQgbG9uZyBpc2FfdGVtcCA9 IGFyY2gtPmZsYWdzOworCSAgdWludDY0X3QgaXNhX3RlbXAgPSBhcmNoLT5mbGFnczsKIAogCSAg aWYgKGV4dCAhPSBOVUxMKQogCSAgICB7CkBAIC0xMTA5NCw3ICsxMTA5NCw3IEBAIGFhcmNoNjRf cGFyc2VfYXJjaCAoY29uc3QgY2hhciAqdG9fcGFyc2UsIGNvbnN0IHN0cnVjdCBwcm9jZXNzb3Ig KipyZXMsCiAKIHN0YXRpYyBlbnVtIGFhcmNoNjRfcGFyc2Vfb3B0X3Jlc3VsdAogYWFyY2g2NF9w YXJzZV9jcHUgKGNvbnN0IGNoYXIgKnRvX3BhcnNlLCBjb25zdCBzdHJ1Y3QgcHJvY2Vzc29yICoq cmVzLAotCQkgICB1bnNpZ25lZCBsb25nICppc2FfZmxhZ3MsIHN0ZDo6c3RyaW5nICppbnZhbGlk X2V4dGVuc2lvbikKKwkJICAgdWludDY0X3QgKmlzYV9mbGFncywgc3RkOjpzdHJpbmcgKmludmFs aWRfZXh0ZW5zaW9uKQogewogICBjb25zdCBjaGFyICpleHQ7CiAgIGNvbnN0IHN0cnVjdCBwcm9j ZXNzb3IgKmNwdTsKQEAgLTExMTE2LDcgKzExMTE2LDcgQEAgYWFyY2g2NF9wYXJzZV9jcHUgKGNv bnN0IGNoYXIgKnRvX3BhcnNlLCBjb25zdCBzdHJ1Y3QgcHJvY2Vzc29yICoqcmVzLAogICAgIHsK ICAgICAgIGlmIChzdHJsZW4gKGNwdS0+bmFtZSkgPT0gbGVuICYmIHN0cm5jbXAgKGNwdS0+bmFt ZSwgdG9fcGFyc2UsIGxlbikgPT0gMCkKIAl7Ci0JICB1bnNpZ25lZCBsb25nIGlzYV90ZW1wID0g Y3B1LT5mbGFnczsKKwkgIHVpbnQ2NF90IGlzYV90ZW1wID0gY3B1LT5mbGFnczsKIAogCiAJICBp ZiAoZXh0ICE9IE5VTEwpCkBAIC0xMTcwMSw3ICsxMTcwMSw3IEBAIGFhcmNoNjRfcHJpbnRfaGlu dF9mb3JfZXh0ZW5zaW9ucyAoY29uc3Qgc3RkOjpzdHJpbmcgJnN0cikKIAogc3RhdGljIGJvb2wK IGFhcmNoNjRfdmFsaWRhdGVfbWNwdSAoY29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcHJv Y2Vzc29yICoqcmVzLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyAqaXNhX2ZsYWdzKQorCQkgICAg ICAgdWludDY0X3QgKmlzYV9mbGFncykKIHsKICAgc3RkOjpzdHJpbmcgaW52YWxpZF9leHRlbnNp b247CiAgIGVudW0gYWFyY2g2NF9wYXJzZV9vcHRfcmVzdWx0IHBhcnNlX3JlcwpAQCAtMTE4NDIs NyArMTE4NDIsNyBAQCBhYXJjaDY0X3ZhbGlkYXRlX21icmFuY2hfcHJvdGVjdGlvbiAoY29uc3Qg Y2hhciAqY29uc3Rfc3RyKQogCiBzdGF0aWMgYm9vbAogYWFyY2g2NF92YWxpZGF0ZV9tYXJjaCAo Y29uc3QgY2hhciAqc3RyLCBjb25zdCBzdHJ1Y3QgcHJvY2Vzc29yICoqcmVzLAotCQkJIHVuc2ln bmVkIGxvbmcgKmlzYV9mbGFncykKKwkJCSB1aW50NjRfdCAqaXNhX2ZsYWdzKQogewogICBzdGQ6 OnN0cmluZyBpbnZhbGlkX2V4dGVuc2lvbjsKICAgZW51bSBhYXJjaDY0X3BhcnNlX29wdF9yZXN1 bHQgcGFyc2VfcmVzCkBAIC0xMTk1Nyw4ICsxMTk1Nyw4IEBAIGFhcmNoNjRfY29udmVydF9zdmVf dmVjdG9yX2JpdHMgKGFhcmNoNjRfc3ZlX3ZlY3Rvcl9iaXRzX2VudW0gdmFsdWUpCiBzdGF0aWMg dm9pZAogYWFyY2g2NF9vdmVycmlkZV9vcHRpb25zICh2b2lkKQogewotICB1bnNpZ25lZCBsb25n IGNwdV9pc2EgPSAwOwotICB1bnNpZ25lZCBsb25nIGFyY2hfaXNhID0gMDsKKyAgdWludDY0X3Qg Y3B1X2lzYSA9IDA7CisgIHVpbnQ2NF90IGFyY2hfaXNhID0gMDsKICAgYWFyY2g2NF9pc2FfZmxh Z3MgPSAwOwogCiAgIGJvb2wgdmFsaWRfY3B1ID0gdHJ1ZTsKQEAgLTEyMTk4LDcgKzEyMTk4LDcg QEAgYWFyY2g2NF9vcHRpb25fcHJpbnQgKEZJTEUgKmZpbGUsIGludCBpbmRlbnQsIHN0cnVjdCBj bF90YXJnZXRfb3B0aW9uICpwdHIpCiB7CiAgIGNvbnN0IHN0cnVjdCBwcm9jZXNzb3IgKmNwdQog ICAgID0gYWFyY2g2NF9nZXRfdHVuZV9jcHUgKHB0ci0+eF9leHBsaWNpdF90dW5lX2NvcmUpOwot ICB1bnNpZ25lZCBsb25nIGlzYV9mbGFncyA9IHB0ci0+eF9hYXJjaDY0X2lzYV9mbGFnczsKKyAg dWludDY0X3QgaXNhX2ZsYWdzID0gcHRyLT54X2FhcmNoNjRfaXNhX2ZsYWdzOwogICBjb25zdCBz dHJ1Y3QgcHJvY2Vzc29yICphcmNoID0gYWFyY2g2NF9nZXRfYXJjaCAocHRyLT54X2V4cGxpY2l0 X2FyY2gpOwogICBzdGQ6OnN0cmluZyBleHRlbnNpb24KICAgICA9IGFhcmNoNjRfZ2V0X2V4dGVu c2lvbl9zdHJpbmdfZm9yX2lzYV9mbGFncyAoaXNhX2ZsYWdzLCBhcmNoLT5mbGFncyk7CkBAIC0x MjQ1MSw3ICsxMjQ1MSw3IEBAIHN0YXRpYyBib29sCiBhYXJjaDY0X2hhbmRsZV9hdHRyX2lzYV9m bGFncyAoY2hhciAqc3RyKQogewogICBlbnVtIGFhcmNoNjRfcGFyc2Vfb3B0X3Jlc3VsdCBwYXJz ZV9yZXM7Ci0gIHVuc2lnbmVkIGxvbmcgaXNhX2ZsYWdzID0gYWFyY2g2NF9pc2FfZmxhZ3M7Cisg IHVpbnQ2NF90IGlzYV9mbGFncyA9IGFhcmNoNjRfaXNhX2ZsYWdzOwogCiAgIC8qIFdlIGFsbG93 ICIrbm90aGluZyIgaW4gdGhlIGJlZ2lubmluZyB0byBjbGVhciBvdXQgYWxsIGFyY2hpdGVjdHVy YWwKICAgICAgZmVhdHVyZXMgaWYgdGhlIHVzZXIgd2FudHMgdG8gaGFuZHBpY2sgc3BlY2lmaWMg ZmVhdHVyZXMuICAqLwpAQCAtMTUyOTUsNyArMTUyOTUsNyBAQCBhYXJjaDY0X2RlY2xhcmVfZnVu Y3Rpb25fbmFtZSAoRklMRSAqc3RyZWFtLCBjb25zdCBjaGFyKiBuYW1lLAogICBjb25zdCBzdHJ1 Y3QgcHJvY2Vzc29yICp0aGlzX2FyY2gKICAgICA9IGFhcmNoNjRfZ2V0X2FyY2ggKHRhcmdfb3B0 aW9ucy0+eF9leHBsaWNpdF9hcmNoKTsKIAotICB1bnNpZ25lZCBsb25nIGlzYV9mbGFncyA9IHRh cmdfb3B0aW9ucy0+eF9hYXJjaDY0X2lzYV9mbGFnczsKKyAgdWludDY0X3QgaXNhX2ZsYWdzID0g dGFyZ19vcHRpb25zLT54X2FhcmNoNjRfaXNhX2ZsYWdzOwogICBzdGQ6OnN0cmluZyBleHRlbnNp b24KICAgICA9IGFhcmNoNjRfZ2V0X2V4dGVuc2lvbl9zdHJpbmdfZm9yX2lzYV9mbGFncyAoaXNh X2ZsYWdzLAogCQkJCQkJICB0aGlzX2FyY2gtPmZsYWdzKTsKQEAgLTE1MzM2LDcgKzE1MzM2LDcg QEAgYWFyY2g2NF9zdGFydF9maWxlICh2b2lkKQogCiAgIGNvbnN0IHN0cnVjdCBwcm9jZXNzb3Ig KmRlZmF1bHRfYXJjaAogICAgID0gYWFyY2g2NF9nZXRfYXJjaCAoZGVmYXVsdF9vcHRpb25zLT54 X2V4cGxpY2l0X2FyY2gpOwotICB1bnNpZ25lZCBsb25nIGRlZmF1bHRfaXNhX2ZsYWdzID0gZGVm YXVsdF9vcHRpb25zLT54X2FhcmNoNjRfaXNhX2ZsYWdzOworICB1aW50NjRfdCBkZWZhdWx0X2lz YV9mbGFncyA9IGRlZmF1bHRfb3B0aW9ucy0+eF9hYXJjaDY0X2lzYV9mbGFnczsKICAgc3RkOjpz dHJpbmcgZXh0ZW5zaW9uCiAgICAgPSBhYXJjaDY0X2dldF9leHRlbnNpb25fc3RyaW5nX2Zvcl9p c2FfZmxhZ3MgKGRlZmF1bHRfaXNhX2ZsYWdzLAogCQkJCQkJICBkZWZhdWx0X2FyY2gtPmZsYWdz KTsKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm9wdCBiL2djYy9jb25m aWcvYWFyY2g2NC9hYXJjaDY0Lm9wdAppbmRleCA3NzE5YzNiNjM1MjQyNjQyYWQxOTc1NzIxZTg2 OTlkODRmMzU5ZWVhLi4yYzhiMjJjM2IwOWE2MDAwZGM3OTkxMzU4NmRjYWEwMGI4MGI1MGI5IDEw MDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5vcHQKKysrIGIvZ2NjL2NvbmZp Zy9hYXJjaDY0L2FhcmNoNjQub3B0CkBAIC0zMSw3ICszMSw3IEBAIFRhcmdldFNhdmUKIGNvbnN0 IGNoYXIgKnhfYWFyY2g2NF9vdmVycmlkZV90dW5lX3N0cmluZwogCiBUYXJnZXRWYXJpYWJsZQot dW5zaWduZWQgbG9uZyBhYXJjaDY0X2lzYV9mbGFncyA9IDAKK3VpbnQ2NF90IGFhcmNoNjRfaXNh X2ZsYWdzID0gMAogCiBUYXJnZXRWYXJpYWJsZQogdW5zaWduZWQgYWFyY2g2NF9lbmFibGVfYnRp ID0gMgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2RyaXZlci1hYXJjaDY0LmMgYi9n Y2MvY29uZmlnL2FhcmNoNjQvZHJpdmVyLWFhcmNoNjQuYwppbmRleCA2ZjE2Nzc1ZjQ3ZDQ0Mjg4 YzQ1ZDFiYmYyY2MxYjU5ZGMwODUyOGFjLi5lZjRmMTgzNTI0ODY4YjNiMWVhNDQ0YTJmMTMyYWM2 M2QxMjM1YzNhIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQvZHJpdmVyLWFhcmNoNjQu YworKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvZHJpdmVyLWFhcmNoNjQuYwpAQCAtMzIsNyArMzIs NyBAQCBzdGQ6OnN0cmluZyBhYXJjaDY0X2dldF9leHRlbnNpb25fc3RyaW5nX2Zvcl9pc2FfZmxh Z3MgKHVuc2lnbmVkIGxvbmcsCiBzdHJ1Y3QgYWFyY2g2NF9hcmNoX2V4dGVuc2lvbgogewogICBj b25zdCBjaGFyICpleHQ7Ci0gIHVuc2lnbmVkIGludCBmbGFnOworICB1aW50NjRfdCBmbGFnOwog ICBjb25zdCBjaGFyICpmZWF0X3N0cmluZzsKIH07CiAKQEAgLTUyLDcgKzUyLDcgQEAgc3RydWN0 IGFhcmNoNjRfY29yZV9kYXRhCiAgIHVuc2lnbmVkIGNoYXIgaW1wbGVtZW50ZXJfaWQ7IC8qIEV4 YWN0bHkgOCBiaXRzICovCiAgIHVuc2lnbmVkIGludCBwYXJ0X25vOyAvKiAxMiBiaXRzICsgMTIg Yml0cyAqLwogICB1bnNpZ25lZCB2YXJpYW50OwotICBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdz OworICBjb25zdCB1aW50NjRfdCBmbGFnczsKIH07CiAKICNkZWZpbmUgQUFSQ0g2NF9CSUdfTElU VExFKEJJRywgTElUVExFKSBcCkBAIC03NSw3ICs3NSw3IEBAIHN0cnVjdCBhYXJjaDY0X2FyY2hf ZHJpdmVyX2luZm8KIHsKICAgY29uc3QgY2hhciogaWQ7CiAgIGNvbnN0IGNoYXIqIG5hbWU7Ci0g IGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgIGNvbnN0IHVpbnQ2NF90IGZsYWdzOwogfTsK IAogI2RlZmluZSBBQVJDSDY0X0FSQ0goTkFNRSwgQ09SRSwgQVJDSF9JREVOVCwgQVJDSF9SRVYs IEZMQUdTKSBcCkBAIC0xNzksOCArMTc5LDggQEAgaG9zdF9kZXRlY3RfbG9jYWxfY3B1IChpbnQg YXJnYywgY29uc3QgY2hhciAqKmFyZ3YpCiAgIHVuc2lnbmVkIGludCB2YXJpYW50c1syXSA9IHsg QUxMX1ZBUklBTlRTLCBBTExfVkFSSUFOVFMgfTsKICAgdW5zaWduZWQgaW50IG5fdmFyaWFudHMg PSAwOwogICBib29sIHByb2Nlc3NlZF9leHRzID0gZmFsc2U7Ci0gIHVuc2lnbmVkIGxvbmcgZXh0 ZW5zaW9uX2ZsYWdzID0gMDsKLSAgdW5zaWduZWQgbG9uZyBkZWZhdWx0X2ZsYWdzID0gMDsKKyAg dWludDY0X3QgZXh0ZW5zaW9uX2ZsYWdzID0gMDsKKyAgdWludDY0X3QgZGVmYXVsdF9mbGFncyA9 IDA7CiAKICAgZ2NjX2Fzc2VydCAoYXJnYyk7CiAKZGlmZiAtLWdpdCBhL2djYy9kb2MvaW52b2tl LnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCmluZGV4IDVlM2U4ODczZDM1NWI0NDNhMDFmY2Vi NWMzZGY0Y2I5OGRkMjZkNjAuLjZmZjU0OGEyZTkwMmU4NzZkOGUyYzZmNTZjNzUzODE5NDEzMDdm MzIgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvaW52b2tlLnRleGkKKysrIGIvZ2NjL2RvYy9pbnZva2Uu dGV4aQpAQCAtMTYwMDgsNiArMTYwMDgsMjEgQEAgZ2VuZXJhdGlvbi4gIFRoaXMgb3B0aW9uIGlz IGVuYWJsZWQgYnkgZGVmYXVsdCBmb3IgQG9wdGlvbnstbWFyY2g9YXJtdjguNS1hfS4KIEVuYWJs ZSB0aGUgQXJtdjgtYSBFeGVjdXRpb24gYW5kIERhdGEgUHJlZGljdGlvbiBSZXN0cmljdGlvbiBp bnN0cnVjdGlvbnMuCiBUaGlzIG9wdGlvbiBpcyBvbmx5IHRvIGVuYWJsZSB0aGUgZXh0ZW5zaW9u IGF0IHRoZSBhc3NlbWJsZXIgbGV2ZWwgYW5kIGRvZXMKIG5vdCBhZmZlY3QgY29kZSBnZW5lcmF0 aW9uLiAgVGhpcyBvcHRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0IGZvcgorQGl0ZW0gc3ZlMgor IEVuYWJsZSB0aGUgQXJtdjgtYSBTY2FsYWJsZSBWZWN0b3IgRXh0ZW5zaW9uIDIuIFRoaXMgb3B0 aW9uIGlzIG9ubHkgdG8gZW5hYmxlCisgdGhlIGV4dGVuc2lvbiBhdCB0aGUgYXNzZW1ibGVyIGxl dmVsIGFuZCBkb2VzIG5vdCBhZmZlY3QgY29kZSBnZW5lcmF0aW9uLgorQGl0ZW0gYml0cGVybQor IEVuYWJsZSBTVkUyIGJpdHBlcm0gRXh0ZW5zaW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHRvIGVu YWJsZSB0aGUgZXh0ZW5zaW9uIGF0CisgdGhlIGFzc2VtYmxlciBsZXZlbCBhbmQgZG9lcyBub3Qg YWZmZWN0IGNvZGUgZ2VuZXJhdGlvbi4KK0BpdGVtIHN2ZTItc200CisgRW5hYmxlIFNWRTIgc200 IEV4dGVuc2lvbi4gVGhpcyBvcHRpb24gaXMgb25seSB0byBlbmFibGUgdGhlIGV4dGVuc2lvbiBh dCB0aGUKKyBhc3NlbWJsZXIgbGV2ZWwgYW5kIGRvZXMgbm90IGFmZmVjdCBjb2RlIGdlbmVyYXRp b24uCitAaXRlbSBzdmUyLWFlcworIEVuYWJsZSBTVkUyIGFlcyBFeHRlbnNpb24uIFRoaXMgb3B0 aW9uIGlzIG9ubHkgdG8gZW5hYmxlIHRoZSBleHRlbnNpb24gYXQgdGhlCisgYXNzZW1ibGVyIGxl dmVsIGFuZCBkb2VzIG5vdCBhZmZlY3QgY29kZSBnZW5lcmF0aW9uLgorQGl0ZW0gc3ZlMi1zaGEz CisgRW5hYmxlIFNWRTIgc2hhMyBFeHRlbnNpb24uIFRoaXMgb3B0aW9uIGlzIG9ubHkgdG8gZW5h YmxlIHRoZSBleHRlbnNpb24gYXQgdGhlCisgYXNzZW1ibGVyIGxldmVsIGFuZCBkb2VzIG5vdCBh ZmZlY3QgY29kZSBnZW5lcmF0aW9uLgogQG9wdGlvbnstbWFyY2g9YXJtdjguNS1hfS4KIAogQGVu ZCB0YWJsZQoK