05.09.2015 Views

计 算 机 组 织 与 系 统 结 构

打印版 - 北京大学微处理器研究开发中心

打印版 - 北京大学微处理器研究开发中心

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Stack Operations and<br />

Implicit Memory References<br />

Suppose the top 2 elements of the stack are kept in registers and the<br />

rest is kept in the memory.<br />

Each push operation⇒ 1 memory reference<br />

pop operation ⇒ 1 memory reference<br />

No Good!<br />

Better performance can be got if the top N elements are kept in<br />

registers and memory references are made only when register stack<br />

overflows or underflows.<br />

北 京 大 学 <strong>计</strong> <strong>算</strong> <strong>机</strong> 科 学 技 术 <strong>系</strong><br />

Issue - when to Load/Unload registers ?<br />

北 京 大 学 微 处 理 器 研 究 开 发 中 心<br />

Stack Size and Memory References<br />

a b c * + a d c * + e - /<br />

program stack (size = 2) memory refs<br />

push a R0 a<br />

push b R0 R1 b<br />

push c R0 R1 R2 c, ss(a)<br />

* R0 R1 sf(a)<br />

+ R0<br />

push a R0 R1 a<br />

push d R0 R1 R2 d, ss(a+b*c)<br />

push c R0 R1 R2 R3 c, ss(a)<br />

* R0 R1 R2 sf(a)<br />

+ R0 R1 sf(a+b*c)<br />

push e R0 R1 R2 e,ss(a+b*c)<br />

- R0 R1 sf(a+b*c)<br />

/ R0<br />

4 stores, 4 fetches (implicit)<br />

北 京 大 学 <strong>计</strong> <strong>算</strong> <strong>机</strong> 科 学 技 术 <strong>系</strong><br />

北 京 大 学 微 处 理 器 研 究 开 发 中 心<br />

Stack Size and Expression Evaluation<br />

Register Usage in a GPR Machine<br />

a and c are<br />

“loaded” twice<br />

⇒<br />

not the best<br />

use of registers!<br />

a b c * + a d c * + e - /<br />

program stack (size = 4)<br />

push a R0<br />

push b R0 R1<br />

push c R0 R1 R2<br />

* R0 R1<br />

+ R0<br />

push a R0 R1<br />

push d<br />

R0 R1 R2<br />

push c R0 R1 R2 R3<br />

* R0 R1 R2<br />

+ R0 R1<br />

push e R0 R1 R2<br />

- R0 R1<br />

/ R0<br />

(a + b * c) / (a + d * c - e)<br />

Load R0 a<br />

More control over register usage<br />

since registers can be named<br />

Load R1 c<br />

explicitly<br />

Load R2 b<br />

Reuse<br />

R2 Mul R2 R1<br />

Load Ri m<br />

Add R2 R0<br />

Load Ri (Rj)<br />

Reuse Load R3 d<br />

Load Ri (Rj) (Rk)<br />

R3 Mul R3 R1<br />

Add R3 R0<br />

⇒<br />

Reuse Load R0 e<br />

- eliminates unnecessary<br />

R0 Sub<br />

Div<br />

R3<br />

R2<br />

R0<br />

R3<br />

Loads and Stores<br />

- fewer Registers<br />

but instructions may be longer!<br />

北 京 大 学 <strong>计</strong> <strong>算</strong> <strong>机</strong> 科 学 技 术 <strong>系</strong><br />

北 京 大 学 微 处 理 器 研 究 开 发 中 心<br />

北 京 大 学 <strong>计</strong> <strong>算</strong> <strong>机</strong> 科 学 技 术 <strong>系</strong><br />

北 京 大 学 微 处 理 器 研 究 开 发 中 心

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!