/*
 * This code is really good.
 * $ cc -Wall -O2 -g -o icf icf.c
 *
 * GCC 3 - 0 Clang
 */

#define noinline __attribute__((__noinline__))

static noinline unsigned long a(void)
{
	unsigned long ret, addr;

	asm volatile(
	".pushsection .data\n"
	"Lval%=: .quad 0\n"
	".popsection\n"
	"adrp	%[addr], Lval%=\n"
	"add	%[addr], %[addr], :lo12:Lval%=\n"
	"ldr	%[ret], [%[addr]]\n"
	"add	%[ret], %[ret], #1\n"
	"str	%[ret], [%[addr]]"
	: [ret] "=&r" (ret), [addr] "=&r" (addr)
	:
	: "memory");

	return ret;
}

static noinline unsigned long b(void)
{
	unsigned long ret, addr;

	asm volatile(
	".pushsection .data\n"
	"Lval%=: .quad 0\n"
	".popsection\n"
	"adrp	%[addr], Lval%=\n"
	"add	%[addr], %[addr], :lo12:Lval%=\n"
	"ldr	%[ret], [%[addr]]\n"
	"add	%[ret], %[ret], #1\n"
	"str	%[ret], [%[addr]]"
	: [ret] "=&r" (ret), [addr] "=&r" (addr)
	:
	: "memory");

	return ret;
}

int main(void)
{
	return a() ^ b();
}