// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/external/sqlite-3.33.0/sqlite3.c
// Function: whereCombineDisjuncts
static void whereCombineDisjuncts(
  SrcList *pSrc,         /* the FROM clause */
  WhereClause *pWC,      /* The complete WHERE clause */
  WhereTerm *pOne,       /* First disjunct */
  WhereTerm *pTwo        /* Second disjunct */
){
  u16 eOp = pOne->eOperator | pTwo->eOperator;
  sqlite3 *db;           /* Database connection (for malloc) */
  Expr *pNew;            /* New virtual expression */
  int op;                /* Operator for the combined expression */
  int idxNew;            /* Index in pWC of the next virtual term */

  if( (pOne->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return;
  if( (pTwo->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE))==0 ) return;
  if( (eOp & (WO_EQ|WO_LT|WO_LE))!=eOp
   && (eOp & (WO_EQ|WO_GT|WO_GE))!=eOp ) return;
  assert( pOne->pExpr->pLeft!=0 && pOne->pExpr->pRight!=0 );
  assert( pTwo->pExpr->pLeft!=0 && pTwo->pExpr->pRight!=0 );
  if( sqlite3ExprCompare(0,pOne->pExpr->pLeft, pTwo->pExpr->pLeft, -1) ) return;
  if( sqlite3ExprCompare(0,pOne->pExpr->pRight, pTwo->pExpr->pRight,-1) )return;
  /* If we reach this point, it means the two subterms can be combined */
  if( (eOp & (eOp-1))!=0 ){
    if( eOp & (WO_LT|WO_LE) ){
      eOp = WO_LE;
    }else{
      assert( eOp & (WO_GT|WO_GE) );
      eOp = WO_GE;
    }
  }
  db = pWC->pWInfo->pParse->db;
  pNew = sqlite3ExprDup(db, pOne->pExpr, 0);
  if( pNew==0 ) return;
  for(op=TK_EQ; eOp!=(WO_EQ<<(op-TK_EQ)); op++){ assert( op<TK_GE ); }
  pNew->op = op;
  idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
  exprAnalyze(pSrc, pWC, idxNew);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x18(%rbp), %rax
movzwl 0x14(%rax), %eax
movq -0x20(%rbp), %rcx
movzwl 0x14(%rcx), %ecx
orl %ecx, %eax
movw %ax, -0x22(%rbp)
movq -0x18(%rbp), %rax
movzwl 0x14(%rax), %eax
andl $0x3e, %eax
cmpl $0x0, %eax
jne 0x450223
jmp 0x450370
movq -0x20(%rbp), %rax
movzwl 0x14(%rax), %eax
andl $0x3e, %eax
cmpl $0x0, %eax
jne 0x450238
jmp 0x450370
movzwl -0x22(%rbp), %eax
andl $0x1a, %eax
movzwl -0x22(%rbp), %ecx
cmpl %ecx, %eax
je 0x45025b
movzwl -0x22(%rbp), %eax
andl $0x26, %eax
movzwl -0x22(%rbp), %ecx
cmpl %ecx, %eax
je 0x45025b
jmp 0x450370
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rsi
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rdx
xorl %eax, %eax
movl %eax, %edi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x42fc30
cmpl $0x0, %eax
je 0x450289
jmp 0x450370
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rsi
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq 0x18(%rax), %rdx
xorl %eax, %eax
movl %eax, %edi
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
callq 0x42fc30
cmpl $0x0, %eax
je 0x4502b7
jmp 0x450370
movzwl -0x22(%rbp), %eax
movzwl -0x22(%rbp), %ecx
subl $0x1, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x4502e5
movzwl -0x22(%rbp), %eax
andl $0x18, %eax
cmpl $0x0, %eax
je 0x4502dd
movw $0x8, -0x22(%rbp)
jmp 0x4502e3
movw $0x20, -0x22(%rbp)
jmp 0x4502e5
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq (%rax), %rax
movq (%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
xorl %edx, %edx
callq 0x42dee0
movq %rax, -0x38(%rbp)
cmpq $0x0, -0x38(%rbp)
jne 0x450315
jmp 0x450370
movl $0x35, -0x3c(%rbp)
movzwl -0x22(%rbp), %eax
movl -0x3c(%rbp), %ecx
subl $0x35, %ecx
movl $0x2, %edx
shll %cl, %edx
movl %edx, %ecx
cmpl %ecx, %eax
je 0x450340
jmp 0x450335
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0x45031c
movl -0x3c(%rbp), %eax
movb %al, %cl
movq -0x38(%rbp), %rax
movb %cl, (%rax)
movq -0x10(%rbp), %rdi
movq -0x38(%rbp), %rsi
movl $0x3, %edx
callq 0x44d460
movl %eax, -0x40(%rbp)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x40(%rbp), %edx
callq 0x44d630
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)