#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*/ LCD_WriteChar(char);
int /*<<< orphan*/ print_word(unsigned short);
void error(char Pass, unsigned short int data, unsigned short int result) {
  LCD_WriteChar('E');
  LCD_WriteChar('r');
  LCD_WriteChar('r');
  LCD_WriteChar('o');
  LCD_WriteChar('r');
  LCD_WriteChar(' ');
  LCD_WriteChar(Pass);
  LCD_WriteChar(' ');
  print_word(data);
  LCD_WriteChar('/');
  print_word(result);
  LCD_WriteChar(' ');
  while (1)
    ;
}


x86 assembly (clang, -O0):
<error>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %dx,%ax
mov    %si,%cx
mov    %dil,%dl
mov    %dl,-0x1(%rbp)
mov    %cx,-0x4(%rbp)
mov    %ax,-0x6(%rbp)
mov    $0x45,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x72,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x72,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x6f,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x72,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x20,%edi
call   1040 <LCD_WriteChar@plt>
movsbl -0x1(%rbp),%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x20,%edi
call   1040 <LCD_WriteChar@plt>
movzwl -0x4(%rbp),%edi
call   1030 <print_word@plt>
mov    $0x2f,%edi
call   1040 <LCD_WriteChar@plt>
movzwl -0x6(%rbp),%edi
call   1030 <print_word@plt>
mov    $0x20,%edi
call   1040 <LCD_WriteChar@plt>
jmp    11b1 <error+0x91>

x86 assembly (clang, -O2):
<error>:
push   %rbp
push   %r14
push   %rbx
mov    %edx,%r14d
mov    %esi,%ebp
mov    %edi,%ebx
mov    $0x45,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x72,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x72,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x6f,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x72,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x20,%edi
call   1040 <LCD_WriteChar@plt>
mov    %ebx,%edi
call   1040 <LCD_WriteChar@plt>
mov    $0x20,%edi
call   1040 <LCD_WriteChar@plt>
mov    %ebp,%edi
call   1030 <print_word@plt>
mov    $0x2f,%edi
call   1040 <LCD_WriteChar@plt>
mov    %r14d,%edi
call   1030 <print_word@plt>
mov    $0x20,%edi
call   1040 <LCD_WriteChar@plt>
nopl   0x0(%rax,%rax,1)
jmp    11a0 <error+0x80>

LLVM IR (-O0):
define void @error(i8 signext %0, i16 zeroext %1, i16 zeroext %2) {
%4 = alloca i8
%5 = alloca i16
%6 = alloca i16
store i8 %0, i8* %4
store i16 %1, i16* %5
store i16 %2, i16* %6
%7 = call i32 @LCD_WriteChar(i8 signext 69)
%8 = call i32 @LCD_WriteChar(i8 signext 114)
%9 = call i32 @LCD_WriteChar(i8 signext 114)
%10 = call i32 @LCD_WriteChar(i8 signext 111)
%11 = call i32 @LCD_WriteChar(i8 signext 114)
%12 = call i32 @LCD_WriteChar(i8 signext 32)
%13 = load i8, i8* %4
%14 = call i32 @LCD_WriteChar(i8 signext %13)
%15 = call i32 @LCD_WriteChar(i8 signext 32)
%16 = load i16, i16* %5
%17 = call i32 @print_word(i16 zeroext %16)
%18 = call i32 @LCD_WriteChar(i8 signext 47)
%19 = load i16, i16* %6
%20 = call i32 @print_word(i16 zeroext %19)
%21 = call i32 @LCD_WriteChar(i8 signext 32)
br label %22
22: ; preds = %3, %22
br label %22
}

LLVM IR (-O2):
define void @error(i8 signext %0, i16 zeroext %1, i16 zeroext %2) {
%4 = tail call i32 @LCD_WriteChar(i8 signext 69)
%5 = tail call i32 @LCD_WriteChar(i8 signext 114)
%6 = tail call i32 @LCD_WriteChar(i8 signext 114)
%7 = tail call i32 @LCD_WriteChar(i8 signext 111)
%8 = tail call i32 @LCD_WriteChar(i8 signext 114)
%9 = tail call i32 @LCD_WriteChar(i8 signext 32)
%10 = tail call i32 @LCD_WriteChar(i8 signext %0)
%11 = tail call i32 @LCD_WriteChar(i8 signext 32)
%12 = tail call i32 @print_word(i16 zeroext %1)
%13 = tail call i32 @LCD_WriteChar(i8 signext 47)
%14 = tail call i32 @print_word(i16 zeroext %2)
%15 = tail call i32 @LCD_WriteChar(i8 signext 32)
br label %16
16: ; preds = %3, %16
br label %16
}