int fred() {
    int src;
    int dst;

    asm volatile ( "mov %1, %0\n\t"
		   "add $1, %0" : : : );

    asm volatile ( "mov %1, %0\n\t"
		   "add $1, %0"
		   : "=" "r" (dst));

    asm volatile ( "mov %1, %0\n\t"
		   "add $1, %0"
		   : "=r" (dst)
		   : "r" (src));

    asm ( "mov %1, %0\n\t"
	  "add $1, %0"
	  : "=r" (dst), "=r" (src)
	  : [src] "r" (dst)
	  : "r0");

  L1: L2:
    asm goto ( "frob %%r5, %1; jc %l[L1]; mov (%2), %%r5"
	       : /* No outputs. */
	       : "r"(src), "r"(&dst)
	       : "r5", "memory"
	       : L1, L2 );
}
