02:16 vendethiel joined 06:11 brrt joined
brrt good * 06:16
nwc10 good UGT, brrt 06:18
brrt early UGT in fact :-) 06:19
06:41 zakharyas joined
dalek arVM/even-moar-jit: 4ba51d2 | brrt++ | src/ (6 files):
Register assignment != register allocation

Keeping these separate greatly simplifies the (would-be) implementation of the register allocator.
06:59
07:07 Ven joined 07:56 lizmat joined 08:57 colomon joined 09:03 FROGGS_ joined
dalek arVM/even-moar-jit: c565f8e | brrt++ | src/jit/ (6 files):
Implement necessary copy, load, spill primitives
09:14
brrt ok, i think the mechanics are in place 09:22
now what's left is the difficult bits
deciding which value to spill
and where to spill 09:23
09:24 colomon joined
lizmat brrt++ 09:25
brrt :-) 09:32
09:34 colomon joined 09:53 colomon joined 10:20 Ven joined 10:34 brrt joined 10:59 vendethiel joined
dalek arVM/even-moar-jit: c5a9655 | brrt++ | src/jit/ (4 files):
Implement register spilling (primitive)
11:16
11:17 colomon joined 11:18 Ven joined 12:23 Ven joined
dalek arVM/even-moar-jit: 37b34cb | brrt++ | / (3 files):
Validate expression templates before compiling

Errors in expression templates are easy to make and very hard to debug. So the expression template compiler now finds template structure errors and warns early.
12:45
brrt you'd be surprised by how many of such bugs still existed 12:46
dalek arVM/even-moar-jit: c7c1123 | brrt++ | src/jit/register.c:
Update register number counts on load and spill
12:48
13:02 FROGGS joined
dalek arVM/even-moar-jit: 6975d6f | brrt++ | src/jit/ (5 files):
Start trying to compile expression trees. Fix bugs

