David Given
3feb79ad0c
Simplify the .trp API to make it a bit smaller.
2019-06-11 20:02:03 +02:00
David Given
88fd7b3cdc
Add a 'kill' pseudoinstruction to the 8080 assembler, which marks when the code
...
generator is finished with a register; use this to create some more effective
peephole optimiser rules.
2019-03-08 23:06:34 +01:00
David Given
12a0421988
Minor improvements to the way types are expanded (should avoid embarassing ands
...
with 0xff).
2019-02-17 10:09:22 +01:00
David Given
6a8b298861
Fix typo where I was confusing sbi and sui, with hilarious results.
2019-02-16 01:18:21 +01:00
David Given
4474d6433a
Loading large constants now computes the stack offset correctly.
2019-02-15 23:03:01 +01:00
David Given
8ca4d6ea1e
Cleanup.
2019-02-15 22:26:14 +01:00
David Given
c9467b683a
Add rules for converting smallnconst2 and smallpconst2 to registers, to stop
...
the conversion from happening via the stack. Star Trek goes from 39450 to 39384
bytes.
2019-02-15 22:20:07 +01:00
David Given
afd45acb89
Using regpair instead of hl_or_de is not, in fact, safe until we've stopped
...
using bc.
2019-02-15 21:38:17 +01:00
David Given
d63a359a49
Fix nearly all the comparisons, a lot of which were broken. Using a rst for
...
unsigned comparisons is surprisingly not that useful due to marshalling
overhead; it's only four bytes to do inline (plus jc), or six for a constant.
Also add some useful top optimisations. Star Trek goes from 39890 to 39450
bytes.
2019-02-15 21:30:27 +01:00
David Given
91c75f81b5
Call cmps rather than cmpu for bge... make cmps and cmpu rsts. Apply various
...
other tiny optimisations.
2019-02-15 00:38:39 +01:00
David Given
2924ce8ffa
Use nicely optimised helper tools to do signed comparisons of words. Star Trek
...
goes from 40452 to 39890 bytes.
2019-02-14 23:57:55 +01:00
David Given
3c3d2a4520
Fix bad helper tool invocation for inl with faddrn.
2019-02-14 23:21:47 +01:00
David Given
8eaa11ac72
Turns out that every time the compiler tried to do a stack retraction with asp,
...
it would flush registers onto the stack. This stops it doing this. Star Trek
goes from 40779 to 40452 bytes.
2019-02-14 00:05:08 +01:00
David Given
6e3ba8e9a0
Merge from default.
2019-02-13 22:46:00 +01:00
David Given
79a38ecc08
Instead of using parameterised rsts for stack access, add a huge swathe of
...
automatically built helper tools. Star Trek goes up from 40243 to 40779 bytes,
but should be a lot faster.
2019-02-13 22:45:22 +01:00
David Given
8200f041c2
Fix issue with logical operations and small signed constants which turned out
...
to affect multiple platforms.
2019-02-13 20:56:10 +01:00
David Given
f4b45f1ed7
Fix bad code generation due to not correctly flushing the stack before
...
comparisons.
2019-02-12 22:19:07 +01:00
David Given
360e1525ae
Replace the non-working Z80 style signed comparison sign adjustment with
...
something which actually works on the 8080. Sadly, Star Trek is up to
40243 bytes again.
2019-02-12 11:57:37 +01:00
David Given
f1b128baeb
Signed comparisons now work correctly; sadly, Star Trek increases from 39656 to
...
39726 bytes. Note that the emulator doesn't set P/V correctly and all the tests
fail. Testing in z80ex works fine.
2019-02-11 20:46:06 +01:00
David Given
fca54ccc1b
Improve subtractions, using dad and inline constants where possible. Shrinks
...
Star Trek from 39740 to 39656 bytes.
2019-02-10 19:40:48 +01:00
David Given
7d34cd7407
Simplify simple comparisons and use inlie constants where possible. Reduces
...
Star Trek from 39771 to 39740 bytes.
2019-02-10 19:22:43 +01:00
David Given
35d1f36ca4
Use pop rather than inx;inx to retract the stack; consumes a register but
...
halves the number of calls. Reduces Star Trek from 39976 to 39771 bytes.
2019-02-10 18:57:20 +01:00
David Given
b34ff2bdec
Teach the i80 code generator how to do left shifts by using dad hl; prevents it
...
from calling out to .sli2 for simple shifts. Shrinks Star Trek from 40055 bytes
to 39976.
2019-02-10 18:44:47 +01:00
David Given
10b509d6b6
Add rst 3 to get the address of a frame variable; lots of rule overhaulage.
...
Reduces Star Trek from 41821 to 41055 bytes.
2019-02-09 13:29:41 +01:00
David Given
0de5001f82
Make sign extension much less horrible.
2019-02-08 23:16:57 +01:00
David Given
0ac145a0d1
Add tests for simple and, or, and xor; drastically improve the i80 code
...
generation for these.
2019-02-08 22:38:07 +01:00
David Given
a91ab5c599
Somehow the implementation of rst 2 got lost, with hilarious results. Also fix
...
some register corruption issues (I hope).
2019-02-08 21:35:14 +01:00
David Given
a5bf2932c8
Add rst 1 to store frame variables. Reduces Star Trek from 42339 to 41821
...
bytes.
2019-02-07 09:31:38 +01:00
David Given
9d8ea79c7f
rst 1 now takes an eight-bit parameter, not a 16 bit one. Reduces Star Trek
...
again from 43205 to 42339 bytes.
2019-02-07 08:45:20 +01:00
David Given
5ac280026e
Experimentally use rst 1 to optimise frame variable loads. Reduces Star Trek
...
from 43892 to 43205 bytes.
2019-02-07 00:06:32 +01:00
David Given
08b92153a0
Use a helper function for cai --- only saves two bytes per invocation, but is
...
much less embarassing.
2019-02-06 20:36:23 +01:00
David Given
02779325ab
Move the standard ret boilerplate into a helper procedure, to save a little
...
space.
2019-02-06 08:08:11 +01:00
George Koehler
93e01eb5d1
Teach i80 ncg to use libfp. Enable ack -mcpm -fp
.
...
Old .o files stop working if they use floating point. One must
recompile those files. Old files don't call libfp in the correct way,
and may use symbols that I removed from libem. I don't keep old
symbols in libem/flp.s, because a program that pulls both libfp and
flp.s would get "multiply defined" errors in the linker.
I teach mach/i80/ncg/table to use libfp by copying or adapting the
patterns from mach/i86/ncg/table. I did not test all the patterns,
but I did use `ack -mcpm -fp -O4` to compile examples/mandelbrot.c,
then I ran it in the emulator YAZE-AG. It worked, but it was slow.
2018-04-25 16:09:56 -04:00
George Koehler
34cf0c8b63
Kill registers a, de, when i80 ncg does Call libem.
...
I compiled tests/plat/lib/test.c with ack -mcpm, but i80 ncg did emit
wrong code in writehex(uint32_t) for
"0123456789abcdef"[code & 0xf]
The code called '.and' to evaluate `code & 0xf`, then tried to call
'.cii' to narrow the result from 4 to 2 bytes, but it passed garbage
instead of 4 to '.cii'. The rule for '.and' was
pat and defined($1)
kills ALL
uses dereg={const2,$1}
gen Call {label,".and"}
This failed to kill register de={const2,4}, so ncg pushed de,
expecting to push 4, but actually pushing garbage.
Fix such rules using `mvi a,...` or `lxi de,...` so ncg doesn't track
the token in the register. This is like the i86 table. A different
fix would use a dummy instruction `killreg a` or `killreg de` like the
m68020 table.
Also correct 1 to $1 when calling '.exg'.
2017-12-06 22:14:00 -05:00
dtrg
df088c184b
Added optimised rules for int<<8 and uint>>8 (which can be done with simple register shuffling rather than calling .sli).
2007-04-29 23:00:31 +00:00
dtrg
440d6faadd
Fixed a bug where loc lol stf was getting the constant pushed onto the stack *after* stf had popped it off.
2007-04-27 22:15:31 +00:00
ceriel
1db6a3029b
Header --> Id
1994-06-24 14:02:31 +00:00
ceriel
6f03cff48f
Some minor modifications reflecting some changes in the peephole optimizer
1992-09-01 09:39:15 +00:00
ceriel
564cbc6eba
Only call NOP routine when debugging table
1991-09-04 10:55:52 +00:00
ceriel
c998623932
Some more adaptions to new semantics of ncgg
1987-11-10 13:49:04 +00:00
ceriel
12d731dfcf
adapted table to new semantics of STACK
1987-08-26 13:47:37 +00:00
em
94534b7c15
1- Floating point routines now call routines instead of calling trp.
1985-04-12 14:25:59 +00:00
garde
80e349860b
Added RCS id.
1985-03-18 12:55:07 +00:00
garde
d52117c8dd
Some less important changes
1985-03-18 10:00:30 +00:00
garde
736a2d1022
Many things improved and extended
1985-03-04 13:42:38 +00:00
garde
8e154eb826
Many, many improvements made, ususually small ones.
...
For example: many em-patterns have got alternative code-rules.
1985-02-01 12:51:56 +00:00
garde
a849b751a9
src1 and src2 extended.
...
Errors in 'pat loc cmi teq' and 'pat loc cmi tne' recovered.
Second stack-pattern for 'pat zlt' and 'pat zge' added.
Patterns for 'lil loc adi sil', 'lil inc sil', 'lil dec sil'
and 'sil lil' added.
1985-01-22 19:55:11 +00:00
garde
d8d2068664
Initial revision
1985-01-17 14:31:34 +00:00