22007E/0 — November 1999

AMD Athlon™ Processor x86 Code Optimization

;;

 

 

 

 

 

;;

 

DESTROYS MM0,MM1,MM2,MM3,MM4

 

PXOR

MM0,

MM0

; 0 0

 

MOVQ

MM1,

MM6

; w z

 

MOVQ

MM4,

MM5

; y x

 

PUNPCKHDQ

MM1,

MM1

; w w

 

MOVQ

MM3,

MM6

; w z

 

MOVQ

MM2,

MM5

; y x

 

PFSUBR

MM3,

MM0

; -w -z

PFSUBR

MM2,

MM0

; -y -x

PUNPCKLDQ

MM3,

MM6

;

z -z

PFCMPGT

MM4,

MM1

;

y>w?FFFFFFFF:0 x>w?FFFFFFFF:0

MOVQ

MM0,

QWORD PTR [ABOVE_RIGHT]

; ABOVE

RIGHT

PFCMPGT

MM3,

MM1

;

z>w?FFFFFFFF:0 -z>w>FFFFFFFF:0

PFCMPGT

MM2,

MM1

; -y>w?FFFFFFFF:0 -x>w?FFFFFFFF:0

MOVQ

MM1,

QWORD PTR [BEHIND_BEFORE] ; BEHIND BEFORE

PAND

MM4,

MM0

; y > w

? ABOVE:0 x > w ? RIGHT:0

MOVQ

MM0,

QWORD PTR [BELOW_LEFT]

; BELOW

LEFT

PAND

MM3,

MM1

; z > w

? BEHIND:0 -z > w ? BEFORE:0

PAND

MM2,

MM0

; -y > w ? BELOW:0 -x > w ? LEFT:0

POR

MM2,

MM4

; BELOW,ABOVE LEFT,RIGHT

POR

MM2,

MM3

; BELOW,ABOVE,BEHIND LEFT,RIGHT,BEFORE

MOVQ

MM1,

MM2

; BELOW,ABOVE,BEHIND LEFT,RIGHT,BEFORE

PUNPCKHDQ MM2, MM2

; BELOW,ABOVE,BEHIND BELOW,ABOVE,BEHIND

POR

MM2, MM1

; zclip, yclip, xclip = clip code

Use 3DNow!™ PAVGUSB for MPEG-2 Motion Compensation

Use the 3DNow! PAVGUSB instruction for MPEG-2 motion compensation. The PAVGUSB instruction produces the rounded averages of the eight unsigned 8-bit integer values in the source operand (a MMX register or a 64-bit memory location) and the eight corresponding unsigned 8-bit integer values in the destination operand (a MMX register). The PAVGUSB instruction is extremely useful in DVD (MPEG-2) decoding where motion compensation performs a lot of byte averaging between and within macroblocks. The PAVGUSB instruction helps speed up these operations. In addition, PAVGUSB can free up some registers and make unrolling the averaging loops possible.

The following code fragment uses original MMX code to perform averaging between the source macroblock and destination macroblock:

Use 3DNow!™ PAVGUSB for MPEG-2 Motion Compensation

123

Page 139
Image 139
AMD x86 manual Use 3DNow! Pavgusb for MPEG-2 Motion Compensation