Modify code style, remove trailing space.

This commit is contained in:
Licai Guo
2014-03-03 15:42:01 +08:00
parent b7a25df13f
commit 7768cd0a98
15 changed files with 1636 additions and 1972 deletions

View File

@@ -71,7 +71,7 @@
4CE4474718BC61650017DF25 /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = "<group>"; }; 4CE4474718BC61650017DF25 /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = "<group>"; };
4CE4474918BC61650017DF25 /* WelsThreadLib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WelsThreadLib.cpp; sourceTree = "<group>"; }; 4CE4474918BC61650017DF25 /* WelsThreadLib.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WelsThreadLib.cpp; sourceTree = "<group>"; };
4CE4474A18BC61650017DF25 /* WelsThreadLib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WelsThreadLib.h; sourceTree = "<group>"; }; 4CE4474A18BC61650017DF25 /* WelsThreadLib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WelsThreadLib.h; sourceTree = "<group>"; };
4CE447BC18C085320017DF25 /* deblocking_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = deblocking_neon.S; sourceTree = "<group>"; }; 4CE447BC18C085320017DF25 /* deblocking_neon.S */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.asm; path = deblocking_neon.S; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
4CE447BE18C085900017DF25 /* arm_arch_common_macro.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = arm_arch_common_macro.S; sourceTree = "<group>"; }; 4CE447BE18C085900017DF25 /* arm_arch_common_macro.S */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.asm; path = arm_arch_common_macro.S; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */

View File

