Java Reference
In-Depth Information
procedure
tree
CG( T , regList )
r 1
← head
( regList )
r 2
( regList ))
if T . kind = Identi f ier
then
/
← head
(
tail
Load a variable.
/
call
generate
( lw , r 1
, T . Identi f ierName )
else
if T . kind = IntegerLiteral
then
/
Load a literal.
/
call
generate
( li , r 1
, T . IntegerValue )
else
/
T.kind must be a binary operator.
/
le f t T . le f tChild
right T . rightChild
if le f t . regCount ≥ length
( regList ) and right . regCount ≥ length
( regList )
then
/
Must spill a register into memory.
/
call
tree
CG( le f t , regList )
/
Get memory location.
/
temp ← get
T
emp
()
call
generate
( sw , r 1
, temp )
call
tree
CG( right , regList )
call
generate
( lw , r 2
, temp )
/
Free memory location.
/
call
free
T
emp
( temp )
call
generate
( T . operation , r 1
, r 2
, r 1)
else
/
There are enough registers; no spilling is needed.
/
if le f t . regCount right . regCount
then
call
tree
CG( le f t , regList )
call
tree
CG( right ,tail
( regList ))
call
generate
( T . operation , r 1
, r 1
, r 2)
else
call
tree
CG( right , regList )
call
tree
CG( le f t ,tail
( regList ))
call
generate
( T . operation , r 1
, r 2
, r 1)
end
Figure 13.12: An Algorithm to Generate Optimal Code from Expression
Trees
 
Search WWH ::




Custom Search