REG_* macros are shared between x86_32 and x32, since in almost all
  cases GRPs are used for pointers or offsets.
x86_reg equivalent to intptr_t, 64 bit only for x64

new macro REG_PTR_MOD
 - similar to OPSIZE, this one is used for operands,
   forces operand size to 64 bit on x64, 32 bit otherwise
new macros REG8, REG_8
 - refer to r8 on x64 and r8d on x32
new typedef x86_native_reg
 - 64 bit on all 64 bit arches, 32 bit otherwise
   replaces x86_reg where appropriate
new macros REG_r[abcdDS], REG_rBP, REG_rSP
 - refer to 64 bit GPRs on all 64 bit arches, 32 bit otherwise

Signed-off-by: Matthias Räncker <[email protected]>
---
 libavutil/x86/asm.h | 30 ++++++++++++++++++++++++++++--
 1 file changed, 28 insertions(+), 2 deletions(-)

diff --git a/libavutil/x86/asm.h b/libavutil/x86/asm.h
index a43ab3c..be058da 100644
--- a/libavutil/x86/asm.h
+++ b/libavutil/x86/asm.h
@@ -24,14 +24,16 @@
 #include <stdint.h>
 #include "config.h"
 
-#if ARCH_X86_64
+#if ARCH_X86_64_X64
 #    define OPSIZE "q"
+#    define REG_PTR_MOD "q"
 #    define REG_a "rax"
 #    define REG_b "rbx"
 #    define REG_c "rcx"
 #    define REG_d "rdx"
 #    define REG_D "rdi"
 #    define REG_S "rsi"
+#    define REG_8 "r8"
 #    define PTR_SIZE "8"
 typedef int64_t x86_reg;
 
@@ -43,16 +45,19 @@ typedef int64_t x86_reg;
 #    define REGc    rcx
 #    define REGd    rdx
 #    define REGSP   rsp
+#    define REG8    r8
 
-#elif ARCH_X86_32
+#elif ARCH_X86_64_X32 || ARCH_X86_32
 
 #    define OPSIZE "l"
+#    define REG_PTR_MOD "k"
 #    define REG_a "eax"
 #    define REG_b "ebx"
 #    define REG_c "ecx"
 #    define REG_d "edx"
 #    define REG_D "edi"
 #    define REG_S "esi"
+#    define REG_8 "r8d"
 #    define PTR_SIZE "4"
 typedef int32_t x86_reg;
 
@@ -64,10 +69,31 @@ typedef int32_t x86_reg;
 #    define REGc    ecx
 #    define REGd    edx
 #    define REGSP   esp
+#    define REG8    r8d
 #else
 typedef int x86_reg;
 #endif
 
+#if ARCH_X86_64
+#    define REG_ra "rax"
+#    define REG_rb "rbx"
+#    define REG_rc "rcx"
+#    define REG_rd "rdx"
+#    define REG_rD "rdi"
+#    define REG_rS "rsi"
+#    define REG_rBP "rbp"
+typedef int64_t x86_native_reg;
+#elif ARCH_X86_32
+#    define REG_ra "eax"
+#    define REG_rb "ebx"
+#    define REG_rc "ecx"
+#    define REG_rd "edx"
+#    define REG_rD "edi"
+#    define REG_rS "esi"
+#    define REG_rBP "ebp"
+typedef int32_t x86_native_reg;
+#endif
+
 #define HAVE_7REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE && HAVE_EBP_AVAILABLE))
 #define HAVE_6REGS (ARCH_X86_64 || (HAVE_EBX_AVAILABLE || HAVE_EBP_AVAILABLE))
 
-- 
1.8.1.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to