History

Add asm code for NoneZeroCount and refine related code

zhiliang wang committed 11 years ago

Commit 01b74ea1 parent 7d5e88f12 files · +56 −91Browse files

Showing the changes to codec/decoder (4 of 12 files). Show all

Unified · Split

4 files
  1. codec/decoder/core/arm/block_add_neon.S +0 −12
  2. codec/decoder/core/arm64/block_add_aarch64_neon.S +0 −14
  3. codec/decoder/core/inc/decode_slice.h +0 −4
  4. codec/decoder/core/src/decode_slice.cpp +6 −24
codec/decoder/core/arm/block_add_neon.S+0−12
@@ -99,18 +99,6 @@ · 98 unmodified lines
9999 // }
100100 .endm
101101 #endif
102−// r0 int8_t* non_zero_count,
103−WELS_ASM_FUNC_BEGIN SetNonZeroCount_neon
104− vld1.64 {d0-d2}, [r0]
105− vceq.s8 q0, q0, #0
106− vceq.s8 d2, d2, #0
107− vmvn q0, q0
108− vmvn d2, d2
109− vabs.s8 q0, q0
110− vabs.s8 d2, d2
111− vst1.64 {d0-d2}, [r0]
112−WELS_ASM_FUNC_END
113−
114102
115103 // uint8_t *pred, const int32_t stride, int16_t *rs
116104 WELS_ASM_FUNC_BEGIN IdctResAddPred_neon
codec/decoder/core/arm64/block_add_aarch64_neon.S+0−14
@@ -100,20 +100,6 @@ · 99 unmodified lines
100100 // }
101101 .endm
102102 #endif
103−// x0 int8_t* non_zero_count,
104−WELS_ASM_AARCH64_FUNC_BEGIN SetNonZeroCount_AArch64_neon
105− mov x1, x0
106− ld1 {v0.16b}, [x1], #16
107− ld1 {v1.8b}, [x1]
108− cmeq v0.16b, v0.16b, #0
109− cmeq v1.8b, v1.8b, #0
110− mvn v0.16b, v0.16b
111− mvn v1.8b, v1.8b
112− abs v0.16b, v0.16b
113− abs v1.8b, v1.8b
114− st1 {v0.16b}, [x0], #16
115− st1 {v1.8b}, [x0]
116−WELS_ASM_AARCH64_FUNC_END
117103
118104 // uint8_t *pred, const int32_t stride, int16_t *rs
119105 WELS_ASM_AARCH64_FUNC_BEGIN IdctResAddPred_AArch64_neon
codec/decoder/core/inc/decode_slice.h+0−4
@@ -73,13 +73,11 @@ void WelsBlockZero8x8_sse2(int16_t * block, int32_t stride); · 72 unmodified lines
7373 #endif
7474
7575 #if defined(HAVE_NEON)
76−void SetNonZeroCount_neon (int8_t* pNonZeroCount);
7776 void WelsBlockZero16x16_neon(int16_t * block, int32_t stride);
7877 void WelsBlockZero8x8_neon(int16_t * block, int32_t stride);
7978 #endif
8079
8180 #if defined(HAVE_NEON_AARCH64)
82−void SetNonZeroCount_AArch64_neon (int8_t* pNonZeroCount);
8381 void WelsBlockZero16x16_AArch64_neon(int16_t * block, int32_t stride);
8482 void WelsBlockZero8x8_AArch64_neon(int16_t * block, int32_t stride);
8583 #endif
@@ -87,8 +85,6 @@ void WelsBlockZero8x8_AArch64_neon(int16_t * block, int32_t stride); · 1 unmodified line
8785 }
8886 #endif//__cplusplus
8987
90−void SetNonZeroCount_c (int8_t* pNonZeroCount);
91−
9288 void WelsBlockFuncInit (SBlockFunc* pFunc, int32_t iCpu);
9389 void WelsBlockZero16x16_c(int16_t * block, int32_t stride);
9490 void WelsBlockZero8x8_c(int16_t * block, int32_t stride);
codec/decoder/core/src/decode_slice.cpp+6−24
@@ -1690,25 +1690,13 @@ int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uin · 1689 unmodified lines
16901690 }
16911691
16921692 void WelsBlockFuncInit (SBlockFunc* pFunc, int32_t iCpu) {
1693− pFunc->pWelsSetNonZeroCountFunc = SetNonZeroCount_c;
1694−
1695−#ifdef HAVE_NEON
1696− if (iCpu & WELS_CPU_NEON) {
1697− pFunc->pWelsSetNonZeroCountFunc = SetNonZeroCount_neon;
1698− }
1699−#endif
1700−
1701−#ifdef HAVE_NEON_AARCH64
1702− if (iCpu & WELS_CPU_NEON) {
1703− pFunc->pWelsSetNonZeroCountFunc = SetNonZeroCount_AArch64_neon;
1704− }
1705−#endif
1706−
1693+ pFunc->pWelsSetNonZeroCountFunc = WelsNonZeroCount_c;
17071694 pFunc->pWelsBlockZero16x16Func = WelsBlockZero16x16_c;
1708− pFunc->pWelsBlockZero8x8Func = WelsBlockZero8x8_c;
1709− //TO DO add neon and X86
1695+ pFunc->pWelsBlockZero8x8Func = WelsBlockZero8x8_c;
1696+
17101697 #ifdef HAVE_NEON
17111698 if (iCpu & WELS_CPU_NEON) {
1699+ pFunc->pWelsSetNonZeroCountFunc = WelsNonZeroCount_neon;
17121700 pFunc->pWelsBlockZero16x16Func = WelsBlockZero16x16_neon;
17131701 pFunc->pWelsBlockZero8x8Func = WelsBlockZero8x8_neon;
17141702 }
@@ -1716,6 +1704,7 @@ void WelsBlockFuncInit (SBlockFunc* pFunc, int32_t iCpu) { · 1 unmodified line
17161704
17171705 #ifdef HAVE_NEON_AARCH64
17181706 if (iCpu & WELS_CPU_NEON) {
1707+ pFunc->pWelsSetNonZeroCountFunc = WelsNonZeroCount_AArch64_neon;
17191708 pFunc->pWelsBlockZero16x16Func = WelsBlockZero16x16_AArch64_neon;
17201709 pFunc->pWelsBlockZero8x8Func = WelsBlockZero8x8_AArch64_neon;
17211710 }
@@ -1723,6 +1712,7 @@ void WelsBlockFuncInit (SBlockFunc* pFunc, int32_t iCpu) { · 1 unmodified line
17231712
17241713 #if defined(X86_ASM)
17251714 if (iCpu & WELS_CPU_SSE2) {
1715+ pFunc->pWelsSetNonZeroCountFunc = WelsNonZeroCount_sse2;
17261716 pFunc->pWelsBlockZero16x16Func = WelsBlockZero16x16_sse2;
17271717 pFunc->pWelsBlockZero8x8Func = WelsBlockZero8x8_sse2;
17281718 }
@@ -1730,14 +1720,6 @@ void WelsBlockFuncInit (SBlockFunc* pFunc, int32_t iCpu) { · 1 unmodified line
17301720
17311721 }
17321722
1733−void SetNonZeroCount_c (int8_t* pNonZeroCount) {
1734− int32_t i;
1735−
1736− for (i = 0; i < 24; i++) {
1737− pNonZeroCount[i] = !!pNonZeroCount[i];
1738− }
1739−}
1740−
17411723 void WelsBlockInit (int16_t* pBlock, int iW, int iH, int iStride, uint8_t uiVal) {
17421724 int32_t i;
17431725 int16_t* pDst = pBlock;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t