user manual

52 Store-to-Load Forwarding Restrictions
AMD Athlon Processor x86 Code Optimization
22007E/0November 1999
Narrow-to-Wide
Store-Buffer Data
Forwarding
Restriction
If the following conditions are present, there is a
narrow-to-wide store-buffer data forwarding restriction:
The operand size of the store data is smaller than the
operand size of the load data.
The range of addresses spanned by the store data covers
some sub-region of range of addresses spanned by the load
data.
Avoid the type of code shown in the following two examples.
Example 1 (Avoid):
MOV EAX, 10h
MOV WORD PTR [EAX], BX ;word store
...
MOV ECX, DWORD PTR [EAX] ;doubleword load
;cannot forward upper
; byte from store buffer
Example 2 (Avoid):
MOV EAX, 10h
MOV BYTE PTR [EAX + 3], BL ;byte store
...
MOV ECX, DWORD PTR [EAX] ;doubleword load
;cannot forward upper byte
; from store buffer
Wide-to-Narrow
Store-Buffer Data
Forwarding
Restriction
If the following conditions are present, there is a
wide-to-narrow store-buffer data forwarding restriction:
The operand size of the store data is greater than the
operand size of the load data.
The start address of the store data does not match the start
address of the load.
Example 3 (Avoid):
MOV EAX, 10h
ADD DWORD PTR [EAX], EBX ;doubleword store
MOV CX, WORD PTR [EAX + 2] ;word load-cannot forward high
; word from store buffer
Use example 5 instead of example 4.
Example 4 (Avoid):
MOVQ [foo], MM1 ;store upper and lower half
...
ADD EAX, [foo] ;fine
ADD EDX, [foo+4] ;uh-oh!