// File: /workspace/github_c_makefile_star2_O1/google[P]multichase/multichase.c
// Function: chase_work
static void chase_work(per_thread_t *t) {
  void *p = t->x.cycle[0];
  size_t extra_work = strtoul(t->x.extra_args, 0, 0);
  size_t work = 0;
  size_t i;

  // the extra work is intended to be overlapped with a dereference,
  // but we don't want it to skip past the next dereference.  so
  // we fold in the value of the pointer, and launch the deref then
  // go into a loop performing extra work, hopefully while the
  // deref occurs.
  do {
    x25(work += (uintptr_t)p; p = *(void **)p;
        for (i = 0; i < extra_work; ++i) { work ^= i; })
  } while (__sync_add_and_fetch(&t->x.count, 25));

  // we never actually reach here, but the compiler doesn't know that
  t->x.cycle[0] = p;
  t->x.dummy = work;
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x8(%rdi), %r15
movq 0x58(%rdi), %rdi
xorl %r14d, %r14d
xorl %esi, %esi
xorl %edx, %edx
callq 0x412a60
addq %r15, %r14
testq %rax, %rax
je 0x4034ec
xorl %ecx, %ecx
xorq %rcx, %r14
incq %rcx
cmpq %rcx, %rax
jne 0x4034e1
movq (%r15), %rcx
addq %rcx, %r14
testq %rax, %rax
je 0x403504
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4034f9
movq (%rcx), %rcx
addq %rcx, %r14
testq %rax, %rax
je 0x40351c
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403511
movq (%rcx), %rcx
addq %rcx, %r14
testq %rax, %rax
je 0x403534
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403529
movq (%rcx), %rcx
addq %rcx, %r14
testq %rax, %rax
je 0x40354c
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403541
movq (%rcx), %rcx
addq %rcx, %r14
testq %rax, %rax
je 0x403564
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403559
movq (%rcx), %rcx
addq %rcx, %r14
testq %rax, %rax
je 0x40357c
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403571
movq (%rcx), %rcx
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x403597
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x40358c
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4035af
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4035a4
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4035c7
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4035bc
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4035df
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4035d4
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4035f7
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4035ec
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x40360f
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403604
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x403627
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x40361c
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x40363f
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403634
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x403657
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x40364c
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x40366f
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403664
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x403687
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x40367c
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x40369f
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x403694
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4036b7
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4036ac
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4036cf
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4036c4
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4036e7
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4036dc
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x4036ff
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x4036f4
addq %rcx, %r14
movq (%rcx), %rcx
testq %rax, %rax
je 0x403717
xorl %edx, %edx
xorq %rdx, %r14
incq %rdx
cmpq %rdx, %rax
jne 0x40370c
addq %rcx, %r14
movq (%rcx), %r15
testq %rax, %rax
je 0x40372f
xorl %ecx, %ecx
xorq %rcx, %r14
incq %rcx
cmpq %rcx, %rax
jne 0x403724
lock
subl $-0x19, 0x4(%rbx)
jne 0x4034d7
movq %r15, 0x8(%rbx)
movl %r14d, 0x60(%rbx)
popq %rbx
popq %r14
popq %r15
retq