x86: use nop cpu directives only if supported
authorMans Rullgard <mans@mansr.com>
Sun, 5 Aug 2012 23:34:51 +0000 (00:34 +0100)
committerMans Rullgard <mans@mansr.com>
Tue, 7 Aug 2012 14:22:20 +0000 (15:22 +0100)
nasm does not support 'CPU foonop' directives.  This adds a configure
test for the directive and uses it only if supported.

Signed-off-by: Mans Rullgard <mans@mansr.com>
configure
libavutil/x86/x86inc.asm

index e9058d4..a97198c 100755 (executable)
--- a/configure
+++ b/configure
@@ -1084,6 +1084,7 @@ HAVE_LIST="
     closesocket
     cmov
     cpuid
+    cpunop
     dcbzl
     dev_bktr_ioctl_bt848_h
     dev_bktr_ioctl_meteor_h
@@ -2889,6 +2890,7 @@ EOF
             die "yasm not found, use --disable-yasm for a crippled build"
         check_yasm "vextractf128 xmm0, ymm0, 0" || disable avx
         check_yasm "vfmaddps ymm0, ymm1, ymm2, ymm3" || disable fma4
+        check_yasm "CPU amdnop" && enable cpunop
     fi
 
     case "$cpu" in
index 86c406f..e729924 100644 (file)
     default rel
 %endif
 
+%macro CPUNOP 1
+    %if HAVE_CPUNOP
+        CPU %1
+    %endif
+%endmacro
+
 ; Always use long nops (reduces 0x90 spam in disassembly on x86_32)
-CPU amdnop
+CPUNOP amdnop
 
 ; Macros to eliminate most code duplication between x86_32 and x86_64:
 ; Currently this works only for leaf functions which load all their arguments
@@ -589,7 +595,7 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits
 ; All subsequent functions (up to the next INIT_CPUFLAGS) is built for the specified cpu.
 ; You shouldn't need to invoke this macro directly, it's a subroutine for INIT_MMX &co.
 %macro INIT_CPUFLAGS 0-2
-    CPU amdnop
+    CPUNOP amdnop
     %if %0 >= 1
         %xdefine cpuname %1
         %assign cpuflags cpuflags_%1
@@ -612,7 +618,7 @@ SECTION .note.GNU-stack noalloc noexec nowrite progbits
             %define movu lddqu
         %endif
         %if notcpuflag(mmx2)
-            CPU basicnop
+            CPUNOP basicnop
         %endif
     %else
         %xdefine SUFFIX