?? cabacmodelupdate.sa
字號:
;=========================================================
;函數名: CabacModelUpdate
;功能: 更新熵編解碼上下文模型
;參數: pvCabacInfo CABAC結構指針[in/out]
; l32SliceType : Slice 類型[in]
; l32Qp : 量化值[in]
;返回值: 無
;---------------------------------------------------------
;修改日期 創建人 版本
;2006/09/21 王立軍 1.0
;=========================================================
.global _as8H264CabacCtxInitPB
.global _au8H264CabacProbability
.global _al32H264CabacEntropy
.def _CabacModelUpdate_ti
_CabacModelUpdate_ti: .cproc pvCabacInfo, l32SliceType, l32Qp
.no_mdep
.reg ptCabacInfo, l32Index, l32Ctx, l32Cost0, l32Cost1, l32Cost2
.reg Rg1, Rg0, Rg3, Rg2, Rg5, Rg4, Rg7, Rg6, atSlice, atCtxState
.reg RgB, RgA, RgD, RgC, RgF, RgE, RgH, RgG
.reg constNum0, constNum1, constNum2, constNum3, constNum4, constNum5, constNum6
.reg u16Count, u8Mps, u8State
.reg au8Probability, al32Entropy
.reg as8CtxInitPB0, as8CtxInitPB1, as8CtxInitPB2, StrideInitPB, Mask0, Mask1
.reg l32Weight, l32ModelState0, l32ModelState1, l32ModelState2, l32CtxState
.reg offSetR0, offSetR1, offSetR2, offSetRA
MVK 2, Rg0
MVK 5, Rg1
CMPEQ l32SliceType, Rg0, Rg0
CMPEQ l32SliceType, Rg1, Rg1
OR Rg0, Rg1, Rg0
[Rg0] B End
MV pvCabacInfo, ptCabacInfo
MVKL 399, l32Ctx
MVKH 399, l32Ctx
OR 0, ptCabacInfo, atSlice
ADD ptCabacInfo, 24, atCtxState
MVKL _as8H264CabacCtxInitPB, as8CtxInitPB0
MVKH _as8H264CabacCtxInitPB, as8CtxInitPB0
MVKL _au8H264CabacProbability, au8Probability
MVKH _au8H264CabacProbability, au8Probability
MVKL _al32H264CabacEntropy, al32Entropy
MVKH _al32H264CabacEntropy, al32Entropy
ZERO l32Cost0
ZERO l32Cost1
ZERO l32Cost2
MVKL 798, StrideInitPB
MVKH 798, StrideInitPB
ADD as8CtxInitPB0, StrideInitPB, as8CtxInitPB1
ADD as8CtxInitPB1, StrideInitPB, as8CtxInitPB2
;計算循環
MVK 256, constNum0
SHR constNum0, 2, constNum1
SUB constNum1, 1, constNum2
ZERO constNum3
MVK 127, constNum4
MVK 0xff, constNum5
MVK 0xff, constNum6
loop: .trip 399, 399
LDNW *atCtxState++, RgA
CLR RgA, 16, 31, u16Count
;AND RgA, constNum5, u16Count
UNPKHU4 RgA, Rg2
SHRU Rg2, 16, u8Mps
;CLR Rg2, 8, 31, u8State
AND Rg2, constNum6, u8State
SHL u16Count, 3, Rg1
CMPLT Rg1, constNum0, Mask0
EXT Mask0, 31, 31, Mask0
AND Rg1, Mask0, Rg1
ANDN constNum0, Mask0, Rg0
ADD Rg1, Rg0, l32Weight
;Index = 0 ===== 計算出l32ModelState0并為后面的數表中取數做準備 ====
LDH *as8CtxInitPB0++, RgC
SHR RgC, 8, RgD
;CLR RgC, 8, 31, RgC
AND RgC, constNum6, RgC
;CLR RgD, 8, 31, RgD
AND RgD, constNum5, RgD
MPY RgC, l32Qp, Rg3
SHR Rg3, 4, Rg2
ADD RgD, Rg2, RgD
CMPLT RgD, constNum3, Mask0
EXT Mask0,31, 31, Mask0
ANDN RgD, Mask0, RgC
CMPGT RgC, constNum4, Mask1
EXT Mask1, 31, 31, Mask1
AND constNum4, Mask1, Rg2
ANDN RgC, Mask1, Rg1
ADD Rg1, Rg2, l32ModelState0
SUB constNum4, l32ModelState0, Rg1
SHR l32ModelState0, 2, l32ModelState0
SHR Rg1, 2, offSetR0
;Index = 1 *******計算出l32ModelState1并為后面的數表中取數做準備******
LDH *as8CtxInitPB1++, RgE
SHR RgE, 8, RgF
;CLR RgE, 8, 31, RgE
AND RgE, constNum6, RgE
;CLR RgF, 8, 31, RgF
AND RgF, constNum5, RgF
MPY RgE, l32Qp, Rg4
SHR Rg4, 4, Rg4
ADD RgF, Rg4, RgF
CMPLT RgF, constNum3, Mask0
EXT Mask0,31, 31, Mask0
ANDN RgF, Mask0, RgF
CMPGT RgF, constNum4, Mask1
EXT Mask1, 31, 31, Mask1
AND constNum4, Mask1, Rg4
ANDN RgF, Mask1, Rg5
ADD Rg4, Rg5, l32ModelState1
SUB constNum4, l32ModelState1, Rg4
SHR l32ModelState1, 2, l32ModelState1
SHR Rg4, 2, offSetR1
;Index = 2 *******計算出l32ModelState2并為后面的數表中取數做準備******
LDH *as8CtxInitPB2++, RgG
SHR RgG, 8, RgH
;CLR RgG, 8, 31, RgG
AND RgG, constNum6, RgG
;CLR RgH, 8, 31, RgH
AND RgH, constNum5, RgH
MPY RgG, l32Qp, Rg6
SHR Rg6, 4, Rg6
ADD RgH, Rg6, RgH
CMPLT RgH, constNum3, Mask0
EXT Mask0,31, 31, Mask0
ANDN RgH, Mask0, RgG
CMPGT RgG, constNum4, Mask1
EXT Mask1, 31, 31, Mask1
AND constNum4, Mask1, Rg6
ANDN RgG, Mask1, Rg7
ADD Rg6, Rg7, l32ModelState2
SUB constNum4, l32ModelState2, Rg6
SHR l32ModelState2, 2, l32ModelState2
SHR Rg6, 2, offSetR2
;計算出l32CtxState并為后面的數表中取數做準備
ADD u8State, constNum1, Rg1
SUB constNum2, u8State, Rg0
CMPGT u8Mps, constNum3, Mask0
EXT Mask0, 31, 31, Mask0
AND Rg1, Mask0, Rg1
ANDN Rg0, Mask0, Rg0
ADD Rg0, Rg1, l32CtxState
SUB constNum4, l32CtxState, offSetRA
;開始從數表中取數來運算l32Cost0
LDBU *+au8Probability[l32CtxState], Rg0
LDBU *+au8Probability[offSetRA], Rg1
LDNW *+al32Entropy[l32ModelState0], Rg2
LDNW *+al32Entropy[offSetR0], Rg3
MPY Rg0, Rg2, Rg2
MPY Rg1, Rg3, Rg3
ADD Rg2, Rg3, Rg2
SHR Rg2, 8, Rg2
MPY l32Weight, Rg2, Rg2
SHR Rg2, 8, Rg2
ADD l32Cost0, Rg2, l32Cost0
;LDBU *+au8Probability[l32CtxState], Rg0
;LDBU *+au8Probability[offSetRA], Rg1
LDNW *+al32Entropy[l32ModelState1], Rg4
LDNW *+al32Entropy[offSetR1], Rg5
MPY Rg0, Rg4, Rg4
MPY Rg1, Rg5, Rg5
ADD Rg5, Rg4, Rg4
SHR Rg4, 8, Rg4
MPY l32Weight, Rg4, Rg4
SHR Rg4, 8, Rg4
ADD l32Cost1, Rg4, l32Cost1
LDNW *+al32Entropy[l32ModelState2], Rg6
LDNW *+al32Entropy[offSetR2], Rg7
MPY Rg0, Rg6, Rg6
MPY Rg1, Rg7, Rg7
ADD Rg7, Rg6, Rg6
SHR Rg6, 8, Rg6
MPY l32Weight, Rg6, Rg6
SHR Rg6, 8, Rg6
ADD l32Cost2, Rg6, l32Cost2
SUB l32Ctx, 1, l32Ctx
[l32Ctx] B loop
ZERO constNum0
ADD constNum0, 1, constNum1
ADD constNum1, 1, constNum2
SHL l32SliceType, 1, offSetR0
ZERO Mask0
ZERO Mask1
CMPLT l32Cost0, l32Cost1, Mask0
[Mask0] CMPLT l32Cost0, l32Cost2, Mask1
[Mask1] STNW constNum0, *++atSlice[offSetR0]
[Mask1] STNW l32Cost0, *++atSlice
CMPLT l32Cost1, l32Cost0, Mask0
[Mask0] CMPLT l32Cost1, l32Cost2, Mask1
[Mask1] STNW constNum1, *++atSlice[offSetR0]
[Mask1] STNW l32Cost1, *++atSlice
CMPLT l32Cost2, l32Cost1, Mask0
[Mask0] CMPLT l32Cost2, l32Cost0, Mask1
[Mask1] STNW constNum2, *++atSlice[offSetR0]
[Mask1] STNW l32Cost2, *++atSlice
End:
.return
.endproc
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -