// File: /workspace/github_c_makefile_star2_O0/shifengbin[P]bishe/Output/../Persistence/sqlite3.c
// Function: termIsEquivalence
static int termIsEquivalence(Parse *pParse, Expr *pExpr){
  char aff1, aff2;
  CollSeq *pColl;
  const char *zColl1, *zColl2;
  if( !OptimizationEnabled(pParse->db, SQLITE_Transitive) ) return 0;
  if( pExpr->op!=TK_EQ && pExpr->op!=TK_IS ) return 0;
  if( ExprHasProperty(pExpr, EP_FromJoin) ) return 0;
  aff1 = sqlite3ExprAffinity(pExpr->pLeft);
  aff2 = sqlite3ExprAffinity(pExpr->pRight);
  if( aff1!=aff2
   && (!sqlite3IsNumericAffinity(aff1) || !sqlite3IsNumericAffinity(aff2))
  ){
    return 0;
  }
  pColl = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft, pExpr->pRight);
  if( pColl==0 || sqlite3StrICmp(pColl->zName, "BINARY")==0 ) return 1;
  pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
  /* Since pLeft and pRight are both a column references, their collating
  ** sequence should always be defined. */
  zColl1 = ALWAYS(pColl) ? pColl->zName : 0;
  pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight);
  zColl2 = ALWAYS(pColl) ? pColl->zName : 0;
  return sqlite3StrICmp(zColl1, zColl2)==0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq (%rax), %rax
movzwl 0x4c(%rax), %eax
andl $0x200, %eax            # imm = 0x200
cmpl $0x0, %eax
je 0x880e1
movl $0x0, -0x4(%rbp)
jmp 0x8823f
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x4f, %eax
je 0x88105
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x49, %eax
je 0x88105
movl $0x0, -0x4(%rbp)
jmp 0x8823f
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x88120
movl $0x0, -0x4(%rbp)
jmp 0x8823f
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
callq 0x722a0
movb %al, -0x19(%rbp)
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0x722a0
movb %al, -0x1a(%rbp)
movsbl -0x19(%rbp), %eax
movsbl -0x1a(%rbp), %ecx
cmpl %ecx, %eax
je 0x8816a
movsbl -0x19(%rbp), %eax
cmpl $0x43, %eax
jl 0x8815e
movsbl -0x1a(%rbp), %eax
cmpl $0x43, %eax
jge 0x8816a
movl $0x0, -0x4(%rbp)
jmp 0x8823f
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdx
callq 0x721b0
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x881a6
movq -0x28(%rbp), %rax
movq (%rax), %rdi
leaq 0x1e28e(%rip), %rsi     # 0xa642a
callq 0xb5c0
cmpl $0x0, %eax
jne 0x881b2
movl $0x1, -0x4(%rbp)
jmp 0x8823f
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x6e810
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x881db
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
jmp 0x881e3
xorl %eax, %eax
movq %rax, -0x40(%rbp)
jmp 0x881e3
movq -0x40(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rsi
callq 0x6e810
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
je 0x88214
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x8821c
xorl %eax, %eax
movq %rax, -0x48(%rbp)
jmp 0x8821c
movq -0x48(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0xb5c0
cmpl $0x0, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)