// File: /workspace/github_c_makefile_star2_O1/genometools[P]genometools/src/core/bitpackstringsimpleop.h
// Function: gt_bsGetUniformInt8Array
static inline void
gt_bsGetUniformInt8Array(constBitString str, BitOffset offset, unsigned numBits,
                         size_t numValues, int8_t val[])
{
  /* read blocksize many ints at once, for later sign expansion */
  int blockSize = 16 * gt_pagesize() / sizeof (val[0]);
  /* the factor (16) is completely arbitrary and needs some profiling */
  int8_t *blockPtr = val;
  size_t revIndex = numValues;
  BitOffset offsetTemp = offset;
  gt_assert(blockSize >= 0);
  while (revIndex > (size_t) blockSize)
  {
    gt_bsGetUniformUInt8Array(str, offsetTemp, numBits,
                              blockSize, (uint8_t *)blockPtr);
    bsSignExpandArray8(blockPtr, blockSize, numBits);
    blockPtr += blockSize;
    revIndex -= blockSize;
    offsetTemp += blockSize * numBits;
  }
  gt_bsGetUniformUInt8Array(str, offsetTemp, numBits,
                            revIndex, (uint8_t *)blockPtr);
  bsSignExpandArray8(blockPtr, revIndex, numBits);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x28, %rsp
movq %r8, %rbx
movq %rcx, %r14
movl %edx, %r15d
movq %rsi, %r12
movq %rdi, (%rsp)
callq 0xe837d
movq %rax, %rbp
shll $0x4, %ebp
js 0xe69e2
movl %ebp, %r13d
cmpq %r14, %r13
movq %r15, 0x8(%rsp)
jae 0xe698f
leal -0x1(%r15), %ecx
movl $0x1000000, %eax        # imm = 0x1000000
shll %cl, %eax
movq %r15, %rcx
movl %ebp, %r15d
imull %ecx, %r15d
movd %eax, %xmm0
pshufd $0x0, %xmm0, %xmm4      # xmm4 = xmm0[0,0,0,0]
psrad $0x18, %xmm4
movdqa %xmm4, 0x10(%rsp)
movq (%rsp), %rdi
movq %r12, %rsi
movq 0x8(%rsp), %rdx
movq %r13, %rcx
movq %rbx, %r8
callq 0x2fdfa6
movdqa 0x284562(%rip), %xmm5   # 0x36ae60
movdqa 0x10(%rsp), %xmm4
testl %ebp, %ebp
je 0xe697d
xorl %eax, %eax
movdqu (%rbx,%rax), %xmm2
movdqa %xmm2, %xmm1
punpcklbw %xmm1, %xmm1    # xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
movdqa %xmm1, %xmm0
punpcklwd %xmm0, %xmm0    # xmm0 = xmm0[0,0,1,1,2,2,3,3]
punpckhwd %xmm1, %xmm1    # xmm1 = xmm1[4,4,5,5,6,6,7,7]
punpckhbw %xmm2, %xmm2    # xmm2 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
movdqa %xmm2, %xmm3
punpcklwd %xmm3, %xmm3    # xmm3 = xmm3[0,0,1,1,2,2,3,3]
punpckhwd %xmm2, %xmm2    # xmm2 = xmm2[4,4,5,5,6,6,7,7]
pxor %xmm4, %xmm2
pxor %xmm4, %xmm3
pxor %xmm4, %xmm1
pxor %xmm4, %xmm0
psubd %xmm4, %xmm0
psubd %xmm4, %xmm1
psubd %xmm4, %xmm3
psubd %xmm4, %xmm2
pand %xmm5, %xmm2
pand %xmm5, %xmm3
packuswb %xmm2, %xmm3
pand %xmm5, %xmm1
pand %xmm5, %xmm0
packuswb %xmm1, %xmm0
packuswb %xmm3, %xmm0
movdqu %xmm0, (%rbx,%rax)
addq $0x10, %rax
cmpq %rax, %r13
jne 0xe690a
addq %r13, %rbx
subq %r13, %r14
addq %r15, %r12
cmpq %r13, %r14
ja 0xe68df
movq (%rsp), %rdi
movq %r12, %rsi
movq 0x8(%rsp), %r15
movl %r15d, %edx
movq %r14, %rcx
movq %rbx, %r8
callq 0x2fdfa6
testq %r14, %r14
je 0xe69d3
decb %r15b
movl $0x1000000, %eax        # imm = 0x1000000
movl %r15d, %ecx
shll %cl, %eax
sarl $0x18, %eax
xorl %ecx, %ecx
movzbl (%rbx,%rcx), %edx
xorl %eax, %edx
subl %eax, %edx
movb %dl, (%rbx,%rcx)
incq %rcx
cmpq %rcx, %r14
jne 0xe69c0
addq $0x28, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x25dac
nop