#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ ReadBlockHDMITX_CAT(int, int, unsigned char *);
int /*<<< orphan*/ WriteBlockHDMITX_CAT(int, int, unsigned char *);
void CAT_Disable_Interrupt_Masks(unsigned char *data) {
  unsigned char temp[3];
  ReadBlockHDMITX_CAT(0x09, 3, temp);
  temp[0] |= data[0];
  temp[1] |= data[1];
  temp[2] |= data[2];
  WriteBlockHDMITX_CAT(0x09, 3, temp);
}


x86 assembly (clang, -O0):
<CAT_Disable_Interrupt_Masks>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
lea    -0xb(%rbp),%rdx
mov    $0x9,%edi
mov    $0x3,%esi
call   1030 <ReadBlockHDMITX_CAT@plt>
mov    -0x8(%rbp),%rax
movzbl (%rax),%ecx
movzbl -0xb(%rbp),%eax
or     %ecx,%eax
mov    %al,-0xb(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%ecx
movzbl -0xa(%rbp),%eax
or     %ecx,%eax
mov    %al,-0xa(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%ecx
movzbl -0x9(%rbp),%eax
or     %ecx,%eax
mov    %al,-0x9(%rbp)
lea    -0xb(%rbp),%rdx
mov    $0x9,%edi
mov    $0x3,%esi
call   1040 <WriteBlockHDMITX_CAT@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CAT_Disable_Interrupt_Masks>:
push   %r14
push   %rbx
push   %rax
mov    %rdi,%rbx
lea    0x5(%rsp),%r14
mov    $0x9,%edi
mov    $0x3,%esi
mov    %r14,%rdx
call   1030 <ReadBlockHDMITX_CAT@plt>
mov    (%rbx),%al
or     %al,0x5(%rsp)
mov    0x1(%rbx),%al
or     %al,0x6(%rsp)
mov    0x2(%rbx),%al
or     %al,0x7(%rsp)
mov    $0x9,%edi
mov    $0x3,%esi
mov    %r14,%rdx
call   1040 <WriteBlockHDMITX_CAT@plt>
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define void @CAT_Disable_Interrupt_Masks(i8* %0) {
%2 = alloca i8*
%3 = alloca [3 x i8]
store i8* %0, i8** %2
%4 = getelementptr inbounds [3 x i8], [3 x i8]* %3, i64 0, i64 0
%5 = call i32 @ReadBlockHDMITX_CAT(i32 9, i32 3, i8* %4)
%6 = load i8*, i8** %2
%7 = getelementptr inbounds i8, i8* %6, i64 0
%8 = load i8, i8* %7
%9 = zext i8 %8 to i32
%10 = getelementptr inbounds [3 x i8], [3 x i8]* %3, i64 0, i64 0
%11 = load i8, i8* %10
%12 = zext i8 %11 to i32
%13 = or i32 %12, %9
%14 = trunc i32 %13 to i8
store i8 %14, i8* %10
%15 = load i8*, i8** %2
%16 = getelementptr inbounds i8, i8* %15, i64 1
%17 = load i8, i8* %16
%18 = zext i8 %17 to i32
%19 = getelementptr inbounds [3 x i8], [3 x i8]* %3, i64 0, i64 1
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
%22 = or i32 %21, %18
%23 = trunc i32 %22 to i8
store i8 %23, i8* %19
%24 = load i8*, i8** %2
%25 = getelementptr inbounds i8, i8* %24, i64 2
%26 = load i8, i8* %25
%27 = zext i8 %26 to i32
%28 = getelementptr inbounds [3 x i8], [3 x i8]* %3, i64 0, i64 2
%29 = load i8, i8* %28
%30 = zext i8 %29 to i32
%31 = or i32 %30, %27
%32 = trunc i32 %31 to i8
store i8 %32, i8* %28
%33 = getelementptr inbounds [3 x i8], [3 x i8]* %3, i64 0, i64 0
%34 = call i32 @WriteBlockHDMITX_CAT(i32 9, i32 3, i8* %33)
ret void
}

LLVM IR (-O2):
define void @CAT_Disable_Interrupt_Masks(i8* nocapture %0) {
%2 = alloca [3 x i8]
%3 = getelementptr inbounds [3 x i8], [3 x i8]* %2, i64 0, i64 0
%4 = call i32 @ReadBlockHDMITX_CAT(i32 9, i32 3, i8* %3)
%5 = load i8, i8* %0
%6 = load i8, i8* %3
%7 = or i8 %6, %5
store i8 %7, i8* %3
%8 = getelementptr inbounds i8, i8* %0, i64 1
%9 = load i8, i8* %8
%10 = getelementptr inbounds [3 x i8], [3 x i8]* %2, i64 0, i64 1
%11 = load i8, i8* %10
%12 = or i8 %11, %9
store i8 %12, i8* %10
%13 = getelementptr inbounds i8, i8* %0, i64 2
%14 = load i8, i8* %13
%15 = getelementptr inbounds [3 x i8], [3 x i8]* %2, i64 0, i64 2
%16 = load i8, i8* %15
%17 = or i8 %16, %14
store i8 %17, i8* %15
%18 = call i32 @WriteBlockHDMITX_CAT(i32 9, i32 3, i8* %3)
ret void
}