mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 18:06:05 +00:00
[builtins] Mark int_lib.h
builtins as static
(#69305)
Mark the following symbols as `static` to prevent duplicate definitions: `__builtin_ctz` `__builtin_clz` `__builtin_clzll` `__builtin_sadd_overflow` >Without these then all of these functions show up in all object files which include int_lib.h on Windows. This'll help prevent duplicate symbols by ensuring they're not exported. See: https://github.com/rust-lang/compiler-builtins/issues/167 https://reviews.llvm.org/D34599
This commit is contained in:
parent
9ff4be640f
commit
d1a2f11feb
@ -119,14 +119,14 @@ COMPILER_RT_ABI tu_int __udivmodti4(tu_int a, tu_int b, tu_int *rem);
|
||||
#if defined(_MSC_VER) && !defined(__clang__)
|
||||
#include <intrin.h>
|
||||
|
||||
int __inline __builtin_ctz(uint32_t value) {
|
||||
static int __inline __builtin_ctz(uint32_t value) {
|
||||
unsigned long trailing_zero = 0;
|
||||
if (_BitScanForward(&trailing_zero, value))
|
||||
return trailing_zero;
|
||||
return 32;
|
||||
}
|
||||
|
||||
int __inline __builtin_clz(uint32_t value) {
|
||||
static int __inline __builtin_clz(uint32_t value) {
|
||||
unsigned long leading_zero = 0;
|
||||
if (_BitScanReverse(&leading_zero, value))
|
||||
return 31 - leading_zero;
|
||||
@ -134,14 +134,14 @@ int __inline __builtin_clz(uint32_t value) {
|
||||
}
|
||||
|
||||
#if defined(_M_ARM) || defined(_M_X64)
|
||||
int __inline __builtin_clzll(uint64_t value) {
|
||||
static int __inline __builtin_clzll(uint64_t value) {
|
||||
unsigned long leading_zero = 0;
|
||||
if (_BitScanReverse64(&leading_zero, value))
|
||||
return 63 - leading_zero;
|
||||
return 64;
|
||||
}
|
||||
#else
|
||||
int __inline __builtin_clzll(uint64_t value) {
|
||||
static int __inline __builtin_clzll(uint64_t value) {
|
||||
if (value == 0)
|
||||
return 64;
|
||||
uint32_t msh = (uint32_t)(value >> 32);
|
||||
@ -154,7 +154,7 @@ int __inline __builtin_clzll(uint64_t value) {
|
||||
|
||||
#define __builtin_clzl __builtin_clzll
|
||||
|
||||
bool __inline __builtin_sadd_overflow(int x, int y, int *result) {
|
||||
static bool __inline __builtin_sadd_overflow(int x, int y, int *result) {
|
||||
if ((x < 0) != (y < 0)) {
|
||||
*result = x + y;
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user