01:31
MasterDuke joined
|
|||
MasterDuke | missing template counts for building core.settings and running test-t gist.github.com/MasterDuke17/4a6b3...a4ed2c1370 | 01:39 | |
what does it mean where there are 'null' or 'PHI' in the 'Build tree out of: [ ... ]' list? | 01:43 | ||
timotimo | PHI are actually no-ops, null is an op that nulls out a register | 01:48 | |
MasterDuke: we used to go through all registers that hold object values and null them out when entering a frame, but that was wasteful, now we emit a whole bunch of null instructions in spesh and let spesh remove useless nulls | 01:49 | ||
MasterDuke | hm. so what would be a useful metric? total length (number of elements in the list)? length - # of PHI/null? | 01:51 | |
timotimo | yeah maybe, but phis are always at the beginning so they would always be in the expr jit part | 01:53 | |
MasterDuke | uniq lists and their count, like for the individual missing templates? | 01:54 | |
gist updated | 01:57 | ||
timotimo | i think we should remove the PHI from being logged %) | 02:05 | |
MasterDuke | it does distract a bit | 02:08 | |
timotimo | lastexpayload should be very easy to do | 02:10 | |
isconcrete, too, if bitwise arithmetic is easy in the exprjit | |||
prepargs is by its nature always followed by a bunch of arg_* ops and then some kind of invoke_* | 02:11 | ||
or fastinvoke or something | |||
that'll probably require a bunch more thought | |||
i would have said "unless_o is easy since we already have if_o", but we don't have either of those | 02:12 | ||
MasterDuke | the interp.c implementation isn't that bad | 02:13 | |
but there a bit of a scary comment in the jit/graph.c implementation | |||
timotimo | which one do you mean? | ||
i imagine not_i could be worth quite a bit | 02:15 | ||
MasterDuke | github.com/MoarVM/MoarVM/blob/mast...1695-L1733 | ||
timotimo | huh, interesting | 02:16 | |
the good news is that we can express the "first do an istrue_o, then do the branching" in just a big expression tree | 02:22 | ||
and we can probably just ask the exprjit for a local variable to store the result in as well | 02:23 | ||
MasterDuke | huh, we only have an istrue_s | 02:25 | |
timotimo | oh the op is probably bool_o | ||
no we have istrue and isfalse without _* | 02:26 | ||
MasterDuke | ah | ||
02:58
ilbot3 joined
06:15
psch joined
|
|||
nine | timotimo: local variables are just like (let: (($val (load (add (^p6obody $1) $2) ptr_sz))). takedispatcher is an example for multiple variables | 07:11 | |
This is where the expr jit really shines compared to the lego jit | |||
07:41
brrt joined
|
|||
brrt | good * #moarvm | 07:44 | |
07:51
domidumont joined
|
|||
nine | good brrt #moarvm! | 07:52 | |
brrt | good nine! | 07:53 | |
are you coming to FOSDEM this year? | |||
nine | yeah! | ||
you, too? | 07:54 | ||
08:07
domidumont joined
|
|||
nwc10 | if NQP goes "boom" with "Expected native int argument, but got num" does that mean that it's still a *good* morning? | 08:11 | |
at gen/moar/stage1/QRegex.nqp:1624 (gen/moar/stage1/QRegex.moarvm:!cursor_pass) | |||
... | |||
psch | at least it is a clear-ish error message; NQP does have a few less comprehensible ones :) | ||
08:36
zakharyas joined
10:14
zakharyas joined
|
|||
brrt | i'm planning | 10:15 | |
10:56
zakharyas joined
10:59
AlexDaniel joined
|
|||
jnthn | About object alignment: the best way to do it would be to round up sizes at the point we calculate them | 11:03 | |
yoleaux | 09:49Z <Zoffix> jnthn: Would you review this commit in a branch I made? github.com/rakudo/rakudo/commit/77fb61a719 It looks a bit nutty, especially the whole block-per-».-site thing and the perf boost isn't amazing. I think we can get the same benefits by improving slurpy dispatch caching instead. | ||
jnthn | Then the allocator doesn't have to be burdened with any extra checks | 11:05 | |
11:26
zakharyas joined
11:56
zakharyas joined
11:58
coverable6 joined,
nativecallable6 joined,
unicodable6 joined
12:01
reportable6 joined
|
|||
wictory[m] | jnthn: you are probably right ... the size argument to `MVM_gc_allocate_nursery()` comes either from a `sizeof()` (which can assume is aligned, and this can be checked using static analysis), or from `st->size`, where `st` is a `MVMSTable`. The `st->size` seems to mostly come from `sizeof()`s, except for two places in `src/6model/reprs/P6opaque.c`. I'm not sure, but could there be some more places that are not directly | 12:02 | |
visible from the code? It would be nice if some MVMSTable genius could verify this :) | |||
Here is the places I found where `st->size` is set to something else than a `sizeof()` github.com/MoarVM/MoarVM/blob/e813...que.c#L876 github.com/MoarVM/MoarVM/blob/e813...que.c#L917 | 12:03 | ||
There are even some comments about that sizes should be aligned in `src/6model/reprs/P6opaque.c` | 12:06 | ||
12:15
AlexDani` joined
|
|||
MasterDuke | brrt: any thoughts on github.com/MoarVM/MoarVM/pull/787 ? | 12:17 | |
brrt | i'm checking | 12:39 | |
oh yeah, i had some thoughts about that | |||
i'll post them | 12:44 | ||
MasterDuke | cool, thanks | 12:50 | |
brrt: and while you're here, what am i doing wrong here: `(template: isconcrete (if (and (nz $1) (^is_conc_obj $1)) (const 1 int_sz) (const 0 int_sz)))` ? | 13:01 | ||
brrt | ehm. good question | ||
13:01
reportable6 joined
|
|||
brrt | you may stumble on a JIT bug :-P | 13:01 | |
MasterDuke | error: Expected flag but got reg in template (if (and (nz $1) (zr (and (load (addr $1 (&offsetof MVMObject header.flags)) (&SIZEOF_MEMBER MVMObject header.flags)) (const ("E MVM_CF_TYPE_OBJECT) (&SIZEOF_MEMBER MVMObject header.flags))))) (const 1 int_sz) (const 0 int_sz)) child 0 | 13:02 | |
brrt | ehm. | ||
maybe a JIT compiler bug | |||
lemmetry | |||
oh, i see | 13:03 | ||
(and) is binary AND | |||
like 1 & 2 | |||
what you're looking for is ALL | |||
MasterDuke | aahh | 13:04 | |
brrt | which is boolean-shortcircuiting AND generalized | ||
MasterDuke | now it compiles | 13:07 | |
brrt | :-) | ||
otherwise it looks good | |||
MasterDuke++ :-) | |||
13:40
lizmat joined
14:10
zakharyas joined
14:45
brrt joined
15:00
MasterDuke joined
15:31
zakharyas joined
15:50
zakharyas joined
16:05
brrt joined
16:12
zakharyas joined
|
|||
MasterDuke | brrt: looks like cast isn't implemented? | 16:35 | |
brrt | what kind of cast are you doing? | ||
you rarely need to CAST by hand | 16:36 | ||
timotimo | maybe int ⋄ num? | ||
MasterDuke | for coerce_ni | ||
moritz | if you don't break your hand, you don't need a cast for it :-) | ||
MasterDuke | GET_REG(cur_op, 0).i64 = (MVMint64)GET_REG(cur_op, 2).n64; | ||
timotimo | aha! :) | ||
MasterDuke | timotimo++ | 16:37 | |
timotimo | i like compose+<+> giving me ⋄ it's a pretty glyph | 16:38 | |
brrt | oh, no, that's not a thing yet | 16:45 | |
because numeric registers are not a thing yet | |||
16:52
zakharyas joined
|
|||
MasterDuke | ok, i'll leave those be for now | 16:57 | |
17:00
zakharyas1 joined
|
|||
brrt | :-) | 17:02 | |
17:44
reportable6 joined
17:46
reportable6 joined
17:47
reportable6 joined
17:48
reportable6 joined
18:52
reportable6 joined
19:23
MasterDuke joined
|
|||
lizmat | and another Perl 6 Weekly hits the Net: p6weekly.wordpress.com/2018/01/29/...s-modules/ | 19:24 | |
20:24
quotable6 joined
|
|||
MasterDuke | can there be string literals in templates? | 20:28 | |
20:42
coverable6 joined
20:50
coverable6 joined,
bart__ joined
|
|||
brrt | MasterDuke: yes, but | 20:51 | |
let me think about how that worked | 20:52 | ||
(i recently added support for string literals in the parser) | |||
escaping-\" doesn't work | |||
MasterDuke | but if i don't need any "s in the string, (carg ="something here" ptr) should work? | 20:54 | |
or should that be str at the end? | 20:55 | ||
or, is there any "built in" support for MVM_exception_throw_adhoc? | 20:57 | ||
21:07
nativecallable6 joined
|
|||
brrt | no, i was working on that at some point | 21:08 | |
the interesting thing is that throw_adhoc and friends never return | 21:09 | ||
21:09
nativecallable6 joined
|
|||
brrt | so we can be more clever around storing values to memory | 21:09 | |
21:10
Kaiepi joined
|
|||
MasterDuke | btw, think this looks reasonable? gist.github.com/MasterDuke17/ba861...8a43b3b534 | 21:11 | |
it's not quite right though, "node is too short" | 21:14 | ||
something about the dov/ifv | 21:21 | ||
brrt | IFV takes two branches. i think you want WHEN | ||
MasterDuke | heh, just noticing that now | 21:22 | |
now, Node (carg = "Cannot look up attributes in a %s type object" = str) is too short | 21:23 | ||
brrt | yeah, not sure, but i don't think that needs a = sign at all | 21:24 | |
and.. you can't put it like that literally, has to be wrapped with const_ptr | |||
MasterDuke | k | 21:25 | |
what is the =" "= form for? | |||
brrt | that's not something that i think actually works | 21:31 | |
is that in the templates now? | |||
21:32
domidumont joined
|
|||
brrt | something like (const_ptr "foo bar") | 21:32 | |
MasterDuke | no, just mentioned in github.com/MoarVM/MoarVM/blob/mast...org#syntax | ||
brrt | oh, that's an artifact of rendering | 21:41 | |
MasterDuke | brrt: fyi, got the template compiling (and it seems to work), but there were some warnings | ||
brrt | the = should make it appear monospace | 21:42 | |
MasterDuke | gist.github.com/MasterDuke17/ba861...8a43b3b534 | ||
ah! | |||
brrt | yeah, you should use const_ptr there | ||
MasterDuke | also in the same section: Macro parameters are prefixed by =,= (e.g. =,obj=), and they are replaced with whatever symbol or list is ‘bound’ to them when the macro is invoked. | 21:43 | |
`(carg (const_ptr ("E "Cannot look up attributes in a %s type object") ptr_sz) ptr)` ? | 21:44 | ||
that causes: Use of uninitialized value in lc at tools/expr-template-compiler.pl line 114, <STDIN> line 514. | 21:45 | ||
brrt | that's probably something wrong yes | 21:46 | |
anyway, i have to go now | |||
MasterDuke | later. thanks for the help | 21:48 | |
22:12
reportable6 joined
23:44
Voldenet_ joined
23:48
yoleaux joined,
evalable6 joined,
quotable6 joined,
coverable6 joined
|