@@ -84,9 +84,9 @@
4CE4464E18BC5EAA0017DF25 /* decoder_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoder_context.h; sourceTree = "<group>"; }; 4CE4464E18BC5EAA0017DF25 /* decoder_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoder_context.h; sourceTree = "<group>"; };
4CE4464F18BC5EAA0017DF25 /* decoder_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoder_core.h; sourceTree = "<group>"; }; 4CE4464F18BC5EAA0017DF25 /* decoder_core.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decoder_core.h; sourceTree = "<group>"; };
4CE4465018BC5EAA0017DF25 /* error_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error_code.h; sourceTree = "<group>"; }; 4CE4465018BC5EAA0017DF25 /* error_code.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error_code.h; sourceTree = "<group>"; };
4CE4465118BC5EAA0017DF25 /* expand_pic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expand_pic.h; sourceTree = "<group>"; }; 4CE4465118BC5EAA0017DF25 /* expand_pic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = expand_pic.h; sourceTree = "<group>"; usesTabs = 1; };
4CE4465218BC5EAA0017DF25 /* fmo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fmo.h; sourceTree = "<group>"; }; 4CE4465218BC5EAA0017DF25 /* fmo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fmo.h; sourceTree = "<group>"; usesTabs = 1; };
4CE4465318BC5EAA0017DF25 /* get_intra_predictor.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 2; lastKnownFileType = sourcecode.c.h; path = get_intra_predictor.h; sourceTree = "<group>"; tabWidth = 2; usesTabs = 1; }; 4CE4465318BC5EAA0017DF25 /* get_intra_predictor.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = get_intra_predictor.h; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
4CE4465418BC5EAA0017DF25 /* manage_dec_ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = manage_dec_ref.h; sourceTree = "<group>"; }; 4CE4465418BC5EAA0017DF25 /* manage_dec_ref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = manage_dec_ref.h; sourceTree = "<group>"; };
4CE4465518BC5EAA0017DF25 /* mb_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mb_cache.h; sourceTree = "<group>"; }; 4CE4465518BC5EAA0017DF25 /* mb_cache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mb_cache.h; sourceTree = "<group>"; };
4CE4465618BC5EAA0017DF25 /* mc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mc.h; sourceTree = "<group>"; }; 4CE4465618BC5EAA0017DF25 /* mc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mc.h; sourceTree = "<group>"; };
@@ -105,19 +105,19 @@
4CE4466318BC5EAA0017DF25 /* vlc_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vlc_decoder.h; sourceTree = "<group>"; }; 4CE4466318BC5EAA0017DF25 /* vlc_decoder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vlc_decoder.h; sourceTree = "<group>"; };
4CE4466418BC5EAA0017DF25 /* wels_common_basis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wels_common_basis.h; sourceTree = "<group>"; }; 4CE4466418BC5EAA0017DF25 /* wels_common_basis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wels_common_basis.h; sourceTree = "<group>"; };
4CE4466518BC5EAA0017DF25 /* wels_const.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wels_const.h; sourceTree = "<group>"; }; 4CE4466518BC5EAA0017DF25 /* wels_const.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wels_const.h; sourceTree = "<group>"; };
4CE4466718BC5EAA0017DF25 /* au_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = au_parser.cpp; sourceTree = "<group>"; usesTabs = 1; }; 4CE4466718BC5EAA0017DF25 /* au_parser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = au_parser.cpp; sourceTree = "<group>"; usesTabs = 0; };
4CE4466818BC5EAA0017DF25 /* bit_stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_stream.cpp; sourceTree = "<group>"; usesTabs = 1; }; 4CE4466818BC5EAA0017DF25 /* bit_stream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bit_stream.cpp; sourceTree = "<group>"; usesTabs = 0; };
4CE4466918BC5EAA0017DF25 /* deblocking.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = deblocking.cpp; sourceTree = "<group>"; }; 4CE4466918BC5EAA0017DF25 /* deblocking.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = deblocking.cpp; sourceTree = "<group>"; tabWidth = 2; };
4CE4466A18BC5EAA0017DF25 /* decode_mb_aux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decode_mb_aux.cpp; sourceTree = "<group>"; }; 4CE4466A18BC5EAA0017DF25 /* decode_mb_aux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decode_mb_aux.cpp; sourceTree = "<group>"; };
4CE4466B18BC5EAA0017DF25 /* decode_slice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decode_slice.cpp; sourceTree = "<group>"; usesTabs = 1; }; 4CE4466B18BC5EAA0017DF25 /* decode_slice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decode_slice.cpp; sourceTree = "<group>"; usesTabs = 0; };
4CE4466C18BC5EAA0017DF25 /* decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoder.cpp; sourceTree = "<group>"; tabWidth = 2; usesTabs = 1; }; 4CE4466C18BC5EAA0017DF25 /* decoder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoder.cpp; sourceTree = "<group>"; tabWidth = 4; usesTabs = 0; };
4CE4466D18BC5EAA0017DF25 /* decoder_core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoder_core.cpp; sourceTree = "<group>"; }; 4CE4466D18BC5EAA0017DF25 /* decoder_core.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoder_core.cpp; sourceTree = "<group>"; };
4CE4466E18BC5EAA0017DF25 /* decoder_data_tables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoder_data_tables.cpp; sourceTree = "<group>"; }; 4CE4466E18BC5EAA0017DF25 /* decoder_data_tables.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = decoder_data_tables.cpp; sourceTree = "<group>"; };
4CE4466F18BC5EAA0017DF25 /* expand_pic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expand_pic.cpp; sourceTree = "<group>"; }; 4CE4466F18BC5EAA0017DF25 /* expand_pic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = expand_pic.cpp; sourceTree = "<group>"; };
4CE4467018BC5EAA0017DF25 /* fmo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fmo.cpp; sourceTree = "<group>"; }; 4CE4467018BC5EAA0017DF25 /* fmo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fmo.cpp; sourceTree = "<group>"; };
4CE4467118BC5EAA0017DF25 /* get_intra_predictor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = get_intra_predictor.cpp; sourceTree = "<group>"; }; 4CE4467118BC5EAA0017DF25 /* get_intra_predictor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = get_intra_predictor.cpp; sourceTree = "<group>"; };
4CE4467218BC5EAA0017DF25 /* manage_dec_ref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = manage_dec_ref.cpp; sourceTree = "<group>"; }; 4CE4467218BC5EAA0017DF25 /* manage_dec_ref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = manage_dec_ref.cpp; sourceTree = "<group>"; };
4CE4467318BC5EAA0017DF25 /* mc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mc.cpp; sourceTree = "<group>"; tabWidth = 1; usesTabs = 1; wrapsLines = 1; }; 4CE4467318BC5EAA0017DF25 /* mc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mc.cpp; sourceTree = "<group>"; tabWidth = 1; usesTabs = 0; wrapsLines = 1; };
4CE4467418BC5EAA0017DF25 /* mem_align.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_align.cpp; sourceTree = "<group>"; }; 4CE4467418BC5EAA0017DF25 /* mem_align.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mem_align.cpp; sourceTree = "<group>"; };
4CE4467518BC5EAA0017DF25 /* memmgr_nal_unit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memmgr_nal_unit.cpp; sourceTree = "<group>"; }; 4CE4467518BC5EAA0017DF25 /* memmgr_nal_unit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memmgr_nal_unit.cpp; sourceTree = "<group>"; };
4CE4467618BC5EAA0017DF25 /* mv_pred.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mv_pred.cpp; sourceTree = "<group>"; }; 4CE4467618BC5EAA0017DF25 /* mv_pred.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mv_pred.cpp; sourceTree = "<group>"; };

View File

@@ -221,10 +221,8 @@ uint32_t WelsCPUFeatureDetectAndroid()
uint32_t uiCPU = 0; uint32_t uiCPU = 0;
AndroidCpuFamily cpuFamily = ANDROID_CPU_FAMILY_UNKNOWN; AndroidCpuFamily cpuFamily = ANDROID_CPU_FAMILY_UNKNOWN;
uint64_t uiFeatures = 0; uint64_t uiFeatures = 0;
cpuFamily = android_getCpuFamily(); cpuFamily = android_getCpuFamily();
if (cpuFamily == ANDROID_CPU_FAMILY_ARM) if (cpuFamily == ANDROID_CPU_FAMILY_ARM) {
{
uiFeatures = android_getCpuFeatures(); uiFeatures = android_getCpuFeatures();
if (uiFeatures & ANDROID_CPU_ARM_FEATURE_ARMv7){ if (uiFeatures & ANDROID_CPU_ARM_FEATURE_ARMv7){
uiCPU |= WELS_CPU_ARMv7; uiCPU |= WELS_CPU_ARMv7;
@@ -246,7 +244,6 @@ uint32_t WelsCPUFeatureDetectIOS() //Need to be updated for the new device of AP
{ {
uint32_t uiCPU = 0; uint32_t uiCPU = 0;
struct utsname sSystemInfo; struct utsname sSystemInfo;
uname (&sSystemInfo); uname (&sSystemInfo);
if ((0 != strcmp(sSystemInfo.machine, "iPhone1,1")) && //iPhone 2G if ((0 != strcmp(sSystemInfo.machine, "iPhone1,1")) && //iPhone 2G

File diff suppressed because it is too large Load Diff

View File

@@ -40,34 +40,6 @@ extern "C" {
#endif//__cplusplus #endif//__cplusplus
#if defined(HAVE_NEON) #if defined(HAVE_NEON)
/*
void McCopy_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride,
int32_t iWidth, int32_t iHeight);
void McHorVer20_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride,
int32_t iWidth, int32_t iHeight);
void McHorVer02_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride,
int32_t iWidth, int32_t iHeight);
void McHorVer22_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride,
int32_t iWidth, int32_t iHeight);
void McHorVer01_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer03_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer10_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer11_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer12_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer13_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer21_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer23_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer30_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer31_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer32_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McHorVer33_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iWidth, int32_t iHeight);
void McLuma_neon(uint8_t* pSrc, int32_t src_stride, uint8_t* dst, int32_t dst_stride,
int16_t iMvX, int16_t iMvY, int32_t width, int32_t height);
void McChroma_neon(uint8_t* pSrc, int32_t src_stride, uint8_t* dst, int32_t dst_stride,
int16_t iMvX, int16_t iMvY, int32_t width, int32_t height);
*/
void McCopyWidthEq4_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iHeight); void McCopyWidthEq4_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iHeight);
void McCopyWidthEq8_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iHeight); void McCopyWidthEq8_neon(const uint8_t* pSrc, int32_t iSrcStride, uint8_t* pDst, int32_t iDstStride, int32_t iHeight);

