3.66 Multiple Dimension Array III
★
long sum_col(long n, long A[NR(n)][NC(n)], long j) {
long i;
long result = 0;
for (i = 0; i < NR[n]; i++) {
result += A[i][j];
}
return result;
}; n in %rdi, A in %rsi, j in %rdx
sum_col:
leaq 1(,%rdi,4), %r8 ; Compute 4n+1 to %r8
leaq (%rdi,%rdi,2), %rax ; Compute 3n to %rax
movq %rax, %rdi ; Move %rax to %rdi
testq %rax, %rax ; test %rax
jle .L4
salq $3, %r8 ; Compute 8*(4n+1) to %r8
leaq (%rsi,%rdx,8), %rcx ; Compute A+8*j to %rcx
movl $0, %eax
movl $0, %edx
.L3:
addq (%rcx), %rax ; Retrive A[0][j] to %rax
addq $1, %rdx ; Add 1 to %rdx
addq %r8, %rcx ; Add 8*(4*n+1) to %rcx, so NC(n)=4*n+1
cmpq %rdi, %rdx ; Compare i:3n, so NR(n)=3*n
jne .L3
rep; ret
.L4:
movl $0, %eax
retLast updated