// File: biotomas[P]ipasir/sat/picosat961/picosat-961/picosat.c
// Function: prop2
inline static void
prop2 (PS * ps, Lit * this)
{
#ifdef NO_BINARY_CLAUSES
  Lit ** l, ** start;
  Ltk * lstk;
#else
  Cls * c, ** p;
  Cls * next;
#endif
  Lit * other;
  Val tmp;

  assert (this->val == FALSE);

#ifdef NO_BINARY_CLAUSES
  lstk = LIT2IMPLS (this);
  start = lstk->start;
  l = start + lstk->count;
  while (l != start)
    {
      /* The counter 'visits' is the number of clauses that are
       * visited during propagations of assignments.
       */
      ps->visits++;
#ifdef STATS
      ps->bvisits++;
#endif
      other = *--l;
      tmp = other->val;

      if (tmp == TRUE)
	{
#ifdef STATS
	  ps->othertrue++;
	  ps->othertrue2++;
	  if (LIT2VAR (other)->level < ps->LEVEL)
	    ps->othertrue2u++;
#endif
	  continue;
	}

      if (tmp != FALSE)
	{
	  assign_forced (ps, other, LIT2REASON (NOTLIT(this)));
	  continue;
	}

      if (ps->conflict == &ps->cimpl)
	resetcimpl (ps);
      ps->conflict = setcimpl (ps, this, other);
    }
#else
  /* Traverse all binary clauses with 'this'.  Head/Tail pointers for binary
   * clauses do not have to be modified here.
   */
  p = LIT2IMPLS (this);
  for (c = *p; c; c = next)
    {
      ps->visits++;
#ifdef STATS
      ps->bvisits++;
#endif
      assert (!c->collect);
#ifdef TRACE
      assert (!c->collected);
#endif
      assert (c->size == 2);
      
      other = c->lits[0];
      if (other == this)
	{
	  next = c->next[0];
	  other = c->lits[1];
	}
      else
	next = c->next[1];

      tmp = other->val;

      if (tmp == TRUE)
	{
#ifdef STATS
	  ps->othertrue++;
	  ps->othertrue2++;
	  if (LIT2VAR (other)->level < ps->LEVEL)
	    ps->othertrue2u++;
#endif
	  continue;
	}

      if (tmp == FALSE)
	ps->conflict = c;
      else
	assign_forced (ps, other, c);	/* unit clause */
    }
#endif /* !defined(NO_BINARY_CLAUSES) */
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movsbl (%rax), %eax
cmpl $-0x1, %eax
jne 0x1314e
jmp 0x1316d
leaq 0xb56e(%rip), %rdi      # 0x1e6c3
leaq 0xa148(%rip), %rsi      # 0x1d2a4
movl $0xf1e, %edx            # imm = 0xF1E
leaq 0xb56e(%rip), %rcx      # 0x1e6d6
callq 0x10b0
movq -0x8(%rbp), %rax
movq 0x68(%rax), %rax
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rdx
movq 0x38(%rdx), %rdx
subq %rdx, %rcx
movl %ecx, %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movq -0x28(%rbp), %rdx
movabsq $0xffffffff, %rcx       # imm = 0xFFFFFFFF
andq 0x8(%rdx), %rcx
movl %ecx, %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpq -0x20(%rbp), %rax
je 0x132fa
movq -0x8(%rbp), %rax
movq 0x458(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x458(%rax)
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $-0x8, %rcx
movq %rcx, -0x18(%rbp)
movq -0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x31(%rbp)
movsbl -0x31(%rbp), %eax
cmpl $0x1, %eax
jne 0x1320e
jmp 0x131bf
movsbl -0x31(%rbp), %eax
cmpl $-0x1, %eax
je 0x132b2
movq -0x8(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x10(%rbp), %rcx
movq -0x8(%rbp), %rdx
movq 0x38(%rdx), %rdx
subq %rdx, %rcx
xorq $0x1, %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0x13251
jmp 0x13270
leaq 0xb496(%rip), %rdi      # 0x1e6ee
leaq 0xa045(%rip), %rsi      # 0x1d2a4
movl $0xf3d, %edx            # imm = 0xF3D
leaq 0xb46b(%rip), %rcx      # 0x1e6d6
callq 0x10b0
movq -0x40(%rbp), %rsi
movq -0x48(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rdx
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
movq 0x38(%rcx), %rcx
subq %rcx, %rax
xorq $0x1, %rax
addq %rax, %rdx
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
subq %rax, %rdx
shlq %rdx
addq $0x1, %rdx
callq 0x13850
jmp 0x131bf
movq -0x8(%rbp), %rax
movq 0x250(%rax), %rax
movq -0x8(%rbp), %rcx
addq $0x98, %rcx
cmpq %rcx, %rax
jne 0x132d6
movq -0x8(%rbp), %rdi
callq 0xec70
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x30(%rbp), %rdx
callq 0x13ad0
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x250(%rax)
jmp 0x131bf
addq $0x50, %rsp
popq %rbp
retq