int roi_set_query_list(char *buff, unsigned char numb,
                       unsigned char packet_id_list[]) {
  int i;
  buff[0] = (149);
  buff[1] = numb;
  for (i = 0; i < numb; i++) {
    buff[i + 2] = packet_id_list[i];
  }
  return 2 + numb;
}


x86 assembly (clang, -O0):
<roi_set_query_list>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %rdi,-0x8(%rbp)
mov    %al,-0x9(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movb   $0x95,(%rax)
mov    -0x9(%rbp),%cl
mov    -0x8(%rbp),%rax
mov    %cl,0x1(%rax)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
movzbl -0x9(%rbp),%ecx
cmp    %ecx,%eax
jge    1162 <roi_set_query_list+0x62>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    112a <roi_set_query_list+0x2a>
movzbl -0x9(%rbp),%eax
add    $0x2,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<roi_set_query_list>:
movb   $0x95,(%rdi)
mov    %sil,0x1(%rdi)
movzbl %sil,%eax
test   %esi,%esi
je     11a4 <roi_set_query_list+0xa4>
cmp    $0x8,%al
jb     1135 <roi_set_query_list+0x35>
lea    0x2(%rdi),%r8
lea    (%rdx,%rax,1),%rcx
cmp    %rcx,%r8
jae    11a8 <roi_set_query_list+0xa8>
lea    (%rax,%rdi,1),%rcx
add    $0x2,%rcx
cmp    %rdx,%rcx
jbe    11a8 <roi_set_query_list+0xa8>
xor    %r9d,%r9d
mov    %r9,%r8
not    %r8
add    %rax,%r8
mov    %rax,%rsi
and    $0x3,%rsi
je     1164 <roi_set_query_list+0x64>
nopw   0x0(%rax,%rax,1)
movzbl (%rdx,%r9,1),%ecx
mov    %cl,0x2(%rdi,%r9,1)
add    $0x1,%r9
add    $0xffffffffffffffff,%rsi
jne    1150 <roi_set_query_list+0x50>
cmp    $0x3,%r8
jb     11a4 <roi_set_query_list+0xa4>
nopw   0x0(%rax,%rax,1)
movzbl (%rdx,%r9,1),%ecx
mov    %cl,0x2(%rdi,%r9,1)
movzbl 0x1(%rdx,%r9,1),%ecx
mov    %cl,0x3(%rdi,%r9,1)
movzbl 0x2(%rdx,%r9,1),%ecx
mov    %cl,0x4(%rdi,%r9,1)
movzbl 0x3(%rdx,%r9,1),%ecx
mov    %cl,0x5(%rdi,%r9,1)
add    $0x4,%r9
cmp    %r9,%rax
jne    1170 <roi_set_query_list+0x70>
add    $0x2,%eax
ret
cmp    $0x20,%sil
jae    11b6 <roi_set_query_list+0xb6>
xor    %r9d,%r9d
jmp    1296 <roi_set_query_list+0x196>
mov    %eax,%r9d
and    $0xffffffe0,%r9d
movups (%rdx),%xmm0
movups 0x10(%rdx),%xmm1
movups %xmm0,0x2(%rdi)
movups %xmm1,0x12(%rdi)
cmp    $0x20,%r9
je     1285 <roi_set_query_list+0x185>
movups 0x20(%rdx),%xmm0
movups 0x30(%rdx),%xmm1
movups %xmm0,0x22(%rdi)
movups %xmm1,0x32(%rdi)
cmp    $0x40,%r9d
je     1285 <roi_set_query_list+0x185>
movups 0x40(%rdx),%xmm0
movups 0x50(%rdx),%xmm1
movups %xmm0,0x42(%rdi)
movups %xmm1,0x52(%rdi)
cmp    $0x60,%r9d
je     1285 <roi_set_query_list+0x185>
movups 0x60(%rdx),%xmm0
movups 0x70(%rdx),%xmm1
movups %xmm0,0x62(%rdi)
movups %xmm1,0x72(%rdi)
cmp    $0x80,%r9d
je     1285 <roi_set_query_list+0x185>
movups 0x80(%rdx),%xmm0
movups 0x90(%rdx),%xmm1
movups %xmm0,0x82(%rdi)
movups %xmm1,0x92(%rdi)
cmp    $0xa0,%r9d
je     1285 <roi_set_query_list+0x185>
movups 0xa0(%rdx),%xmm0
movups 0xb0(%rdx),%xmm1
movups %xmm0,0xa2(%rdi)
movups %xmm1,0xb2(%rdi)
cmp    $0xc0,%r9d
je     1285 <roi_set_query_list+0x185>
movups 0xc0(%rdx),%xmm0
movups 0xd0(%rdx),%xmm1
movups %xmm0,0xc2(%rdi)
movups %xmm1,0xd2(%rdi)
cmp    %rax,%r9
je     11a4 <roi_set_query_list+0xa4>
test   $0x18,%al
je     1138 <roi_set_query_list+0x38>
mov    %r9,%r8
mov    %eax,%r9d
and    $0xfffffff8,%r9d
mov    (%rdx,%r8,1),%rsi
mov    %rsi,0x2(%rdi,%r8,1)
add    $0x8,%r8
cmp    %r8,%r9
jne    12a0 <roi_set_query_list+0x1a0>
cmp    %rax,%r9
je     11a4 <roi_set_query_list+0xa4>
jmp    1138 <roi_set_query_list+0x38>

LLVM IR (-O0):
define i32 @roi_set_query_list(i8* %0, i8 zeroext %1, i8* %2) {
%4 = alloca i8*
%5 = alloca i8
%6 = alloca i8*
%7 = alloca i32
store i8* %0, i8** %4
store i8 %1, i8* %5
store i8* %2, i8** %6
%8 = load i8*, i8** %4
%9 = getelementptr inbounds i8, i8* %8, i64 0
store i8 -107, i8* %9
%10 = load i8, i8* %5
%11 = load i8*, i8** %4
%12 = getelementptr inbounds i8, i8* %11, i64 1
store i8 %10, i8* %12
store i32 0, i32* %7
br label %13
13: ; preds = %29, %3
%14 = load i32, i32* %7
%15 = load i8, i8* %5
%16 = zext i8 %15 to i32
%17 = icmp slt i32 %14, %16
br i1 %17, label %18, label %32
18: ; preds = %13
%19 = load i8*, i8** %6
%20 = load i32, i32* %7
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i8, i8* %19, i64 %21
%23 = load i8, i8* %22
%24 = load i8*, i8** %4
%25 = load i32, i32* %7
%26 = add nsw i32 %25, 2
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds i8, i8* %24, i64 %27
store i8 %23, i8* %28
br label %29
29: ; preds = %18
%30 = load i32, i32* %7
%31 = add nsw i32 %30, 1
store i32 %31, i32* %7
br label %13
32: ; preds = %13
%33 = load i8, i8* %5
%34 = zext i8 %33 to i32
%35 = add nsw i32 2, %34
ret i32 %35
}

LLVM IR (-O2):
define i32 @roi_set_query_list(i8* nocapture writeonly %0, i8 zeroext %1, i8* nocapture %2) {
store i8 -107, i8* %0
%4 = getelementptr inbounds i8, i8* %0, i64 1
store i8 %1, i8* %4
%5 = icmp eq i8 %1, 0
br i1 %5, label %164, label %6
6: ; preds = %3
%7 = zext i8 %1 to i64
%8 = icmp ult i8 %1, 8
br i1 %8, label %122, label %9
9: ; preds = %6
%10 = getelementptr i8, i8* %0, i64 2
%11 = add nuw nsw i64 %7, 2
%12 = getelementptr i8, i8* %0, i64 %11
%13 = getelementptr i8, i8* %2, i64 %7
%14 = icmp ult i8* %10, %13
%15 = icmp ugt i8* %12, %2
%16 = and i1 %14, %15
br i1 %16, label %122, label %17
17: ; preds = %9
%18 = icmp ult i8 %1, 32
br i1 %18, label %107, label %19
19: ; preds = %17
%20 = and i64 %7, 224
%21 = bitcast i8* %2 to <16 x i8>*
%22 = load <16 x i8>, <16 x i8>* %21
%23 = getelementptr inbounds i8, i8* %2, i64 16
%24 = bitcast i8* %23 to <16 x i8>*
%25 = load <16 x i8>, <16 x i8>* %24
%26 = getelementptr inbounds i8, i8* %0, i64 2
%27 = bitcast i8* %26 to <16 x i8>*
store <16 x i8> %22, <16 x i8>* %27
%28 = getelementptr inbounds i8, i8* %0, i64 18
%29 = bitcast i8* %28 to <16 x i8>*
store <16 x i8> %25, <16 x i8>* %29
%30 = icmp eq i64 %20, 32
br i1 %30, label %102, label %31
31: ; preds = %19
%32 = getelementptr inbounds i8, i8* %2, i64 32
%33 = bitcast i8* %32 to <16 x i8>*
%34 = load <16 x i8>, <16 x i8>* %33
%35 = getelementptr inbounds i8, i8* %2, i64 48
%36 = bitcast i8* %35 to <16 x i8>*
%37 = load <16 x i8>, <16 x i8>* %36
%38 = getelementptr inbounds i8, i8* %0, i64 34
%39 = bitcast i8* %38 to <16 x i8>*
store <16 x i8> %34, <16 x i8>* %39
%40 = getelementptr inbounds i8, i8* %0, i64 50
%41 = bitcast i8* %40 to <16 x i8>*
store <16 x i8> %37, <16 x i8>* %41
%42 = icmp eq i64 %20, 64
br i1 %42, label %102, label %43
43: ; preds = %31
%44 = getelementptr inbounds i8, i8* %2, i64 64
%45 = bitcast i8* %44 to <16 x i8>*
%46 = load <16 x i8>, <16 x i8>* %45
%47 = getelementptr inbounds i8, i8* %2, i64 80
%48 = bitcast i8* %47 to <16 x i8>*
%49 = load <16 x i8>, <16 x i8>* %48
%50 = getelementptr inbounds i8, i8* %0, i64 66
%51 = bitcast i8* %50 to <16 x i8>*
store <16 x i8> %46, <16 x i8>* %51
%52 = getelementptr inbounds i8, i8* %0, i64 82
%53 = bitcast i8* %52 to <16 x i8>*
store <16 x i8> %49, <16 x i8>* %53
%54 = icmp eq i64 %20, 96
br i1 %54, label %102, label %55
55: ; preds = %43
%56 = getelementptr inbounds i8, i8* %2, i64 96
%57 = bitcast i8* %56 to <16 x i8>*
%58 = load <16 x i8>, <16 x i8>* %57
%59 = getelementptr inbounds i8, i8* %2, i64 112
%60 = bitcast i8* %59 to <16 x i8>*
%61 = load <16 x i8>, <16 x i8>* %60
%62 = getelementptr inbounds i8, i8* %0, i64 98
%63 = bitcast i8* %62 to <16 x i8>*
store <16 x i8> %58, <16 x i8>* %63
%64 = getelementptr inbounds i8, i8* %0, i64 114
%65 = bitcast i8* %64 to <16 x i8>*
store <16 x i8> %61, <16 x i8>* %65
%66 = icmp eq i64 %20, 128
br i1 %66, label %102, label %67
67: ; preds = %55
%68 = getelementptr inbounds i8, i8* %2, i64 128
%69 = bitcast i8* %68 to <16 x i8>*
%70 = load <16 x i8>, <16 x i8>* %69
%71 = getelementptr inbounds i8, i8* %2, i64 144
%72 = bitcast i8* %71 to <16 x i8>*
%73 = load <16 x i8>, <16 x i8>* %72
%74 = getelementptr inbounds i8, i8* %0, i64 130
%75 = bitcast i8* %74 to <16 x i8>*
store <16 x i8> %70, <16 x i8>* %75
%76 = getelementptr inbounds i8, i8* %0, i64 146
%77 = bitcast i8* %76 to <16 x i8>*
store <16 x i8> %73, <16 x i8>* %77
%78 = icmp eq i64 %20, 160
br i1 %78, label %102, label %79
79: ; preds = %67
%80 = getelementptr inbounds i8, i8* %2, i64 160
%81 = bitcast i8* %80 to <16 x i8>*
%82 = load <16 x i8>, <16 x i8>* %81
%83 = getelementptr inbounds i8, i8* %2, i64 176
%84 = bitcast i8* %83 to <16 x i8>*
%85 = load <16 x i8>, <16 x i8>* %84
%86 = getelementptr inbounds i8, i8* %0, i64 162
%87 = bitcast i8* %86 to <16 x i8>*
store <16 x i8> %82, <16 x i8>* %87
%88 = getelementptr inbounds i8, i8* %0, i64 178
%89 = bitcast i8* %88 to <16 x i8>*
store <16 x i8> %85, <16 x i8>* %89
%90 = icmp eq i64 %20, 192
br i1 %90, label %102, label %91
91: ; preds = %79
%92 = getelementptr inbounds i8, i8* %2, i64 192
%93 = bitcast i8* %92 to <16 x i8>*
%94 = load <16 x i8>, <16 x i8>* %93
%95 = getelementptr inbounds i8, i8* %2, i64 208
%96 = bitcast i8* %95 to <16 x i8>*
%97 = load <16 x i8>, <16 x i8>* %96
%98 = getelementptr inbounds i8, i8* %0, i64 194
%99 = bitcast i8* %98 to <16 x i8>*
store <16 x i8> %94, <16 x i8>* %99
%100 = getelementptr inbounds i8, i8* %0, i64 210
%101 = bitcast i8* %100 to <16 x i8>*
store <16 x i8> %97, <16 x i8>* %101
br label %102
102: ; preds = %91, %79, %67, %55, %43, %31, %19
%103 = icmp eq i64 %20, %7
br i1 %103, label %164, label %104
104: ; preds = %102
%105 = and i64 %7, 24
%106 = icmp eq i64 %105, 0
br i1 %106, label %122, label %107
107: ; preds = %17, %104
%108 = phi i64 [ %20, %104 ], [ 0, %17 ]
%109 = and i64 %7, 248
br label %110
110: ; preds = %110, %107
%111 = phi i64 [ %108, %107 ], [ %118, %110 ]
%112 = getelementptr inbounds i8, i8* %2, i64 %111
%113 = bitcast i8* %112 to <8 x i8>*
%114 = load <8 x i8>, <8 x i8>* %113
%115 = or i64 %111, 2
%116 = getelementptr inbounds i8, i8* %0, i64 %115
%117 = bitcast i8* %116 to <8 x i8>*
store <8 x i8> %114, <8 x i8>* %117
%118 = add nuw i64 %111, 8
%119 = icmp eq i64 %118, %109
br i1 %119, label %120, label %110
120: ; preds = %110
%121 = icmp eq i64 %109, %7
br i1 %121, label %164, label %122
122: ; preds = %9, %6, %104, %120
%123 = phi i64 [ 0, %6 ], [ 0, %9 ], [ %20, %104 ], [ %109, %120 ]
%124 = xor i64 %123, -1
%125 = add nsw i64 %124, %7
%126 = and i64 %7, 3
%127 = icmp eq i64 %126, 0
br i1 %127, label %138, label %128
128: ; preds = %122, %128
%129 = phi i64 [ %135, %128 ], [ %123, %122 ]
%130 = phi i64 [ %136, %128 ], [ 0, %122 ]
%131 = getelementptr inbounds i8, i8* %2, i64 %129
%132 = load i8, i8* %131
%133 = add nuw nsw i64 %129, 2
%134 = getelementptr inbounds i8, i8* %0, i64 %133
store i8 %132, i8* %134
%135 = add nuw nsw i64 %129, 1
%136 = add i64 %130, 1
%137 = icmp eq i64 %136, %126
br i1 %137, label %138, label %128
138: ; preds = %128, %122
%139 = phi i64 [ %123, %122 ], [ %135, %128 ]
%140 = icmp ult i64 %125, 3
br i1 %140, label %164, label %141
141: ; preds = %138, %141
%142 = phi i64 [ %162, %141 ], [ %139, %138 ]
%143 = getelementptr inbounds i8, i8* %2, i64 %142
%144 = load i8, i8* %143
%145 = add nuw nsw i64 %142, 2
%146 = getelementptr inbounds i8, i8* %0, i64 %145
store i8 %144, i8* %146
%147 = add nuw nsw i64 %142, 1
%148 = getelementptr inbounds i8, i8* %2, i64 %147
%149 = load i8, i8* %148
%150 = add nuw nsw i64 %142, 3
%151 = getelementptr inbounds i8, i8* %0, i64 %150
store i8 %149, i8* %151
%152 = add nuw nsw i64 %142, 2
%153 = getelementptr inbounds i8, i8* %2, i64 %152
%154 = load i8, i8* %153
%155 = add nuw nsw i64 %142, 4
%156 = getelementptr inbounds i8, i8* %0, i64 %155
store i8 %154, i8* %156
%157 = add nuw nsw i64 %142, 3
%158 = getelementptr inbounds i8, i8* %2, i64 %157
%159 = load i8, i8* %158
%160 = add nuw nsw i64 %142, 5
%161 = getelementptr inbounds i8, i8* %0, i64 %160
store i8 %159, i8* %161
%162 = add nuw nsw i64 %142, 4
%163 = icmp eq i64 %162, %7
br i1 %163, label %164, label %141
164: ; preds = %138, %141, %102, %120, %3
%165 = zext i8 %1 to i32
%166 = add nuw nsw i32 %165, 2
ret i32 %166
}