// File: oknenavin[P]cxon/test/../src/cxon/lang/cbor/node/node.hxx
// Function: cxon::cbor::basic_node<cxon::cbor::node_traits<std::allocator<char>>>::swap(cxon::cbor::basic_node<cxon::cbor::node_traits<std::allocator<char>>>&)
void swap(basic_node& o) {
                using st = void (*)(basic_node& , basic_node&);
                static constexpr st swap[12][12] = {
#                   define S(...) value::swap<basic_node, __VA_ARGS__>
                        {S(map, map), S(map,   array), S(map,   tag), S(map,   bytes), S(map,   text), S(map,   real), S(map,   sint), S(map,   uint), S(map,    simple), S(map,     boolean), S(map,     null), S(map,       undefined)},
                        {    nullptr, S(array, array), S(array, tag), S(array, bytes), S(array, text), S(array, real), S(array, sint), S(array, uint), S(array,  simple), S(array,   boolean), S(array,   null), S(array,     undefined)},
                        {    nullptr,         nullptr, S(tag,   tag), S(tag,   bytes), S(tag,   text), S(tag,   real), S(tag,   sint), S(tag,   uint), S(tag,    simple), S(tag,     boolean), S(tag,     null), S(tag,       undefined)},
                        {    nullptr,         nullptr,       nullptr, S(bytes, bytes), S(bytes, text), S(bytes, real), S(bytes, sint), S(bytes, uint), S(bytes,  simple), S(bytes,   boolean), S(bytes,   null), S(bytes,     undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr, S(text,  text), S(text,  real), S(text,  sint), S(text,  uint), S(text,   simple), S(text,    boolean), S(text,    null), S(text,      undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr,        nullptr, S(real,  real), S(real,  sint), S(real,  uint), S(real,   simple), S(real,    boolean), S(real,    null), S(real,      undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr,        nullptr,        nullptr, S(sint,  sint), S(sint,  uint), S(sint,   simple), S(sint,    boolean), S(sint,    null), S(sint,      undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr,        nullptr,        nullptr,        nullptr, S(uint,  uint), S(uint,   simple), S(uint,    boolean), S(uint,    null), S(uint,      undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr,        nullptr,        nullptr,        nullptr,        nullptr, S(simple, simple), S(simple,  boolean), S(simple,  null), S(simple,    undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr,        nullptr,        nullptr,        nullptr,        nullptr,           nullptr, S(boolean, boolean), S(boolean, null), S(boolean,   undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr,        nullptr,        nullptr,        nullptr,        nullptr,           nullptr,             nullptr, S(null,    null), S(null,      undefined)},
                        {    nullptr,         nullptr,       nullptr,         nullptr,        nullptr,        nullptr,        nullptr,        nullptr,           nullptr,             nullptr,          nullptr, S(undefined, undefined)}
#                   undef S
                };
                kind_ < o.kind_ ?
                    swap[(int)kind_][(int)o.kind_](*this, o) :
                    swap[(int)o.kind_][(int)kind_](o, *this)
                ;
            }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x18(%rbp)
movl 0x20(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0x20(%rcx), %eax
jge 0x7d3ae
movq -0x18(%rbp), %rdi
movslq 0x20(%rdi), %rcx
leaq 0x9859d(%rip), %rax     # 0x115930
imulq $0x60, %rcx, %rcx
addq %rcx, %rax
movq -0x10(%rbp), %rcx
movslq 0x20(%rcx), %rcx
movq (%rax,%rcx,8), %rax
movq -0x10(%rbp), %rsi
callq *%rax
jmp 0x7d3d6
movq -0x18(%rbp), %rsi
movq -0x10(%rbp), %rax
movslq 0x20(%rax), %rcx
leaq 0x9856f(%rip), %rax     # 0x115930
imulq $0x60, %rcx, %rcx
addq %rcx, %rax
movslq 0x20(%rsi), %rcx
movq (%rax,%rcx,8), %rax
movq -0x10(%rbp), %rdi
callq *%rax
addq $0x20, %rsp
popq %rbp
retq
nopl (%rax)