01:36
jdv79 joined
01:47
harrow joined
02:01
vendethiel- joined
06:25
domidumont joined
06:36
brrt joined
|
|||
brrt | good * #moarvm | 06:37 | |
interesting post on the pyston blog today | |||
nwc10 | ooh, thianks for checking on that | ||
nwc10 reads | |||
brrt | our jit is comparatively boring | 06:39 | |
i.e. we really don't do runtime code modification | |||
06:49
domidumont joined
|
|||
brrt | okay, i have something to put forth the court of #moarvm today again | 06:52 | |
06:52
domidumont joined
|
|||
brrt | i sometimes need to spill a value from a register | 06:52 | |
(this is another one of those 'i know how to do it the slow way. how to do it the quick and easy way, and is this worth it' stories) | 06:53 | ||
nwc10 | I have no idea about this sort of stuff (sorrY) | ||
hopefully someone who is awake does | |||
brrt | hmm | ||
its ultimately just a data structure question though | 06:54 | ||
my 'value descriptors' sit in array-indexed linked lists so that i can find them by the node (virtual value they represent) or by register they inhabit (while live, anyway) | 06:55 | ||
it can happen that a value ceases to be live but is not directly evicted from its register because a newer, longer lived value takes it place | 06:56 | ||
so the list of values in the register slot can have any number of items, and not all of them need to be live | |||
when i do need to spill something, i need to figure out a number of things, notably: which register to spill, whether to insert a store into the code stream, and if so, where to insert it | 06:58 | ||
spilling, for what it is worth, has the minimum side effect of limiting the live range of values to the point where they are being spilled | 06:59 | ||
if the value i'm spilling is the only or most long-lived value in the set, then i'll need to insert a store | 07:01 | ||
if there is a longer lived value in the set of values that describe this node, i don't | |||
so that is a lookup question: how can i efficiently find the longest lived value in the node | 07:02 | ||
(sorting! .. linked list!) | |||
finding which register to spill is also a difficulty; if there are registers which are already backed by a spilled value, in theory they should have preference over spilling a brand new value | 07:04 | ||
(stack) | |||
where to insert it is usually pretty simple, fortunately; that is just after the creation of the first live value | 07:05 | ||
(the store) | |||
doing this all with linked lists is easy enough, it is just busywork, that i'd rather replace with constant time ops | 07:06 | ||
maintaining a single longest-lived-register is easy | 07:07 | ||
maintaining a live-range heap is not necessarily so easy | |||
although it is doable | |||
but i'm not entirely sure what to do with it if you have it | 07:09 | ||
ok, i'm clearly just rambling :-) | 07:13 | ||
07:49
zakharyas joined
08:49
vendethiel joined
10:15
vendethiel joined
12:24
colomon joined
12:36
dalek joined
12:47
cognominal left
13:26
vendethiel- joined
17:46
domidumont joined
20:06
ilbot3 joined
21:48
harrow` joined
21:51
BinGOs_ joined,
lnx_ joined
22:02
BinGOs joined
|