// File: stetre[P]moonvulkan/src/flags.c
// Function: pushformatfeatureflags
static int pushformatfeatureflags(lua_State *L, VkFlags64 flags)
    {
    int n = 0;

#define CASE(CODE,str) do { if( flags & CODE) { lua_pushstring(L, str); n++; } } while(0)
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT, "sampled image");
        CASE(VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT, "storage image");
        CASE(VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT, "storage image atomic");
        CASE(VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT, "uniform texel buffer");
        CASE(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT, "storage texel buffer");
        CASE(VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT, "storage texel buffer atomic");
        CASE(VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT, "vertex buffer");
        CASE(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT, "color attachment");
        CASE(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT, "color attachment blend");
        CASE(VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT, "depth stencil attachment");
        CASE(VK_FORMAT_FEATURE_BLIT_SRC_BIT, "blit src");
        CASE(VK_FORMAT_FEATURE_BLIT_DST_BIT, "blit dst");
        CASE(VK_FORMAT_FEATURE_TRANSFER_SRC_BIT, "transfer src");
        CASE(VK_FORMAT_FEATURE_TRANSFER_DST_BIT, "transfer dst");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT, "sampled image filter linear");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT, "sampled image filter minmax");
        CASE(VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT,"midpoint chroma samples");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,"sampled image ycbcr conversion linear filter");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,"sampled image ycbcr conversion separate reconstruction filter");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,"sampled image ycbcr conversion chroma reconstruction explicit");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,"sampled image ycbcr conversion chroma reconstruction explicit forceable");
        CASE(VK_FORMAT_FEATURE_DISJOINT_BIT,"disjoint");
        CASE(VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT,"cosited chroma samples");
        CASE(VK_FORMAT_FEATURE_FRAGMENT_DENSITY_MAP_BIT, "fragment density map");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT, "sampled image filter cubic");
        CASE(VK_FORMAT_FEATURE_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT, "acceleration structure vertex buffer");
        CASE(VK_FORMAT_FEATURE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT, "fragment shading rate attachment");
        CASE(VK_FORMAT_FEATURE_STORAGE_READ_WITHOUT_FORMAT_BIT, "storage read without format");
        CASE(VK_FORMAT_FEATURE_STORAGE_WRITE_WITHOUT_FORMAT_BIT, "storage write without format");
        CASE(VK_FORMAT_FEATURE_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT, "sampled image depth comparison");