Quite a few things are NYI, and the compiler stops on these.
13:28
brrt i'm of course a madman for suggesting it. but how would we consider integrating something like libmill onto moarvm 13:31
libmill.org/
no idea how it performs
btw
JimmyZ brrt: looks like doesn't support windows 13:34
brrt aw, shame
that's that, then
i do believe that's some evil macro stuff in there
JimmyZ well, I'd rather to see one written by perl6 :P 13:35
brrt in perl6 everything is already easy :-P 13:39
timotimo hm, should i put parse_jitgraph.p6 into even-moar-jit, too? 13:55
do we expect the even-moar-jit binary to segfault when trying to build nqp? 13:59
and if not, should i try to investigate?
it's just a case of compiler->allocator being 0x0 14:06
14:07 TimToady joined 14:08 FROGGS joined 14:13 TimToady joined 14:15 Ven joined
timotimo doesn't seem like register_allocator_init is called from anywhere, actually 14:26
15:04 brrt joined
[Coke] hhhh~. 15:12
~> 15:13
FROGGS </~ 15:14
masak ~~~> 15:15
timotimo <~~>
brrt yeah, even-moar-jit may segfault 15:16
and yes, the parse_jitgraph.p6 would be a good to include into even-moar-jit
but i can do that just by merging
timotimo right, you can merge master into even-moar-jit 15:17
as it looks right now, it cannot do anything but segfault, as the register allocator never gets set and after compiling a tile it tries to release some registers
dalek arVM/even-moar-jit: 26766b0 | brrt++ | src/jit/ (2 files):
Initialize register allocator, timotimo++
15:21
[Coke] apologizes, had to drop crappy bus wifi and switch to his cell phone hot spot.
brrt have you committed the jitgraph parser to master?
timotimo yes
dalek Heuristic branch merge: pushed 57 commits to MoarVM/even-moar-jit by bdw 15:37
timotimo neato 15:39
perhaps you can help and implement the REG_ADDR thing, because i'm still confused as to what it's supposed to look like
brrt it's really simple actuallly 15:48
timotimo that must be what's confusing me
brrt - check if the operand of the reg_addr is a MVM_operand_write_reg
- if so, emit it's operand number 15:49
- done
why does that work? because the write-operand is translated to it's address by the expression tree builder
see ... letmesee.. src/jit/expr.c:L142 15:50
does that make sense? it's that way so we can say things like (store $0 $1 ptr_sz) 15:55
if we wanted it
dalek arVM/even-moar-jit: f038462 | brrt++ | src/jit/graph.c:
JGB is in the process of being factored out
16:05
timotimo oh, i didn't know that i'd have to inspect the operation's operators 16:06
that makes more sense now
brrt i try to have it make sense 16:07
:-)
sometimes, that fails
timotimo enter_call NYI is what i get to now, which sounds better than segfaulting :) 16:20
16:32 Ven joined
timotimo what do i do in case we have a REG_ADDR, but the operand isn't write_reg? 16:37
renaming jgb_append_call immediately broke my script %) 16:45
bleh, i shouldn't have committed that in between to my gist 16:55
god damn it. the output has gone from having MVM_OP_ in front to not 17:02
so the diff isn't so helpful
timotimo considers git filter branch ...
eh. whatever. 17:05
looking closely you can see that a few more ops can now work
17:08 Ven joined
timotimo now isfalse and istrue also parse, yey 17:18
dalek arVM/even-moar-jit: 093eb66 | timotimo++ | tools/parse_jitgraph.p6:
chase renames, also remove MVM_OP_ from output
17:20
arVM/even-moar-jit: 660e938 | timotimo++ | tools/parse_jitgraph.p6:
support MVM_JIT_REG_ADDR.
arVM/even-moar-jit: 175e9e9 | timotimo++ | tools/parse_jitgraph.p6:
support "op == MVM_OP_..." literal values (for istrue/isfalse only)
arVM/even-moar-jit: 2fbd57a | timotimo++ | tools/update_ops.p6:
sort the flags for MAST::Ops before outputting them
timotimo gist.github.com/timo/afb0413f1aead.../revisions - this is the address of the gist, in case it got swallowed by the backlog 17:22
er, that's the revisions of the gist, not the gist itself, obviously
17:41 Peter_R joined 17:48 brrt joined
brrt looks quite good 17:57
we cry
when does that happen?
timotimo we cry? 17:58
brrt yes, we cry and wail, and gnash our teeth at the unfairness of it all 17:59
i see no other alternative
that's not true... we can special-case ops 18:00
like we have for inc/dec
but it's not preferable
timotimo oh
that's what we do when it's not a write operand 18:01
yeah, in that case i report the inability to translate that
brrt actually, inc/dec are write operands. it can be solved much more simply
timotimo the "we cry" was completely context-less for me :)
brrt :-)
timotimo inc/dec aren't calls to C functions, though
hopefully! ;) 18:02
brrt no
timotimo next thing i can do to help is potentially just to write some tiles?
brrt yes, you can do that, if you want to 18:03
however, i have not documented the tiles yet
it'd be interesting to see what you need to know to write a few of them 18:04
timotimo hmm
well, the most bail-heavy op so far is ifnonnull 18:05
brrt which is that?
timotimo i couldn't get new statistics for the bails because now we just die with an exception after compiling the first thing
i think
brrt yeah, that's true
you kind of want to revert graph.c to a few versions back if you want to get the statistics 18:06
timotimo why isn't there a simpler thing to do? :P
a single line to comment out?
brrt impleminting ifnonnull is actually a template thingy 18:07
timotimo thought so
brrt ok, you know what i can do
i can give you an environment flag that disables/enables the expr jit compiler
timotimo that'd be cool :) 18:09
brrt working on it
timotimo after that comes decont, but at least decont_i, decont_n and decont_s are already implemented
decont wasn't a "call to c function" type of thing apparently
decont is a primitive according to graph.c 18:10
i can build a (^caller) and use that to translate getdynlex and binddynlex probably 18:11
yes, that'll do 18:12
dalek arVM/even-moar-jit: 04d892a | brrt++ | src/ (3 files):
Make expr tree environment-controllable

