#version 460
#if defined(GL_ARB_gpu_shader_int64)
#extension GL_ARB_gpu_shader_int64 : require
#else
#error No extension available for 64-bit integers.
#endif
#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
#extension GL_EXT_shader_16bit_storage : require
layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;

layout(set = 0, binding = 0, std430) buffer SSBO
{
    uint64_t _m0[];
} _9;

layout(set = 0, binding = 1, std430) buffer _12_14
{
    uint16_t _m0[];
} _14;

void main()
{
    _9._m0[0u] = packUint2x32(bitfieldReverse(unpackUint2x32(_9._m0[0u])).yx);
    _14._m0[0u] = unpackUint2x16(bitfieldReverse(uint(_14._m0[0u]))).y;
    uvec2 _39 = uvec2(bitCount(unpackUint2x32(_9._m0[1u])));
    _9._m0[1u] = uint64_t(_39.x + _39.y);
    _14._m0[1u] = uint16_t(uint(bitCount(uint(_14._m0[1u]))));
}


#if 0
// SPIR-V disassembly
; SPIR-V
; Version: 1.3
; Generator: Unknown(30017); 21022
; Bound: 53
; Schema: 0
OpCapability Shader
OpCapability Int64
OpCapability Int16
OpCapability StorageBuffer16BitAccess
OpMemoryModel Logical GLSL450
OpEntryPoint GLCompute %3 "main"
OpExecutionMode %3 LocalSize 1 1 1
OpName %3 "main"
OpName %7 "SSBO"
OpName %12 "SSBO"
OpDecorate %6 ArrayStride 8
OpMemberDecorate %7 0 Offset 0
OpDecorate %7 Block
OpDecorate %9 DescriptorSet 0
OpDecorate %9 Binding 0
OpDecorate %11 ArrayStride 2
OpMemberDecorate %12 0 Offset 0
OpDecorate %12 Block
OpDecorate %14 DescriptorSet 0
OpDecorate %14 Binding 1
%1 = OpTypeVoid
%2 = OpTypeFunction %1
%5 = OpTypeInt 64 0
%6 = OpTypeRuntimeArray %5
%7 = OpTypeStruct %6
%8 = OpTypePointer StorageBuffer %7
%9 = OpVariable %8 StorageBuffer
%10 = OpTypeInt 16 0
%11 = OpTypeRuntimeArray %10
%12 = OpTypeStruct %11
%13 = OpTypePointer StorageBuffer %12
%14 = OpVariable %13 StorageBuffer
%15 = OpTypeInt 32 0
%16 = OpConstant %15 0
%17 = OpTypePointer StorageBuffer %5
%20 = OpTypeVector %15 2
%26 = OpTypePointer StorageBuffer %10
%29 = OpTypeVector %10 2
%35 = OpConstant %15 1
%3 = OpFunction %1 None %2
%4 = OpLabel
OpBranch %51
%51 = OpLabel
%18 = OpAccessChain %17 %9 %16 %16
%19 = OpLoad %5 %18
%21 = OpBitcast %20 %19
%22 = OpBitReverse %20 %21
%23 = OpVectorShuffle %20 %22 %22 1 0
%24 = OpBitcast %5 %23
%25 = OpAccessChain %17 %9 %16 %16
OpStore %25 %24
%27 = OpAccessChain %26 %14 %16 %16
%28 = OpLoad %10 %27
%30 = OpUConvert %15 %28
%31 = OpBitReverse %15 %30
%32 = OpBitcast %29 %31
%33 = OpCompositeExtract %10 %32 1
%34 = OpAccessChain %26 %14 %16 %16
OpStore %34 %33
%36 = OpAccessChain %17 %9 %16 %35
%37 = OpLoad %5 %36
%38 = OpBitcast %20 %37
%39 = OpBitCount %20 %38
%40 = OpCompositeExtract %15 %39 0
%41 = OpCompositeExtract %15 %39 1
%42 = OpIAdd %15 %40 %41
%43 = OpUConvert %5 %42
%44 = OpAccessChain %17 %9 %16 %35
OpStore %44 %43
%45 = OpAccessChain %26 %14 %16 %35
%46 = OpLoad %10 %45
%47 = OpUConvert %15 %46
%48 = OpBitCount %15 %47
%49 = OpUConvert %10 %48
%50 = OpAccessChain %26 %14 %16 %35
OpStore %50 %49
OpReturn
OpFunctionEnd
#endif
