// File: /workspace/github_c_makefile_star2_O1/nemequ[P]safe-math/munit/munit.c
// Function: munit_test_runner_exec
static MunitResult
munit_test_runner_exec(MunitTestRunner* runner, const MunitTest* test, const MunitParameter params[], MunitReport* report) {
  unsigned int iterations = runner->iterations;
  MunitResult result = MUNIT_FAIL;
#if defined(MUNIT_ENABLE_TIMING)
  MunitWallClock wall_clock_begin, wall_clock_end;
  MunitCpuClock cpu_clock_begin, cpu_clock_end;
#endif
  unsigned int i = 0;

  if ((test->options & MUNIT_TEST_OPTION_SINGLE_ITERATION) == MUNIT_TEST_OPTION_SINGLE_ITERATION)
    iterations = 1;
  else if (iterations == 0)
    iterations = runner->suite->iterations;

  munit_rand_seed(runner->seed);

  do {
    void* data = (test->setup == NULL) ? runner->user_data : test->setup(params, runner->user_data);

#if defined(MUNIT_ENABLE_TIMING)
    munit_wall_clock_get_time(&wall_clock_begin);
    munit_cpu_clock_get_time(&cpu_clock_begin);
#endif

    result = test->test(params, data);

#if defined(MUNIT_ENABLE_TIMING)
    munit_wall_clock_get_time(&wall_clock_end);
    munit_cpu_clock_get_time(&cpu_clock_end);
#endif

    if (test->tear_down != NULL)
      test->tear_down(data);

    if (MUNIT_LIKELY(result == MUNIT_OK)) {
      report->successful++;
#if defined(MUNIT_ENABLE_TIMING)
      report->wall_clock += munit_wall_clock_get_elapsed(&wall_clock_begin, &wall_clock_end);
      report->cpu_clock += munit_cpu_clock_get_elapsed(&cpu_clock_begin, &cpu_clock_end);
#endif
    } else {
      switch (result) {
        case MUNIT_SKIP:
          report->skipped++;
          break;
        case MUNIT_FAIL:
          report->failed++;
          break;
        case MUNIT_ERROR:
          report->errored++;
          break;
        case MUNIT_OK:
        default:
          break;
      }
      break;
    }
  } while (++i < iterations);

  return result;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rcx, %rbx
movq %rdx, %r14
movq %rsi, %r15
movl $0x1, %r12d
testb $0x1, 0x20(%rsi)
movl $0x1, 0xc(%rsp)
jne 0x56e3
movl 0x1c(%rdi), %eax
movl %eax, 0xc(%rsp)
testl %eax, %eax
jne 0x56e3
movq 0x8(%rdi), %rax
movl 0x18(%rax), %eax
movl %eax, 0xc(%rsp)
imull $0x2c9277b5, 0x18(%rdi), %eax # imm = 0x2C9277B5
addl $0x93a8436, %eax        # imm = 0x93A8436
xchgl %eax, 0x5ffb(%rip)      # 0xb6f0
movq %rdi, 0x10(%rsp)
movq 0x10(%r15), %rax
testq %rax, %rax
je 0x5711
movq 0x30(%rdi), %rsi
movq %r14, %rdi
callq *%rax
movq %rax, %rbp
jmp 0x5715
movq 0x30(%rdi), %rbp
leaq 0x48(%rsp), %rdi
callq 0x587e
leaq 0x28(%rsp), %rdi
callq 0x5897
movq %r14, %rdi
movq %rbp, %rsi
callq *0x8(%r15)
movl %eax, %r13d
leaq 0x38(%rsp), %rdi
callq 0x587e
leaq 0x18(%rsp), %rdi
callq 0x5897
movq 0x18(%r15), %rax
testq %rax, %rax
je 0x5758
movq %rbp, %rdi
callq *%rax
testl %r13d, %r13d
jne 0x57f7
incl (%rbx)
movq 0x38(%rsp), %rax
movq 0x40(%rsp), %rcx
subq 0x48(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
subq 0x50(%rsp), %rcx
xorps %xmm1, %xmm1
cvtsi2sd %rcx, %xmm1
movsd 0xf51(%rip), %xmm2      # 0x66e0
divsd %xmm2, %xmm1
addsd %xmm0, %xmm1
addsd 0x18(%rbx), %xmm1
movsd %xmm1, 0x18(%rbx)
movq 0x18(%rsp), %rax
movq 0x20(%rsp), %rcx
subq 0x28(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
subq 0x30(%rsp), %rcx
xorps %xmm1, %xmm1
cvtsi2sd %rcx, %xmm1
divsd %xmm2, %xmm1
addsd %xmm0, %xmm1
addsd 0x10(%rbx), %xmm1
movsd %xmm1, 0x10(%rbx)
movb $0x1, %al
movq 0x10(%rsp), %rdi
testb %al, %al
je 0x581f
leal 0x1(%r12), %eax
cmpl 0xc(%rsp), %r12d
movl %eax, %r12d
jb 0x56fa
jmp 0x581f
cmpl $0x1, %r13d
movq 0x10(%rsp), %rdi
je 0x5818
cmpl $0x2, %r13d
je 0x5813
cmpl $0x3, %r13d
jne 0x581b
incl 0xc(%rbx)
jmp 0x581b
incl 0x4(%rbx)
jmp 0x581b
incl 0x8(%rbx)
xorl %eax, %eax
jmp 0x57de
movl %r13d, %eax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq