summary refs log tree commit diff
path: root/transform.e
AgeCommit message (Collapse)Author
5 daysmagic comments for all the high-level flow control in the label transformIrene Knapp
Change-Id: I5430e14e81c5981f358fda43c2f35ed47cafc29b Force-Push: yes
5 daysadd a bunch more data- and entry-manipulation magic-comment commandsIrene Knapp
now it's possible to make ;asm replace "docol codeword" with "self codeword", and it does Force-Push: yes Change-Id: I1a9b4cee8a3eee308cf421968d6a3cd92adba800
5 daysa new "data" concept in magic commentsIrene Knapp
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
5 daysmagic comments for a bunch more small stuffIrene Knapp
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
6 daysgive the names of codeword pointers in label-transform outputIrene Knapp
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
6 dayshandle memory sliding in the hex transformIrene Knapp
wow!!!! that was big Force-Push: yes Change-Id: I504ae746d4424e46819357e6dad6d6eadec16b81
8 daysyeah okay, copying it wasn't necessaryIrene Knapp
Force-Push: yes Change-Id: I9772f90f497a19c04ff6f9e261a5d9f262f79be7
8 daysfix the overwritten strings in the outputIrene Knapp
this probably shouldn't have required copying them, but ah well, copying worked Force-Push: yes Change-Id: I239f2633c61867f6c42a5b76a0e978aff0875a9d
8 daysredo the hex dump comments for alignment to use the regular magic commandsIrene Knapp
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
8 daysadded section headers and other formatting to all the parts of the hex dumpIrene Knapp
Force-Push: yes Change-Id: Ie66d85fd171dfb45d1f3b6869bf94056ec8303af
8 daysdo magic comments from the label transform when inside the hex transformIrene Knapp
the meaning of them in that setting is a bit different, which deserves to be documented eventually Change-Id: Ia7725bc776420c0ad62091a2e5100700868a6bfa Force-Push: yes
8 daysoops, didn't mean to comment that outIrene Knapp
Force-Push: yes Change-Id: I8fbf3d531b18904f2a01e6b05ff2822d6a015013
8 daysrefactor hex-tilde-alternate to split out lexingIrene Knapp
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
9 daysavoid repeated scanning of the metadata entries during formattingIrene Knapp
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
9 daysplace a trap inside the hex-transformed nlabel-transform-oneIrene Knapp
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
9 daysadd the ability for magic comments to happen in immediate modeIrene Knapp
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
11 dayswork on making the label transform pretty-print word entry headersIrene Knapp
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
11 daysexplanatory text at the start of the hex transformed label transform codeIrene Knapp
Force-Push: yes Change-Id: I695582905dea0c6e34981e803ef515c547eade40
11 daysremoved the #swap syntaxIrene Knapp
everything has been carefully diffed to ensure there's no regression in the verified parts of the output Force-Push: yes Change-Id: I32c887c7ca8c132a49899d9ef327c8ff9fb782fb
11 dayssemantic change to make subitem stack manip more convenientIrene Knapp
this allows a much cleaner style than the #swap notation, which will likely be removed soon Force-Push: yes Change-Id: If9898334356eb7c036f28afd22d435e00a84f6e2
13 daysrefactor the metadata postprocessing a little for readabilityIrene Knapp
there's about to be a semantic change, but that will happen in a separate CL Force-Push: yes Change-Id: Ib32d542c02a640a964fdeed7bc16248b669d6a91
14 daysrename substring entries to subitem entriesIrene Knapp
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
14 daysadd provide-hex, which varies its output width to fit the valueIrene Knapp
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
14 daysadd some magic comment commands to reorder subitems more generallyIrene Knapp
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
14 daysfix all leaks and incorrect parameter counts in amd64.eIrene Knapp
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
2026-09-09deal better with return values when underflowing the substring entry stackIrene Knapp
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
2026-09-09fix broken compile with the flatassembler versionIrene Knapp
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
2026-09-09provide word entries for "here" etc inside the hex transformIrene Knapp
this replaces the alternates we previously had for those words Change-Id: Ia8c8ca7203e03f511d68a30811fb8a5d262c6312 Force-Push: yes
2026-09-09fix strings under the hex transformIrene Knapp
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
2026-09-09check in the hex binary and commented hex-dumpIrene Knapp
yes, wow, right? big milestone! doesn't work for evoke itself quite yet, but getting really close Force-Push: yes Change-Id: I1e836b85cf185db4aa835d2aa494a67585e60744
2026-09-09add an implicit way to define suffix commentsIrene Knapp
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
2026-09-09rename the provide-substring-* entry types to push-substring-*Irene Knapp
Force-Push: yes Change-Id: I2d0ed253fc7b0e38f63cb0e6290ac2b1a64e32e8
2026-09-09provide a #swap operation in comment templatesIrene Knapp
and use it in a couple places in amd64.e where it's needed Change-Id: Id73dcd13f08c03aa02ac09e45ab034fcd90f2569 Force-Push: yes
2026-09-08handle the rest of the fields (keywords and numbers) in amd64.eIrene Knapp
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
2026-09-08add keyword support to magic comment templatesIrene Knapp
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
2026-09-08add "provide" words for all sizes of hex literal, and use them in amd64Irene Knapp
Force-Push: yes Change-Id: Ibdc4e05f8c63f0b4b6b8e504f89e053e6cd3a912
2026-09-08substring substitution works nowIrene Knapp
now to build out a variety of kinds... Force-Push: yes Change-Id: I331c3275c9705cacd7f634506b93d05085458754
2026-09-08hex-transform comment output now goes through a lexerIrene Knapp
this will be used to substitute substrings, but that's not wired up yet Force-Push: yes Change-Id: I957ac153599b02ca8cdc46c7cb2ec487aa2af31c
2026-09-08bubblesort the metadata entries during postprocessingIrene Knapp
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
2026-09-08the hex dump now prints trailing messages at the end of the dataIrene Knapp
Force-Push: yes Change-Id: I71930b088c176ade6a0bf7aaecb46bdecb0636ad
2026-09-08add support for more prettiness features in the hex-transform's outputIrene Knapp
suffix comments can now have a negative length, which makes them cover a span anchored with the current point at its end rather than its start magic comments can now request the suppression of metadata entries that would otherwise be generated everything in elf.e has magic comments now Force-Push: yes Change-Id: I409982afdd346c2ecf91e4c24f96ca81f887b126
2026-09-08horizontally align suffix commentsIrene Knapp
Force-Push: yes!!! Change-Id: Ib8306fc0924445bb70538011bdbc4b3fca3a6865
2026-09-08create a new magic-comment command that mutates a previous entryIrene Knapp
this allows the length of a metadata entry to be adjusted after it's created, which simplifies the implementation of instructions that might vary in length Force-Push: yes Change-Id: I0889dc8b5a4f19adbb1f8ec0d5733a0310457766
2026-09-08add suffix comments which come at the end of a lineIrene Knapp
this may be the most important feature for pretty output there aren't actually any yet (though this has been tested), because there's another feature needed to make them useful Change-Id: I4ad26a5815e3ffbc64eddd8c813c6eee6d2e989a Force-Push: yes
2026-09-07add indentation and blank lines as magic-comment featuresIrene Knapp
the output is really starting to look like something! Force-Push: yes Change-Id: Ic41c8b1702d884ff89693a86d457af7cc752aa86
2026-09-07add tracing of the latest output point in packstringIrene Knapp
this is necessary because packstring isn't implemented in terms of pack8, unlike packalign also add a bunch more magic comments to hex.e, which would be in the wrong place without the semantic change Force-Push: yes Change-Id: I422b8d00a07568be5113e005fddaeab82f5ca731
2026-09-07add magic hex-transform comments in all the amd64 instruction wordsIrene Knapp
also add logic to output newlines at the start of these comments Force-Push: yes Change-Id: I4c3ce99c264e7d02150cdf2b40d486e925b5fb72
2026-09-07implement magic hex-transform commentsIrene Knapp
they work! that is, they show up in the output. to prove it, two of them are added to elf.e. they don't yet deal with substring parameters, and there's some formatting niceties to consider. Force-Push: yes Change-Id: I0a0f72e21ca023bf99287880d52b5a8dddbf8e34
2026-09-07create a special comment syntax for the hex transform's useIrene Knapp
right now all we do is recognize the special comments and save their body text for later handling. in a future CL, hex-tilde-replacement will turn them into output metadata entries. Change-Id: I53cc9d0cd781c2fc43af180ae98606efc14c3147 Force-Push: yes
2026-09-07add traps to all the pack[0-9]+ wordsIrene Knapp
this is probably not going to be used in the end, but we found it necessary to write it out to get in touch with our feelings, which allowed us to decide on the other approach, and it's a small amount of code so it's probably best to leave it in until the transform is done. if we took it out we'd keep being tempted to put it back. Force-Push: yes Change-Id: I431d27d4f8b8e5415d84d0a2752a0522639792e9