]> Git Repo - secp256k1.git/commitdiff
build: fix x86_64 asm detection for some compilers
authorCory Fields <[email protected]>
Mon, 4 Jan 2016 16:36:46 +0000 (11:36 -0500)
committerCory Fields <[email protected]>
Mon, 4 Jan 2016 16:40:00 +0000 (11:40 -0500)
I Noticed this on OSX with clang, though it likely happens elsewhere as well.
The result is disabled x86_64 asm.

Due to missing escaping, this $0 was interpreted as the function name
SECP_64BIT_ASM_CHECK, causing the compile-check to be broken on some compilers.

The actual check looked like this:

int main()
{
  uint64_t a = 11, tmp;
  __asm__ __volatile__("movq SECP_64BIT_ASM_CHECKx100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx");
  return 0;
}

It seems even more odd that it compiled anywhere.

build-aux/m4/bitcoin_secp.m4

index d41bbb648708ba06cd0285d96b66ca532348e1e8..b25d8adb92c7fd207a7f142d2328940d222d57b7 100644 (file)
@@ -3,13 +3,13 @@ AC_DEFUN([SECP_INT128_CHECK],[
 has_int128=$ac_cv_type___int128
 ])
 
-dnl 
+dnl escape "$0x" below using the m4 quadrigaph @S|@, and escape it again with a \ for the shell.
 AC_DEFUN([SECP_64BIT_ASM_CHECK],[
 AC_MSG_CHECKING(for x86_64 assembly availability)
 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
   #include <stdint.h>]],[[
   uint64_t a = 11, tmp;
-  __asm__ __volatile__("movq $0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx");
+  __asm__ __volatile__("movq \@S|@0x100000000,%1; mulq %%rsi" : "+a"(a) : "S"(tmp) : "cc", "%rdx");
   ]])],[has_64bit_asm=yes],[has_64bit_asm=no])
 AC_MSG_RESULT([$has_64bit_asm])
 ])
This page took 0.025325 seconds and 4 git commands to generate.