home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
zip
/
program
/
gso22st.zoo
/
TODO
< prev
next >
Wrap
Text File
|
1992-12-17
|
3KB
|
79 lines
* I'd like to have a means to define that a goal function is not defined
for all possible input values. On extra parameter, ALLOWED_ARGUMENTS, to
DEF_GOAL could take care of that.
Also I'd like to add a list of immediate values to try for each goal
function. For example, 31 and 32 could be useful for ffs.
* Make it possible to handle more immediate values.
* Interpret goal functions so the user doesn't need to recompile.
Interpretation would make goal function evaluation slower than it is now,
but goal function evaluation is not critical.
* Add code to algebraically prove that a generated sequences are correct.
* Add bsrl/bsfl and bfffo to CISC synth.
* Check that PERFORM_CLZ works like RS/6000's cntlz and 29k's clz. Is it
ok for input == 0?
* A major speed improvement would be to make independent insn have a
canonical order. Consider `gts' on the SPARC. This is probably not very
hard, if insns are enumerated in some clever way and loop variables are
passed down.
After an instruction that sets carry (and there is another instruction
with the same effect apart from that it doesn't affect carry), the
generated carry has to be used. [Fix this with a reservation vector
--allow both making and deleting a reservation. Make reservation when
carry is generated and delete it when it is used.] The leaf instructions
have to munch carry if an unused carry is pending.
Make sure all computed values are used by subsequent instructions. For
example, if we have just two more values to compute and three yet unused
values, the last two instructions have to restrict their input operands.
* Efficient pruning of sequences not using generated resources:
Each generated instruction should record it's computed 'resources' in a
data base of unused resources. (A written register is such a resource,
and the carry flag is such a resource.) When a resource is used by an
instruction, it's removed from the data base.
At each recursion, we check that the unused resources can be consumed
with the allowed number of instructions. If not, we back-track.
Beware: A resource is not 'consumed' when it has been used. I have
seen optimal sequences that uses a generated carry more than once.
* Shift 32 steps on 68k is well-defined. LSHIFTR_CO can be used to zero a
word and simultaneously move the sign bit to the X flag, ASHIFTR_CO can
be used to propagate the sign bit to the whole word and to the X flag.
Useful?
* Model the exact timing, i.e., instruction overlap, superscalar issue,
etc. Requires modelling the CPU internal function units.
* `386: bt, clc, cmc, cdq[0->1], lea, shld, shrd, stc.
* Make the instruction description cleaner. Something of this kind would
be great:
88k:
{ADD, "addu %d{r},%1{r,0},%2{r,[0-FFFF]}"},
{ADD_CI, "addu.ci %d{r},%1{r,0},%2{r,[0-FFFF]}"},
...
sparc:
{ADD, "add %d{r},%1{r,0},%2{r,[-1000,+FFF]"},
{ADD_CI, "addx %d{r},%1{r,0},%2{r,[-1000,+FFF]}"},
...
We would need a tool to extract the information and generate a 'synth'
function. (That instructionn description format would be useful to
assemblers, disassemblers, and simulators too.)
* Include a 'synth' function for several targets in one gso binary.
Have a command line option -t<target> select which one to use.