#undef CASE

    return n;
    }

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
movl $0x0, 0x4(%rsp)
movq 0x8(%rsp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x4cc81
movq 0x10(%rsp), %rdi
leaq 0x8a0ab(%rip), %rsi     # 0xd6d1c
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cc83
jmp 0x4cc85
movq 0x8(%rsp), %rax
andq $0x2, %rax
cmpq $0x0, %rax
je 0x4ccb0
movq 0x10(%rsp), %rdi
leaq 0x8a0a8(%rip), %rsi     # 0xd6d48
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4ccb2
jmp 0x4ccb4
movq 0x8(%rsp), %rax
andq $0x4, %rax
cmpq $0x0, %rax
je 0x4ccdf
movq 0x10(%rsp), %rdi
leaq 0x91a90(%rip), %rsi     # 0xde75f
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cce1
jmp 0x4cce3
movq 0x8(%rsp), %rax
andq $0x8, %rax
cmpq $0x0, %rax
je 0x4cd0e
movq 0x10(%rsp), %rdi
leaq 0x8a076(%rip), %rsi     # 0xd6d74
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cd10
jmp 0x4cd12
movq 0x8(%rsp), %rax
andq $0x10, %rax
cmpq $0x0, %rax
je 0x4cd3d
movq 0x10(%rsp), %rdi
leaq 0x8a081(%rip), %rsi     # 0xd6dae
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cd3f
jmp 0x4cd41
movq 0x8(%rsp), %rax
andq $0x20, %rax
cmpq $0x0, %rax
je 0x4cd6c
movq 0x10(%rsp), %rdi
leaq 0x91a18(%rip), %rsi     # 0xde774
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cd6e
jmp 0x4cd70
movq 0x8(%rsp), %rax
andq $0x40, %rax
cmpq $0x0, %rax
je 0x4cd9b
movq 0x10(%rsp), %rdi
leaq 0x91bb8(%rip), %rsi     # 0xde943
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cd9d
jmp 0x4cd9f
movq 0x8(%rsp), %rax
andq $0x80, %rax
cmpq $0x0, %rax
je 0x4cdcc
movq 0x10(%rsp), %rdi
leaq 0x9194f(%rip), %rsi     # 0xde70b
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cdce
jmp 0x4cdd0
movq 0x8(%rsp), %rax
andq $0x100, %rax            # imm = 0x100
cmpq $0x0, %rax
je 0x4cdfd
movq 0x10(%rsp), %rdi
leaq 0x919a3(%rip), %rsi     # 0xde790
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cdff
jmp 0x4ce01
movq 0x8(%rsp), %rax
andq $0x200, %rax            # imm = 0x200
cmpq $0x0, %rax
je 0x4ce2e
movq 0x10(%rsp), %rdi
leaq 0x918fe(%rip), %rsi     # 0xde71c
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4ce30
jmp 0x4ce32
movq 0x8(%rsp), %rax
andq $0x400, %rax            # imm = 0x400
cmpq $0x0, %rax
je 0x4ce5f
movq 0x10(%rsp), %rdi
leaq 0x91958(%rip), %rsi     # 0xde7a7
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4ce61
jmp 0x4ce63
movq 0x8(%rsp), %rax
andq $0x800, %rax            # imm = 0x800
cmpq $0x0, %rax
je 0x4ce90
movq 0x10(%rsp), %rdi
leaq 0x91930(%rip), %rsi     # 0xde7b0
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4ce92
jmp 0x4ce94
movq 0x8(%rsp), %rax
andq $0x4000, %rax           # imm = 0x4000
cmpq $0x0, %rax
je 0x4cec1
movq 0x10(%rsp), %rdi
leaq 0x9128b(%rip), %rsi     # 0xde13c
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cec3
jmp 0x4cec5
movq 0x8(%rsp), %rax
andq $0x8000, %rax           # imm = 0x8000
cmpq $0x0, %rax
je 0x4cef2
movq 0x10(%rsp), %rdi
leaq 0x91267(%rip), %rsi     # 0xde149
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cef4
jmp 0x4cef6
movq 0x8(%rsp), %rax
andq $0x1000, %rax           # imm = 0x1000
cmpq $0x0, %rax
je 0x4cf23
movq 0x10(%rsp), %rdi
leaq 0x918a6(%rip), %rsi     # 0xde7b9
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cf25
jmp 0x4cf27
movq 0x8(%rsp), %rax
andq $0x10000, %rax          # imm = 0x10000
cmpq $0x0, %rax
je 0x4cf54
movq 0x10(%rsp), %rdi
leaq 0x91891(%rip), %rsi     # 0xde7d5
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cf56
jmp 0x4cf58
movq 0x8(%rsp), %rax
andq $0x20000, %rax          # imm = 0x20000
cmpq $0x0, %rax
je 0x4cf85
movq 0x10(%rsp), %rdi
leaq 0x9187c(%rip), %rsi     # 0xde7f1
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cf87
jmp 0x4cf89
movq 0x8(%rsp), %rax
andq $0x40000, %rax          # imm = 0x40000
cmpq $0x0, %rax
je 0x4cfb6
movq 0x10(%rsp), %rdi
leaq 0x91863(%rip), %rsi     # 0xde809
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cfb8
jmp 0x4cfba
movq 0x8(%rsp), %rax
andq $0x80000, %rax          # imm = 0x80000
cmpq $0x0, %rax
je 0x4cfe7
movq 0x10(%rsp), %rdi
leaq 0x9185f(%rip), %rsi     # 0xde836
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4cfe9
jmp 0x4cfeb
movq 0x8(%rsp), %rax
andq $0x100000, %rax         # imm = 0x100000
cmpq $0x0, %rax
je 0x4d018
movq 0x10(%rsp), %rdi
leaq 0x9186c(%rip), %rsi     # 0xde874
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d01a
jmp 0x4d01c
movq 0x8(%rsp), %rax
andq $0x200000, %rax         # imm = 0x200000
cmpq $0x0, %rax
je 0x4d049
movq 0x10(%rsp), %rdi
leaq 0x91879(%rip), %rsi     # 0xde8b2
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d04b
jmp 0x4d04d
movq 0x8(%rsp), %rax
andq $0x400000, %rax         # imm = 0x400000
cmpq $0x0, %rax
je 0x4d07a
movq 0x10(%rsp), %rdi
leaq 0x8aced(%rip), %rsi     # 0xd7d57
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d07c
jmp 0x4d07e
movq 0x8(%rsp), %rax
andq $0x800000, %rax         # imm = 0x800000
cmpq $0x0, %rax
je 0x4d0ab
movq 0x10(%rsp), %rdi
leaq 0x9185f(%rip), %rsi     # 0xde8fa
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d0ad
jmp 0x4d0af
movq 0x8(%rsp), %rax
andq $0x1000000, %rax        # imm = 0x1000000
cmpq $0x0, %rax
je 0x4d0dc
movq 0x10(%rsp), %rdi
leaq 0x9167e(%rip), %rsi     # 0xde74a
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d0de
jmp 0x4d0e0
movq 0x8(%rsp), %rax
andq $0x2000, %rax           # imm = 0x2000
cmpq $0x0, %rax
je 0x4d10d
movq 0x10(%rsp), %rdi
leaq 0x91814(%rip), %rsi     # 0xde911
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d10f
jmp 0x4d111
movq 0x8(%rsp), %rax
andq $0x20000000, %rax       # imm = 0x20000000
cmpq $0x0, %rax
je 0x4d13e
movq 0x10(%rsp), %rdi
leaq 0x917fe(%rip), %rsi     # 0xde92c
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d140
jmp 0x4d142
movq 0x8(%rsp), %rax
andq $0x40000000, %rax       # imm = 0x40000000
cmpq $0x0, %rax
je 0x4d16f
movq 0x10(%rsp), %rdi
leaq 0x91441(%rip), %rsi     # 0xde5a0
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d171
jmp 0x4d173
movabsq $0x80000000, %rax       # imm = 0x80000000
andq 0x8(%rsp), %rax
cmpq $0x0, %rax
je 0x4d1a4
movq 0x10(%rsp), %rdi
leaq 0x917bd(%rip), %rsi     # 0xde951
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d1a6
jmp 0x4d1a8
movabsq $0x100000000, %rax      # imm = 0x100000000
andq 0x8(%rsp), %rax
cmpq $0x0, %rax
je 0x4d1d9
movq 0x10(%rsp), %rdi
leaq 0x917a4(%rip), %rsi     # 0xde96d
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d1db
jmp 0x4d1dd
movabsq $0x200000000, %rax      # imm = 0x200000000
andq 0x8(%rsp), %rax
cmpq $0x0, %rax
je 0x4d20e
movq 0x10(%rsp), %rdi
leaq 0x9178c(%rip), %rsi     # 0xde98a
callq 0x1a420
movl 0x4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x4(%rsp)
jmp 0x4d210
movl 0x4(%rsp), %eax
addq $0x18, %rsp
retq
nopl (%rax)