// File: ef-gy[P]libefgy/src/test-case/e.cpp
// Function: testE(std::ostream&)
bool testE(std::ostream &log) {
  e<longDouble> eD1(1, 1, 0, 1);
  e<longDouble> eD2(1, 1, 0, 4);
  e<longDouble> eD3(1, 1, 0, 8);
  e<longDouble> eD4(1, 1, 0, 12);

  log << "e<longDouble,1> = " << (long double)longDouble(eD1) << "\n";
  log << "e<longDouble,4> = " << (long double)longDouble(eD2) << "\n";
  log << "e<longDouble,8> = " << (long double)longDouble(eD3) << "\n";
  log << "e<longDouble,12> = " << (long double)longDouble(eD4) << "\n";

  e<long double> eDL1(1, 1, 0, 1);
  e<long double> eDL2(1, 1, 0, 4);
  e<long double> eDL3(1, 1, 0, 8);
  e<long double> eDL4(1, 1, 0, 12);

  log << "e<long double,1> = " << (long double)eDL1 << "\n";
  log << "e<long double,4> = " << (long double)eDL2 << "\n";
  log << "e<long double,8> = " << (long double)eDL3 << "\n";
  log << "e<long double,12> = " << (long double)eDL4 << "\n";

  e<fraction> eQ1(fraction(1), fraction(1), fraction(0), 1);
  e<fraction> eQ2(fraction(1), fraction(1), fraction(0), 4);
  e<fraction> eQ3(fraction(1), fraction(1), fraction(0), 8);
  e<fraction> eQ4(fraction(1), fraction(1), fraction(0), 12);

  log << "e<fraction,1> = " << fraction(eQ1) << "\n";
  log << "e<fraction,4> = " << fraction(eQ2) << "\n";
  log << "e<fraction,8> = " << fraction(eQ3) << "\n";
  log << "e<fraction,12> = " << fraction(eQ4) << "\n";

  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x7a0, %rsp            # imm = 0x7A0
movq %rdi, -0x8(%rbp)
fld1
fld %st(0)
fstpt -0x720(%rbp)
fstpt -0x70(%rbp)
leaq -0x60(%rbp), %rdi
movq %rdi, -0x768(%rbp)
leaq -0x70(%rbp), %rsi
callq 0x6d30
fldt -0x720(%rbp)
fstpt -0x90(%rbp)
leaq -0x80(%rbp), %rdi
movq %rdi, -0x760(%rbp)
leaq -0x90(%rbp), %rsi
callq 0x6d30
fldz
fld %st(0)
fstpt -0x714(%rbp)
fstpt -0xb0(%rbp)
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x758(%rbp)
leaq -0xb0(%rbp), %rsi
callq 0x6d30
movq -0x768(%rbp), %rsi
movq -0x760(%rbp), %rdx
movq -0x758(%rbp), %rcx
movq $0x1, -0xb8(%rbp)
leaq -0x50(%rbp), %rdi
movq %rdi, -0x6f0(%rbp)
leaq -0xb8(%rbp), %r8
callq 0x6d50
fldt -0x720(%rbp)
fstpt -0x120(%rbp)
leaq -0x110(%rbp), %rdi
movq %rdi, -0x750(%rbp)
leaq -0x120(%rbp), %rsi
callq 0x6d30
fldt -0x720(%rbp)
fstpt -0x140(%rbp)
leaq -0x130(%rbp), %rdi
movq %rdi, -0x748(%rbp)
leaq -0x140(%rbp), %rsi
callq 0x6d30
fldt -0x714(%rbp)
fstpt -0x160(%rbp)
leaq -0x150(%rbp), %rdi
movq %rdi, -0x740(%rbp)
leaq -0x160(%rbp), %rsi
callq 0x6d30
movq -0x750(%rbp), %rsi
movq -0x748(%rbp), %rdx
movq -0x740(%rbp), %rcx
movq $0x4, -0x168(%rbp)
leaq -0x100(%rbp), %rdi
movq %rdi, -0x6d8(%rbp)
leaq -0x168(%rbp), %r8
callq 0x6d50
fldt -0x720(%rbp)
fstpt -0x1d0(%rbp)
leaq -0x1c0(%rbp), %rdi
movq %rdi, -0x738(%rbp)
leaq -0x1d0(%rbp), %rsi
callq 0x6d30
fldt -0x720(%rbp)
fstpt -0x1f0(%rbp)
leaq -0x1e0(%rbp), %rdi
movq %rdi, -0x730(%rbp)
leaq -0x1f0(%rbp), %rsi
callq 0x6d30
fldt -0x714(%rbp)
fstpt -0x210(%rbp)
leaq -0x200(%rbp), %rdi
movq %rdi, -0x728(%rbp)
leaq -0x210(%rbp), %rsi
callq 0x6d30
movq -0x738(%rbp), %rsi
movq -0x730(%rbp), %rdx
movq -0x728(%rbp), %rcx
movq $0x8, -0x218(%rbp)
leaq -0x1b0(%rbp), %rdi
movq %rdi, -0x6c0(%rbp)
leaq -0x218(%rbp), %r8
callq 0x6d50
fldt -0x720(%rbp)
fstpt -0x280(%rbp)
leaq -0x270(%rbp), %rdi
movq %rdi, -0x708(%rbp)
leaq -0x280(%rbp), %rsi
callq 0x6d30
fldt -0x720(%rbp)
fstpt -0x2a0(%rbp)
leaq -0x290(%rbp), %rdi
movq %rdi, -0x700(%rbp)
leaq -0x2a0(%rbp), %rsi
callq 0x6d30
fldt -0x714(%rbp)
fstpt -0x2c0(%rbp)
leaq -0x2b0(%rbp), %rdi
movq %rdi, -0x6f8(%rbp)
leaq -0x2c0(%rbp), %rsi
callq 0x6d30
movq -0x708(%rbp), %rsi
movq -0x700(%rbp), %rdx
movq -0x6f8(%rbp), %rcx
movq $0xc, -0x2c8(%rbp)
leaq -0x260(%rbp), %rdi
movq %rdi, -0x6a0(%rbp)
leaq -0x2c8(%rbp), %r8
callq 0x6d50
movq -0x8(%rbp), %rdi
leaq 0x2f34f(%rip), %rsi     # 0x351d2
callq 0x5360
movq -0x6f0(%rbp), %rsi
movq %rax, -0x6e0(%rbp)
leaq -0x2e0(%rbp), %rdi
movq %rdi, -0x6e8(%rbp)
callq 0x6dc0
movq -0x6e8(%rbp), %rdi
callq 0x6e00
movq -0x6e0(%rbp), %rdi
fldt (%rax)
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq %rax, %rdi
leaq 0x2f428(%rip), %rsi     # 0x352fa
movq %rsi, -0x6a8(%rbp)
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2f2fc(%rip), %rsi     # 0x351e5
callq 0x5360
movq -0x6d8(%rbp), %rsi
movq %rax, -0x6c8(%rbp)
leaq -0x2f0(%rbp), %rdi
movq %rdi, -0x6d0(%rbp)
callq 0x6dc0
movq -0x6d0(%rbp), %rdi
callq 0x6e00
movq -0x6c8(%rbp), %rdi
fldt (%rax)
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq -0x6a8(%rbp), %rsi
movq %rax, %rdi
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2f2b0(%rip), %rsi     # 0x351f8
callq 0x5360
movq -0x6c0(%rbp), %rsi
movq %rax, -0x6b0(%rbp)
leaq -0x300(%rbp), %rdi
movq %rdi, -0x6b8(%rbp)
callq 0x6dc0
movq -0x6b8(%rbp), %rdi
callq 0x6e00
movq -0x6b0(%rbp), %rdi
fldt (%rax)
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq -0x6a8(%rbp), %rsi
movq %rax, %rdi
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2f264(%rip), %rsi     # 0x3520b
callq 0x5360
movq -0x6a0(%rbp), %rsi
movq %rax, -0x690(%rbp)
leaq -0x310(%rbp), %rdi
movq %rdi, -0x698(%rbp)
callq 0x6dc0
movq -0x698(%rbp), %rdi
callq 0x6e00
movq -0x690(%rbp), %rdi
fldt (%rax)
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq %rax, %rdi
leaq 0x2f304(%rip), %rsi     # 0x352fa
callq 0x5360
movq $0x1, -0x358(%rbp)
movq %rsp, %rax
fldz
fstpt 0x20(%rax)
fld1
fld %st(0)
fstpt 0x10(%rax)
fstpt (%rax)
leaq -0x350(%rbp), %rdi
leaq -0x358(%rbp), %rsi
callq 0x6e10
movq $0x4, -0x3a8(%rbp)
movq %rsp, %rax
fldz
fstpt 0x20(%rax)
fld1
fld %st(0)
fstpt 0x10(%rax)
fstpt (%rax)
leaq -0x3a0(%rbp), %rdi
leaq -0x3a8(%rbp), %rsi
callq 0x6e10
movq $0x8, -0x3f8(%rbp)
movq %rsp, %rax
fldz
fstpt 0x20(%rax)
fld1
fld %st(0)
fstpt 0x10(%rax)
fstpt (%rax)
leaq -0x3f0(%rbp), %rdi
leaq -0x3f8(%rbp), %rsi
callq 0x6e10
movq $0xc, -0x448(%rbp)
movq %rsp, %rax
fldz
fstpt 0x20(%rax)
fld1
fld %st(0)
fstpt 0x10(%rax)
fstpt (%rax)
leaq -0x440(%rbp), %rdi
leaq -0x448(%rbp), %rsi
callq 0x6e10
movq -0x8(%rbp), %rdi
leaq 0x2f15d(%rip), %rsi     # 0x3521f
callq 0x5360
movq %rax, -0x688(%rbp)
leaq -0x350(%rbp), %rdi
callq 0x6e70
movq -0x688(%rbp), %rdi
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq %rax, %rdi
leaq 0x2f205(%rip), %rsi     # 0x352fa
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2f12e(%rip), %rsi     # 0x35233
callq 0x5360
movq %rax, -0x680(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0x6e70
movq -0x680(%rbp), %rdi
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq %rax, %rdi
leaq 0x2f1c2(%rip), %rsi     # 0x352fa
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2f0ff(%rip), %rsi     # 0x35247
callq 0x5360
movq %rax, -0x678(%rbp)
leaq -0x3f0(%rbp), %rdi
callq 0x6e70
movq -0x678(%rbp), %rdi
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq %rax, %rdi
leaq 0x2f17f(%rip), %rsi     # 0x352fa
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2f0d0(%rip), %rsi     # 0x3525b
callq 0x5360
movq %rax, -0x670(%rbp)
leaq -0x440(%rbp), %rdi
callq 0x6e70
movq -0x670(%rbp), %rdi
movq %rsp, %rax
fstpt (%rax)
callq 0x5450
movq %rax, %rdi
leaq 0x2f13c(%rip), %rsi     # 0x352fa
callq 0x5360
leaq -0x490(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x4a0(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x4b0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6eb0
movq $0x1, -0x4b8(%rbp)
movq -0x490(%rbp), %rsi
movq -0x488(%rbp), %rdx
movq -0x4a0(%rbp), %rcx
movq -0x498(%rbp), %r8
leaq -0x480(%rbp), %rdi
leaq -0x4b0(%rbp), %rax
leaq -0x4b8(%rbp), %r9
movq (%rax), %r10
movq %r10, (%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
callq 0x6ee0
leaq -0x500(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x510(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x520(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6eb0
movq $0x4, -0x528(%rbp)
movq -0x500(%rbp), %rsi
movq -0x4f8(%rbp), %rdx
movq -0x510(%rbp), %rcx
movq -0x508(%rbp), %r8
leaq -0x4f0(%rbp), %rdi
leaq -0x520(%rbp), %rax
leaq -0x528(%rbp), %r9
movq (%rax), %r10
movq %r10, (%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
callq 0x6ee0
leaq -0x570(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x580(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x590(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6eb0
movq $0x8, -0x598(%rbp)
movq -0x570(%rbp), %rsi
movq -0x568(%rbp), %rdx
movq -0x580(%rbp), %rcx
movq -0x578(%rbp), %r8
leaq -0x560(%rbp), %rdi
leaq -0x590(%rbp), %rax
leaq -0x598(%rbp), %r9
movq (%rax), %r10
movq %r10, (%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
callq 0x6ee0
leaq -0x5e0(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x5f0(%rbp), %rdi
movl $0x1, %esi
callq 0x6eb0
leaq -0x600(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6eb0
movq $0xc, -0x608(%rbp)
movq -0x5e0(%rbp), %rsi
movq -0x5d8(%rbp), %rdx
movq -0x5f0(%rbp), %rcx
movq -0x5e8(%rbp), %r8
leaq -0x5d0(%rbp), %rdi
leaq -0x600(%rbp), %rax
leaq -0x608(%rbp), %r9
movq (%rax), %r10
movq %r10, (%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x8(%rsp)
callq 0x6ee0
movq -0x8(%rbp), %rdi
leaq 0x2ee96(%rip), %rsi     # 0x35270
callq 0x5360
movq %rax, -0x668(%rbp)
leaq -0x480(%rbp), %rdi
callq 0x6fb0
movq -0x668(%rbp), %rdi
movq %rax, -0x618(%rbp)
movq %rdx, -0x610(%rbp)
leaq -0x618(%rbp), %rsi
callq 0x6f60
movq %rax, %rdi
leaq 0x2eedd(%rip), %rsi     # 0x352fa
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2ee54(%rip), %rsi     # 0x35281
callq 0x5360
movq %rax, -0x660(%rbp)
leaq -0x4f0(%rbp), %rdi
callq 0x6fb0
movq -0x660(%rbp), %rdi
movq %rax, -0x628(%rbp)
movq %rdx, -0x620(%rbp)
leaq -0x628(%rbp), %rsi
callq 0x6f60
movq %rax, %rdi
leaq 0x2ee8a(%rip), %rsi     # 0x352fa
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2ee12(%rip), %rsi     # 0x35292
callq 0x5360
movq %rax, -0x658(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x6fb0
movq -0x658(%rbp), %rdi
movq %rax, -0x638(%rbp)
movq %rdx, -0x630(%rbp)
leaq -0x638(%rbp), %rsi
callq 0x6f60
movq %rax, %rdi
leaq 0x2ee37(%rip), %rsi     # 0x352fa
callq 0x5360
movq -0x8(%rbp), %rdi
leaq 0x2edd0(%rip), %rsi     # 0x352a3
callq 0x5360
movq %rax, -0x650(%rbp)
leaq -0x5d0(%rbp), %rdi
callq 0x6fb0
movq -0x650(%rbp), %rdi
movq %rax, -0x648(%rbp)
movq %rdx, -0x640(%rbp)
leaq -0x648(%rbp), %rsi
callq 0x6f60
movq %rax, %rdi
leaq 0x2ede4(%rip), %rsi     # 0x352fa
callq 0x5360
movb $0x1, %al
andb $0x1, %al
addq $0x7a0, %rsp            # imm = 0x7A0
popq %rbp
retq
nopl (%rax,%rax)