1
0
mirror of https://github.com/catseye/SixtyPical.git synced 2024-11-25 07:32:16 +00:00

--optimize-fallthru and --dump-fallthru-info options.

This commit is contained in:
Chris Pressey 2018-04-04 11:54:50 +01:00
parent a0d3ea8167
commit d883816298
3 changed files with 16 additions and 13 deletions

View File

@ -10,8 +10,9 @@ History of SixtyPical
* Accessing zero-page with `ld` and `st` generates zero-page opcodes. * Accessing zero-page with `ld` and `st` generates zero-page opcodes.
* A `byte` or `word` table can be initialized with a list of constants. * A `byte` or `word` table can be initialized with a list of constants.
* Branching and repeating on the `n` flag is now supported. * Branching and repeating on the `n` flag is now supported.
* The `--dump-fallthru-map` option outputs a map, in JSON format, of * The `--optimize-fallthru` option causes the program to be analyzed
which routines can be "fallen through" to by other routines. for fallthru optimizations; `--dump-fallthru-info` option outputs the
information from this analysis phase, in JSON format, to stdout.
* Specifying multiple SixtyPical source files will produce a single * Specifying multiple SixtyPical source files will produce a single
compiled result from their combination. compiled result from their combination.
* Rudimentary support for Atari 2600 prelude in a 4K cartridge image, * Rudimentary support for Atari 2600 prelude in a 4K cartridge image,

View File

@ -58,15 +58,16 @@ def process_input_files(filenames, options):
analyzer = Analyzer(debug=options.debug) analyzer = Analyzer(debug=options.debug)
analyzer.analyze_program(program) analyzer.analyze_program(program)
if options.dump_fallthru_map: if options.optimize_fallthru:
import json
from sixtypical.fallthru import FallthruAnalyzer from sixtypical.fallthru import FallthruAnalyzer
fa = FallthruAnalyzer(debug=options.debug) fa = FallthruAnalyzer(debug=options.debug)
fa.analyze_program(program) fa.analyze_program(program)
sys.stdout.write(json.dumps(fa.fallthru_map, indent=4, sort_keys=True)) if options.dump_fallthru_info:
sys.stdout.write("\n") import json
sys.stdout.write(json.dumps(fa.fallthru_map, indent=4, sort_keys=True))
sys.stdout.write("\n")
if options.analyze_only: if options.analyze_only:
return return
@ -156,14 +157,15 @@ if __name__ == '__main__':
help="Only parse and analyze the program; do not compile it." help="Only parse and analyze the program; do not compile it."
) )
argparser.add_argument( argparser.add_argument(
"--dump-fallthru-map", "--optimize-fallthru",
action="store_true", action="store_true",
help="Dump the fallthru map to stdout after analyzing the program." help="Reorder the routines in the program to maximize the number of tail calls "
"that can be removed by having execution 'fall through' to the next routine."
) )
argparser.add_argument( argparser.add_argument(
"--dump-fallthru-ordering", "--dump-fallthru-info",
action="store_true", action="store_true",
help="Dump the fallthru ordering to stdout after analyzing the program." help="Dump the fallthru map and ordering to stdout after analyzing the program."
) )
argparser.add_argument( argparser.add_argument(
"--parse-only", "--parse-only",

View File

@ -51,10 +51,10 @@ When times comes to generate code, generate it in the order given by L.
[Falderal]: http://catseye.tc/node/Falderal [Falderal]: http://catseye.tc/node/Falderal
-> Functionality "Dump fallthru map of SixtyPical program" is implemented by -> Functionality "Dump fallthru info for SixtyPical program" is implemented by
-> shell command "bin/sixtypical --analyze-only --dump-fallthru-map --traceback %(test-body-file)" -> shell command "bin/sixtypical --optimize-fallthru --dump-fallthru-info --analyze-only --traceback %(test-body-file)"
-> Tests for functionality "Dump fallthru map of SixtyPical program" -> Tests for functionality "Dump fallthru info for SixtyPical program"
A single routine, obviously, falls through to nothing and has nothing fall A single routine, obviously, falls through to nothing and has nothing fall
through to it. through to it.