IRC channel logs

2022-11-28.log

back to list of logs

<stikonas>I'll see how many arches I can do, should be able to do at least x86, amd64, riscv32 and riscv64
<stikonas>not sure whether I'm familiar enough with others but we'll see
<stikonas>ok, I think I managed to encode store for knight and aarch64...
<stikonas>not sure how to store 16 bit value on armv7l...
<stikonas>hmm, I thought to use current_target->size to get type size
<stikonas>but this seems to break on structs
<stikonas>or more precisely on struct pointers
<stikonas>as it shows size of the struct
<stikonas>rather than register_size
<stikonas>oriansj: any ideas?
<stikonas>so I think the line is struct blob* i = hash_table[hash];
<stikonas>where hash_table is struct blob**
<stikonas>but current_target is blob ...
<stikonas>hmm, that will probably need more time to dig in than I have today...
<stikonas>(so far I have only written this function https://paste.debian.net/1262096/)
<stikonas>so I think that create_struct does not setup indirect types...
<stikonas>hmm, not sure what's the best way to solve this
<oriansj>stikonas: well the pointers to the type always will be register size as we use the full address space
<stikonas[m]>oriansj: yes, but I think right now structure type points to itself for indirect type rather than struct*
<stikonas[m]>So when you are using struct pointers, type size is struct size rather than register size
<stikonas>oriansj: so I've been doing a bit more debugging of current_target->size with structs
<muurkha>what did you learn?
<stikonas>turns out that "struct a *b" works fine and has correct size. It's the "struct a **b" case that's causing me issues
<stikonas>probably need to check if second indirection is set up correctly...
<oriansj>probably unlikely
<stikonas>e.g. we have struct blob** hash_table;
<stikonas>and then on line 771 in M1-macro.c we have hash_table = calloc(65537, sizeof(struct blob*));
<stikonas>so on this line I got blob 40 hash_table for (current_target->name, current_target->size and global_token->prev->s)
<stikonas>so I guess I need to fix create_struct first...
<stikonas>it does indeed seem that create_struct only sets up struct and struct*
<stikonas>we only have two callocs there
<oriansj>say some clever work arounds for serious design limitations sort of situation
<stikonas>oriansj: I think we can fix it with one liner
<stikonas>let me paste it, so you can review
<stikonas>oriansj: https://paste.debian.net/1262198/
<stikonas>need to test this first though
<oriansj>you might want to check char** argv behavior
<stikonas>hmm, that one is not struct, isn't it?
<stikonas>so shouldn't be affected
<stikonas>something else goes bad if I include my other changes...
<stikonas>where I try to replace STORE_INTEGER with store_into_register(current_target->size)
<oriansj>well on MCP it would be a struct but I guess we can safely just refuse to support that Operating System
<oriansj>STORE_INTEGER stores the register into RAM if I remember correctly
<stikonas>well, I basically wanted to replace stuff like "else if(X86 == Architecture) store = "STORE_INTEGER\n";"
<stikonas>with the following function
<stikonas> https://paste.debian.net/1262200/
<muurkha>yeah, the Burroughs Large Systems contingent has gotten fairly thin over the yearws
<oriansj>that was the idea of optimizers and specializers for M3
<stikonas>so store_into_register(unsigned size) would take number of bytes to write
<stikonas>therefore I had to rely on current_target->size having correct value