View File

@@ -101,7 +101,7 @@
#endif #endif
// r0 int16_t* block, // r0 int16_t* block,
// r1 int8_t* non_zero_count, // r1 int8_t* non_zero_count,
WELS_ASM_FUNC_BEGIN SetNonZeroCount_neon WELS_ASM_FUNC_BEGIN SetNonZeroCount_neon
vld1.64 {d0-d2}, [r1] vld1.64 {d0-d2}, [r1]
@@ -113,12 +113,12 @@
vabs.s8 d2, d2 vabs.s8 d2, d2
vst1.64 {d0-d2}, [r1] vst1.64 {d0-d2}, [r1]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
// r0 int16_t * block, // r0 int16_t * block,
// r1 int32_t stride // r1 int32_t stride
WELS_ASM_FUNC_BEGIN WelsResBlockZero16x16_neon// can use for 256*sizeof(int16_t) WELS_ASM_FUNC_BEGIN WelsResBlockZero16x16_neon// can use for 256*sizeof(int16_t)
push {r2} push {r2}
mov r2, #16 mov r2, #16
// each row 16 elements, 16*sizeof(int16_t) // each row 16 elements, 16*sizeof(int16_t)
@@ -135,9 +135,9 @@ block_zero_16x16_luma_loop:
bne block_zero_16x16_luma_loop bne block_zero_16x16_luma_loop
pop {r2} pop {r2}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN WelsResBlockZero8x8_neon// can use for 64*sizeof(int16_t) WELS_ASM_FUNC_BEGIN WelsResBlockZero8x8_neon// can use for 64*sizeof(int16_t)
push {r2} push {r2}
mov r2, #8 mov r2, #8
// each row 8 elements, 8*sizeof(int16_t) // each row 8 elements, 8*sizeof(int16_t)
@@ -153,11 +153,11 @@ block_zero_8x8_chma_loop:
bne block_zero_8x8_chma_loop bne block_zero_8x8_chma_loop
pop {r2} pop {r2}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
// uint8_t *pred, const int32_t stride, int16_t *rs // uint8_t *pred, const int32_t stride, int16_t *rs
WELS_ASM_FUNC_BEGIN IdctResAddPred_neon WELS_ASM_FUNC_BEGIN IdctResAddPred_neon
vld4.s16 {d0, d1, d2, d3}, [r2] // cost 3 cycles! vld4.s16 {d0, d1, d2, d3}, [r2] // cost 3 cycles!
@@ -199,5 +199,5 @@ block_zero_8x8_chma_loop:
vst1.32 {d12[1]},[r2],r1 vst1.32 {d12[1]},[r2],r1
vst1.32 {d14[0]},[r2],r1 vst1.32 {d14[0]},[r2],r1
vst1.32 {d14[1]},[r2] vst1.32 {d14[1]},[r2]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
#endif #endif

View File

