Code Generation/Example 3: Difference between revisions
From Wiki**3
< Code Generation
Line 27: | Line 27: | ||
;; i = dim-2 | ;; i = dim-2 | ||
LOCAL 12 | LOCAL 12 | ||
LDINT | |||
INT 2 | INT 2 | ||
SUB | SUB | ||
DUP32 | |||
LOCAL -8 | LOCAL -8 | ||
STINT | |||
TRASH 4 | TRASH 4 | ||
;; res = x + dim - 1 | ;; res = x + dim - 1 | ||
LOCAL 8 | LOCAL 8 | ||
LDINT | |||
LOCAL 12 | LOCAL 12 | ||
LDINT | |||
INT 4 | INT 4 | ||
MUL | MUL | ||
Line 47: | Line 47: | ||
MUL | MUL | ||
SUB | SUB | ||
DUP32 | |||
LOCAL -4 | LOCAL -4 | ||
STINT | |||
TRASH 4 | TRASH 4 | ||
Line 56: | Line 56: | ||
LABEL for | LABEL for | ||
LOCAL -8 | LOCAL -8 | ||
LDINT | |||
INT 0 | INT 0 | ||
GE | GE | ||
Line 65: | Line 65: | ||
;; if test | ;; if test | ||
LOCAL 8 | LOCAL 8 | ||
LDINT ; x | |||
LOCAL -8 | LOCAL -8 | ||
LDINT; i | |||
INT 4 | INT 4 | ||
MUL | MUL | ||
ADD ; x+i | ADD ; x+i | ||
LDINT ; x[i] = *(x+i) | |||
LOCAL -4 | LOCAL -4 | ||
LDINT ; res | |||
LDINT ; *res | |||
GT | GT | ||
Line 82: | Line 82: | ||
;; if block | ;; if block | ||
LOCAL 8 | LOCAL 8 | ||
LDINT ; x | |||
LOCAL -8 | LOCAL -8 | ||
LDINT ; i | |||
INT 4 | INT 4 | ||
MUL | MUL | ||
ADD ; x+i = &x[i] | ADD ; x+i = &x[i] | ||
DUP32 | |||
LOCAL -4 | LOCAL -4 | ||
STINT ; res = &x[i] | |||
TRASH 4 | TRASH 4 | ||
Line 100: | Line 100: | ||
LABEL forincr | LABEL forincr | ||
LOCAL -8 | LOCAL -8 | ||
LDINT ; i | |||
DUP32 | |||
INT 1 | INT 1 | ||
SUB | SUB | ||
LOCAL -8 | LOCAL -8 | ||
STINT | |||
TRASH 4 | TRASH 4 | ||
Line 116: | Line 116: | ||
;; return | ;; return | ||
LOCAL -4 | LOCAL -4 | ||
LDINT ; res | |||
STFVAL32 | |||
LEAVE | LEAVE | ||
RET | RET |
Revision as of 22:30, 1 May 2018
The Original Code
Consider the following C function:
<c> int *click(int *x, int dim) {
int *res, i; for (i = dim-2, res = x+dim-1; i >= 0; i--) if (x[i] > *res) res = &x[i]; return res;
} </c>
Postfix Code
The Postfix code for the above function is as follows:
Postfix code |
---|
{{{2}}} |
Compiling and Running
To compile the Postfix code directly, pf2asm can be used:
- pf2asm click.pf
- yasm -felf click.asm