Commit graph

7668 commits

Author SHA1 Message Date
David Given dcba03646b Treebuilder now gets to the bottom of my test file, merrily generating
(probably horribly broken) IR.
2016-09-19 23:30:41 +02:00
David Given 6ce2495aeb Store the EM code up front and build the basic block graph *before*
generating the IR code. Lots more IR code.
2016-09-19 23:06:59 +02:00
David Given 176cd7365c Archival checking of the half-written IR treebuilder. 2016-09-18 23:24:54 +02:00
George Koehler 5b69777647 Rename our pseudo-opcode 'la' to 'li32'.
GNU as has "la %r4,8(%r3)" as an alias for "addi %r4,%r3,8", meaning
to load the address of the thing at 8(%r3).  Our 'la', now 'li32',
makes an addis/ori pair to load an immediate 32-bit value.  For
example, "li32 r4,23456789" loads a big number.
2016-09-18 17:03:23 -04:00
George Koehler 9db305b338 Enable the Hall check again, and get powerpc to pass it.
Upon enabling the check, mach/powerpc/ncg/table fails to build as ncgg
gives many errors of "Previous rule impossible on empty stack".  David
Given reported this problem in 2013:
  https://sourceforge.net/p/tack/mailman/message/30814694/

Commit c93cb69 commented out the error in util/ncgg/cgg.y to disable
the Hall check.  This commit enables it again.  In ncgg, the Hall
check is checking that a rule is possible with an empty fake stack.
It would be possible if ncg can coerce the values from the real stack
to the fake stack.  The powerpc table defined coercions from STACK to
{FS, %a} and {FD, %a}, but the Hall check didn't understand the
coercions and rejected each rule "with FS" or "with FD".

This commit removes the FS and FD tokens and adds a new group of FSREG
registers for single-precision floats, while keeping FREG registers
for double precision.  The registers overlap, with each FSREG
containing one FREG, because it is the same register in PowerPC
hardware.  FS tokens become FSREG registers and FD tokens become FREG
registers.  The Hall check understands the coercions from STACK to
FSREG and FREG.  The idea to define separate but overlapping registers
comes from the PDP-11 table (mach/pdp/ncg/table).

This commit also removes F0 from the FREG group.  This is my attempt
to keep F0 off the fake stack, because one of the stacking rules uses
F0 as a scratch register (FSCRATCH).
2016-09-18 15:08:55 -04:00
George Koehler 9ec2918e14 In ncgg, increase MAXREGS from 80 to 200.
I need this to add more registers to powerpc.
2016-09-18 14:37:42 -04:00
George Koehler e4ce7da0a2 Fix hilo.p for big-endian platforms.
Unless it is packed, a Pascal char is a C int.  Using C types, hilo.p
passed an int *buf to uread(), which expected a char *buf.  Then
uread() wrote the char on the end of the int.  This worked on
little-endian platforms.  This failed on big-endian platforms, as
writing the value to the big end of an int multiplied it by 16777216.

The fix is to use a packed array [0..0] of char in Pascal.  I also
change 'string' to a packed array, though this is not a necessary part
of the fix.
2016-09-18 00:07:30 -04:00
George Koehler 03b067e1d5 Add the missing .lar4 and .sar4 for powerpc.
Inspired by the sparc code (mach/sparc/libem/lar.s).  My powerpc code
might still have bugs, but it's enough for examples/hilo.mod to work.

May need to 'make clean' or touch a build.lua file, so ackbuilder can
notice the new lar4.s and sar4.s files and build them.
2016-09-17 23:55:55 -04:00
David Given f992eb28ac ANSIise to fix warnings. 2016-09-18 00:23:42 +02:00
George Koehler ff4a7e3d2a Merge branch 'default' into kernigh-linuxppc 2016-09-17 18:15:54 -04:00
David Given 24380e2a93 Abstract out the EM reader; skeleton of the tree builder. 2016-09-18 00:02:16 +02:00
David Given 2eee391aef Basic skeleton of em parser. 2016-09-17 22:21:47 +02:00
David Given 80cb6ba927 Eliminate the RELOH2 relocation, as it never worked --- the address would be
calculated incorrectly because of overflow errors.

Replace it with an extended RELOPPC relocation which understands addis/ori
pairs; add an la pseudoop to the assembler which generates these and the
appropriate relocation. Make good.

