#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
char *casimir_compile_info();
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, int, int, char *,
                           char *, char *);
void usage(FILE *stream) {
  fprintf(
      stream,
      "Usage: casimir [OPTIONS]\nThis program will calculate the free Casimir "
      "energy F(T,L/R) for the\nplane-sphere geometry for given L/R and "
      "temperature T. The output is in scaled\nunities.\n\nMandatory "
      "options:\n    -x, --LbyR FRACTION\n        Separation L between sphere "
      "and plane divided by radius of of sphere,\n        where L/R > 0.\n     "
      "   If you want to calculate several points, you may pass start and "
      "stop\n        value and the amount of points to be calculated.\n        "
      "Examples:\n            $ ./casimir -T 1 -x 0.5,0.9,5\n            This "
      "will calculate five free energies for Q=0.5,...,0,9 in linear\n         "
      "   scale.\n            $ ./casimir -T 1 -x 0.5,0.9,5,log\n            "
      "This will calculate five free energies for Q=0.5,...,0,9, but using\n   "
      "         a logarithmic scale.\n\n    -T TEMPERATURE\n        "
      "Temperature in scaled units. You may use the same syntax as for "
      "-Q.\n\nFurther options:\n    -g, --gamma\n        Set value of "
      "relaxation frequency gamma of Drude metals. If omitted,\n        gamma "
      "= 0.\n\n    -w, --omegap\n        Set value of Plasma frequency omega_p "
      "of Drude metals. If ommited,\n        omegap = INFINITY.\n\n    -l, "
      "--lscale\n        Specify parameter lscale. The vector space has to be "
      "truncated for\n        some value lmax. This program will use "
      "lmax=(R/L*lscale) (default: %d)\n\n    -L LMAX\n        Set lmax to the "
      "value LMAx. When -L is specified, -l will be ignored\n\n    -c, --cores "
      "CORES\n        Use CORES at the same time (default: 1)\n\n    -p, "
      "--precision\n        Set precision to given value. (default: %g)\n\n    "
      "--buffering\n        Enable buffering. By default buffering for stderr "
      "and stdout is\n        disabled.\n\n    -v, --verbose\n        Be more "
      "verbose. This will output additional information.\n\n    "
      "--extrapolate\n        Achieve better results by extrapolating the "
      "contributions F_n.\n        This feature is experimental! Use it on "
      "your own risk! This feature might\n        cause your computer to "
      "explode or even worse: It may cause wrong results!\n        Don't blame "
      "me, I have warned you!\n\n    -q, --quiet\n        The progress is "
      "printed to stderr unless this flag is set.\n\n    -h,--help\n        "
      "Show this help\n\n\nCompiled %s, %s\n%s\n",
      5, 1e-10, "Mar 16 2022", "21:15:21", casimir_compile_info());
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    $0x0,%al
call   1040 <casimir_compile_info@plt>
mov    -0x10(%rbp),%rdi
lea    0xeba(%rip),%rsi
mov    $0x5,%edx
xor    %ecx,%ecx
lea    0x171f(%rip),%r8
lea    0x1724(%rip),%r9
mov    %rax,(%rsp)
call   1030 <fprintf@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rbx
sub    $0x10,%rsp
mov    %rdi,%rbx
xor    %eax,%eax
call   1040 <casimir_compile_info@plt>
mov    %rax,(%rsp)
lea    0xec6(%rip),%rsi
lea    0x1732(%rip),%r8
lea    0x1737(%rip),%r9
mov    %rbx,%rdi
mov    $0x5,%edx
xor    %ecx,%ecx
call   1030 <fprintf@plt>
add    $0x10,%rsp
pop    %rbx
ret

LLVM IR (-O0):
@.str = [2163 x i8] c"Usage: casimir [OPTIONS]\0AThis program will calculate the free Casimir energy F(T,L/R) for the\0Aplane-sphere geometry for given L/R and temperature T. The output is in scaled\0Aunities.\0A\0AMandatory options:\0A -x, --LbyR FRACTION\0A Separation L between sphere and plane divided by radius of of sphere,\0A where L/R > 0.\0A If you want to calculate several points, you may pass start and stop\0A value and the amount of points to be calculated.\0A Examples:\0A $ ./casimir -T 1 -x 0.5,0.9,5\0A This will calculate five free energies for Q=0.5,...,0,9 in linear\0A scale.\0A $ ./casimir -T 1 -x 0.5,0.9,5,log\0A This will calculate five free energies for Q=0.5,...,0,9, but using\0A a logarithmic scale.\0A\0A -T TEMPERATURE\0A Temperature in scaled units. You may use the same syntax as for -Q.\0A\0AFurther options:\0A -g, --gamma\0A Set value of relaxation frequency gamma of Drude metals. If omitted,\0A gamma = 0.\0A\0A -w, --omegap\0A Set value of Plasma frequency omega_p of Drude metals. If ommited,\0A omegap = INFINITY.\0A\0A -l, --lscale\0A Specify parameter lscale. The vector space has to be truncated for\0A some value lmax. This program will use lmax=(R/L*lscale) (default: %d)\0A\0A -L LMAX\0A Set lmax to the value LMAx. When -L is specified, -l will be ignored\0A\0A -c, --cores CORES\0A Use CORES at the same time (default: 1)\0A\0A -p, --precision\0A Set precision to given value. (default: %g)\0A\0A --buffering\0A Enable buffering. By default buffering for stderr and stdout is\0A disabled.\0A\0A -v, --verbose\0A Be more verbose. This will output additional information.\0A\0A --extrapolate\0A Achieve better results by extrapolating the contributions F_n.\0A This feature is experimental! Use it on your own risk! This feature might\0A cause your computer to explode or even worse: It may cause wrong results!\0A Don't blame me, I have warned you!\0A\0A -q, --quiet\0A The progress is printed to stderr unless this flag is set.\0A\0A -h,--help\0A Show this help\0A\0A\0ACompiled %s, %s\0A%s\0A\00"
@.str.1 = [12 x i8] c"Mar 16 2022\00"
@.str.2 = [9 x i8] c"21:15:21\00"
define void @usage(i32* %0) {
%2 = alloca i32*
store i32* %0, i32** %2
%3 = load i32*, i32** %2
%4 = call i8* (...) @casimir_compile_info()
%5 = call i32 @fprintf(i32* %3, i8* getelementptr inbounds ([2163 x i8], [2163 x i8]* @.str, i64 0, i64 0), i32 5, i32 0, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i8* %4)
ret void
}

LLVM IR (-O2):
@.str = [2163 x i8] c"Usage: casimir [OPTIONS]\0AThis program will calculate the free Casimir energy F(T,L/R) for the\0Aplane-sphere geometry for given L/R and temperature T. The output is in scaled\0Aunities.\0A\0AMandatory options:\0A -x, --LbyR FRACTION\0A Separation L between sphere and plane divided by radius of of sphere,\0A where L/R > 0.\0A If you want to calculate several points, you may pass start and stop\0A value and the amount of points to be calculated.\0A Examples:\0A $ ./casimir -T 1 -x 0.5,0.9,5\0A This will calculate five free energies for Q=0.5,...,0,9 in linear\0A scale.\0A $ ./casimir -T 1 -x 0.5,0.9,5,log\0A This will calculate five free energies for Q=0.5,...,0,9, but using\0A a logarithmic scale.\0A\0A -T TEMPERATURE\0A Temperature in scaled units. You may use the same syntax as for -Q.\0A\0AFurther options:\0A -g, --gamma\0A Set value of relaxation frequency gamma of Drude metals. If omitted,\0A gamma = 0.\0A\0A -w, --omegap\0A Set value of Plasma frequency omega_p of Drude metals. If ommited,\0A omegap = INFINITY.\0A\0A -l, --lscale\0A Specify parameter lscale. The vector space has to be truncated for\0A some value lmax. This program will use lmax=(R/L*lscale) (default: %d)\0A\0A -L LMAX\0A Set lmax to the value LMAx. When -L is specified, -l will be ignored\0A\0A -c, --cores CORES\0A Use CORES at the same time (default: 1)\0A\0A -p, --precision\0A Set precision to given value. (default: %g)\0A\0A --buffering\0A Enable buffering. By default buffering for stderr and stdout is\0A disabled.\0A\0A -v, --verbose\0A Be more verbose. This will output additional information.\0A\0A --extrapolate\0A Achieve better results by extrapolating the contributions F_n.\0A This feature is experimental! Use it on your own risk! This feature might\0A cause your computer to explode or even worse: It may cause wrong results!\0A Don't blame me, I have warned you!\0A\0A -q, --quiet\0A The progress is printed to stderr unless this flag is set.\0A\0A -h,--help\0A Show this help\0A\0A\0ACompiled %s, %s\0A%s\0A\00"
@.str.1 = [12 x i8] c"Mar 16 2022\00"
@.str.2 = [9 x i8] c"21:15:21\00"
define void @usage(i32* nocapture %0) {
%2 = tail call i8* (...) @casimir_compile_info()
%3 = tail call i32 @fprintf(i32* %0, i8* getelementptr inbounds ([2163 x i8], [2163 x i8]* @.str, i64 0, i64 0), i32 5, i32 0, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i8* %2)
ret void
}