Request for discussion: Rewrite of inline assembler docs

Andrew Haley aph@redhat.com
Fri Mar 28 09:10:00 GMT 2014


On 03/28/2014 06:20 AM, dw wrote:
> Using this clobber causes the compiler to flush all (modified) registers 
> being used to store memory-based values to memory before executing the 
> @code{asm} statement.

I don't know what a "memory-based" value is.  This phrase doesn't help
at all.  In addition, it isn't true.  Modified registers are not
flushed to memory unless they are clobbered or their address is taken.
This sentence should be deleted.

Andrew.

int sum(int a[], int l) {
  int i;
  int sum = 0;
  for (i = 0; i < l; i++) {
    asm volatile("nop # Nothing at all":::"memory");
    sum += a[i];
  }
  return sum;
}


at -O2:


sum:
.LFB0:
	.cfi_startproc
	xorl	%eax, %eax
	testl	%esi, %esi
	jle	.L3
	subl	$1, %esi
	xorl	%edx, %edx
	leaq	4(,%rsi,4), %rcx
	.p2align 4,,10
	.p2align 3
.L4:
#APP
# 5 "z.c" 1
	nop # Nothing at all
# 0 "" 2
#NO_APP
	addl	(%rdi,%rdx), %eax
	addq	$4, %rdx
	cmpq	%rcx, %rdx
	jne	.L4
.L3:
	rep
	ret



More information about the Gcc mailing list