void init_Transmit_Buffer(unsigned long sttp_MsgRegTypeBuf, unsigned char num,
                          unsigned short MIDL, unsigned short MIDH) {
  *((unsigned char *)(sttp_MsgRegTypeBuf + 0x09)) = 0x01;
  *((unsigned short *)(sttp_MsgRegTypeBuf + 0x0a)) = MIDL;
  *((unsigned short *)(sttp_MsgRegTypeBuf + 0x0c)) = MIDH;
  *((unsigned char *)(sttp_MsgRegTypeBuf + 0x08)) = 0x08;
  {
    unsigned char u1t_datactr;
    for (u1t_datactr = 0; u1t_datactr < num; u1t_datactr++) {
      *((unsigned char *)(sttp_MsgRegTypeBuf + 0x00 + u1t_datactr)) = 0x00;
    }
  }
  *((unsigned short *)(sttp_MsgRegTypeBuf + 0x0e)) = 0x001e;
  *((unsigned short *)(sttp_MsgRegTypeBuf + 0x0e)) = 0x0100;
}


x86 assembly (clang, -O0):
<init_Transmit_Buffer>:
push   %rbp
mov    %rsp,%rbp
mov    %cx,%ax
mov    %dx,%cx
mov    %sil,%dl
mov    %rdi,-0x8(%rbp)
mov    %dl,-0x9(%rbp)
mov    %cx,-0xc(%rbp)
mov    %ax,-0xe(%rbp)
mov    -0x8(%rbp),%rax
movb   $0x1,0x9(%rax)
mov    -0xc(%rbp),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0xa(%rax)
mov    -0xe(%rbp),%cx
mov    -0x8(%rbp),%rax
mov    %cx,0xc(%rax)
mov    -0x8(%rbp),%rax
movb   $0x8,0x8(%rax)
movb   $0x0,-0xf(%rbp)
movzbl -0xf(%rbp),%eax
movzbl -0x9(%rbp),%ecx
cmp    %ecx,%eax
jge    1177 <init_Transmit_Buffer+0x77>
mov    -0x8(%rbp),%rax
add    $0x0,%rax
movzbl -0xf(%rbp),%ecx
add    %rcx,%rax
movb   $0x0,(%rax)
mov    -0xf(%rbp),%al
add    $0x1,%al
mov    %al,-0xf(%rbp)
jmp    1148 <init_Transmit_Buffer+0x48>
mov    -0x8(%rbp),%rax
movw   $0x1e,0xe(%rax)
mov    -0x8(%rbp),%rax
movw   $0x100,0xe(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_Transmit_Buffer>:
mov    %dx,0xa(%rdi)
mov    %cx,0xc(%rdi)
movw   $0x108,0x8(%rdi)
test   %esi,%esi
je     115d <init_Transmit_Buffer+0x5d>
movzbl %sil,%edx
lea    -0x1(%rdx),%rcx
mov    %edx,%eax
and    $0x7,%eax
cmp    $0x7,%rcx
jae    1129 <init_Transmit_Buffer+0x29>
xor    %ecx,%ecx
jmp    1141 <init_Transmit_Buffer+0x41>
and    $0xfffffff8,%edx
xor    %ecx,%ecx
xchg   %ax,%ax
movq   $0x0,(%rdi,%rcx,1)
add    $0x8,%rcx
cmp    %rcx,%rdx
jne    1130 <init_Transmit_Buffer+0x30>
test   %rax,%rax
je     115d <init_Transmit_Buffer+0x5d>
add    %rdi,%rcx
nopl   0x0(%rax)
movb   $0x0,(%rcx)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rax
jne    1150 <init_Transmit_Buffer+0x50>
movw   $0x100,0xe(%rdi)
ret

LLVM IR (-O0):
define void @init_Transmit_Buffer(i64 %0, i8 zeroext %1, i16 zeroext %2, i16 zeroext %3) {
%5 = alloca i64
%6 = alloca i8
%7 = alloca i16
%8 = alloca i16
%9 = alloca i8
store i64 %0, i64* %5
store i8 %1, i8* %6
store i16 %2, i16* %7
store i16 %3, i16* %8
%10 = load i64, i64* %5
%11 = add i64 %10, 9
%12 = inttoptr i64 %11 to i8*
store i8 1, i8* %12
%13 = load i16, i16* %7
%14 = load i64, i64* %5
%15 = add i64 %14, 10
%16 = inttoptr i64 %15 to i16*
store i16 %13, i16* %16
%17 = load i16, i16* %8
%18 = load i64, i64* %5
%19 = add i64 %18, 12
%20 = inttoptr i64 %19 to i16*
store i16 %17, i16* %20
%21 = load i64, i64* %5
%22 = add i64 %21, 8
%23 = inttoptr i64 %22 to i8*
store i8 8, i8* %23
store i8 0, i8* %9
br label %24
24: ; preds = %37, %4
%25 = load i8, i8* %9
%26 = zext i8 %25 to i32
%27 = load i8, i8* %6
%28 = zext i8 %27 to i32
%29 = icmp slt i32 %26, %28
br i1 %29, label %30, label %40
30: ; preds = %24
%31 = load i64, i64* %5
%32 = add i64 %31, 0
%33 = load i8, i8* %9
%34 = zext i8 %33 to i64
%35 = add i64 %32, %34
%36 = inttoptr i64 %35 to i8*
store i8 0, i8* %36
br label %37
37: ; preds = %30
%38 = load i8, i8* %9
%39 = add i8 %38, 1
store i8 %39, i8* %9
br label %24
40: ; preds = %24
%41 = load i64, i64* %5
%42 = add i64 %41, 14
%43 = inttoptr i64 %42 to i16*
store i16 30, i16* %43
%44 = load i64, i64* %5
%45 = add i64 %44, 14
%46 = inttoptr i64 %45 to i16*
store i16 256, i16* %46
ret void
}

LLVM IR (-O2):
define void @init_Transmit_Buffer(i64 %0, i8 zeroext %1, i16 zeroext %2, i16 zeroext %3) {
%5 = add i64 %0, 9
%6 = inttoptr i64 %5 to i8*
store i8 1, i8* %6
%7 = add i64 %0, 10
%8 = inttoptr i64 %7 to i16*
store i16 %2, i16* %8
%9 = add i64 %0, 12
%10 = inttoptr i64 %9 to i16*
store i16 %3, i16* %10
%11 = add i64 %0, 8
%12 = inttoptr i64 %11 to i8*
store i8 8, i8* %12
%13 = icmp eq i8 %1, 0
br i1 %13, label %61, label %14
14: ; preds = %4
%15 = zext i8 %1 to i64
%16 = add nsw i64 %15, -1
%17 = and i64 %15, 7
%18 = icmp ult i64 %16, 7
br i1 %18, label %50, label %19
19: ; preds = %14
%20 = and i64 %15, 248
br label %21
21: ; preds = %21, %19
%22 = phi i64 [ 0, %19 ], [ %47, %21 ]
%23 = phi i64 [ 0, %19 ], [ %48, %21 ]
%24 = add i64 %22, %0
%25 = inttoptr i64 %24 to i8*
store i8 0, i8* %25
%26 = or i64 %22, 1
%27 = add i64 %26, %0
%28 = inttoptr i64 %27 to i8*
store i8 0, i8* %28
%29 = or i64 %22, 2
%30 = add i64 %29, %0
%31 = inttoptr i64 %30 to i8*
store i8 0, i8* %31
%32 = or i64 %22, 3
%33 = add i64 %32, %0
%34 = inttoptr i64 %33 to i8*
store i8 0, i8* %34
%35 = or i64 %22, 4
%36 = add i64 %35, %0
%37 = inttoptr i64 %36 to i8*
store i8 0, i8* %37
%38 = or i64 %22, 5
%39 = add i64 %38, %0
%40 = inttoptr i64 %39 to i8*
store i8 0, i8* %40
%41 = or i64 %22, 6
%42 = add i64 %41, %0
%43 = inttoptr i64 %42 to i8*
store i8 0, i8* %43
%44 = or i64 %22, 7
%45 = add i64 %44, %0
%46 = inttoptr i64 %45 to i8*
store i8 0, i8* %46
%47 = add nuw nsw i64 %22, 8
%48 = add i64 %23, 8
%49 = icmp eq i64 %48, %20
br i1 %49, label %50, label %21
50: ; preds = %21, %14
%51 = phi i64 [ 0, %14 ], [ %47, %21 ]
%52 = icmp eq i64 %17, 0
br i1 %52, label %61, label %53
53: ; preds = %50, %53
%54 = phi i64 [ %58, %53 ], [ %51, %50 ]
%55 = phi i64 [ %59, %53 ], [ 0, %50 ]
%56 = add i64 %54, %0
%57 = inttoptr i64 %56 to i8*
store i8 0, i8* %57
%58 = add nuw nsw i64 %54, 1
%59 = add i64 %55, 1
%60 = icmp eq i64 %59, %17
br i1 %60, label %61, label %53
61: ; preds = %50, %53, %4
%62 = add i64 %0, 14
%63 = inttoptr i64 %62 to i16*
store i16 256, i16* %63
ret void
}