作者wheels ()
看板Grad-ProbAsk
標題Re: [理工] [計組] delayed branch
時間Tue Nov 29 00:13:20 2011
※ 引述《wsx02 (無酒罐)》之銘言:
: from before
: add $s1, $s2, $s3
: if $s2=0 then
: delay slot
: 請問為什麼要把add搬到delay slot ?
因為add不管跳不跳都要執行,所以放在delay slot裡,
不管有沒有跳都不會浪費掉那個clock。
: --------------------------------------
: from target
: sub $t4, $t5, $t6
: add $s1, $s2, $s3
: if $s1=0 then
: delay slot
: 請問為什麼要把sub複製到delay slot ?
因為if的$s1與上面的add有RAW dependance,
所以不可以用from target,
而sub是Lebel指的位置(你沒打出來XD),
所以這個case在常跳的情況下都會執行到sub,
所以把sub放到一定會用掉的clock裡面並把Label往下移一格剛好。
這裡有一個地方要注意,就是如果沒跳的話也會多作一次sub,
所以要保證多一次沒差才可以使用。
: ----------------------------------------
: from fall through
: add $s1, $s2, $s3
: if $s1=0 then
: delay slot
: sub $t4, $t5, $t6
: 請問為什麼要把sub搬到delay slot ?
同from target,有RAW dependance,
而這個case在不常跳的情況下都會執行到sub,
一樣把sub放到一定會用掉的clock內剛好,
並且要保證多作一次也沒差。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.136
※ 編輯: wheels 來自: 140.112.30.136 (11/29 00:16)
推 wsx02:請問delay slot裡的指令是不管怎樣 一定要執行的嗎? 11/29 00:32
推 wsx02:請問為什麼有RAW就不能放delay slot? 11/29 00:41
→ metalalive:因為if($si=0)這行, $s1的值要先抓前面add指令算好的值 11/29 01:03
→ metalalive:如果add指令放到delay slot,則if內的$s1值就不保證正確 11/29 01:12