char * cmdlnexec; // Executable name, pointer to ARGV[0]
char * searchpath; // Search path for include files
char defname[] = "noname.o"; // Default output filename
-
+int optim_flags[OPT_COUNT]; // Specific optimisations on/off matrix
//
// Manipulate file extension.
" -l[filename] Create an output listing file\n"
" -n Don't do things behind your back in RISC assembler\n"
" -o file Output file name\n"
- " -p[n] Create an ST .prg (1=normal, 2=w/symbols)\n"
+ " +o[value] Turn a specific optimisation on\n"
+ " ~o[value] Turn a specific optimisation off\n"
+ " +oall Turn all optimisations on\n"
+ " ~oall Turn all optimisations off\n"
+ " -p Create an ST .prg (without symbols)\n"
+ " -ps Create an ST .prg (with symbols)\n"
" Forces -fa\n"
" -r[size] Pad segments to boundary size specified\n"
" w: word (2 bytes, default alignment)\n"
" d: double phrase (16 bytes)\n"
" q: quad phrase (32 bytes)\n"
" -s Warn about possible short branches\n"
+ " and applied optimisations\n"
" -u Force referenced and undefined symbols global\n"
" -v Set verbose mode\n"
+ " -x Turn on debugging mode\n"
" -y[pagelen] Set page line length (default: 61)\n"
"\n", cmdlnexec);
}
//
void DisplayVersion(void)
{
- printf("\nReboot's Macro Assembler for Atari Jaguar\n"
+ printf("\n"
+ " _ __ _ __ ___ __ _ ___ \n"
+ "| '__| '_ ` _ \\ / _` |/ __|\n"
+ "| | | | | | | | (_| | (__ \n"
+ "|_| |_| |_| |_|\\__,_|\\___|\n"
+ "\nReboot's Macro Assembler\n"
"Copyright (C) 199x Landon Dyer, 2011-2015 Reboot\n"
"V%01i.%01i.%01i %s (%s)\n\n", MAJOR, MINOR, PATCH, __DATE__, PLATFORM);
}
break;
}
}
+ else if (*argv[argno] == '+' || *argv[argno] == '~')
+ {
+ int onoff = 0;
+ if (*argv[argno] == '+')
+ onoff = 1;
+ if ((argv[argno][2] == 'a' || argv[argno][2] == 'A') &&
+ (argv[argno][3] == 'l' || argv[argno][3] == 'L') &&
+ (argv[argno][4] == 'l' || argv[argno][4] == 'L'))
+ memset(optim_flags, onoff, OPT_COUNT * sizeof(int));
+ else if (argv[argno][1] == 'o' || argv[argno][1] == 'O') // Turn on specific optimisation
+ {
+ int opt_no = atoi(&argv[argno][2]);
+ if (opt_no>=0 && opt_no<OPT_COUNT)
+ optim_flags[opt_no]=onoff;
+ else
+ {
+ DisplayVersion();
+ printf("Unknown switch: %s\n\n", argv[argno]);
+ DisplayHelp();
+ errcnt++;
+ break;
+ }
+ }
+ else
+ {
+ DisplayVersion();
+ printf("Unknown switch: %s\n\n", argv[argno]);
+ DisplayHelp();
+ errcnt++;
+ break;
+ }
+ }
else
{
// Record first filename.
{
perm_verb_flag = 0; // Clobber "permanent" verbose flag
legacy_flag = 1; // Default is legacy mode on (:-P)
+
+ // Set legacy optimisation flags to on
+ // and everything else to off
+ memset(optim_flags, 0, OPT_COUNT * sizeof(int));
+ optim_flags[OPT_ABS_SHORT] =
+ optim_flags[OPT_MOVEL_MOVEQ] =
+ optim_flags[OPT_BSR_BCC_S] = 1;
+
cmdlnexec = argv[0]; // Obtain executable name
endian = GetEndianess(); // Get processor endianess