// File: /workspace/github_c_makefile_star2_O3/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 $0x48, %rsp
movq %rcx, %rbx
movq %rdx, (%rsp)
movq %rsi, %r15
movl $0x1, %r12d
testb $0x1, 0x20(%rsi)
jne 0x5538
movl 0x1c(%rdi), %r12d
testl %r12d, %r12d
jne 0x5538
movq 0x8(%rdi), %rax
movl 0x18(%rax), %r12d
imull $0x2c9277b5, 0x18(%rdi), %eax # imm = 0x2C9277B5
addl $0x93a8436, %eax        # imm = 0x93A8436
xchgl %eax, 0x61a6(%rip)      # 0xb6f0
cmpl $0x1, %r12d
adcl $0x0, %r12d
movq 0x10(%r15), %rax
movq %rdi, %r14
movq 0x30(%rdi), %rbp
testq %rax, %rax
je 0x5573
movq (%rsp), %r13
movq %r13, %rdi
movq %rbp, %rsi
callq *%rax
movq %rax, %rbp
jmp 0x5577
movq (%rsp), %r13
leaq 0x38(%rsp), %rdi
callq 0x56c5
leaq 0x18(%rsp), %rdi
callq 0x56de
movq %r13, %rdi
movq %rbp, %rsi
callq *0x8(%r15)
movl %eax, %r13d
leaq 0x28(%rsp), %rdi
callq 0x56c5
leaq 0x8(%rsp), %rdi
callq 0x56de
movq 0x18(%r15), %rax
testq %rax, %rax
je 0x55ba
movq %rbp, %rdi
callq *%rax
testl %r13d, %r13d
jne 0x5657
incl (%rbx)
movq 0x28(%rsp), %rax
movq 0x30(%rsp), %rcx
subq 0x38(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
subq 0x40(%rsp), %rcx
xorps %xmm1, %xmm1
cvtsi2sd %rcx, %xmm1
movsd 0x10ef(%rip), %xmm2     # 0x66e0
divsd %xmm2, %xmm1
addsd %xmm0, %xmm1
addsd 0x18(%rbx), %xmm1
movsd %xmm1, 0x18(%rbx)
movq 0x8(%rsp), %rax
movq 0x10(%rsp), %rcx
subq 0x18(%rsp), %rax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
subq 0x20(%rsp), %rcx
xorps %xmm1, %xmm1
cvtsi2sd %rcx, %xmm1
divsd %xmm2, %xmm1
addsd %xmm0, %xmm1
addsd 0x10(%rbx), %xmm1
movsd %xmm1, 0x10(%rbx)
decl %r12d
movq %r14, %rdi
jne 0x5552
movl %r13d, %eax
addq $0x48, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
cmpl $0x1, %r13d
je 0x5673
cmpl $0x3, %r13d
je 0x566e
cmpl $0x2, %r13d
jne 0x5645
incl 0x4(%rbx)
jmp 0x5645
incl 0xc(%rbx)
jmp 0x5645
incl 0x8(%rbx)
jmp 0x5645