#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*/ printf(char *);
void calc_help(void) {
  printf("Examples:\n");
  printf("    2+3*4        expressions are evaluated\n");
  printf("    x=5^6        variables a to z can be set and used\n");
  printf("Operators:\n");
  printf("    + - *        arithmetic\n");
  printf("    / %%          division and remainder (rounding towards negative "
         "infinity)\n");
  printf("    ^            exponentiation\n");
  printf("    !            factorial\n");
  printf("    << >>        left and right shifts\n");
  printf("    <= >= >      \\ comparisons, giving 1 if true, 0 if false\n");
  printf("    == != <      /\n");
  printf("    && ||        logical and/or, giving 1 if true, 0 if false\n");
  printf("Functions:\n");
  printf("    abs(n)       absolute value\n");
  printf("    bin(n,m)     binomial coefficient\n");
  printf("    fib(n)       fibonacci number\n");
  printf("    gcd(a,b,..)  greatest common divisor\n");
  printf("    kron(a,b)    kronecker symbol\n");
  printf("    lcm(a,b,..)  least common multiple\n");
  printf("    lucnum(n)    lucas number\n");
  printf("    nextprime(n) next prime after n\n");
  printf("    powm(b,e,m)  modulo powering, b^e%%m\n");
  printf("    root(n,r)    r-th root\n");
  printf("    sqrt(n)      square root\n");
  printf("Other:\n");
  printf("    hex          \\ set hex or decimal for input and output\n");
  printf("    decimal      /   (\"0x\" can be used for hex too)\n");
  printf("    quit         exit program (EOF works too)\n");
  printf("    ;            statements are separated with a ; or newline\n");
  printf("    \\            continue expressions with \\ before newline\n");
  printf("    # xxx        comments are # though to newline\n");
  printf("Hex numbers must be entered in upper case, to distinguish them from "
         "the\n");
  printf("variables a to f (like in bc).\n");
}


