// File: ef-gy[P]libefgy/src/test-case/tracer.cpp
// Function: testTracerMatrix(std::ostream&)
bool testTracerMatrix(std::ostream &log) {
  matrix<runtime, 3, 3> m1;
  matrix<runtime, 3, 3> m2;

  for (unsigned int i = 0; i < 3; i++) {
    for (unsigned int j = 0; j < 3; j++) {
      std::stringstream s("");
      s << "_" << i << "_" << j;

      m1[i][j] = std::shared_ptr<tracer<void, void, 0>>(
          new tracer<void, void, 0>("a" + s.str()));
      m2[i][j] = std::shared_ptr<tracer<void, void, 0>>(
          new tracer<void, void, 0>("b" + s.str()));
    }
  }

  matrix<runtime, 3, 3> m3 = m1 * m2;

  for (unsigned int i = 0; i < 3; i++) {
    for (unsigned int j = 0; j < 3; j++) {
      log << "result"
          << "_" << i << "_" << j << " = " << m3[i][j] << "\n";
    }
  }

  return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4b0, %rsp            # imm = 0x4B0
movq %rdi, -0x8(%rbp)
leaq -0x98(%rbp), %rdi
callq 0x8460
leaq -0x128(%rbp), %rdi
callq 0x8460
movl $0x0, -0x12c(%rbp)
cmpl $0x3, -0x12c(%rbp)
jae 0x7623
movl $0x0, -0x130(%rbp)
cmpl $0x3, -0x130(%rbp)
jae 0x760d
leaq -0x2d9(%rbp), %rdi
movq %rdi, -0x440(%rbp)
callq 0x6610
movq -0x440(%rbp), %rdx
leaq 0x30fe3(%rip), %rsi     # 0x38219
leaq -0x2d8(%rbp), %rdi
callq 0x7e70
jmp 0x7244
movl $0x10, %edi
movl $0x8, %esi
callq 0x8480
movl %eax, -0x444(%rbp)
jmp 0x725b
movl -0x444(%rbp), %edx
leaq -0x2b8(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x6550
jmp 0x7276
leaq -0x2d8(%rbp), %rdi
callq 0x6230
leaq -0x2d9(%rbp), %rdi
callq 0x63e0
leaq -0x2a8(%rbp), %rdi
leaq 0x30f2a(%rip), %rsi     # 0x381c6
callq 0x6380
movq %rax, -0x450(%rbp)
jmp 0x72aa
movq -0x450(%rbp), %rdi
movl -0x12c(%rbp), %esi
callq 0x64e0
movq %rax, -0x458(%rbp)
jmp 0x72c5
movq -0x458(%rbp), %rdi
leaq 0x30ef3(%rip), %rsi     # 0x381c6
callq 0x6380
movq %rax, -0x460(%rbp)
jmp 0x72e1
movq -0x460(%rbp), %rdi
movl -0x130(%rbp), %esi
callq 0x64e0
jmp 0x72f5
movl $0x28, %edi
callq 0x6390
movq %rax, -0x468(%rbp)
jmp 0x7308
movb $0x1, -0x341(%rbp)
leaq -0x340(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x6370
jmp 0x7324
leaq 0x312a5(%rip), %rsi     # 0x385d0
leaq -0x320(%rbp), %rdi
leaq -0x340(%rbp), %rdx
callq 0x84a0
jmp 0x7340
movq -0x468(%rbp), %rdi
leaq -0x320(%rbp), %rsi
callq 0x84f0
jmp 0x7355
movq -0x468(%rbp), %rsi
movb $0x0, -0x341(%rbp)
leaq -0x300(%rbp), %rdi
callq 0x8560
jmp 0x7371
movl -0x12c(%rbp), %eax
movl %eax, %esi
leaq -0x98(%rbp), %rdi
callq 0x8590
movq %rax, %rdi
movl -0x130(%rbp), %eax
movl %eax, %esi
callq 0x85c0
movq %rax, %rdi
leaq -0x300(%rbp), %rsi
movq %rsi, -0x478(%rbp)
callq 0x85f0
movq -0x478(%rbp), %rdi
callq 0x8620
leaq -0x320(%rbp), %rdi
callq 0x6230
leaq -0x340(%rbp), %rdi
callq 0x6230
movl $0x28, %edi
callq 0x6390
movq %rax, -0x470(%rbp)
jmp 0x73e2
movb $0x1, -0x399(%rbp)
leaq -0x398(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x6370
jmp 0x73fe
leaq 0x3135b(%rip), %rsi     # 0x38760
leaq -0x378(%rbp), %rdi
leaq -0x398(%rbp), %rdx
callq 0x84a0
jmp 0x741a
movq -0x470(%rbp), %rdi
leaq -0x378(%rbp), %rsi
callq 0x84f0
jmp 0x742f
movq -0x470(%rbp), %rsi
movb $0x0, -0x399(%rbp)
leaq -0x358(%rbp), %rdi
callq 0x8560
jmp 0x744b
movl -0x12c(%rbp), %eax
movl %eax, %esi
leaq -0x128(%rbp), %rdi
callq 0x8590
movq %rax, %rdi
movl -0x130(%rbp), %eax
movl %eax, %esi
callq 0x85c0
movq %rax, %rdi
leaq -0x358(%rbp), %rsi
callq 0x85f0
leaq -0x358(%rbp), %rdi
callq 0x8620
leaq -0x378(%rbp), %rdi
callq 0x6230
leaq -0x398(%rbp), %rdi
callq 0x6230
leaq -0x2b8(%rbp), %rdi
callq 0x62d0
movl -0x130(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x130(%rbp)
jmp 0x7208
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
jmp 0x74f4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x6230
leaq -0x2d9(%rbp), %rdi
callq 0x63e0
jmp 0x77f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
jmp 0x75fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
jmp 0x756e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
jmp 0x7562
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
leaq -0x320(%rbp), %rdi
callq 0x6230
leaq -0x340(%rbp), %rdi
callq 0x6230
testb $0x1, -0x341(%rbp)
jne 0x7579
jmp 0x758a
movq -0x468(%rbp), %rdi
movl $0x28, %esi
callq 0x63a0
jmp 0x75fc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
jmp 0x75de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
jmp 0x75d2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
leaq -0x378(%rbp), %rdi
callq 0x6230
leaq -0x398(%rbp), %rdi
callq 0x6230
testb $0x1, -0x399(%rbp)
jne 0x75e9
jmp 0x75fa
movq -0x470(%rbp), %rdi
movl $0x28, %esi
callq 0x63a0
jmp 0x75fc
leaq -0x2b8(%rbp), %rdi
callq 0x62d0
jmp 0x77f2
jmp 0x760f
movl -0x12c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x12c(%rbp)
jmp 0x71f1
leaq -0x430(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0x128(%rbp), %rdx
callq 0x8640
jmp 0x763f
movl $0x0, -0x434(%rbp)
cmpl $0x3, -0x434(%rbp)
jae 0x77c1
movl $0x0, -0x438(%rbp)
cmpl $0x3, -0x438(%rbp)
jae 0x77ab
movq -0x8(%rbp), %rdi
leaq 0x30b50(%rip), %rsi     # 0x381c8
callq 0x6380
movq %rax, -0x480(%rbp)
jmp 0x7686
movq -0x480(%rbp), %rdi
leaq 0x30b32(%rip), %rsi     # 0x381c6
callq 0x6380
movq %rax, -0x488(%rbp)
jmp 0x76a2
movq -0x488(%rbp), %rdi
movl -0x434(%rbp), %esi
callq 0x64e0
movq %rax, -0x490(%rbp)
jmp 0x76bd
movq -0x490(%rbp), %rdi
leaq 0x30afb(%rip), %rsi     # 0x381c6
callq 0x6380
movq %rax, -0x498(%rbp)
jmp 0x76d9
movq -0x498(%rbp), %rdi
movl -0x438(%rbp), %esi
callq 0x64e0
movq %rax, -0x4a0(%rbp)
jmp 0x76f4
movq -0x4a0(%rbp), %rdi
leaq 0x30acd(%rip), %rsi     # 0x381cf
callq 0x6380
movq %rax, -0x4a8(%rbp)
jmp 0x7710
movl -0x434(%rbp), %eax
movl %eax, %esi
leaq -0x430(%rbp), %rdi
callq 0x8590
movq %rax, %rdi
movl -0x438(%rbp), %eax
movl %eax, %esi
callq 0x85c0
movq -0x4a8(%rbp), %rdi
movq %rax, %rsi
callq 0x70e0
movq %rax, -0x4b0(%rbp)
jmp 0x774c
movq -0x4b0(%rbp), %rdi
leaq 0x30abe(%rip), %rsi     # 0x38218
callq 0x6380
jmp 0x7761
jmp 0x7763
movl -0x438(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x438(%rbp)
jmp 0x7660
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
jmp 0x77f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x2e8(%rbp)
movl %eax, -0x2ec(%rbp)
leaq -0x430(%rbp), %rdi
callq 0x8890
jmp 0x77f2
jmp 0x77ad
movl -0x434(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x434(%rbp)
jmp 0x7649
leaq -0x430(%rbp), %rdi
callq 0x8890
leaq -0x128(%rbp), %rdi
callq 0x8890
leaq -0x98(%rbp), %rdi
callq 0x8890
movb $0x1, %al
andb $0x1, %al
addq $0x4b0, %rsp            # imm = 0x4B0
popq %rbp
retq
leaq -0x128(%rbp), %rdi
callq 0x8890
leaq -0x98(%rbp), %rdi
callq 0x8890
movq -0x2e8(%rbp), %rdi
callq 0x6600
nopw %cs:(%rax,%rax)