|
|
(7 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| {{TOCright}}
| | #REDIRECT [[ist:Code Generation/Exercise 11]] |
| == Problema ==
| |
| | |
| Considere o seguinte código C++ (assuma que ponteiros e '''int''' ocupam 32 bits e que '''double''' ocupa 64 bits).
| |
| | |
| <cpp>
| |
| double *forall(double *v) {
| |
| const static int limit = 1024;
| |
| for (int i = 0; i < limit; i++) {
| |
| v[i] = 3 * i – sizeof(double);
| |
| if (v[i] > 2 * i) v[i] = limit;
| |
| }
| |
| return v;
| |
| }
| |
| </cpp>
| |
| | |
| == Código Postfix (não optimizado) ==
| |
| | |
| O código Postfix correspondente à função é o seguinte (agradece-se a comunicação de questões relativas a este código).
| |
| | |
| No código Postfix, '''BB#''' significa "[[Optimization Topics|bloco básico]] número".
| |
| | |
| <asm>
| |
| | |
| </asm>
| |
| | |
| == Compiling and Running ==
| |
| | |
| Para compilar o código Postfix directamente, pode ser utilizada a ferramenta [[pf2asm]] (assumindo uma arquitectura de 32 bits):
| |
| | |
| * pf2asm forall.pf
| |
| * yasm -felf forall.asm
| |
| | |
| [[category:Compiladores]]
| |
| [[category:Ensino]]
| |