[PATCH] [aarch64] Introduce flags for SVE2.

Matthew Malcomson Matthew.Malcomson@arm.com
Wed May 15 08:47:00 GMT 2019


> Matthew Malcomson <Matthew.Malcomson@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.malcomson@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



More information about the Gcc-patches mailing list