David Given [Sat, 21 Jan 2017 22:43:35 +0000 (23:43 +0100)]
Wire up REG and NOP properly (so they actually import the right values).
David Given [Sat, 21 Jan 2017 22:22:54 +0000 (23:22 +0100)]
Add basic freezing code. Rework the actual allocation phase to do it in the
right order. Disable spilling (as it's not working yet). Now the results look
almost correct, sometimes!
David Given [Sat, 21 Jan 2017 22:21:55 +0000 (23:21 +0100)]
Fix bug where pop would return the wrong value.
David Given [Sat, 21 Jan 2017 22:21:33 +0000 (23:21 +0100)]
Loading longs might corrupt the input register (if the output register pair
aliases it).
David Given [Sat, 21 Jan 2017 19:51:32 +0000 (20:51 +0100)]
We now allocate fake registers! Although it's broken and needs reworking.
David Given [Sat, 21 Jan 2017 19:50:57 +0000 (20:50 +0100)]
Add a function for finding the first unset bit.
David Given [Sat, 21 Jan 2017 19:50:47 +0000 (20:50 +0100)]
The degree of missing vertices is now always 0.
David Given [Fri, 20 Jan 2017 20:29:58 +0000 (21:29 +0100)]
Merge from default.
David Given [Fri, 20 Jan 2017 20:28:32 +0000 (21:28 +0100)]
Keep track of which vregs need to be in real registers (i.e. are being used to
do work) and which ones aren't (and so can be spilt). Do some long-needed
cleanup and removal of dead code.
David Given [Thu, 19 Jan 2017 23:06:09 +0000 (00:06 +0100)]
Merge pull request #46 from kernigh/kernigh-pr-man
Tune the installed manual pages.
David Given [Thu, 19 Jan 2017 22:22:53 +0000 (23:22 +0100)]
Enough of the new allocator works to construct interference and affinity
graphs, coalesce BB inputs/outputs, and coalesce some affinity nodes (although
there's not really any logic yet to properly think about node degrees).
David Given [Thu, 19 Jan 2017 22:21:15 +0000 (23:21 +0100)]
Fix a horrible bug where removing edges wouldn't work; add the ability to
iterate over a vertex's neighbours; add the ability to merge vertices.
David Given [Thu, 19 Jan 2017 22:20:24 +0000 (23:20 +0100)]
Add set_get_any() to return a random item in the set (just a simple wrapper
around a one-use iterator).
George Koehler [Thu, 19 Jan 2017 04:02:30 +0000 (23:02 -0500)]
Tune the installed manual pages.
This commit slightly improves the formatting of the manuals. My
OpenBSD machine uses mandoc(1) to format manuals. I check the manuals
with `mandoc -T lint` and fix most of the warnings. I also make
other changes where mandoc didn't warn me.
roff(7) says, "Each sentence should terminate at the end of an input
line," but we often forgot this rule. I insert some newlines after
sentences that had ended mid-line.
roff(7) also says that blank lines "are only permitted within literal
contexts." I delete blank lines. This removes some extra blank lines
from mandoc's output. If I do want a blank line in the output, I call
".sp 1" to make it in man(7). If I want a blank line in the source,
but not the output, I put a plain dot "." so roff ignores it.
Hyphens used for command-line options, like \-a, should be escaped by
a backslash. I insert a few missing backslashes.
mandoc warns if the date in .TH doesn't look like a date. Our manuals
had a missing date or the RCS keyword "$Revision$". Git doesn't
expand RCS keywords. I put in today's date, 2017-01-18.
Some manuals used tab characters in filled mode. That doesn't work.
I use .nf to turn off filled mode, or I use .IP in man(7) to make the
indentation without a tab character.
ack(1) defined a macro .SB but never used it, so I delete the
definition. I also remove a call to the missing macro .RF.
mandoc warns about empty paragraphs. I deleted them. mandoc also
warned about these macro pairs in anm(1):
.SM
.B text
The .SM did nothing because the .B text is on a different line. I
changed each pair to .SB for small bold text.
I make a few other small changes.
David Given [Wed, 18 Jan 2017 22:33:40 +0000 (23:33 +0100)]
Merge pull request #44 from kernigh/kernigh-pr-as
mach/proto/as: allow more tokens
David Given [Wed, 18 Jan 2017 19:39:50 +0000 (20:39 +0100)]
Merge from default.
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
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).
David Given [Wed, 18 Jan 2017 18:55:56 +0000 (19:55 +0100)]
Clean up the led includes.
George Koehler [Wed, 18 Jan 2017 03:41:11 +0000 (22:41 -0500)]
Allow more tokens in the assembler.
I need this so I can add more %token lines to mach/powerpc/as/mach2.c
The assembler's tempfile encoded each token in a byte. This only
worked with tokens 0 to 127 and 256 and 383. If a token 384 or higher
existed, the assembler stopped working. I need tokens 384 and higher.
I change the token encoding to a 2-byte little-endian integer. I also
change a byte in the string encoding.
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---
David Given [Tue, 17 Jan 2017 23:02:32 +0000 (00:02 +0100)]
Merge from default.
George Koehler [Tue, 17 Jan 2017 21:41:29 +0000 (16:41 -0500)]
Use prototypes in mach/proto/as/comm5.c
Order the function prototypes in comm1.h to match the order of the
function definitions in *.c files.
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.
George Koehler [Tue, 17 Jan 2017 03:39:44 +0000 (22:39 -0500)]
Delay inclusion of <stdint.h> when compiling comm2.y
See issue #1 (https://github.com/davidgiven/ack/issues/1). The file
mach/proto/as/comm2.y goes through cpp twice. The _include macro,
defined in comm2.y and used in comm0.h, delays the inclusion of system
header files. The inclusion of <stdint.h> wasn't delayed. This
caused multiple inclusions of <sys/_types.h> in FreeBSD and
<machine/_types.h> in OpenBSD.
Use _include to delay <stdint.h>. Also use _include for "arch.h" and
"out.h", because h/out.h includes <stdint.h> and h/arch.h might
include it in the future.
Sort the system includes in comm0.h by moving them up to be with
<stdint.h>. Must include <stdint.h> before "mach0.c", because
mach/powerpc/as/mach0.c needs it. Must include "mach0.c" before
checking ASLD.
George Koehler [Mon, 16 Jan 2017 23:09:55 +0000 (18:09 -0500)]
Remove some obsolete code that causes a gcc warning.
In my OpenBSD/amd64 system, the code becomes
if (0)
outname.on_valu &= ~(((0xFFFFFFFF)<<32)<<32);
The 0xFFFFFFFF is a 32-bit int, so the left shift by 32 is out of
range and causes the gcc warning.
The intent might be to clear any sign-extended bits, if the assignment
outname.on_valu = valu did sign extension. Old C had no unsigned
long, so .on_valu would have been long. The code is obsolete because
h/out.h now declares .on_valu as uint32_t.
David Given [Mon, 16 Jan 2017 21:45:03 +0000 (22:45 +0100)]
Ensure that memory is zero-initialised.
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.
David Given [Mon, 16 Jan 2017 20:16:33 +0000 (21:16 +0100)]
Run through clang-format.
David Given [Sun, 15 Jan 2017 22:00:17 +0000 (23:00 +0100)]
Fix cosmetic warning when compiling B.
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.
David Given [Sun, 15 Jan 2017 21:41:11 +0000 (22:41 +0100)]
Allow the full 8-bit byte range when reading program source.
David Given [Sun, 15 Jan 2017 21:33:41 +0000 (22:33 +0100)]
Rename the test to something more sensible.
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).
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.
David Given [Sun, 15 Jan 2017 21:26:09 +0000 (22:26 +0100)]
Actually tell the user which tests failed.
David Given [Sun, 15 Jan 2017 11:04:47 +0000 (12:04 +0100)]
Add missing header.
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.)
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.
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.
David Given [Sun, 15 Jan 2017 09:21:02 +0000 (10:21 +0100)]
Update the hi/lo syntax to be a bit more standard.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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).
David Given [Thu, 12 Jan 2017 22:28:35 +0000 (23:28 +0100)]
Remove imap, as it was ugly and nobody used it.
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.
David Given [Mon, 9 Jan 2017 21:44:00 +0000 (22:44 +0100)]
Fixup after merge.
David Given [Sun, 8 Jan 2017 17:54:58 +0000 (18:54 +0100)]
Merge from default.
David Given [Sun, 8 Jan 2017 17:53:59 +0000 (18:53 +0100)]
Fix typo.
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
David Given [Sun, 8 Jan 2017 10:23:56 +0000 (11:23 +0100)]
Run through clang-format.
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).
David Given [Sat, 7 Jan 2017 23:15:23 +0000 (00:15 +0100)]
Run through clang-format.
David Given [Sat, 7 Jan 2017 23:15:10 +0000 (00:15 +0100)]
Don't sort inludes any more (breaks too many ACK files).
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
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.
David Given [Sat, 7 Jan 2017 21:56:00 +0000 (22:56 +0100)]
Run through clang-format.
David Given [Sat, 7 Jan 2017 21:38:30 +0000 (22:38 +0100)]
Properly install man pages.
David Given [Sat, 7 Jan 2017 21:35:02 +0000 (22:35 +0100)]
Add a B man page.
David Given [Sat, 7 Jan 2017 19:11:01 +0000 (20:11 +0100)]
Update the README.
David Given [Sat, 7 Jan 2017 18:53:57 +0000 (19:53 +0100)]
Make sure that constant folding doesn't render our tests trivial.
David Given [Sat, 7 Jan 2017 17:47:46 +0000 (18:47 +0100)]
Sections are now aligned (required by the EM spec).
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.
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).
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.
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).
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).
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.
David Given [Fri, 6 Jan 2017 22:24:05 +0000 (23:24 +0100)]
Extern variables can now be written to.
David Given [Fri, 6 Jan 2017 21:29:52 +0000 (22:29 +0100)]
Ensure that procedure labels are word-aligned.
Xin Wang [Fri, 6 Jan 2017 10:33:52 +0000 (18:33 +0800)]
Add execve() system call for Linux
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.
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).
David Given [Sun, 1 Jan 2017 23:51:48 +0000 (23:51 +0000)]
Add a control flow test.
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.
David Given [Sun, 1 Jan 2017 17:56:53 +0000 (17:56 +0000)]
Add proper support for negative constants in external initialisers.
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.
David Given [Sun, 1 Jan 2017 17:44:03 +0000 (17:44 +0000)]
Add tests for more operators.
David Given [Sun, 1 Jan 2017 17:40:06 +0000 (17:40 +0000)]
Add support for the ~ operator.
David Given [Sat, 31 Dec 2016 19:43:03 +0000 (19:43 +0000)]
Add support for negative constants in external initialisers.
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).
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).
David Given [Sat, 31 Dec 2016 17:36:12 +0000 (17:36 +0000)]
Add support for the xor operator.
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.
David Given [Sat, 31 Dec 2016 00:14:04 +0000 (00:14 +0000)]
Fix issue where !x was actually calculating !!x.
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).
David Given [Thu, 29 Dec 2016 17:20:51 +0000 (17:20 +0000)]
Add a B version of the hilo program.
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.
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.
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).
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.
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.
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.