--HG--
branch : dtrg-experimental-powerpc-branch
2016-09-17 12:43:15 +02:00
David Given 45a950571d Mostly add support for the experimental and largely broken linuxppc platform.
(Doesn't quite build.)

--HG--
branch : dtrg-experimental-powerpc-branch
2016-09-15 23:12:03 +02:00
David Given 4703db0fff Merge from default.
--HG--
branch : dtrg-experimental-powerpc-branch
2016-09-15 22:59:01 +02:00
David Given 52ad82f8b9 Merge pull request #3 from kernigh/ego-fix
Fix bugs with memory allocation in ego.
2016-09-10 11:25:21 +02:00
George Koehler b1d1b5e1f8 Fix bugs with memory allocation in ego.
cf/cf_loop.c and share/put.c tried to read the next pointer in an
element of a linked list after freeing the element.  ud/ud_copy.c
tried to read beyond the end of the _defs_ array: it only has
_nrexpldefs_ elements, not _nrdefs_ elements.

These bugs caused core dumps on OpenBSD.  Its malloc() put _defs_ near
the end of a page, so reading beyond the end crossed into an unmapped
page.  Its free() wrote junk bytes and changed the next pointer to
0xdfdfdfdfdfdfdfdf.
2016-09-09 23:37:43 -04:00
David Given 8c94b1316c Add unlink system call. 2016-09-04 19:23:02 +02:00
David Given 56e13e24e0 Cleanup some stray files. 2016-09-03 19:22:38 +02:00
David Given 1b8df04e58 Add modeline, fix formatting. 2016-09-03 19:17:09 +02:00
David Given 95ad06849b Updated. 2016-09-03 19:07:12 +02:00
David Given de2f99dc1a More documentation. 2016-09-03 19:01:47 +02:00
David Given ea4142daee First half of the ackbuilder documentation. 2016-09-03 01:04:16 +02:00
David Given ff9bf5b08a Makefiles are now slightly less inaccurate. Does actually seem to do sensible
incremental builds now. I loathe make.
2016-09-03 00:20:11 +02:00
David Given de7023dd61 Add an install target. 2016-09-02 23:03:57 +02:00
David Given f67c98e239 Distributions are a pain --- let's not bother any more. Instead, we just tag
the repository and download a complete snapshot, old and ancient stuff and all.
2016-09-02 23:00:38 +02:00
David Given 612e38f1c6 Remove the old make-based build system, plus some big chunks of horribly
obsolete protomake build system.
2016-09-02 22:17:51 +02:00
David Given 96e7447bfa Clean up the top level makefile. 2016-09-01 23:36:39 +02:00
David Given 2b6d251dec Fix a fun bug where, every now again, ego would get its temporary files mangled
and generate invalid calls to the optimisers.

Previously ego would generate a temporary file template that looked like
/tmp/ego.A.BB.XXXXXX, call mktemp() on it to randomise the XXXXXX, and then
replace A and BB with data.

However, it used strrchr to find the A and B. Which would fine, except when
mktemp produced an A or a B in the randomised part...

This code was written on 4 March 1991. I was 16.
2016-08-22 23:53:01 +02:00
David Given 2a95b1c5e3 Forgot to check a file in. 2016-08-22 22:45:32 +02:00
David Given 5bae29a00c ego now builds and is used.
This needed lots of refactoring to ego --- not all platforms have ego descr
files, and ego will just crash if you invoke it without one. I think originally
it was never intended that these platforms would be used at -O2 or above.

Plats now only specify the ego descr file if they have one.
2016-08-21 22:01:19 +02:00
David Given 08823a172c filenamesof() an installable now returns all installed files, not just the ones
at the top level (necessary to make a lot of the dependency stuff work when
using tools which depend on installables).
2016-08-21 21:55:21 +02:00
David Given 84ee7c9cc4 Fix linking bug where em_decode would generate binary data instead of text. 2016-08-21 20:27:52 +02:00
David Given 2b2bd93e44 Run through clang-format. 2016-08-21 20:08:05 +02:00
David Given 44b6421519 Run through clang-format. 2016-08-21 19:53:14 +02:00
David Given 671bf250f5 Run through clang-format. 2016-08-21 19:46:19 +02:00
David Given 918f300513 Run through clang-format. 2016-08-21 19:38:54 +02:00
David Given 1b66b63eae Run through clang-format. 2016-08-21 19:38:02 +02:00
David Given 3584ddb6e9 Push through clang-format. 2016-08-21 19:34:54 +02:00
David Given a4f136f999 Run through clang-format. 2016-08-21 18:51:36 +02:00
David Given 03a0b182c4 Push em_ego.c through clang-format before working on it. 2016-08-21 18:45:25 +02:00
David Given 1a7b4f8729 Build the examples when doing a normal build; this exercises the compiler as a
whole and is one step further towards a proper test suite.
2016-08-20 14:05:24 +02:00
David Given 53c9731036 aal doesn't build the ranlib table if you don't set -DAAL. 2016-08-20 14:04:46 +02:00
David Given 856eb120b3 Add files which got missed in the initial build pass. 2016-08-20 14:04:17 +02:00
David Given edee22510b liblinux is no more; its files are now in libsys. 2016-08-20 14:03:49 +02:00
David Given 52eaf753b6 rpi has a time() function; don't try to call gettimeofday(). 2016-08-20 14:03:19 +02:00
David Given f561b94b49 Print hex numbers actually properly this time. 2016-08-20 14:02:12 +02:00
David Given 204f932ed2 Raspberry Pi backend now builds. 2016-08-20 12:40:13 +02:00
David Given 23e8d5af5a Wildcards are allowed to match no files now. 2016-08-20 12:40:00 +02:00
David Given 46bd70380c Filename variables now get passed into ackbuilder on the command line. 2016-08-15 00:47:08 +02:00