#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*/ cpm_abort();
int /*<<< orphan*/ puts(char *);
void help(void) {
  puts("\nSyntax:\n\tFLASH4 READ filename [options]\n"
       "\tFLASH4 VERIFY filename [options]\n"
       "\tFLASH4 WRITE filename [options]\n\n"
       "Options (access method is auto-detected by default)\n"
       "\t/V\t\tVerbose details about verify/program process\n"
       "\t/PARTIAL\tAllow flashing a large ROM from a smaller image file\n"
       "\t/ROM\t\tAllow read-only use of unknown chip types\n"
       "\t/Z180DMA\tForce Z180 DMA engine\n"
       "\t/UNABIOS\tForce UNA BIOS bank switching\n"
       "\t/ROMWBW\t\tForce RomWBW (v2.6+) bank switching\n"
       "\t/ROMWBWOLD\tForce RomWBW (v2.5 and earlier) bank switching\n"
       "\t/P112\t\tForce P112 bank switching\n"
       "\t/2 ... /9\tForce programming multiple devices");
  cpm_abort();
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <puts@plt>
mov    $0x0,%al
call   1040 <cpm_abort@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
push   %rax
lea    0xed8(%rip),%rdi
call   1030 <puts@plt>
xor    %eax,%eax
pop    %rcx
jmp    1040 <cpm_abort@plt>

LLVM IR (-O0):
@.str = [580 x i8] c"\0ASyntax:\0A\09FLASH4 READ filename [options]\0A\09FLASH4 VERIFY filename [options]\0A\09FLASH4 WRITE filename [options]\0A\0AOptions (access method is auto-detected by default)\0A\09/V\09\09Verbose details about verify/program process\0A\09/PARTIAL\09Allow flashing a large ROM from a smaller image file\0A\09/ROM\09\09Allow read-only use of unknown chip types\0A\09/Z180DMA\09Force Z180 DMA engine\0A\09/UNABIOS\09Force UNA BIOS bank switching\0A\09/ROMWBW\09\09Force RomWBW (v2.6+) bank switching\0A\09/ROMWBWOLD\09Force RomWBW (v2.5 and earlier) bank switching\0A\09/P112\09\09Force P112 bank switching\0A\09/2 ... /9\09Force programming multiple devices\00"
define void @help() {
%1 = call i32 @puts(i8* getelementptr inbounds ([580 x i8], [580 x i8]* @.str, i64 0, i64 0))
%2 = call i32 (...) @cpm_abort()
ret void
}

LLVM IR (-O2):
@.str = [580 x i8] c"\0ASyntax:\0A\09FLASH4 READ filename [options]\0A\09FLASH4 VERIFY filename [options]\0A\09FLASH4 WRITE filename [options]\0A\0AOptions (access method is auto-detected by default)\0A\09/V\09\09Verbose details about verify/program process\0A\09/PARTIAL\09Allow flashing a large ROM from a smaller image file\0A\09/ROM\09\09Allow read-only use of unknown chip types\0A\09/Z180DMA\09Force Z180 DMA engine\0A\09/UNABIOS\09Force UNA BIOS bank switching\0A\09/ROMWBW\09\09Force RomWBW (v2.6+) bank switching\0A\09/ROMWBWOLD\09Force RomWBW (v2.5 and earlier) bank switching\0A\09/P112\09\09Force P112 bank switching\0A\09/2 ... /9\09Force programming multiple devices\00"
define void @help() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([580 x i8], [580 x i8]* @.str, i64 0, i64 0))
%2 = tail call i32 (...) @cpm_abort()
ret void
}