// File: mh0fm4[P]SCDC/src/lib/redirect/redirect/redirect_call.cc
// Function: void redirect_call_get_input_param_dense_val<char>(_redirect_call_t*, char const*, char**, long)
static void redirect_call_get_input_param_dense_val(redirect_call_t *rc, const char *id, T **b, rdint_t n)
{
  TRACE_F("rc: %p, id: '%s', b: %p, n: %" rdint_fmt, rc, id, *b, n);

  /* server only */
  ASSERT(!rc->client);

#if REDIRECT_CALL_PARAMS_CACHE
  if (rc->cache)
  {
    rdint_t entry_index = redirect_cache_get_next_param_entry_index(rc->cache);

    if (entry_index >= 0)
    {
      TRACE_F("using cache entry %" rdint_fmt, entry_index);
      if (*b)
      {
        /* copy cache entry to buffer */
        memcpy(*b, redirect_cache_get_entry_buf(rc->cache, entry_index), n * sizeof(T));

      } else
      {
        /* reuse buffer of cache entry */
        *b = static_cast<T *>(redirect_cache_get_entry_buf(rc->cache, entry_index));
      }

      return;
    }
  }
#endif

  if (*b == NULL)
  {
    /* allocate buffer */
    *b = static_cast<T *>(redirect_call_alloc_buf(rc, n * sizeof(T)));
  }

  /* copy data from input to buffer */
  consume_input_dense<T>(rc, *b, n);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq 0xc0691(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x91ee8(%rip), %rsi     # 0xa5811
leaq 0x92153(%rip), %rdx     # 0xa5a83
movb $0x0, %al
callq 0xc9a0
movq 0xc0672(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
movq -0x8(%rbp), %rdx
movq -0x10(%rbp), %rcx
movq -0x18(%rbp), %rax
movq (%rax), %r8
movq -0x20(%rbp), %r9
leaq 0x920a8(%rip), %rsi     # 0xa5a03
movb $0x0, %al
callq 0xc9a0
movq 0xc0647(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x91f35(%rip), %rsi     # 0xa58a8
movb $0x0, %al
callq 0xc9a0
jmp 0x1397c
movq -0x8(%rbp), %rax
cmpl $0x0, (%rax)
je 0x1399d
movq 0xc064c(%rip), %rax     # 0xd3fd8
movq (%rax), %rdi
leaq 0x92115(%rip), %rsi     # 0xa5aab
movb $0x0, %al
callq 0xc9a0
jmp 0x1399f
movq -0x8(%rbp), %rax
cmpq $0x0, 0xba8(%rax)
je 0x13a86
movq -0x8(%rbp), %rax
movq 0xba8(%rax), %rdi
callq 0x11880
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jl 0x13a84
jmp 0x139d2
movq 0xc05d7(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x91e2e(%rip), %rsi     # 0xa5811
leaq 0x92099(%rip), %rdx     # 0xa5a83
movb $0x0, %al
callq 0xc9a0
movq 0xc05b8(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
movq -0x28(%rbp), %rdx
leaq 0x920c4(%rip), %rsi     # 0xa5aca
movb $0x0, %al
callq 0xc9a0
movq 0xc059c(%rip), %rax     # 0xd3fb0
movq (%rax), %rdi
leaq 0x91e8a(%rip), %rsi     # 0xa58a8
movb $0x0, %al
callq 0xc9a0
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0x13a64
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq 0xba8(%rax), %rdi
movq -0x28(%rbp), %rsi
callq 0x117e0
movq -0x30(%rbp), %rdi
movq %rax, %rsi
movq -0x20(%rbp), %rdx
shlq $0x0, %rdx
callq 0xc530
jmp 0x13a82
movq -0x8(%rbp), %rax
movq 0xba8(%rax), %rdi
movq -0x28(%rbp), %rsi
callq 0x117e0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
jmp 0x13abf
jmp 0x13a86
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x13aab
movq -0x8(%rbp), %rdi
movq -0x20(%rbp), %rsi
shlq $0x0, %rsi
callq 0x172d0
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x20(%rbp), %rdx
callq 0x17350
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)