|
|
Line 1: |
Line 1: |
| {{Multiple issues|orphan = May 2011|unreferenced = April 2011|cleanup = April 2011}}
| | Hi there! :) My name is Gudrun, I'm a student studying Earth Sciences from Oberburg, Switzerland.<br><br>My website: [http://social.xfire.com/blog/ambiguousblosso18/11979552 commercial roofing perth] |
| | |
| '''Ershov numbers''' are used in code optimization to minimize the amount of register allocations. Method can be used to optimally select registers when there is only one expression in a code block. Given an expression E = E<sub>1</sub> ''op'' E<sub>2</sub> the goal is to generate code so as to either minimize the number of registers used, or, if an insufficient number of registers is available, to minimize the number of nonregister temporaries required.
| |
| | |
| The Ershov number ''n'' of a node in given [[expression tree]] is defined as follows:
| |
| | |
| # Every leaf has ''n'' = 1.
| |
| # For a node with one child, ''n'' is the same as child's.
| |
| # For a node with two children, ''n'' is defined as:
| |
| :::<math> n = max(child_1, child_2), if child_1 \ne child_2 </math>
| |
| :::<math> n = child_1 + 1, if child_1 = child_2 </math> | |
| | |
| The Ershov number of a [[node (autonomous system)|node]] represents the minimum number of registers required to evaluate the subexpression whose root is that node. The idea is that we evaluate the child with the larger Ershov number first, then the other child, then perform the operation at the root.
| |
| | |
| == Example ==
| |
| Suppose we have an expression tree with a '+' operation at the root, and the left and right [[subtree]]s have Ershov numbers of 3 and 4, respectively. The Ershov number of this node is 4, so we should be able to generate code for the expression using 4 registers.
| |
| | |
| # Generate code to evaluate the right child using registers r1, r2, r3, and r4. Place the result in r1.
| |
| # Generate code to evaluate the left child using registers r2, r3, and r4. Place the result in r2.
| |
| # Issue the instruction "ADD r1, r2, r1".
| |
| | |
| What if there are not enough registers available? That is, if the Ershov number of the root of the expression tree is greater than the number of registers. We can still use the Ershov numbers to generate code using a minimal number of loads and stores, as follows:
| |
| | |
| # generate code for the child with the larger Ershov number
| |
| # issue an instruction to store the result in a temporary
| |
| # generate code for the child with the smaller Ershov number
| |
| # issue an instruction to load the temporary into a register
| |
| # issue an instruction to perform the operation at the root
| |
| | |
| == Example ==
| |
| Suppose we have an expression tree in the following form:
| |
| | |
| *Generate code for this tree using only 3 registers.
| |
| *Generate code for this tree using only 2 registers.
| |
| | |
| [[Category:Syntax| Softaware optimization]]
| |
Hi there! :) My name is Gudrun, I'm a student studying Earth Sciences from Oberburg, Switzerland.
My website: commercial roofing perth