]> git.sesse.net Git - vlc/commitdiff
Process-wide memcpy/memset accelarations
authorRémi Denis-Courmont <rem@videolan.org>
Sat, 3 May 2008 12:41:17 +0000 (15:41 +0300)
committerRémi Denis-Courmont <rem@videolan.org>
Sat, 3 May 2008 12:48:17 +0000 (15:48 +0300)
(CPU features don't change across libvlc instances)

include/vlc_common.h
src/libvlc.sym
src/misc/cpu.c

index 4fd14f82d1ce8d8b2289a2ac8ec1fcaadb57cec9..707e9329a80224ad3e5be56baf07ed37b4ef5f30 100644 (file)
@@ -883,6 +883,15 @@ VLC_EXPORT( int, __vlc_execve, ( vlc_object_t *p_object, int i_argc, char *const
 #define CPU_CAPABILITY_ALTIVEC (1<<16)
 #define CPU_CAPABILITY_FPU     (1<<31)
 VLC_EXPORT( unsigned, vlc_CPU, ( void ) );
+VLC_EXPORT( void *, vlc_memcpy, ( void *, const void *, size_t ) );
+VLC_EXPORT( void *, vlc_memset, ( void *, int, size_t ) );
+
+typedef void *(*vlc_memcpy_t) (void *tgt, const void *src, size_t n);
+typedef void *(*vlc_memset_t) (void *tgt, int c, size_t n);
+
+VLC_EXPORT( void, vlc_fastmem_register, (vlc_memcpy_t cpy, vlc_memset_t set) );
+VLC_EXPORT( void *, vlc_memcpy, ( vlc_object_t *, void *, const void *, size_t ) );
+VLC_EXPORT( void *, vlc_memset, ( vlc_object_t *, void *, int, size_t ) );
 
 /*****************************************************************************
  * I18n stuff
index 27b3f93d8986aa094d942334c501f6f199d1ec59..c3617038d8c850b96784b2c142b495602de62d63 100644 (file)
@@ -403,6 +403,8 @@ vlc_iconv_open
 __vlc_list_find
 vlc_list_release
 vlc_lldiv
+vlc_memcpy
+vlc_memset
 vlc_module_create
 vlc_module_set
 __vlc_mutex_destroy
index cfd5b285e8eb4bc95b78e1bd87ba0231234fa523..0467c28c2e19d99990cd5d6bd4b8bcd644c7b570 100644 (file)
@@ -356,3 +356,29 @@ unsigned vlc_CPU (void)
     return cpu_flags;
 }
 
+static vlc_memcpy_t pf_vlc_memcpy = memcpy;
+static vlc_memcpy_t pf_vlc_memset = memset;
+
+void vlc_fastmem_register (vlc_memcpy_t cpy, vlc_memset_t set)
+{
+    if (cpy)
+        pf_vlc_memcpy = cpy;
+    if (set)
+        pf_vlc_memset = set;
+}
+
+/**
+ * vlc_memcpy: fast CPU-dependent memcpy
+ */
+void *vlc_memcpy (void *tgt, const void *src, size_t n)
+{
+    return pf_vlc_memcpy (tgt, src, n);
+}
+
+/**
+ * vlc_memset: fast CPU-dependent memset
+ */
+void *vlc_memset (void *tgt, int c, size_t n)
+{
+    return pf_vlc_memset (tgt, c, n);
+}