// File: dsharlet[P]array/include/array/array.h
// Function: void nda::internal::assert_dims_compatible<std::tuple<nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>>, std::tuple<nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>>, 0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul, 9ul>(std::tuple<nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>, nda::dim<-9l, -9l, -9l>> const&, std::integer_sequence<unsigned long, 0ul, 1ul, 2ul, 3ul, 4ul, 5ul, 6ul, 7ul, 8ul, 9ul>)
NDARRAY_HOST_DEVICE void assert_dims_compatible(const DimsSrc& src, index_sequence<Is...>) {
  // This is ugly, in C++17, we'd use a fold  expression over the comma operator (f(), ...).
  int unused[] = {(assert_dim_compatible<typename std::tuple_element<Is, DimsDst>::type>(
                       Is, nda::dim<>(std::get<Is>(src))),
      0)...};
  (void)unused;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x130, %rsp            # imm = 0x130
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e5f0
movq (%rax), %rcx
movq %rcx, -0x58(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x50(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x48(%rbp)
xorl %eax, %eax
movl %eax, %edi
leaq -0x58(%rbp), %rsi
callq 0x14340
movl $0x0, -0x40(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e660
movq (%rax), %rcx
movq %rcx, -0x70(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x68(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x60(%rbp)
movl $0x1, %edi
leaq -0x70(%rbp), %rsi
callq 0x14340
movl $0x0, -0x3c(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e440
movq (%rax), %rcx
movq %rcx, -0x88(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x80(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x78(%rbp)
movl $0x2, %edi
leaq -0x88(%rbp), %rsi
callq 0x14340
movl $0x0, -0x38(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e360
movq (%rax), %rcx
movq %rcx, -0xa0(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x98(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x90(%rbp)
movl $0x3, %edi
leaq -0xa0(%rbp), %rsi
callq 0x14340
movl $0x0, -0x34(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e520
movq (%rax), %rcx
movq %rcx, -0xb8(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0xb0(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0xa8(%rbp)
movl $0x4, %edi
leaq -0xb8(%rbp), %rsi
callq 0x14340
movl $0x0, -0x30(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e2f0
movq (%rax), %rcx
movq %rcx, -0xd0(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0xc8(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0xc0(%rbp)
movl $0x5, %edi
leaq -0xd0(%rbp), %rsi
callq 0x14340
movl $0x0, -0x2c(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e580
movq (%rax), %rcx
movq %rcx, -0xe8(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0xe0(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0xd8(%rbp)
movl $0x6, %edi
leaq -0xe8(%rbp), %rsi
callq 0x14340
movl $0x0, -0x28(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e3d0
movq (%rax), %rcx
movq %rcx, -0x100(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0xf8(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0xf0(%rbp)
movl $0x7, %edi
leaq -0x100(%rbp), %rsi
callq 0x14340
movl $0x0, -0x24(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e4b0
movq (%rax), %rcx
movq %rcx, -0x118(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x110(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x108(%rbp)
movl $0x8, %edi
leaq -0x118(%rbp), %rsi
callq 0x14340
movl $0x0, -0x20(%rbp)
movq -0x10(%rbp), %rdi
callq 0x18e280
movq (%rax), %rcx
movq %rcx, -0x130(%rbp)
movq 0x8(%rax), %rcx
movq %rcx, -0x128(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x120(%rbp)
movl $0x9, %edi
leaq -0x130(%rbp), %rsi
callq 0x14340
movl $0x0, -0x1c(%rbp)
addq $0x130, %rsp            # imm = 0x130
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)