Skip to content

Commit 704131c

Browse files
Jean-Baptiste Queruandroid code review
authored andcommitted
Merge changes I46c81dba,If1f40e9c,I652eaaa5
* changes: stagefright aacenc: Use QDADD/QDSUB instructions stagefright aacenc: Remove useless inline asm for simple right shift stagefright aacenc: Use ARMv6 SSAT instruction
2 parents 69aae36 + 2757ab2 commit 704131c

File tree

3 files changed

+43
-14
lines changed

3 files changed

+43
-14
lines changed

media/libstagefright/codecs/aacenc/Android.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV5E
7979
endif
8080

8181
ifeq ($(VOTT), v7)
82-
LOCAL_CFLAGS += -DARMV5E -DARMV7Neon -DARM_INASM -DARMV5_INASM
82+
LOCAL_CFLAGS += -DARMV5E -DARMV7Neon -DARM_INASM -DARMV5_INASM -DARMV6_INASM
8383
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV5E
8484
LOCAL_C_INCLUDES += $(LOCAL_PATH)/src/asm/ARMV7
8585
endif

media/libstagefright/codecs/aacenc/basic_op/basic_op.h

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -227,13 +227,7 @@ Word32 L_shr_r (Word32 L_var1, Word16 var2);
227227
#if ARMV4_INASM
228228
__inline Word32 ASM_L_shr(Word32 L_var1, Word16 var2)
229229
{
230-
Word32 result;
231-
asm (
232-
"MOV %[result], %[L_var1], ASR %[var2] \n"
233-
:[result]"=r"(result)
234-
:[L_var1]"r"(L_var1), [var2]"r"(var2)
235-
);
236-
return result;
230+
return L_var1 >> var2;
237231
}
238232

239233
__inline Word32 ASM_L_shl(Word32 L_var1, Word16 var2)
@@ -264,6 +258,18 @@ __inline Word32 ASM_shr(Word32 L_var1, Word16 var2)
264258

265259
__inline Word32 ASM_shl(Word32 L_var1, Word16 var2)
266260
{
261+
#if ARMV6_SAT
262+
Word32 result;
263+
asm (
264+
"CMP %[var2], #16\n"
265+
"MOVLT %[result], %[L_var1], ASL %[var2]\n"
266+
"MOVGE %[result], %[L_var1], ASL #16\n"
267+
"SSAT %[result], #16, %[result]\n"
268+
:[result]"=r"(result)
269+
:[L_var1]"r"(L_var1), [var2]"r"(var2)
270+
);
271+
return result;
272+
#else
267273
Word32 result;
268274
Word32 tmp;
269275
asm (
@@ -277,6 +283,7 @@ __inline Word32 ASM_shl(Word32 L_var1, Word16 var2)
277283
:[L_var1]"r"(L_var1), [var2]"r"(var2), [mask]"r"(0x7fff)
278284
);
279285
return result;
286+
#endif
280287
}
281288
#endif
282289

@@ -288,7 +295,15 @@ __inline Word32 ASM_shl(Word32 L_var1, Word16 var2)
288295
#if (SATRUATE_IS_INLINE)
289296
__inline Word16 saturate(Word32 L_var1)
290297
{
291-
#if ARMV5TE_SAT
298+
#if ARMV6_SAT
299+
Word16 result;
300+
asm (
301+
"SSAT %[result], #16, %[L_var1]"
302+
: [result]"=r"(result)
303+
: [L_var1]"r"(L_var1)
304+
);
305+
return result;
306+
#elif ARMV5TE_SAT
292307
Word16 result;
293308
Word32 tmp;
294309
asm volatile (
@@ -445,8 +460,7 @@ __inline Word32 L_msu (Word32 L_var3, Word16 var1, Word16 var2)
445460
Word32 result;
446461
asm (
447462
"SMULBB %[result], %[var1], %[var2] \n"
448-
"QADD %[result], %[result], %[result] \n"
449-
"QSUB %[result], %[L_var3], %[result]\n"
463+
"QDSUB %[result], %[L_var3], %[result]\n"
450464
:[result]"=&r"(result)
451465
:[L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)
452466
);
@@ -671,7 +685,16 @@ __inline Word16 div_s (Word16 var1, Word16 var2)
671685
#if (MULT_IS_INLINE)
672686
__inline Word16 mult (Word16 var1, Word16 var2)
673687
{
674-
#if ARMV5TE_MULT
688+
#if ARMV5TE_MULT && ARMV6_SAT
689+
Word32 result;
690+
asm (
691+
"SMULBB %[result], %[var1], %[var2] \n"
692+
"SSAT %[result], #16, %[result], ASR #15 \n"
693+
:[result]"=r"(result)
694+
:[var1]"r"(var1), [var2]"r"(var2)
695+
);
696+
return result;
697+
#elif ARMV5TE_MULT
675698
Word32 result, tmp;
676699
asm (
677700
"SMULBB %[tmp], %[var1], %[var2] \n"
@@ -990,8 +1013,7 @@ __inline Word32 L_mac (Word32 L_var3, Word16 var1, Word16 var2)
9901013
Word32 result;
9911014
asm (
9921015
"SMULBB %[result], %[var1], %[var2]\n"
993-
"QADD %[result], %[result], %[result]\n"
994-
"QADD %[result], %[result], %[L_var3]\n"
1016+
"QDADD %[result], %[L_var3], %[result]\n"
9951017
:[result]"=&r"(result)
9961018
: [L_var3]"r"(L_var3), [var1]"r"(var1), [var2]"r"(var2)
9971019
);

media/libstagefright/codecs/aacenc/basic_op/typedefs.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,13 @@ typedef unsigned __int64 UWord64;
128128
#define ARMV5TE_NORM_L 1
129129
#define ARMV5TE_L_MPY_LS 1
130130
#endif
131+
#if ARMV6_INASM
132+
#undef ARMV5TE_ADD
133+
#define ARMV5TE_ADD 0
134+
#undef ARMV5TE_SUB
135+
#define ARMV5TE_SUB 0
136+
#define ARMV6_SAT 1
137+
#endif
131138

132139
//basic operation functions optimization flags
133140
#define SATRUATE_IS_INLINE 1 //define saturate as inline function

0 commit comments

Comments
 (0)