ack.git
7 years agoMerge from default.
David Given [Wed, 18 Jan 2017 19:39:50 +0000 (20:39 +0100)]
Merge from default.

7 years agoMerge pull request #45 from davidgiven/dtrg-fixups
David Given [Wed, 18 Jan 2017 19:18:04 +0000 (20:18 +0100)]
Merge pull request #45 from davidgiven/dtrg-fixups

Add hi16[], ha16[], lo16[] support to the PowerPC assembler

7 years agoAdd a man page for the PowerPC assembler (not used anywhere yet).
David Given [Wed, 18 Jan 2017 19:10:16 +0000 (20:10 +0100)]
Add a man page for the PowerPC assembler (not used anywhere yet).

7 years agoClean up the led includes.
David Given [Wed, 18 Jan 2017 18:55:56 +0000 (19:55 +0100)]
Clean up the led includes.

7 years agoApply kernigh@'s fix to broken symbol tables in aelflod (via mailing list patch):
David Given [Tue, 17 Jan 2017 23:06:14 +0000 (00:06 +0100)]
Apply kernigh@'s fix to broken symbol tables in aelflod (via mailing list patch):

---snip---
The ELF spec at http://www.sco.com/developers/gabi/ says, "In each
symbol table, all symbols with STB_LOCAL binding precede the weak and
global symbols," and that sh_info is the index of the first non-local
symbol.

I was mixing local and global symbols and setting sh_info to zero. I
also forgot to set the type of the .shstrtab section.
---snip---

7 years agoMerge from default.
David Given [Tue, 17 Jan 2017 23:02:32 +0000 (00:02 +0100)]
Merge from default.

7 years agoAdd a bunch more set operations to the PowerPC backends, and the Pascal test dtrg-pas
David Given [Tue, 17 Jan 2017 21:31:38 +0000 (22:31 +0100)]
Add a bunch more set operations to the PowerPC backends, and the Pascal test
for the same.

7 years agoEnsure that memory is zero-initialised.
David Given [Mon, 16 Jan 2017 21:45:03 +0000 (22:45 +0100)]
Ensure that memory is zero-initialised.

7 years agoFix a buffer overrun that was manifesting on OpenBSD; also fix a bounds check and...
David Given [Mon, 16 Jan 2017 21:44:37 +0000 (22:44 +0100)]
Fix a buffer overrun that was manifesting on OpenBSD; also fix a bounds check and some uninitialised variable problems.

7 years agoRun through clang-format.
David Given [Mon, 16 Jan 2017 20:16:33 +0000 (21:16 +0100)]
Run through clang-format.

7 years agoFix cosmetic warning when compiling B.
David Given [Sun, 15 Jan 2017 22:00:17 +0000 (23:00 +0100)]
Fix cosmetic warning when compiling B.

7 years agoMerge pull request #40 from davidgiven/dtrg-pas
David Given [Sun, 15 Jan 2017 21:56:06 +0000 (22:56 +0100)]
Merge pull request #40 from davidgiven/dtrg-pas

Make Pascal sets work on PowerPC (both ncg and mcg); make Pascal know about 8-bit bytes.

7 years agoAllow the full 8-bit byte range when reading program source.
David Given [Sun, 15 Jan 2017 21:41:11 +0000 (22:41 +0100)]
Allow the full 8-bit byte range when reading program source.

7 years agoRename the test to something more sensible.
David Given [Sun, 15 Jan 2017 21:33:41 +0000 (22:33 +0100)]
Rename the test to something more sensible.

7 years agoIncrease the number of items in a char set from 128 to 256, to cover all
David Given [Sun, 15 Jan 2017 21:30:25 +0000 (22:30 +0100)]
Increase the number of items in a char set from 128 to 256, to cover all
possible bytes (7-bit bytes are so 70s).

