| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
I was missing a test to catch this.
|
|
|
|
|
|
|
|
|
|
|
|
| |
I like to be able to jump between functions and tests using '}' in Vim
:)
We also shouldn't put the wrong argument types in the tabular columns.
Just make it obvious they're not in use when instructions don't have a
ModR/M byte.
End-of-line comments are really only useful for instructions with a ModR/M
byte.
|
| |
|
|
|
|
| |
skip-string-in-slice
|
| |
|
|
|
|
| |
This one should make `emit-metadata` string-aware.
|
|
|
|
| |
Plan: https://github.com/akkartik/mu/commit/d4a244268841e8e912c98f4587095b701aa5c292#commitcomment-33558279
|
|
|
|
|
|
|
| |
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.
|
| |
|
|\
| |
| | |
SubX in SubX: Transforming uses of string literals
|
| |\
| | |
| | | |
SubX in SubX: Transforming uses of string literals (prerequisite A)
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
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.
|
| |\ \
| |/ /
|/| | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
Start computing the Carry Flag (CF) everywhere
|
| | | |
| | | |
| | | |
| | | |
| | | | |
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?
|
| | | |
|