// File: mh0fm4[P]SCDC/test/units/redirect/redirect_test.c
// Function: do_param_vector
static void do_param_vector(redirect_call_t *rc)
{
  TRACE_F("rc: %p", rc);

  REDIRECT_TEST_TIMING_INIT_();

  /* input */
#if REDIRECT_TEST_PARAM_VECTOR_INPUT
  rdint_t in_n0 = 0, in_inc0 = 0;
  double *in_v0 = NULL;
  redirect_call_get_input_conf_rdint(rc, "in_n0", &in_n0);
  redirect_call_get_input_param_vector_double(rc, "in_v0", &in_v0, &in_n0, &in_inc0);
  printf("in_v0: %p, in_n0: %" rdint_fmt ", in_inc0: %" rdint_fmt "\n", in_v0, in_n0, in_inc0);
  redirect_call_print_param_vector_double(in_v0, in_n0, in_inc0);

  rdint_t in_n1 = 0, in_inc1 = 0;
  double *in_v1 = NULL;
  redirect_call_get_input_conf_rdint(rc, "in_n1", &in_n1);
  redirect_call_get_input_param_vector_double(rc, "in_v1", &in_v1, &in_n1, &in_inc1);
  printf("in_v1: %p, in_n1: %" rdint_fmt ", in_inc1: %" rdint_fmt "\n", in_v1, in_n1, in_inc1);
  redirect_call_print_param_vector_double(in_v1, in_n1, in_inc1);
#endif /* REDIRECT_TEST_PARAM_VECTOR_INPUT */

  /* output */
#if REDIRECT_TEST_PARAM_VECTOR_OUTPUT
  rdint_t out_n0 = 0, out_inc0 = 1;
  double *out_v0 = NULL;
  redirect_call_get_input_conf_rdint(rc, "out_n0", &out_n0);
  redirect_call_get_output_param_vector_double(rc, "out_v0", &out_v0, &out_n0, &out_inc0);
  printf("out_v0: %p, out_n0: %" rdint_fmt ", out_inc0: %" rdint_fmt "\n", out_v0, out_n0, out_inc0);
  vector_init(out_v0, out_n0, out_inc0, -1.0, NAN);
  redirect_call_print_param_vector_double(out_v0, out_n0, out_inc0);
  redirect_call_put_output_param_vector_double(rc, "out_v0", out_v0, out_n0, out_inc0);

  rdint_t out_n1 = 0, out_inc1 = 2;
  double *out_v1 = NULL;
  redirect_call_get_input_conf_rdint(rc, "out_n1", &out_n1);
  redirect_call_get_output_param_vector_double(rc, "out_v1", &out_v1, &out_n1, &out_inc1);
  printf("out_v1: %p, out_n1: %" rdint_fmt ", out_inc1: %" rdint_fmt "\n", out_v1, out_n1, out_inc1);
  vector_init(out_v1, out_n1, out_inc1, -2.0, NAN);
  redirect_call_print_param_vector_double(out_v1, out_n1, out_inc1);
  redirect_call_put_output_param_vector_double(rc, "out_v1", out_v1, out_n1, out_inc1);
#endif /* REDIRECT_TEST_PARAM_VECTOR_OUTPUT */

  /* inout */
#if REDIRECT_TEST_PARAM_VECTOR_INOUT
  rdint_t inout_n0 = 0, inout_inc0 = 0;
  double *inout_v0 = NULL;
  redirect_call_get_input_conf_rdint(rc, "inout_n0", &inout_n0);
  redirect_call_get_inout_param_vector_double(rc, "inout_v0", &inout_v0, &inout_n0, &inout_inc0);
  printf("inout_v0: %p, inout_n0: %" rdint_fmt ", inout_inc0: %" rdint_fmt "\n", inout_v0, inout_n0, inout_inc0);
  redirect_call_print_param_vector_double(inout_v0, inout_n0, inout_inc0);
  vector_init(inout_v0, inout_n0, inout_inc0, -3.0, NAN);
  redirect_call_print_param_vector_double(inout_v0, inout_n0, inout_inc0);
  redirect_call_put_output_param_vector_double(rc, "inout_v0", inout_v0, inout_n0, inout_inc0);

  rdint_t inout_n1 = 0, inout_inc1 = 0;
  double *inout_v1 = NULL;
  redirect_call_get_input_conf_rdint(rc, "inout_n1", &inout_n1);
  redirect_call_get_inout_param_vector_double(rc, "inout_v1", &inout_v1, &inout_n1, &inout_inc1);
  printf("inout_v1: %p, inout_n1: %" rdint_fmt ", inout_inc1: %" rdint_fmt "\n", inout_v1, inout_n1, inout_inc1);
  redirect_call_print_param_vector_double(inout_v1, inout_n1, inout_inc1);
  vector_init(inout_v1, inout_n1, inout_inc1, -4.0, NAN);
  redirect_call_print_param_vector_double(inout_v1, inout_n1, inout_inc1);
  redirect_call_put_output_param_vector_double(rc, "out_v1", inout_v1, inout_n1, inout_inc1);
#endif /* REDIRECT_TEST_PARAM_VECTOR_INOUT */

  redirect_call_set_result_str(rc, "OK");
  TRACE_F("result: '%s'", redirect_call_get_result_str(rc, NULL, 0));

  TRACE_F("return");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x8(%rbp)
movq 0xc419a(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x955b8(%rip), %rsi     # 0xa53d8
leaq 0x95730(%rip), %rdx     # 0xa5557
movb $0x0, %al
callq 0xc9a0
movq 0xc417b(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
movq -0x8(%rbp), %rdx
leaq 0x956a1(%rip), %rsi     # 0xa54e4
movb $0x0, %al
callq 0xc9a0
movq 0xc415f(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x95a4d(%rip), %rsi     # 0xa58a8
movb $0x0, %al
callq 0xc9a0
jmp 0xfe64
jmp 0xfe66
movq $0x0, -0x10(%rbp)
movq $0x0, -0x18(%rbp)
movq $0x0, -0x20(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x952fd(%rip), %rsi     # 0xa5186
leaq -0x10(%rbp), %rdx
callq 0x13080
movq -0x8(%rbp), %rdi
leaq 0x952ef(%rip), %rsi     # 0xa518c
leaq -0x20(%rbp), %rdx
leaq -0x10(%rbp), %rcx
leaq -0x18(%rbp), %r8
callq 0x14f80
movq -0x20(%rbp), %rsi
movq -0x10(%rbp), %rdx
movq -0x18(%rbp), %rcx
leaq 0x9537c(%rip), %rdi     # 0xa523d
movb $0x0, %al
callq 0xcd30
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
callq 0x14f10
movq $0x0, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x952e2(%rip), %rsi     # 0xa51de
leaq -0x28(%rbp), %rdx
callq 0x13080
movq -0x8(%rbp), %rdi
leaq 0x952d4(%rip), %rsi     # 0xa51e4
leaq -0x38(%rbp), %rdx
leaq -0x28(%rbp), %rcx
leaq -0x30(%rbp), %r8
callq 0x14f80
movq -0x38(%rbp), %rsi
movq -0x28(%rbp), %rdx
movq -0x30(%rbp), %rcx
leaq 0x9532e(%rip), %rdi     # 0xa5262
movb $0x0, %al
callq 0xcd30
movq -0x38(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x14f10
movq $0x0, -0x40(%rbp)
movq $0x1, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x95398(%rip), %rsi     # 0xa5307
leaq -0x40(%rbp), %rdx
callq 0x13080
movq -0x8(%rbp), %rdi
leaq 0x9538d(%rip), %rsi     # 0xa5310
leaq -0x50(%rbp), %rdx
leaq -0x40(%rbp), %rcx
leaq -0x48(%rbp), %r8
callq 0x15000
movq -0x50(%rbp), %rsi
movq -0x40(%rbp), %rdx
movq -0x48(%rbp), %rcx
leaq 0x952e0(%rip), %rdi     # 0xa5287
movb $0x0, %al
callq 0xcd30
movq -0x50(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x48(%rbp), %rdx
movsd 0x953ee(%rip), %xmm0    # 0xa53b0
movsd 0x9504e(%rip), %xmm1    # 0xa5018
callq 0xedd0
movq -0x50(%rbp), %rdi
movq -0x40(%rbp), %rsi
movq -0x48(%rbp), %rdx
callq 0x14f10
movq -0x8(%rbp), %rdi
movq -0x50(%rbp), %rdx
movq -0x40(%rbp), %rcx
movq -0x48(%rbp), %r8
leaq 0x95319(%rip), %rsi     # 0xa5310
callq 0x14fc0
movq $0x0, -0x58(%rbp)
movq $0x2, -0x60(%rbp)
movq $0x0, -0x68(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x95328(%rip), %rsi     # 0xa5347
leaq -0x58(%rbp), %rdx
callq 0x13080
movq -0x8(%rbp), %rdi
leaq 0x9531d(%rip), %rsi     # 0xa5350
leaq -0x68(%rbp), %rdx
leaq -0x58(%rbp), %rcx
leaq -0x60(%rbp), %r8
callq 0x15000
movq -0x68(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq -0x60(%rbp), %rcx
leaq 0x95258(%rip), %rdi     # 0xa52af
movb $0x0, %al
callq 0xcd30
movq -0x68(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq -0x60(%rbp), %rdx
movsd 0x95356(%rip), %xmm0    # 0xa53c8
movsd 0x94f9e(%rip), %xmm1    # 0xa5018
callq 0xedd0
movq -0x68(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq -0x60(%rbp), %rdx
callq 0x14f10
movq -0x8(%rbp), %rdi
movq -0x68(%rbp), %rdx
movq -0x58(%rbp), %rcx
movq -0x60(%rbp), %r8
leaq 0x952a9(%rip), %rsi     # 0xa5350
callq 0x14fc0
movq $0x0, -0x70(%rbp)
movq $0x0, -0x78(%rbp)
movq $0x0, -0x80(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x95236(%rip), %rsi     # 0xa5305
leaq -0x70(%rbp), %rdx
callq 0x13080
movq -0x8(%rbp), %rdi
leaq 0x9522b(%rip), %rsi     # 0xa530e
leaq -0x80(%rbp), %rdx
leaq -0x70(%rbp), %rcx
leaq -0x78(%rbp), %r8
callq 0x15080
movq -0x80(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x78(%rbp), %rcx
leaq 0x951d0(%rip), %rdi     # 0xa52d7
movb $0x0, %al
callq 0xcd30
movq -0x80(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0x78(%rbp), %rdx
callq 0x14f10
movq -0x80(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0x78(%rbp), %rdx
movsd 0x9528d(%rip), %xmm0    # 0xa53c0
movsd 0x94edd(%rip), %xmm1    # 0xa5018
callq 0xedd0
movq -0x80(%rbp), %rdi
movq -0x70(%rbp), %rsi
movq -0x78(%rbp), %rdx
callq 0x14f10
movq -0x8(%rbp), %rdi
movq -0x80(%rbp), %rdx
movq -0x70(%rbp), %rcx
movq -0x78(%rbp), %r8
leaq 0x951a6(%rip), %rsi     # 0xa530e
callq 0x14fc0
movq $0x0, -0x88(%rbp)
movq $0x0, -0x90(%rbp)
movq $0x0, -0x98(%rbp)
movq -0x8(%rbp), %rdi
leaq 0x951ac(%rip), %rsi     # 0xa5345
leaq -0x88(%rbp), %rdx
callq 0x13080
movq -0x8(%rbp), %rdi
leaq 0x9519e(%rip), %rsi     # 0xa534e
leaq -0x98(%rbp), %rdx
leaq -0x88(%rbp), %rcx
leaq -0x90(%rbp), %r8
callq 0x15080
movq -0x98(%rbp), %rsi
movq -0x88(%rbp), %rdx
movq -0x90(%rbp), %rcx
leaq 0x95131(%rip), %rdi     # 0xa5317
movb $0x0, %al
callq 0xcd30
movq -0x98(%rbp), %rdi
movq -0x88(%rbp), %rsi
movq -0x90(%rbp), %rdx
callq 0x14f10
movq -0x98(%rbp), %rdi
movq -0x88(%rbp), %rsi
movq -0x90(%rbp), %rdx
movsd 0x95194(%rip), %xmm0    # 0xa53b8
movsd 0x94dec(%rip), %xmm1    # 0xa5018
callq 0xedd0
movq -0x98(%rbp), %rdi
movq -0x88(%rbp), %rsi
movq -0x90(%rbp), %rdx
callq 0x14f10
movq -0x8(%rbp), %rdi
movq -0x98(%rbp), %rdx
movq -0x88(%rbp), %rcx
movq -0x90(%rbp), %r8
leaq 0x950e5(%rip), %rsi     # 0xa5350
callq 0x14fc0
movq -0x8(%rbp), %rdi
leaq 0x952c1(%rip), %rsi     # 0xa553c
callq 0x136d0
movq 0xc3d29(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x95147(%rip), %rsi     # 0xa53d8
leaq 0x952bf(%rip), %rdx     # 0xa5557
movb $0x0, %al
callq 0xc9a0
movq 0xc3d0a(%rip), %rax     # 0xd3fb0
movq (%rax), %rax
movq %rax, -0xa0(%rbp)
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %edx
movq %rdx, %rsi
callq 0x13700
movq -0xa0(%rbp), %rdi
movq %rax, %rdx
leaq 0x95488(%rip), %rsi     # 0xa5759
movb $0x0, %al
callq 0xc9a0
movq 0xc3cd1(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x955bf(%rip), %rsi     # 0xa58a8
movb $0x0, %al
callq 0xc9a0
jmp 0x102f2
movq 0xc3cb7(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x950d5(%rip), %rsi     # 0xa53d8
leaq 0x9524d(%rip), %rdx     # 0xa5557
movb $0x0, %al
callq 0xc9a0
movq 0xc3c98(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x95114(%rip), %rsi     # 0xa5436
movb $0x0, %al
callq 0xc9a0
movq 0xc3c80(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x9556e(%rip), %rsi     # 0xa58a8
movb $0x0, %al
callq 0xc9a0
addq $0xa0, %rsp
popq %rbp
retq
nopw (%rax,%rax)