MVM_JIT_EXPR_ENABLE needs to be set to nonempty value for the expr tree compiler to run.
18:22
arVM/even-moar-jit: a7b01ac | timotimo++ | / (2 files):
support MVM_JIT_INTERP_CALLER
18:24
timotimo the statistics of bails doesn't improve much :| 18:49
probably because many things get blocked by the many-bailers
18:50 vendethiel joined 19:57 brrt joined 20:10 muraiki joined
muraiki hi all. I have no real knowledge of moarvm or nqp, but I'm trying to find out if nqp::watchfile uses polling or hooks into the kernel somehow (on linux). from what I could piece together so far, I guess moarvm is what actually implements the nqp::watchfile call, right? 20:11
I made it as far as here but then my eyes glazed over because I don't know C :) github.com/MoarVM/MoarVM/blob/mast...hers.c#L55 20:12
leedo muraiki: it looks like libuv uses the platform specific apis to watch for file change events 20:15
nikhilm.github.io/uvbook/filesyste...nge-events
"inotify on Linux, FSEvents on Darwin, kqueue on BSDs, ReadDirectoryChangesW on Windows, event ports on Solaris, unsupported on Cygwin"
muraiki oh, I see, that's an external library. thanks so much!
leedo np 20:16
brrt we use libuv, yes 20:22
jnthn Aye. Trouble is that (unless it's changed recently) libuv is kinda a lowest common denominator in what it provides 20:23
muraiki as long as I can watch for file changes without it actually doing something like polling under the hood, that should be fine :) 20:24
jnthn libuv does have a polling option also, but I went with the event-y one 20:27
It's all quite icky though. Windows gives you duplicate notifications for various things, for example. 20:28
(Not just on Moar, it's a Windows "thing". The .Net API does just the same.) 20:29
muraiki jnthn: yeah, I think I saw some duplicate notifications on linux, actually. I'm filtering using .unique(:as(*.path), :expires(1)) 20:30
although I just updated "everything" now
so maybe I had something out of date
jnthn muraiki: Yeah, the excuse tends to be "you touched metadata and data" and so forth :) 20:32
muraiki jnthn: oh, I see. this is my first time working with things like this. thanks for explaining it 20:33
jnthn :) 20:42
'night, #moravm
timotimo oh brrt was here again :) 20:52
brrt still here
oh, goodnight jnthn
timotimo oh!
brrt i'm going to ask whatever i have to ask tomorrow then :-)
timotimo so, are you going to build a ifnonnull template? :) 20:53
brrt no, i was hoping to see if you could
gives me an idea on the quality of my documentation
also
timotimo hah
brrt i'm much too busy still with register allocation woes
timotimo then you'll have to point me at what i need to read to figure out the ifnonnull template 20:54
i forgot that the if/else thing doesn't enter the expr tree at all, it'll just have a jump at some point 20:58
brrt ok, have you read the current expr tree documentation? docs/jit/ir.md 21:02
correct
timotimo mhm
brrt ok, well, i can guide you through it 21:03
first of all, ifnonnull branches if it's 0th operand is not null according to MVM_is_null
MVM_is_null is defined, it seems, in src/6model/reprs/MVMNull.h 21:04
that does: return !check || check == tc->instance->VMNull;
timotimo ah 21:05
brrt you can also check emit.dasc
which implements it as a primitve
timotimo it compares against 0 and if that isn't the case it compares against our constant vmnull, which i believe we have as a macro
brrt in fact, we have it as a node
ain't that cool
now, the boolean || is implemented in the exprtree using the variadic short-circuiting ANY 21:06
node
foo || bar is (any 2 (foo) (bar))
see what i mean?
timotimo oh, it's variadic 21:07
the 2 is for "number of things that come afterwards"?
brrt aye 21:08
timotimo same with "do", yeah?
brrt yes
timotimo isnull_s has a commented-out thing below that just uses "nz" to check for zero 21:09
it kind of seems like that'd be "nonzero" from the name %)
brrt aye
that is exactly right :-)
timotimo oh 21:10
hm 21:11
(template: ifnonnull
(any 2
(nz $0)
(eq $0 (vmnull))
(jump $1)
))
oh 21:14
any doesn't do the if/then itself
also, it seems like i've built a check for "is this vmnull and not null" or something 21:15
brrt actually, that's already pretty good 21:16
timotimo but how do i build an if without an else-branch? just putting () there doesn't seem to work right
"unknown node type", it says
brrt nope, but, consider what that WHEN does
or actually, that if/else
it doesn't yield a value
it updates the current position 21:17
that's a branch, which is a void operation
timotimo does that mean it has to have a ! after ifnonnull?
brrt hence, the else-operation is imply nothing
basically, if you're using 'statement' conditionals, you must pick EITHER or WHEN
timotimo is "ne" the opposite of "eq"?
brrt right
timotimo (template: ifnonnull 21:18
(when (any 2
(nz $0) (ne $0 (vmnull)))
(jump $1) ))
brrt ok, almost there
timotimo ah, not jump. branch.
and perhaps i have to (label $1) ? 21:19
brrt yes
timotimo or use goto $1
brrt the reason being that branch can go anywhere it pleases, and it's the label that turns the constant in $1 into an executable address
timotimo mhm 21:20
brrt (you can easily implement (branch (load mem)) as a tile, for example
timotimo mhm
hllboxtype_i seems quite popular; i'm sure i can implement that as a template, too :)
21:22 Peter_R joined
brrt try it out :-) 21:23
timotimo now i have (using let:) a $hllconf, which points at cu->body.hllconfig
how do i deref that? (load (addr $hllconf) (offsetof MVMHLLConfig body.int_box_type)) for example? 21:24
actually, i've made this a macro now: ($hllconf (load (addr (cu) (&offsetof MVMCompUnit body.hll_config)) ptr_sz))
brrt that's the let: expression? looks good 21:26
timotimo (template: hllboxtype_i
(load (addr (^hllconfig) (&offsetof MVMHLLConfig int_box_type))))
then you'll have to point me at what i need to read to figure out the ifnonnull template
oops, how did that line get put in there, too?
brrt can you send me a gist?
also, load always needs a size 21:28
timotimo sure 21:29
oh, yes
brrt it should complain about that :-)
timotimo gist.github.com/timo/1aa5c5475fb0c773cfd0 21:30
ifnonnull, ^hllconfig and hllboxtype_i are new in there
hm. 21:31
"unknown node type" is how it errors out when it sees hllboxtype_i :( 21:32
brrt yes, $hllconfig isn't really a well-known node :-)
timotimo ooooh 21:33
brrt in fact, the $hllconfig is redundant, that's what you do for a let: expression, not a macro
it's rigid dude :-)
timotimo yeah, i copy-pasted it out of a let: expression
kind of unsurprisingly, all those hllboxtype_i bails now turned into box_i bails :) 21:34
i remember this from when we first implemented jit opcodes for the previous jit
box_i didn't get translated by my script because it has a "if the opcode is box_n, this parameter must be a _F type" ?: in it 21:35
brrt yeah, that sucks 21:37
timotimo so, how about the eq_i, not_i things? "i maybe want to add a flag-to-register op"; is that coming?
brrt if you wish, you have my permission to redundantize it in graph.c
yes, that's called flagval until i have a better name
maybe i want to just call that 'value'
timotimo ah, so it's already implemented? 21:38
and i can thus build not_i, eq_i, ne_i?
brrt (i.e. copy-paste it to the reg_val and reg_val_f case in different blocks)
timotimo aye 21:39
brrt it's not yet implemented, although it's simple enough to implement
but the node name certainly exists
next up, i'll be showing you how to create tiles :-)
i'm ambivalent whether i should *imply* the upscaling or make it explicit, and i'm betting on upscaling 21:40
eh, explicit
basically, that would make it (convert (flagval (eq $1 $2)) int_sz int) 21:41
or so
not 100% sure on that
dalek arVM/even-moar-jit: 396aca6 | timotimo++ | src/jit/core.expr:
hllboxtype_i and ifnonnull are very popular bailers.
21:42
arVM/even-moar-jit: 5e0e862 | timotimo++ | src/jit/graph.c:
remove "do we want _F or not?" checks from some ops

