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

  1. ;/* *************************************************************************
  2. ;** INTEL Corporation Proprietary Information
  3. ;**
  4. ;** This listing is supplied under the terms of a license
  5. ;** agreement with INTEL Corporation and may not be copied
  6. ;** nor disclosed except in accordance with the terms of
  7. ;** that agreement.
  8. ;**
  9. ;** Copyright (c) 1995 Intel Corporation.
  10. ;** All Rights Reserved.
  11. ;**
  12. ;** *************************************************************************
  13. ;*/
  14. ;--------------------------------------------------------------------------;
  15. ; $Header: S:\h26x\src\dec\d35obmc.asv 1.2 08 Mar 1996 16:46:06 AGUPTA2 $
  16. ; $Log: S:\h26x\src\dec\d35obmc.asv $
  17. ;//
  18. ;// Rev 1.2 08 Mar 1996 16:46:06 AGUPTA2
  19. ;// Faster and smaller version of the routine. Code size reduction achieved
  20. ;// by avoiding 32-bit displacement in instructions.
  21. ;//
  22. ;//
  23. ;// Rev 1.1 27 Dec 1995 14:35:52 RMCKENZX
  24. ;// Added copyright notice
  25. ;
  26. ; d35obmc.asm
  27. ;
  28. ; Description
  29. ; This routine performs overlapped block motion compensation for
  30. ; advanced prediction mode.
  31. ;
  32. ; Routines:
  33. ; H263OBMC
  34. ;
  35. ; Data:
  36. ; This routine assumes that the PITCH is 384.
  37. ;
  38. ; Inputs (dwords pushed onto stack by caller):
  39. ; pCurr flat pointer to current block.
  40. ; Holds values predicted using the
  41. ; motion vector from this block.
  42. ; pLeft flat pointer to block left of pCurr.
  43. ; Holds values predicted using the
  44. ; motion vector of the left-hand block.
  45. ; pRight flat pointer to block right of pCurr
  46. ; Holds values predicted using the
  47. ; motion vector of the right-hand block.
  48. ; pAbove flat pointer to block above pCurr
  49. ; Holds values predicted using the
  50. ; motion vector of the above block.
  51. ; pBelow flat pointer to block below pCurr
  52. ; Holds values predicted using the
  53. ; motion vector of the below block.
  54. ; pRef flat pointer to the new predicted values
  55. ; to be computed by this routine.
  56. ;
  57. ;--------------------------------------------------------------------------;
  58. ;
  59. ; $Header: S:\h26x\src\dec\d35obmc.asv 1.2 08 Mar 1996 16:46:06 AGUPTA2 $
  60. ; $Log$
  61. ;//
  62. ;// Rev 1.0 29 Nov 1995 12:47:28 RMCKENZX
  63. ;// Initial revision.
  64. ;
  65. ;--------------------------------------------------------------------------;
  66. ;
  67. ; Register Usage:
  68. ;
  69. Cent EQU esi ; pCurr
  70. Comp EQU edi ; pRef
  71. Horz EQU ebp ; pLeft or pRight
  72. Vert EQU edx ; pAbove or pBelow
  73. ;
  74. ; eax, ebx accumulators for new predicted values
  75. ; ecx temporary
  76. ;
  77. ;--------------------------------------------------------------------------;
  78. ;
  79. ; Notes:
  80. ; This routine is fully unrolled.
  81. ;
  82. ; The basic computational unit consists of 8 instructions and is 2-folded,
  83. ; meaning that it works on 2 results (the new one in Stage I, the old one
  84. ; in Stage II, see below) at a time. It uses 3 loads, 3 additions (1 or
  85. ; 2 of which are done by the lea instruction), 1 shift, and one store per
  86. ; result computed. The two stages are interleaved on a 1-1 basis.
  87. ;
  88. ; Stage 1:
  89. ; Load Accumulator with Center Value
  90. ; Load Temporary with Horz/Vert Value
  91. ; Accumulator =(lea) x1 times Accumulator plus r0
  92. ; Accumulator =(lea or add) x2 times Accumulator plus x3 times Temporary
  93. ; Stage 2:
  94. ; Load Temporary with other Horz/Vert Value
  95. ; Accumulator =(add) Accumlator plus Temporary
  96. ; Shift Accumlator right s0 bits
  97. ; Store Accumulator
  98. ;
  99. ; where with various values for x1, x2, x3, round, and shift we achieve
  100. ; the needed weighted averages:
  101. ;
  102. ; Weights
  103. ; Cent Horz/Vert x1 x2 x3 r0 s0
  104. ; corners 4 2 2 2 1 1 2 2
  105. ; edges 5 2 1 5 1 2 4 3
  106. ; center 6 1 1 3 2 1 2 3
  107. ;
  108. ; This routine uses 4 pointers -- 3 of the 5 input pointers and one
  109. ; output pointer. The horizontal pointer is adjusted at the middle
  110. ; of each line, and all 4 pointers at the end of each line in order
  111. ; to avoid using large offsets. This sacrifices some speed in order
  112. ; to hold down code size.
  113. ;
  114. ; If all of its inputs were at some small,
  115. ; fixed offset from a single address, it could be considerably
  116. ; simplified.
  117. ;
  118. ;--------------------------------------------------------------------------;
  119. PITCH = 384
  120. .586
  121. IACODE2 SEGMENT PARA USE32 PUBLIC 'CODE'
  122. IACODE2 ENDS
  123. IACODE2 SEGMENT
  124. PUBLIC _H263OBMC
  125. ; input parameters before locals
  126. pCurr EQU esp+20
  127. pLeft EQU esp+24
  128. pRight EQU esp+28
  129. pAbove EQU esp+32
  130. pBelow EQU esp+36
  131. pRef EQU esp+40
  132. ; locals
  133. LeftToRight EQU esp+00
  134. RightToLeft EQU esp+04
  135. AboveToBelow EQU esp+08
  136. ; saved registers and other stuff
  137. ; unused esp+12
  138. ; ebp esp+16
  139. ; esi esp+20
  140. ; ebx esp+24
  141. ; edi esp+28
  142. ; return address esp+32
  143. ; input parameters after locals
  144. nCurr EQU esp+36
  145. nLeft EQU esp+40
  146. nRight EQU esp+44
  147. nAbove EQU esp+48
  148. nBelow EQU esp+52
  149. nRef EQU esp+56
  150. FRAMESIZE = 16
  151. _H263OBMC:
  152. ; set up
  153. push edi
  154. push ebx
  155. push esi
  156. push ebp
  157. mov Vert, [pAbove]
  158. mov Horz, [pLeft]
  159. mov Cent, [pCurr]
  160. mov ecx, [pRight]
  161. mov eax, [pBelow]
  162. sub esp, FRAMESIZE
  163. sub ecx, Horz
  164. sub eax, Vert
  165. mov ebx, PITCH
  166. mov [LeftToRight], ecx ; pRight - pLeft
  167. add eax, ebx
  168. sub ebx, ecx
  169. mov [AboveToBelow], eax ; pBelow - pAbove + PITCH
  170. xor eax, eax
  171. ;
  172. ; We start with the upper left corner
  173. ; we go left to right, then drop down
  174. ; to the next row and repeat.
  175. ;
  176. xor ecx, ecx
  177. mov al, [Cent] ; start ->00=eax
  178. mov [RightToLeft], ebx ; PITCH + pLeft - pRight
  179. mov cl, [Vert] ; 00
  180. xor ebx, ebx
  181. lea eax, [2*eax+2] ; 00
  182. mov Comp, [nRef]
  183. add eax, ecx ; 00
  184. mov cl, [Horz] ; 00
  185. mov bl, 1[Cent] ; start ->01=ebx
  186. add eax, ecx ; 00
  187. mov cl, 1[Vert] ; 01
  188. sar eax, 2 ; 00
  189. lea ebx, [ebx+4*ebx+4] ; 01
  190. mov [Comp], al ; complete <-00=al
  191. lea ebx, [ebx+2*ecx] ; 01
  192. mov cl, 1[Horz] ; 01
  193. mov al, 2[Cent] ; start ->02=eax
  194. add ebx, ecx ; 01
  195. mov cl, 2[Vert] ; 02
  196. sar ebx, 3 ; 01
  197. lea eax, [eax+4*eax+4] ; 02
  198. mov 1[Comp], bl ; complete <-01=bl
  199. lea eax, [eax+2*ecx] ; 02
  200. mov cl, 2[Horz] ; 02
  201. mov bl, 3[Cent] ; start ->03=ebx
  202. add eax, ecx ; 02
  203. mov cl, 3[Vert] ; 03
  204. sar eax, 3 ; 02
  205. lea ebx, [ebx+4*ebx+4] ; 03
  206. mov 2[Comp], al ; complete <-02=al
  207. lea ebx, [ebx+2*ecx] ; 03
  208. mov cl, 3[Horz] ; 03
  209. mov al, 4[Cent] ; start ->04=eax
  210. mov Horz, [nRight]
  211. add ebx, ecx ; 03
  212. mov cl, 4[Vert] ; 04
  213. sar ebx, 3 ; 03
  214. lea eax, [eax+4*eax+4] ; 04
  215. mov 3[Comp], bl ; complete <-03=bl
  216. lea eax, [eax+2*ecx] ; 04
  217. mov cl, 4[Horz] ; 04
  218. mov bl, 5[Cent] ; start ->05=ebx
  219. add eax, ecx ; 04
  220. mov cl, 5[Vert] ; 05
  221. sar eax, 3 ; 04
  222. lea ebx, [ebx+4*ebx+4] ; 05
  223. mov 4[Comp], al ; complete <-04=al
  224. lea ebx, [ebx+2*ecx] ; 05
  225. mov cl, 5[Horz] ; 05
  226. mov al, 6[Cent] ; start ->06=eax
  227. add ebx, ecx ; 05
  228. mov cl, 6[Vert] ; 06
  229. sar ebx, 3 ; 05
  230. lea eax, [eax+4*eax+4] ; 06
  231. mov 5[Comp], bl ; complete <-05=bl
  232. lea eax, [eax+2*ecx] ; 06
  233. mov cl, 6[Horz] ; 06
  234. mov bl, 7[Cent] ; start ->07=ebx
  235. add eax, ecx ; 06
  236. mov cl, 7[Horz] ; 07
  237. add Cent, PITCH
  238. add Horz, [RightToLeft]
  239. sar eax, 3 ; 06
  240. lea ebx, [2*ebx+2] ; 07
  241. mov 6[Comp], al ; complete <-06=al
  242. add ebx, ecx ; 07
  243. mov cl, 7[Vert] ; 07
  244. mov al, 0[Cent] ; start ->10=eax
  245. add ebx, ecx ; 07
  246. mov cl, 0[Horz] ; 10
  247. sar ebx, 2 ; 07
  248. lea eax, [eax+4*eax+4] ; 10
  249. mov 7[Comp], bl ; complete <-07=bl
  250. add Vert, PITCH
  251. lea eax, [eax+2*ecx] ; 10
  252. add Comp, PITCH
  253. mov cl, 0[Vert] ; 10
  254. mov bl, 1[Cent] ; start ->11=ebx
  255. add eax, ecx ; 10
  256. mov cl, 1[Horz] ; 11
  257. sar eax, 3 ; 10
  258. lea ebx, [ebx+4*ebx+4] ; 11
  259. mov 0[Comp], al ; complete <-10=al
  260. lea ebx, [ebx+2*ecx] ; 11
  261. mov cl, 1[Vert] ; 11
  262. mov al, 2[Cent] ; start ->12=eax
  263. add ebx, ecx ; 11
  264. mov cl, 2[Vert] ; 12
  265. sar ebx, 3 ; 11
  266. lea eax, [eax+4*eax+4] ; 12
  267. mov 1[Comp], bl ; complete <-11=bl
  268. lea eax, [eax+2*ecx] ; 12
  269. mov cl, 2[Horz] ; 12
  270. mov bl, 3[Cent] ; start ->13=ebx
  271. add eax, ecx ; 12
  272. mov cl, 3[Vert] ; 13
  273. sar eax, 3 ; 12
  274. lea ebx, [ebx+4*ebx+4] ; 13
  275. mov 2[Comp], al ; complete <-12=al
  276. lea ebx, [ebx+2*ecx] ; 13
  277. mov cl, 3[Horz] ; 13
  278. mov al, 4[Cent] ; start ->14=eax
  279. add ebx, ecx ; 13
  280. add Horz, [LeftToRight]
  281. mov cl, 4[Vert] ; 14
  282. sar ebx, 3 ; 13
  283. lea eax, [eax+4*eax+4] ; 14
  284. mov 3[Comp], bl ; complete <-13=bl
  285. lea eax, [eax+2*ecx] ; 14
  286. mov cl, 4[Horz] ; 14
  287. mov bl, 5[Cent] ; start ->15=ebx
  288. add eax, ecx ; 14
  289. mov cl, 5[Vert] ; 15
  290. sar eax, 3 ; 14
  291. lea ebx, [ebx+4*ebx+4] ; 15
  292. mov 4[Comp], al ; complete <-14=al
  293. lea ebx, [ebx+2*ecx] ; 15
  294. mov cl, 5[Horz] ; 15
  295. mov al, 6[Cent] ; start ->16=eax
  296. add ebx, ecx ; 15
  297. mov cl, 6[Horz] ; 16
  298. sar ebx, 3 ; 15
  299. lea eax, [eax+4*eax+4] ; 16
  300. mov 5[Comp], bl ; complete <-15=bl
  301. lea eax, [eax+2*ecx] ; 16
  302. mov cl, 6[Vert] ; 16
  303. mov bl, 7[Cent] ; start ->17=ebx
  304. add eax, ecx ; 16
  305. mov cl, 7[Horz] ; 17
  306. add Cent, PITCH
  307. add Horz, [RightToLeft]
  308. sar eax, 3 ; 16
  309. lea ebx, [ebx+4*ebx+4] ; 17
  310. mov 6[Comp], al ; complete <-16=al
  311. lea ebx, [ebx+2*ecx] ; 17
  312. mov cl, 7[Vert] ; 17
  313. mov al, 0[Cent] ; start ->20=eax
  314. add ebx, ecx ; 17
  315. mov cl, 0[Horz] ; 20
  316. sar ebx, 3 ; 17
  317. lea eax, [eax+4*eax+4] ; 20
  318. mov 7[Comp], bl ; complete <-17=bl
  319. add Vert, PITCH
  320. lea eax, [eax+2*ecx] ; 20
  321. add Comp, PITCH
  322. mov cl, 0[Vert] ; 20
  323. mov bl, 1[Cent] ; start ->21=ebx
  324. add eax, ecx ; 20
  325. mov cl, 1[Horz] ; 21
  326. sar eax, 3 ; 20
  327. lea ebx, [ebx+4*ebx+4] ; 21
  328. mov 0[Comp], al ; complete <-20=al
  329. lea ebx, [ebx+2*ecx] ; 21
  330. mov cl, 1[Vert] ; 21
  331. mov al, 2[Cent] ; start ->22=eax
  332. add ebx, ecx ; 21
  333. mov cl, 2[Vert] ; 22
  334. sar ebx, 3 ; 21
  335. lea eax, [eax+2*eax+2] ; 22
  336. mov 1[Comp], bl ; complete <-21=bl
  337. lea eax, [2*eax+ecx] ; 22
  338. mov cl, 2[Horz] ; 22
  339. mov bl, 3[Cent] ; start ->23=ebx
  340. add eax, ecx ; 22
  341. mov cl, 3[Vert] ; 23
  342. sar eax, 3 ; 22
  343. lea ebx, [ebx+2*ebx+2] ; 23
  344. mov 2[Comp], al ; complete <-22=al
  345. lea ebx, [2*ebx+ecx] ; 23
  346. mov cl, 3[Horz] ; 23
  347. mov al, 4[Cent] ; start ->24=eax
  348. add ebx, ecx ; 23
  349. add Horz, [LeftToRight]
  350. mov cl, 4[Vert] ; 24
  351. sar ebx, 3 ; 23
  352. lea eax, [eax+2*eax+2] ; 24
  353. mov 3[Comp], bl ; complete <-23=bl
  354. lea eax, [2*eax+ecx] ; 24
  355. mov cl, 4[Horz] ; 24
  356. mov bl, 5[Cent] ; start ->25=ebx
  357. add eax, ecx ; 24
  358. mov cl, 5[Vert] ; 25
  359. sar eax, 3 ; 24
  360. lea ebx, [ebx+2*ebx+2] ; 25
  361. mov 4[Comp], al ; complete <-24=al
  362. lea ebx, [2*ebx+ecx] ; 25
  363. mov cl, 5[Horz] ; 25
  364. mov al, 6[Cent] ; start ->26=eax
  365. add ebx, ecx ; 25
  366. mov cl, 6[Horz] ; 26
  367. sar ebx, 3 ; 25
  368. lea eax, [eax+4*eax+4] ; 26
  369. mov 5[Comp], bl ; complete <-25=bl
  370. lea eax, [eax+2*ecx] ; 26
  371. mov cl, 6[Vert] ; 26
  372. mov bl, 7[Cent] ; start ->27=ebx
  373. add eax, ecx ; 26
  374. mov cl, 7[Horz] ; 27
  375. add Cent, PITCH
  376. add Horz, [RightToLeft]
  377. sar eax, 3 ; 26
  378. lea ebx, [ebx+4*ebx+4] ; 27
  379. mov 6[Comp], al ; complete <-26=al
  380. lea ebx, [ebx+2*ecx] ; 27
  381. mov cl, 7[Vert] ; 27
  382. mov al, 0[Cent] ; start ->30=eax
  383. add ebx, ecx ; 27
  384. mov cl, 0[Horz] ; 30
  385. sar ebx, 3 ; 27
  386. lea eax, [eax+4*eax+4] ; 30
  387. mov 7[Comp], bl ; complete <-27=bl
  388. add Vert, PITCH
  389. lea eax, [eax+2*ecx] ; 30
  390. add Comp, PITCH
  391. mov cl, 0[Vert] ; 30
  392. mov bl, 1[Cent] ; start ->31=ebx
  393. add eax, ecx ; 30
  394. mov cl, 1[Horz] ; 31
  395. sar eax, 3 ; 30
  396. lea ebx, [ebx+4*ebx+4] ; 31
  397. mov 0[Comp], al ; complete <-30=al
  398. lea ebx, [ebx+2*ecx] ; 31
  399. mov cl, 1[Vert] ; 31
  400. mov al, 2[Cent] ; start ->32=eax
  401. add ebx, ecx ; 31
  402. mov cl, 2[Vert] ; 32
  403. sar ebx, 3 ; 31
  404. lea eax, [eax+2*eax+2] ; 32
  405. mov 1[Comp], bl ; complete <-31=bl
  406. lea eax, [2*eax+ecx] ; 32
  407. mov cl, 2[Horz] ; 32
  408. mov bl, 3[Cent] ; start ->33=ebx
  409. add eax, ecx ; 32
  410. mov cl, 3[Vert] ; 33
  411. sar eax, 3 ; 32
  412. lea ebx, [ebx+2*ebx+2] ; 33
  413. mov 2[Comp], al ; complete <-32=al
  414. lea ebx, [2*ebx+ecx] ; 33
  415. mov cl, 3[Horz] ; 33
  416. mov al, 4[Cent] ; start ->34=eax
  417. add ebx, ecx ; 33
  418. add Horz, [LeftToRight]
  419. mov cl, 4[Vert] ; 34
  420. sar ebx, 3 ; 33
  421. lea eax, [eax+2*eax+2] ; 34
  422. mov 3[Comp], bl ; complete <-33=bl
  423. lea eax, [2*eax+ecx] ; 34
  424. mov cl, 4[Horz] ; 34
  425. mov bl, 5[Cent] ; start ->35=ebx
  426. add eax, ecx ; 34
  427. mov cl, 5[Vert] ; 35
  428. sar eax, 3 ; 34
  429. lea ebx, [ebx+2*ebx+2] ; 35
  430. mov 4[Comp], al ; complete <-34=al
  431. lea ebx, [2*ebx+ecx] ; 35
  432. mov cl, 5[Horz] ; 35
  433. mov al, 6[Cent] ; start ->36=eax
  434. add ebx, ecx ; 35
  435. mov cl, 6[Horz] ; 36
  436. sar ebx, 3 ; 35
  437. lea eax, [eax+4*eax+4] ; 36
  438. mov 5[Comp], bl ; complete <-35=bl
  439. lea eax, [eax+2*ecx] ; 36
  440. mov cl, 6[Vert] ; 36
  441. mov bl, 7[Cent] ; start ->37=ebx
  442. add eax, ecx ; 36
  443. mov cl, 7[Horz] ; 37
  444. add Cent, PITCH
  445. add Horz, [RightToLeft]
  446. sar eax, 3 ; 36
  447. lea ebx, [ebx+4*ebx+4] ; 37
  448. mov 6[Comp], al ; complete <-36=al
  449. lea ebx, [ebx+2*ecx] ; 37
  450. mov cl, 7[Vert] ; 37
  451. mov al, 0[Cent] ; start ->40=eax
  452. add ebx, ecx ; 37
  453. mov cl, 0[Horz] ; 40
  454. sar ebx, 3 ; 37
  455. lea eax, [eax+4*eax+4] ; 40
  456. mov 7[Comp], bl ; complete <-37=bl
  457. add Vert, [AboveToBelow]
  458. lea eax, [eax+2*ecx] ; 40
  459. add Comp, PITCH
  460. mov cl, 0[Vert] ; 40
  461. mov bl, 1[Cent] ; start ->41=ebx
  462. add eax, ecx ; 40
  463. mov cl, 1[Horz] ; 41
  464. sar eax, 3 ; 40
  465. lea ebx, [ebx+4*ebx+4] ; 41
  466. mov 0[Comp], al ; complete <-40=al
  467. lea ebx, [ebx+2*ecx] ; 41
  468. mov cl, 1[Vert] ; 41
  469. mov al, 2[Cent] ; start ->42=eax
  470. add ebx, ecx ; 41
  471. mov cl, 2[Vert] ; 42
  472. sar ebx, 3 ; 41
  473. lea eax, [eax+2*eax+2] ; 42
  474. mov 1[Comp], bl ; complete <-41=bl
  475. lea eax, [2*eax+ecx] ; 42
  476. mov cl, 2[Horz] ; 42
  477. mov bl, 3[Cent] ; start ->43=ebx
  478. add eax, ecx ; 42
  479. mov cl, 3[Vert] ; 43
  480. sar eax, 3 ; 42
  481. lea ebx, [ebx+2*ebx+2] ; 43
  482. mov 2[Comp], al ; complete <-42=al
  483. lea ebx, [2*ebx+ecx] ; 43
  484. mov cl, 3[Horz] ; 43
  485. mov al, 4[Cent] ; start ->44=eax
  486. add ebx, ecx ; 43
  487. add Horz, [LeftToRight]
  488. mov cl, 4[Vert] ; 44
  489. sar ebx, 3 ; 43
  490. lea eax, [eax+2*eax+2] ; 44
  491. mov 3[Comp], bl ; complete <-43=bl
  492. lea eax, [2*eax+ecx] ; 44
  493. mov cl, 4[Horz] ; 44
  494. mov bl, 5[Cent] ; start ->45=ebx
  495. add eax, ecx ; 44
  496. mov cl, 5[Vert] ; 45
  497. sar eax, 3 ; 44
  498. lea ebx, [ebx+2*ebx+2] ; 45
  499. mov 4[Comp], al ; complete <-44=al
  500. lea ebx, [2*ebx+ecx] ; 45
  501. mov cl, 5[Horz] ; 45
  502. mov al, 6[Cent] ; start ->46=eax
  503. add ebx, ecx ; 45
  504. mov cl, 6[Horz] ; 46
  505. sar ebx, 3 ; 45
  506. lea eax, [eax+4*eax+4] ; 46
  507. mov 5[Comp], bl ; complete <-45=bl
  508. lea eax, [eax+2*ecx] ; 46
  509. mov cl, 6[Vert] ; 46
  510. mov bl, 7[Cent] ; start ->47=ebx
  511. add eax, ecx ; 46
  512. mov cl, 7[Horz] ; 47
  513. add Cent, PITCH
  514. add Horz, [RightToLeft]
  515. sar eax, 3 ; 46
  516. lea ebx, [ebx+4*ebx+4] ; 47
  517. mov 6[Comp], al ; complete <-46=al
  518. lea ebx, [ebx+2*ecx] ; 47
  519. mov cl, 7[Vert] ; 47
  520. mov al, 0[Cent] ; start ->50=eax
  521. add ebx, ecx ; 47
  522. mov cl, 0[Horz] ; 50
  523. sar ebx, 3 ; 47
  524. lea eax, [eax+4*eax+4] ; 50
  525. mov 7[Comp], bl ; complete <-47=bl
  526. add Vert, PITCH
  527. lea eax, [eax+2*ecx] ; 50
  528. add Comp, PITCH
  529. mov cl, 0[Vert] ; 50
  530. mov bl, 1[Cent] ; start ->51=ebx
  531. add eax, ecx ; 50
  532. mov cl, 1[Horz] ; 51
  533. sar eax, 3 ; 50
  534. lea ebx, [ebx+4*ebx+4] ; 51
  535. mov 0[Comp], al ; complete <-50=al
  536. lea ebx, [ebx+2*ecx] ; 51
  537. mov cl, 1[Vert] ; 51
  538. mov al, 2[Cent] ; start ->52=eax
  539. add ebx, ecx ; 51
  540. mov cl, 2[Vert] ; 52
  541. sar ebx, 3 ; 51
  542. lea eax, [eax+2*eax+2] ; 52
  543. mov 1[Comp], bl ; complete <-51=bl
  544. lea eax, [2*eax+ecx] ; 52
  545. mov cl, 2[Horz] ; 52
  546. mov bl, 3[Cent] ; start ->53=ebx
  547. add eax, ecx ; 52
  548. mov cl, 3[Vert] ; 53
  549. sar eax, 3 ; 52
  550. lea ebx, [ebx+2*ebx+2] ; 53
  551. mov 2[Comp], al ; complete <-52=al
  552. lea ebx, [2*ebx+ecx] ; 53
  553. mov cl, 3[Horz] ; 53
  554. mov al, 4[Cent] ; start ->54=eax
  555. add ebx, ecx ; 53
  556. add Horz, [LeftToRight]
  557. mov cl, 4[Vert] ; 54
  558. sar ebx, 3 ; 53
  559. lea eax, [eax+2*eax+2] ; 54
  560. mov 3[Comp], bl ; complete <-53=bl
  561. lea eax, [2*eax+ecx] ; 54
  562. mov cl, 4[Horz] ; 54
  563. mov bl, 5[Cent] ; start ->55=ebx
  564. add eax, ecx ; 54
  565. mov cl, 5[Vert] ; 55
  566. sar eax, 3 ; 54
  567. lea ebx, [ebx+2*ebx+2] ; 55
  568. mov 4[Comp], al ; complete <-54=al
  569. lea ebx, [2*ebx+ecx] ; 55
  570. mov cl, 5[Horz] ; 55
  571. mov al, 6[Cent] ; start ->56=eax
  572. add ebx, ecx ; 55
  573. mov cl, 6[Horz] ; 56
  574. sar ebx, 3 ; 55
  575. lea eax, [eax+4*eax+4] ; 56
  576. mov 5[Comp], bl ; complete <-55=bl
  577. lea eax, [eax+2*ecx] ; 56
  578. mov cl, 6[Vert] ; 56
  579. mov bl, 7[Cent] ; start ->57=ebx
  580. add eax, ecx ; 56
  581. mov cl, 7[Horz] ; 57
  582. add Cent, PITCH
  583. add Horz, [RightToLeft]
  584. sar eax, 3 ; 56
  585. lea ebx, [ebx+4*ebx+4] ; 57
  586. mov 6[Comp], al ; complete <-56=al
  587. lea ebx, [ebx+2*ecx] ; 57
  588. mov cl, 7[Vert] ; 57
  589. mov al, 0[Cent] ; start ->60=eax
  590. add ebx, ecx ; 57
  591. mov cl, 0[Horz] ; 60
  592. sar ebx, 3 ; 57
  593. lea eax, [eax+4*eax+4] ; 60
  594. mov 7[Comp], bl ; complete <-57=bl
  595. add Vert, PITCH
  596. lea eax, [eax+2*ecx] ; 60
  597. add Comp, PITCH
  598. mov cl, 0[Vert] ; 60
  599. mov bl, 1[Cent] ; start ->61=ebx
  600. add eax, ecx ; 60
  601. mov cl, 1[Horz] ; 61
  602. sar eax, 3 ; 60
  603. lea ebx, [ebx+4*ebx+4] ; 61
  604. mov 0[Comp], al ; complete <-60=al
  605. lea ebx, [ebx+2*ecx] ; 61
  606. mov cl, 1[Vert] ; 61
  607. mov al, 2[Cent] ; start ->62=eax
  608. add ebx, ecx ; 61
  609. mov cl, 2[Vert] ; 62
  610. sar ebx, 3 ; 61
  611. lea eax, [eax+4*eax+4] ; 62
  612. mov 1[Comp], bl ; complete <-61=bl
  613. lea eax, [eax+2*ecx] ; 62
  614. mov cl, 2[Horz] ; 62
  615. mov bl, 3[Cent] ; start ->63=ebx
  616. add eax, ecx ; 62
  617. mov cl, 3[Vert] ; 63
  618. sar eax, 3 ; 62
  619. lea ebx, [ebx+4*ebx+4] ; 63
  620. mov 2[Comp], al ; complete <-62=al
  621. lea ebx, [ebx+2*ecx] ; 63
  622. mov cl, 3[Horz] ; 63
  623. mov al, 4[Cent] ; start ->64=eax
  624. add ebx, ecx ; 63
  625. add Horz, [LeftToRight]
  626. mov cl, 4[Vert] ; 64
  627. sar ebx, 3 ; 63
  628. lea eax, [eax+4*eax+4] ; 64
  629. mov 3[Comp], bl ; complete <-63=bl
  630. lea eax, [eax+2*ecx] ; 64
  631. mov cl, 4[Horz] ; 64
  632. mov bl, 5[Cent] ; start ->65=ebx
  633. add eax, ecx ; 64
  634. mov cl, 5[Vert] ; 65
  635. sar eax, 3 ; 64
  636. lea ebx, [ebx+4*ebx+4] ; 65
  637. mov 4[Comp], al ; complete <-64=al
  638. lea ebx, [ebx+2*ecx] ; 65
  639. mov cl, 5[Horz] ; 65
  640. mov al, 6[Cent] ; start ->66=eax
  641. add ebx, ecx ; 65
  642. mov cl, 6[Horz] ; 66
  643. sar ebx, 3 ; 65
  644. lea eax, [eax+4*eax+4] ; 66
  645. mov 5[Comp], bl ; complete <-65=bl
  646. lea eax, [eax+2*ecx] ; 66
  647. mov cl, 6[Vert] ; 66
  648. mov bl, 7[Cent] ; start ->67=ebx
  649. add eax, ecx ; 66
  650. mov cl, 7[Horz] ; 67
  651. add Cent, PITCH
  652. add Horz, [RightToLeft]
  653. sar eax, 3 ; 66
  654. lea ebx, [ebx+4*ebx+4] ; 67
  655. mov 6[Comp], al ; complete <-66=al
  656. lea ebx, [ebx+2*ecx] ; 67
  657. mov cl, 7[Vert] ; 67
  658. mov al, 0[Cent] ; start ->70=eax
  659. add ebx, ecx ; 67
  660. mov cl, 0[Horz] ; 70
  661. sar ebx, 3 ; 67
  662. lea eax, [2*eax+2] ; 70
  663. mov 7[Comp], bl ; complete <-67=bl
  664. add Vert, PITCH
  665. add eax, ecx ; 70
  666. add Comp, PITCH
  667. mov cl, 0[Vert] ; 70
  668. mov bl, 1[Cent] ; start ->71=ebx
  669. add eax, ecx ; 70
  670. mov cl, 1[Vert] ; 71
  671. sar eax, 2 ; 70
  672. lea ebx, [ebx+4*ebx+4] ; 71
  673. mov 0[Comp], al ; complete <-70=al
  674. lea ebx, [ebx+2*ecx] ; 71
  675. mov cl, 1[Horz] ; 71
  676. mov al, 2[Cent] ; start ->72=eax
  677. add ebx, ecx ; 71
  678. mov cl, 2[Vert] ; 72
  679. sar ebx, 3 ; 71
  680. lea eax, [eax+4*eax+4] ; 72
  681. mov 1[Comp], bl ; complete <-71=bl
  682. lea eax, [eax+2*ecx] ; 72
  683. mov cl, 2[Horz] ; 72
  684. mov bl, 3[Cent] ; start ->73=ebx
  685. add eax, ecx ; 72
  686. mov cl, 3[Vert] ; 73
  687. sar eax, 3 ; 72
  688. lea ebx, [ebx+4*ebx+4] ; 73
  689. mov 2[Comp], al ; complete <-72=al
  690. lea ebx, [ebx+2*ecx] ; 73
  691. mov cl, 3[Horz] ; 73
  692. mov al, 4[Cent] ; start ->74=eax
  693. add ebx, ecx ; 73
  694. add Horz, [LeftToRight]
  695. mov cl, 4[Vert] ; 74
  696. sar ebx, 3 ; 73
  697. lea eax, [eax+4*eax+4] ; 74
  698. mov 3[Comp], bl ; complete <-73=bl
  699. lea eax, [eax+2*ecx] ; 74
  700. mov cl, 4[Horz] ; 74
  701. mov bl, 5[Cent] ; start ->75=ebx
  702. add eax, ecx ; 74
  703. mov cl, 5[Vert] ; 75
  704. sar eax, 3 ; 74
  705. lea ebx, [ebx+4*ebx+4] ; 75
  706. mov 4[Comp], al ; complete <-74=al
  707. lea ebx, [ebx+2*ecx] ; 75
  708. mov cl, 5[Horz] ; 75
  709. mov al, 6[Cent] ; start ->76=eax
  710. add ebx, ecx ; 75
  711. mov cl, 6[Vert] ; 76
  712. sar ebx, 3 ; 75
  713. lea eax, [eax+4*eax+4] ; 76
  714. mov 5[Comp], bl ; complete <-75=bl
  715. lea eax, [eax+2*ecx] ; 76
  716. mov cl, 6[Horz] ; 76
  717. mov bl, 7[Cent] ; start ->77=ebx
  718. add eax, ecx ; 76
  719. mov cl, 7[Horz] ; 77
  720. sar eax, 3 ; 76
  721. lea ebx, [2*ebx+2] ; 77
  722. mov 6[Comp], al ; complete <-76=al
  723. add ebx, ecx ; 77
  724. mov cl, 7[Vert] ; 77
  725. add esp, FRAMESIZE
  726. add ebx, ecx ; 77
  727. sar ebx, 2 ; 77
  728. pop ebp
  729. mov 7[Comp], bl ; complete <-77=bl
  730. pop esi
  731. ;
  732. ; wrap up and go home with the job well done
  733. ;
  734. pop ebx
  735. pop edi
  736. ret
  737. IACODE2 ENDS
  738. END
  739. // h263obmc1.asm page 17 5:02 PM, 10/29/95 //