<div dir="ltr"><div dir="ltr"><br></div>I noted a few cases where I don't think the value used is interesting<div>enough or an edge case. Hopefully I caught them all. </div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Nov 2, 2023 at 7:12 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Test more compiler builtins which may use integer library routins:<br></blockquote><div><br></div><div>routines. </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
<a href="https://gcc.gnu.org/onlinedocs/gccint/Integer-library-routines.html" rel="noreferrer" target="_blank">https://gcc.gnu.org/onlinedocs/gccint/Integer-library-routines.html</a><br>
<br>
Update #3716.<br>
---<br>
 testsuites/unit/tc-compiler-builtins.c | 377 ++++++++++++++++++++++++-<br>
 1 file changed, 369 insertions(+), 8 deletions(-)<br>
<br>
diff --git a/testsuites/unit/tc-compiler-builtins.c b/testsuites/unit/tc-compiler-builtins.c<br>
index 13a9c4a248..4bf8570eb0 100644<br>
--- a/testsuites/unit/tc-compiler-builtins.c<br>
+++ b/testsuites/unit/tc-compiler-builtins.c<br>
@@ -78,6 +78,39 @@<br>
  *<br>
  * - Check the return value of __builtin_ctz() for a sample set of inputs.<br>
  *<br>
+ * - Check the return value of __builtin_ctzll() for a sample set of inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_ffs() for a sample set of inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_ffsll() for a sample set of inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_parity() for a sample set of inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_parityll() for a sample set of inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_popcount() for a sample set of inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_popcountll() for a sample set of<br>
+ *   inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_bswap32() for a sample set of inputs.<br>
+ *<br>
+ * - Check the return value of __builtin_bswap64() for a sample set of inputs.<br>
+ *<br>
+ * - Check signed 64-bit comparisons for a sample set of values.<br>
+ *<br>
+ * - Check unsigned 64-bit comparisons for a sample set of values.<br>
+ *<br>
+ * - Check signed 64-bit arithmetic left shift for a sample set of values.<br>
+ *<br>
+ * - Check signed 64-bit arithmetic right shift for a sample set of values.<br>
+ *<br>
+ * - Check unsigned 64-bit logical right shift for a sample set of values.<br>
+ *<br>
+ * - Check signed 64-bit multiplication for a sample set of values.<br>
+ *<br>
+ * - Check signed 64-bit negation for a sample set of values.<br>
+ *<br>
  * - Check signed 64-bit divisions for a sample set of values.<br>
  *<br>
  * - Check unsigned 64-bit divisions for a sample set of values.<br>
@@ -180,22 +213,334 @@ static void CompilerUnitBuiltins_Action_1( void )<br>
  */<br>
 static void CompilerUnitBuiltins_Action_2( void )<br>
 {<br>
-  volatile int n;<br>
+  volatile unsigned int n;<br>
<br>
-  n = 1;<br>
+  n = 1U;<br>
   T_eq_int( __builtin_ctz( n ), 0 );<br>
<br>
-  n = 1 << 31;<br>
+  n = 1U << 31;<br>
   T_eq_int( __builtin_ctz( n ), 31 );<br>
<br>
-  n = ~0;<br>
+  n = ~0U;<br>
   T_eq_int( __builtin_ctz( n ), 0 );<br>
 }<br>
<br>
 /**<br>
- * @brief Check signed 64-bit divisions for a sample set of values.<br>
+ * @brief Check the return value of __builtin_ctzll() for a sample set of<br>
+ *   inputs.<br>
  */<br>
 static void CompilerUnitBuiltins_Action_3( void )<br>
