Commit graph

6813 commits

Author SHA1 Message Date
George Koehler
865ef629dd Multiple tweaks to plat/linuxppc/descr
Don't define __POWERPC.  I don't know any other compiler that defines
__POWERPC and don't want to invent a new macro.  Apple's gcc 4.0.1
from Xcode 2.5 defines __ppc__, _ARCH_PPC, __POWERPC__.  Debian's gcc
4.9.2-10 defines _ARCH_PPC, __PPC__, __powerpc__, __PPC, __powerpc,
PPC, powerpc.

Move the base vm address from 0x80000000 down to 0x10000000, as this
is where Debian loads /bin/true.  This is still higher than the base
addresses for linux386 and linux68k.

Sync led's arguments with linux386.
2016-09-21 16:26:30 -04: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
George Koehler
ff4a7e3d2a Merge branch 'default' into kernigh-linuxppc 2016-09-17 18:15:54 -04: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
David Given
420c47c386 Fix dependency error (only shows up with make, not ninja. Odd). 2016-08-15 00:46:43 +02:00
David Given
7b8d9e2d0e Fix compiler warnings and 64bitisms. 2016-08-14 23:01:12 +02:00
David Given
870489c8b0 Er, oops; the ninja build system is in a package called ninja-build. 2016-08-14 22:55:10 +02:00
David Given
53f043ff40 Backport to Lua 5.1 (because 5.2 on Travis doesn't have luaposix...). 2016-08-14 22:52:57 +02:00
David Given
38c6a87ed5 Add another Travis library. 2016-08-14 22:41:54 +02:00