#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 *, char *);
int /*<<< orphan*/ stderr;
int usage(char *name) {
  fprintf(stderr,
          "Usage: %s [OPTIONS]... MODE"
          "\n OPTIONS:"
          "\n   -v           Verbose mode"
          "\n   -S           Use Sequence protection"
          "\n   -C           Use CRC protection"
          "\n   -A           Use large ALPDU mode"
          "\n   -F           Use Frame protection"
          "\n   -M           Use FPDU header Map"
          "\n   -P=y,n,y,y   Use short Protocols types"
          "\n   -i=N,N,N,N   Implied protocols types"
          "\n   -l=S,S,S,S   ALPDU labels"
          "\n   -L=S         FPDU labels"
          "\n   -f=N         FPDU size"
          "\n   -s=N         SDU size"
          "\n   -t=N         Temporize (us)"
          "\n MODE:"
          "\n   encap        encapsulate given SDUs into FPDUs"
          "\n   decap        decapsulate given FPDUs into SDUs"
          "\n",
          name);
  return -1;
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    0x2ebd(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xed0(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0xffffffff,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    %rdi,%rdx
mov    0x2ec5(%rip),%rax
mov    (%rax),%edi
lea    0xedc(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0xffffffff,%eax
pop    %rcx
ret

LLVM IR (-O0):
@stderr = global i32 0
@.str = [581 x i8] c"Usage: %s [OPTIONS]... MODE\0A OPTIONS:\0A -v Verbose mode\0A -S Use Sequence protection\0A -C Use CRC protection\0A -A Use large ALPDU mode\0A -F Use Frame protection\0A -M Use FPDU header Map\0A -P=y,n,y,y Use short Protocols types\0A -i=N,N,N,N Implied protocols types\0A -l=S,S,S,S ALPDU labels\0A -L=S FPDU labels\0A -f=N FPDU size\0A -s=N SDU size\0A -t=N Temporize (us)\0A MODE:\0A encap encapsulate given SDUs into FPDUs\0A decap decapsulate given FPDUs into SDUs\0A\00"
define i32 @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i32, i32* @stderr
%4 = load i8*, i8** %2
%5 = call i32 @fprintf(i32 %3, i8* getelementptr inbounds ([581 x i8], [581 x i8]* @.str, i64 0, i64 0), i8* %4)
ret i32 -1
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [581 x i8] c"Usage: %s [OPTIONS]... MODE\0A OPTIONS:\0A -v Verbose mode\0A -S Use Sequence protection\0A -C Use CRC protection\0A -A Use large ALPDU mode\0A -F Use Frame protection\0A -M Use FPDU header Map\0A -P=y,n,y,y Use short Protocols types\0A -i=N,N,N,N Implied protocols types\0A -l=S,S,S,S ALPDU labels\0A -L=S FPDU labels\0A -f=N FPDU size\0A -s=N SDU size\0A -t=N Temporize (us)\0A MODE:\0A encap encapsulate given SDUs into FPDUs\0A decap decapsulate given FPDUs into SDUs\0A\00"
define i32 @usage(i8* %0) {
%2 = load i32, i32* @stderr
%3 = tail call i32 @fprintf(i32 %2, i8* getelementptr inbounds ([581 x i8], [581 x i8]* @.str, i64 0, i64 0), i8* %0)
ret i32 -1
}