IRC channel logs

2021-08-25.log

back to list of logs

<oriansj>stikonas: looks good. Merged
<stikonas>next time for M0 hex encoding will be a bit easier since I won't have to combine words, can just leave everything with .WORD
<stikonas>on the other hand writing assembly version will take longer...
<stikonas[m]>Interestingly, hex2.hex1 used exactly 62 labels, so each alphanumeric character was used
<oriansj>stikonas: well you could also use digits too (it works fine in hex1 and hex2 but not in M0 or M1)
<stikonas[m]>I used digits, hence 62
<stikonas[m]>Luckily avoided things like commas
<stikonas[m]>Those should have worked too
<oriansj>well every ascii char works in hex1 but not in hex2 which actually cares about the specials
<stikonas[m]>Well, hex2 has long labels, so not really a problem
<oriansj>So there are 127 (including \x7F DEL) possible hex1 labels but using them will break on hex2
<oriansj>but yeah 66 is the reasonably functional hex1 limit
<stikonas[m]>Yeah, I would rather not use space as label
<stikonas[m]>Or line feed
<oriansj>or :: as a label
<oriansj>or :< or :> or :$ if one wants a major debugging headache
<stikonas[m]>Anyway, it was enough even for riscv which is longer than hex2 for other arches
<xentrac>haha
<xentrac>62 seems reasonable
<stikonas[m]>:) would cause debugging smile
<xentrac>:-(
<oriansj>stikonas: I must say you have created the most impressive hex2 in hex1 ever written and you should feel quite proud.
<xentrac>+1
<oriansj>xentrac: wouldn't work in hex1 but :-D will
<xentrac>I wonder if it would be worthwhile to make hex1 labels fixed 2 bytes instead of 1
<stikonas[m]>No need...
<xentrac>because if stikonas[m] has to go to 63 he's going to end up with :@ or :! or something
<stikonas[m]>We only need to write hex2 in hex1
<stikonas[m]>I won't need 63
<stikonas[m]>62 was enough
<oriansj>xentrac: If one needs more than 127 functions/labels to write a minimal hex2. Then the architecture might not be bootstrappable.
<xentrac>someone might have to fix a bug at some point, stikonas[m]
<stikonas[m]>Or just do hex0->hex2 directly
<xentrac>oriansj: wait, are you considering using :^R and :^T?
<xentrac>shades of Perl
<stikonas[m]>Most likely any bugfix can be done without introducing any new labels
<oriansj>xentrac: all ascii are valid in hex1 as hex1 labels
<xentrac>yeah, but valid is one thing, tolerable is another ;)
<stikonas[m]>hex1 just reads any character after :
<oriansj>in theory all 8bit values are also valid hex1 labels. However then we run into a bigger problem.
<xentrac>:★
<oriansj>petscii and other character sets are certainly possible but audit across diverse architectures becomes a little more complex
<oriansj>stikonas: specifically 1 byte as unicode might require multiple bytes for a character.
<oriansj>:♠ :╭ :┴ :♥ :♣ :♦
<oriansj>and yes using the delete character is absolutely valid in hex1 but a bitch to audit; so it would be flagged by sin
<stikonas>anyway, I can't imagine any arch requiring more complicated hex2...
<stikonas>current hex2 is already quite flexible
<stikonas>the only way you can make it more complicated is to have more different instruction formats
<oriansj>stikonas: and they only have ~!@$%& to work with. and % and & are standardized for 32bit relative and 32bit absolute addresses.
<oriansj>So if one can't encode the jumps and calls needed in 4 different formats; then the architecture is the problem.
<fossy>finally!!!
<fossy>libunistring-0.9.10: build successful
<fossy>Bootstrapping completed.
<fossy>now i just need to check chroot mode works then this massive PR will be ready
<xentrac>congratulations!
<oriansj>fossy: Miracles of hard work. Nicely done
<stikonas>fossy: nice!
<xentrac>stikonas: moreover, to have more different instruction formats without which you can't write the next stage
<oriansj>xentrac: well the instruction formats supported in hex2 are only the jumps, calls and the loading of absolute addresses. M1 can support alternate instruction formats for the loading of immediates and stack offsets
<oriansj>for example one can work around the lack of an instruction format by loading a 32bit immediate and immediately jumping over it. (or 64bit if you so decide)
<oriansj>it is certainly inefficient (especially in architectures that don't support PC relative loading)
<xentrac>oriansj: right, exactly
<oriansj>like copy PC to regisyter, load with an offset and jump over
<xentrac>right
<oriansj>or in less reasonable architectures: copy the link register to a register you can use, push the link register value, do a call over the immediate, copy the link register to a register you can use, load the immediate, pop the link register value, copy the value back into the link register.
<oriansj>Because you know 24bit instructions are so much more efficient than a 48bit instruction when it comes to loading a 32bit value....
<oriansj>oops I forgot the assembler had push and pop as pseudo-instructions and it was actually store and and add immediate instruction; subtract immediate and load instruction.
<xentrac>hahaha
<oriansj>so 31bytes instead of 6bytes...
<xentrac>yeah, doesn't matter
<Hagfish> https://news.ycombinator.com/item?id=28295669 " Experimental binary transparency for pacman with sigstore and rekor "
<Hagfish>the absolute madlads!
<Hagfish>they've actually written the code to make binary transparency work at the distro level
<Hagfish>no comments on HN yet, but please add any helpful remarks you can think of to encourage discussion there
<oriansj>just need to do updates over tor to ensure you can't know who is recieving your evil updates
***edf0_ is now known as edf0