History

Merge pull request #519 from mstorsjo/push-xmm-registers

Backup/restore the xmm6-xmm15 SSE registers within asm functions on win64 Reviewed by zhiliang

volvet committed 12 years ago

Commit fb1958a2 parents b7b01fa 463362624 files · +213 −117Browse files

Showing the changes to codec/processing/src (4 of 24 files). Show all

Unified · Split

4 files
  1. codec/processing/src/adaptivequantization/AdaptiveQuantization.cpp +0 −6
  2. codec/processing/src/adaptivequantization/AdaptiveQuantization.h +0 −1
  3. codec/processing/src/asm/denoisefilter.asm +2 −0
  4. codec/processing/src/asm/vaa.asm +12 −0
codec/processing/src/adaptivequantization/AdaptiveQuantization.cpp+0−6
@@ -49,11 +49,9 @@ CAdaptiveQuantization::CAdaptiveQuantization (int32_t iCpuFlag) { · 48 unmodified lines
49 m_pfVar = NULL;49 m_pfVar = NULL;
50 WelsMemset (&m_sAdaptiveQuantParam, 0, sizeof (m_sAdaptiveQuantParam));50 WelsMemset (&m_sAdaptiveQuantParam, 0, sizeof (m_sAdaptiveQuantParam));
51 WelsInitVarFunc (m_pfVar, m_CPUFlag);51 WelsInitVarFunc (m_pfVar, m_CPUFlag);
52 XMMREG_PROTECT_INIT(AdaptiveQuantization);
53}52}
54 53
55CAdaptiveQuantization::~CAdaptiveQuantization() {54CAdaptiveQuantization::~CAdaptiveQuantization() {
56 XMMREG_PROTECT_UNINIT(AdaptiveQuantization);
57}55}
58 56
59EResult CAdaptiveQuantization::Process (int32_t iType, SPixMap* pSrcPixMap, SPixMap* pRefPixMap) {57EResult CAdaptiveQuantization::Process (int32_t iType, SPixMap* pSrcPixMap, SPixMap* pRefPixMap) {
@@ -102,7 +100,6 @@ EResult CAdaptiveQuantization::Process (int32_t iType, SPixMap* pSrcPixMap, SPix · 42 unmodified lines
102 pRefFrameTmp = pRefFrameY;100 pRefFrameTmp = pRefFrameY;
103 pCurFrameTmp = pCurFrameY;101 pCurFrameTmp = pCurFrameY;
104 for (i = 0; i < iMbWidth; i++) {102 for (i = 0; i < iMbWidth; i++) {
105 XMMREG_PROTECT_STORE(AdaptiveQuantization);
106 iSumDiff = pVaaCalcResults->pSad8x8[iMbIndex][0];103 iSumDiff = pVaaCalcResults->pSad8x8[iMbIndex][0];
107 iSumDiff += pVaaCalcResults->pSad8x8[iMbIndex][1];104 iSumDiff += pVaaCalcResults->pSad8x8[iMbIndex][1];
108 iSumDiff += pVaaCalcResults->pSad8x8[iMbIndex][2];105 iSumDiff += pVaaCalcResults->pSad8x8[iMbIndex][2];
@@ -111,7 +108,6 @@ EResult CAdaptiveQuantization::Process (int32_t iType, SPixMap* pSrcPixMap, SPix · 2 unmodified lines
111 iSQDiff = pVaaCalcResults->pSsd16x16[iMbIndex];108 iSQDiff = pVaaCalcResults->pSsd16x16[iMbIndex];
112 uiSum = pVaaCalcResults->pSum16x16[iMbIndex];109 uiSum = pVaaCalcResults->pSum16x16[iMbIndex];
113 iSQSum = pVaaCalcResults->pSumOfSquare16x16[iMbIndex];110 iSQSum = pVaaCalcResults->pSumOfSquare16x16[iMbIndex];
114 XMMREG_PROTECT_LOAD(AdaptiveQuantization);
115 111
116 iSumDiff = iSumDiff >> 8;112 iSumDiff = iSumDiff >> 8;
117 pMotionTexture->uiMotionIndex = (iSQDiff >> 8) - (iSumDiff * iSumDiff);113 pMotionTexture->uiMotionIndex = (iSQDiff >> 8) - (iSumDiff * iSumDiff);
@@ -134,9 +130,7 @@ EResult CAdaptiveQuantization::Process (int32_t iType, SPixMap* pSrcPixMap, SPix · 16 unmodified lines
134 pRefFrameTmp = pRefFrameY;130 pRefFrameTmp = pRefFrameY;
135 pCurFrameTmp = pCurFrameY;131 pCurFrameTmp = pCurFrameY;
136 for (i = 0; i < iMbWidth; i++) {132 for (i = 0; i < iMbWidth; i++) {
137 XMMREG_PROTECT_STORE(AdaptiveQuantization);
138 m_pfVar (pRefFrameTmp, iRefStride, pCurFrameTmp, iCurStride, pMotionTexture);133 m_pfVar (pRefFrameTmp, iRefStride, pCurFrameTmp, iCurStride, pMotionTexture);
139 XMMREG_PROTECT_LOAD(AdaptiveQuantization);
140 dAverageMotionIndex += pMotionTexture->uiMotionIndex;134 dAverageMotionIndex += pMotionTexture->uiMotionIndex;
141 dAverageTextureIndex += pMotionTexture->uiTextureIndex;135 dAverageTextureIndex += pMotionTexture->uiTextureIndex;
142 pMotionTexture++;136 pMotionTexture++;
codec/processing/src/adaptivequantization/AdaptiveQuantization.h+0−1
@@ -84,7 +84,6 @@ class CAdaptiveQuantization : public IStrategy { · 83 unmodified lines
84 PVarFunc m_pfVar;84 PVarFunc m_pfVar;
85 int32_t m_CPUFlag;85 int32_t m_CPUFlag;
86 SAdaptiveQuantizationParam m_sAdaptiveQuantParam;86 SAdaptiveQuantizationParam m_sAdaptiveQuantParam;
87 XMMREG_PROTECT_DECLARE(AdaptiveQuantization);
88};87};
89 88
90WELSVP_NAMESPACE_END89WELSVP_NAMESPACE_END
codec/processing/src/asm/denoisefilter.asm+2−0
@@ -176,6 +176,7 @@ WELS_EXTERN BilateralLumaFilter8_sse2 · 175 unmodified lines
176 push r3176 push r3
177 %assign push_num 1177 %assign push_num 1
178 LOAD_2_PARA178 LOAD_2_PARA
179 PUSH_XMM 8
179 180
180 pxor xmm7, xmm7181 pxor xmm7, xmm7
181 182
@@ -212,6 +213,7 @@ WELS_EXTERN BilateralLumaFilter8_sse2 · 30 unmodified lines
212 movq [r3], xmm5213 movq [r3], xmm5
213 214
214 215
216 POP_XMM
215 pop r3217 pop r3
216 %assign push_num 0218 %assign push_num 0
217 219
codec/processing/src/asm/vaa.asm+12−0
@@ -452,6 +452,7 @@ WELS_EXTERN SampleVariance16x16_sse2 · 451 unmodified lines
452 push r15452 push r15
453 %assign push_num 4453 %assign push_num 4
454 LOAD_5_PARA454 LOAD_5_PARA
455 PUSH_XMM 8
455 SIGN_EXTENSION r1,r1d456 SIGN_EXTENSION r1,r1d
456 SIGN_EXTENSION r3,r3d457 SIGN_EXTENSION r3,r3d
457 458
@@ -521,6 +522,7 @@ WELS_EXTERN SampleVariance16x16_sse2 · 63 unmodified lines
521 sub r1, r0522 sub r1, r0
522 mov [r4+2], r1w ; to store uiTextureIndex523 mov [r4+2], r1w ; to store uiTextureIndex
523 524
525 POP_XMM
524 LOAD_5_PARA_POP526 LOAD_5_PARA_POP
525 pop r15527 pop r15
526 pop r14528 pop r14
@@ -552,6 +554,7 @@ WELS_EXTERN VAACalcSad_sse2 · 25 unmodified lines
552 push r13554 push r13
553 %assign push_num 2555 %assign push_num 2
554 LOAD_7_PARA556 LOAD_7_PARA
557 PUSH_XMM 8
555 SIGN_EXTENSION r2,r2d558 SIGN_EXTENSION r2,r2d
556 SIGN_EXTENSION r3,r3d559 SIGN_EXTENSION r3,r3d
557 SIGN_EXTENSION r4,r4d560 SIGN_EXTENSION r4,r4d
@@ -619,6 +622,7 @@ width_loop: · 61 unmodified lines
619%undef psadframe622%undef psadframe
620%undef psad8x8623%undef psad8x8
621%undef pushsize624%undef pushsize
625 POP_XMM
622 LOAD_7_PARA_POP626 LOAD_7_PARA_POP
623 pop r13627 pop r13
624 pop r12628 pop r12
@@ -785,6 +789,7 @@ WELS_EXTERN VAACalcSadVar_sse2 · 160 unmodified lines
785 push r14789 push r14
786 push r15790 push r15
787 %assign push_num 4791 %assign push_num 4
792 PUSH_XMM 8
788 793
789%ifdef WIN64794%ifdef WIN64
790 mov r4, arg5 ;iPicStride795 mov r4, arg5 ;iPicStride
@@ -880,6 +885,7 @@ var_width_loop: · 89 unmodified lines
880 paddd xmm7, xmm5885 paddd xmm7, xmm5
881 movd [r15], xmm7886 movd [r15], xmm7
882 887
888 POP_XMM
883 pop r15889 pop r15
884 pop r14890 pop r14
885 pop r13891 pop r13
@@ -1082,6 +1088,7 @@ WELS_EXTERN VAACalcSadSsd_sse2 · 196 unmodified lines
1082 push r141088 push r14
1083 push r151089 push r15
1084 %assign push_num 41090 %assign push_num 4
1091 PUSH_XMM 10
1085 1092
1086%ifdef WIN641093%ifdef WIN64
1087 mov r4,arg51094 mov r4,arg5
@@ -1192,6 +1199,7 @@ sqdiff_width_loop: · 104 unmodified lines
1192 mov r13, psadframe1199 mov r13, psadframe
1193 movd [r13], xmm81200 movd [r13], xmm8
1194 1201
1202 POP_XMM
1195 pop r151203 pop r15
1196 pop r141204 pop r14
1197 pop r131205 pop r13
@@ -1648,6 +1656,7 @@ WELS_EXTERN VAACalcSadBgd_sse2 · 450 unmodified lines
1648 push r141656 push r14
1649 push r151657 push r15
1650%assign push_num 41658%assign push_num 4
1659 PUSH_XMM 10
1651%ifdef WIN641660%ifdef WIN64
1652 mov r4,arg51661 mov r4,arg5
1653 ; mov r5,arg61662 ; mov r5,arg6
@@ -1773,6 +1782,7 @@ bgd_width_loop: · 119 unmodified lines
1773 mov r13, psadframe1782 mov r13, psadframe
1774 movd [r13], xmm81783 movd [r13], xmm8
1775 1784
1785 POP_XMM
1776 pop r151786 pop r15
1777 pop r141787 pop r14
1778 pop r131788 pop r13
@@ -1821,6 +1831,7 @@ WELS_EXTERN VAACalcSadSsdBgd_sse2 · 42 unmodified lines
1821 push r141831 push r14
1822 push r151832 push r15
1823%assign push_num 41833%assign push_num 4
1834 PUSH_XMM 10
1824%ifdef WIN641835%ifdef WIN64
1825 mov r4,arg51836 mov r4,arg5
1826 ;mov r5,arg61837 ;mov r5,arg6
@@ -1993,6 +2004,7 @@ sqdiff_bgd_width_loop: · 166 unmodified lines
1993 mov r14, psadframe2004 mov r14, psadframe
1994 movd [r14], xmm82005 movd [r14], xmm8
1995 2006
2007 POP_XMM
1996 pop r152008 pop r15
1997 pop r142009 pop r14
1998 pop r132010 pop r13

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