|
00:01
tokuhiro_ joined
00:59
tokuhiro_ joined
01:28
vendethiel joined
05:38
vendethiel joined
06:53
FROGGS joined
07:02
ShimmerFairy joined
08:59
zakharyas joined
09:41
brrt joined
|
|||
| brrt | good * | 09:42 | |
| timotimo | good! | ||
| brrt | howsit today | 09:48 | |
| timotimo | it's okay | ||
| brrt | i'm going to apply the new-and-improved instruction encoding, and think that if there are any bugs left, i hope it's somewhere else | 09:49 | |
| timotimo | i hope so, too | ||
| brrt | maybe even in the templates | ||
| timotimo | Portable Efficient Assembly Code-generator in Higher-level Python (PeachPy) | 09:50 | |
| brrt | do you think it'd be interesting if i gave a how-to-work-on-the-jit workshop / talk at some perl workshop someday | ||
| oh really? where do you find such a thing | |||
| timotimo | github | ||
| nwc10 | brrt: it might be interesting, but you may end up with a lot of prep time invested for not massive payback | 09:51 | |
| brrt | can't find that | ||
| timotimo | PeachPy can be used to explore instruction length, opcodes, and alternative encodings: | ||
| brrt | hmmmm | ||
| timotimo | github.com/Maratyszcza/PeachPy | ||
| nwc10 | I don't know how many folks who attended the NQP tutorial session actually hack on NQP | 09:52 | |
| brrt | hmmmmmmmmmm | ||
| ok | |||
| nwc10 | although to be clear | ||
| brrt | but JIT's have a coolness factor | ||
| nwc10 | oh yes | ||
| brrt | :-P | ||
| nwc10 | you'll get attendees | ||
| but whether you gain contributors is something different | |||
| brrt | trueish | 09:53 | |
| psch | considering the jnthns slides are still somewhat the best first stop for the nqp-curious, maybe a workshop is worth it for the material it produces alone | ||
| brrt | (timotimo: cool) | 09:54 | |
| well... the thing is | |||
| nwc10 | although the NQP course is somewhat different in the trade offs for "will it get contributors" as lizmat++ and woolfy++ sponsored its creation | ||
| psch | so even if the workshop doesn't directly pull contributors, having the material might make it easier for interested parties later on | ||
| nwc10: right, that's obviously a factor | |||
| nwc10 | oh, I totally agree on that - having the material is useful | ||
| brrt | i don't see how i'll get contributors without such material | ||
| nwc10 | you don't need to run a 2 day workshop to create introduction docs | 09:55 | |
| brrt | no | ||
| i'm not thinking 2 day workshop | |||
| nwc10 | oh, wait | ||
| brrt | i'm thinking | ||
| nwc10 | you said talk :-) | ||
| brrt | 1 hour | ||
| at most | |||
| nwc10 | *That* is probably worth it, if you'd find it fun to do | ||
| I blame an empty stomach for getting the wrong end of the stick | 09:56 | ||
| brrt | i blame not being native english for not parsing that | ||
| :-) | |||
| brrt lunch & | 09:59 | ||
|
09:59
brrt left
10:07
colomon joined
10:40
Ven joined
|
|||
| arnsholt | A JIT talk would definitely be worth it | 11:56 | |
| Not only is there the PR factor, but it'd probably make a small dent in the bus-number of the JIT code by letting the other people working on Moar get some deeper insight into how the JIT operates | 11:57 | ||
|
12:18
ShimmerFairy joined
12:40
Ven joined
12:41
JimmyZ joined
12:52
brrt joined
|
|||
| brrt is back :-) | 12:52 | ||
| timotimo | ohej | 12:54 | |
| brrt | cool thing, PeachPy | 12:59 | |
| but...... | |||
| very low level | |||
| not sure how much this improves above using a portable assembler | |||
| JimmyZ | dynasm is portable too :P | 13:01 | |
| brrt | aye, but it works at runtime | 13:08 | |
| this is an assembler | |||
| in python | |||
| with | |||
| gadgets, and stuff | |||
| but it's a static assembler, as near as i can tell | |||
| oh, it can also work at runtime | 13:09 | ||
| cool | |||
| especially for something like pypy, although i'm sure they have their own solution | 13:10 | ||
| JimmyZ | dynasm is much small, and works well on windows without installing python/lua | 13:21 | |
| brrt | aye | 13:22 | |
| although, if you want to build it, we're actually building minilua for that | |||
| one of the things i'm proud of, is that at build time, we do all the preprocessing from source for the JIT | 13:23 | ||
| there's not checkin of gnerated assets into git | |||
|
13:28
Ven joined
13:32
brrt joined
|
|||
| JimmyZ | yeah | 13:39 | |
|
13:47
tokuhiro_ joined
13:52
Ven joined
13:56
dalek joined
14:12
pyrimidi_ joined
14:49
tokuhiro_ joined
14:51
FROGGS joined
16:33
vendethiel joined
16:50
tokuhiro_ joined
17:01
tokuhiro_ joined
|
|||
| jnthn | evening, #moarvm | 17:38 | |
| TimToady | o/ | 17:39 | |
|
17:39
Ven joined
|
|||
| jnthn had a nice, but exhausting time at communityday.se :) | 17:39 | ||
| Last minute talk writing is a great way to get crazy behind on backlog... :P | 17:40 | ||
| nwc10 | good UGT heresey, jnthn | 17:42 | |
| first masak, now you | |||
| what is the world coming to? :-) | |||
| TimToady | jnthn: we have a new slurpy now for one-arg | ||
| jnthn | TimToady: Which selection of ASCII chars did you go for? :) | 17:46 | |
| m: <* |>.roll((2, 3).pick).join.say for ^5; | |||
| camelia | rakudo-moar 3dfa85: OUTPUTĀ«||ā¤*||ā¤||ā¤|*ā¤|**ā¤Ā» | ||
| TimToady | m: sub foo (+@args) { say @args.elems }; foo [1..4]; foo [1..4],2 | ||
| camelia | rakudo-moar 3dfa85: OUTPUTĀ«4ā¤2ā¤Ā» | ||
| TimToady | m: sub foo (+args) { say args.elems }; foo [1..4]; foo [1..4],2 | 17:47 | |
| camelia | rakudo-moar 3dfa85: OUTPUTĀ«4ā¤2ā¤Ā» | ||
| TimToady | but the first caches | ||
| jnthn | Why +? :) | ||
| TimToady | I just got through explaining that on #perl6 | ||
| jnthn | Ah, then I'll backlog it :) | ||
| jnthn was hoping there was a one-liner answer ;) | |||
| FROGGS | <TimToady> there wasn't really any other good character left on the keyboard, and I got tired of typing *| | 17:48 | |
| jnthn | Aww, I was hoping for a nice mnemonic :) | 17:49 | |
| Maybe the + reminders of numbers which reminds you of 1-arg rule :) | |||
| FROGGS | hehe | ||
| jnthn | Wow, I need to reminder of grammar... | ||
| TimToady | well, it sort of still means "one or more", only differently :) | 17:51 | |
| FROGGS | I am reminded of bleem now... | ||
|
18:11
Peter_R joined
|
|||
| FROGGS | hmmmm, t/04-nativecall/16-rt125408.t really is a spesh bug... | 18:29 | |
| or at least affectes by spesh | |||
| affected* | 18:30 | ||
| so, due to inlining we end up with: Wrong kind of access to numeric CArray | 18:32 | ||
| jnthn | Ooh, I should probably cut us a release... | 18:43 | |
| To not block the Rakudo one | |||
| [Coke] | jnthn++ | ||
| m: say "foo" & "a nice old foo" ~~ /foo/ | 18:44 | ||
| camelia | rakudo-moar 25fed4: OUTPUT«「all(Failure.new(exception => X::OutOfRange.new(what => "Start argument to substr", got => "5", range => "0..3", comment => "use *5 if you want to index relative to the end"), backtrace => Backtrace.new), "e o")ļ½£ā¤Ā» | ||
| [Coke] | ww. | 18:45 | |
|
18:49
brrt joined
|
|||
| brrt | good * | 18:51 | |
| FROGGS | hi brrt | ||
| brrt | hi FROGGS | ||
| [Coke] | RT: 1,014 tickets; 4 [GLR] tickets, 3 Christmas blockers, 11 testneeded | 18:53 | |
| Dammit. ww | |||
|
18:53
brrt joined
|
|||
| FROGGS | wow, the speshbug I mentioned is about reading garbage memory | 18:57 | |
| brrt | what speshbug is that | 18:58 | |
| garbage memory lives in every corner | |||
| jnthn | FROGGS: Discovered with Valgrind? | ||
| FROGGS | jnthn: no, it get the wrong element kind, and I printed it and it is a large number which changes at every run | 18:59 | |
| valgrind points to MVM_jit_enter_code (compile.c:123) | 19:00 | ||
| and indeed, disabling the JIT makes it go away | |||
| brrt | oh, really | ||
| oops | |||
| also | |||
| huh | |||
| hmmm | 19:02 | ||
| do you have the broken code segment for me to peer over | |||
|
19:02
tokuhiro_ joined
|
|||
| brrt | oh, shame | 19:06 | |
| anyway, i'll be off soon. | |||
| dalek | arVM: 7326278 | jnthn++ | docs/ChangeLog: 2015.09 ChangeLog entries. |
19:08 | |
| arVM: 6fe21fd | jnthn++ | VERSION: Bump VERSION to 2015.09. |
|||
|
19:09
FROGGS joined
|
|||
| FROGGS | brrt: rakudo's t/04-nativecall/16-rt125408.t | 19:10 | |
| nice, the test passes when I comment the two cases: | |||
| src/jit/graph.c:223: case MVM_OP_unbox_n: return MVM_repr_get_num; | |||
| src/jit/graph.c:1988: case MVM_OP_unbox_n: { | |||
|
19:10
brrt joined
|
|||
| FROGGS | ohh, it is actually enough to comment the latter | 19:10 | |
| though, what that means, I dun't know | |||
| brrt | oh | 19:11 | |
| huh | |||
| lemmesee | |||
| FROGGS | maybe that hides just the problem somehow? | ||
| dalek | arVM/even-moar-jit: 9b19870 | brrt++ | 3rdparty/dynasm: Update DynASM for robustified rsp/r12 and rbp/r13 |
19:13 | |
| brrt | possibly....... | ||
| which test are we talking about now | |||
| FROGGS | rakudo/t/04-nativecall/16-rt125408.t | 19:14 | |
| brrt | ah, yes, that's been broken for some time for me | ||
| FROGGS | aye | ||
| remove the lives-ok and you'll see the error message | 19:15 | ||
| and then I print the "kind" in src/6model/reprs/CArray.c:347 | 19:16 | ||
| that shows there is garbage mem | |||
| brrt: it fails for some time because jnthn patched something so that more stuff gets inlined | |||
| here github.com/rakudo/rakudo/commit/56...34f9e9594b | 19:17 | ||
| brrt | darn jnthn with fixing rakudo to demonstrate my JIT bugs :-P | ||
| jnthn | :P | 19:18 | |
| Release nearly cut. | |||
| moarvm.org/releases/MoarVM-2015.09.tar.gz | 19:20 | ||
| [Coke] | jnthn++ | 19:22 | |
| brrt | yes, jnthn++ | ||
| i'm off for tonight | |||
| FROGGS++ for pointing this out | 19:23 | ||
| FROGGS | gnight brrt | ||
| nwc10 | jnthn++ | ||
| dalek | arVM: ef1eb19 | jnthn++ | ports/macports/Portfile: Update Portfile. |
||
| FROGGS | afaict the kind (which happens to contain garbage) is put in literally in graph.c around line 860 | 19:24 | |
| jnthn | 860? | 19:26 | |
| here that line reads { MVM_JIT_REG_OBJBODY, invocant }, | |||
| dalek | arVM: 3cae936 | coke++ | ports/macports/Portfile: update Portfile |
19:27 | |
| FROGGS | jnthn: a few lines later, containing MVM_JIT_LITERAL | ||
| that list of the seven args pretty well fits the signature of bind_pos: | |||
| static void bind_pos(MVMThreadContext *tc, MVMSTable *st, MVMObject *root, void *data, MVMint64 index, MVMRegister value, MVMuint16 kind) { | |||
| jnthn | FROGGS: How can I reproduce the failure? | 19:29 | |
| FROGGS | jnthn: just run rakudo/t/04-nativecall/16-rt125408.t | 19:30 | |
| jnthn | It passes... | ||
| FROGGS | grr | ||
| jnthn: then your jit behaves differently | |||
| it fails on linux and osx | |||
| maybe seven args is just an unlucky number for JITs on linux and osx? | 19:31 | ||
| jnthn | Indeed, I get it to fail on Linux too | ||
| I thought 7 was meant to be the number of perfection :P | 19:32 | ||
| FROGGS | hehe | ||
| m: .fmt('%#b').say for 22384, 1648, 26480 | 19:33 | ||
| camelia | rakudo-moar 1e7018: OUTPUTĀ«0b101011101110000ā¤0b11001110000ā¤0b110011101110000ā¤Ā» | ||
| jnthn | It does upset valbrind. | 19:34 | |
| *valgrind | |||
| ==23787== Conditional jump or move depends on uninitialised value(s) | |||
| ==23787== at 0x5018E56: bind_pos (CArray.c:340) | |||
| FROGGS | it does on my box | ||
| ohh wait | |||
| jnthn | So yeah, that confirms your junk | ||
| FROGGS | %d is not right for a short, right? | 19:35 | |
| in printf I mean | |||
| jnthn | .oO( I'm glad I know my your from my you're... ) |
||
| yeah, that's int | |||
| FROGGS | hehe | ||
| [Coke] | opened macport ticket to track new release. | ||
| jnthn | Though it probably won't matter | ||
| FROGGS | [Coke]++ | ||
| m: .fmt('%#b').say for 55152, 22128, 26224 | 19:36 | ||
| camelia | rakudo-moar 1e7018: OUTPUTĀ«0b1101011101110000ā¤0b101011001110000ā¤0b110011001110000ā¤Ā» | ||
| FROGGS | it is only partially junk | ||
| then lower byte is fine, though that is clearly not a six | 19:37 | ||
| (which would be MVM_reg_num64) | 19:38 | ||
| jnthn | Ah | 19:40 | |
| I think that it's something to do with arg 6's compilation | |||
| If I replace MVM_JIT_REG_VAL_F with MVM_JIT_REG_VAL then the failure goes away | 19:41 | ||
| We of course are passing things wrongly so will no doubt insert junk | |||
| But the 7th arg is fine then | |||
| FROGGS | hmmm | 19:45 | |
| confirmed | 19:46 | ||
| jnthn | oh, or does it | 19:47 | |
| We take MVMRegister | 19:48 | ||
| Which is a union | |||
| So maybe my fix does the right thing? | |||
|
19:49
colomon_ joined
|
|||
| FROGGS | hmmm, I cannot tell | 19:49 | |
| I've got the suspicion that this line is wrong: | 19:52 | ||
| src/jit/emit_x64.dasc:1576: | mov TMP6, qword WORK[arg.v.reg]; | |||
| why is MVM_JIT_REG_VAL and MVM_JIT_REG_VAL_F identical when MVM_JIT_LITERAL and MVM_JIT_LITERAL_F is not? | |||
| jnthn | I think my fix is right, fwiw | 19:53 | |
| Tring to further verify | 19:54 | ||
| FROGGS | k | ||
| :o) | 19:55 | ||
| jnthn | Yeah, seems that is it | 20:01 | |
| If the C code declares the type is a uniion, then we should always pass it in a normal register even if one remember is floating point, it seems | |||
| I think we hvae this bug in other places too | 20:03 | ||
| And the reason it don't show up on Win32 is that you pass anything more than arg 4 on the stack | 20:04 | ||
| FROGGS | yeah | ||
| jnthn: graph.c:708 is such a candidate | 20:05 | ||
| jnthn | Doing an audit of other places at the moment | 20:06 | |
| Seems just 2 other places | 20:07 | ||
| FROGGS | I think I've got more | 20:09 | |
| dalek | arVM: 60a48e8 | jnthn++ | src/jit/graph.c: Correct JIT of devirtualized REPR ops. Since the C function we end up calling expects an MVMRegister, which is a union, we should not use the SEE registers even when the value we are passing is known to be floating point. The callee expects it in a normal register. |
20:13 | |
| FROGGS | there are my changes: gist.github.com/FROGGS/3a0eb94ad0145840886b | ||
| ohh, lemme pull and compare | |||
| jnthn | I authored the patch on Windows, actually testing it on POSIX now | 20:14 | |
| (train wifi is icky for SSH to my Linux dv box) | |||
| Looks good to me in the test | 20:15 | ||
| FROGGS | line 1229 is not such a candidate? | ||
| jnthn | FROGGS: No | 20:16 | |
| Well, lemme verify but I considered that and decided fine | |||
| FROGGS | how so? | ||
| jnthn | case MVM_OP_bindkey_n: return MVM_repr_bind_key_n; | ||
| 'cus we *do* call a function with an MVMnum64 in the sig | 20:17 | ||
| If the thing we're calling declares in its sig it expects floating point it expects to fine it in the SSE reg | |||
| FROGGS | and not with an MVMRegister... aha | ||
| jnthn | But if it declares MVMRegister, it doesn't know what it's gonna get | ||
| Funky :) | |||
| TIL ;) | |||
| FROGGS | :o) | ||
| I bet this can go now: github.com/MoarVM/MoarVM/blob/60a4...aph.c#L708 | 20:19 | ||
| because of this: github.com/MoarVM/MoarVM/commit/60...c6299L1019 | |||
|
20:20
diakopter joined
|
|||
| jnthn | da | 20:22 | |
| oops | |||
| yes | |||
| FROGGS | hehe, I understood anyway :o) | ||
|
20:24
pyrimidine joined
20:27
lizmat joined
|
|||
| FROGGS | jnthn: I just did nqp, rakudo, libxml2 and SDL tests... all is happy | 20:27 | |
| jnthn | \o/ | ||
| I'll toss that skip thing | 20:28 | ||
| dalek | arVM: 002edea | FROGGS++ | src/jit/graph.c: devirt MVM_OP_{push,unshift}_n, as they dont explode anymore |
||
| FROGGS | jnthn: done | ||
| :P | |||
| jnthn | oh, darmn :P | ||
| FROGGS | Darm? O.o | 20:29 | |
| jnthn | I was about to push it too :P | ||
| FROGGS .oO( Ohh appendix! ) | |||
| jnthn | :) | ||
| Hah, that's appendix in German? :D | |||
| FROGGS | Darm, yes :o) | ||
| jnthn | hah | ||
| FROGGS | also intestine | 20:30 | |
| appendix is just the little useless one... Darm means the bigger one | 20:31 | ||
| now you know how it must feel like living in Darmstadt :o) | |||
| jnthn | .oO( What a crappy city! ) |
20:32 | |
| FROGGS | jnthn: you cat the release already? | 20:33 | |
| ohh, also tagged, yes | 20:34 | ||
| jnthn | Yeah | ||
| We had this issue for a couple of months | |||
| We can live with it not being in this release. | |||
| FROGGS | we just need to fudge that sanity test | 20:36 | |
| jnthn | *nod* | ||
| FROGGS | closed the RT ticket in your name | 20:37 | |
| is that proper enlgish? | |||
| err, eng-somthing | 20:38 | ||
|
20:43
diakopter joined,
TimToady joined
|
|||
| timotimo | does the devirt fix go in the release still? | 20:54 | |
| or is it too late already? | |||
| FROGGS | too late | 20:55 | |
| but we don't care, we are using bleeding edge :o) | |||
| jnthn | timotimo: It's already been in a relees before, so... | 20:56 | |
| timotimo | right. and my skip was still causing tests to be well, right? | ||
| anywey, bedtime | 20:59 | ||
| gotta get up real early tomorrow. bah. | |||
| jnthn | My empathies. I had to do that today... :/ | 21:00 | |
| timotimo | mhh | ||
| poor us | |||
| FROGGS | your skip did not help for another op that was buggy | 21:01 | |
| timotimo | damn | ||
| which one? push/unshift? | |||
| FROGGS | and so I skipped that sanity test in rakudo | ||
| bindpos_n | |||
| timotimo | ah | ||
| damn it. | |||
| i'm always quite a bit annoyed when bug fixes happen right after a release | 21:02 | ||
| oh well. | |||
| FROGGS | but after the release is before the release | ||
| so it will make it in the release in time :o) | 21:03 | ||
| and ppl are using rakudobrew, so all is well | |||
| timotimo | right | ||
|
21:04
tokuhiro_ joined
|
|||
| jnthn | That's time based releases. | 21:06 | |
| But the alternative doesn't really work any better. | |||
| FROGGS | aye, time based released do a pretty good job here | ||
| we can do on-demand released when everybody moved over to #hurd :D | 21:07 | ||
|
21:12
Peter_R joined
21:21
colomon joined
23:05
tokuhiro_ joined
|
|||