David Given
7efb749003
Set fixes; also add discrete tests for and, ior, xor.
2018-09-14 14:13:35 +01:00
David Given
08b1e8d71b
Make inn work; fix broken 64-bit loads and stores.
2018-09-14 13:48:43 +02:00
David Given
5d0876a30b
Implement a working .trp.
2018-09-14 12:26:27 +02:00
David Given
ba0849c87c
Remove la; turns out that the assembler gets upset if you ask it to
...
generate more than one fixup per instruction (I think).
2018-09-14 11:30:15 +02:00
David Given
c4e3d0903e
Bugfix rck.
2018-09-14 00:38:31 +02:00
David Given
8c0b2f8aee
Fix csa and csb.
2018-09-14 00:15:43 +02:00
David Given
9b0a1c1c10
Make work with clang.
2018-09-14 00:04:25 +02:00
David Given
57338b1991
Fix an incorrect instruction, and incredibly broken li handling.
2018-09-12 23:59:09 +02:00
David Given
ecb3395aba
Converting floats and doubles to integers now works, as much as these ever do
...
on MIPS; turns out that it can't (or at least can't in qemu) reliably turn
INT_MIN from a double to an int.
2018-09-12 23:58:48 +02:00
David Given
642956fa2f
mcg now uses dataf4 and dataf8 to emit floating point constants, and so doesn't
...
need flt_arith any more. (And also generates them correctly on little-endian
systems.) as now parses numbers properly, doesn't trash memory all over the
place, and can handle negative numbers.
2018-09-12 23:19:32 +02:00
David Given
8105281534
Make sure li works properly when loading fixed up values which end up as 0. Use
...
lui rather than li to load high values.
2018-09-12 22:28:40 +02:00
David Given
a8df9721d3
Adding new tokens to the assembler isn't quite as easy as I thought: ensure
...
that NUMBERF is stored properly in the temporary file.
2018-09-12 22:27:39 +02:00
David Given
8379969b6f
Fix an unsubtle bug where subtractions were done backwards...
2018-09-11 23:16:50 +02:00
David Given
8230ec42ac
Fix a subtle thinko which was causing bits 2-3 of jump targets to be reset.
2018-09-11 23:16:30 +02:00
David Given
0ce368324e
Add the bitset helpers. We now have enough helpers for the tests to run (and
...
massively fail).
2018-09-10 23:37:28 +02:00
David Given
2f8fe3ce6e
Do some cleanup; ha16[] and friends can now be used with li.
2018-09-10 23:37:04 +02:00
David Given
3122946a6f
Replaced some incorrect hi16s with ha16s.
2018-09-10 23:21:54 +02:00
David Given
008737ed19
Added some more very untested helper functions.
2018-09-10 23:20:52 +02:00
David Given
a1747ac916
Add the .dataf4 and .dataf8 directives to the assembler --- manually converting
...
floats and doubles to bytes is not fun. It might even work!
2018-09-10 22:56:18 +02:00
David Given
53f7de794a
Ansify.
2018-09-10 22:55:05 +02:00
David Given
976fa0efca
Clang-format before editing.
2018-09-10 22:37:04 +02:00
David Given
6275896a11
Clang-format before editing.
2018-09-10 22:25:14 +02:00
David Given
185e910246
Lots more untested helper functions.
2018-09-10 01:08:25 +02:00
David Given
f8f6fa9fc1
Added some more incredibly untested helper functions.
2018-09-10 00:21:16 +02:00
David Given
bb15c03339
Remember to preserve input registers if we're going to be reading from them
...
after writing to the output register.
2018-09-09 18:53:49 +02:00
David Given
e88670dad4
Yikes! Turns out that FPU registers are only 32 bits wide, and doubles are
...
stored in pairs, just like on the PowerPC!
2018-09-09 18:25:00 +02:00
David Given
5dfef6f180
Rework relocations again: add RELO2HI and RELO2HISAD for the high two bytes of
...
a word.
2018-09-09 14:11:11 +02:00
David Given
95dd6f0141
Fix some niggling issues --- we have our first binary now!
2018-09-09 12:24:22 +02:00
David Given
b3b7c684c6
Simplify MIPS relocations. Add RELS2 (for generic high-word relocations). Add
...
support for MIPS branch-and-jump relocations.
2018-09-09 12:23:59 +02:00
David Given
0d8d98fd0f
Warning fix.
2018-09-09 12:22:59 +02:00
David Given
d2a1d4dcda
Added some very untested csa and csb implementations, based on the PowerPC
...
ones.
2018-09-08 23:12:57 +02:00
David Given
75308901bc
Added hi[] and lo[] functions to the assembler; fix things enough that we now
...
get to the point of failing to link programs.
2018-09-08 22:42:06 +02:00
David Given
379c1a4a3c
Rework floating point conversion. Bash enough of the table into workingness
...
that the libraries build now.
2018-09-08 22:06:38 +02:00
David Given
d2c14ca44f
Precisely one stack hreg gets allocated for each vreg/congruence group for
...
eviction; this prevents us from having to worry about moving values from stack
slot to stack slot, which is hard.
2018-09-08 18:59:55 +02:00
David Given
b7a1c96986
MIPS appears to hate converting unsigneds to floats and vice versa.
2018-09-05 23:53:38 +02:00
David Given
fc0b0ae178
(Slightly) better errors on phi congruence group mismatches.
2018-09-05 23:53:08 +02:00
David Given
7fbce066f8
We attempt to compile the first library function; we fail.
2018-09-05 00:13:01 +02:00
David Given
26fe3f7530
Added library skeletons.
2018-09-05 00:07:07 +02:00
David Given
26c0228b14
The examples all compile now (probably incorrectly, and the libc doesn't
...
compile yet).
2018-09-04 23:55:28 +02:00
David Given
9d80756253
Lots of assembler and rule bugfixing.
2018-09-04 23:43:24 +02:00
David Given
fe5ca5a85f
Added li and la instructions.
2018-09-03 22:47:41 +02:00
David Given
26f9b4ceae
Add in floating point support to the code generator.
2018-09-03 22:06:05 +02:00
David Given
f8e71d888b
Add some painfully untested FPU instructions.
2018-09-02 21:36:09 +02:00
David Given
1d6ecddcf4
The MIPS backend is still full of holes, and cut-and-pasted PowerPC code, but
...
is beginning to look like an actual code generator.
2018-09-02 18:57:25 +02:00
David Given
4741ed8e14
Add a completely non-tested table-based MIPS assembler.
2018-09-01 19:35:31 +02:00
David Given
d623440c77
Add the core of a simple em22 platform. Unfortunately it doesn't work; the old
...
em libmon vanished decades ago (or never existed), and also ass appears to have
a different idea of what the em opcodes are to everything else and gets
confused.
2018-06-10 20:25:48 +09:00
David Given
911ce7ceb5
Crudely tweak some of the prototypes to please clang, which is pickier about
...
K&R C than gcc is.
2018-06-02 21:31:18 +02:00
David Given
05ddefad65
Adopt a copy of Minix 2's ed; this allows the ACK's antiquated ed scripts to
...
run with a minimum of tweaking. Rewriting them for modern ed looks really hard.
Fixes : #84
2018-06-02 18:02:51 +02:00
George Koehler
1df4db99c9
Optimize libfp. Don't lose -O6 in ackcflags.
...
This drops 124 bytes from the mandelbrot command (from 15015 to 14891
bytes) but has almost no effect on performance; the command takes
about 144 seconds (in YAZE-AG) both before and after optimizing libfp.
2018-04-25 22:48:28 -04: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