Backup/restore the xmm6-xmm15 SSE registers within asm functions on win64 Reviewed by zhiliang
Showing the changes to codec/processing/src (4 of 24 files). Show all
Unified · Split
| @@ -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 | ||
| 55 | CAdaptiveQuantization::~CAdaptiveQuantization() { | 54 | CAdaptiveQuantization::~CAdaptiveQuantization() { |
| 56 | XMMREG_PROTECT_UNINIT(AdaptiveQuantization); | ||
| 57 | } | 55 | } |
| 58 | 56 | ||
| 59 | EResult CAdaptiveQuantization::Process (int32_t iType, SPixMap* pSrcPixMap, SPixMap* pRefPixMap) { | 57 | EResult 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++; |
| @@ -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 | ||
| 90 | WELSVP_NAMESPACE_END | 89 | WELSVP_NAMESPACE_END |
| @@ -176,6 +176,7 @@ WELS_EXTERN BilateralLumaFilter8_sse2 · 175 unmodified lines | |||
| 176 | push r3 | 176 | push r3 |
| 177 | %assign push_num 1 | 177 | %assign push_num 1 |
| 178 | LOAD_2_PARA | 178 | LOAD_2_PARA |
| 179 | PUSH_XMM 8 | ||
| 179 | 180 | ||
| 180 | pxor xmm7, xmm7 | 181 | pxor xmm7, xmm7 |
| 181 | 182 | ||
| @@ -212,6 +213,7 @@ WELS_EXTERN BilateralLumaFilter8_sse2 · 30 unmodified lines | |||
| 212 | movq [r3], xmm5 | 213 | movq [r3], xmm5 |
| 213 | 214 | ||
| 214 | 215 | ||
| 216 | POP_XMM | ||
| 215 | pop r3 | 217 | pop r3 |
| 216 | %assign push_num 0 | 218 | %assign push_num 0 |
| 217 | 219 | ||
| @@ -452,6 +452,7 @@ WELS_EXTERN SampleVariance16x16_sse2 · 451 unmodified lines | |||
| 452 | push r15 | 452 | push r15 |
| 453 | %assign push_num 4 | 453 | %assign push_num 4 |
| 454 | LOAD_5_PARA | 454 | LOAD_5_PARA |
| 455 | PUSH_XMM 8 | ||
| 455 | SIGN_EXTENSION r1,r1d | 456 | SIGN_EXTENSION r1,r1d |
| 456 | SIGN_EXTENSION r3,r3d | 457 | SIGN_EXTENSION r3,r3d |
| 457 | 458 | ||
| @@ -521,6 +522,7 @@ WELS_EXTERN SampleVariance16x16_sse2 · 63 unmodified lines | |||
| 521 | sub r1, r0 | 522 | sub r1, r0 |
| 522 | mov [r4+2], r1w ; to store uiTextureIndex | 523 | mov [r4+2], r1w ; to store uiTextureIndex |
| 523 | 524 | ||
| 525 | POP_XMM | ||
| 524 | LOAD_5_PARA_POP | 526 | LOAD_5_PARA_POP |
| 525 | pop r15 | 527 | pop r15 |
| 526 | pop r14 | 528 | pop r14 |
| @@ -552,6 +554,7 @@ WELS_EXTERN VAACalcSad_sse2 · 25 unmodified lines | |||
| 552 | push r13 | 554 | push r13 |
| 553 | %assign push_num 2 | 555 | %assign push_num 2 |
| 554 | LOAD_7_PARA | 556 | LOAD_7_PARA |
| 557 | PUSH_XMM 8 | ||
| 555 | SIGN_EXTENSION r2,r2d | 558 | SIGN_EXTENSION r2,r2d |
| 556 | SIGN_EXTENSION r3,r3d | 559 | SIGN_EXTENSION r3,r3d |
| 557 | SIGN_EXTENSION r4,r4d | 560 | SIGN_EXTENSION r4,r4d |
| @@ -619,6 +622,7 @@ width_loop: · 61 unmodified lines | |||
| 619 | %undef psadframe | 622 | %undef psadframe |
| 620 | %undef psad8x8 | 623 | %undef psad8x8 |
| 621 | %undef pushsize | 624 | %undef pushsize |
| 625 | POP_XMM | ||
| 622 | LOAD_7_PARA_POP | 626 | LOAD_7_PARA_POP |
| 623 | pop r13 | 627 | pop r13 |
| 624 | pop r12 | 628 | pop r12 |
| @@ -785,6 +789,7 @@ WELS_EXTERN VAACalcSadVar_sse2 · 160 unmodified lines | |||
| 785 | push r14 | 789 | push r14 |
| 786 | push r15 | 790 | push r15 |
| 787 | %assign push_num 4 | 791 | %assign push_num 4 |
| 792 | PUSH_XMM 8 | ||
| 788 | 793 | ||
| 789 | %ifdef WIN64 | 794 | %ifdef WIN64 |
| 790 | mov r4, arg5 ;iPicStride | 795 | mov r4, arg5 ;iPicStride |
| @@ -880,6 +885,7 @@ var_width_loop: · 89 unmodified lines | |||
| 880 | paddd xmm7, xmm5 | 885 | paddd xmm7, xmm5 |
| 881 | movd [r15], xmm7 | 886 | movd [r15], xmm7 |
| 882 | 887 | ||
| 888 | POP_XMM | ||
| 883 | pop r15 | 889 | pop r15 |
| 884 | pop r14 | 890 | pop r14 |
| 885 | pop r13 | 891 | pop r13 |
| @@ -1082,6 +1088,7 @@ WELS_EXTERN VAACalcSadSsd_sse2 · 196 unmodified lines | |||
| 1082 | push r14 | 1088 | push r14 |
| 1083 | push r15 | 1089 | push r15 |
| 1084 | %assign push_num 4 | 1090 | %assign push_num 4 |
| 1091 | PUSH_XMM 10 | ||
| 1085 | 1092 | ||
| 1086 | %ifdef WIN64 | 1093 | %ifdef WIN64 |
| 1087 | mov r4,arg5 | 1094 | mov r4,arg5 |
| @@ -1192,6 +1199,7 @@ sqdiff_width_loop: · 104 unmodified lines | |||
| 1192 | mov r13, psadframe | 1199 | mov r13, psadframe |
| 1193 | movd [r13], xmm8 | 1200 | movd [r13], xmm8 |
| 1194 | 1201 | ||
| 1202 | POP_XMM | ||
| 1195 | pop r15 | 1203 | pop r15 |
| 1196 | pop r14 | 1204 | pop r14 |
| 1197 | pop r13 | 1205 | pop r13 |
| @@ -1648,6 +1656,7 @@ WELS_EXTERN VAACalcSadBgd_sse2 · 450 unmodified lines | |||
| 1648 | push r14 | 1656 | push r14 |
| 1649 | push r15 | 1657 | push r15 |
| 1650 | %assign push_num 4 | 1658 | %assign push_num 4 |
| 1659 | PUSH_XMM 10 | ||
| 1651 | %ifdef WIN64 | 1660 | %ifdef WIN64 |
| 1652 | mov r4,arg5 | 1661 | mov r4,arg5 |
| 1653 | ; mov r5,arg6 | 1662 | ; mov r5,arg6 |
| @@ -1773,6 +1782,7 @@ bgd_width_loop: · 119 unmodified lines | |||
| 1773 | mov r13, psadframe | 1782 | mov r13, psadframe |
| 1774 | movd [r13], xmm8 | 1783 | movd [r13], xmm8 |
| 1775 | 1784 | ||
| 1785 | POP_XMM | ||
| 1776 | pop r15 | 1786 | pop r15 |
| 1777 | pop r14 | 1787 | pop r14 |
| 1778 | pop r13 | 1788 | pop r13 |
| @@ -1821,6 +1831,7 @@ WELS_EXTERN VAACalcSadSsdBgd_sse2 · 42 unmodified lines | |||
| 1821 | push r14 | 1831 | push r14 |
| 1822 | push r15 | 1832 | push r15 |
| 1823 | %assign push_num 4 | 1833 | %assign push_num 4 |
| 1834 | PUSH_XMM 10 | ||
| 1824 | %ifdef WIN64 | 1835 | %ifdef WIN64 |
| 1825 | mov r4,arg5 | 1836 | mov r4,arg5 |
| 1826 | ;mov r5,arg6 | 1837 | ;mov r5,arg6 |
| @@ -1993,6 +2004,7 @@ sqdiff_bgd_width_loop: · 166 unmodified lines | |||
| 1993 | mov r14, psadframe | 2004 | mov r14, psadframe |
| 1994 | movd [r14], xmm8 | 2005 | movd [r14], xmm8 |
| 1995 | 2006 | ||
| 2007 | POP_XMM | ||
| 1996 | pop r15 | 2008 | pop r15 |
| 1997 | pop r14 | 2009 | pop r14 |
| 1998 | pop r13 | 2010 | pop r13 |