@@ -61,14 +61,8 @@
.endm .endm
#endif #endif
/*
* void get_i16x16_luma_pred_v(uint8_t *pred, const int32_t stride)
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredV_neon WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredV_neon
//Get the top line data to 'q0' //Get the top line data to 'q0'
sub r2, r0, r1 sub r2, r0, r1
vldm r2, {d0, d1} vldm r2, {d0, d1}
@@ -84,17 +78,11 @@ loop_0_get_i16x16_luma_pred_v:
subs r3, #1 subs r3, #1
bne loop_0_get_i16x16_luma_pred_v bne loop_0_get_i16x16_luma_pred_v
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i16x16_luma_pred_h(uint8_t *pred, const int32_t stride)
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredH_neon WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredH_neon
sub r2, r0, #1 sub r2, r0, #1
mov r3, #4 mov r3, #4
loop_0_get_i16x16_luma_pred_h: loop_0_get_i16x16_luma_pred_h:
@@ -113,17 +101,10 @@ loop_0_get_i16x16_luma_pred_h:
subs r3, #1 subs r3, #1
bne loop_0_get_i16x16_luma_pred_h bne loop_0_get_i16x16_luma_pred_h
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/* WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredDc_neon
* void get_i16x16_luma_pred_dc_both(uint8_t *pred, const int32_t stride)
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredDc_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Get the left vertical line data //Get the left vertical line data
sub r2, r0, #1 sub r2, r0, #1
@@ -156,15 +137,9 @@ loop_0_get_i16x16_luma_pred_dc_both:
subs r2, #1 subs r2, #1
bne loop_0_get_i16x16_luma_pred_dc_both bne loop_0_get_i16x16_luma_pred_dc_both
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i16x16_luma_pred_plane(uint8_t *pred, const int32_t stride)
* r0 --- pred
* r1 --- stride
* return --- void
*/
//The table for SIMD instruction {(8,7,6,5,4,3,2,1) * 5} //The table for SIMD instruction {(8,7,6,5,4,3,2,1) * 5}
CONST0_GET_I16X16_LUMA_PRED_PLANE: .long 0x191e2328, 0x050a0f14 CONST0_GET_I16X16_LUMA_PRED_PLANE: .long 0x191e2328, 0x050a0f14
@@ -173,7 +148,7 @@ CONST0_GET_I16X16_LUMA_PRED_PLANE: .long 0x191e2328, 0x050a0f14
CONST1_GET_I16X16_LUMA_PRED_PLANE: .long 0xfcfbfaf9, 0x00fffefd CONST1_GET_I16X16_LUMA_PRED_PLANE: .long 0xfcfbfaf9, 0x00fffefd
WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredPlane_neon WELS_ASM_FUNC_BEGIN WelsDecoderI16x16LumaPredPlane_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the table {(8,7,6,5,4,3,2,1) * 5} //Load the table {(8,7,6,5,4,3,2,1) * 5}
@@ -261,17 +236,9 @@ loop_0_get_i16x16_luma_pred_plane:
subs r2, #1 subs r2, #1
bne loop_0_get_i16x16_luma_pred_plane bne loop_0_get_i16x16_luma_pred_plane
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredV_neon
/*
* void get_i4x4_luma_pred_v(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredV_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the top row (4 bytes) //Load the top row (4 bytes)
sub r2, r0, r1 sub r2, r0, r1
@@ -283,16 +250,11 @@ loop_0_get_i16x16_luma_pred_plane:
str r2, [r0], r1 str r2, [r0], r1
str r2, [r0] str r2, [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i4x4_luma_pred_h(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredH_neon
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredH_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the left column (4 bytes) //Load the left column (4 bytes)
sub r2, r0, #1 sub r2, r0, #1
@@ -307,15 +269,10 @@ loop_0_get_i16x16_luma_pred_plane:
vst1.32 {d2[0]}, [r0], r1 vst1.32 {d2[0]}, [r0], r1
vst1.32 {d3[0]}, [r0] vst1.32 {d3[0]}, [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i4x4_luma_pred_d_l(uint8_t *pred, const int32_t stride); WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredDDL_neon
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredDDL_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the top row data(8 bytes) //Load the top row data(8 bytes)
sub r2, r0, r1 sub r2, r0, r1
@@ -350,16 +307,10 @@ loop_0_get_i16x16_luma_pred_plane:
//Save "ddl3, ddl4, ddl5, ddl6" //Save "ddl3, ddl4, ddl5, ddl6"
vst1.32 d0[1], [r0] vst1.32 d0[1], [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i4x4_luma_pred_d_r(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredDDR_neon WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredDDR_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the top row (4 bytes) //Load the top row (4 bytes)
sub r2, r0, r1 sub r2, r0, r1
@@ -396,16 +347,11 @@ loop_0_get_i16x16_luma_pred_plane:
vext.8 d0, d0, d0, #7 vext.8 d0, d0, d0, #7
vst1.32 d0[1], [r0] vst1.32 d0[1], [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i4x4_luma_pred_v_l(uint8_t *pred, const int32_t stride); WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredVL_neon
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredVL_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the top row (8 bytes) //Load the top row (8 bytes)
sub r2, r0, r1 sub r2, r0, r1
@@ -432,17 +378,11 @@ loop_0_get_i16x16_luma_pred_plane:
vst1.32 d0[0], [r0], r1 vst1.32 d0[0], [r0], r1
vst1.32 d1[0], [r0] vst1.32 d1[0], [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i4x4_luma_pred_v_r(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredVR_neon WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredVR_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the top row (4 bytes) //Load the top row (4 bytes)
sub r2, r0, r1 sub r2, r0, r1
@@ -476,17 +416,11 @@ loop_0_get_i16x16_luma_pred_plane:
vst1.8 d1[2], [r2]! vst1.8 d1[2], [r2]!
vst1.16 d1[2], [r2]! vst1.16 d1[2], [r2]!
vst1.8 d1[6], [r2] vst1.8 d1[6], [r2]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* get_i4x4_luma_pred_h_u(uint8_t *pred, const int32_t stride); WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredHU_neon
* r0 --- pred
* r1 --- stride
* return --- void
*/
//NO TEST
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredHU_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the left column data //Load the left column data
sub r2, r0, #1 sub r2, r0, #1
@@ -516,15 +450,10 @@ loop_0_get_i16x16_luma_pred_plane:
vst1.32 d1[1], [r0], r1 vst1.32 d1[1], [r0], r1
vst1.32 d0[0], [r0] vst1.32 d0[0], [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i4x4_luma_pred_h_d(uint8_t *pred, const int32_t stride); WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredHD_neon
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderI4x4LumaPredHD_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the data //Load the data
sub r2, r0, r1 sub r2, r0, r1
@@ -556,17 +485,10 @@ loop_0_get_i16x16_luma_pred_plane:
vst2.16 {d2[2], d3[2]}, [r0], r1 vst2.16 {d2[2], d3[2]}, [r0], r1
vst2.16 {d0[1], d1[1]}, [r0] vst2.16 {d0[1], d1[1]}, [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/* WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredV_neon
* void get_i_chroma_pred_v(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredV_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Get the top row (8 byte) //Get the top row (8 byte)
sub r2, r0, r1 sub r2, r0, r1
@@ -582,17 +504,10 @@ loop_0_get_i16x16_luma_pred_plane:
vst1.8 {d0}, [r0], r1 vst1.8 {d0}, [r0], r1
vst1.8 {d0}, [r0] vst1.8 {d0}, [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/* WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredH_neon
* void get_i_chroma_pred_h(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredH_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
////Get the left column (8 byte) ////Get the left column (8 byte)
sub r2, r0, #1 sub r2, r0, #1
@@ -615,17 +530,10 @@ loop_0_get_i16x16_luma_pred_plane:
vst1.8 {d6}, [r0], r1 vst1.8 {d6}, [r0], r1
vst1.8 {d7}, [r0] vst1.8 {d7}, [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/* WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredDC_neon
* void get_i_chroma_pred_dc_both(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredDC_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the left column data (8 bytes) //Load the left column data (8 bytes)
sub r2, r0, #1 sub r2, r0, #1
@@ -659,20 +567,15 @@ loop_0_get_i16x16_luma_pred_plane:
vst2.32 {d6[0],d7[0]}, [r0], r1 vst2.32 {d6[0],d7[0]}, [r0], r1
vst2.32 {d6[0],d7[0]}, [r0] vst2.32 {d6[0],d7[0]}, [r0]
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
/*
* void get_i_chroma_pred_plane(uint8_t *pred, const int32_t stride);
* r0 --- pred
* r1 --- stride
* return --- void
*/
//Table {{1,2,3,4,1,2,3,4}*17} //Table {{1,2,3,4,1,2,3,4}*17}
CONST0_GET_I_CHROMA_PRED_PLANE: .long 0x44332211, 0x44332211//0x140f0a05, 0x28231e19 CONST0_GET_I_CHROMA_PRED_PLANE: .long 0x44332211, 0x44332211//0x140f0a05, 0x28231e19
//Table {-3,-2,-1,0,1,2,3,4} //Table {-3,-2,-1,0,1,2,3,4}
CONST1_GET_I_CHROMA_PRED_PLANE: .long 0xfffefffd, 0x0000ffff,0x00020001,0x00040003 CONST1_GET_I_CHROMA_PRED_PLANE: .long 0xfffefffd, 0x0000ffff,0x00020001,0x00040003
WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredPlane_neon WELS_ASM_FUNC_BEGIN WelsDecoderIChromaPredPlane_neon
//stmdb sp!, { r2-r5, lr} //stmdb sp!, { r2-r5, lr}
//Load the top row data //Load the top row data
sub r2, r0, #1 sub r2, r0, #1
@@ -741,6 +644,6 @@ loop_0_get_i_chroma_pred_plane:
subs r2, #1 subs r2, #1
bne loop_0_get_i_chroma_pred_plane bne loop_0_get_i_chroma_pred_plane
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
#endif #endif

View File

@@ -42,8 +42,6 @@
// } // }
.endm .endm
//h_filter(src) = (src[-2] + src[3]) - 5*(src[-1] + src[2]) + 20*(src[ 0] + src[1]);//
//clip((h_filter(src)+16)>>5)
.macro FILTER_6TAG_8BITS .macro FILTER_6TAG_8BITS
// { // input:src[-2], src[-1], src[0], src[1], src[2], src[3], dst_d, multiplier a/b; working: q12, q13 // { // input:src[-2], src[-1], src[0], src[1], src[2], src[3], dst_d, multiplier a/b; working: q12, q13
vaddl.u8 q12, $0, $5 //q12=src[-2]+src[3] vaddl.u8 q12, $0, $5 //q12=src[-2]+src[3]
@@ -125,8 +123,6 @@
// } // }
.endm .endm
//h_filter(src) = (src[-2] + src[3]) - 5*(src[-1] + src[2]) + 20*(src[ 0] + src[1]);//
//clip((h_filter(src)+16)>>5)
.macro FILTER_6TAG_8BITS arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8 .macro FILTER_6TAG_8BITS arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8
// { // input:src[-2], src[-1], src[0], src[1], src[2], src[3], dst_d, multiplier a/b; working: q12, q13 // { // input:src[-2], src[-1], src[0], src[1], src[2], src[3], dst_d, multiplier a/b; working: q12, q13
vaddl.u8 q12, \arg0, \arg5 //q12=src[-2]+src[3] vaddl.u8 q12, \arg0, \arg5 //q12=src[-2]+src[3]
@@ -201,8 +197,8 @@
// } // }
.endm .endm
#endif #endif
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer20WidthEq16_neon WELS_ASM_FUNC_BEGIN McHorVer20WidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -231,10 +227,10 @@ w16_h_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w16_h_mc_luma_loop bne w16_h_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer20WidthEq8_neon WELS_ASM_FUNC_BEGIN McHorVer20WidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -260,10 +256,10 @@ w8_h_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w8_h_mc_luma_loop bne w8_h_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer20WidthEq4_neon WELS_ASM_FUNC_BEGIN McHorVer20WidthEq4_neon
push {r4, r5, r6} push {r4, r5, r6}
ldr r6, [sp, #12] ldr r6, [sp, #12]
@@ -298,10 +294,10 @@ w4_h_mc_luma_loop:
bne w4_h_mc_luma_loop bne w4_h_mc_luma_loop
pop {r4, r5, r6} pop {r4, r5, r6}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer10WidthEq16_neon WELS_ASM_FUNC_BEGIN McHorVer10WidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -330,10 +326,10 @@ w16_xy_10_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w16_xy_10_mc_luma_loop bne w16_xy_10_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer10WidthEq8_neon WELS_ASM_FUNC_BEGIN McHorVer10WidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -359,10 +355,10 @@ w8_xy_10_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w8_xy_10_mc_luma_loop bne w8_xy_10_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer10WidthEq4_neon WELS_ASM_FUNC_BEGIN McHorVer10WidthEq4_neon
push {r4, r5, r6} push {r4, r5, r6}
ldr r6, [sp, #12] ldr r6, [sp, #12]
@@ -397,10 +393,10 @@ w4_xy_10_mc_luma_loop:
bne w4_xy_10_mc_luma_loop bne w4_xy_10_mc_luma_loop
pop {r4, r5, r6} pop {r4, r5, r6}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer30WidthEq16_neon WELS_ASM_FUNC_BEGIN McHorVer30WidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -429,10 +425,10 @@ w16_xy_30_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w16_xy_30_mc_luma_loop bne w16_xy_30_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer30WidthEq8_neon WELS_ASM_FUNC_BEGIN McHorVer30WidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -458,10 +454,10 @@ w8_xy_30_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w8_xy_30_mc_luma_loop bne w8_xy_30_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer30WidthEq4_neon WELS_ASM_FUNC_BEGIN McHorVer30WidthEq4_neon
push {r4, r5, r6} push {r4, r5, r6}
ldr r6, [sp, #12] ldr r6, [sp, #12]
@@ -496,10 +492,10 @@ w4_xy_30_mc_luma_loop:
bne w4_xy_30_mc_luma_loop bne w4_xy_30_mc_luma_loop
pop {r4, r5, r6} pop {r4, r5, r6}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer01WidthEq16_neon WELS_ASM_FUNC_BEGIN McHorVer01WidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -578,9 +574,10 @@ w16_xy_01_luma_loop:
cmp r4, #0 cmp r4, #0
bne w16_xy_01_luma_loop bne w16_xy_01_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN McHorVer01WidthEq8_neon
WELS_ASM_FUNC_BEGIN McHorVer01WidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -631,9 +628,10 @@ w8_xy_01_mc_luma_loop:
bne w8_xy_01_mc_luma_loop bne w8_xy_01_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN McHorVer01WidthEq4_neon
WELS_ASM_FUNC_BEGIN McHorVer01WidthEq4_neon
push {r4, r5, r6, r7} push {r4, r5, r6, r7}
sub r0, r1, lsl #1 //src[-2*src_stride] sub r0, r1, lsl #1 //src[-2*src_stride]
pld [r0] pld [r0]
@@ -689,9 +687,10 @@ w4_xy_01_mc_luma_loop:
bne w4_xy_01_mc_luma_loop bne w4_xy_01_mc_luma_loop
pop {r4, r5, r6, r7} pop {r4, r5, r6, r7}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN McHorVer03WidthEq16_neon
WELS_ASM_FUNC_BEGIN McHorVer03WidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -770,9 +769,10 @@ w16_xy_03_luma_loop:
cmp r4, #0 cmp r4, #0
bne w16_xy_03_luma_loop bne w16_xy_03_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN McHorVer03WidthEq8_neon
WELS_ASM_FUNC_BEGIN McHorVer03WidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -823,9 +823,10 @@ w8_xy_03_mc_luma_loop:
bne w8_xy_03_mc_luma_loop bne w8_xy_03_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN McHorVer03WidthEq4_neon
WELS_ASM_FUNC_BEGIN McHorVer03WidthEq4_neon
push {r4, r5, r6, r7} push {r4, r5, r6, r7}
sub r0, r1, lsl #1 //src[-2*src_stride] sub r0, r1, lsl #1 //src[-2*src_stride]
pld [r0] pld [r0]
@@ -881,10 +882,10 @@ w4_xy_03_mc_luma_loop:
bne w4_xy_03_mc_luma_loop bne w4_xy_03_mc_luma_loop
pop {r4, r5, r6, r7} pop {r4, r5, r6, r7}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer02WidthEq16_neon WELS_ASM_FUNC_BEGIN McHorVer02WidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -963,10 +964,10 @@ w16_v_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w16_v_mc_luma_loop bne w16_v_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer02WidthEq8_neon WELS_ASM_FUNC_BEGIN McHorVer02WidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -1017,10 +1018,10 @@ w8_v_mc_luma_loop:
bne w8_v_mc_luma_loop bne w8_v_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer02WidthEq4_neon WELS_ASM_FUNC_BEGIN McHorVer02WidthEq4_neon
push {r4, r5, r6, r7} push {r4, r5, r6, r7}
sub r0, r1, lsl #1 //src[-2*src_stride] sub r0, r1, lsl #1 //src[-2*src_stride]
pld [r0] pld [r0]
@@ -1076,10 +1077,10 @@ w4_v_mc_luma_loop:
bne w4_v_mc_luma_loop bne w4_v_mc_luma_loop
pop {r4, r5, r6, r7} pop {r4, r5, r6, r7}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer22WidthEq16_neon WELS_ASM_FUNC_BEGIN McHorVer22WidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -1089,8 +1090,6 @@ w4_v_mc_luma_loop:
pld [r0, r1] pld [r0, r1]
vmov.u16 q14, #0x0014 // 20 vmov.u16 q14, #0x0014 // 20
// vmov.u32 d30, #0x00140000
// vorr.u32 d30, #0x0005 //0x0014 0005 0014 0005
vld1.u8 {d0-d2}, [r0], r1 //use 21(16+5), =src[-2] vld1.u8 {d0-d2}, [r0], r1 //use 21(16+5), =src[-2]
vld1.u8 {d3-d5}, [r0], r1 //use 21(16+5), =src[-1] vld1.u8 {d3-d5}, [r0], r1 //use 21(16+5), =src[-1]
@@ -1115,7 +1114,7 @@ w16_hv_mc_luma_loop:
// horizon filtered // horizon filtered
UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d0 //output to q0[0] FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d0 //output to q0[0]
// vst1.u8 d18, [r2] //write 8Byte
// vertical filtered into q10/q11 // vertical filtered into q10/q11
FILTER_6TAG_8BITS_TO_16BITS d2, d5, d8,d11, d14, d17,q11, q14, q15 // only 5 avail FILTER_6TAG_8BITS_TO_16BITS d2, d5, d8,d11, d14, d17,q11, q14, q15 // only 5 avail
// horizon filtered // horizon filtered
@@ -1133,13 +1132,13 @@ w16_hv_mc_luma_loop:
// horizon filtered // horizon filtered
UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d3 //output to d3 FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d3 //output to d3
// vst1.u8 d18, [r2]! //write 8Byte
// vertical filtered into q10/q11 // vertical filtered into q10/q11
FILTER_6TAG_8BITS_TO_16BITS d5, d8,d11, d14, d17, d2,q11, q14, q15 // only 5 avail FILTER_6TAG_8BITS_TO_16BITS d5, d8,d11, d14, d17, d2,q11, q14, q15 // only 5 avail
// horizon filtered // horizon filtered
UNPACK_2_16BITS_TO_ABC q10, q11, q9, q12, q13 UNPACK_2_16BITS_TO_ABC q10, q11, q9, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q9, q12, q13, d4 //output to d4 FILTER_3_IN_16BITS_TO_8BITS q9, q12, q13, d4 //output to d4
// vst1.u8 d20, [r2]! //write 8Byte
vst1.u8 {d3, d4}, [r2], r3 //write 16Byte vst1.u8 {d3, d4}, [r2], r3 //write 16Byte
vld1.u8 {d3-d5}, [r0], r1 //read 3rd row vld1.u8 {d3-d5}, [r0], r1 //read 3rd row
@@ -1151,13 +1150,12 @@ w16_hv_mc_luma_loop:
// horizon filtered // horizon filtered
UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d6 //output to d6 FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d6 //output to d6
// vst1.u8 d18, [r2]! //write 8Byte
// vertical filtered into q10/q11 // vertical filtered into q10/q11
FILTER_6TAG_8BITS_TO_16BITS d8,d11, d14, d17, d2, d5,q11, q14, q15 // only 5 avail FILTER_6TAG_8BITS_TO_16BITS d8,d11, d14, d17, d2, d5,q11, q14, q15 // only 5 avail
// horizon filtered // horizon filtered
UNPACK_2_16BITS_TO_ABC q10, q11, q9, q12, q13 UNPACK_2_16BITS_TO_ABC q10, q11, q9, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q9, q12, q13, d7 //output to d7 FILTER_3_IN_16BITS_TO_8BITS q9, q12, q13, d7 //output to d7
// vst1.u8 d20, [r2]! //write 8Byte
vst1.u8 {d6, d7}, [r2], r3 //write 16Byte vst1.u8 {d6, d7}, [r2], r3 //write 16Byte
vld1.u8 {d6-d8}, [r0], r1 //read 4th row vld1.u8 {d6-d8}, [r0], r1 //read 4th row
@@ -1169,13 +1167,11 @@ w16_hv_mc_luma_loop:
// horizon filtered // horizon filtered
UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q9, q10, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d9 //output to d9 FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d9 //output to d9
// vst1.u8 d18, [r2]! //write 8Byte
// vertical filtered into q10/q11 // vertical filtered into q10/q11
FILTER_6TAG_8BITS_TO_16BITS d11, d14, d17, d2, d5, d8,q11, q14, q15 // only 5 avail FILTER_6TAG_8BITS_TO_16BITS d11, d14, d17, d2, d5, d8,q11, q14, q15 // only 5 avail
// horizon filtered // horizon filtered
UNPACK_2_16BITS_TO_ABC q10, q11, q9, q12, q13 UNPACK_2_16BITS_TO_ABC q10, q11, q9, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q9, q12, q13, d10 //output to d10 FILTER_3_IN_16BITS_TO_8BITS q9, q12, q13, d10 //output to d10
// vst1.u8 d20, [r2]! //write 8Byte
vst1.u8 {d9, d10}, [r2], r3 //write 16Byte vst1.u8 {d9, d10}, [r2], r3 //write 16Byte
//d12~d17(q6~q8), d0~d8(q0~q3+d8), --> d0~d14 //d12~d17(q6~q8), d0~d8(q0~q3+d8), --> d0~d14
@@ -1193,10 +1189,10 @@ w16_hv_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w16_hv_mc_luma_loop bne w16_hv_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer22WidthEq8_neon WELS_ASM_FUNC_BEGIN McHorVer22WidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
@@ -1231,7 +1227,6 @@ w8_hv_mc_luma_loop:
UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0] FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0]
vst1.u8 d12, [r2], r3 //write 8Byte vst1.u8 d12, [r2], r3 //write 8Byte
// add r2, #8
vld1.u8 {q0}, [r0], r1 //read 2nd row vld1.u8 {q0}, [r0], r1 //read 2nd row
//the 2nd row //the 2nd row
@@ -1243,7 +1238,6 @@ w8_hv_mc_luma_loop:
UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0] FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0]
vst1.u8 d12, [r2], r3 //write 8Byte vst1.u8 d12, [r2], r3 //write 8Byte
// add r2, #8
vld1.u8 {q1}, [r0], r1 //read 3rd row vld1.u8 {q1}, [r0], r1 //read 3rd row
//the 3rd row //the 3rd row
@@ -1255,7 +1249,6 @@ w8_hv_mc_luma_loop:
UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0] FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0]
vst1.u8 d12, [r2], r3 //write 8Byte vst1.u8 d12, [r2], r3 //write 8Byte
// add r2, #8
vld1.u8 {q2}, [r0], r1 //read 4th row vld1.u8 {q2}, [r0], r1 //read 4th row
//the 4th row //the 4th row
@@ -1267,7 +1260,6 @@ w8_hv_mc_luma_loop:
UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13 UNPACK_2_16BITS_TO_ABC q6, q7, q11, q12, q13
FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0] FILTER_3_IN_16BITS_TO_8BITS q11, q12, q13, d12 //output to q6[0]
vst1.u8 d12, [r2], r3 //write 8Byte vst1.u8 d12, [r2], r3 //write 8Byte
// add r2, #8
//q4~q5, q0~q2, --> q0~q4 //q4~q5, q0~q2, --> q0~q4
vswp q0, q4 vswp q0, q4
@@ -1279,10 +1271,10 @@ w8_hv_mc_luma_loop:
cmp r4, #0 cmp r4, #0
bne w8_hv_mc_luma_loop bne w8_hv_mc_luma_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McHorVer22WidthEq4_neon WELS_ASM_FUNC_BEGIN McHorVer22WidthEq4_neon
push {r4 ,r5, r6} push {r4 ,r5, r6}
ldr r6, [sp, #12] ldr r6, [sp, #12]
@@ -1331,7 +1323,6 @@ w4_hv_mc_luma_loop:
vmov r4 ,r5, d22 vmov r4 ,r5, d22
str r4, [r2], r3 //write 4Byte str r4, [r2], r3 //write 4Byte
str r5, [r2], r3 //write 4Byte str r5, [r2], r3 //write 4Byte
// add r2, #32
//the 3rd&4th row //the 3rd&4th row
vld1.u8 {q0}, [r0], r1 //use 9(4+5), =src[3] vld1.u8 {q0}, [r0], r1 //use 9(4+5), =src[3]
@@ -1356,7 +1347,6 @@ w4_hv_mc_luma_loop:
vmov r4 ,r5, d22 vmov r4 ,r5, d22
str r4, [r2], r3 //write 4Byte str r4, [r2], r3 //write 4Byte
str r5, [r2], r3 //write 4Byte str r5, [r2], r3 //write 4Byte
// add r2, #32
//q4~q6, q0~q1, --> q0~q4 //q4~q6, q0~q1, --> q0~q4
vswp q4, q0 vswp q4, q0
@@ -1370,10 +1360,10 @@ w4_hv_mc_luma_loop:
bne w4_hv_mc_luma_loop bne w4_hv_mc_luma_loop
pop {r4, r5, r6} pop {r4, r5, r6}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McCopyWidthEq16_neon WELS_ASM_FUNC_BEGIN McCopyWidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
w16_copy_loop: w16_copy_loop:
@@ -1386,10 +1376,10 @@ w16_copy_loop:
bne w16_copy_loop bne w16_copy_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McCopyWidthEq8_neon WELS_ASM_FUNC_BEGIN McCopyWidthEq8_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
w8_copy_loop: w8_copy_loop:
@@ -1402,10 +1392,10 @@ w8_copy_loop:
bne w8_copy_loop bne w8_copy_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN McCopyWidthEq4_neon WELS_ASM_FUNC_BEGIN McCopyWidthEq4_neon
push {r4, r5, r6} push {r4, r5, r6}
ldr r4, [sp, #12] ldr r4, [sp, #12]
w4_copy_loop: w4_copy_loop:
@@ -1419,10 +1409,10 @@ w4_copy_loop:
bne w4_copy_loop bne w4_copy_loop
pop {r4, r5, r6} pop {r4, r5, r6}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* dst, int32_t dst_stride, uint8_t* srcA, uint8_t* srcB, int32_t height
WELS_ASM_FUNC_BEGIN PixelAvgWidthEq16_neon WELS_ASM_FUNC_BEGIN PixelAvgWidthEq16_neon
push {r4} push {r4}
ldr r4, [sp, #4] ldr r4, [sp, #4]
w16_pix_avg_loop: w16_pix_avg_loop:
@@ -1457,9 +1447,10 @@ w16_pix_avg_loop:
bne w16_pix_avg_loop bne w16_pix_avg_loop
pop {r4} pop {r4}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
WELS_ASM_FUNC_BEGIN PixelAvgWidthEq8_neon
WELS_ASM_FUNC_BEGIN PixelAvgWidthEq8_neon
push {r4, r5} push {r4, r5}
ldr r4, [sp, #8] ldr r4, [sp, #8]
mov r5, #16 mov r5, #16
@@ -1469,8 +1460,6 @@ w8_pix_avg_loop:
vld1.u8 {d2}, [r3], r5 vld1.u8 {d2}, [r3], r5
vld1.u8 {d1}, [r2], r5 vld1.u8 {d1}, [r2], r5
vld1.u8 {d3}, [r3], r5 vld1.u8 {d3}, [r3], r5
// add r2, #32
// add r3, #32
AVERAGE_TWO_8BITS d0, d0, d2 AVERAGE_TWO_8BITS d0, d0, d2
AVERAGE_TWO_8BITS d1, d1, d3 AVERAGE_TWO_8BITS d1, d1, d3
@@ -1481,8 +1470,6 @@ w8_pix_avg_loop:
vld1.u8 {d6}, [r3], r5 vld1.u8 {d6}, [r3], r5
vld1.u8 {d5}, [r2], r5 vld1.u8 {d5}, [r2], r5
vld1.u8 {d7}, [r3], r5 vld1.u8 {d7}, [r3], r5
// add r2, #32
// add r3, #32
AVERAGE_TWO_8BITS d4, d4, d6 AVERAGE_TWO_8BITS d4, d4, d6
AVERAGE_TWO_8BITS d5, d5, d7 AVERAGE_TWO_8BITS d5, d5, d7
@@ -1494,10 +1481,10 @@ w8_pix_avg_loop:
bne w8_pix_avg_loop bne w8_pix_avg_loop
pop {r4, r5} pop {r4, r5}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t height
WELS_ASM_FUNC_BEGIN PixelAvgWidthEq4_neon WELS_ASM_FUNC_BEGIN PixelAvgWidthEq4_neon
push {r4-r8} push {r4-r8}
ldr r4, [sp, #20] ldr r4, [sp, #20]
w4_pix_avg_loop: w4_pix_avg_loop:
@@ -1522,15 +1509,9 @@ w4_pix_avg_loop:
bne w4_pix_avg_loop bne w4_pix_avg_loop
pop {r4-r8} pop {r4-r8}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t* weights, int32_t height
//cA = (8 - dx) * (8 - dy);
//cB = dx * (8 - dy);
//cC = (8 - dx) * dy;
//cD = dx * dy
WELS_ASM_FUNC_BEGIN McChromaWidthEq8_neon
WELS_ASM_FUNC_BEGIN McChromaWidthEq8_neon
push {r4, r5} push {r4, r5}
ldr r4, [sp, #8] ldr r4, [sp, #8]
ldr r5, [sp, #12] ldr r5, [sp, #12]
@@ -1572,10 +1553,10 @@ w8_mc_chroma_loop: // each two pxl row
bne w8_mc_chroma_loop bne w8_mc_chroma_loop
pop {r4, r5} pop {r4, r5}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
//uint8_t* src, int32_t src_stride, uint8_t* dst, int32_t dst_stride, int32_t* weights, int32_t height
WELS_ASM_FUNC_BEGIN McChromaWidthEq4_neon WELS_ASM_FUNC_BEGIN McChromaWidthEq4_neon
push {r4, r5, r6} push {r4, r5, r6}
ldr r4, [sp, #12] ldr r4, [sp, #12]
@@ -1617,5 +1598,5 @@ w4_mc_chroma_loop: // each two pxl row
bne w4_mc_chroma_loop bne w4_mc_chroma_loop
pop {r4, r5, r6} pop {r4, r5, r6}
WELS_ASM_FUNC_END WELS_ASM_FUNC_END
#endif #endif