previous | start | next

Code Example: Initialize a One Dimensional Array

void init(int n, int a[n])
{
  int i;
  for(i = 0; i < n; i++) {
    a[i] = 5;
  }
}

Not optimized code generated. (doesn't use scaled index for the array element):

init:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $16, %esp
        movl    $0, -4(%ebp)    ; i: -4(%ebp), i = 0
        jmp     .L2             ; goto L2
.L3:
        movl    -4(%ebp), %eax  ; %eax:  i
        sall    $2, %eax        ; %eax:  i << 2 = 4 * i
        addl    12(%ebp), %eax  ; %eax:  4 * i + address(a[0])
        movl    $5, (%eax)      ; a[i] = 5
        addl    $1, -4(%ebp)    ; i++
.L2:
        movl    -4(%ebp), %eax  ;
        cmpl    8(%ebp), %eax   ; if i < n goto L3
        jl      .L3
        leave
        ret


previous | start | next