7 years agoAdd a test (currently failing) to check that Pascal char sets can store all 256
David Given [Sun, 15 Jan 2017 21:28:14 +0000 (22:28 +0100)]
Add a test (currently failing) to check that Pascal char sets can store all 256
possible values. Add the PowerPC ncg and mcg backend support to let the test
actually run, including modifying a bunch of PowrePC libem functions so that
they can be called from both ncg and mcg.

7 years agoActually tell the user which tests failed.
David Given [Sun, 15 Jan 2017 21:26:09 +0000 (22:26 +0100)]
Actually tell the user which tests failed.

7 years agoAdd missing header.
David Given [Sun, 15 Jan 2017 11:04:47 +0000 (12:04 +0100)]
Add missing header.

7 years agoTurns out Apple's hi16/ha16 exactly match my ha16/has16, so renamed
David Given [Sun, 15 Jan 2017 10:59:33 +0000 (11:59 +0100)]
Turns out Apple's hi16/ha16 exactly match my ha16/has16, so renamed
accordingly. (Memo to self: read the docs *before* doing the work.)

7 years agoSigned vs unsigned lower halves of powerpc fixups are now handled by having two
David Given [Sun, 15 Jan 2017 10:51:37 +0000 (11:51 +0100)]
Signed vs unsigned lower halves of powerpc fixups are now handled by having two
assembler directives, ha16() and has16(), for the upper half; has16() applies
the sign adjustment. .powerpcfixup is now gone, as we generate the relocation
in ha*() instead. Add special logic to the linker for undoing and redoing the
sign adjustment when reading/writing fixups. Tests still pass.

7 years agoRevert change; addis/ori requires different handling to addis/lwz due to ori's
David Given [Sun, 15 Jan 2017 09:31:20 +0000 (10:31 +0100)]
Revert change; addis/ori requires different handling to addis/lwz due to ori's
payload being unsigned while lwz's payload is signed.

7 years agoUpdate the hi/lo syntax to be a bit more standard.
David Given [Sun, 15 Jan 2017 09:21:02 +0000 (10:21 +0100)]
Update the hi/lo syntax to be a bit more standard.

7 years agoAdd assembler support for fixing up arbitrary oris/addi pairs of instructions;
David Given [Sat, 14 Jan 2017 23:15:01 +0000 (00:15 +0100)]
Add assembler support for fixing up arbitrary oris/addi pairs of instructions;
this should allow oris/lwz constant value loads, which will save an opcode.

7 years agovregmapping has gone; the input and output vregs are now part of the valueusage
David Given [Sat, 14 Jan 2017 11:26:23 +0000 (12:26 +0100)]
vregmapping has gone; the input and output vregs are now part of the valueusage
structure. This allows them to be different, which vastly simplifies parallel
copies.

7 years agoRework hashtable iterators; you can now delete items while iterating over them
David Given [Sat, 14 Jan 2017 11:25:10 +0000 (12:25 +0100)]
Rework hashtable iterators; you can now delete items while iterating over them
(only the current item, though).

7 years agoTypo fix so that liveness is now calculated correctly again; remember to reset
David Given [Fri, 13 Jan 2017 22:08:25 +0000 (23:08 +0100)]
Typo fix so that liveness is now calculated correctly again; remember to reset
the storage set on exit so we don't end up with bogus pointers after the heap
is freed.

7 years agoHashtables now allow you to specify allocation and free functions; the mcg code
David Given [Fri, 13 Jan 2017 21:27:59 +0000 (22:27 +0100)]
Hashtables now allow you to specify allocation and free functions; the mcg code
generator uses this to put all temporary data onto the procedure heap.

7 years agoChange the value in/out info from a bunch of ARRAYOFs to a single hashtable of
David Given [Fri, 13 Jan 2017 21:05:42 +0000 (22:05 +0100)]
Change the value in/out info from a bunch of ARRAYOFs to a single hashtable of
per-hop value metadata.

7 years agoHashtable get, next and pop operations now treat a null hashtable pointer as if
David Given [Fri, 13 Jan 2017 21:04:33 +0000 (22:04 +0100)]
Hashtable get, next and pop operations now treat a null hashtable pointer as if
it were an empty hashtable.

