Optimization Topics/Exercise 01: Difference between revisions
From Wiki**3
No edit summary |
No edit summary |
||
| Line 3: | Line 3: | ||
# Traduza-a para Postfix optimizado. | # Traduza-a para Postfix optimizado. | ||
<c> | <source lang="c"> | ||
int *fun(int *a, int *b) { | int *fun(int *a, int *b) { | ||
int *c = (int *)malloc(160 * 4), i, j; | int *c = (int *)malloc(160 * 4), i, j; | ||
| Line 11: | Line 11: | ||
return c; | return c; | ||
} | } | ||
</ | </source> | ||
Instruções Postfix: | Instruções Postfix: | ||
<text> | <source lang="text"> | ||
directivas: text data rodata bss align label extrn globl const str char id byte double | directivas: text data rodata bss align label extrn globl const str char id byte double | ||
acesso: addr addra addrv local loca locv load load2 ldchr store store2 stchr | acesso: addr addra addrv local loca locv load load2 ldchr store store2 stchr | ||
| Line 22: | Line 22: | ||
bit a bit: rotl rotr shtl shtru shtrs and or not xor | bit a bit: rotl rotr shtl shtru shtrs and or not xor | ||
funções/saltos: call ret start enter leave trash jmp jz jnz branch leap | funções/saltos: call ret start enter leave trash jmp jz jnz branch leap | ||
</ | </source> | ||
Revision as of 11:58, 12 February 2019
Considere a seguinte função em C:
- Que optimizações independentes da máquina são possíveis?
- Traduza-a para Postfix optimizado.
int *fun(int *a, int *b) {
int *c = (int *)malloc(160 * 4), i, j;
for (j = 0; j < 40; ++j)
for (i = 0; i < 4; ++i)
c[i+j*4] = a[i+j*4] + b[i*40+j] + 100*j;
return c;
}
Instruções Postfix:
directivas: text data rodata bss align label extrn globl const str char id byte double
acesso: addr addra addrv local loca locv load load2 ldchr store store2 stchr
alloc dup swap push pop int sp
aritmética/lógica: add dadd sub dsub mul dmul div ddiv mod neg gt ge lt le eq ne cmp
bit a bit: rotl rotr shtl shtru shtrs and or not xor
funções/saltos: call ret start enter leave trash jmp jz jnz branch leap