x86 assembly (clang, -O0):
<calc_help>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
lea    0xee4(%rip),%rdi
call   1030 <printf@plt>
lea    0xf04(%rip),%rdi
call   1030 <printf@plt>
lea    0xf2f(%rip),%rdi
call   1030 <printf@plt>
lea    0xf2f(%rip),%rdi
call   1030 <printf@plt>
lea    0xf40(%rip),%rdi
call   1030 <printf@plt>
lea    0xf83(%rip),%rdi
call   1030 <printf@plt>
lea    0xf98(%rip),%rdi
call   1030 <printf@plt>
lea    0xfa8(%rip),%rdi
call   1030 <printf@plt>
lea    0xfc4(%rip),%rdi
call   1030 <printf@plt>
lea    0xff6(%rip),%rdi
call   1030 <printf@plt>
lea    0xffe(%rip),%rdi
call   1030 <printf@plt>
lea    0x1031(%rip),%rdi
call   1030 <printf@plt>
lea    0x1031(%rip),%rdi
call   1030 <printf@plt>
lea    0x1046(%rip),%rdi
call   1030 <printf@plt>
lea    0x1061(%rip),%rdi
call   1030 <printf@plt>
lea    0x1078(%rip),%rdi
call   1030 <printf@plt>
lea    0x1096(%rip),%rdi
call   1030 <printf@plt>
lea    0x10ad(%rip),%rdi
call   1030 <printf@plt>
lea    0x10c9(%rip),%rdi
call   1030 <printf@plt>
lea    0x10dc(%rip),%rdi
call   1030 <printf@plt>
lea    0x10f5(%rip),%rdi
call   1030 <printf@plt>
lea    0x1113(%rip),%rdi
call   1030 <printf@plt>
lea    0x1123(%rip),%rdi
call   1030 <printf@plt>
lea    0x1135(%rip),%rdi
call   1030 <printf@plt>
lea    0x1131(%rip),%rdi
call   1030 <printf@plt>
lea    0x1161(%rip),%rdi
call   1030 <printf@plt>
lea    0x118a(%rip),%rdi
call   1030 <printf@plt>
lea    0x11ad(%rip),%rdi
call   1030 <printf@plt>
lea    0x11e0(%rip),%rdi
call   1030 <printf@plt>
lea    0x1211(%rip),%rdi
call   1030 <printf@plt>
lea    0x1238(%rip),%rdi
call   1030 <printf@plt>
lea    0x1275(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<calc_help>:
push   %rax
lea    0xf51(%rip),%rdi
call   1030 <puts@plt>
lea    0xf4f(%rip),%rdi
call   1030 <puts@plt>
lea    0xf6e(%rip),%rdi
call   1030 <puts@plt>
lea    0xf98(%rip),%rdi
call   1030 <puts@plt>
lea    0xf97(%rip),%rdi
call   1030 <puts@plt>
lea    0xe9c(%rip),%rdi
call   1040 <printf@plt>
lea    0xf9b(%rip),%rdi
call   1030 <puts@plt>
lea    0xfaf(%rip),%rdi
call   1030 <puts@plt>
lea    0xfbe(%rip),%rdi
call   1030 <puts@plt>
lea    0xfd9(%rip),%rdi
call   1030 <puts@plt>
lea    0x100a(%rip),%rdi
call   1030 <puts@plt>
lea    0x1011(%rip),%rdi
call   1030 <puts@plt>
lea    0x1043(%rip),%rdi
call   1030 <puts@plt>
lea    0x1042(%rip),%rdi
call   1030 <puts@plt>
lea    0x1056(%rip),%rdi
call   1030 <puts@plt>
lea    0x1070(%rip),%rdi
call   1030 <puts@plt>
lea    0x1086(%rip),%rdi
call   1030 <puts@plt>
lea    0x10a3(%rip),%rdi
call   1030 <puts@plt>
lea    0x10b9(%rip),%rdi
call   1030 <puts@plt>
lea    0x10d4(%rip),%rdi
call   1030 <puts@plt>
lea    0x10e6(%rip),%rdi
call   1030 <puts@plt>
lea    0xe2b(%rip),%rdi
call   1040 <printf@plt>
lea    0x10f2(%rip),%rdi
call   1030 <puts@plt>
lea    0x1101(%rip),%rdi
call   1030 <puts@plt>
lea    0x1112(%rip),%rdi
call   1030 <puts@plt>
lea    0x110d(%rip),%rdi
call   1030 <puts@plt>
lea    0x113c(%rip),%rdi
call   1030 <puts@plt>
lea    0x1164(%rip),%rdi
call   1030 <puts@plt>
lea    0x1186(%rip),%rdi
call   1030 <puts@plt>
lea    0x11b8(%rip),%rdi
call   1030 <puts@plt>
lea    0x11e8(%rip),%rdi
call   1030 <puts@plt>
lea    0x120e(%rip),%rdi
call   1030 <puts@plt>
lea    0x124a(%rip),%rdi
pop    %rax
jmp    1030 <puts@plt>

LLVM IR (-O0):
@.str = [11 x i8] c"Examples:\0A\00"
@.str.1 = [44 x i8] c" 2+3*4 expressions are evaluated\0A\00"
@.str.2 = [55 x i8] c" x=5^6 variables a to z can be set and used\0A\00"
@.str.3 = [12 x i8] c"Operators:\0A\00"
@.str.4 = [29 x i8] c" + - * arithmetic\0A\00"
@.str.5 = [79 x i8] c" / %% division and remainder (rounding towards negative infinity)\0A\00"
@.str.6 = [33 x i8] c" ^ exponentiation\0A\00"
@.str.7 = [28 x i8] c" ! factorial\0A\00"
@.str.8 = [40 x i8] c" << >> left and right shifts\0A\00"
@.str.9 = [62 x i8] c" <= >= > \\ comparisons, giving 1 if true, 0 if false\0A\00"
@.str.10 = [20 x i8] c" == != < /\0A\00"
@.str.11 = [63 x i8] c" && || logical and/or, giving 1 if true, 0 if false\0A\00"
@.str.12 = [12 x i8] c"Functions:\0A\00"
@.str.13 = [33 x i8] c" abs(n) absolute value\0A\00"
@.str.14 = [39 x i8] c" bin(n,m) binomial coefficient\0A\00"
@.str.15 = [35 x i8] c" fib(n) fibonacci number\0A\00"
@.str.16 = [42 x i8] c" gcd(a,b,..) greatest common divisor\0A\00"
@.str.17 = [35 x i8] c" kron(a,b) kronecker symbol\0A\00"
@.str.18 = [40 x i8] c" lcm(a,b,..) least common multiple\0A\00"
@.str.19 = [31 x i8] c" lucnum(n) lucas number\0A\00"
@.str.20 = [37 x i8] c" nextprime(n) next prime after n\0A\00"
@.str.21 = [42 x i8] c" powm(b,e,m) modulo powering, b^e%%m\0A\00"
@.str.22 = [28 x i8] c" root(n,r) r-th root\0A\00"
@.str.23 = [30 x i8] c" sqrt(n) square root\0A\00"
@.str.24 = [8 x i8] c"Other:\0A\00"
@.str.25 = [60 x i8] c" hex \\ set hex or decimal for input and output\0A\00"
@.str.26 = [53 x i8] c" decimal / (\220x\22 can be used for hex too)\0A\00"
@.str.27 = [47 x i8] c" quit exit program (EOF works too)\0A\00"
@.str.28 = [63 x i8] c" ; statements are separated with a ; or newline\0A\00"
@.str.29 = [61 x i8] c" \\ continue expressions with \\ before newline\0A\00"
@.str.30 = [51 x i8] c" # xxx comments are # though to newline\0A\00"
@.str.31 = [73 x i8] c"Hex numbers must be entered in upper case, to distinguish them from the\0A\00"
@.str.32 = [32 x i8] c"variables a to f (like in bc).\0A\00"
define void @calc_help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.2, i64 0, i64 0))
%4 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0))
%5 = call i32 @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.5, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.6, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.8, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.9, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.10, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.11, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0))
%14 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.13, i64 0, i64 0))
%15 = call i32 @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.14, i64 0, i64 0))
%16 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.15, i64 0, i64 0))
%17 = call i32 @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.16, i64 0, i64 0))
%18 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.17, i64 0, i64 0))
%19 = call i32 @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.18, i64 0, i64 0))
%20 = call i32 @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.19, i64 0, i64 0))
%21 = call i32 @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.20, i64 0, i64 0))
%22 = call i32 @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0))
%23 = call i32 @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.22, i64 0, i64 0))
%24 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.23, i64 0, i64 0))
%25 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.24, i64 0, i64 0))
%26 = call i32 @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.25, i64 0, i64 0))
%27 = call i32 @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.26, i64 0, i64 0))
%28 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.27, i64 0, i64 0))
%29 = call i32 @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.28, i64 0, i64 0))
%30 = call i32 @printf(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.29, i64 0, i64 0))
%31 = call i32 @printf(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.30, i64 0, i64 0))
%32 = call i32 @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.31, i64 0, i64 0))
%33 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.32, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str.5 = [79 x i8] c" / %% division and remainder (rounding towards negative infinity)\0A\00"
@.str.21 = [42 x i8] c" powm(b,e,m) modulo powering, b^e%%m\0A\00"
@str = [10 x i8] c"Examples:\00"
@str.33 = [43 x i8] c" 2+3*4 expressions are evaluated\00"
@str.34 = [54 x i8] c" x=5^6 variables a to z can be set and used\00"
@str.35 = [11 x i8] c"Operators:\00"
@str.36 = [28 x i8] c" + - * arithmetic\00"
@str.37 = [32 x i8] c" ^ exponentiation\00"
@str.38 = [27 x i8] c" ! factorial\00"
@str.39 = [39 x i8] c" << >> left and right shifts\00"
@str.40 = [61 x i8] c" <= >= > \\ comparisons, giving 1 if true, 0 if false\00"
@str.41 = [19 x i8] c" == != < /\00"
@str.42 = [62 x i8] c" && || logical and/or, giving 1 if true, 0 if false\00"
@str.43 = [11 x i8] c"Functions:\00"
@str.44 = [32 x i8] c" abs(n) absolute value\00"
@str.45 = [38 x i8] c" bin(n,m) binomial coefficient\00"
@str.46 = [34 x i8] c" fib(n) fibonacci number\00"
@str.47 = [41 x i8] c" gcd(a,b,..) greatest common divisor\00"
@str.48 = [34 x i8] c" kron(a,b) kronecker symbol\00"
@str.49 = [39 x i8] c" lcm(a,b,..) least common multiple\00"
@str.50 = [30 x i8] c" lucnum(n) lucas number\00"
@str.51 = [36 x i8] c" nextprime(n) next prime after n\00"
@str.52 = [27 x i8] c" root(n,r) r-th root\00"
@str.53 = [29 x i8] c" sqrt(n) square root\00"
@str.54 = [7 x i8] c"Other:\00"
@str.55 = [59 x i8] c" hex \\ set hex or decimal for input and output\00"
@str.56 = [52 x i8] c" decimal / (\220x\22 can be used for hex too)\00"
@str.57 = [46 x i8] c" quit exit program (EOF works too)\00"
@str.58 = [62 x i8] c" ; statements are separated with a ; or newline\00"
@str.59 = [60 x i8] c" \\ continue expressions with \\ before newline\00"
@str.60 = [50 x i8] c" # xxx comments are # though to newline\00"
@str.61 = [72 x i8] c"Hex numbers must be entered in upper case, to distinguish them from the\00"
@str.62 = [31 x i8] c"variables a to f (like in bc).\00"
define void @calc_help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.33, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.34, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.35, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.36, i64 0, i64 0))
%6 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @.str.5, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.37, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.38, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @str.39, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([61 x i8], [61 x i8]* @str.40, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.41, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str.42, i64 0, i64 0))
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.43, i64 0, i64 0))
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.44, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.45, i64 0, i64 0))
%16 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.46, i64 0, i64 0))
%17 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.47, i64 0, i64 0))
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.48, i64 0, i64 0))
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @str.49, i64 0, i64 0))
%20 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.50, i64 0, i64 0))
%21 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.51, i64 0, i64 0))
%22 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @.str.21, i64 0, i64 0))
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.52, i64 0, i64 0))
%24 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.53, i64 0, i64 0))
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.54, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.55, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @str.56, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.57, i64 0, i64 0))
%29 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str.58, i64 0, i64 0))
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @str.59, i64 0, i64 0))
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([50 x i8], [50 x i8]* @str.60, i64 0, i64 0))
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.61, i64 0, i64 0))
%33 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @str.62, i64 0, i64 0))
ret void
}