From 180d43bc67cec071c5a0f4807aa66f7b6242edc1 Mon Sep 17 00:00:00 2001 From: Mans Rullgard Date: Mon, 6 Aug 2012 00:34:51 +0100 Subject: [PATCH] x86: use nop cpu directives only if supported 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 --- configure | 2 ++ libavutil/x86/x86inc.asm | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/configure b/configure index e9058d4c45..a97198c9ef 100755 --- 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 diff --git a/libavutil/x86/x86inc.asm b/libavutil/x86/x86inc.asm index 86c406f1df..e729924631 100644 --- a/libavutil/x86/x86inc.asm +++ b/libavutil/x86/x86inc.asm @@ -91,8 +91,14 @@ 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