#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*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ stdout;
void help_symbol(void) {
  fprintf(stdout,
          "\nSupport Symbol:\n"
          " +, add, ADD     - arithmetic Addition     [priority lowest]\n"
          " -, sub, SUB     - arithmetic Subtraction  [priority lowest]\n"
          " *, mul, MUL     - arithmetic Multiply     [priority normal]\n"
          " /, div, DIV     - arithmetic Division     [priority normal]\n"
          " %%, mod, MOD     - arithmetic remainder    [priority normal]\n"
          " &, and, AND     - bitwise logical AND     [priority high]\n"
          " |, or, OR       - bitwise logical OR      [priority high]\n"
          " ^, xor, XOR     - bitwise logical XOR     [priority high]\n"
          "    nor, NOR     - bitwise logical NOR     [priority high]\n"
          " ~, not, NOT     - bitwise Inversion       [priority high]\n"
          "    >>           - logical shift Right     [priority high]\n"
          "    <<           - logical shift Left      [priority high]\n"
          "    ( )          - brackets                [priority highest]\n");
}


x86 assembly (clang, -O0):
<help_symbol>:
push   %rbp
mov    %rsp,%rbp
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
call   1030 <fprintf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<help_symbol>:
mov    0x2ec9(%rip),%rax
mov    (%rax),%edi
lea    0xee0(%rip),%rsi
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stdout = global i32 0
@.str = [799 x i8] c"\0ASupport Symbol:\0A +, add, ADD - arithmetic Addition [priority lowest]\0A -, sub, SUB - arithmetic Subtraction [priority lowest]\0A *, mul, MUL - arithmetic Multiply [priority normal]\0A /, div, DIV - arithmetic Division [priority normal]\0A %%, mod, MOD - arithmetic remainder [priority normal]\0A &, and, AND - bitwise logical AND [priority high]\0A |, or, OR - bitwise logical OR [priority high]\0A ^, xor, XOR - bitwise logical XOR [priority high]\0A nor, NOR - bitwise logical NOR [priority high]\0A ~, not, NOT - bitwise Inversion [priority high]\0A >> - logical shift Right [priority high]\0A << - logical shift Left [priority high]\0A ( ) - brackets [priority highest]\0A\00"
define void @help_symbol() {
%1 = load i32, i32* @stdout
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([799 x i8], [799 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stdout = global i32 0
@.str = [799 x i8] c"\0ASupport Symbol:\0A +, add, ADD - arithmetic Addition [priority lowest]\0A -, sub, SUB - arithmetic Subtraction [priority lowest]\0A *, mul, MUL - arithmetic Multiply [priority normal]\0A /, div, DIV - arithmetic Division [priority normal]\0A %%, mod, MOD - arithmetic remainder [priority normal]\0A &, and, AND - bitwise logical AND [priority high]\0A |, or, OR - bitwise logical OR [priority high]\0A ^, xor, XOR - bitwise logical XOR [priority high]\0A nor, NOR - bitwise logical NOR [priority high]\0A ~, not, NOT - bitwise Inversion [priority high]\0A >> - logical shift Right [priority high]\0A << - logical shift Left [priority high]\0A ( ) - brackets [priority highest]\0A\00"
define void @help_symbol() {
%1 = load i32, i32* @stdout
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([799 x i8], [799 x i8]* @.str, i64 0, i64 0))
ret void
}