Skip to content

Commit 21d2025

Browse files
committed
Use more builtin functions if available
Signed-off-by: Steffen Jaeckel <s@jaeckel.eu>
1 parent 3b16c88 commit 21d2025

File tree

5 files changed

+32
-1
lines changed

5 files changed

+32
-1
lines changed

src/encauth/ocb/ocb_ntz.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
*/
1818
int ocb_ntz(unsigned long x)
1919
{
20+
#if defined(LTC_HAVE_CTZL_BUILTIN)
21+
if (x == 0)
22+
return sizeof(unsigned long) * CHAR_BIT;
23+
return __builtin_ctzl(x);
24+
#else
2025
int c;
2126
x &= 0xFFFFFFFFUL;
2227
c = 0;
@@ -25,6 +30,7 @@ int ocb_ntz(unsigned long x)
2530
x >>= 1;
2631
}
2732
return c;
33+
#endif
2834
}
2935

3036
#endif

src/encauth/ocb3/ocb3_int_ntz.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
*/
1717
int ocb3_int_ntz(unsigned long x)
1818
{
19+
#if defined(LTC_HAVE_CTZL_BUILTIN)
20+
if (x == 0)
21+
return sizeof(unsigned long) * CHAR_BIT;
22+
return __builtin_ctzl(x);
23+
#else
1924
int c;
2025
x &= 0xFFFFFFFFUL;
2126
c = 0;
@@ -24,6 +29,7 @@ int ocb3_int_ntz(unsigned long x)
2429
x >>= 1;
2530
}
2631
return c;
32+
#endif
2733
}
2834

2935
#endif

src/headers/tomcrypt_cfg.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,14 @@ typedef unsigned long ltc_mp_digit;
295295
#define LTC_HAVE_ROTATE_BUILTIN
296296
#endif
297297

298+
#if __has_builtin(__builtin_clzl)
299+
#define LTC_HAVE_CLZL_BUILTIN
300+
#endif
301+
302+
#if __has_builtin(__builtin_ctzl)
303+
#define LTC_HAVE_CTZL_BUILTIN
304+
#endif
305+
298306
#if defined(__GNUC__)
299307
#define LTC_ALIGN(n) __attribute__((aligned(n)))
300308
#else

src/mac/pmac/pmac_ntz.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
*/
1515
int pmac_ntz(unsigned long x)
1616
{
17+
#if defined(LTC_HAVE_CTZL_BUILTIN)
18+
if (x == 0)
19+
return sizeof(unsigned long) * CHAR_BIT;
20+
return __builtin_ctzl(x);
21+
#else
1722
int c;
1823
x &= 0xFFFFFFFFUL;
1924
c = 0;
@@ -22,6 +27,7 @@ int pmac_ntz(unsigned long x)
2227
x >>= 1;
2328
}
2429
return c;
30+
#endif
2531
}
2632

2733
#endif

src/pk/asn1/der/object_identifier/der_length_object_identifier.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@
1111

1212
unsigned long der_object_identifier_bits(unsigned long x)
1313
{
14+
#if defined(LTC_HAVE_CLZL_BUILTIN)
15+
if (x == 0)
16+
return 0;
17+
return sizeof(unsigned long) * CHAR_BIT - __builtin_clzl(x);
18+
#else
1419
unsigned long c;
1520
x &= (unsigned long)-1;
1621
c = 0;
@@ -19,9 +24,9 @@ unsigned long der_object_identifier_bits(unsigned long x)
1924
x >>= 1;
2025
}
2126
return c;
27+
#endif
2228
}
2329

24-
2530
/**
2631
Gets length of DER encoding of Object Identifier
2732
@param nwords The number of OID words

0 commit comments

Comments
 (0)