aboutsummaryrefslogtreecommitdiff
path: root/Src/h264dec/ldecod/src/macroblock.asm
diff options
context:
space:
mode:
Diffstat (limited to 'Src/h264dec/ldecod/src/macroblock.asm')
-rw-r--r--Src/h264dec/ldecod/src/macroblock.asm189
1 files changed, 189 insertions, 0 deletions
diff --git a/Src/h264dec/ldecod/src/macroblock.asm b/Src/h264dec/ldecod/src/macroblock.asm
new file mode 100644
index 00000000..0f96d2b5
--- /dev/null
+++ b/Src/h264dec/ldecod/src/macroblock.asm
@@ -0,0 +1,189 @@
+.686
+.XMM
+.model FLAT
+
+
+PUBLIC _inv_level_coefficients
+_TEXT SEGMENT
+_blocks$ = 8 ; size = 4
+_InvLevelScale$ = 12 ; size = 4
+_qp_per$ = 16 ; size = 4
+_inv_level_coefficients PROC
+
+ mov eax, DWORD PTR _blocks$[esp-4]
+ mov ecx, DWORD PTR _qp_per$[esp-4]
+ mov edx, DWORD PTR _InvLevelScale$[esp-4]
+ push esi
+ push edi
+ mov edi, 4
+$LL10@inv_level_:
+
+; 3870 : {
+; 3871 : h264_short_block_row_t *block = blocks[b];
+; 3872 : for (j = 0; j < 4; ++j)
+; 3873 : {
+; 3874 : if (block[j][0]) block[j][0]= rshift_rnd_sf((block[j][0] * InvLevelScale[j][0]) << qp_per, 4);
+
+ movsx esi, WORD PTR [eax+4-4]
+ test esi, esi
+ je SHORT $LN4@inv_level_
+ imul esi, DWORD PTR [edx]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4-4], si
+$LN4@inv_level_:
+
+; 3875 : if (block[j][1]) block[j][1]= rshift_rnd_sf((block[j][1] * InvLevelScale[j][1]) << qp_per, 4);
+
+ movsx esi, WORD PTR [eax+4-2]
+ test esi, esi
+ je SHORT $LN3@inv_level_
+ imul esi, DWORD PTR [edx+4]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4-2], si
+$LN3@inv_level_:
+
+; 3876 : if (block[j][2]) block[j][2]= rshift_rnd_sf((block[j][2] * InvLevelScale[j][2]) << qp_per, 4);
+
+ movsx esi, WORD PTR [eax+4]
+ test esi, esi
+ je SHORT $LN2@inv_level_
+ imul esi, DWORD PTR [edx+8]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4], si
+$LN2@inv_level_:
+
+; 3877 : if (block[j][3]) block[j][3]= rshift_rnd_sf((block[j][3] * InvLevelScale[j][3]) << qp_per, 4);
+
+ movsx esi, WORD PTR [eax+4+2]
+ test esi, esi
+ je SHORT $LN6@inv_level_
+ imul esi, DWORD PTR [edx+12]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+2], si
+$LN6@inv_level_:
+ movsx esi, WORD PTR [eax+4+4]
+ test esi, esi
+ je SHORT $LN27@inv_level_
+ imul esi, DWORD PTR [edx+16]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+4], si
+$LN27@inv_level_:
+ movsx esi, WORD PTR [eax+4+6]
+ test esi, esi
+ je SHORT $LN28@inv_level_
+ imul esi, DWORD PTR [edx+20]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+6], si
+$LN28@inv_level_:
+ movsx esi, WORD PTR [eax+4+8]
+ test esi, esi
+ je SHORT $LN29@inv_level_
+ imul esi, DWORD PTR [edx+24]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+8], si
+$LN29@inv_level_:
+ movsx esi, WORD PTR [eax+4+10]
+ test esi, esi
+ je SHORT $LN30@inv_level_
+ imul esi, DWORD PTR [edx+28]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+10], si
+$LN30@inv_level_:
+ movsx esi, WORD PTR [eax+4+12]
+ test esi, esi
+ je SHORT $LN32@inv_level_
+ imul esi, DWORD PTR [edx+32]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+12], si
+$LN32@inv_level_:
+ movsx esi, WORD PTR [eax+4+14]
+ test esi, esi
+ je SHORT $LN33@inv_level_
+ imul esi, DWORD PTR [edx+36]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+14], si
+$LN33@inv_level_:
+ movsx esi, WORD PTR [eax+4+16]
+ test esi, esi
+ je SHORT $LN34@inv_level_
+ imul esi, DWORD PTR [edx+40]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+16], si
+$LN34@inv_level_:
+ movsx esi, WORD PTR [eax+4+18]
+ test esi, esi
+ je SHORT $LN35@inv_level_
+ imul esi, DWORD PTR [edx+44]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+18], si
+$LN35@inv_level_:
+ movsx esi, WORD PTR [eax+4+20]
+ test esi, esi
+ je SHORT $LN37@inv_level_
+ imul esi, DWORD PTR [edx+48]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+20], si
+$LN37@inv_level_:
+ movsx esi, WORD PTR [eax+4+22]
+ test esi, esi
+ je SHORT $LN38@inv_level_
+ imul esi, DWORD PTR [edx+52]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+22], si
+$LN38@inv_level_:
+ movsx esi, WORD PTR [eax+4+24]
+ test esi, esi
+ je SHORT $LN39@inv_level_
+ imul esi, DWORD PTR [edx+56]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+24], si
+$LN39@inv_level_:
+ movsx esi, WORD PTR [eax+4+26]
+ test esi, esi
+ je SHORT $LN9@inv_level_
+ imul esi, DWORD PTR [edx+60]
+ shl esi, cl
+ add esi, 8
+ sar esi, 4
+ mov WORD PTR [eax+4+26], si
+$LN9@inv_level_:
+ add eax, 32 ; 00000020H
+ sub edi, 1
+ jne $LL10@inv_level_
+ pop edi
+ pop esi
+
+ ret 0
+_inv_level_coefficients ENDP
+
+END \ No newline at end of file