Code Generation/Exercise 9: Difference between revisions
From Wiki**3
< Code Generation
(Created page with "== The Original Code == Consider the following C code: <c> static unsigned long a = 10; static double *v; extern void *malloc(unsigned long); static double *mkvec(unsigned lon...") |
|||
Line 37: | Line 37: | ||
To compile the Postfix code directly, [[pf2asm]] can be used: | To compile the Postfix code directly, [[pf2asm]] can be used: | ||
* pf2asm | * pf2asm compute.pf | ||
* yasm -felf | * yasm -felf compute.asm | ||
[[category:Compilers]] | [[category:Compilers]] | ||
[[category:Teaching]] | [[category:Teaching]] |
Revision as of 13:07, 5 June 2012
The Original Code
Consider the following C code:
<c> static unsigned long a = 10; static double *v; extern void *malloc(unsigned long);
static double *mkvec(unsigned long n) {
if (n < 1) return (double *)0; unsigned long s = sizeof(double); double *v = (double *)malloc(n * s); return v;
}
double *compute() {
v = mkvec(a * 4); for (unsigned long i = 1; i < a; i++) if (v[i] > v[0]) v[i] = 3 * i - 1; return v;
} </c>
Assume that the size of pointers, int, and unsigned long is 32 bits and that the size of double is 64 bits.
Postfix Code
The Postfix code for the above code is as follows:
<asm>
</asm>
Compiling and Running
To compile the Postfix code directly, pf2asm can be used:
- pf2asm compute.pf
- yasm -felf compute.asm