store to load forwarding
あるメモリアドレスに書き込む命令の後に同じアドレスから読み込む命令が続くとき, store forwarding が行われる.
mov DWORD [esi], edi mov eax, DWORD [esi]
上の例だと1行の書き込みが実際にL1$に書き込む前に, Store Bufferに書き込まれ, 読み込む命令はL1$にアクセスせずに, Store Bufferにあるデータを利用して処理を行う.
mov WORD [esi], di ; small write mov eax, DWORD [esi] ; big read (stall)
上のような読み込むサイズが書き込みサイズより大きい場合は, forwardingは行われない.
Ref
Store forwarding by example. | Denis Bakhvalov | C++ compiler dev.