// File: eryxcc[P]lois/src/formula.cpp
// Function: lois::operator||(lois::rbool, lois::rbool)
rbool operator || (rbool a, rbool b) {
  if(a.isFalse()) return b;
  if(b.isFalse()) return a;
  if(a.isTrue() || b.isTrue()) return ftrue;
  if(a.p == b.p) return a;

  auto ae = std::dynamic_pointer_cast<FormulaEq>(a.p);
  auto be = std::dynamic_pointer_cast<FormulaEq>(b.p);
  if(ae) if(be) {
    if(eqterm(ae->t1, be->t1) && eqterm(ae->t2, be->t2)) {
      return ae->type == be->type ? a : ftrue;
      }
    if(eqterm(ae->t1, be->t2) && eqterm(ae->t2, be->t1)) {
      return ae->type == be->type ? a : ftrue;
      }
    }

  return rbool(std::make_shared<FormulaBi> (false, a, b));
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rdx, -0x90(%rbp)
movq %rsi, -0x88(%rbp)
movq %rdi, %rax
movq -0x88(%rbp), %rdi
movq %rax, -0x80(%rbp)
movq %rax, %rcx
movq %rcx, -0x78(%rbp)
movq %rax, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
callq 0x45150
testb $0x1, %al
jne 0x42595
jmp 0x425aa
movq -0x90(%rbp), %rsi
movq -0x80(%rbp), %rdi
callq 0x22430
jmp 0x42936
movq -0x90(%rbp), %rdi
callq 0x45150
testb $0x1, %al
jne 0x425bc
jmp 0x425d1
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdi
callq 0x22430
jmp 0x42936
movq -0x88(%rbp), %rdi
callq 0x29750
testb $0x1, %al
jne 0x425f3
movq -0x90(%rbp), %rdi
callq 0x29750
testb $0x1, %al
jne 0x425f3
jmp 0x42608
movq -0x80(%rbp), %rdi
leaq 0x63232(%rip), %rsi     # 0xa5830
callq 0x11030
jmp 0x42936
movq -0x90(%rbp), %rsi
movq -0x88(%rbp), %rdi
callq 0x29780
testb $0x1, %al
jne 0x42621
jmp 0x42636
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdi
callq 0x22430
jmp 0x42936
movq -0x88(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x44cc0
movq -0x90(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x44cc0
leaq -0x28(%rbp), %rdi
callq 0x44d50
testb $0x1, %al
jne 0x42668
jmp 0x4288c
leaq -0x38(%rbp), %rdi
callq 0x44d50
testb $0x1, %al
jne 0x4267a
jmp 0x4288a
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x18, %rax
movq %rax, -0xa0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xa0(%rbp), %rdi
movq %rax, %rsi
addq $0x18, %rsi
callq 0x45180
movb %al, -0x91(%rbp)
jmp 0x426b2
movb -0x91(%rbp), %al
testb $0x1, %al
jne 0x426c1
jmp 0x4278b
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x28, %rax
movq %rax, -0xb0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xb0(%rbp), %rdi
movq %rax, %rsi
addq $0x28, %rsi
callq 0x45180
movb %al, -0xa1(%rbp)
jmp 0x426f9
movb -0xa1(%rbp), %al
testb $0x1, %al
jne 0x42708
jmp 0x4278b
leaq -0x28(%rbp), %rdi
callq 0x44d70
movb 0x10(%rax), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0xb4(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq %rax, %rcx
movl -0xb4(%rbp), %eax
movb 0x10(%rcx), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jne 0x4274e
movq -0x88(%rbp), %rax
movq %rax, -0xc0(%rbp)
jmp 0x4275e
leaq 0x630db(%rip), %rax     # 0xa5830
movq %rax, -0xc0(%rbp)
jmp 0x4275e
movq -0x80(%rbp), %rdi
movq -0xc0(%rbp), %rsi
callq 0x11030
movl $0x1, -0x48(%rbp)
jmp 0x4290e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x42922
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x18, %rax
movq %rax, -0xd0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xd0(%rbp), %rdi
movq %rax, %rsi
addq $0x28, %rsi
callq 0x45180
movb %al, -0xc1(%rbp)
jmp 0x427c3
movb -0xc1(%rbp), %al
testb $0x1, %al
jne 0x427d2
jmp 0x42888
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x28, %rax
movq %rax, -0xe0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xe0(%rbp), %rdi
movq %rax, %rsi
addq $0x18, %rsi
callq 0x45180
movb %al, -0xd1(%rbp)
jmp 0x4280a
movb -0xd1(%rbp), %al
testb $0x1, %al
jne 0x42816
jmp 0x42888
leaq -0x28(%rbp), %rdi
callq 0x44d70
movb 0x10(%rax), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0xe4(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq %rax, %rcx
movl -0xe4(%rbp), %eax
movb 0x10(%rcx), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jne 0x4285c
movq -0x88(%rbp), %rax
movq %rax, -0xf0(%rbp)
jmp 0x4286c
leaq 0x62fcd(%rip), %rax     # 0xa5830
movq %rax, -0xf0(%rbp)
jmp 0x4286c
movq -0x80(%rbp), %rdi
movq -0xf0(%rbp), %rsi
callq 0x11030
movl $0x1, -0x48(%rbp)
jmp 0x4290e
jmp 0x4288a
jmp 0x4288c
movq -0x90(%rbp), %rcx
movq -0x88(%rbp), %rdx
movb $0x0, -0x69(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x69(%rbp), %rsi
callq 0x45230
jmp 0x428ad
leaq -0x58(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x452b0
movq -0x80(%rbp), %rdi
movq -0xf8(%rbp), %rsi
callq 0x449f0
jmp 0x428d3
leaq -0x58(%rbp), %rdi
callq 0x14ad0
leaq -0x68(%rbp), %rdi
callq 0x44b70
movl $0x1, -0x48(%rbp)
jmp 0x4290e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x14ad0
leaq -0x68(%rbp), %rdi
callq 0x44b70
jmp 0x42922
leaq -0x38(%rbp), %rdi
callq 0x44ff0
leaq -0x28(%rbp), %rdi
callq 0x44ff0
jmp 0x42936
leaq -0x38(%rbp), %rdi
callq 0x44ff0
leaq -0x28(%rbp), %rdi
callq 0x44ff0
jmp 0x42943
movq -0x78(%rbp), %rax
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x84d0
nopl (%rax)