// File: /workspace/github_c_makefile_star2_O3/genometools[P]genometools/src/external/sqlite-3.33.0/sqlite3.c
// Function: sqlite3ExprCodeExprList
SQLITE_PRIVATE int sqlite3ExprCodeExprList(
  Parse *pParse,     /* Parsing context */
  ExprList *pList,   /* The expression list to be coded */
  int target,        /* Where to write results */
  int srcReg,        /* Source registers if SQLITE_ECEL_REF */
  u8 flags           /* SQLITE_ECEL_* flags */
){
  struct ExprList_item *pItem;
  int i, j, n;
  u8 copyOp = (flags & SQLITE_ECEL_DUP) ? OP_Copy : OP_SCopy;
  Vdbe *v = pParse->pVdbe;
  assert( pList!=0 );
  assert( target>0 );
  assert( pParse->pVdbe!=0 );  /* Never gets this far otherwise */
  n = pList->nExpr;
  if( !ConstFactorOk(pParse) ) flags &= ~SQLITE_ECEL_FACTOR;
  for(pItem=pList->a, i=0; i<n; i++, pItem++){
    Expr *pExpr = pItem->pExpr;
#ifdef SQLITE_ENABLE_SORTER_REFERENCES
    if( pItem->bSorterRef ){
      i--;
      n--;
    }else
#endif
    if( (flags & SQLITE_ECEL_REF)!=0 && (j = pItem->u.x.iOrderByCol)>0 ){
      if( flags & SQLITE_ECEL_OMITREF ){
        i--;
        n--;
      }else{
        sqlite3VdbeAddOp2(v, copyOp, j+srcReg-1, target+i);
      }
    }else if( (flags & SQLITE_ECEL_FACTOR)!=0
           && sqlite3ExprIsConstantNotJoin(pExpr)
    ){
      sqlite3ExprCodeRunJustOnce(pParse, pExpr, target+i);
    }else{
      int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
      if( inReg!=target+i ){
        VdbeOp *pOp;
        if( copyOp==OP_Copy
         && (pOp=sqlite3VdbeGetOp(v, -1))->opcode==OP_Copy
         && pOp->p1+pOp->p3+1==inReg
         && pOp->p2+pOp->p3+1==target+i
         && pOp->p5==0  /* The do-not-merge flag must be clear */
        ){
          pOp->p3++;
        }else{
          sqlite3VdbeAddOp2(v, copyOp, inReg, target+i);
        }
      }
    }
  }
  return n;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movl %r8d, 0x10(%rsp)
movl %ecx, 0xc(%rsp)
movq %rdi, 0x20(%rsp)
movl (%rsi), %r13d
testl %r13d, %r13d
jle 0x2bed21
movl %edx, %ebx
movq %rsi, %r15
movq 0x20(%rsp), %rsi
movq 0x10(%rsi), %rax
movq %rax, 0x18(%rsp)
movl 0x10(%rsp), %edx
movl %edx, %eax
andb $0x1, %al
movl %edx, %ecx
andb $-0x3, %cl
cmpb $0x0, 0x23(%rsi)
movzbl %dl, %edx
movzbl %cl, %r12d
cmovnel %edx, %r12d
movzbl %al, %eax
movl $0x4e, %ecx
subl %eax, %ecx
movl %ecx, 0x14(%rsp)
decl 0xc(%rsp)
addq $0x1c, %r15
xorl %r14d, %r14d
movq -0x14(%r15), %rbp
testb $0x4, %r12b
je 0x2bec03
movzwl (%r15), %edx
testl %edx, %edx
je 0x2bec03
testb $0x8, %r12b
jne 0x2bed04
addl 0xc(%rsp), %edx
leal (%r14,%rbx), %ecx
movq 0x18(%rsp), %rdi
movl 0x14(%rsp), %esi
xorl %r8d, %r8d
callq 0x2a83e1
jmp 0x2bed0a
testb $0x2, %r12b
jne 0x2becac
movl %r13d, 0x8(%rsp)
movq %rbx, %r13
addl %r14d, %ebx
movq 0x20(%rsp), %rdi
movq %rbp, %rsi
movl %ebx, %edx
callq 0x2bcc6c
cmpl %ebx, %eax
je 0x2beca2
testb $0x1, 0x10(%rsp)
je 0x2bec8d
movq 0x18(%rsp), %rcx
movq (%rcx), %rcx
cmpb $0x0, 0x61(%rcx)
leaq 0x200243(%rip), %rcx    # 0x4bee88
jne 0x2bec66
movq 0x18(%rsp), %rdx
movslq 0x90(%rdx), %rcx
movq 0x88(%rdx), %rdx
leaq (%rcx,%rcx,2), %rcx
leaq (%rdx,%rcx,8), %rcx
addq $-0x18, %rcx
cmpb $0x4d, (%rcx)
jne 0x2bec8d
movl 0xc(%rcx), %edx
incl %edx
movl 0x4(%rcx), %esi
addl %edx, %esi
cmpl %eax, %esi
jne 0x2bec8d
movl 0x8(%rcx), %esi
addl %edx, %esi
cmpl %ebx, %esi
jne 0x2bec8d
cmpw $0x0, 0x2(%rcx)
je 0x2bed1c
movq 0x18(%rsp), %rdi
movl 0x14(%rsp), %esi
movl %eax, %edx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x2a83e1
movq %r13, %rbx
movl 0x8(%rsp), %r13d
jmp 0x2bed0a
movw $0x2, 0x4c(%rsp)
leaq 0x1ccd(%rip), %rax      # 0x2c0987
movq %rax, 0x30(%rsp)
leaq 0x1dba(%rip), %rax      # 0x2c0a80
movq %rax, 0x38(%rsp)
movl $0x0, 0x50(%rsp)
testq %rbp, %rbp
je 0x2becf1
leaq 0x28(%rsp), %rdi
movq %rbp, %rsi
callq 0x2c0a8c
cmpw $0x0, 0x4c(%rsp)
je 0x2bec0d
leal (%r14,%rbx), %edx
movq 0x20(%rsp), %rdi
movq %rbp, %rsi
callq 0x2be7a4
jmp 0x2bed0a
decl %r14d
decl %r13d
incl %r14d
addq $0x18, %r15
cmpl %r13d, %r14d
jl 0x2bebc9
jmp 0x2bed21
movl %edx, 0xc(%rcx)
jmp 0x2beca2
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq