#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*/ uart_puts(char *);
void print_kernel_panic(void) {
  uart_puts("                               ________________\n\r");
  uart_puts("                          ____/ (  (    )   )  \\___\n\r");
  uart_puts("                         /( (  (  )   _    ))  )   )\\\n\r");
  uart_puts("                       ((     (   )(    )  )   (   )  )\n\r");
  uart_puts("                     ((/  ( _(   )   (   _) ) (  () )  )\n\r");
  uart_puts("                    ( (  ( (_)   ((    (   )  .((_ ) .  )_\n\r");
  uart_puts("                   ( (  )    (      (  )    )   ) . ) (   )\n\r");
  uart_puts("                  (  (   (  (   ) (  _  ( _) ).  ) . ) ) ( )\n\r");
  uart_puts(
      "                  ( (  (   ) (  )   (  ))     ) _)(   )  )  )\n\r");
  uart_puts(
      "                 ( (  ( \\ ) (    (_  ( ) ( )  )   ) )  )) ( )\n\r");
  uart_puts(
      "                 (  (   (  (   (_ ( ) ( _    )  ) (  )  )   )\n\r");
  uart_puts(
      "                 ( (  ( (  (  )     (_  )  ) )  _)   ) _( ( )\n\r");
  uart_puts(
      "                  ((  (   )(    (     _    )   _) _(_ (  (_ )\n\r");
  uart_puts("                   (_((__(_(__(( ( ( |  ) ) ) )_))__))_)___)\n\r");
  uart_puts(
      "                  ((__)        \\\\||lll|l||///          \\_))\n\r");
  uart_puts("                            (   /(/ (  )  ) )\\   )\n\r");
  uart_puts("                         (    ( ( ( | | ) ) )\\   )\n\r");
  uart_puts("                            (   /(| / ( )) ) ) )) )\n\r");
  uart_puts("                         (     ( ((((_(|)_)))))     )\n\r");
  uart_puts("                          (      ||\\(|(|)|/||     )\n\r");
  uart_puts("                        (        |(||(||)||||        )\n\r");
  uart_puts("                          (     //|/l|||)|\\\\ \\     )\n\r");
  uart_puts("                        (/ / //  /|//||||\\\\  \\ \\  \\ _)\n\r");
  uart_puts("--------------------- >>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<< "
            "------------------\n\r");
  uart_puts("---------------------- >>>>>>> rOS-KERNEL PANIC <<<<<<<<< "
            "-------------------\n\r");
  uart_puts("--------------------- >>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<< "
            "------------------\n\r");
  return;
}


x86 assembly (clang, -O0):
<print_kernel_panic>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf0b(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf35(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf61(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf8f(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xfbe(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xfef(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1021(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1054(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1088(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x10bc(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x10f0(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1124(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1158(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x118b(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x11bd(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x11e6(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x120f(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1239(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1265(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x128f(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x12bc(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x12e7(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1314(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1358(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x12fc(%rip),%rdi
call   1030 <uart_puts@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_kernel_panic>:
push   %rbx
lea    0xee8(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf0e(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf38(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf64(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xf92(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xfc1(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0xff2(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1024(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1057(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x108b(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x10bf(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x10f3(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1127(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x115b(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x118e(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x11c0(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x11e9(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1212(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x123c(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1268(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1292(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x12bf(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x12ea(%rip),%rdi
call   1030 <uart_puts@plt>
lea    0x1317(%rip),%rbx
mov    %rbx,%rdi
call   1030 <uart_puts@plt>
lea    0x1358(%rip),%rdi
call   1030 <uart_puts@plt>
mov    %rbx,%rdi
pop    %rbx
jmp    1030 <uart_puts@plt>

LLVM IR (-O0):
@.str = [50 x i8] c" ________________\0A\0D\00"
@.str.1 = [54 x i8] c" ____/ ( ( ) ) \\___\0A\0D\00"
@.str.2 = [56 x i8] c" /( ( ( ) _ )) ) )\\\0A\0D\00"
@.str.3 = [58 x i8] c" (( ( )( ) ) ( ) )\0A\0D\00"
@.str.4 = [59 x i8] c" ((/ ( _( ) ( _) ) ( () ) )\0A\0D\00"
@.str.5 = [61 x i8] c" ( ( ( (_) (( ( ) .((_ ) . )_\0A\0D\00"
@.str.6 = [62 x i8] c" ( ( ) ( ( ) ) ) . ) ( )\0A\0D\00"
@.str.7 = [63 x i8] c" ( ( ( ( ) ( _ ( _) ). ) . ) ) ( )\0A\0D\00"
@.str.8 = [64 x i8] c" ( ( ( ) ( ) ( )) ) _)( ) ) )\0A\0D\00"
@.str.9 = [64 x i8] c" ( ( ( \\ ) ( (_ ( ) ( ) ) ) ) )) ( )\0A\0D\00"
@.str.10 = [64 x i8] c" ( ( ( ( (_ ( ) ( _ ) ) ( ) ) )\0A\0D\00"
@.str.11 = [64 x i8] c" ( ( ( ( ( ) (_ ) ) ) _) ) _( ( )\0A\0D\00"
@.str.12 = [64 x i8] c" (( ( )( ( _ ) _) _(_ ( (_ )\0A\0D\00"
@.str.13 = [63 x i8] c" (_((__(_(__(( ( ( | ) ) ) )_))__))_)___)\0A\0D\00"
@.str.14 = [62 x i8] c" ((__) \\\\||lll|l||/// \\_))\0A\0D\00"
@.str.15 = [53 x i8] c" ( /(/ ( ) ) )\\ )\0A\0D\00"
@.str.16 = [53 x i8] c" ( ( ( ( | | ) ) )\\ )\0A\0D\00"
@.str.17 = [54 x i8] c" ( /(| / ( )) ) ) )) )\0A\0D\00"
@.str.18 = [56 x i8] c" ( ( ((((_(|)_))))) )\0A\0D\00"
@.str.19 = [54 x i8] c" ( ||\\(|(|)|/|| )\0A\0D\00"
@.str.20 = [57 x i8] c" ( |(||(||)|||| )\0A\0D\00"
@.str.21 = [55 x i8] c" ( //|/l|||)|\\\\ \\ )\0A\0D\00"
@.str.22 = [57 x i8] c" (/ / // /|//||||\\\\ \\ \\ \\ _)\0A\0D\00"
@.str.23 = [80 x i8] c"--------------------- >>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<< ------------------\0A\0D\00"
@.str.24 = [80 x i8] c"---------------------- >>>>>>> rOS-KERNEL PANIC <<<<<<<<< -------------------\0A\0D\00"
define void @print_kernel_panic() {
%1 = call i32 @uart_puts(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @uart_puts(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @uart_puts(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @uart_puts(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @uart_puts(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.4, i64 0, i64 0))
%6 = call i32 @uart_puts(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.5, i64 0, i64 0))
%7 = call i32 @uart_puts(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.6, i64 0, i64 0))
%8 = call i32 @uart_puts(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.7, i64 0, i64 0))
%9 = call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.8, i64 0, i64 0))
%10 = call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.9, i64 0, i64 0))
%11 = call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.10, i64 0, i64 0))
%12 = call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.11, i64 0, i64 0))
%13 = call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.12, i64 0, i64 0))
%14 = call i32 @uart_puts(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.13, i64 0, i64 0))
%15 = call i32 @uart_puts(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.14, i64 0, i64 0))
%16 = call i32 @uart_puts(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.15, i64 0, i64 0))
%17 = call i32 @uart_puts(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.16, i64 0, i64 0))
%18 = call i32 @uart_puts(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.17, i64 0, i64 0))
%19 = call i32 @uart_puts(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.18, i64 0, i64 0))
%20 = call i32 @uart_puts(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.19, i64 0, i64 0))
%21 = call i32 @uart_puts(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.20, i64 0, i64 0))
%22 = call i32 @uart_puts(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.21, i64 0, i64 0))
%23 = call i32 @uart_puts(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.22, i64 0, i64 0))
%24 = call i32 @uart_puts(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.23, i64 0, i64 0))
%25 = call i32 @uart_puts(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.24, i64 0, i64 0))
%26 = call i32 @uart_puts(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.23, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [50 x i8] c" ________________\0A\0D\00"
@.str.1 = [54 x i8] c" ____/ ( ( ) ) \\___\0A\0D\00"
@.str.2 = [56 x i8] c" /( ( ( ) _ )) ) )\\\0A\0D\00"
@.str.3 = [58 x i8] c" (( ( )( ) ) ( ) )\0A\0D\00"
@.str.4 = [59 x i8] c" ((/ ( _( ) ( _) ) ( () ) )\0A\0D\00"
@.str.5 = [61 x i8] c" ( ( ( (_) (( ( ) .((_ ) . )_\0A\0D\00"
@.str.6 = [62 x i8] c" ( ( ) ( ( ) ) ) . ) ( )\0A\0D\00"
@.str.7 = [63 x i8] c" ( ( ( ( ) ( _ ( _) ). ) . ) ) ( )\0A\0D\00"
@.str.8 = [64 x i8] c" ( ( ( ) ( ) ( )) ) _)( ) ) )\0A\0D\00"
@.str.9 = [64 x i8] c" ( ( ( \\ ) ( (_ ( ) ( ) ) ) ) )) ( )\0A\0D\00"
@.str.10 = [64 x i8] c" ( ( ( ( (_ ( ) ( _ ) ) ( ) ) )\0A\0D\00"
@.str.11 = [64 x i8] c" ( ( ( ( ( ) (_ ) ) ) _) ) _( ( )\0A\0D\00"
@.str.12 = [64 x i8] c" (( ( )( ( _ ) _) _(_ ( (_ )\0A\0D\00"
@.str.13 = [63 x i8] c" (_((__(_(__(( ( ( | ) ) ) )_))__))_)___)\0A\0D\00"
@.str.14 = [62 x i8] c" ((__) \\\\||lll|l||/// \\_))\0A\0D\00"
@.str.15 = [53 x i8] c" ( /(/ ( ) ) )\\ )\0A\0D\00"
@.str.16 = [53 x i8] c" ( ( ( ( | | ) ) )\\ )\0A\0D\00"
@.str.17 = [54 x i8] c" ( /(| / ( )) ) ) )) )\0A\0D\00"
@.str.18 = [56 x i8] c" ( ( ((((_(|)_))))) )\0A\0D\00"
@.str.19 = [54 x i8] c" ( ||\\(|(|)|/|| )\0A\0D\00"
@.str.20 = [57 x i8] c" ( |(||(||)|||| )\0A\0D\00"
@.str.21 = [55 x i8] c" ( //|/l|||)|\\\\ \\ )\0A\0D\00"
@.str.22 = [57 x i8] c" (/ / // /|//||||\\\\ \\ \\ \\ _)\0A\0D\00"
@.str.23 = [80 x i8] c"--------------------- >>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<< ------------------\0A\0D\00"
@.str.24 = [80 x i8] c"---------------------- >>>>>>> rOS-KERNEL PANIC <<<<<<<<< -------------------\0A\0D\00"
define void @print_kernel_panic() {
%1 = tail call i32 @uart_puts(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 @uart_puts(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.1, i64 0, i64 0))
%3 = tail call i32 @uart_puts(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.2, i64 0, i64 0))
%4 = tail call i32 @uart_puts(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.3, i64 0, i64 0))
%5 = tail call i32 @uart_puts(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.4, i64 0, i64 0))
%6 = tail call i32 @uart_puts(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.5, i64 0, i64 0))
%7 = tail call i32 @uart_puts(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.6, i64 0, i64 0))
%8 = tail call i32 @uart_puts(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.7, i64 0, i64 0))
%9 = tail call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.8, i64 0, i64 0))
%10 = tail call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.9, i64 0, i64 0))
%11 = tail call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.10, i64 0, i64 0))
%12 = tail call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.11, i64 0, i64 0))
%13 = tail call i32 @uart_puts(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.12, i64 0, i64 0))
%14 = tail call i32 @uart_puts(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.13, i64 0, i64 0))
%15 = tail call i32 @uart_puts(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.14, i64 0, i64 0))
%16 = tail call i32 @uart_puts(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.15, i64 0, i64 0))
%17 = tail call i32 @uart_puts(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.16, i64 0, i64 0))
%18 = tail call i32 @uart_puts(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.17, i64 0, i64 0))
%19 = tail call i32 @uart_puts(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.18, i64 0, i64 0))
%20 = tail call i32 @uart_puts(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.19, i64 0, i64 0))
%21 = tail call i32 @uart_puts(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.20, i64 0, i64 0))
%22 = tail call i32 @uart_puts(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.21, i64 0, i64 0))
%23 = tail call i32 @uart_puts(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.22, i64 0, i64 0))
%24 = tail call i32 @uart_puts(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.23, i64 0, i64 0))
%25 = tail call i32 @uart_puts(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.24, i64 0, i64 0))
%26 = tail call i32 @uart_puts(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.23, i64 0, i64 0))
ret void
}