| Age | Commit message (Collapse) | Author |
|
there was never a good reason for them not to be
plus, the formerly bespoke ones use the generic helpers now; sys-open and sys-close are implemented; and a bug in push-input-buffer and pop-output-buffer is fixed
unfortunately these were breaking changes, so there's another evoke.hex in this one
Change-Id: Ifad58fc2fd757adcf89a69c59575565a10406ec2
Force-Push: yes
|
|
and also sys-write didn't used to return a result
this required a little massaging to make it build, the host evoke needed to not actually pass the file descriptor in evoke.e. for posterity: this was fixed by changing it everywhere else as a one-off, then changing it there and using the intermediate version to build the one being checked in now.
this kind of weirdness is a thing we get the freedom to do because of the bootstrapped distribution model, though we still strongly prefer not to do it unless necessary. this breaking change would have had to happen at some point, so it's considered acceptable.
the size of the diff to evoke.hex is larger than ideal. this raises the need to have a policy for when to regenerate it. since this is a breaking change, it's mandatory. it also seems important to commit a regenerated copy when a release is tagged. it will probably turn out to be a good idea to not regenerate it excessively, otherwise. it's possible that in the long run it might make sense to add name-mapping functionality to hex, just to make the diffs smaller.
Force-Push: yes
Change-Id: I2648b2577c5c21b126e46405e9888b5cb59aa0b7
|
|
Force-Push: yes
Change-Id: I1a0ea06380095da3e7702cab278c08bd21b292ca
|
|
Force-Push: yes
Change-Id: I7cd583d5a3ee72c316633ceb2efbb51a2fe46452
|
|
fun! fiddly! :D
fixing one-off column alignment issues is like stimming for coders
(which is to say, like stimming)
Change-Id: I1037ec27b863f90117fb22a29ef52d0ba460c7d5
Force-Push: yes
|
|
Force-Push: yes
Change-Id: I7ba182f5939aa3b5d280fb48673e2cc74d72e8ea
|
|
that was pleasingly straightforward
Force-Push: yes
Change-Id: I92b66fbb37ed5df3ef3f733e8679747a9a232373
|
|
wow!!!!
Force-Push: yes
Change-Id: I2b46837b5ff37b4339a9a4ba0ae52903854d5e99
|
|
Force-Push: yes
Change-Id: I18e04f06390e85d4cd2c113094a137986ca2e54a
|
|
Change-Id: Ibfd4fa69a3d2abdaba162538f6386f7173af4311
Force-Push: yes
|
|
this is everything outside of log-load-transform-one itself
compile time is up to nine minutes though, due to the new backwards-scan thing. keeping the entries sorted might be better...
Change-Id: I96058f0c9c043f7b8b681018e1178505caddbc62
Force-Push: yes
|
|
Change-Id: I5430e14e81c5981f358fda43c2f35ed47cafc29b
Force-Push: yes
|
|
now it's possible to make ;asm replace "docol codeword" with "self codeword", and it does
Force-Push: yes
Change-Id: I1a9b4cee8a3eee308cf421968d6a3cd92adba800
|
|
this is meant to handle variable-length stuff. it is now used to handle the string in the word entry headers.
Force-Push: yes
Change-Id: I8f3ce7dd93351639fbce82503324f3efe5def568
|
|
especially in the label-transform output
there's more to do, but there are additional magic-comment features that would be handy, so we're checking this in now so that those can be cleanly kept in their own CL
Force-Push: yes
Change-Id: I97a67caddc3f3150c349b7956c1d715db909d1a9
|
|
under the hex transform, that is
this also implements ndrop in quine, because it wasn't building evoke, and it checks in the updated hex.hex which reflects the more concise notation for integer constants. this brings all the builds into a clean state, for the moment.
Force-Push: yes
Change-Id: I243cf08c70b4a3af00ea5e0836c5596a32f1288b
|
|
wow!!!! that was big
Force-Push: yes
Change-Id: I504ae746d4424e46819357e6dad6d6eadec16b81
|
|
Force-Push: yes
Change-Id: I9772f90f497a19c04ff6f9e261a5d9f262f79be7
|
|
this probably shouldn't have required copying them, but ah well, copying worked
Force-Push: yes
Change-Id: I239f2633c61867f6c42a5b76a0e978aff0875a9d
|
|
previously, alignment had been a special-cased type of metadata entry, with a special trap on packalign. now it uses the same programmable setup everything else does. much simpler, and prettier output.
this CL also contains some modest reformatting of section headers in the hex dump
Force-Push: yes
Change-Id: I21554e92f6af6ddefa937dad8073b89657f85d64
|
|
Force-Push: yes
Change-Id: Ie66d85fd171dfb45d1f3b6869bf94056ec8303af
|
|
the meaning of them in that setting is a bit different, which deserves to be documented eventually
Change-Id: Ia7725bc776420c0ad62091a2e5100700868a6bfa
Force-Push: yes
|
|
Force-Push: yes
Change-Id: I8fbf3d531b18904f2a01e6b05ff2822d6a015013
|
|
note that lexing of the body of a magic comment was already separate, part of hex-tilde-replacement. however, hex-tilde-alternate had been responsible for lexing the sequence that introduces a magic comment. because we want to make separate versions of the alternate for each inner transform, the lexing needed to be factored out.
this does result in more copying, but it doesn't appear to noticeably affect runtime.
Force-Push: yes
Change-Id: I51a780d1dadb99f09bddb9eaccb1af387bd0ce87
|
|
there was a test that had never been working, meaning the entire entry array was being scanned for every byte of output. even had that test worked, it would still have scanned on average half the array for every byte, so that'd be where the absurd runtimes were coming from. anyway, it works now.
this gets a full hex transform invocation down from over thirteen minutes to under thirty seconds. learn your data structures and algorithms, kids.
Force-Push: yes
Change-Id: If075b256f77649fae9d2e56cb7404458ca39d189
|
|
this will be used to cause it to apply a tilde alternate, but the lexing code for that needs to be refactored first
also, this has an implementation of nexit, a new flow-control word for a scary style of metaprogramming
Force-Push: yes
Change-Id: Ic7fe2d50a8ee21cf9fa5fef1fef4408c2935bb4c
|
|
but, don't do them, though, they aren't ready yet. for reasons described in the code. they're harmless, they don't cause crashes or incorrect output, they just don't cause any output at all.
Force-Push: yes
Change-Id: I5e45adc60f4e01e7bc54d9da8aa4fa5f8b708ddb
|
|
this involved instrumenting label-create-alternate and some other stuff
it also involved adding provide-string and provide-string-copy magic-comment commands
Force-Push: yes
Change-Id: I52f87decc02bf6f2516ee009f27c783a2c5bd715
|
|
Force-Push: yes
Change-Id: I695582905dea0c6e34981e803ef515c547eade40
|
|
everything has been carefully diffed to ensure there's no regression in the verified parts of the output
Force-Push: yes
Change-Id: I32c887c7ca8c132a49899d9ef327c8ff9fb782fb
|
|
this allows a much cleaner style than the #swap notation, which will likely be removed soon
Force-Push: yes
Change-Id: If9898334356eb7c036f28afd22d435e00a84f6e2
|
|
there's about to be a semantic change, but that will happen in a separate CL
Force-Push: yes
Change-Id: Ib32d542c02a640a964fdeed7bc16248b669d6a91
|
|
also the -entry-string field is renamed to -entry-content, since it's an integer a lot of the time
much clearer. hopefully. certainly more consistent.
Force-Push: yes
Change-Id: I82315a135422ef2fae5dd3d6e8ea025ccfa97cfd
|
|
and amd64.e uses it for all the immediates, but not for other kinds of numeric parameter, which looks pretty slick and readable
Force-Push: yes
Change-Id: Ifb630a4dc172d7495b5458316266fe76b75e07af
|
|
these are all fully working and debugged.
they have been used in a principled attempt to get all the parameter orders in amd64.e correct, but that effort needs to be verified carefully, which it hasn't been, yet.
a couple of missing magic comments in elf.e and execution.e were also added.
Force-Push: yes
Change-Id: Id4c48b121a71b4f945ee3718e14a06f07afd7304
|
|
this required adding a new magic-comment command, drop-subitem, because there's a couple cases, in indexed addressing mode helpers, where a hardcoded register value is used as part of preparing an sib word, and that value shouldn't become a subitem for the assembly word that calls the helper.
notably, a lot of the disp8 and indexed assembly words had incorrect parameter counts that needed adjusting
parameter ORDERS still need a close read to make sure they're correct. also, as future work, substring entries should be renamed to subitem entries.
Force-Push: yes
Change-Id: I419243855751416377d0ea0c5062fa1ba9e62a8d
|
|
it's now able to run all the way to the end of the label transform, inside the hex transform. the output leaves much to be desired, but it runs.
Force-Push: yes
Change-Id: I7cac39df599e8081fac6b050dfeb34e598bb54eb
|
|
oops. that was a good catch, should have been checked more often. hopefully it won't be needed much longer.
Force-Push: yes
Change-Id: I3e2d04118a6f588c410e2439fbbd52aabd173e77
|
|
this replaces the alternates we previously had for those words
Change-Id: Ia8c8ca7203e03f511d68a30811fb8a5d262c6312
Force-Push: yes
|
|
this is towards being able to run the hex transform on Forth compilations, rather than just assembly compilations like it does right now. it's been verified that it doesn't cause any regressions.
the reasoning for why this fix is necessary is complex, but explained fully in comments
I have to admit that I'm not totally clear why the unmodified, untransformed string words don't work for this scenario, but they don't, so...
Force-Push: yes
Change-Id: I93640c7ca965eba5dc28116bda0165ae1c941458
|
|
yes, wow, right? big milestone! doesn't work for evoke itself quite yet, but getting really close
Force-Push: yes
Change-Id: I1e836b85cf185db4aa835d2aa494a67585e60744
|
|
and make the explicit way more versatile (allowing zero length)
this required hooking the lexer at a pretty low level, but it worked out fine
Force-Push: yes
Change-Id: Icdbe233fbf9d4cf07cb8d03975eed3b4f7b620aa
|
|
Force-Push: yes
Change-Id: I2d0ed253fc7b0e38f63cb0e6290ac2b1a64e32e8
|
|
and use it in a couple places in amd64.e where it's needed
Change-Id: Id73dcd13f08c03aa02ac09e45ab034fcd90f2569
Force-Push: yes
|
|
add a provide-decimal variant of the magic-comment provide command family
note that the fields are all printed in a wrong order, at present
Force-Push: yes
Change-Id: I01f5cbb86f61e78ce652c54fc8b29b88efd1b2b6
|
|
additionally, handle many (not yet all) of the keywords used by amd64 words
this exposed an existing flaw in the metadata entry processing, which is now fixed as well. to wit: it's common for provide-substring entries to come after the comment entries they go with in the entry array, but this is valid because adjust-length commands can edit the length field of the comment entry afterwards, and the comment entry will be moved to after the provide-substring entry based on its final length, but this can't happen if the adjust-length array isn't able to find the comment entry it goes with, which may not be the most recent entry. so, the adjust-length command needs to scan backwards to find the most recent comment entry, not just the most recent entry.
confused? don't worry... this CL includes documentation. wow. that was a lot.
Change-Id: I01c574fca020fd2e3adaf335267264fdbc8b87f1
Force-Push: yes please
|
|
Force-Push: yes
Change-Id: Ibdc4e05f8c63f0b4b6b8e504f89e053e6cd3a912
|
|
now to build out a variety of kinds...
Force-Push: yes
Change-Id: I331c3275c9705cacd7f634506b93d05085458754
|
|
this will be used to substitute substrings, but that's not wired up yet
Force-Push: yes
Change-Id: I957ac153599b02ca8cdc46c7cb2ec487aa2af31c
|
|
since we do this here, we no longer need to worry about doing it during initial entry creation, so that's good. that had been on the mental "maybe later" checklist for a while.
the various innovations in entry processing now make it possible to pass
through most of the formatting in hex.e, so that's done now (suffix comments that aren't instruction decodings still need to be made to work)
there's also a new entry type which will be part of the comment parameter system. that's not fully working yet, but this was a bunch of really subtle debugging, so it makes a good spot to checkpoint at.
Force-Push: yes
Change-Id: I2aff7276368eaad7e5c280a58834605e294dcd74
|