by duplicating the code for float vs non-float so that the parser has an easier time.
brrt also, do you do frequent make reconfig?
timotimo no, i didn't know about that
brrt timotimo++
reconfig often
timotimo ah?
brrt i've changed the makefile quite often :-)
timotimo ah
how do we best get sqrt and the trigonometric ops into the reach of the exprlist compiler? 21:43
brrt not sure, why don't they work now?
timotimo hold on.
brrt it's all a bit problematic since i haven't thought numeric register usage through at all
waitaminute 21:44
timotimo src/jit/core_expr_tables.h:558:30: error: ā€˜sqrtā€™ undeclared here (not in a function)
MVM_JIT_CONST, CONST_PTR(sqrt), MVM_JIT_PTR_SZ, MVM_JIT_CARG, 1,
^
src/jit/expr.c:5:35: note: in definition of macro ā€˜CONST_PTRā€™
#define CONST_PTR(x) ((uintptr_t)(x))
we may have to force gcc to turn sqrt into "a thing" we can reference
brrt ifnonnull should branch if both $0 is nonzero AND not equal to vmull 21:45
so the any should be and
timotimo oh
ah, yes
brrt #include "math.h" before #include "tile_tables.h"
timotimo oh, is that so easy?
brrt should be all, yes
timotimo ITYM <math.h>? 21:47
yes, much better
dalek arVM/even-moar-jit: bd5cca4 | timotimo++ | src/jit/core.expr:
ifnonnull was wrong, brrt++ for noticing
arVM/even-moar-jit: b8f37a2 | timotimo++ | src/jit/tile.c:
allow us to put sqrt and trigonometric functions into core.expr
brrt yeah, <math.h> also works 21:48
timotimo gist.github.com/timo/afb0413f1aead.../revisions - check it :) :) 21:49
now i'll have a look at decont
brrt is not sure whether he should assign arglist an order nr 21:50
oh, by the way, don't use ptr_sz in (carg), use ptr 21:51
e.g in box_s 21:52
but, really cool, timotimo++
timotimo oh
dalek arVM/even-moar-jit: 477aff7 | timotimo++ | tools/parse_jitgraph.p6:
in carg, use "ptr" instead of "ptr_sz"
21:53
timotimo how best to negate a flag in an if?
(i.E. use ^is_type_obj for IS_CONCRETE)
"zr"? 21:54
brrt you can't negate a flag in if 21:58
basically, you'd be better of negating the expression
we don't do logical NOT 21:59
timotimo hm
but is_type_obj already starts with (nz ...)
OK, now i'm supposed to pass the address of the target register to a c function, just like the result of compiled things 22:00
i should be able to do this
brrt yay, arglist compilation now works!
i believe in you :-) 22:01
timotimo hm
could already be done
node load is too short, eh?
brrt which op are you trying to implement
yes, you probably miss the size
it is not implicit
timotimo decont 22:02
i put the size into addr rather than load
Node (call (const (&CONST_PTR (load (addr (load (addr (load (addr $1 (&offsetof MVMObject st)) ptr_sz) (&offsetof MVMSTable container_spec)) ptr_sz) (&offsetof MVMContainerSpec fetch) ptr_sz))) ptr_sz) (arglist 3 (carg (tc) ptr) (carg $1 ptr) (carg $0 ptr))) is too short at tools/expr-template-compiler.pl line 80, <$INPUT> line 119.
hooray!
i disagree, it's not too short :D
but yeah
forgot the return type
now i get errors from the result 22:03
src/jit/core_expr_tables.h:98:57: warning: implicit declaration of function ā€˜ARRAYā€™ [-Wimplicit-function-declaration]
does that tell you something?
i'll put a gist of the template, too
gist.github.com/timo/1aa5c5475fb0c...ile-decont 22:04
oh
i put the size in the wrong node again
hum. same error, eh?
updated with the ptr_sz fix 22:05
dalek arVM/even-moar-jit: be70a8d | brrt++ | src/jit/ (5 files):
Implement compile_arglist & MVM_jit_register_take

