unsigned long long
nlm_crypto_form_pkt_ctrl_desc(unsigned int hmac, unsigned int hashalg,
                              unsigned int hashmode, unsigned int cipheralg,
                              unsigned int ciphermode,
                              unsigned int arc4_cipherkeylen,
                              unsigned int arc4_keyinit, unsigned int cfbmask) {
  return ((unsigned long long)(hmac) << (61)) |
         ((unsigned long long)(hashalg) << (52)) |
         ((unsigned long long)(hashmode) << (43)) |
         ((unsigned long long)(cipheralg) << (34)) |
         ((unsigned long long)(ciphermode) << (25)) |
         ((unsigned long long)(arc4_cipherkeylen) << (18)) |
         ((unsigned long long)(arc4_keyinit) << (17)) |
         ((unsigned long long)(cfbmask) << (0));
}


x86 assembly (clang, -O0):
<nlm_crypto_form_pkt_ctrl_desc>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8d,-0x14(%rbp)
mov    %r9d,-0x18(%rbp)
mov    -0x4(%rbp),%eax
shl    $0x3d,%rax
mov    -0x8(%rbp),%ecx
shl    $0x34,%rcx
or     %rcx,%rax
mov    -0xc(%rbp),%ecx
shl    $0x2b,%rcx
or     %rcx,%rax
mov    -0x10(%rbp),%ecx
shl    $0x22,%rcx
or     %rcx,%rax
mov    -0x14(%rbp),%ecx
shl    $0x19,%rcx
or     %rcx,%rax
mov    -0x18(%rbp),%ecx
shl    $0x12,%rcx
or     %rcx,%rax
mov    0x10(%rbp),%ecx
shl    $0x11,%rcx
or     %rcx,%rax
mov    0x18(%rbp),%ecx
shl    $0x0,%rcx
or     %rcx,%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<nlm_crypto_form_pkt_ctrl_desc>:
mov    0x10(%rsp),%r10d
mov    0x8(%rsp),%eax
shl    $0x3d,%rdi
shl    $0x34,%rsi
or     %rdi,%rsi
shl    $0x2b,%rdx
shl    $0x22,%rcx
or     %rdx,%rcx
or     %rsi,%rcx
mov    %r8d,%edx
shl    $0x19,%rdx
mov    %r9d,%esi
shl    $0x12,%rsi
or     %rdx,%rsi
or     %rcx,%rsi
or     %r10,%rsi
shl    $0x11,%rax
or     %rsi,%rax
ret

LLVM IR (-O0):
define i64 @nlm_crypto_form_pkt_ctrl_desc(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7) {
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
store i32 %0, i32* %9
store i32 %1, i32* %10
store i32 %2, i32* %11
store i32 %3, i32* %12
store i32 %4, i32* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
store i32 %7, i32* %16
%17 = load i32, i32* %9
%18 = zext i32 %17 to i64
%19 = shl i64 %18, 61
%20 = load i32, i32* %10
%21 = zext i32 %20 to i64
%22 = shl i64 %21, 52
%23 = or i64 %19, %22
%24 = load i32, i32* %11
%25 = zext i32 %24 to i64
%26 = shl i64 %25, 43
%27 = or i64 %23, %26
%28 = load i32, i32* %12
%29 = zext i32 %28 to i64
%30 = shl i64 %29, 34
%31 = or i64 %27, %30
%32 = load i32, i32* %13
%33 = zext i32 %32 to i64
%34 = shl i64 %33, 25
%35 = or i64 %31, %34
%36 = load i32, i32* %14
%37 = zext i32 %36 to i64
%38 = shl i64 %37, 18
%39 = or i64 %35, %38
%40 = load i32, i32* %15
%41 = zext i32 %40 to i64
%42 = shl i64 %41, 17
%43 = or i64 %39, %42
%44 = load i32, i32* %16
%45 = zext i32 %44 to i64
%46 = shl i64 %45, 0
%47 = or i64 %43, %46
ret i64 %47
}

LLVM IR (-O2):
define i64 @nlm_crypto_form_pkt_ctrl_desc(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7) {
%9 = zext i32 %0 to i64
%10 = shl i64 %9, 61
%11 = zext i32 %1 to i64
%12 = shl i64 %11, 52
%13 = or i64 %12, %10
%14 = zext i32 %2 to i64
%15 = shl i64 %14, 43
%16 = or i64 %13, %15
%17 = zext i32 %3 to i64
%18 = shl i64 %17, 34
%19 = or i64 %16, %18
%20 = zext i32 %4 to i64
%21 = shl nuw nsw i64 %20, 25
%22 = or i64 %19, %21
%23 = zext i32 %5 to i64
%24 = shl nuw nsw i64 %23, 18
%25 = or i64 %22, %24
%26 = zext i32 %6 to i64
%27 = shl nuw nsw i64 %26, 17
%28 = or i64 %25, %27
%29 = zext i32 %7 to i64
%30 = or i64 %28, %29
ret i64 %30
}