ST20-C1 STMICROELECTRONICS [STMicroelectronics], ST20-C1 Datasheet - Page 34

no-image

ST20-C1

Manufacturer Part Number
ST20-C1
Description
Instruction Set Reference Manual
Manufacturer
STMICROELECTRONICS [STMicroelectronics]
Datasheet
4.3 Expression evaluation
Evaluation of expressions sometimes requires the use of temporary variables in the
process work space, but the number of these can be minimized by careful choice of
the evaluation order. The details of how this is achieved by a compiler are described in
Appendix C in section C.3.
4.3.2
The three registers of the evaluation stack are used to hold operands of instructions.
Evaluation of an operand or parameter may involve the use of more than one register.
Care is needed when evaluating such operands to ensure that the first oper and to be
loaded is not pushed off the bottom of the evaluation stack by the evaluation of later
operands. The processor does not detect evaluation stack overflow.
Three registers are available for loading the first operand, two registers for the second
and one for the third. Consequently, the instructions are designed so that Creg holds
the operand which, on average, is the most complex, and Areg the operand which is
the least complex.
In some cases, it is necessar y to evaluate the Areg and Breg operands in advance,
and to store the results in temporary variables. This can sometimes be avoided using
the reverse instruction. Any of the following sequences may be used to load the
operands A , B and C into Areg, Breg and Creg respectively.
The choice of loading sequence, and of which operands should be evaluated in
advance is determined by the number of registers required to evaluate each of the
operands. The algorithm used by compilers is given in Appendix C in section C.4.
4.3.3
The ST20-C1 instruction set has been optimized so that the loading of small constants
can be coded compactly — for example it allows the loading of constants between 0
and 15 to be coded in a single byte. Analysis of programs shows that such small
constants occur markedly more frequently than large constants. However when a
large constant does need to be loaded the necessary prefix sequence may be long.
Other techniques may be more efficient in these cases .
A simple mechanism to increase the code compactness is to use a table of constants.
This is implemented by storing all the long constants into a look-up table. This table
and all its constant entries must be aligned on a word boundary. The address of this
table is held in a local variable which is used to index the array. Then to load the
34/205
1
2
3
4
Loading operands
C; B; A;
C; A; B; rev;
B; C; rev; A;
A; C; rev; B; rev;
Tables of constants

Related parts for ST20-C1