Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

1178 lines
32 KiB

;/* *************************************************************************
;** INTEL Corporation Proprietary Information
;**
;** This listing is supplied under the terms of a license
;** agreement with INTEL Corporation and may not be copied
;** nor disclosed except in accordance with the terms of
;** that agreement.
;**
;** Copyright (c) 1995 Intel Corporation.
;** All Rights Reserved.
;**
;** *************************************************************************
;*/
;--------------------------------------------------------------------------;
; $Header: S:\h26x\src\dec\d35obmc.asv 1.2 08 Mar 1996 16:46:06 AGUPTA2 $
; $Log: S:\h26x\src\dec\d35obmc.asv $
;//
;// Rev 1.2 08 Mar 1996 16:46:06 AGUPTA2
;// Faster and smaller version of the routine. Code size reduction achieved
;// by avoiding 32-bit displacement in instructions.
;//
;//
;// Rev 1.1 27 Dec 1995 14:35:52 RMCKENZX
;// Added copyright notice
;
; d35obmc.asm
;
; Description
; This routine performs overlapped block motion compensation for
; advanced prediction mode.
;
; Routines:
; H263OBMC
;
; Data:
; This routine assumes that the PITCH is 384.
;
; Inputs (dwords pushed onto stack by caller):
; pCurr flat pointer to current block.
; Holds values predicted using the
; motion vector from this block.
; pLeft flat pointer to block left of pCurr.
; Holds values predicted using the
; motion vector of the left-hand block.
; pRight flat pointer to block right of pCurr
; Holds values predicted using the
; motion vector of the right-hand block.
; pAbove flat pointer to block above pCurr
; Holds values predicted using the
; motion vector of the above block.
; pBelow flat pointer to block below pCurr
; Holds values predicted using the
; motion vector of the below block.
; pRef flat pointer to the new predicted values
; to be computed by this routine.
;
;--------------------------------------------------------------------------;
;
; $Header: S:\h26x\src\dec\d35obmc.asv 1.2 08 Mar 1996 16:46:06 AGUPTA2 $
; $Log$
;//
;// Rev 1.0 29 Nov 1995 12:47:28 RMCKENZX
;// Initial revision.
;
;--------------------------------------------------------------------------;
;
; Register Usage:
;
Cent EQU esi ; pCurr
Comp EQU edi ; pRef
Horz EQU ebp ; pLeft or pRight
Vert EQU edx ; pAbove or pBelow
;
; eax, ebx accumulators for new predicted values
; ecx temporary
;
;--------------------------------------------------------------------------;
;
; Notes:
; This routine is fully unrolled.
;
; The basic computational unit consists of 8 instructions and is 2-folded,
; meaning that it works on 2 results (the new one in Stage I, the old one
; in Stage II, see below) at a time. It uses 3 loads, 3 additions (1 or
; 2 of which are done by the lea instruction), 1 shift, and one store per
; result computed. The two stages are interleaved on a 1-1 basis.
;
; Stage 1:
; Load Accumulator with Center Value
; Load Temporary with Horz/Vert Value
; Accumulator =(lea) x1 times Accumulator plus r0
; Accumulator =(lea or add) x2 times Accumulator plus x3 times Temporary
; Stage 2:
; Load Temporary with other Horz/Vert Value
; Accumulator =(add) Accumlator plus Temporary
; Shift Accumlator right s0 bits
; Store Accumulator
;
; where with various values for x1, x2, x3, round, and shift we achieve
; the needed weighted averages:
;
; Weights
; Cent Horz/Vert x1 x2 x3 r0 s0
; corners 4 2 2 2 1 1 2 2
; edges 5 2 1 5 1 2 4 3
; center 6 1 1 3 2 1 2 3
;
; This routine uses 4 pointers -- 3 of the 5 input pointers and one
; output pointer. The horizontal pointer is adjusted at the middle
; of each line, and all 4 pointers at the end of each line in order
; to avoid using large offsets. This sacrifices some speed in order
; to hold down code size.
;
; If all of its inputs were at some small,
; fixed offset from a single address, it could be considerably
; simplified.
;
;--------------------------------------------------------------------------;
PITCH = 384
.586
IACODE2 SEGMENT PARA USE32 PUBLIC 'CODE'
IACODE2 ENDS
IACODE2 SEGMENT
PUBLIC _H263OBMC
; input parameters before locals
pCurr EQU esp+20
pLeft EQU esp+24
pRight EQU esp+28
pAbove EQU esp+32
pBelow EQU esp+36
pRef EQU esp+40
; locals
LeftToRight EQU esp+00
RightToLeft EQU esp+04
AboveToBelow EQU esp+08
; saved registers and other stuff
; unused esp+12
; ebp esp+16
; esi esp+20
; ebx esp+24
; edi esp+28
; return address esp+32
; input parameters after locals
nCurr EQU esp+36
nLeft EQU esp+40
nRight EQU esp+44
nAbove EQU esp+48
nBelow EQU esp+52
nRef EQU esp+56
FRAMESIZE = 16
_H263OBMC:
; set up
push edi
push ebx
push esi
push ebp
mov Vert, [pAbove]
mov Horz, [pLeft]
mov Cent, [pCurr]
mov ecx, [pRight]
mov eax, [pBelow]
sub esp, FRAMESIZE
sub ecx, Horz
sub eax, Vert
mov ebx, PITCH
mov [LeftToRight], ecx ; pRight - pLeft
add eax, ebx
sub ebx, ecx
mov [AboveToBelow], eax ; pBelow - pAbove + PITCH
xor eax, eax
;
; We start with the upper left corner
; we go left to right, then drop down
; to the next row and repeat.
;
xor ecx, ecx
mov al, [Cent] ; start ->00=eax
mov [RightToLeft], ebx ; PITCH + pLeft - pRight
mov cl, [Vert] ; 00
xor ebx, ebx
lea eax, [2*eax+2] ; 00
mov Comp, [nRef]
add eax, ecx ; 00
mov cl, [Horz] ; 00
mov bl, 1[Cent] ; start ->01=ebx
add eax, ecx ; 00
mov cl, 1[Vert] ; 01
sar eax, 2 ; 00
lea ebx, [ebx+4*ebx+4] ; 01
mov [Comp], al ; complete <-00=al
lea ebx, [ebx+2*ecx] ; 01
mov cl, 1[Horz] ; 01
mov al, 2[Cent] ; start ->02=eax
add ebx, ecx ; 01
mov cl, 2[Vert] ; 02
sar ebx, 3 ; 01
lea eax, [eax+4*eax+4] ; 02
mov 1[Comp], bl ; complete <-01=bl
lea eax, [eax+2*ecx] ; 02
mov cl, 2[Horz] ; 02
mov bl, 3[Cent] ; start ->03=ebx
add eax, ecx ; 02
mov cl, 3[Vert] ; 03
sar eax, 3 ; 02
lea ebx, [ebx+4*ebx+4] ; 03
mov 2[Comp], al ; complete <-02=al
lea ebx, [ebx+2*ecx] ; 03
mov cl, 3[Horz] ; 03
mov al, 4[Cent] ; start ->04=eax
mov Horz, [nRight]
add ebx, ecx ; 03
mov cl, 4[Vert] ; 04
sar ebx, 3 ; 03
lea eax, [eax+4*eax+4] ; 04
mov 3[Comp], bl ; complete <-03=bl
lea eax, [eax+2*ecx] ; 04
mov cl, 4[Horz] ; 04
mov bl, 5[Cent] ; start ->05=ebx
add eax, ecx ; 04
mov cl, 5[Vert] ; 05
sar eax, 3 ; 04
lea ebx, [ebx+4*ebx+4] ; 05
mov 4[Comp], al ; complete <-04=al
lea ebx, [ebx+2*ecx] ; 05
mov cl, 5[Horz] ; 05
mov al, 6[Cent] ; start ->06=eax
add ebx, ecx ; 05
mov cl, 6[Vert] ; 06
sar ebx, 3 ; 05
lea eax, [eax+4*eax+4] ; 06
mov 5[Comp], bl ; complete <-05=bl
lea eax, [eax+2*ecx] ; 06
mov cl, 6[Horz] ; 06
mov bl, 7[Cent] ; start ->07=ebx
add eax, ecx ; 06
mov cl, 7[Horz] ; 07
add Cent, PITCH
add Horz, [RightToLeft]
sar eax, 3 ; 06
lea ebx, [2*ebx+2] ; 07
mov 6[Comp], al ; complete <-06=al
add ebx, ecx ; 07
mov cl, 7[Vert] ; 07
mov al, 0[Cent] ; start ->10=eax
add ebx, ecx ; 07
mov cl, 0[Horz] ; 10
sar ebx, 2 ; 07
lea eax, [eax+4*eax+4] ; 10
mov 7[Comp], bl ; complete <-07=bl
add Vert, PITCH
lea eax, [eax+2*ecx] ; 10
add Comp, PITCH
mov cl, 0[Vert] ; 10
mov bl, 1[Cent] ; start ->11=ebx
add eax, ecx ; 10
mov cl, 1[Horz] ; 11
sar eax, 3 ; 10
lea ebx, [ebx+4*ebx+4] ; 11
mov 0[Comp], al ; complete <-10=al
lea ebx, [ebx+2*ecx] ; 11
mov cl, 1[Vert] ; 11
mov al, 2[Cent] ; start ->12=eax
add ebx, ecx ; 11
mov cl, 2[Vert] ; 12
sar ebx, 3 ; 11
lea eax, [eax+4*eax+4] ; 12
mov 1[Comp], bl ; complete <-11=bl
lea eax, [eax+2*ecx] ; 12
mov cl, 2[Horz] ; 12
mov bl, 3[Cent] ; start ->13=ebx
add eax, ecx ; 12
mov cl, 3[Vert] ; 13
sar eax, 3 ; 12
lea ebx, [ebx+4*ebx+4] ; 13
mov 2[Comp], al ; complete <-12=al
lea ebx, [ebx+2*ecx] ; 13
mov cl, 3[Horz] ; 13
mov al, 4[Cent] ; start ->14=eax
add ebx, ecx ; 13
add Horz, [LeftToRight]
mov cl, 4[Vert] ; 14
sar ebx, 3 ; 13
lea eax, [eax+4*eax+4] ; 14
mov 3[Comp], bl ; complete <-13=bl
lea eax, [eax+2*ecx] ; 14
mov cl, 4[Horz] ; 14
mov bl, 5[Cent] ; start ->15=ebx
add eax, ecx ; 14
mov cl, 5[Vert] ; 15
sar eax, 3 ; 14
lea ebx, [ebx+4*ebx+4] ; 15
mov 4[Comp], al ; complete <-14=al
lea ebx, [ebx+2*ecx] ; 15
mov cl, 5[Horz] ; 15
mov al, 6[Cent] ; start ->16=eax
add ebx, ecx ; 15
mov cl, 6[Horz] ; 16
sar ebx, 3 ; 15
lea eax, [eax+4*eax+4] ; 16
mov 5[Comp], bl ; complete <-15=bl
lea eax, [eax+2*ecx] ; 16
mov cl, 6[Vert] ; 16
mov bl, 7[Cent] ; start ->17=ebx
add eax, ecx ; 16
mov cl, 7[Horz] ; 17
add Cent, PITCH
add Horz, [RightToLeft]
sar eax, 3 ; 16
lea ebx, [ebx+4*ebx+4] ; 17
mov 6[Comp], al ; complete <-16=al
lea ebx, [ebx+2*ecx] ; 17
mov cl, 7[Vert] ; 17
mov al, 0[Cent] ; start ->20=eax
add ebx, ecx ; 17
mov cl, 0[Horz] ; 20
sar ebx, 3 ; 17
lea eax, [eax+4*eax+4] ; 20
mov 7[Comp], bl ; complete <-17=bl
add Vert, PITCH
lea eax, [eax+2*ecx] ; 20
add Comp, PITCH
mov cl, 0[Vert] ; 20
mov bl, 1[Cent] ; start ->21=ebx
add eax, ecx ; 20
mov cl, 1[Horz] ; 21
sar eax, 3 ; 20
lea ebx, [ebx+4*ebx+4] ; 21
mov 0[Comp], al ; complete <-20=al
lea ebx, [ebx+2*ecx] ; 21
mov cl, 1[Vert] ; 21
mov al, 2[Cent] ; start ->22=eax
add ebx, ecx ; 21
mov cl, 2[Vert] ; 22
sar ebx, 3 ; 21
lea eax, [eax+2*eax+2] ; 22
mov 1[Comp], bl ; complete <-21=bl
lea eax, [2*eax+ecx] ; 22
mov cl, 2[Horz] ; 22
mov bl, 3[Cent] ; start ->23=ebx
add eax, ecx ; 22
mov cl, 3[Vert] ; 23
sar eax, 3 ; 22
lea ebx, [ebx+2*ebx+2] ; 23
mov 2[Comp], al ; complete <-22=al
lea ebx, [2*ebx+ecx] ; 23
mov cl, 3[Horz] ; 23
mov al, 4[Cent] ; start ->24=eax
add ebx, ecx ; 23
add Horz, [LeftToRight]
mov cl, 4[Vert] ; 24
sar ebx, 3 ; 23
lea eax, [eax+2*eax+2] ; 24
mov 3[Comp], bl ; complete <-23=bl
lea eax, [2*eax+ecx] ; 24
mov cl, 4[Horz] ; 24
mov bl, 5[Cent] ; start ->25=ebx
add eax, ecx ; 24
mov cl, 5[Vert] ; 25
sar eax, 3 ; 24
lea ebx, [ebx+2*ebx+2] ; 25
mov 4[Comp], al ; complete <-24=al
lea ebx, [2*ebx+ecx] ; 25
mov cl, 5[Horz] ; 25
mov al, 6[Cent] ; start ->26=eax
add ebx, ecx ; 25
mov cl, 6[Horz] ; 26
sar ebx, 3 ; 25
lea eax, [eax+4*eax+4] ; 26
mov 5[Comp], bl ; complete <-25=bl
lea eax, [eax+2*ecx] ; 26
mov cl, 6[Vert] ; 26
mov bl, 7[Cent] ; start ->27=ebx
add eax, ecx ; 26
mov cl, 7[Horz] ; 27
add Cent, PITCH
add Horz, [RightToLeft]
sar eax, 3 ; 26
lea ebx, [ebx+4*ebx+4] ; 27
mov 6[Comp], al ; complete <-26=al
lea ebx, [ebx+2*ecx] ; 27
mov cl, 7[Vert] ; 27
mov al, 0[Cent] ; start ->30=eax
add ebx, ecx ; 27
mov cl, 0[Horz] ; 30
sar ebx, 3 ; 27
lea eax, [eax+4*eax+4] ; 30
mov 7[Comp], bl ; complete <-27=bl
add Vert, PITCH
lea eax, [eax+2*ecx] ; 30
add Comp, PITCH
mov cl, 0[Vert] ; 30
mov bl, 1[Cent] ; start ->31=ebx
add eax, ecx ; 30
mov cl, 1[Horz] ; 31
sar eax, 3 ; 30
lea ebx, [ebx+4*ebx+4] ; 31
mov 0[Comp], al ; complete <-30=al
lea ebx, [ebx+2*ecx] ; 31
mov cl, 1[Vert] ; 31
mov al, 2[Cent] ; start ->32=eax
add ebx, ecx ; 31
mov cl, 2[Vert] ; 32
sar ebx, 3 ; 31
lea eax, [eax+2*eax+2] ; 32
mov 1[Comp], bl ; complete <-31=bl
lea eax, [2*eax+ecx] ; 32
mov cl, 2[Horz] ; 32
mov bl, 3[Cent] ; start ->33=ebx
add eax, ecx ; 32
mov cl, 3[Vert] ; 33
sar eax, 3 ; 32
lea ebx, [ebx+2*ebx+2] ; 33
mov 2[Comp], al ; complete <-32=al
lea ebx, [2*ebx+ecx] ; 33
mov cl, 3[Horz] ; 33
mov al, 4[Cent] ; start ->34=eax
add ebx, ecx ; 33
add Horz, [LeftToRight]
mov cl, 4[Vert] ; 34
sar ebx, 3 ; 33
lea eax, [eax+2*eax+2] ; 34
mov 3[Comp], bl ; complete <-33=bl
lea eax, [2*eax+ecx] ; 34
mov cl, 4[Horz] ; 34
mov bl, 5[Cent] ; start ->35=ebx
add eax, ecx ; 34
mov cl, 5[Vert] ; 35
sar eax, 3 ; 34
lea ebx, [ebx+2*ebx+2] ; 35
mov 4[Comp], al ; complete <-34=al
lea ebx, [2*ebx+ecx] ; 35
mov cl, 5[Horz] ; 35
mov al, 6[Cent] ; start ->36=eax
add ebx, ecx ; 35
mov cl, 6[Horz] ; 36
sar ebx, 3 ; 35
lea eax, [eax+4*eax+4] ; 36
mov 5[Comp], bl ; complete <-35=bl
lea eax, [eax+2*ecx] ; 36
mov cl, 6[Vert] ; 36
mov bl, 7[Cent] ; start ->37=ebx
add eax, ecx ; 36
mov cl, 7[Horz] ; 37
add Cent, PITCH
add Horz, [RightToLeft]
sar eax, 3 ; 36
lea ebx, [ebx+4*ebx+4] ; 37
mov 6[Comp], al ; complete <-36=al
lea ebx, [ebx+2*ecx] ; 37
mov cl, 7[Vert] ; 37
mov al, 0[Cent] ; start ->40=eax
add ebx, ecx ; 37
mov cl, 0[Horz] ; 40
sar ebx, 3 ; 37
lea eax, [eax+4*eax+4] ; 40
mov 7[Comp], bl ; complete <-37=bl
add Vert, [AboveToBelow]
lea eax, [eax+2*ecx] ; 40
add Comp, PITCH
mov cl, 0[Vert] ; 40
mov bl, 1[Cent] ; start ->41=ebx
add eax, ecx ; 40
mov cl, 1[Horz] ; 41
sar eax, 3 ; 40
lea ebx, [ebx+4*ebx+4] ; 41
mov 0[Comp], al ; complete <-40=al
lea ebx, [ebx+2*ecx] ; 41
mov cl, 1[Vert] ; 41
mov al, 2[Cent] ; start ->42=eax
add ebx, ecx ; 41
mov cl, 2[Vert] ; 42
sar ebx, 3 ; 41
lea eax, [eax+2*eax+2] ; 42
mov 1[Comp], bl ; complete <-41=bl
lea eax, [2*eax+ecx] ; 42
mov cl, 2[Horz] ; 42
mov bl, 3[Cent] ; start ->43=ebx
add eax, ecx ; 42
mov cl, 3[Vert] ; 43
sar eax, 3 ; 42
lea ebx, [ebx+2*ebx+2] ; 43
mov 2[Comp], al ; complete <-42=al
lea ebx, [2*ebx+ecx] ; 43
mov cl, 3[Horz] ; 43
mov al, 4[Cent] ; start ->44=eax
add ebx, ecx ; 43
add Horz, [LeftToRight]
mov cl, 4[Vert] ; 44
sar ebx, 3 ; 43
lea eax, [eax+2*eax+2] ; 44
mov 3[Comp], bl ; complete <-43=bl
lea eax, [2*eax+ecx] ; 44
mov cl, 4[Horz] ; 44
mov bl, 5[Cent] ; start ->45=ebx
add eax, ecx ; 44
mov cl, 5[Vert] ; 45
sar eax, 3 ; 44
lea ebx, [ebx+2*ebx+2] ; 45
mov 4[Comp], al ; complete <-44=al
lea ebx, [2*ebx+ecx] ; 45
mov cl, 5[Horz] ; 45
mov al, 6[Cent] ; start ->46=eax
add ebx, ecx ; 45
mov cl, 6[Horz] ; 46
sar ebx, 3 ; 45
lea eax, [eax+4*eax+4] ; 46
mov 5[Comp], bl ; complete <-45=bl
lea eax, [eax+2*ecx] ; 46
mov cl, 6[Vert] ; 46
mov bl, 7[Cent] ; start ->47=ebx
add eax, ecx ; 46
mov cl, 7[Horz] ; 47
add Cent, PITCH
add Horz, [RightToLeft]
sar eax, 3 ; 46
lea ebx, [ebx+4*ebx+4] ; 47
mov 6[Comp], al ; complete <-46=al
lea ebx, [ebx+2*ecx] ; 47
mov cl, 7[Vert] ; 47
mov al, 0[Cent] ; start ->50=eax
add ebx, ecx ; 47
mov cl, 0[Horz] ; 50
sar ebx, 3 ; 47
lea eax, [eax+4*eax+4] ; 50
mov 7[Comp], bl ; complete <-47=bl
add Vert, PITCH
lea eax, [eax+2*ecx] ; 50
add Comp, PITCH
mov cl, 0[Vert] ; 50
mov bl, 1[Cent] ; start ->51=ebx
add eax, ecx ; 50
mov cl, 1[Horz] ; 51
sar eax, 3 ; 50
lea ebx, [ebx+4*ebx+4] ; 51
mov 0[Comp], al ; complete <-50=al
lea ebx, [ebx+2*ecx] ; 51
mov cl, 1[Vert] ; 51
mov al, 2[Cent] ; start ->52=eax
add ebx, ecx ; 51
mov cl, 2[Vert] ; 52
sar ebx, 3 ; 51
lea eax, [eax+2*eax+2] ; 52
mov 1[Comp], bl ; complete <-51=bl
lea eax, [2*eax+ecx] ; 52
mov cl, 2[Horz] ; 52
mov bl, 3[Cent] ; start ->53=ebx
add eax, ecx ; 52
mov cl, 3[Vert] ; 53
sar eax, 3 ; 52
lea ebx, [ebx+2*ebx+2] ; 53
mov 2[Comp], al ; complete <-52=al
lea ebx, [2*ebx+ecx] ; 53
mov cl, 3[Horz] ; 53
mov al, 4[Cent] ; start ->54=eax
add ebx, ecx ; 53
add Horz, [LeftToRight]
mov cl, 4[Vert] ; 54
sar ebx, 3 ; 53
lea eax, [eax+2*eax+2] ; 54
mov 3[Comp], bl ; complete <-53=bl
lea eax, [2*eax+ecx] ; 54
mov cl, 4[Horz] ; 54
mov bl, 5[Cent] ; start ->55=ebx
add eax, ecx ; 54
mov cl, 5[Vert] ; 55
sar eax, 3 ; 54
lea ebx, [ebx+2*ebx+2] ; 55
mov 4[Comp], al ; complete <-54=al
lea ebx, [2*ebx+ecx] ; 55
mov cl, 5[Horz] ; 55
mov al, 6[Cent] ; start ->56=eax
add ebx, ecx ; 55
mov cl, 6[Horz] ; 56
sar ebx, 3 ; 55
lea eax, [eax+4*eax+4] ; 56
mov 5[Comp], bl ; complete <-55=bl
lea eax, [eax+2*ecx] ; 56
mov cl, 6[Vert] ; 56
mov bl, 7[Cent] ; start ->57=ebx
add eax, ecx ; 56
mov cl, 7[Horz] ; 57
add Cent, PITCH
add Horz, [RightToLeft]
sar eax, 3 ; 56
lea ebx, [ebx+4*ebx+4] ; 57
mov 6[Comp], al ; complete <-56=al
lea ebx, [ebx+2*ecx] ; 57
mov cl, 7[Vert] ; 57
mov al, 0[Cent] ; start ->60=eax
add ebx, ecx ; 57
mov cl, 0[Horz] ; 60
sar ebx, 3 ; 57
lea eax, [eax+4*eax+4] ; 60
mov 7[Comp], bl ; complete <-57=bl
add Vert, PITCH
lea eax, [eax+2*ecx] ; 60
add Comp, PITCH
mov cl, 0[Vert] ; 60
mov bl, 1[Cent] ; start ->61=ebx
add eax, ecx ; 60
mov cl, 1[Horz] ; 61
sar eax, 3 ; 60
lea ebx, [ebx+4*ebx+4] ; 61
mov 0[Comp], al ; complete <-60=al
lea ebx, [ebx+2*ecx] ; 61
mov cl, 1[Vert] ; 61
mov al, 2[Cent] ; start ->62=eax
add ebx, ecx ; 61
mov cl, 2[Vert] ; 62
sar ebx, 3 ; 61
lea eax, [eax+4*eax+4] ; 62
mov 1[Comp], bl ; complete <-61=bl
lea eax, [eax+2*ecx] ; 62
mov cl, 2[Horz] ; 62
mov bl, 3[Cent] ; start ->63=ebx
add eax, ecx ; 62
mov cl, 3[Vert] ; 63
sar eax, 3 ; 62
lea ebx, [ebx+4*ebx+4] ; 63
mov 2[Comp], al ; complete <-62=al
lea ebx, [ebx+2*ecx] ; 63
mov cl, 3[Horz] ; 63
mov al, 4[Cent] ; start ->64=eax
add ebx, ecx ; 63
add Horz, [LeftToRight]
mov cl, 4[Vert] ; 64
sar ebx, 3 ; 63
lea eax, [eax+4*eax+4] ; 64
mov 3[Comp], bl ; complete <-63=bl
lea eax, [eax+2*ecx] ; 64
mov cl, 4[Horz] ; 64
mov bl, 5[Cent] ; start ->65=ebx
add eax, ecx ; 64
mov cl, 5[Vert] ; 65
sar eax, 3 ; 64
lea ebx, [ebx+4*ebx+4] ; 65
mov 4[Comp], al ; complete <-64=al
lea ebx, [ebx+2*ecx] ; 65
mov cl, 5[Horz] ; 65
mov al, 6[Cent] ; start ->66=eax
add ebx, ecx ; 65
mov cl, 6[Horz] ; 66
sar ebx, 3 ; 65
lea eax, [eax+4*eax+4] ; 66
mov 5[Comp], bl ; complete <-65=bl
lea eax, [eax+2*ecx] ; 66
mov cl, 6[Vert] ; 66
mov bl, 7[Cent] ; start ->67=ebx
add eax, ecx ; 66
mov cl, 7[Horz] ; 67
add Cent, PITCH
add Horz, [RightToLeft]
sar eax, 3 ; 66
lea ebx, [ebx+4*ebx+4] ; 67
mov 6[Comp], al ; complete <-66=al
lea ebx, [ebx+2*ecx] ; 67
mov cl, 7[Vert] ; 67
mov al, 0[Cent] ; start ->70=eax
add ebx, ecx ; 67
mov cl, 0[Horz] ; 70
sar ebx, 3 ; 67
lea eax, [2*eax+2] ; 70
mov 7[Comp], bl ; complete <-67=bl
add Vert, PITCH
add eax, ecx ; 70
add Comp, PITCH
mov cl, 0[Vert] ; 70
mov bl, 1[Cent] ; start ->71=ebx
add eax, ecx ; 70
mov cl, 1[Vert] ; 71
sar eax, 2 ; 70
lea ebx, [ebx+4*ebx+4] ; 71
mov 0[Comp], al ; complete <-70=al
lea ebx, [ebx+2*ecx] ; 71
mov cl, 1[Horz] ; 71
mov al, 2[Cent] ; start ->72=eax
add ebx, ecx ; 71
mov cl, 2[Vert] ; 72
sar ebx, 3 ; 71
lea eax, [eax+4*eax+4] ; 72
mov 1[Comp], bl ; complete <-71=bl
lea eax, [eax+2*ecx] ; 72
mov cl, 2[Horz] ; 72
mov bl, 3[Cent] ; start ->73=ebx
add eax, ecx ; 72
mov cl, 3[Vert] ; 73
sar eax, 3 ; 72
lea ebx, [ebx+4*ebx+4] ; 73
mov 2[Comp], al ; complete <-72=al
lea ebx, [ebx+2*ecx] ; 73
mov cl, 3[Horz] ; 73
mov al, 4[Cent] ; start ->74=eax
add ebx, ecx ; 73
add Horz, [LeftToRight]
mov cl, 4[Vert] ; 74
sar ebx, 3 ; 73
lea eax, [eax+4*eax+4] ; 74
mov 3[Comp], bl ; complete <-73=bl
lea eax, [eax+2*ecx] ; 74
mov cl, 4[Horz] ; 74
mov bl, 5[Cent] ; start ->75=ebx
add eax, ecx ; 74
mov cl, 5[Vert] ; 75
sar eax, 3 ; 74
lea ebx, [ebx+4*ebx+4] ; 75
mov 4[Comp], al ; complete <-74=al
lea ebx, [ebx+2*ecx] ; 75
mov cl, 5[Horz] ; 75
mov al, 6[Cent] ; start ->76=eax
add ebx, ecx ; 75
mov cl, 6[Vert] ; 76
sar ebx, 3 ; 75
lea eax, [eax+4*eax+4] ; 76
mov 5[Comp], bl ; complete <-75=bl
lea eax, [eax+2*ecx] ; 76
mov cl, 6[Horz] ; 76
mov bl, 7[Cent] ; start ->77=ebx
add eax, ecx ; 76
mov cl, 7[Horz] ; 77
sar eax, 3 ; 76
lea ebx, [2*ebx+2] ; 77
mov 6[Comp], al ; complete <-76=al
add ebx, ecx ; 77
mov cl, 7[Vert] ; 77
add esp, FRAMESIZE
add ebx, ecx ; 77
sar ebx, 2 ; 77
pop ebp
mov 7[Comp], bl ; complete <-77=bl
pop esi
;
; wrap up and go home with the job well done
;
pop ebx
pop edi
ret
IACODE2 ENDS
END
// h263obmc1.asm page 17 5:02 PM, 10/29/95 //