aboutsummaryrefslogtreecommitdiff
path: root/Src/h264dec/ldecod/src/biari.asm
diff options
context:
space:
mode:
Diffstat (limited to 'Src/h264dec/ldecod/src/biari.asm')
-rw-r--r--Src/h264dec/ldecod/src/biari.asm2540
1 files changed, 2540 insertions, 0 deletions
diff --git a/Src/h264dec/ldecod/src/biari.asm b/Src/h264dec/ldecod/src/biari.asm
new file mode 100644
index 00000000..ca5f3d6d
--- /dev/null
+++ b/Src/h264dec/ldecod/src/biari.asm
@@ -0,0 +1,2540 @@
+.686
+.XMM
+.model FLAT
+
+; Slice
+tex_ctx@Slice = 100
+coeff@Slice = 15632
+coeff_ctr@Slice = 15760
+pos@Slice = 15764
+last_dquant@Slice = 88
+mot_ctx@Slice = 96
+slice_type@Slice = 64
+
+; VideoParameters
+structure@VideoParameters = 697200
+dec_picture@VideoParameters = 698192
+bitdepth_chroma_qp_scale@VideoParameters = 697456
+
+; Macroblock
+p_Slice@Macroblock = 0
+p_Vid@Macroblock = 4
+qp@macroblock = 60
+qp_scaled@Macroblock = 72
+mb_field@Macroblock = 344
+read_and_store_CBP_block_bit@Macroblock = 400
+
+; StorablePicture
+structure@StorablePicture = 0
+chroma_qp_offset@StorablePicture = 158688
+
+; TextureInfoContexts
+map_contexts@TextureInfoContexts = 436
+last_contexts@TextureInfoContexts = 3252
+one_contexts@TextureInfoContexts = 6068
+abs_contexts@TextureInfoContexts = 6508
+
+_DATA SEGMENT
+_pos2ctx_map DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map8x8
+ DD FLAT:_pos2ctx_map8x4
+ DD FLAT:_pos2ctx_map8x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map2x4c
+ DD FLAT:_pos2ctx_map4x4c
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map8x8
+ DD FLAT:_pos2ctx_map8x4
+ DD FLAT:_pos2ctx_map8x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map8x8
+ DD FLAT:_pos2ctx_map8x4
+ DD FLAT:_pos2ctx_map8x4
+ DD FLAT:_pos2ctx_map4x4
+_pos2ctx_map_int DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map8x8i
+ DD FLAT:_pos2ctx_map8x4i
+ DD FLAT:_pos2ctx_map4x8i
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map2x4c
+ DD FLAT:_pos2ctx_map4x4c
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map8x8i
+ DD FLAT:_pos2ctx_map8x4i
+ DD FLAT:_pos2ctx_map8x4i
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map4x4
+ DD FLAT:_pos2ctx_map8x8i
+ DD FLAT:_pos2ctx_map8x4i
+ DD FLAT:_pos2ctx_map8x4i
+ DD FLAT:_pos2ctx_map4x4
+_pos2ctx_last DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last8x8
+ DD FLAT:_pos2ctx_last8x4
+ DD FLAT:_pos2ctx_last8x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last2x4c
+ DD FLAT:_pos2ctx_last4x4c
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last8x8
+ DD FLAT:_pos2ctx_last8x4
+ DD FLAT:_pos2ctx_last8x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last4x4
+ DD FLAT:_pos2ctx_last8x8
+ DD FLAT:_pos2ctx_last8x4
+ DD FLAT:_pos2ctx_last8x4
+ DD FLAT:_pos2ctx_last4x4
+_DATA ENDS
+
+CONST SEGMENT
+_rLPS_table_64x4 DB 080H
+ DB 080H
+ DB 080H
+ DB 07bH
+ DB 074H
+ DB 06fH
+ DB 069H
+ DB 064H
+ DB 05fH
+ DB 05aH
+ DB 055H
+ DB 051H
+ DB 04dH
+ DB 049H
+ DB 045H
+ DB 042H
+ DB 03eH
+ DB 03bH
+ DB 038H
+ DB 035H
+ DB 033H
+ DB 030H
+ DB 02eH
+ DB 02bH
+ DB 029H
+ DB 027H
+ DB 025H
+ DB 023H
+ DB 021H
+ DB 020H
+ DB 01eH
+ DB 01dH
+ DB 01bH
+ DB 01aH
+ DB 018H
+ DB 017H
+ DB 016H
+ DB 015H
+ DB 014H
+ DB 013H
+ DB 012H
+ DB 011H
+ DB 010H
+ DB 0fH
+ DB 0eH
+ DB 0eH
+ DB 0dH
+ DB 0cH
+ DB 0cH
+ DB 0bH
+ DB 0bH
+ DB 0aH
+ DB 0aH
+ DB 09H
+ DB 09H
+ DB 08H
+ DB 08H
+ DB 07H
+ DB 07H
+ DB 07H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 02H
+ DB 0b0H
+ DB 0a7H
+ DB 09eH
+ DB 096H
+ DB 08eH
+ DB 087H
+ DB 080H
+ DB 07aH
+ DB 074H
+ DB 06eH
+ DB 068H
+ DB 063H
+ DB 05eH
+ DB 059H
+ DB 055H
+ DB 050H
+ DB 04cH
+ DB 048H
+ DB 045H
+ DB 041H
+ DB 03eH
+ DB 03bH
+ DB 038H
+ DB 035H
+ DB 032H
+ DB 030H
+ DB 02dH
+ DB 02bH
+ DB 029H
+ DB 027H
+ DB 025H
+ DB 023H
+ DB 021H
+ DB 01fH
+ DB 01eH
+ DB 01cH
+ DB 01bH
+ DB 01aH
+ DB 018H
+ DB 017H
+ DB 016H
+ DB 015H
+ DB 014H
+ DB 013H
+ DB 012H
+ DB 011H
+ DB 010H
+ DB 0fH
+ DB 0eH
+ DB 0eH
+ DB 0dH
+ DB 0cH
+ DB 0cH
+ DB 0bH
+ DB 0bH
+ DB 0aH
+ DB 09H
+ DB 09H
+ DB 09H
+ DB 08H
+ DB 08H
+ DB 07H
+ DB 07H
+ DB 02H
+ DB 0d0H
+ DB 0c5H
+ DB 0bbH
+ DB 0b2H
+ DB 0a9H
+ DB 0a0H
+ DB 098H
+ DB 090H
+ DB 089H
+ DB 082H
+ DB 07bH
+ DB 075H
+ DB 06fH
+ DB 069H
+ DB 064H
+ DB 05fH
+ DB 05aH
+ DB 056H
+ DB 051H
+ DB 04dH
+ DB 049H
+ DB 045H
+ DB 042H
+ DB 03fH
+ DB 03bH
+ DB 038H
+ DB 036H
+ DB 033H
+ DB 030H
+ DB 02eH
+ DB 02bH
+ DB 029H
+ DB 027H
+ DB 025H
+ DB 023H
+ DB 021H
+ DB 020H
+ DB 01eH
+ DB 01dH
+ DB 01bH
+ DB 01aH
+ DB 019H
+ DB 017H
+ DB 016H
+ DB 015H
+ DB 014H
+ DB 013H
+ DB 012H
+ DB 011H
+ DB 010H
+ DB 0fH
+ DB 0fH
+ DB 0eH
+ DB 0dH
+ DB 0cH
+ DB 0cH
+ DB 0bH
+ DB 0bH
+ DB 0aH
+ DB 0aH
+ DB 09H
+ DB 09H
+ DB 08H
+ DB 02H
+ DB 0f0H
+ DB 0e3H
+ DB 0d8H
+ DB 0cdH
+ DB 0c3H
+ DB 0b9H
+ DB 0afH
+ DB 0a6H
+ DB 09eH
+ DB 096H
+ DB 08eH
+ DB 087H
+ DB 080H
+ DB 07aH
+ DB 074H
+ DB 06eH
+ DB 068H
+ DB 063H
+ DB 05eH
+ DB 059H
+ DB 055H
+ DB 050H
+ DB 04cH
+ DB 048H
+ DB 045H
+ DB 041H
+ DB 03eH
+ DB 03bH
+ DB 038H
+ DB 035H
+ DB 032H
+ DB 030H
+ DB 02dH
+ DB 02bH
+ DB 029H
+ DB 027H
+ DB 025H
+ DB 023H
+ DB 021H
+ DB 01fH
+ DB 01eH
+ DB 01cH
+ DB 01bH
+ DB 019H
+ DB 018H
+ DB 017H
+ DB 016H
+ DB 015H
+ DB 014H
+ DB 013H
+ DB 012H
+ DB 011H
+ DB 010H
+ DB 0fH
+ DB 0eH
+ DB 0eH
+ DB 0dH
+ DB 0cH
+ DB 0cH
+ DB 0bH
+ DB 0bH
+ DB 0aH
+ DB 09H
+ DB 02H
+_AC_next_state_MPS_64 DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0eH
+ DB 0fH
+ DB 010H
+ DB 011H
+ DB 012H
+ DB 013H
+ DB 014H
+ DB 015H
+ DB 016H
+ DB 017H
+ DB 018H
+ DB 019H
+ DB 01aH
+ DB 01bH
+ DB 01cH
+ DB 01dH
+ DB 01eH
+ DB 01fH
+ DB 020H
+ DB 021H
+ DB 022H
+ DB 023H
+ DB 024H
+ DB 025H
+ DB 026H
+ DB 027H
+ DB 028H
+ DB 029H
+ DB 02aH
+ DB 02bH
+ DB 02cH
+ DB 02dH
+ DB 02eH
+ DB 02fH
+ DB 030H
+ DB 031H
+ DB 032H
+ DB 033H
+ DB 034H
+ DB 035H
+ DB 036H
+ DB 037H
+ DB 038H
+ DB 039H
+ DB 03aH
+ DB 03bH
+ DB 03cH
+ DB 03dH
+ DB 03eH
+ DB 03eH
+ DB 03fH
+_AC_next_state_LPS_64 DB 00H
+ DB 00H
+ DB 01H
+ DB 02H
+ DB 02H
+ DB 04H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 09H
+ DB 0bH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0dH
+ DB 0fH
+ DB 0fH
+ DB 010H
+ DB 010H
+ DB 012H
+ DB 012H
+ DB 013H
+ DB 013H
+ DB 015H
+ DB 015H
+ DB 016H
+ DB 016H
+ DB 017H
+ DB 018H
+ DB 018H
+ DB 019H
+ DB 01aH
+ DB 01aH
+ DB 01bH
+ DB 01bH
+ DB 01cH
+ DB 01dH
+ DB 01dH
+ DB 01eH
+ DB 01eH
+ DB 01eH
+ DB 01fH
+ DB 020H
+ DB 020H
+ DB 021H
+ DB 021H
+ DB 021H
+ DB 022H
+ DB 022H
+ DB 023H
+ DB 023H
+ DB 023H
+ DB 024H
+ DB 024H
+ DB 024H
+ DB 025H
+ DB 025H
+ DB 025H
+ DB 026H
+ DB 026H
+ DB 03fH
+_renorm_table_32 DB 06H
+ DB 05H
+ DB 04H
+ DB 04H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ _renorm_table_256 DB 06H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+_maxpos DB 0fH
+ DB 0eH
+ DB 03fH
+ DB 01fH
+ DB 01fH
+ DB 0fH
+ DB 03H
+ DB 0eH
+ DB 07H
+ DB 0fH
+ DB 0fH
+ DB 0eH
+ DB 03fH
+ DB 01fH
+ DB 01fH
+ DB 0fH
+ DB 0fH
+ DB 0eH
+ DB 03fH
+ DB 01fH
+ DB 01fH
+ DB 0fH
+ ORG $+2
+_c1isdc DB 01H
+ DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ ORG $+2
+_type2ctx_bcbp DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 05H
+ DB 05H
+ DB 0aH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 010H
+ DB 011H
+ DB 012H
+ DB 013H
+ DB 013H
+ DB 014H
+ ORG $+2
+_type2ctx_map DW 00H
+DW 010H
+DW 020H
+DW 030H
+DW 040H
+DW 050H
+DW 060H
+DW 070H
+DW 060H
+DW 060H
+DW 0A0H
+DW 0B0H
+DW 0C0H
+DW 0D0H
+DW 0E0H
+DW 0F0H
+DW 0100H
+DW 0110H
+DW 0120H
+DW 0130H
+DW 0140H
+DW 0150H
+ ORG $+2
+_type2ctx_last DW 00H
+DW 010H
+DW 020H
+DW 030H
+DW 040H
+DW 050H
+DW 060H
+DW 070H
+DW 060H
+DW 060H
+DW 0A0H
+DW 0B0H
+DW 0C0H
+DW 0D0H
+DW 0E0H
+DW 0F0H
+DW 0100H
+DW 0110H
+DW 0120H
+DW 0130H
+DW 0140H
+DW 0150H
+ ORG $+2
+_type2ctx_one DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 05H
+ DB 05H
+ DB 0aH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 010H
+ DB 011H
+ DB 012H
+ DB 013H
+ DB 013H
+ DB 014H
+ ORG $+2
+_type2ctx_abs DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 05H
+ DB 05H
+ DB 0aH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 010H
+ DB 011H
+ DB 012H
+ DB 013H
+ DB 013H
+ DB 014H
+ ORG $+2
+plus_one_clip4 DD 1,2,3,4,4
+plus_one_clip3 DD 1,2,3,3
+_max_c2 DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip3
+ DD plus_one_clip4
+ DD plus_one_clip3
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ DD plus_one_clip4
+ ORG $+6
+_pos2ctx_map8x8 DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 05H
+ DB 04H
+ DB 04H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 05H
+ DB 05H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 03H
+ DB 03H
+ DB 06H
+ DB 07H
+ DB 07H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 09H
+ DB 08H
+ DB 07H
+ DB 07H
+ DB 06H
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0bH
+ DB 06H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 0eH
+ DB 0aH
+ DB 09H
+ DB 08H
+ DB 06H
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0bH
+ DB 06H
+ DB 09H
+ DB 0eH
+ DB 0aH
+ DB 09H
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0bH
+ DB 0eH
+ DB 0aH
+ DB 0cH
+ DB 0eH
+_pos2ctx_map8x4 DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 0bH
+ DB 09H
+ DB 08H
+ DB 06H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 0bH
+ DB 09H
+ DB 08H
+ DB 06H
+ DB 0cH
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 0bH
+ DB 09H
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 0eH
+_pos2ctx_map4x4 DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0eH
+ DB 0eH
+_pos2ctx_map2x4c DB 00H
+ DB 00H
+ DB 01H
+ DB 01H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+_pos2ctx_map4x4c DB 00H
+ DB 00H
+ DB 00H
+ DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+_pos2ctx_map8x8i DB 00H
+ DB 01H
+ DB 01H
+ DB 02H
+ DB 02H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 07H
+ DB 07H
+ DB 07H
+ DB 08H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 08H
+ DB 0bH
+ DB 0cH
+ DB 0bH
+ DB 09H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 08H
+ DB 0bH
+ DB 0cH
+ DB 0bH
+ DB 09H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 08H
+ DB 0bH
+ DB 0cH
+ DB 0bH
+ DB 09H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 08H
+ DB 0dH
+ DB 0dH
+ DB 09H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 08H
+ DB 0dH
+ DB 0dH
+ DB 09H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+_pos2ctx_map8x4i DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 03H
+ DB 04H
+ DB 07H
+ DB 06H
+ DB 08H
+ DB 09H
+ DB 07H
+ DB 06H
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 0bH
+ DB 0cH
+ DB 0cH
+ DB 0aH
+ DB 0bH
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+_pos2ctx_map4x8i DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 02H
+ DB 07H
+ DB 07H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 05H
+ DB 06H
+ DB 09H
+ DB 0aH
+ DB 0aH
+ DB 0bH
+ DB 0bH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0dH
+ DB 0eH
+ DB 0eH
+ DB 0eH
+_pos2ctx_last8x8 DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 05H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 06H
+ DB 07H
+ DB 07H
+ DB 07H
+ DB 07H
+ DB 08H
+ DB 08H
+ DB 08H
+ DB 08H
+_pos2ctx_last8x4 DB 00H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 01H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 03H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 04H
+ DB 05H
+ DB 05H
+ DB 06H
+ DB 06H
+ DB 07H
+ DB 07H
+ DB 08H
+ DB 08H
+_pos2ctx_last4x4 DB 00H
+ DB 01H
+ DB 02H
+ DB 03H
+ DB 04H
+ DB 05H
+ DB 06H
+ DB 07H
+ DB 08H
+ DB 09H
+ DB 0aH
+ DB 0bH
+ DB 0cH
+ DB 0dH
+ DB 0eH
+ DB 0fH
+_pos2ctx_last2x4c DB 00H
+ DB 00H
+ DB 01H
+ DB 01H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+ DB 02H
+_pos2ctx_last4x4c DB 00, 00, 00, 00, 01, 01, 01, 01, 02, 02, 02, 02, 02, 02, 02, 02
+plus_one_clip0_4 DD 0,2,3,4,4
+
+align 16
+_QP_SCALE_CR DD 00H
+ DD 01H
+ DD 02H
+ DD 03H
+ DD 04H
+ DD 05H
+ DD 06H
+ DD 07H
+ DD 08H
+ DD 09H
+ DD 0aH
+ DD 0bH
+ DD 0cH
+ DD 0dH
+ DD 0eH
+ DD 0fH
+ DD 010H
+ DD 011H
+ DD 012H
+ DD 013H
+ DD 014H
+ DD 015H
+ DD 016H
+ DD 017H
+ DD 018H
+ DD 019H
+ DD 01aH
+ DD 01bH
+ DD 01cH
+ DD 01dH
+ DD 01dH
+ DD 01eH
+ DD 01fH
+ DD 020H
+ DD 020H
+ DD 021H
+ DD 022H
+ DD 022H
+ DD 023H
+ DD 023H
+ DD 024H
+ DD 024H
+ DD 025H
+ DD 025H
+ DD 025H
+ DD 026H
+ DD 026H
+ DD 026H
+ DD 027H
+ DD 027H
+ DD 027H
+ DD 027H
+ align 16
+_51 DD 51
+CONST ENDS
+
+
+PUBLIC _biari_decode_symbol
+_TEXT SEGMENT
+dep = 4 ; size = 4
+bi_ct = 8 ; size = 4
+_biari_decode_symbol PROC
+ STACKOFFSET=0
+ mov edx, DWORD PTR dep[esp+STACKOFFSET] ; edx = dep
+ STACKOFFSET=STACKOFFSET+4
+ push ebx
+ mov ebx, DWORD PTR bi_ct[esp+STACKOFFSET] ; ebx = bi_ct
+ movzx eax, WORD PTR [ebx] ; eax = state
+ push ebp
+ push edi
+ STACKOFFSET = STACKOFFSET+8
+
+ mov edi, DWORD PTR [edx] ; edi = range
+ mov ecx, edi ; ecx = range
+ and ecx, 0C0H ; range >>= 6
+ movzx ebp, BYTE PTR _rLPS_table_64x4[ecx+eax] ; ebp = rLPS
+
+ ; register state:
+ ; eax: state (bi_ct->state)
+ ; ebx: bi_ct
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ mov ecx, DWORD PTR [edx+8] ; ecx = bitsleft
+ sub edi, ebp ; range -= rLPS
+ shl edi, cl ; range << bitsleft
+ cmp DWORD PTR [edx+4], edi ; value < (range << bitsleft)
+ jge SHORT CABAC@LPS
+
+ movzx ax, BYTE PTR _AC_next_state_MPS_64[eax] ; eax = state = AC_next_state_MPS_64[state]
+ shr edi, cl ; undo earlier shift
+ mov WORD PTR [ebx], ax ; bi_ct->MPS = state
+ cmp edi, 256 ; 00000100H
+ setb cl
+
+ ; register state
+ ; eax: state
+ ; ebx: bi_ct
+ ; ecx: state (old)
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ shl edi, cl
+ sub DWORD PTR [edx+8], ecx ; dep->DbitsLeft--
+ mov DWORD PTR [edx], edi ; dep->Drange = range
+ movzx eax, BYTE PTR [ebx+2] ; return bit
+ jz SHORT READ_TWO_BYTES; if (dep->DbitsLeft==0)
+
+ pop edi
+ pop ebp
+ pop ebx
+ ret 0
+align 16
+CABAC@LPS:
+ sub DWORD PTR [edx+4], edi
+ movzx cx, BYTE PTR _AC_next_state_LPS_64[eax] ; cx: state = AC_next_state_LPS_64[state]
+ mov WORD PTR [ebx], cx ; store state back to bi_ct->MPS
+
+ ; register state:
+ ; eax: state (old)
+ ; ebx: bi_ct
+ ; ecx: state (new)
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ mov edi, ebx
+ test eax, eax ; if state(old) == 0
+ movzx ecx, BYTE PTR _renorm_table_256[ebp] ; ecx = renorm_table_32[rLPS>>3]
+ sete bl ; bl = 1 [ if state(old) == 0 ]
+ movzx eax, BYTE PTR [edi+2]
+ xor eax, 1
+ xor BYTE PTR [edi+2], bl ; al ^= bi_ct->state
+
+ ; register state:
+ ; eax: !state
+ ; ebx: bi_ct
+ ; ecx: renorm
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ shl ebp, cl ; ebp = range = rLPS <<= renorm
+ sub DWORD PTR [edx+8], ecx ; dep->DbitsLeft -= renorm;
+ mov DWORD PTR [edx], ebp ; dep->Drange = range;
+ jle SHORT READ_TWO_BYTES ; if( dep->DbitsLeft <= 0 )
+
+ ; register state:
+ ; eax: !state
+ ; ebx: bi_ct
+ ; ecx: renorm
+ ; edx: dep
+ ; edi: range
+ ; ebp: range = rLPS <<= renorm
+
+ pop edi
+ pop ebp
+ pop ebx
+ ret 0
+align 16
+READ_TWO_BYTES:
+
+ ; register state:
+ ; eax: !state
+ ; ebx: bi_ct
+ ; ecx: renorm
+ ; edx: dep
+ ; edi: range
+
+ mov ebx, DWORD PTR [edx+16] ; eax = dep->Dcodestrm_len
+ mov ecx, DWORD PTR [ebx] ; ecx = *dep->Dcodestrm_len
+ lea edi, DWORD PTR [ecx+2] ; edi = *dep->Dcodestrm_len + 2
+ mov DWORD PTR [ebx], edi ; *dep->Dcodestrm_len += 2
+ mov ebx, DWORD PTR [edx+12] ; edx = dep->Dcodestrm
+ movzx ecx, WORD PTR [ebx+ecx]
+ xchg cl, ch
+ shl DWORD PTR [edx+4], 16
+ mov WORD PTR [edx+4], cx
+
+ add DWORD PTR [edx+8], 16 ; dep->DbitsLeft += 16
+ ;mov eax, DWORD PTR _bit$[esp+STACKOFFSET] ; eax = bit = return value
+ pop edi
+ pop ebp
+ pop ebx
+ ret 0
+_biari_decode_symbol ENDP
+_TEXT ENDS
+
+;
+;
+; a version of biari_decode_symbol slightly optimized
+; pass dep in edx and ctx in eax. edx retains dep on exit
+
+_TEXT SEGMENT
+_biari_decode_symbol_map PROC NEAR
+ STACKOFFSET=0
+ push ebx
+ STACKOFFSET=4
+ movzx ebx, WORD PTR [eax] ; ebx = state
+ push ebp
+ push edi
+ STACKOFFSET = 12
+
+ mov edi, DWORD PTR [edx] ; edi = range
+ mov ecx, edi ; ecx = range
+ and ecx, 0C0H ; range >>= 6
+ movzx ebp, BYTE PTR _rLPS_table_64x4[ecx+ebx] ; ebp = rLPS
+
+ ; register state:
+ ; ebx: state (bi_ct->state)
+ ; eax: bi_ct
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ mov ecx, DWORD PTR [edx+8] ; ecx = bitsleft
+ sub edi, ebp ; range -= rLPS
+ shl edi, cl ; range << bitsleft
+ cmp DWORD PTR [edx+4], edi ; value < (range << bitsleft)
+ jge SHORT CABAC_OPT@LPS
+; MPS
+ movzx bx, BYTE PTR _AC_next_state_MPS_64[ebx] ; ebx = state = AC_next_state_MPS_64[state]
+ shr edi, cl ; undo earlier shift
+ mov WORD PTR [eax], bx ; bi_ct->MPS = state
+ cmp edi, 256 ; 00000100H
+ setb cl
+
+ ; register state
+ ; ebx: state
+ ; eax: bi_ct
+ ; ecx: state (old)
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ shl edi, cl
+ sub DWORD PTR [edx+8], ecx ; dep->DbitsLeft--
+ mov DWORD PTR [edx], edi ; dep->Drange = range
+ movzx eax, BYTE PTR [eax+2] ; return bit
+ jz SHORT READ_TWO_BYTES ; if (dep->DbitsLeft==0)
+
+ ; register state
+ ; ebx: state
+ ; eax: bi_ct
+ ; ecx: range<<1
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ pop edi
+ pop ebp
+ pop ebx
+ ret 0
+align 16
+CABAC_OPT@LPS:
+ sub DWORD PTR [edx+4], edi
+ movzx cx, BYTE PTR _AC_next_state_LPS_64[ebx] ; cx: state = AC_next_state_LPS_64[state]
+ mov WORD PTR [eax], cx ; store state back to bi_ct->MPS
+
+ ; register state:
+ ; ebx: state (old)
+ ; eax: bi_ct
+ ; ecx: state (new)
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ mov edi, eax
+ movzx eax, BYTE PTR [eax+2]
+ xor eax, 1
+ test ebx, ebx ; if state(old) == 0
+ movzx ecx, BYTE PTR _renorm_table_256[ebp] ; ecx = renorm_table_32[rLPS>>3]
+ sete bl ; bl = 1 [ if state(old) == 0 ]
+ xor BYTE PTR [edi+2], bl ; bl ^= bi_ct->state
+
+ ; register state:
+ ; ebx: !state
+ ; eax: bi_ct
+ ; ecx: renorm
+ ; edx: dep
+ ; edi: range
+ ; ebp: rLPS
+
+ shl ebp, cl ; ebp = range = rLPS <<= renorm
+ sub DWORD PTR [edx+8], ecx ; dep->DbitsLeft -= renorm;
+ mov DWORD PTR [edx], ebp ; dep->Drange = range;
+ jle SHORT READ_TWO_BYTES ; if( dep->DbitsLeft <= 0 )
+
+ ; register state:
+ ; ebx: !state
+ ; eax: bi_ct
+ ; ecx: renorm
+ ; edx: dep
+ ; edi: range
+ ; ebp: range = rLPS <<= renorm
+
+ pop edi
+ pop ebp
+ pop ebx
+ ret 0
+align 16
+READ_TWO_BYTES:
+
+ ; register state:
+ ; ebx: !state
+ ; eax: bi_ct
+ ; ecx: renorm
+ ; edx: dep
+ ; edi: range
+
+ mov ebx, DWORD PTR [edx+16] ; ebx = dep->Dcodestrm_len
+ mov ecx, DWORD PTR [ebx] ; ecx = *dep->Dcodestrm_len
+ lea edi, DWORD PTR [ecx+2] ; edi = *dep->Dcodestrm_len + 2
+ mov DWORD PTR [ebx], edi ; *dep->Dcodestrm_len += 2
+ mov ebx, DWORD PTR [edx+12] ; edx = dep->Dcodestrm
+ movzx ecx, WORD PTR [ebx+ecx]
+ xchg cl, ch
+ shl DWORD PTR [edx+4], 16
+ mov WORD PTR [edx+4], cx
+
+ add DWORD PTR [edx+8], 16 ; dep->DbitsLeft += 16
+ pop edi
+ pop ebp
+ pop ebx
+ ret 0
+
+_biari_decode_symbol_map ENDP
+_TEXT ENDS
+
+
+; ebx, ebp and edi are NOT preserved
+; pass tex_ctx in ebp
+; pass type in ebx
+; pass dep in edx
+; pass coeff in edi
+SigCoefFunction MACRO MaxC2, TypeCtxOne, TypeCtxAbs, MaxPos
+_abs_contexts$ = 28 ; local variable (safe because of how the function is called)
+_one_contexts$ = 32 ; local variable (safe because of how the function is called)
+STACKOFFSET=0
+ lea eax, DWORD PTR [ebp+TypeCtxOne*20+6068] ; 6068 = offsetof(tex_ctx, one_contexts)
+ mov DWORD PTR _one_contexts$[esp+STACKOFFSET], eax ; one_contexts = tex_ctx->one_contexts[type2ctx_one[type]];
+ ;push esi
+ STACKOFFSET=STACKOFFSET+0
+
+ ;esi: i (loop variable) = maxpos[type]
+ lea ecx, DWORD PTR [ebp+TypeCtxAbs*20+6508]
+ mov ebp, 1 ; ebp: c1
+ xor ebx, ebx ; ebx: c2
+ mov DWORD PTR _abs_contexts$[esp+STACKOFFSET], ecx ; abs_contexts = tex_ctx->abs_contexts[type2ctx_abs[type]];
+SIGN_COEFF@LOOP_AGAIN:
+ cmp WORD PTR [edi+esi*2], 0 ;if (coeff[i]!=0)
+ je SHORT SIGN_COEFF@LOOP_ITR
+ mov ecx, DWORD PTR _one_contexts$[esp+STACKOFFSET]
+ lea eax, DWORD PTR [ecx+ebp*4]
+ mov ebp, DWORD PTR plus_one_clip0_4[ebp*4] ; c1 = plus_one_clip0_4[c1];
+ call _biari_decode_symbol_map ; biari_decode_symbol (dep_dp, one_contexts + c1);
+ test eax, eax
+ jz SHORT SIGN_COEFF@DECODE_EQ_PROB
+ ;add WORD PTR [edi+esi*2], ax ; coeff[i] +=
+ mov ecx, DWORD PTR _abs_contexts$[esp+STACKOFFSET]
+ lea eax, DWORD PTR [ecx+ebx*4]
+ call _unary_exp_golomb_level_decode ;unary_exp_golomb_level_decode (dep_dp, abs_contexts + c2);
+ inc eax
+ add WORD PTR [edi+esi*2], ax ; coeff[i] += return val
+ xor ebp, ebp ; c1 = 0
+ mov ebx, DWORD PTR MaxC2[ebx*4]
+SIGN_COEFF@DECODE_EQ_PROB:
+ call _biari_decode_symbol_eq_prob_asm ; biari_decode_symbol_eq_prob(dep_dp)
+ js SHORT SIGN_COEFF@LOOP_ITR
+ neg WORD PTR [edi+esi*2]
+SIGN_COEFF@LOOP_ITR:
+ sub esi, 1
+ jns SHORT SIGN_COEFF@LOOP_AGAIN
+ pop esi
+ ret 0
+ENDM
+
+_TEXT SEGMENT
+_read_significant_coefficients0 PROC
+SigCoefFunction plus_one_clip4, 0, 0, 15
+_read_significant_coefficients0 ENDP
+_read_significant_coefficients1 PROC
+SigCoefFunction plus_one_clip4, 1, 1, 14
+_read_significant_coefficients1 ENDP
+_read_significant_coefficients2 PROC
+SigCoefFunction plus_one_clip4, 2, 2, 63
+_read_significant_coefficients2 ENDP
+_read_significant_coefficients3 PROC
+SigCoefFunction plus_one_clip4, 3, 3, 31
+_read_significant_coefficients3 ENDP
+_read_significant_coefficients4 PROC
+SigCoefFunction plus_one_clip4, 3, 3, 31
+_read_significant_coefficients4 ENDP
+_read_significant_coefficients5 PROC
+SigCoefFunction plus_one_clip4, 4, 4, 15
+_read_significant_coefficients5 ENDP
+_read_significant_coefficients6 PROC
+SigCoefFunction plus_one_clip3, 5, 5, 3
+_read_significant_coefficients6 ENDP
+_read_significant_coefficients7 PROC
+SigCoefFunction plus_one_clip4, 6, 6, 14
+_read_significant_coefficients7 ENDP
+_read_significant_coefficients8 PROC
+SigCoefFunction plus_one_clip3, 5, 5, 7
+_read_significant_coefficients8 ENDP
+_read_significant_coefficients9 PROC
+SigCoefFunction plus_one_clip4, 5, 5, 15
+_read_significant_coefficients9 ENDP
+_read_significant_coefficients10 PROC
+SigCoefFunction plus_one_clip4, 10, 10, 15
+_read_significant_coefficients10 ENDP
+_read_significant_coefficients11 PROC
+SigCoefFunction plus_one_clip4, 11, 11, 14
+_read_significant_coefficients11 ENDP
+_read_significant_coefficients12 PROC
+SigCoefFunction plus_one_clip4, 12, 12, 63
+_read_significant_coefficients12 ENDP
+_read_significant_coefficients13 PROC
+SigCoefFunction plus_one_clip4, 13, 13, 31
+_read_significant_coefficients13 ENDP
+_read_significant_coefficients14 PROC
+SigCoefFunction plus_one_clip4, 13, 13, 31
+_read_significant_coefficients14 ENDP
+_read_significant_coefficients15 PROC
+SigCoefFunction plus_one_clip4, 14, 14, 15
+_read_significant_coefficients15 ENDP
+_read_significant_coefficients16 PROC
+SigCoefFunction plus_one_clip4, 16, 16, 15
+_read_significant_coefficients16 ENDP
+_read_significant_coefficients17 PROC
+SigCoefFunction plus_one_clip4, 17, 17, 14
+_read_significant_coefficients17 ENDP
+_read_significant_coefficients18 PROC
+SigCoefFunction plus_one_clip4, 18, 18, 63
+_read_significant_coefficients18 ENDP
+_read_significant_coefficients19 PROC
+SigCoefFunction plus_one_clip4, 19, 19, 31
+_read_significant_coefficients19 ENDP
+_read_significant_coefficients20 PROC
+SigCoefFunction plus_one_clip4, 19, 19, 31
+_read_significant_coefficients20 ENDP
+_read_significant_coefficients21 PROC
+SigCoefFunction plus_one_clip4, 20, 20, 15
+_read_significant_coefficients21 ENDP
+_TEXT ENDS
+
+
+;
+; push eax ; currSlice->coeff
+; push ecx ; tex_ctx
+; edi is NOT preserved
+; pass currMB in edi
+; pass dep in ebp
+; pass type in ebx
+; on return, edi contains coeff, edx contains dep
+
+
+SigMapFunction MACRO PosCtxMap, TypeCtxLast, IsDC, MaxPos, PosCtxLast, TypeCtxMap, Func
+last_ctx$ = 24 ; local variable (cheating and using stack space from _readRunLevel_CABAC)
+coeff_ctr$ = 28 ; local variable (cheating and using stack space from _readRunLevel_CABAC)
+ STACKOFFSET=0
+ mov edx, DWORD PTR [edi+p_Vid@Macroblock] ; edx: p_Vid
+ push esi
+ xor esi, esi
+ STACKOFFSET=STACKOFFSET+4
+ mov edx, DWORD PTR [edx+structure@VideoParameters]
+ add edx, DWORD PTR [edi+mb_field@Macroblock] ; currMB->mb_field
+ mov edi, eax ; edi: coeff
+ mov eax, 1408 ; 16 * 22 * sizeof(BiContextType)
+ cmovz eax, esi
+ mov edx, OFFSET PosCtxMap
+ cmovnz edx, DWORD PTR _pos2ctx_map_int[ebx*4]
+ IF IsDC EQ 0
+ lea ebx, [edx + 1]
+ ELSE
+ mov ebx, edx ; pos2ctx_Map = (fld) ? pos2ctx_map_int[type] : pos2ctx_map[type];
+ ENDIF
+ mov edx, ebp
+ lea ebp, [eax+ecx+TypeCtxMap*64+map_contexts@TextureInfoContexts] ; map_ctx = tex_ctx->map_contexts[fld][type2ctx_map [type]];
+ lea ecx, DWORD PTR [eax+ecx+TypeCtxLast*64+last_contexts@TextureInfoContexts]
+ mov DWORD PTR last_ctx$[esp+STACKOFFSET], ecx ; last_ctx = tex_ctx->last_contexts[fld][type2ctx_last[type]];
+ mov DWORD PTR coeff_ctr$[esp+STACKOFFSET], esi; coeff_ctr = 0
+ ;jne LOOP_AGAIN
+
+ ; esi: i
+ ; ebx: i1 (loop end)
+ ; ebp: dep_dp
+ ; edi: coeff
+; for (i=i0; i < i1; ++i) // if last coeff is reached, it has to be significant
+LOOP_AGAIN:
+
+; --- read significance symbol ---
+; if (biari_decode_symbol (dep_dp, map_ctx + pos2ctx_Map[i]))
+
+ movzx eax, BYTE PTR [esi+ebx]
+ lea eax, DWORD PTR [ebp+eax*4]
+ call _biari_decode_symbol_map
+ test eax, eax
+ mov WORD PTR [edi+esi*2], ax ; coeff[i] = biari_decode_symbol()
+ je SHORT LOOP_ITR
+
+; --- read last coefficient symbol ---
+; if (biari_decode_symbol (dep_dp, last_ctx + last[i]))
+
+ inc DWORD PTR coeff_ctr$[esp+STACKOFFSET] ; coeff_ctr++
+ IF IsDC EQ 0
+ movzx ecx, BYTE PTR PosCtxLast[esi+1]
+ ELSE
+ movzx ecx, BYTE PTR PosCtxLast[esi]
+ ENDIF
+ mov eax, DWORD PTR last_ctx$[esp+STACKOFFSET]
+ lea eax, DWORD PTR [eax+ecx*4]
+ call _biari_decode_symbol_map
+ test eax, eax
+ je SHORT LOOP_ITR
+
+ mov eax, DWORD PTR coeff_ctr$[esp+STACKOFFSET]; return coeff_ctr;
+ mov ecx, DWORD PTR [esp]
+ mov ebp, DWORD PTR [ecx+tex_ctx@Slice] ; ; edx: currSlice->tex_ctx
+ mov DWORD PTR [ecx+coeff_ctr@Slice], eax ; currSlice->coeff_ctr = return value (read_significance_map)
+ jmp Func
+ align 16
+LOOP_ITR:
+ inc esi
+ cmp esi, MaxPos
+ jl SHORT LOOP_AGAIN
+ mov eax, DWORD PTR coeff_ctr$[esp+STACKOFFSET]
+ mov WORD PTR [edi+esi*2], 1
+ inc eax
+ mov ecx, DWORD PTR [esp]
+ mov ebp, DWORD PTR [ecx+tex_ctx@Slice] ; ; edx: currSlice->tex_ctx
+ mov DWORD PTR [ecx+coeff_ctr@Slice], eax ; currSlice->coeff_ctr = return value (read_significance_map)
+ jmp Func
+ENDM
+
+_TEXT SEGMENT
+_read_significance_map0 PROC
+SigMapFunction _pos2ctx_map4x4, 0, 1, 15, _pos2ctx_last4x4, 0, _read_significant_coefficients0
+_read_significance_map0 ENDP
+_read_significance_map1 PROC
+SigMapFunction _pos2ctx_map4x4, 1, 0, 14, _pos2ctx_last4x4, 1, _read_significant_coefficients1
+_read_significance_map1 ENDP
+_read_significance_map2 PROC
+SigMapFunction _pos2ctx_map8x8, 2, 1, 63, _pos2ctx_last8x8, 2, _read_significant_coefficients2
+_read_significance_map2 ENDP
+_read_significance_map3 PROC
+SigMapFunction _pos2ctx_map8x4, 3, 1, 31, _pos2ctx_last8x4, 3, _read_significant_coefficients3
+_read_significance_map3 ENDP
+_read_significance_map4 PROC
+SigMapFunction _pos2ctx_map8x4, 4, 1, 31, _pos2ctx_last8x4, 4, _read_significant_coefficients4
+_read_significance_map4 ENDP
+_read_significance_map5 PROC
+SigMapFunction _pos2ctx_map4x4, 5, 1, 15, _pos2ctx_last4x4, 5, _read_significant_coefficients5
+_read_significance_map5 ENDP
+_read_significance_map6 PROC
+SigMapFunction _pos2ctx_map4x4, 6, 1, 3, _pos2ctx_last4x4, 6, _read_significant_coefficients6
+_read_significance_map6 ENDP
+_read_significance_map7 PROC
+SigMapFunction _pos2ctx_map4x4, 7, 0, 14, _pos2ctx_last4x4, 7, _read_significant_coefficients7
+_read_significance_map7 ENDP
+_read_significance_map8 PROC
+SigMapFunction _pos2ctx_map2x4c, 6, 1, 7, _pos2ctx_last2x4c, 6, _read_significant_coefficients8
+_read_significance_map8 ENDP
+_read_significance_map9 PROC
+SigMapFunction _pos2ctx_map4x4c, 6, 1, 15, _pos2ctx_last4x4c, 6, _read_significant_coefficients9
+_read_significance_map9 ENDP
+_read_significance_map10 PROC
+SigMapFunction _pos2ctx_map4x4, 10, 1, 15, _pos2ctx_last4x4, 10, _read_significant_coefficients10
+_read_significance_map10 ENDP
+_read_significance_map11 PROC
+SigMapFunction _pos2ctx_map4x4, 11, 0, 14, _pos2ctx_last4x4, 11, _read_significant_coefficients11
+_read_significance_map11 ENDP
+_read_significance_map12 PROC
+SigMapFunction _pos2ctx_map8x8, 12, 1, 63, _pos2ctx_last8x8, 12, _read_significant_coefficients12
+_read_significance_map12 ENDP
+_read_significance_map13 PROC
+SigMapFunction _pos2ctx_map8x4, 13, 1, 31, _pos2ctx_last8x4, 13, _read_significant_coefficients13
+_read_significance_map13 ENDP
+_read_significance_map14 PROC
+SigMapFunction _pos2ctx_map8x4, 14, 1, 31, _pos2ctx_last8x4, 14, _read_significant_coefficients14
+_read_significance_map14 ENDP
+_read_significance_map15 PROC
+SigMapFunction _pos2ctx_map4x4, 15, 1, 15, _pos2ctx_last4x4, 15, _read_significant_coefficients15
+_read_significance_map15 ENDP
+_read_significance_map16 PROC
+SigMapFunction _pos2ctx_map4x4, 16, 1, 15, _pos2ctx_last4x4, 16, _read_significant_coefficients16
+_read_significance_map16 ENDP
+_read_significance_map17 PROC
+SigMapFunction _pos2ctx_map4x4, 17, 0, 14, _pos2ctx_last4x4, 17, _read_significant_coefficients17
+_read_significance_map17 ENDP
+_read_significance_map18 PROC
+SigMapFunction _pos2ctx_map8x8, 18, 1, 63, _pos2ctx_last8x8, 18, _read_significant_coefficients18
+_read_significance_map18 ENDP
+_read_significance_map19 PROC
+SigMapFunction _pos2ctx_map8x4, 19, 1, 31, _pos2ctx_last8x4, 19, _read_significant_coefficients19
+_read_significance_map19 ENDP
+_read_significance_map20 PROC
+SigMapFunction _pos2ctx_map8x4, 20, 1, 31, _pos2ctx_last8x4, 20, _read_significant_coefficients20
+_read_significance_map20 ENDP
+_read_significance_map21 PROC
+SigMapFunction _pos2ctx_map4x4, 21, 1, 15, _pos2ctx_last4x4, 21, _read_significant_coefficients21
+_read_significance_map21 ENDP
+_TEXT ENDS
+
+
+_TEXT SEGMENT
+; edx: dep - unchanged by function
+; SF holds the return value
+_biari_decode_symbol_eq_prob_asm PROC
+ mov ecx, DWORD PTR [edx+8]; dep->DbitsLeft
+ dec ecx ; dep->DbitsLeft--
+ mov eax, DWORD PTR [edx+4] ; eax: dep->DValue
+ push esi
+ jnz SHORT $LN3@biari_deco; if(--(dep->DbitsLeft) == 0)
+
+ mov ecx, DWORD PTR [edx+16] ; ebp: dep->Dcodestrm_len
+ mov esi, DWORD PTR [ecx] ; esi: *dep->Dcodestrm_len
+ add DWORD PTR [ecx], 2 ; *dep->Dcodestrm_len += 2
+ mov ecx, DWORD PTR [edx+12] ; ebp: dep->Dcodestrm
+ shl eax, 16
+ mov ax, WORD PTR [ecx+esi] ; value = (value << 16) | getword( dep )
+ xchg ah, al
+ mov ecx, 16 ; dep->DbitsLeft = 16;
+$LN3@biari_deco:
+ mov esi, DWORD PTR [edx] ; dep->Drange
+ shl esi, cl ; (dep->Drange << dep->DbitsLeft)
+ mov DWORD PTR [edx+8], ecx
+ mov ecx, eax
+ sub ecx, esi
+ pop esi
+
+ cmovns eax, ecx ; if (tmp_value <0) value = tmp_value
+ mov DWORD PTR [edx+4], eax ; dep->Dvalue = value;
+ ret 0
+_biari_decode_symbol_eq_prob_asm ENDP
+_TEXT ENDS
+
+_TEXT SEGMENT
+; edx: dep. retained on return
+; esi and ebp are NOT retained, because the (only) calling function doesn't need them to be
+_exp_golomb_decode_eq_prob0 PROC
+STACKOFFSET=0
+ xor esi, esi ; esi: binary_symbol
+ xor ebp, ebp ; ebp: symbol
+ push edi
+ mov edi, 1 ; edi: k
+DECODE_EQ@LOOP_AGAIN:
+ call _biari_decode_symbol_eq_prob_asm ; l = biari_decode_symbol_eq_prob(dep_dp);
+ js SHORT DECODE_EQ@LOOP_DONE
+ add ebp, edi ; symbol += k
+ shl edi, 1 ; k <<= 1
+ jmp SHORT DECODE_EQ@LOOP_AGAIN
+ align 16
+DECODE_EQ@LOOP_DONE:
+ shr edi, 1
+ jz SHORT DECODE_EQ@RETURN
+ call _biari_decode_symbol_eq_prob_asm ; if (biari_decode_symbol_eq_prob(dep_dp)==1)
+ js SHORT DECODE_EQ@LOOP_DONE
+ or esi, edi ; binary_symbol |= (1<<k);
+ jmp SHORT DECODE_EQ@LOOP_DONE
+ align 16
+DECODE_EQ@RETURN:
+ lea eax, DWORD PTR [esi+ebp+13] ; return (unsigned int) (symbol + binary_symbol);
+ pop edi
+ ret 0
+_exp_golomb_decode_eq_prob0 ENDP
+_TEXT ENDS
+
+;
+;
+; pass dep in edx, context in eax
+; edx is retained on return
+; ebp is destroyed
+
+_TEXT SEGMENT
+ctx = 4 ; second parameter
+_unary_exp_golomb_level_decode PROC
+ STACKOFFSET=0
+ mov ebp, eax ; eax (and now ebp also) contains the context pointer
+ call _biari_decode_symbol_map
+ test eax, eax ; if (symbol==0)
+ jne SHORT SYMBOL_NOT_ZERO
+ ret 0
+align 16
+SYMBOL_NOT_ZERO:
+ push esi
+ xor esi, esi
+LEVEL_DECODE@LOOP_AGAIN:
+
+ mov eax, ebp ; _biari_decode_symbol_map wants ctx in eax
+ inc esi ; ++symbol;
+ call _biari_decode_symbol_map ; l = biari_decode_symbol(dep_dp, ctx);
+
+ test eax, eax ; if (!l)
+ je SHORT LEVEL_IS_ZERO
+ cmp esi, 12 ; exp_start-1
+ jb SHORT LEVEL_DECODE@LOOP_AGAIN
+
+ call _exp_golomb_decode_eq_prob0 ; exp_golomb_decode_eq_prob(dep_dp,0)
+ pop esi
+ ret 0
+align 16
+LEVEL_IS_ZERO:
+ mov eax, esi ; return symbol;
+ pop esi
+ ret 0
+_unary_exp_golomb_level_decode ENDP
+_TEXT ENDS
+
+CONST SEGMENT
+sigmap_functions DD FLAT:_read_significance_map0
+DD FLAT:_read_significance_map1
+DD FLAT:_read_significance_map2
+DD FLAT:_read_significance_map3
+DD FLAT:_read_significance_map4
+DD FLAT:_read_significance_map5
+DD FLAT:_read_significance_map6
+DD FLAT:_read_significance_map7
+DD FLAT:_read_significance_map8
+DD FLAT:_read_significance_map9
+DD FLAT:_read_significance_map10
+DD FLAT:_read_significance_map11
+DD FLAT:_read_significance_map12
+DD FLAT:_read_significance_map13
+DD FLAT:_read_significance_map14
+DD FLAT:_read_significance_map15
+DD FLAT:_read_significance_map16
+DD FLAT:_read_significance_map17
+DD FLAT:_read_significance_map18
+DD FLAT:_read_significance_map19
+DD FLAT:_read_significance_map20
+DD FLAT:_read_significance_map21
+CONST ENDS
+
+PUBLIC _readRunLevel_CABAC
+_TEXT SEGMENT
+_currMB$ = 4 ; first parameter
+_dep_dp$ = 8 ; second parameter
+_context$ = 12 ; third parameter
+_readRunLevel_CABAC PROC
+ push esi
+ push edi
+STACKOFFSET=8
+ mov edi, DWORD PTR _currMB$[esp+STACKOFFSET] ; edi: currMB
+ mov esi, DWORD PTR [edi] ; esi: currSlice = currMB->p_Slice;
+
+ cmp DWORD PTR [esi+coeff_ctr@Slice], 0 ; if (currSlice->coeff_ctr >= 0)
+ jge SHORT SET_RUN_AND_LEVEL
+
+; ===== decode CBP-BIT =====
+ mov eax, DWORD PTR [edi+read_and_store_CBP_block_bit@Macroblock] ; eax: currMB->read_and_store_CBP_block_bit
+ push ebx
+STACKOFFSET=STACKOFFSET+4
+ mov ebx, DWORD PTR _context$[esp+STACKOFFSET] ; ebx: context
+ push ebp
+STACKOFFSET=STACKOFFSET+4
+ mov ebp, DWORD PTR _dep_dp$[esp+STACKOFFSET] ; ebp: dep
+ push ebx ; context
+ push ebp ; dep
+ push edi ; currMB
+ call eax ; currMB->read_and_store_CBP_block_bit(currMB, dep_dp, context)
+ add esp, 12
+ mov DWORD PTR [esi+coeff_ctr@Slice], eax ; currSlice->coeff_ctr = return value
+ test eax, eax ; if (currSlice->coeff_ctr == 0)
+ je SHORT SET_RUN_AND_LEVEL_POP
+
+; ===== decode significance coefficients =====
+ mov ecx, DWORD PTR [esi+tex_ctx@Slice] ; ecx: currSlice->tex_ctx
+ lea eax, DWORD PTR [esi+coeff@Slice] ; eax: currSlice->coeff
+ ;push eax ; currSlice->coeff
+ ;push ecx ; tex_ctx
+ ;call _read_significance_map ; read_significance_map(currSlice->tex_ctx, currMB, dep_dp, context, currSlice->coeff);
+ call sigmap_functions[ebx*4]
+SET_RUN_AND_LEVEL_POP:
+ pop ebp
+ pop ebx
+STACKOFFSET=STACKOFFSET-8
+SET_RUN_AND_LEVEL:
+
+; --- set run and level ---
+ xor edx, edx ; edx: 0
+
+ dec DWORD PTR [esi+coeff_ctr@Slice] ; if (currSlice->coeff_ctr--)
+ js SHORT EOB
+
+; --- set run and level (coefficient) ---
+ mov ecx, DWORD PTR [esi+pos@Slice] ; ecx: currSlice->pos
+ xor edi, edi ; edi: run=0
+ cmp WORD PTR [esi+ecx*2+coeff@Slice], dx ; currSlice->coeff[currSlice->pos] == 0
+ jne SHORT LOOP_END
+LOOP_ITR:
+ cmp WORD PTR [esi+ecx*2+1+coeff@Slice], dx ; currSlice->coeff[currSlice->pos] == 0
+ lea ecx, [ecx+1]
+ lea edi, [edi+1]
+ je SHORT LOOP_ITR
+LOOP_END:
+ movsx eax, WORD PTR [esi+ecx*2+coeff@Slice] ; eax: value = currSlice->coeff[currSlice->pos]
+ inc ecx ; currSlice->pos++
+
+; --- decrement coefficient counter and re-set position ---
+
+ ;cmp DWORD PTR [esi+coeff_ctr@Slice], edx ; if (currSlice->coeff_ctr == 0)
+ ;cmove ecx, edx ; currSlice->pos = 0
+ mov edx, edi
+ pop edi
+ mov DWORD PTR [esi+pos@Slice], ecx ; store currSlice->pos
+ pop esi
+ ret 0 ; eax contains value
+ align 16
+EOB:
+ xor eax, eax ; return 0
+ mov DWORD PTR [esi+pos@Slice], edx ; currSlice->pos = 0;
+ pop edi
+ pop esi
+ ret 0
+_readRunLevel_CABAC ENDP
+_TEXT ENDS
+
+;
+; edi is not saved
+; pass dep_dp in edx, retained on exit
+; pass ctx in edi
+; return value in esi
+
+PUBLIC _unary_exp_golomb_mv_decode3
+_TEXT SEGMENT
+_ctx$ = 4 ; second parameter
+_unary_exp_golomb_mv_decode3 PROC
+STACKOFFSET=0
+ mov eax, edi
+ call _biari_decode_symbol_map ; pass dep in edx and ctx in eax. edx retains dep on exit
+ test eax, eax ; if (symbol)
+ jne SHORT SYMBOL_NOT_ZERO
+ xor esi, esi
+ ret 0
+ align 16
+SYMBOL_NOT_ZERO:
+ push ebp
+STACKOFFSET=STACKOFFSET+4
+ mov ebp, 3
+ add edi, 4 ; ctx++
+ mov esi, 1 ; esi: symbol
+LOOP_START:
+ mov eax, edi
+ call _biari_decode_symbol_map ; pass dep in edx and ctx in eax. edx retains dep on exit
+ test eax, eax
+ je SHORT SYMBOL_ZERO_RETURN
+
+ inc esi
+ cmp esi, 2 ; if (symbol == 2)
+ sete al ; eax will be 1, so this is safe to do
+ lea edi, [edi + eax*4] ; ctx += (symbol == 2)
+
+ cmp esi, ebp ; if (symbol == max_bin)
+ sete al ; eax will have nothing set high, so this is safe to do
+ lea edi, [edi + eax*4] ; ctx += (symbol != max_bin)
+
+ cmp esi, 8 ; if (symbol < exp_start)
+ jb SHORT LOOP_START
+
+; return exp_start + exp_golomb_decode_eq_prob(dep_dp,3);
+ xor ebp, ebp ; ebp: symbol
+ mov edi, ebp ; edi: binary_symbol
+DECODE_EQ3@LOOP1:
+ call _biari_decode_symbol_eq_prob_asm ; edx holds dep_dp
+ js SHORT DECODE_EQ3@LOOP2
+ or ebp, esi; symbol += (l<<k)
+ shl esi, 1 ; k <<= 1
+ jmp SHORT DECODE_EQ3@LOOP1
+ align 16
+DECODE_EQ3@LOOP2:
+ shr esi, 1
+ jz SHORT DECODE_EQ3@RETURN
+ call _biari_decode_symbol_eq_prob_asm
+ js SHORT DECODE_EQ3@LOOP2
+ or edi, esi ; binary_symbol |= (1<<k);
+ jmp SHORT DECODE_EQ3@LOOP2
+ align 16
+DECODE_EQ3@RETURN:
+ ; return (unsigned int) (symbol + binary_symbol);
+ lea esi, [edi+ebp+8]
+ pop ebp
+ ret 0
+ align 16
+SYMBOL_ZERO_RETURN:
+ ; return symbol is in esi
+ pop ebp
+ ret 0
+_unary_exp_golomb_mv_decode3 ENDP
+_TEXT ENDS
+
+_TEXT SEGMENT
+_unary_bin_decode1 PROC
+; _ctx$ = eax
+; _dep_dp$ = edx
+ push edi
+ mov edi, eax
+ call _biari_decode_symbol_map ; biari_decode_symbol(dep_dp, ctx );
+ test eax, eax ; if (symbol)
+ jne SHORT $LN5@unary_bin_@2
+ mov eax, 2
+ shr eax, 1
+ pop edi
+ ret 0
+align 16
+$LN5@unary_bin_@2:
+ xor esi, esi ; symbol = 0;
+$LL3@unary_bin_@2:
+ inc esi ; ++symbol;
+ lea eax, DWORD PTR [edi+4] ; ctx + ctx_offset
+ call _biari_decode_symbol_map ; biari_decode_symbol(dep_dp, ctx);
+ test eax, eax ; while( l != 0 );
+ jne SHORT $LL3@unary_bin_@2
+ lea eax, [esi + 2]; return symbol+2;
+ shr eax, 1
+ pop edi
+ ret 0
+_unary_bin_decode1 ENDP
+_TEXT ENDS
+
+
+PUBLIC _readDquant_CABAC
+_TEXT SEGMENT
+_currSlice$ = 4 ; first parameter
+_dep_dp$ = 8 ; second parameter
+_readDquant_CABAC PROC
+STACKOFFSET=0
+; 815 : MotionInfoContexts *ctx = currSlice->mot_ctx;
+; 816 : short dquant;
+; 817 : int act_ctx = ((currSlice->last_dquant != 0) ? 1 : 0);
+; 818 : int act_sym = biari_decode_symbol(dep_dp,ctx->delta_qp_contexts + act_ctx );
+
+ mov edx, DWORD PTR _dep_dp$[esp+STACKOFFSET]
+ push esi
+ push edi
+STACKOFFSET = STACKOFFSET + 8
+ mov edi, DWORD PTR _currSlice$[esp+STACKOFFSET]
+ mov esi, DWORD PTR [edi+mot_ctx@Slice]
+ xor eax, eax
+ cmp DWORD PTR [edi+last_dquant@Slice], eax
+ setne al
+ lea eax, DWORD PTR [esi+eax*4+332]
+ ; pass dep in edx and ctx in eax. edx retains dep on exit
+ call _biari_decode_symbol_map
+
+ test eax, eax ; if (!act_sym)
+ jz SHORT $LN2@readDquant
+
+ lea eax, DWORD PTR [esi+340] ; unary_bin_decode(dep_dp,ctx->delta_qp_contexts + 2,1);
+ call _unary_bin_decode1
+
+ jnc SHORT $LN2@readDquant ; lsb is signed bit
+
+ neg eax ; dquant = -dquant;
+ movzx eax, ax
+$LN2@readDquant:
+ movsx edx, ax
+ mov DWORD PTR [edi+last_dquant@Slice], edx ; currSlice->last_dquant = dquant;
+ pop edi
+ pop esi
+ ;mov ax, cx ; return dquant;
+ ret 0
+_readDquant_CABAC ENDP
+_TEXT ENDS
+
+PUBLIC _readIntraPredMode_CABAC
+_TEXT SEGMENT
+_currSlice$ = 4 ; first parameter
+_dep_dp$ = 8 ; second parameter
+_readIntraPredMode_CABAC PROC
+; 720 : TextureInfoContexts *ctx =
+STACKOFFSET=0
+ mov eax, DWORD PTR _currSlice$[esp + STACKOFFSET]
+ push esi
+ mov esi, DWORD PTR [eax+100] ; currSlice->tex_ctx;
+STACKOFFSET=4
+; 721 : int act_sym;
+; 722 :
+; 723 : // use_most_probable_mode
+; 724 : act_sym = biari_decode_symbol(dep_dp, ctx->ipr_contexts);
+
+ mov edx, DWORD PTR _dep_dp$[esp+STACKOFFSET]
+ lea eax, DWORD PTR [esi+12]
+ call _biari_decode_symbol_map
+
+ ; remaining_mode_selector
+ test eax, eax ; if (act_sym == 0)
+ jz SHORT $LN2@readIntraP
+
+ or eax, -1 ; return -1;
+ pop esi
+ ret 0
+align 16
+$LN2@readIntraP:
+ push ebx
+ add esi, 16 ; 00000010H
+ mov eax, esi
+ call _biari_decode_symbol_map
+ mov ebx, eax
+; 735 : pred_mode |= (biari_decode_symbol(dep_dp, ctx->ipr_contexts+1) << 1);
+
+ mov eax, esi
+ call _biari_decode_symbol_map
+ lea ebx, [ebx+2*eax]
+; 736 : pred_mode |= (biari_decode_symbol(dep_dp, ctx->ipr_contexts+1) << 2);
+
+ mov eax, esi
+ call _biari_decode_symbol_map
+ lea eax, [ebx+4*eax] ; return pred_mode;
+
+ pop ebx
+ pop esi
+ ret 0
+_readIntraPredMode_CABAC ENDP
+_TEXT ENDS
+
+PUBLIC _readMB_skip_flagInfo_CABAC
+_TEXT SEGMENT
+_currMB$ = 4 ; first parameter
+_dep_dp$ = 12 ; size = 4
+_readMB_skip_flagInfo_CABAC PROC
+
+; 406 : Slice *currSlice = currMB->p_Slice;
+STACKOFFSET=0
+ mov ecx, DWORD PTR _currMB$[esp + STACKOFFSET]
+ push ebp
+
+ xor eax, eax
+ push esi
+ mov esi, DWORD PTR [ecx + p_Slice@Macroblock] ; esi: currSlice
+ cmp DWORD PTR [esi+slice_type@Slice], 1 ; int bframe=(currSlice->slice_type == B_SLICE);
+ push edi
+
+ mov edi, DWORD PTR [esi+mot_ctx@Slice] ; edi: ctx = currSlice->mot_ctx;
+ sete al ; int bframe=(currSlice->slice_type == B_SLICE);
+
+; 409 : int a = (currMB->mb_left != NULL) ? (currMB->mb_left->skip_flag == 0) : 0;
+
+ xor edx, edx
+ mov ebp, eax
+ mov eax, DWORD PTR [ecx+104]
+ test eax, eax
+ je SHORT READ_B
+ cmp DWORD PTR [eax+348], edx
+ sete dl
+
+; 410 : int b = (currMB->mb_up != NULL) ? (currMB->mb_up ->skip_flag == 0) : 0;
+
+READ_B:
+ mov ecx, DWORD PTR [ecx+100]
+ xor eax, eax
+ test ecx, ecx
+ je SHORT $LN9@readMB_ski
+ cmp DWORD PTR [ecx+348], eax
+ sete al
+$LN9@readMB_ski:
+
+; 414 : if (bframe)
+; 415 : {
+; 416 : act_ctx = 7 + a + b;
+; 418 : skip = biari_decode_symbol (dep_dp, &ctx->mb_type_contexts[2][act_ctx]);
+
+ add eax, edx
+ test ebp, ebp
+ mov edx, DWORD PTR _dep_dp$[esp+8]
+ je SHORT $LN3@readMB_ski
+ lea eax, DWORD PTR [edi+eax*4+116]
+ jmp SHORT $LN11@readMB_ski
+align 16
+$LN3@readMB_ski:
+
+; 422 : act_ctx = a + b;
+; 424 : skip = biari_decode_symbol(dep_dp, &ctx->mb_type_contexts[1][act_ctx]);
+
+ lea eax, DWORD PTR [edi+eax*4+44]
+$LN11@readMB_ski:
+ call _biari_decode_symbol_map
+
+ test eax, eax ; if (!skip)
+ je SHORT $LN1@readMB_ski
+
+; 429 : currSlice->last_dquant = 0;
+
+ mov DWORD PTR [esi + last_dquant@Slice], 0
+$LN1@readMB_ski:
+ pop edi
+ pop esi
+ pop ebp
+ ret 0
+_readMB_skip_flagInfo_CABAC ENDP
+_TEXT ENDS
+
+
+PUBLIC _set_chroma_qp
+_TEXT SEGMENT
+_currMB$ = 4 ; first parameter
+_set_chroma_qp PROC
+ mov eax, DWORD PTR _currMB$[esp] ; eax: currMB
+ mov ecx, DWORD PTR [eax+4] ; ecx: currMB->p_Vid
+ mov edx, DWORD PTR [ecx+bitdepth_chroma_qp_scale@VideoParameters] ; edx: p_Vid->bitdepth_chroma_qp_scale;
+ push edi
+ mov edi, DWORD PTR [ecx+dec_picture@VideoParameters] ; edi: p_Vid->dec_picture
+ mov ecx, DWORD PTR [edi+chroma_qp_offset@StorablePicture] ; ecx: dec_picture->chroma_qp_offset[0]
+ add ecx, DWORD PTR [eax+qp@macroblock] ; ecx: dec_picture->chroma_qp_offset[0] + currMB->qp
+ neg edx ; edx: -p_Vid->bitdepth_chroma_qp_scale;
+ cmp ecx, edx
+ cmovl ecx, edx
+ cmp ecx, 51
+ cmovg ecx, DWORD PTR _51 ; cmov doesn't allow for immediates
+ test ecx, ecx
+ cmovge ecx, DWORD PTR _QP_SCALE_CR[ecx*4]
+ mov DWORD PTR [eax+64], ecx
+
+ sub ecx, edx; currMB->qpc[0] + p_Vid->bitdepth_chroma_qp_scale;
+ mov DWORD PTR [eax+qp_scaled@Macroblock + 4], ecx ; currMB->qp_scaled[1]
+ mov ecx, DWORD PTR [edi+chroma_qp_offset@StorablePicture + 4]
+ add ecx, DWORD PTR [eax+qp@macroblock]
+ cmp ecx, edx
+ cmovl ecx, edx
+ cmp ecx, 51
+ cmovg ecx, DWORD PTR _51 ; cmov doesn't allow for immediates
+ test ecx, ecx
+ cmovge ecx, DWORD PTR _QP_SCALE_CR[ecx*4]
+ mov DWORD PTR [eax+64+4], ecx
+ sub ecx, edx
+ pop edi
+ mov DWORD PTR [eax+72 + 8], ecx
+ ret 0
+_set_chroma_qp ENDP
+_TEXT ENDS
+
+PUBLIC _decodeMVD_CABAC
+_TEXT SEGMENT
+_dep_dp$ = 4 ; first parameter
+_mv_ctx$ = 8 ; second parameter
+_act_ctx$ = 12; third parameter
+_err$ = 16 ; 4th parameter
+_decodeMVD_CABAC PROC
+STACKOFFSET = 0
+ mov eax, DWORD PTR _act_ctx$[esp+STACKOFFSET]
+ push edi
+STACKOFFSET = STACKOFFSET + 4
+ mov edi, DWORD PTR _mv_ctx$[esp+STACKOFFSET]
+ lea edi, [edi+eax*4] ; mv_ctx[0][act_ctx]
+ mov eax, DWORD PTR _err$[esp+STACKOFFSET]
+ lea eax, DWORD PTR [edi+eax*4] ; &mv_ctx[0][act_ctx+err]
+ mov edx, DWORD PTR _dep_dp$[esp+STACKOFFSET]
+ call _biari_decode_symbol_map ; int act_sym = biari_decode_symbol(dep_dp,&mv_ctx[0][act_ctx+err] );
+
+ test eax, eax ; if (act_sym != 0)
+ je SHORT SYMBOL_ZERO
+ push esi
+STACKOFFSET = STACKOFFSET + 4
+ lea edi, [edi + 40] ; mv_ctx[1]+act_ctx
+ call _unary_exp_golomb_mv_decode3 ; act_sym = unary_exp_golomb_mv_decode3(dep_dp,mv_ctx[1]+act_ctx);
+ inc esi ; ++act_sym;
+ call _biari_decode_symbol_eq_prob_asm ; mv_sign = biari_decode_symbol_eq_prob(dep_dp);
+ js SHORT SKIP_NEGATE; if(mv_sign)
+ neg esi ; act_sym = -act_sym;
+SKIP_NEGATE:
+ mov eax, esi
+ pop esi
+SYMBOL_ZERO:
+ pop edi
+ ret 0
+_decodeMVD_CABAC ENDP
+_TEXT ENDS
+
+END
+