libera/#sicl - IRC Chatlog
Search
3:06:52
hayley
I think moon-child and I joked about JMP [RIP], and they found that the displacement would be zero, as RIP is set to the location of the next instruction.
3:12:42
hayley
That said, I can't seem to figure out how to get nasm to assemble such an instruction. But I recall Gnuxie and I had discussed RIP-relative addressing in Cluster.
3:15:28
moon-child
beach: I think it might be better to make it a flag than a first-class operand. The rules are finicky, and it's difficult to ensure correctness by construction either way, but I think it might work out better that way
3:17:25
beach
moon-child: OK, I need to look into it a bit. Like I said, whenever a week goes by, I totally forget everything.
3:19:08
hayley
An article has caught my attention about how engineering students don't understand directory structures, because they always use searching tools which don't show the directory structure. I won't link it because it's basically clickbait, but it's almost amusing how people seem to think it is a problem with the students, and not the software.
3:20:51
hayley
Er, I can't remember if RIP-relative effective addresses are constructed differently, but I recall some tables on the OSdev wiki on instruction encoding had some blatant exception to the usual rules.
3:23:36
hayley
Right, RIP is addressed differently to general purpose registers. And the addressing description starts at <https://wiki.osdev.org/X86-64_Instruction_Encoding#32.2F64-bit_addressing>
3:24:10
hayley
The exception to the rule I was thinking of involves using RSP and RBP in effective addresses.
3:27:04
Gnuxie
ACTION is going back to sleep, but just in case, Cluster should already follow that table "to the letter"
3:38:39
beach
I think I can get away with using labels. If I add a protocol function to the assembler that takes both a list of instructions and a list of labels, and that returns a code vector and a list of offsets corresponding to those labels, that should be enough. In fact, I can add it as an &OPTIONAL parameter and a second return value.
3:41:33
beach
Using labels will be slightly inconvenient for the MOV instruction that loads a 64-bit immediate into a register, because the label will reflect the offset of the instruction, and the offset of the immediate will be a bit further.
3:42:12
beach
But I think that kind of stuff could be an independent project to add features to Cluster.
3:54:01
beach
So all I need to do is hold on to relevant labels, and then consult the dictionary returned as a second value.
12:09:55
beach
hayley: To make progress, I suggest we use registers R10-R15 also for return values, and we do not allow more than 11 of them in the first version.
12:13:39
beach
So then, I think we have all the ingredients we need to generate code. Someone needs to write the initial call-site manager as well, though. It must take the description of the arguments at a call site, and put them where the default callee wants them.
12:39:09
beach
hayley: Do you intend to work on code generation? I am asking because that's probably next in line. So if you don't plan to work on it, I should start looking into it.
12:40:03
hayley
It'd depend on my workload this semester. At the least I definitely can't start this week, as I've got to coordinate a demo video for university.
12:43:40
hayley
Maybe in a week? I can estimate everything but the difficulty of the maths assignment, which involves producing some statistical analysis using Python.
13:02:26
Duuqnd[m]1
Is there anything I could do to help with SICL's development? I've been wanting to contribute for a while but I don't know where to start.
13:03:55
beach
Oh, sure, there are plenty of things to do. But at this point, it would be tasks that are independent of what we need to get an executable file as soon as possible.
13:06:49
beach
What kind of things did you have in mind? And what do you know about things like compiler design?
13:07:02
yitzi
beach: I've spent a few hours on it already. Just setting up the generic interface and reading the XP algorithm docs. That XP code is terrible! Wow.
13:08:25
Duuqnd[m]1
beach: I'm not very experienced with compiler design, but I'm not completely inexperienced either.
13:09:32
hayley
Duuqnd: Do you know much about random number generators? I don't think any other module in SICL requires modules, but implementing RANDOM in a way that is acceptable to you would make for a portable and compiler internals-free project.
13:10:39
hayley
Just a random (ahem) proposal for an "easy" project that I've suggested for a while. Not that good RNG design is easy, but you get the idea.
13:12:02
hayley
Pfft, what a great typo. "I don't think any other module in SICL requires randomness"
13:12:38
hayley
(But for a module to exist, I suppose it requires the concept of a module to exist?)
13:14:33
yitzi
Maxima has a ported version of the Mersenne twister from CMUCL if you need an example.
13:17:13
Duuqnd[m]1
I imagine not since relying on RANDOM for cryptographic randomness would be a terrible idea regardless
13:27:10
Duuqnd[m]1
Alright, I normally use the :documentation option where possible so I guess I'll do that here too
13:38:50
yitzi
Do trivial-gray-streams work in SICL? I see a few references in sicl-source-tracking.
13:41:53
beach
What you see in source tracking is currently executed by the host. But yes, there is a SICL module that defines the Gray streams protocol. It is used as the basis for other streams.
13:56:00
Duuqnd[m]1
When creating things with names reserved by the CL package is there anything special I need to do or do I just tell SBCL to ignore the package lock?
13:56:52
beach
If you want to test it in the host, I recommend you make one "intrinsic" system and one "extrinsic" system, each with a package definition.
14:02:54
beach
I am about to push some stuff that requires an update that I just made to Cluster, so if you want to build SICL, you need to pull Cluster first.