+{<br>
+  volatile unsigned long long n;<br>
+<br>
+  n = 1ULL;<br>
+  T_eq_int( __builtin_ctzll( n ), 0 );<br>
+<br>
+  n = 1ULL << 31;<br>
+  T_eq_int( __builtin_ctzll( n ), 31 );<br>
+<br>
+  n = 1ULL << 32;<br>
+  T_eq_int( __builtin_ctzll( n ), 32 );<br>
+<br>
+  n = 1ULL << 63;<br>
+  T_eq_int( __builtin_ctzll( n ), 63 );<br>
+<br>
+  n = ~0ULL;<br>
+  T_eq_int( __builtin_ctzll( n ), 0 );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_ffs() for a sample set of inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_4( void )<br>
+{<br>
+  volatile unsigned int n;<br>
+<br>
+  n = 1U;<br>
+  T_eq_int( __builtin_ffs( n ), 1 );<br>
+<br>
+  n = 1U << 31;<br>
+  T_eq_int( __builtin_ffs( n ), 32 );<br>
+<br>
+  n = 0U;<br>
+  T_eq_int( __builtin_ffs( n ), 0 );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_ffsll() for a sample set of<br>
+ *   inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_5( void )<br>
+{<br>
+  volatile unsigned long long n;<br>
+<br>
+  n = 1ULL;<br>
+  T_eq_int( __builtin_ffsll( n ), 1 );<br>
+<br>
+  n = 1ULL << 31;<br>
+  T_eq_int( __builtin_ffsll( n ), 32 );<br>
+<br>
+  n = 1ULL << 32;<br>
+  T_eq_int( __builtin_ffsll( n ), 33 );<br>
+<br>
+  n = 1ULL << 63;<br>
+  T_eq_int( __builtin_ffsll( n ), 64 );<br>
+<br>
+  n = 0ULL;<br>
+  T_eq_int( __builtin_ffsll( n ), 0 );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_parity() for a sample set of<br>
+ *   inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_6( void )<br>
+{<br>
+  volatile unsigned int n;<br>
+<br>
+  n = 1U;<br>
+  T_eq_int( __builtin_parity( n ), 1 );<br>
+<br>
+  n = ~0U;<br>
+  T_eq_int( __builtin_parity( n ), 0 );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_parityll() for a sample set of<br>
+ *   inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_7( void )<br>
+{<br>
+  volatile unsigned long long n;<br>
+<br>
+  n = 1ULL;<br>
+  T_eq_int( __builtin_parityll( n ), 1 );<br>
+<br>
+  n = ~0ULL;<br>
+  T_eq_int( __builtin_parityll( n ), 0 );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_popcount() for a sample set of<br>
+ *   inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_8( void )<br>
+{<br>
+  volatile unsigned int n;<br>
+<br>
+  n = 0U;<br>
+  T_eq_int( __builtin_popcount( n ), 0 );<br>
+<br>
+  n = 1U;<br>
+  T_eq_int( __builtin_popcount( n ), 1 );<br>
+<br>
+  n = ~0U;<br>
+  T_eq_int( __builtin_popcount( n ), 32 );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_popcountll() for a sample set of<br>
+ *   inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_9( void )<br>
+{<br>
+  volatile unsigned long long n;<br>
+<br>
+  n = 0ULL;<br>
+  T_eq_int( __builtin_popcountll( n ), 0 );<br>
+<br>
+  n = 1ULL;<br>
+  T_eq_int( __builtin_popcountll( n ), 1 );<br>
+<br>
+  n = ~0ULL;<br>
+  T_eq_int( __builtin_popcountll( n ), 64 );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_bswap32() for a sample set of<br>
+ *   inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_10( void )<br>
+{<br>
+  volatile int32_t n;<br>
+<br>
+  n = INT32_C( 0 );<br>
+  T_eq_i32( __builtin_bswap32( n ), n );<br>
+<br>
+  n = INT32_C( 1 );<br>
+  T_eq_i32( __builtin_bswap32( n ), n << 24 );<br>
+<br>
+  n = ~INT32_C( 0 );<br>
+  T_eq_i32( __builtin_bswap32( n ), n );<br></blockquote><div><br></div><div>More interesting value needed to see if the other bytes changed.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+}<br>
+<br>
+/**<br>
+ * @brief Check the return value of __builtin_bswap64() for a sample set of<br>
+ *   inputs.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_11( void )<br>
+{<br>
+  volatile int64_t n;<br>
+<br>
+  n = INT64_C( 0 );<br>
+  T_eq_i64( __builtin_bswap64( n ), n );<br>
+<br>
+  n = INT64_C( 1 );<br>
+  T_eq_i64( __builtin_bswap64( n ), n << 56 );<br>
+<br>
+  n = ~INT64_C( 0 );<br>
+  T_eq_i64( __builtin_bswap64( n ), n );<br></blockquote><div><br></div><div>You probably should check some value that uses more than one of the 8 </div><div>bytes in the data type.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+}<br>
+<br>
+/**<br>
+ * @brief Check signed 64-bit comparisons for a sample set of values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_12( void )<br>
+{<br>
+  volatile int64_t a;<br>
+  volatile int64_t b;<br>
+<br>
+  a = INT64_C( 0 );<br>
+  b = INT64_C( 0 );<br>
+  T_false( a < b );<br>
+<br>
+  a = INT64_C( 0 );<br>
+  b = INT64_C( 1 );<br>
+  T_true( a < b );<br></blockquote><div><br></div><div>Same. </div><div><br></div><div>I tried to catch cases below here when the values tested might not</div><div>be interesting enough or an edge case.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+}<br>
+<br>
+/**<br>
+ * @brief Check unsigned 64-bit comparisons for a sample set of values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_13( void )<br>
+{<br>
+  volatile uint64_t a;<br>
+  volatile uint64_t b;<br>
+<br>
+  a = UINT64_C( 0 );<br>
+  b = UINT64_C( 0 );<br>
+  T_false( a < b );<br>
+<br>
+  a = UINT64_C( 0 );<br>
+  b = UINT64_C( 1 );<br>
+  T_true( a < b );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check signed 64-bit arithmetic left shift for a sample set of values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_14( void )<br>
+{<br>
+  volatile int64_t i;<br>
+  volatile int s;<br>
+<br>
+  i = INT64_C( 1 );<br>
+  s = 0;<br>
+  T_eq_i64( i << s, INT64_C( 1 ) );<br>
+<br>
+  i = -INT64_C( 1 );<br>
+  s = 0;<br>
+  T_eq_i64( i << s, -INT64_C( 1 ) );<br>
+<br>
+  i = INT64_C( 1 );<br>
+  s = 1;<br>
+  T_eq_i64( i << s, INT64_C( 2 ) );<br>
+<br>
+  i = -INT64_C( 1 );<br>
+  s = 1;<br>
+  T_eq_i64( i << s, -INT64_C( 2 ) );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check signed 64-bit arithmetic right shift for a sample set of<br>
+ *   values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_15( void )<br>
+{<br>
+  volatile int64_t i;<br>
+  volatile int s;<br>
+<br>
+  i = INT64_C( 1 );<br>
+  s = 0;<br>
+  T_eq_i64( i >> s, INT64_C( 1 ) );<br>
+<br>
+  i = -INT64_C( 1 );<br>
+  s = 0;<br>
+  T_eq_i64( i >> s, -INT64_C( 1 ) );<br>
+<br>
+  i = INT64_C( 2 );<br>
+  s = 1;<br>
+  T_eq_i64( i >> s, INT64_C( 1 ) );<br>
+<br>
+  i = -INT64_C( 2 );<br>
+  s = 1;<br>
+  T_eq_i64( i >> s, -INT64_C( 1 ) );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check unsigned 64-bit logical right shift for a sample set of values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_16( void )<br>
+{<br>
+  volatile uint64_t i;<br>
+  volatile int s;<br>
+<br>
+  i = UINT64_C( 1 );<br>
+  s = 0;<br>
+  T_eq_u64( i >> s, UINT64_C( 1 ) );<br>
+<br>
+  i = -UINT64_C( 1 );<br>
+  s = 0;<br>
+  T_eq_u64( i >> s, UINT64_C( 0xffffffffffffffff ) );<br>
+<br>
+  i = UINT64_C( 2 );<br>
+  s = 1;<br>
+  T_eq_u64( i >> s, UINT64_C( 1 ) );<br>
+<br>
+  i = -UINT64_C( 2 );<br>
+  s = 1;<br>
+  T_eq_u64( i >> s, UINT64_C( 0x7fffffffffffffff ) );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check signed 64-bit multiplication for a sample set of values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_17( void )<br>
+{<br>
+  volatile int64_t a;<br>
+  volatile int64_t b;<br>
+<br>
+  a = INT64_C( 1 );<br>
+  b = INT64_C( 1 );<br>
+  T_eq_i64( a * b, INT64_C( 1 ) );<br>
+<br>
+  a = INT64_C( 1 );<br>
+  b = INT64_C( 0 );<br>
+  T_eq_i64( a * b, INT64_C( 0 ) );<br>
+<br>
+  a = INT64_C( 0 );<br>
+  b = INT64_C( 1 );<br>
+  T_eq_i64( a * b, INT64_C( 0 ) );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check signed 64-bit negation for a sample set of values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_18( void )<br>
+{<br>
+  volatile int64_t i;<br>
+<br>
+  i = INT64_C( 1 );<br>
+  T_eq_i64( -i, -INT64_C( 1 ) );<br>
+<br>
+  i = -INT64_C( 1 );<br>
+  T_eq_i64( -i, INT64_C( 1 ) );<br>
+}<br>
+<br>
+/**<br>
+ * @brief Check signed 64-bit divisions for a sample set of values.<br>
+ */<br>
+static void CompilerUnitBuiltins_Action_19( void )<br>
 {<br>
   volatile int64_t n;<br>
   volatile int64_t d;<br>
@@ -304,7 +649,7 @@ static void CompilerUnitBuiltins_Action_3( void )<br>
 /**<br>
  * @brief Check unsigned 64-bit divisions for a sample set of values.<br>
  */<br>
-static void CompilerUnitBuiltins_Action_4( void )<br>
+static void CompilerUnitBuiltins_Action_20( void )<br>
 {<br>
   volatile uint64_t n;<br>
   volatile uint64_t d;<br>
@@ -381,7 +726,7 @@ static void CompilerUnitBuiltins_Action_4( void )<br>
 /**<br>
  * @brief Check signed 64-bit modulo operations for a sample set of values.<br>
  */<br>
-static void CompilerUnitBuiltins_Action_5( void )<br>
+static void CompilerUnitBuiltins_Action_21( void )<br>
 {<br>
   volatile int64_t n;<br>
   volatile int64_t d;<br>
@@ -502,7 +847,7 @@ static void CompilerUnitBuiltins_Action_5( void )<br>
 /**<br>
  * @brief Check unsigned 64-bit modulo operations for a sample set of values.<br>
  */<br>
-static void CompilerUnitBuiltins_Action_6( void )<br>
+static void CompilerUnitBuiltins_Action_22( void )<br>
 {<br>
   volatile uint64_t n;<br>
   volatile uint64_t d;<br>
@@ -560,6 +905,22 @@ T_TEST_CASE_FIXTURE( CompilerUnitBuiltins, &CompilerUnitBuiltins_Fixture )<br>
   CompilerUnitBuiltins_Action_4();<br>
   CompilerUnitBuiltins_Action_5();<br>
   CompilerUnitBuiltins_Action_6();<br>
+  CompilerUnitBuiltins_Action_7();<br>
+  CompilerUnitBuiltins_Action_8();<br>
+  CompilerUnitBuiltins_Action_9();<br>
+  CompilerUnitBuiltins_Action_10();<br>
+  CompilerUnitBuiltins_Action_11();<br>
+  CompilerUnitBuiltins_Action_12();<br>
+  CompilerUnitBuiltins_Action_13();<br>
+  CompilerUnitBuiltins_Action_14();<br>
+  CompilerUnitBuiltins_Action_15();<br>
+  CompilerUnitBuiltins_Action_16();<br>
+  CompilerUnitBuiltins_Action_17();<br>
+  CompilerUnitBuiltins_Action_18();<br>
+  CompilerUnitBuiltins_Action_19();<br>
+  CompilerUnitBuiltins_Action_20();<br>
+  CompilerUnitBuiltins_Action_21();<br>
+  CompilerUnitBuiltins_Action_22();<br>
 }<br>
<br>
 /** @} */<br>
-- <br>
2.35.3<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div></div></div>