| Age | Commit message (Collapse) | Author |
|
or at least, all the ones we need
yay
it's theoretically possible these work! it was a lot of details to get right, and they're not tested at all
Force-Push: config
Change-Id: I4f1bef007982af7901aa263af8e618d19e262f12
|
|
we're starting to feel vaguely proficient in stack juggling, but it will still be quite a thing if these don't need fixing later
Force-Push: yes
Change-Id: Ic1285d01cc42c6e8a30d36fc53e67135d8d9e175
|
|
also re-order "sib" to be before them
we were about to add one for indexed modes, and realized that really, these words are responsible for both the ModRM and SIB bytes, it's just that some modes only need one of them. this makes their responsibilities clearer, and as a bonus it draws a stronger distinction between these high-level words and the low-level "modrm", which omits consistency checking. having it called something else reduces the likelihood of inappropriately using the low-level one when a high-level one would be more suitable.
their names are a bit long now, but that's probably also good, it will incentivize building higher-level abstractions that define multiple variants of instructions rather than writing each one by hand. someday.
Force-Push: yes
Change-Id: Ia8f8fcc0e092f94e66f17a3fa55e8bf3e927fdff
|
|
Force-Push: yes
Change-Id: Ia9844da8f6e5d59ed77348b85200c28a7113bd1f
|
|
Force-Push: yes
Change-Id: Ib9efd1cd1c8b362547bef8b15829f9da6a28b4d1
|
|
Force-Push: yes
Change-Id: I19215825a8891bbc8b36bac03a0f0ca440721cb3
|
|
yay
that was hard. lots of bug-fixing. for some reason the condition code for not-equal was being output as 0x6 instead of 0x4. there was also a lot of stack manipulation to trace through very carefully.
Force-Push: yes
Change-Id: I8f2c19d5be96ba27a3e8c56c460c761a3b16666f
|
|
also a minor renaming for consistency
Force-Push: yes
Change-Id: I80f7a091272fa9a73cedd7caba495a45d5866d16
|
|
not used for anything yet, but hey
verifying this required a lot of time in the debugger
Force-Push: yes
Change-Id: I38a9536ce8efde236b1ed81ca94e0cf7e101413d
|
|
this better reflects the logical dependencies, per the new plan
Force-Push: yes
Change-Id: I2caa0e6bb1c722a7839f6695c48b05d0b2cfad25
|
|
Force-Push: yes
Change-Id: I7e4c678c27a87b79a9f2c2aad12bd65d7d5600cc
|
|
this will get more painful the longer we put it off
Force-Push: yes
Change-Id: I82430303d9d9d8a317eb8f020316e2145020a5c8
|
|
and the 0x in front of the 8 was silly
Force-Push: yes
Change-Id: I23a8ffd6aeec1d78ee7362c1f97d99e94947e5b6
|
|
and the heap bootstrapping strategy is explained, or part of it
Force-Push: yes
Change-Id: I4c48cf081709a7200a70041e321ace4d6713be94
|
|
and begin to grow the Forth-styled assembly language
it needs runtime word definition next, in our view, so we're checkpointing it here so as to work on that
Force-Push: yes
Change-Id: I08927581f6b6fdc69f6543936e46fe9ff83c8d48
|
|
they had some minor confusing stuff going on; now they don't
Force-Push: yes
Change-Id: Ie3756cf18222cb8b3f4794f57d91cb5229be715e
|
|
Force-Push: yes
Change-Id: I5709b96b401362564cc0f1dec3953dad13c319b7
|
|
this also adds a block-copy routine, further breaking up the handful of remaining monolithic things
Force-Push: yes
Change-Id: Ida960d83bab6176d016168cdf25e0763aa6050ef
|
|
yessssssss
that was a lot of debugging, wow. there were two bugs in UNROLL: the source and destination for the block move were set to the high end instead of the low end; and the encoding of an lea variant fell into an unsupported case but was emitted anyway due to an incorrect guard clause
that was seriously a lot of debugging. also all the stack logic for grabbing and stashing the label stuff was wrong several times, but it works now
the original "old code" is now fully eliminated, wow!
Force-Push: yeah
Change-Id: I85d951eabc7de6ba502e2a1aa0f5998f9b399765
|
|
also a couple more gdb tips
Force-Push: yes
Change-Id: I31038334449ea45238c811b4e97e2d87833d8ea6
|
|
this shaves like 700 bytes off the file size, though it feels like more should be achievable
Force-Push: yes
Change-Id: Iaa51c462cc80cea1a16a67b428b5064e40d9b9f1
|
|
wow, this sure does balloon the file size. must be something we can do about that...
Force-Push: yes
Change-Id: I477c4fdc9b42c3e5d50654d2864e3933da65a64d
|
|
implement indirect adds and subtracts; it turns out they're convenient for heap management
the operand order for lea.qreg.qreg.disp32 didn't match what the name suggested, so it's fixed now
the semantics of push.dimm are quite surprising, for reasons that are now extensively documented
also add notes on helpful ways to use gdb
Force-Push: yes
Change-Id: I717eb6427520e2c336586d4e8066ef172d97ce55
|
|
the goal is to make the assembly monolith, less of one. no individual piece of this is complicated, it was just tightly coupled... now it is less so.
Force-Push: yes
Change-Id: I4bf5711ee6eae18e68be9d4e1f5107933c45fbbd
|
|
Force-Push: yes
Change-Id: I5587783da20301abf11489caad6990531b13e3f1
|
|
this is all untested, but I'm highly confident in my reading of the Intel manual at this point
Force-Push: yes
Change-Id: I3dbd59da02994db58f2a53d1890136d583803bc6
|
|
Force-Push: yes
Change-Id: Ifda1a168808d541f8899a06d39bb9d13733dbadc
|
|
also all the existing stuff has word headers now. it doesn't need them to run, it just has them anyway.
and EXIT was moved after DOCOL because it feels poetic that DOCOL is the first Forth word in the file
Force-Push: yes
Change-Id: I592445310712bfde42fde8cffd7bc672f16c4e6c
|
|
this is the final word called by interpreted words, to return
Force-Push: yes
Change-Id: I8301fa31009915e4beb069664c9bd16cdf33d879
|
|
it turns out things are real enough now that we can't just scribble
wherever :)
Change-Id: I26c71beaaefecae018ebb3ced4f1f579879a030a
Force-Push: yes
|
|
this is the core Forth thing, or a large part of it
Force-Push: yes
Change-Id: Id15cf5289cb7b41e0ea824ef68791f663c2f90e6
|
|
not quite, but very very near
Force-Push: yes
Change-Id: I79ae9f2970e4d7263db5c511e3a5398c22c4771c
|
|
it was using rax as an index register, when it should have been using no index register. this was working by coincidence, because rax was zero, but now it's not. yay fixed!
there's also lots of decisions made and documented about the execution model, but they're only part-implemented and I wouldn't be checking them in right now if that were all that's new
Force-Push: yes
Change-Id: Ie8f64914484cd405272d640feeb1cf586ad915d7
|
|
this is just cleanup. once they're all named in a uniform way, it will make sense to write higher-level wrappers around them...
Force-Push: yes
Change-Id: Id110111d7cd0bf936de8f101cf6886513e1cca84
|
|
implement some of the earliest Forth loading stuff, following Jonesforth closely
the Forth memory space isn't totally set up yet - we are going to use the data segment after all, though it won't be heap-ish really. everything up through _start is ready for Forthy-y use though, and it does `cld` besides.
Force-Push: yeah
Change-Id: Ibd12223f304aff71f4e78744f7a9da09b9072a45
|
|
This also gets rid of the `load_origin` variable, it was redundant with
flatassembler's `$$` feature.
Force-Push: yes
Change-Id: I0abc4cf8da65fcb443220e70b69267919ca43ba7
|
|
Force-Push: yes
Change-Id: I668a2738ac19e98dd30c58964ba4c6706613ea7d
|
|
Force-Push: yes
Change-Id: I561d5fbb35db97b9d236a159c6c888b0651248c3
|
|
Force-Push: yes
Change-Id: I71ad8876fa9c0bdae9c12f1661b084918a1cb61d
|
|
Force-Push: yes
Change-Id: I0d328c24639b993f8140b18b7b3d4efa450c33c7
|
|
good progress
Force-Push: yeah
Change-Id: I14fdd705643af7ae23ea75c778e9671d3787e0e6
|
|
Force-Push: yes
Change-Id: I6c70991d16bd27da2b75ee0666203f043714a685
|
|
Force-Push: yes
Change-Id: I7111b9a9ed3cb5c5cf162af336b2278cf5850b76
|