| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
Clean up some unused constants.
|
|
|
|
| |
CI should have been failing for a few days. Now fixed.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Now all implemented phases of the SubX translator in SubX support the new
syntax:
✓ hex.subx (no changes required)
survey.subx (not yet started)
✓ pack.subx (fixed here)
✓ assort.subx
✓ dquotes.subx (has failing tests for other reasons)
|
|
|
|
|
|
|
|
|
|
| |
Current state:
✓ hex.subx (no changes required)
survey.subx
✓ pack.subx (fixed here)
assort.subx
✓ dquotes.subx (has failing tests for other reasons)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Right now SubX defines headers with the following syntax:
```
=== ...
```
The `...` can be either a numeric address or a name. Numeric addresses
are useful for tests where we want to check addresses of individual instructions.
Names are useful in real programs where we want to add to a segment in
many places.
This approach has long seemed a mess. It's hard to explain, and there's
a certain amount of historical evolution that led to it that should be
irrelevant to comprehend the current state of the codebase. I started out
assuming the first segment was always code, before adding the special names
'code' and 'data'. We pretend to support more than two segments but we
don't really.
To simplify the code and explanation we'll move to a new syntax:
```
=== <name> <address>
```
Code will always belong in the special name 'code', but it no longer has
to be first.
We need to migrate both our SubX-in-SubX phases and the C++ version. The
plan is to start from the top down and update bootstrapping phases that've
already been built (see commit 5102 for the list of phases). This commit
updates pack.subx. Current state:
✓ hex.subx (no changes required)
survey.subx
✓ pack.subx (fixed here)
assort.subx
dquotes.subx
|
|
|
|
| |
Test for the bugfix of commit 2f49a27504.
|
|
|
|
|
|
|
| |
Clean up some old TODOs related to our pre-mmap limitations.
Also caught another case of using the wrong comparison. When comparing
addresses, one must always use unsigned rather than signed jump instructions.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Still some failing tests:
- emit-string-literal-data doesn't ignore metadata when computing the
length of literal strings
- emit-string-literal-data doesn't handle escape sequences
One issue doesn't have a failing test:
- emit-metadata doesn't handle string literals containing '/'
All these open issues involve a common design question: how to parse a
'word' that includes a string literal that may include spaces.
For everything else I know words can't contain spaces and datums can't
contain slashes. But for string literals things are tougher.
|
|\ |
|
| |\ |
|
| | |
| | |
| | |
| | | |
A few more places with flag corrections.
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
One more instruction where I forgot to update the carry flag.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
How did things seem to be working until now?
- We were saving an address from the stack to stream.read
- When we read this address in skip-chars-matching:loop, we used to stop early
But now we've moved the stack to a larger address, one where the most significant
byte is set. When the stack address now gets to skip-chars-matching:loop,
it's treated as a negative number and we proceed through the loop. At which
point we try to index into the array using it.
No real test to be written to protect against this :(
|
|\| |
| | |
| | |
| | |
| | | |
dquotes.subx is now segfaulting after this merge. Seems to be trying to
use addresses from the old stack.
|
| |\| |
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
Skimping on tests; the code changes seem pretty trivial. Will this fix
CI?!
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
Standardize layout of some code fragments, and fix several bugs in computing
the overflow flag in the process. a64 = b32 + c32 doesn't benefit from
`a` being 64-bit without casting `b`.
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
Make the first instruction described something that doesn't touch flags,
so we don't introduce too much complexity all at once.
|
| | |
| | |
| | |
| | |
| | | |
This is time-consuming mostly for me to come up with example scenarios
testing all the different combinations of flags.
|
| | |
| | |
| | |
| | | |
Correct some confusing log messages.
|
| | |
| | |
| | |
| | | |
Inline some macro definitions.
|
| | |
| | |
| | |
| | | |
Drop some prints as a first step to straightening things out.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Tests failing.
This approach seems wrong. I'm not sure even the tests are correct. Also,
some open questions:
1. Should setting the overflow flag always set the carry flag?
2. Should the carry flag only be set on add/subtract/compare, or by all
arithmetic ops?
3. Had to turn off the -ftrapv flag in `build`. Is there a way to detect
overflow without actually causing overflow?
Once we start setting CF correctly we have to implement jump above/below
instructions (8- and 32-bit displacement variants).
https://github.com/akkartik/mu/issues/30
|
| | |
| | |
| | |
| | |
| | | |
Support allocating more than 0x01000000 bytes (8MB) to a segment in the
VM.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Pretty blunt for now; just abort the entire program on any failure to write.
I'm encountering it because I'm somehow treating a stream address as a
file descriptor. Maybe mmap is returning addresses below 0x08000000?
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
Bugfix: I'd neglected to update the input stream's state when natively
writing a stream to file.
|
| | | |
|
| | | |
|
| |\|
| | |
| | |
| | | |
apps/dquotes still segfaulting on native run.
|
| | | |
|