compile_arglist is only implemented on POSIX, but should be easy to implement on win32 with the current primitves
22:06 TimToady joined
brrt letmesee 22:06
ok, let's make that simpler
timotimo a "let" wouldn't be bad, eh? 22:07
brrt yeah
but
hmmm
you're still thinking waay to high level :-) 22:08
timotimo d'oh 22:09
i was hoping there'd be a way i could not grab the stable's container spec twice 22:10
but that doesn't seem to be possible
brrt yeah, you can do that actually, but it'll require nested IF, as far as i can see
timotimo ah 22:11
right. then the "else" case will be a bit more complex
brrt actually, this is a destructive op, because the consainter_spec->fetch takes the register addres
hmm, i'm not sure you can use a LET there 22:14
gist.github.com/bdw/e59d772a17fadeb42c96 is what i'd give you 22:24
for what it's worth, since you're referring to $1 often, we may want to put a (let (($obj (copy $1)) before that, to ensure the $1 is loaded beyond either branch 22:25
timotimo oh 22:26
i had no idea that'd make a difference
brrt it shouldn't but it will 22:27
timotimo but i can do that
brrt due to general hardness of value calculation ordering
timotimo i didn't know about "either" yet 22:28
(store $0 $1) is too short, it says; needs a size? 22:29
brrt right
timotimo yeah, i put ptr_sz in there now
brrt ptr_sz :-)
either is void if 22:31
dalek arVM/even-moar-jit: 2800146 | timotimo++ | src/jit/core.expr:
implement decont! (with help from brrt++)
brrt normal if works like a ternary operator expression: foo ? bar : baz
timotimo OK
brrt either works like if(foo) bar(); else baz(); 22:32
i distinguish them this way because the tiler can't
(distinguish between if with void and nonvoid children) 22:33
timotimo my (carg (copy $n)) are too short, lacking the size again
brrt no, not size, type 22:34
why copy $n, by the way
c call arguments need to have type information :-)
timotimo er, yeah 22:35
it's for literals
brrt also for knowing which register type to stuff things in 22:36
timotimo hm, do some of my generated templates need a !
like atpos_o with your implementation has a !, but with mine it doesn't
huh. i get all the undefined errors for trig and sqrt again :| 22:37
getlex went up to 75 from 66 and unless_o joined the fun at 29 22:39
(bails)
brrt getlex needs some expression builder love
timotimo should i commit the templates that were generated from the parser tool or keep them local modifications?
brrt keep them local for now
i'm not 100$ ready to deal with it yet 22:40
timotimo you're our 100 dollar brrby :P
i'm not sure how to do the coerce_in and coerce_ni ones, they probably just turn into a super simple primitive or perhaps i'd have to build a tile for it 22:41
but i have an idea how to tackle unless_o
does the "gc sync point" have to be considered here?
22:41 TimToady joined
brrt at some point... 22:43
but i'll deal with that later
timotimo OK
so unless_o won't get it either :) 22:44
oh 22:45
coerce_istrue is weird
because it sets the tc->interp_cur_op
brrt coerce istrue is really weird, i know 22:47
ignore that for now
timotimo yeah, but it's so high up on the bailers list :)
coerce_ni is 3rd, unless_o is 2nd and getlex is 1st
unless_i it is, then 22:48
brrt basically any call that takes reg_addr to write it's value should be marked destructive 22:49
timotimo right. i can do that
brrt like box_s and box_i
and reg_addr is ptr not ptr_sz
ptr_sz = 8
ptr = ... also 8 22:50
would you look at that
no, ptr = 7
timotimo oh, whoops
wait, where do i use ptr where i should use ptr_sz?
brrt you use ptr_sz in load and store and friends, to indicate the size of the value being loaded 22:51
the idea is that on different architectures pointers will have different sizes
and nums may have different sizes, etc 22:52
timotimo i'm confused. did i do it wrong somewhere and i have to fix it?
brrt you use ptr in carg, and possibly some other places in the future, to indicate the pointer type
timotimo yes, i use ptr in carg 22:53
brrt so that the argument list builder knows to store the values in a pointer-register (a general-purpose-register)
timotimo mhm
brrt different cpu's have many different register classses
timotimo i feel like i missed the context that explains why you started this explanation :)
brrt so, where it goes wrong, i think, is in REG_ADDR 22:54
irclog.perlgeek.de/moarvm/2015-08-25#i_11115541
:-)
timotimo ooooh
see, there is a tiny thing in the sentence structure that i think you've missed 22:55
i was asking basically "point out to me the specific place where i am currently using ptr where i should have used ptr_sz instead"
you understood "when should i use ptr and when should i use ptr_sz"
brrt yeah 22:56
ok, when you use REG_ADDR, you emit ptr_sz, it should be ptr
timotimo that's where you're wrong! my compiler doesn't have any ptr_sz in it any more
dalek arVM/even-moar-jit: 75d08c1 | timotimo++ | tools/parse_jitgraph.p6:
forgot a type for carg when we have a literal integer
22:57
brrt then your gist is out of date :-P
timotimo ah
probably
brrt cool :-)
timotimo updated the gist 22:58
brrt cool 23:01
timotimo mh, what's the opposite of nz again? zr?
brrt i'm... going to sleep, i'm sorry to say
aye
nz = nonzero, zr = zero 23:02
timotimo 'k
brrt when in doubt, consult src/jit/ocmpile.c:338
compile.c
timotimo so unless_i is basically just (when (zr $0) (branch (label $0)))
brrt $1
but yeah
timotimo er, yes 23:03
that's what i have in my vim :)
brrt that's what it is
timotimo++
23:04 TimToady joined
brrt afk 23:04
timotimo cool, implementing unless_i removed 14 bails in total
brrt \o/ 23:05
timotimo and none got added; obviously because unless_i would only occur at the end of a BB
and our expr jit stops compiling at a BB border
there's quite a few big-ish trees in the jit log now 23:07
sp_findmeth is kinda popular, but it's a big chunk of code that'd have to be translated 23:08
and prepargs ... no clue how i'd implement this, or rather whether or not it's needed in the jit at all 23:11
dalek arVM/even-moar-jit: b2c3ad4 | timotimo++ | src/jit/core.expr:
implement unless_i
23:30
arVM/even-moar-jit: b0f137d | timotimo++ | src/jit/core.expr:
implement hllboxtype_s and hllboxtype_n
timotimo hllboxtype_s had 3 bails, those are now 1 more isnull, 1 more param_sn and 1 more successfull compile 23:32
23:33 nebuchad` joined
timotimo and with that, i shall go to bed 23:33
23:53 TimToady joined