// File: biotomas[P]ipasir/sat/picosat961/picosat-961/picosat.c
// Function: picosat_push
int
picosat_push (PS * ps)
{
  int res;
  Lit *lit;
  Var * v;

  if (ps->measurealltimeinlib)
    enter (ps);
  else
    check_ready (ps);

  if (ps->state != READY)
    reset_incremental_usage (ps);

  if (ps->rils != ps->rilshead)
    {
      res = *--ps->rilshead;
      assert (ps->vars[res].internal);
    }
  else
    {
      inc_max_var (ps);
      res = ps->max_var;
      v = ps->vars + res;
      assert (!v->internal);
      v->internal = 1;
      ps->internals++;
      LOG ( fprintf (ps->out, "%snew internal variable index %d\n", ps->prefix, res));
    }

  lit = int2lit (ps, res);

  if (ps->clshead == ps->eocls)
    ENLARGE (ps->CLS, ps->clshead, ps->eocls);
  *ps->clshead++ = lit;

  ps->contexts++;

  LOG ( fprintf (ps->out, "%snew context %d at depth %ld after push\n",
                 ps->prefix, res, (long)(ps->clshead - ps->CLS)));

  if (ps->measurealltimeinlib)
    leave (ps);

  return res;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpl $0x0, 0x35c(%rax)
je 0x4ad4
movq -0x8(%rbp), %rdi
callq 0x43a0
jmp 0x4add
movq -0x8(%rbp), %rdi
callq 0x49e0
movq -0x8(%rbp), %rax
cmpl $0x1, (%rax)
je 0x4aef
movq -0x8(%rbp), %rdi
callq 0x4db0
movq -0x8(%rbp), %rax
movq 0x130(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x138(%rcx), %rax
je 0x4b72
movq -0x8(%rbp), %rcx
movq 0x138(%rcx), %rax
movq %rax, %rdx
addq $-0x4, %rdx
movq %rdx, 0x138(%rcx)
movl -0x4(%rax), %eax
movl %eax, -0xc(%rbp)
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movslq -0xc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movw (%rax), %ax
shrw $0x6, %ax
andw $0x1, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
je 0x4b4e
jmp 0x4b6d
leaq 0x18738(%rip), %rdi     # 0x1d28d
leaq 0x18748(%rip), %rsi     # 0x1d2a4
movl $0x1a0b, %edx           # imm = 0x1A0B
leaq 0x18746(%rip), %rcx     # 0x1d2ae
callq 0x10b0
jmp 0x4bfd
movq -0x8(%rbp), %rdi
callq 0x4700
movq -0x8(%rbp), %rax
movl 0x2c(%rax), %eax
movl %eax, -0xc(%rbp)
movq -0x8(%rbp), %rax
movq 0x40(%rax), %rax
movslq -0xc(%rbp), %rcx
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rax
movw (%rax), %ax
shrw $0x6, %ax
andw $0x1, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
jne 0x4bb5
jmp 0x4bd4
leaq 0x18709(%rip), %rdi     # 0x1d2c5
leaq 0x186e1(%rip), %rsi     # 0x1d2a4
movl $0x1a12, %edx           # imm = 0x1A12
leaq 0x186df(%rip), %rcx     # 0x1d2ae
callq 0x10b0
movq -0x20(%rbp), %rax
movw (%rax), %cx
andw $-0x41, %cx
orw $0x40, %cx
movw %cx, (%rax)
movq -0x8(%rbp), %rax
movl 0x424(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x424(%rax)
jmp 0x4bfb
jmp 0x4bfd
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
callq 0x4ef0
movq %rax, -0x18(%rbp)
movq -0x8(%rbp), %rax
movq 0x120(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x128(%rcx), %rax
jne 0x4d4d
jmp 0x4c2b
movq -0x8(%rbp), %rax
movq 0x128(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x118(%rcx), %rcx
subq %rcx, %rax
sarq $0x3, %rax
movl %eax, -0x24(%rbp)
cmpl $0x0, -0x24(%rbp)
je 0x4c5b
movl -0x24(%rbp), %eax
shll %eax
movl %eax, -0x4c(%rbp)
jmp 0x4c65
movl $0x1, %eax
movl %eax, -0x4c(%rbp)
jmp 0x4c65
movl -0x4c(%rbp), %eax
movl %eax, %eax
movq %rax, -0x30(%rbp)
movq -0x8(%rbp), %rax
movq 0x120(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x118(%rcx), %rcx
subq %rcx, %rax
sarq $0x3, %rax
movl %eax, -0x34(%rbp)
movq -0x8(%rbp), %rax
movq 0x118(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x128(%rcx), %rax
ja 0x4ca8
jmp 0x4cc7
leaq 0x18623(%rip), %rdi     # 0x1d2d2
leaq 0x185ee(%rip), %rsi     # 0x1d2a4
movl $0x1a1b, %edx           # imm = 0x1A1B
leaq 0x185ec(%rip), %rcx     # 0x1d2ae
callq 0x10b0
jmp 0x4cc9
movl -0x24(%rbp), %eax
shlq $0x3, %rax
movq %rax, -0x40(%rbp)
movq -0x30(%rbp), %rax
shlq $0x3, %rax
movq %rax, -0x48(%rbp)
movq -0x8(%rbp), %rdi
movq -0x8(%rbp), %rax
movq 0x118(%rax), %rsi
movq -0x40(%rbp), %rdx
movq -0x48(%rbp), %rcx
callq 0x4f30
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x118(%rax)
movq -0x8(%rbp), %rax
movq 0x118(%rax), %rcx
movl -0x34(%rbp), %eax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x120(%rax)
movq -0x8(%rbp), %rax
movq 0x118(%rax), %rcx
movq -0x30(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x128(%rax)
jmp 0x4d4d
movq -0x18(%rbp), %rcx
movq -0x8(%rbp), %rdx
movq 0x120(%rdx), %rax
movq %rax, %rsi
addq $0x8, %rsi
movq %rsi, 0x120(%rdx)
movq %rcx, (%rax)
movq -0x8(%rbp), %rax
movl 0x420(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x420(%rax)
jmp 0x4d82
movq -0x8(%rbp), %rax
cmpl $0x0, 0x35c(%rax)
je 0x4d98
movq -0x8(%rbp), %rdi
callq 0x4910
movl -0xc(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)