From fbb174615d7312403def931a45755e1599baae69 Mon Sep 17 00:00:00 2001 From: Ahmad Amarullah Date: Wed, 20 Jan 2016 11:07:01 +0700 Subject: [PATCH] Fix memory handler * Add CMAKE_ASM_COMPILE_OBJECT * Add ASM files for arch files * Tweak rectangle to use color_set if memset16 defined * Add LIBAROMA_CONFIG_NO_ANDROID_MEM check to disable android memory * Disable libaroma_color_set in engines (neon&sse) if memset16 is defined --- CMakeLists.txt | 9 ++++++++- src/aroma/graph/draw/commondraw.c | 9 ++++++++- src/contrib/arm_neon/arm_neon.h | 4 +++- src/contrib/arm_neon/arm_neon_color.h | 2 ++ src/contrib/x86_sse/x86_sse_color.h | 2 ++ src/memory.h | 5 ++++- 6 files changed, 27 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4432eb8a..a4d35858 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -218,10 +218,14 @@ if("${ARCHITECTURE}" STREQUAL "arm") endif() endif() +# asm +set(CMAKE_ASM_COMPILE_OBJECT " -fPIC -c -o ") + # sources file(GLOB AROMA_SRCS ${PROJECT_SOURCE_DIR}/src/contrib/platform/${LIBAROMA_PLATFORM_NAME}/*.c src/aroma/arch/${ARCHITECTURE}/*.c + src/aroma/arch/${ARCHITECTURE}/*.S src/aroma/aroma.c src/aroma/version.c src/aroma/utils/*.c @@ -308,7 +312,10 @@ if (DEFINED WITHAROMART) endif() # libaroma_test -file(GLOB LIBAROMA_TEST_SRCS examples/*.c) +file(GLOB LIBAROMA_TEST_SRCS examples/recovery/*.c) +include_directories( + ${PROJECT_SOURCE_DIR}/examples/recovery +) add_executable(libaroma_test ${LIBAROMA_TEST_SRCS}) target_link_libraries(libaroma_test aroma) diff --git a/src/aroma/graph/draw/commondraw.c b/src/aroma/graph/draw/commondraw.c index deaf4acf..2ebbf319 100644 --- a/src/aroma/graph/draw/commondraw.c +++ b/src/aroma/graph/draw/commondraw.c @@ -315,8 +315,14 @@ byte libaroma_draw_rect( int dy; if (alpha == 0xff) { - int w2=w*2; wordp datapos = dst->data + x; +#ifdef libaroma_memset16 + for (dy = y; dy < y2; dy++) { + wordp linepos = datapos + (dy * dst->l); + libaroma_color_set(linepos,color,w); + } +#else + int w2=w*2; wordp firstline = datapos + (y * dst->l); libaroma_color_set(firstline, color, w); #ifdef LIBAROMA_CONFIG_OPENMP @@ -326,6 +332,7 @@ byte libaroma_draw_rect( wordp linepos = datapos + (dy * dst->l); memcpy(linepos,firstline,w2); } +#endif } else { #ifdef LIBAROMA_CONFIG_OPENMP diff --git a/src/contrib/arm_neon/arm_neon.h b/src/contrib/arm_neon/arm_neon.h index e2ac5a14..27ac751b 100644 --- a/src/contrib/arm_neon/arm_neon.h +++ b/src/contrib/arm_neon/arm_neon.h @@ -43,7 +43,9 @@ #define __engine_have_libaroma_alpha_rgba_fill_line 1 #define __engine_have_libaroma_alpha_mono 1 #define __engine_have_libaroma_alpha_multi_line 1 -#define __engine_have_libaroma_color_set 1 +#ifndef libaroma_memset16 + #define __engine_have_libaroma_color_set 1 +#endif #define __engine_have_libaroma_color_copy32 1 #define __engine_have_libaroma_color_copy16 1 #define __engine_have_libaroma_color_copy_rgb24 1 diff --git a/src/contrib/arm_neon/arm_neon_color.h b/src/contrib/arm_neon/arm_neon_color.h index f6f44402..c941bdff 100644 --- a/src/contrib/arm_neon/arm_neon_color.h +++ b/src/contrib/arm_neon/arm_neon_color.h @@ -30,6 +30,7 @@ /* * memset color 16bit */ +#ifndef libaroma_memset16 static inline void libaroma_color_set( wordp __restrict dst, word color, @@ -49,6 +50,7 @@ static inline void libaroma_color_set( } } } +#endif /* * 16 to 32bit diff --git a/src/contrib/x86_sse/x86_sse_color.h b/src/contrib/x86_sse/x86_sse_color.h index cd28559b..1d15fb83 100644 --- a/src/contrib/x86_sse/x86_sse_color.h +++ b/src/contrib/x86_sse/x86_sse_color.h @@ -27,6 +27,7 @@ #ifndef __libaroma_x86_sse_color_h__ #define __libaroma_x86_sse_color_h__ +#ifndef libaroma_memset16 #define __engine_have_libaroma_color_set 1 static inline void libaroma_color_set(wordp dst, word color, int n) { int i,left=n%32; @@ -44,6 +45,7 @@ static inline void libaroma_color_set(wordp dst, word color, int n) { } } } +#endif #define __engine_have_libaroma_color_24to16 1 static inline void libaroma_color_24to16( diff --git a/src/memory.h b/src/memory.h index b048f809..08413619 100644 --- a/src/memory.h +++ b/src/memory.h @@ -26,6 +26,7 @@ #endif #ifndef __libaroma_memory_h__ #define __libaroma_memory_h__ +#ifndef LIBAROMA_CONFIG_NO_ANDROID_MEM /* * Function : android_memset16 @@ -41,6 +42,8 @@ void android_memset16(uint16_t* dst, uint16_t value, size_t size); */ void android_memset32(uint32_t* dst, uint32_t value, size_t size); -#define libaroma_memset16(s,d,n) android_memset16(s,d,n*2) +#define libaroma_memset16(s,d,n) android_memset16(s,d,n<<1) +#define libaroma_memset32(s,d,n) android_memset32(s,d,n<<2) +#endif /* LIBAROMA_CONFIG_NO_ANDROID_MEM */ #endif /* __libaroma_memory_h__ */