Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- __builtin_prefetch(const void*)
- void foo(double *d, unsigned len) {
- for (unsigned i = 0; i < len; ++i) {
- __builtin_prefetch(&d[i]);
- d[i] = d[i] * d[i];
- }
- }
- void foo(double *d, unsigned len) {
- for (unsigned i = 0; i < len; ++i) {
- asm("prefetcht0 (%0)"
- : /**/
- : "g"(&d[i])
- : /**/
- );
- d[i] = d[i] * d[i];
- }
- }
- .file "test1.c" | .file "test2.c"
- .text .text
- .p2align 4,,15 .p2align 4,,15
- .globl foo .globl foo
- .type foo, @function .type foo, @function
- foo: foo:
- .LFB0: .LFB0:
- .cfi_startproc .cfi_startproc
- testl %esi, %esi # len testl %esi, %esi # len
- je .L1 #, je .L1 #,
- leal -1(%rsi), %eax #, D.1749 | leal -1(%rsi), %eax #, D.1745
- leaq 8(%rdi,%rax,8), %rax #, D.1749 | leaq 8(%rdi,%rax,8), %rax #, D.1745
- .p2align 4,,10 .p2align 4,,10
- .p2align 3 .p2align 3
- .L4: .L4:
- movsd (%rdi), %xmm0 # MEM[base: _8, offset: 0B], D. | #APP
- prefetcht0 (%rdi) # ivtmp.6 | # 3 "test2.c" 1
- > prefetcht0 (%rdi) # ivtmp.6
- > # 0 "" 2
- > #NO_APP
- > movsd (%rdi), %xmm0 # MEM[base: _8, offset: 0B], D.
- addq $8, %rdi #, ivtmp.6 addq $8, %rdi #, ivtmp.6
- mulsd %xmm0, %xmm0 # D.1748, D.1748 | mulsd %xmm0, %xmm0 # D.1747, D.1747
- movsd %xmm0, -8(%rdi) # D.1748, MEM[base: _8, offset: | movsd %xmm0, -8(%rdi) # D.1747, MEM[base: _8, offset:
- cmpq %rax, %rdi # D.1749, ivtmp.6 | cmpq %rax, %rdi # D.1745, ivtmp.6
- jne .L4 #, jne .L4 #,
- .L1: .L1:
- rep ret rep ret
- .cfi_endproc .cfi_endproc
- .LFE0: .LFE0:
- .size foo, .-foo .size foo, .-foo
- .ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4" .ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4"
- .section .note.GNU-stack,"",@progbits .section .note.GNU-stack,"",@progbits
- asm volatile (
- "prefetcht0 (%rax) ;"
Add Comment
Please, Sign In to add comment