+static struct pragma_s pragma_tbl[] = {
+ { "maxram", P_MAXRAM, 0, do_pragma },
+ { "stack", P_STACK, 0, do_pragma },
+ { "code", P_CODE, 0, do_pragma },
+ { "udata", P_UDATA, 0, do_pragma },
+ { "library", P_LIBRARY, 0, do_pragma },
+/*{ "inline", P_INLINE, 0, do_pragma }, */
+ { NULL, 0, 0, NULL },
+ };
+
+static int
+_process_pragma(const char *s)
+{
+ return process_pragma_tbl(pragma_tbl, s);
+}
+
+#define REP_UDATA "--preplace-udata-with="
+
+#define STACK_MODEL "--pstack-model="
+#define OPT_BANKSEL "--obanksel="
+
+#define ALT_ASM "--asm="
+#define ALT_LINK "--link="
+
+#define IVT_LOC "--ivt-loc="
+#define NO_DEFLIBS "--nodefaultlibs"
+#define MPLAB_COMPAT "--mplab-comp"
+
+#define NL_OPT "--nl="
+#define USE_CRT "--use-crt="
+
+#define OFMSG_LRSUPPORT "--flr-support"
+
+#define OPTIMIZE_GOTO "--optimize-goto"
+#define OPTIMIZE_CMP "--optimize-cmp"
+#define OPTIMIZE_DF "--optimize-df"
+
+char *alt_asm=NULL;
+char *alt_link=NULL;
+
+int pic16_mplab_comp=0;
+extern int pic16_debug_verbose;
+extern int pic16_ralloc_debug;
+extern int pic16_pcode_verbose;
+
+int pic16_fstack=0;
+int pic16_enable_peeps=0;
+int pic16_nl=0; /* 0 for LF, 1 for CRLF */
+
+OPTION pic16_optionsTable[]= {
+ { 0, NO_DEFLIBS, &pic16_options.nodefaultlibs, "do not link default libraries when linking"},
+ { 0, "--pno-banksel", &pic16_options.no_banksel, "do not generate BANKSEL assembler directives"},
+ { 0, OPT_BANKSEL, NULL, "set banksel optimization level (default=0 no)"},
+// { 0, "--pomit-config-words", &pic16_options.omit_configw, "omit the generation of configuration words"},
+// { 0, "--pomit-ivt", &pic16_options.omit_ivt, "omit the generation of the Interrupt Vector Table"},
+// { 0, "--pleave-reset-vector",&pic16_options.leave_reset, "when omitting IVT leave RESET vector"},
+ { 0, STACK_MODEL, NULL, "use stack model 'small' (default) or 'large'"},
+
+ { 0, "--debug-xtra", &pic16_debug_verbose, "show more debug info in assembly output"},
+ { 0, "--debug-ralloc", &pic16_ralloc_debug, "dump register allocator debug file *.d"},
+ { 0, "--pcode-verbose", &pic16_pcode_verbose, "dump pcode related info"},
+
+ { 0, REP_UDATA, NULL, "Place udata variables at another section: udata_acs, udata_ovr, udata_shr"},
+
+ { 0, ALT_ASM, NULL, "Use alternative assembler"},
+ { 0, ALT_LINK, NULL, "Use alternative linker"},
+
+ { 0, "--denable-peeps", &pic16_enable_peeps, "explicit enable of peepholes"},
+ { 0, IVT_LOC, NULL, "<nnnn> interrupt vector table location"},
+ { 0, "--calltree", &pic16_options.dumpcalltree, "dump call tree in .calltree file"},
+ { 0, MPLAB_COMPAT, &pic16_mplab_comp, "enable compatibility mode for MPLAB utilities (MPASM/MPLINK)"},
+ { 0, "--fstack", &pic16_fstack, "enable stack optimizations"},
+ { 0, NL_OPT, NULL, "new line, \"lf\" or \"crlf\""},
+ { 0, USE_CRT, NULL, "use <crt-o> run-time initialization module"},
+ { 0, "--no-crt", &pic16_options.no_crt, "do not link any default run-time initialization module"},
+ { 0, "--gstack", &pic16_options.gstack, "trace stack pointer push/pop to overflow"},
+ { 0, OPTIMIZE_GOTO, NULL, "try to use (conditional) BRA instead of GOTO"},
+ { 0, OPTIMIZE_CMP, NULL, "try to optimize some compares"},
+ { 0, OPTIMIZE_DF, NULL, "thoroughly analyze data flow (memory and time intensive!)"},
+ { 0, "--num-func-alloc-regs", &pic16_options.CATregs, "dump number of temporary registers allocated for each function"},
+#if XINST
+ { 'y', "--extended", &xinst, "enable Extended Instruction Set/Literal Offset Addressing mode"},
+#endif
+ { 0, NULL, NULL, NULL}
+ };
+
+
+#define ISOPT(str) !strncmp(argv[ *i ], str, strlen(str) )
+
+extern char *getStringArg(const char *, char **, int *, int);
+extern int getIntArg(const char *, char **, int *, int);
+