diff --git a/libavcodec/cabac.h b/libavcodec/cabac.h
index ea4ac54a233850fe6e9c22245d4612dbb16a8c3b..2794626c35dc7c958e8ff6503a9bc4482e973b61 100644
--- a/libavcodec/cabac.h
+++ b/libavcodec/cabac.h
@@ -637,7 +637,7 @@ static int av_unused get_cabac_bypass(CABACContext *c){
 
 
 static av_always_inline int get_cabac_bypass_sign(CABACContext *c, int val){
-#if ARCH_X86 && !(defined(PIC) && defined(__GNUC__))
+#if ARCH_X86 && HAVE_EBX_AVAILABLE
     __asm__ volatile(
         "movl "RANGE    "(%1), %%ebx            \n\t"
         "movl "LOW      "(%1), %%eax            \n\t"
diff --git a/libavcodec/msmpeg4.c b/libavcodec/msmpeg4.c
index 71de34ca45ab03ef959867930cf5cd0908944db5..8c0da0ae1068c04107506114d28d56d56709d737 100644
--- a/libavcodec/msmpeg4.c
+++ b/libavcodec/msmpeg4.c
@@ -31,6 +31,7 @@
 #include "dsputil.h"
 #include "mpegvideo.h"
 #include "msmpeg4.h"
+#include "libavutil/x86_cpu.h"
 
 /*
  * You can also call this codec : MPEG4 with a twist !
@@ -647,7 +648,7 @@ static inline int msmpeg4_pred_dc(MpegEncContext * s, int n,
        necessitate to modify mpegvideo.c. The problem comes from the
        fact they decided to store the quantized DC (which would lead
        to problems if Q could vary !) */
-#if ARCH_X86 && !defined PIC
+#if ARCH_X86 && HAVE_7REGS && HAVE_EBX_AVAILABLE
     __asm__ volatile(
         "movl %3, %%eax         \n\t"
         "shrl $1, %%eax         \n\t"