# Copyright (c) 2026 Jakub Juszczakiewicz
# All rights reserved.

if (${ALG_ARCH} STREQUAL "POSIX_AMD64")
list(APPEND SOURCE_FILES
  src/bits/bits_posix_amd64.asm
)
else()
list(APPEND SOURCE_FILES
  src/bits/bits.c
)

check_source_compiles(C "
int main()
{
  int a = 10;
  return __builtin_clzll(a);
}
" HAVE_BIN_CLZLL)
if(HAVE_BIN_CLZLL)
 add_definitions(-DHAVE_BIN_CLZLL)
endif()

check_source_compiles(C "
int main()
{
  int a = 10;
  return __builtin_ctzll(a);
}
" HAVE_BIN_CTZLL)
if(HAVE_BIN_CTZLL)
 add_definitions(-DHAVE_BIN_CTZLL)
endif()

check_source_compiles(C "
#include <intrin.h>

int main()
{
  int a = 10, b = 0;
  return _BitScanForward(&b, a);
}
" HAVE_BIN_BSF)
if(HAVE_BIN_BSF)
 add_definitions(-DHAVE_BIN_BSF)
endif()

check_source_compiles(C "
#include <intrin.h>

int main()
{
  int a = 10,b ;
  return _BitScanReverse(&b, a);
}
" HAVE_BIN_BSR)
if(HAVE_BIN_BSR)
 add_definitions(-DHAVE_BIN_BSR)
endif()
endif()