7 years agoClone all the vregs just before and after every instruction, so converting the
David Given [Fri, 13 Jan 2017 20:17:16 +0000 (21:17 +0100)]
Clone all the vregs just before and after every instruction, so converting the
program into elementary form.

7 years agoReplace the 'preserved' constraint with a per-register form of 'corrupted';
David Given [Fri, 13 Jan 2017 19:29:05 +0000 (20:29 +0100)]
Replace the 'preserved' constraint with a per-register form of 'corrupted';
it's going to work almost exactly the same, but is easier to get my head around
and friendlier to the new allocator.

7 years agoStart putting the vreg stuff back in; vregs are now assigned (but we're not in
David Given [Thu, 12 Jan 2017 22:29:23 +0000 (23:29 +0100)]
Start putting the vreg stuff back in; vregs are now assigned (but we're not in
elementary form yet).

7 years agoRemove imap, as it was ugly and nobody used it.
David Given [Thu, 12 Jan 2017 22:28:35 +0000 (23:28 +0100)]
Remove imap, as it was ugly and nobody used it.

7 years agoArchival checkin (won't build): monster refactor; don't allocate vregs at
David Given [Thu, 12 Jan 2017 20:03:27 +0000 (21:03 +0100)]
Archival checkin (won't build): monster refactor; don't allocate vregs at
instruction selection time, but instead deal with 'values' which are tied to
their parent IR. The code is now way cleaner and more understandable. We'll
aasign vregs in a later pass, as we convert to elementary form.

7 years agoFixup after merge.
David Given [Mon, 9 Jan 2017 21:44:00 +0000 (22:44 +0100)]
Fixup after merge.

7 years agoMerge from default.
David Given [Sun, 8 Jan 2017 17:54:58 +0000 (18:54 +0100)]
Merge from default.

7 years agoFix typo.
David Given [Sun, 8 Jan 2017 17:53:59 +0000 (18:53 +0100)]
Fix typo.

7 years agoImprove confusing error message when calling function procedures from a
David Given [Sun, 8 Jan 2017 10:25:57 +0000 (11:25 +0100)]
Improve confusing error message when calling function procedures from a
top-level statement.

Fixes: #30

7 years agoRun through clang-format.
David Given [Sun, 8 Jan 2017 10:23:56 +0000 (11:23 +0100)]
Run through clang-format.

7 years agoDon't print source file names during compilation (gcc stopped doing it years
David Given [Sat, 7 Jan 2017 23:16:35 +0000 (00:16 +0100)]
Don't print source file names during compilation (gcc stopped doing it years
ago).

7 years agoRun through clang-format.
David Given [Sat, 7 Jan 2017 23:15:23 +0000 (00:15 +0100)]
Run through clang-format.

7 years agoDon't sort inludes any more (breaks too many ACK files).
David Given [Sat, 7 Jan 2017 23:15:10 +0000 (00:15 +0100)]
Don't sort inludes any more (breaks too many ACK files).

7 years agoMerge pull request #32 from dram/add-execve
David Given [Sat, 7 Jan 2017 22:23:00 +0000 (23:23 +0100)]
Merge pull request #32 from dram/add-execve

Add execve() system call for Linux

7 years agoNo longer truncate module names at 10 characters when constructing paths;
David Given [Sat, 7 Jan 2017 22:00:52 +0000 (23:00 +0100)]
No longer truncate module names at 10 characters when constructing paths;
rename some library modules to their full names.

7 years agoRun through clang-format.
David Given [Sat, 7 Jan 2017 21:56:00 +0000 (22:56 +0100)]
Run through clang-format.

7 years agoProperly install man pages.
David Given [Sat, 7 Jan 2017 21:38:30 +0000 (22:38 +0100)]
Properly install man pages.

7 years agoAdd a B man page.
David Given [Sat, 7 Jan 2017 21:35:02 +0000 (22:35 +0100)]
Add a B man page.

7 years agoUpdate the README.
David Given [Sat, 7 Jan 2017 19:11:01 +0000 (20:11 +0100)]
Update the README.

7 years agoMake sure that constant folding doesn't render our tests trivial.
David Given [Sat, 7 Jan 2017 18:53:57 +0000 (19:53 +0100)]
Make sure that constant folding doesn't render our tests trivial.

7 years agoSections are now aligned (required by the EM spec).
David Given [Sat, 7 Jan 2017 17:47:46 +0000 (18:47 +0100)]
Sections are now aligned (required by the EM spec).

7 years agoFix a bunch of issues with pushing and popping mismatched sizes, which the B
David Given [Sat, 7 Jan 2017 17:47:00 +0000 (18:47 +0100)]
Fix a bunch of issues with pushing and popping mismatched sizes, which the B
compiler does a lot; dup 8 for pairs of words is now optimised.

7 years agoPre-and-post-modification operators now work substantially better (i.e.,
David Given [Sat, 7 Jan 2017 17:46:03 +0000 (18:46 +0100)]
Pre-and-post-modification operators now work substantially better (i.e.,
working).

7 years agoMoved the inc/dec operator tests into their own source file; more exhaustive
David Given [Sat, 7 Jan 2017 17:38:43 +0000 (18:38 +0100)]
Moved the inc/dec operator tests into their own source file; more exhaustive
testing.

7 years agoine and ste are now declared to modify memory (preventing cached values being
David Given [Sat, 7 Jan 2017 12:25:09 +0000 (13:25 +0100)]
ine and ste are now declared to modify memory (preventing cached values being
propagated across the modification).

7 years agoIntroduce sequence points before store instructions to prevent loads from the
David Given [Sat, 7 Jan 2017 12:17:39 +0000 (13:17 +0100)]
Introduce sequence points before store instructions to prevent loads from the
same address being delayed until after the store (at which point they'll return
the wrong value).

7 years agoUse a better NOT; and after remembering that PowerPC bit numbers are all
David Given [Sat, 7 Jan 2017 00:03:15 +0000 (01:03 +0100)]
Use a better NOT; and after remembering that PowerPC bit numbers are all
backwards in the documentation, rewrote IFEQ/IFLT/IFLE to actually work.
Probably. Thanks to the B test suite for spotting this.

7 years agoExtern variables can now be written to.
David Given [Fri, 6 Jan 2017 22:24:05 +0000 (23:24 +0100)]
Extern variables can now be written to.

7 years agoEnsure that procedure labels are word-aligned.
David Given [Fri, 6 Jan 2017 21:29:52 +0000 (22:29 +0100)]
Ensure that procedure labels are word-aligned.

7 years agoAdd execve() system call for Linux
Xin Wang [Fri, 6 Jan 2017 10:33:52 +0000 (18:33 +0800)]
Add execve() system call for Linux

7 years agoFix typo in the descr file which was stopping -B from working. Add B
David Given [Wed, 4 Jan 2017 13:28:40 +0000 (13:28 +0000)]
Fix typo in the descr file which was stopping -B from working. Add B
documentation to the ack man page.

7 years agoAdded an abmodules tool which detects B modules and generates an initialiser
David Given [Tue, 3 Jan 2017 18:54:13 +0000 (18:54 +0000)]
Added an abmodules tool which detects B modules and generates an initialiser
function for them (in C, unfortunately).

7 years agoAdd a control flow test.
David Given [Sun, 1 Jan 2017 23:51:48 +0000 (23:51 +0000)]
Add a control flow test.

7 years agoJump tables for switch now go in ROM (required by the EM spec). Forward gotos
David Given [Sun, 1 Jan 2017 23:28:41 +0000 (23:28 +0000)]
Jump tables for switch now go in ROM (required by the EM spec). Forward gotos
now work.

7 years agoAdd proper support for negative constants in external initialisers.
David Given [Sun, 1 Jan 2017 17:56:53 +0000 (17:56 +0000)]
Add proper support for negative constants in external initialisers.

7 years agoRemove the negative-constant code from the compiler; I think it's going to
David Given [Sun, 1 Jan 2017 17:44:55 +0000 (17:44 +0000)]
Remove the negative-constant code from the compiler; I think it's going to
break a=-1 (with no spaces). Backed out changeset dead3363ac7d.

7 years agoAdd tests for more operators.
David Given [Sun, 1 Jan 2017 17:44:03 +0000 (17:44 +0000)]
Add tests for more operators.

7 years agoAdd support for the ~ operator.
David Given [Sun, 1 Jan 2017 17:40:06 +0000 (17:40 +0000)]
Add support for the ~ operator.

7 years agoAdd support for negative constants in external initialisers.
David Given [Sat, 31 Dec 2016 19:43:03 +0000 (19:43 +0000)]
Add support for negative constants in external initialisers.

7 years agoAllow programs to override binit() (so they can register their own modules).
David Given [Sat, 31 Dec 2016 17:39:51 +0000 (17:39 +0000)]
Allow programs to override binit() (so they can register their own modules).

7 years agoAdd support for B tests; add a test for the B operators (finding several
David Given [Sat, 31 Dec 2016 17:38:52 +0000 (17:38 +0000)]
Add support for B tests; add a test for the B operators (finding several
compiler bugs in the process).

7 years agoAdd support for the xor operator.
David Given [Sat, 31 Dec 2016 17:36:12 +0000 (17:36 +0000)]
Add support for the xor operator.

7 years agoB patch table names shouldn't be in the B symbol namespace.
David Given [Sat, 31 Dec 2016 00:14:28 +0000 (00:14 +0000)]
B patch table names shouldn't be in the B symbol namespace.

7 years agoFix issue where !x was actually calculating !!x.
David Given [Sat, 31 Dec 2016 00:14:04 +0000 (00:14 +0000)]
Fix issue where !x was actually calculating !!x.

7 years agoTrying to install openbios-ppc causes Travis to error out now (not sure why).
David Given [Thu, 29 Dec 2016 17:30:47 +0000 (17:30 +0000)]
Trying to install openbios-ppc causes Travis to error out now (not sure why).

7 years agoAdd a B version of the hilo program.
David Given [Thu, 29 Dec 2016 17:20:51 +0000 (17:20 +0000)]
Add a B version of the hilo program.

7 years agoAdd a declaration for the -Bxyz module name flag, used by the B compiler.
David Given [Thu, 29 Dec 2016 17:12:40 +0000 (17:12 +0000)]
Add a declaration for the -Bxyz module name flag, used by the B compiler.
Rename some of the Basic flags to avoid confusion.

7 years agoFix an issue throughout where B couldn't be built by ackprogram due to symbol
David Given [Thu, 29 Dec 2016 17:11:53 +0000 (17:11 +0000)]
Fix an issue throughout where B couldn't be built by ackprogram due to symbol
laziness.

7 years agoBuild the B compiler and standard library (also the Basic one, which was
David Given [Thu, 29 Dec 2016 17:11:07 +0000 (17:11 +0000)]
Build the B compiler and standard library (also the Basic one, which was
missing).

7 years agoFirst draft of the B module code; a module name can now be specified as a
David Given [Thu, 29 Dec 2016 17:10:21 +0000 (17:10 +0000)]
First draft of the B module code; a module name can now be specified as a
compiler flag, which is used to set the name of the patch table. The compiler
now understands C preprocessor line directives. Extend the standard library
somewhat.

7 years agoChange the i80 assembler to be three-pass, which allows forward references;
David Given [Thu, 29 Dec 2016 17:08:53 +0000 (17:08 +0000)]
Change the i80 assembler to be three-pass, which allows forward references;
required for assembling B.

7 years agoDon't crash when using the -u option to enter undefined symbols.
David Given [Wed, 28 Dec 2016 23:49:55 +0000 (23:49 +0000)]
Don't crash when using the -u option to enter undefined symbols.

7 years agoCorrectly export PREFIX to the Lua build system.
David Given [Wed, 28 Dec 2016 19:16:15 +0000 (19:16 +0000)]
Correctly export PREFIX to the Lua build system.

7 years agoMerge in B changes.
David Given [Wed, 28 Dec 2016 17:30:14 +0000 (17:30 +0000)]
Merge in B changes.

7 years agoMerge from default.
David Given [Mon, 26 Dec 2016 19:44:48 +0000 (19:44 +0000)]
Merge from default.

7 years agoEmit more detailed register class information.
David Given [Sun, 18 Dec 2016 19:21:22 +0000 (20:21 +0100)]
Emit more detailed register class information.

7 years agoWarning fix.
David Given [Sun, 18 Dec 2016 19:20:42 +0000 (20:20 +0100)]
Warning fix.

7 years agoAdd a bitmap library to modules/src/data; mcgg now computers register bitmaps.
David Given [Sat, 17 Dec 2016 21:25:26 +0000 (22:25 +0100)]
Add a bitmap library to modules/src/data; mcgg now computers register bitmaps.

7 years agoReplace smap with string-based hashtables; add some boilerplate to make sets
David Given [Sat, 17 Dec 2016 19:22:20 +0000 (20:22 +0100)]
Replace smap with string-based hashtables; add some boilerplate to make sets
and hashtables of strings easier to use.

7 years agoFactor out the register handling code into a separate file, because everything
David Given [Sat, 17 Dec 2016 18:33:56 +0000 (19:33 +0100)]
Factor out the register handling code into a separate file, because everything
is getting to be a bit of a mess.

7 years agoHash table sizes now must be a power of two (saves a modulus instruction);
David Given [Sat, 17 Dec 2016 09:30:27 +0000 (10:30 +0100)]
Hash table sizes now must be a power of two (saves a modulus instruction);
optimise key comparison (if the two keys are identical, we don't need to call
the comparator).

7 years agoBigraph now uses hash tables to hold edges inside vertices, rather than linked
David Given [Sat, 17 Dec 2016 09:18:51 +0000 (10:18 +0100)]
Bigraph now uses hash tables to hold edges inside vertices, rather than linked
lists.

7 years agoMassive graph performance boost by checking to see whether an edge already
David Given [Fri, 16 Dec 2016 23:21:27 +0000 (00:21 +0100)]
Massive graph performance boost by checking to see whether an edge already
exists in the hash table before trying to add it.

7 years agoMore porting to the set and graph libraries; no longer maintain a set of
David Given [Fri, 16 Dec 2016 22:25:10 +0000 (23:25 +0100)]
More porting to the set and graph libraries; no longer maintain a set of
vertices, as it's easier and faster to fetch from the interference or
preference graphs.

7 years agoFix warning.
David Given [Fri, 16 Dec 2016 22:23:41 +0000 (23:23 +0100)]
Fix warning.

7 years agoAdd hashtable/set_empty to go with _reset, which removes all items from the
David Given [Fri, 16 Dec 2016 21:16:45 +0000 (22:16 +0100)]
Add hashtable/set_empty to go with _reset, which removes all items from the
table but doesn't free the bucket array or reset the size --- saves an
allocation when reusing the hashtable.

7 years agoFix crash when enumerating uninitialised hashtables.
David Given [Fri, 16 Dec 2016 21:12:28 +0000 (22:12 +0100)]
Fix crash when enumerating uninitialised hashtables.

7 years agoConvert to the set API.
David Given [Fri, 16 Dec 2016 20:12:35 +0000 (21:12 +0100)]
Convert to the set API.

7 years agoConvert to use the set API.
David Given [Fri, 16 Dec 2016 20:08:28 +0000 (21:08 +0100)]
Convert to use the set API.

7 years agoConvert to use the set API.
David Given [Fri, 16 Dec 2016 20:04:31 +0000 (21:04 +0100)]
Convert to use the set API.

7 years agoConvert to use set and graph APIs.
David Given [Fri, 16 Dec 2016 20:01:40 +0000 (21:01 +0100)]
Convert to use set and graph APIs.