06:20
FROGGS joined
06:49
Ven joined
|
|||
nebuchadnezzar | FROGGS: new package uploaded this morning, waiting for build logs ;-) | 07:29 | |
FROGGS: If I understand correctly, you add libffi support in place of dynasm which should support all architecture but hurd? | 07:31 | ||
FROGGS | nebuchadnezzar: \o/ | 07:32 | |
nebuchadnezzar: exactly :o) | |||
I'm about to push it right now | |||
TEttinger | woo! | 07:36 | |
JimmyZ | not dynasm ,it dyncall | 07:41 | |
dalek | arVM/libffi: cfdd245 | FROGGS++ | / (12 files): support libffi besides dyncall (switchable via Configure.pl --has-libffi) Libffi is a very portable backend for foreign function calls. So this will unblock MoarVM from reaching platforms like mips, s390x, sparc, and potentially others. |
||
FROGGS | nebuchadnezzar: I need to test this branch on windows, and I hope somebody can test it on osx... | 07:42 | |
and I need to setup mips/mipsel/s390x/sparc vms, to tweak our build system | 07:43 | ||
07:54
zakharyas joined
|
|||
nebuchadnezzar | FROGGS: I may have some access to porter machines with my guest Debian account | 08:15 | |
FROGGS | I guess there will be some build/setup.mp tweaking needed to make it work on these platforms | 08:16 | |
build/setup.pm* | |||
nwc10 | I take it that if one wants to use libffi, then one needs libffi installed already? | 08:17 | |
nebuchadnezzar | FROGGS: so kfreebsd-any is OK :-D | 08:18 | |
FROGGS | \o/ | 08:20 | |
nwc10: and you need to pass --has-libffi as of yet... but I'll make it the default for platforms that dyncall cannot reach atm | 08:21 | ||
08:26
colomon joined
09:16
vendethiel joined
|
|||
nwc10 | oh gnoes. jnthn has failed to bootstrap, because he no longer has a coffee maker. | 09:48 | |
FROGGS | /o\ | 09:51 | |
10:17
Ven joined
10:41
FROGGS joined
11:30
brrt joined
|
|||
brrt | \o | 11:31 | |
FROGGS | hi brrt | 11:45 | |
JimmyZ | o/ | 11:46 | |
brrt | hi FROGGS, JimmyZ | ||
FROGGS | grrr, I cannot run mips or sparc because qemu either hangs at some point or segfaults | 11:58 | |
jnthn | The coffee situation was solved by CEO collecting me from home and bringing me to the office, where there is coffee. | 12:24 | |
(Yes, some details omitted; it's funnier without them. :P) | 12:25 | ||
nwc10 | :-) | 12:28 | |
do you have a backup plan for tomorrow morning? | |||
Or are you just going to stay up all night? | |||
jnthn | Um, no plan for tomorrow | 12:29 | |
But I have to finish some whisky tonight to prevent it going to waste :) | |||
brrt is still a beer man | 13:19 | ||
jnthn: i'm pondering how i can prevent an explosion of IR representations | 13:21 | ||
the way i'm seeing it now | |||
i need to build a machine-level IR (think: load, store, arithmetic, conversion, branching, condition flags, etc) | 13:22 | ||
then i need tiles working at that level to match the IR tree to a specific piece of machine code | |||
these should then fit into the existing jit node structure | 13:23 | ||
with a single 'expression' node being a collection of tile nodes? | |||
hmmm | |||
that gives me a lot of entities, few of which are compatible with the old JIT | 13:24 | ||
if any | |||
nwc10 | brrt: so this is not your thing? act.yapc.eu/ye2015/wiki?node=SherryTasting | ||
brrt | it'd be the first time i tasted sherry :-) | 13:25 | |
sherry is made from grapes? | |||
i thought it was made from.... cherries | |||
tadzik | sherries :P | 13:26 | |
brrt | tell me it did not make sense :-o | 13:27 | |
jnthn | Sherry always felt to me like a drink that wanted to be port... :P | 13:29 | |
brrt | i suppose port is also wine then? | 13:30 | |
jnthn | Fortified wine | ||
I quite like it | |||
13:30
JimmyZ_ joined
|
|||
jnthn | brrt: Maybe look elsewhere for inspiration? Like, what nodes does tcc have could be worth checking | 13:35 | |
brrt: Generally though, the QAST experience is that you often don't need so many nodes. | |||
brrt | tcc is tiny, right | 13:43 | |
luajit has only a single IR, famously, but it's also quite low-level | |||
hmmm | 13:44 | ||
ok, let's start with the simplest question | 13:46 | ||
what would happen if we directly use the spesh graph as IR | 13:47 | ||
if i did that, then i could potentially map values to registers, do some simple register allocation | 13:48 | ||
what i could not do so simply is stuff like CSE | |||
assuming in this case that on a low level there are more commonalities for CSE to eliminate than on the moar-bytecode level | 13:49 | ||
jnthn | I think the spesh graph is too high level, though.. | ||
brrt | yes, that is my suspicion too, but my point is figuring out why | ||
:-) | |||
jnthn | Well, I'd take a look at the sort of things we spit out in the JIT today that are "chunks" | 13:50 | |
And also things we know we'd like to do | |||
brrt | in general, we do stuff like: load, calculate, store | 13:51 | |
jnthn | Especially how we JIT things like the fast-path memory access things that attribute reads are lowered into | ||
And how we could JIT array accesses | |||
brrt | hmmm | ||
ok | |||
well, the way i see it in literature, is that the operation b = a[i] is first lowered into | 13:52 | ||
store(b, load(addr(a + i * sizeof(*a)))) | 13:53 | ||
which is then compiled into (if possible): | |||
mov reg(b), [reg(a)+reg(i)*scale-of(a)+offset-of(a)] | 13:54 | ||
scale-a and offset-of are constants in this case :-) | |||
jnthn | Something like that lowered level sounds like what you'd want as the "JIT graph" or so... | 14:00 | |
brrt | yes | 14:04 | |
the main reason, i think, to have the tile structures too, is that a tile is something that makes a single 'atomic' chunk | 14:05 | ||
ultimately, it's a buffering issue | 14:06 | ||
there are multiple ways to tile a graph, and you want to select the best one (fsvo best) | |||
you do that by reducing the graph from lower to higher level nodes | 14:07 | ||
given that you can 'always' take really low-level tiles, you want to 'override' them with higher-level nodes as is possible | |||
e.g. | |||
i could implement b = a[i] as: mul i, scale-of(a); add a, i; mov b, [a]; | 14:08 | ||
but the one-opcode version is significantly more efficient | |||
the tree reduction algorithm should then replace the lower-level operations with the single higher-level instruction | 14:10 | ||
that is only possible if we haven't irreversibly committed the lower-level instructions to the stream just yet | |||
given as we use dynasm (rather than manipulating the instruction stream itself), we need a stand-in object | 14:11 | ||
does that make sense? | |||
if we *could* buffer-and-select the instruction stream, we wouldn't need to represent the tiles seperately | |||
another thing i kind-of want to do is register allocation | 14:12 | ||
but we don't need tiles for that, we can just assign the registers in the IR for that | |||
anyway, i'll try to sketch something out :-) then we can evaluate that | 14:21 | ||
brrt afk | |||
14:21
brrt left
|
|||
timotimo | looking forward to that :) | 14:21 | |
14:48
zakharyas1 joined
15:15
TEttinger joined
|
|||
nwc10 | FROGGS: when I origin/libffi | 15:18 | |
FROGGS: when I try building origin/libffi on both x86_64 Linux and (old) OS X, it's failing | 15:19 | ||
src/core/nativecall_dyncall.c:464:47: error: āMVM_NATIVECALL_TYPE_CHARā undeclared (first use in this function) | |||
FROGGS | ups | ||
yes, I need to fix that | 15:20 | ||
nwc10 | :-) | ||
how come it worked for you? | |||
FROGGS | thanks for reporting :o) | ||
nwc10: I forgot to test the case where one does not pass --has-libffi :o) | |||
nwc10 | aha! | 15:21 | |
now, the sort of sideways question from this is, will we able to configure Travis to build both with libffi and with dyncall, and check that both still work | 15:22 | ||
or at least, fail identically | |||
FROGGS | hmmm | ||
libffi should be installable via apt on the travis boxes... | 15:23 | ||
nwc10 | #include <ffi.h> | 15:29 | |
on this OS X, it's in /usr/include/ffi | |||
oh, and it's too old to have _ffi_closure_alloc and _ffi_prep_closure_loc, it seems | 15:31 | ||
FROGGS | user@debian-mips:~$ git clone github.com/MoarVM/MoarVM.git | 15:37 | |
Cloning into 'MoarVM'... | |||
nwc10: okay, so we keep using dyncall there... I'm pretty fine with that | |||
I dont want to replace dyncall on platforms where it works | 15:38 | ||
japhb | FROGGS: Is there a reason to keep both rather than converting to one that works everywhere? Or is the platform support of dyncall not a subset of libffi? (Or is there some other reason we want to keep dyncall around?) | 15:41 | |
FROGGS | japhb: they overlap | 15:42 | |
but libffi does not work on Windows IIRC | |||
japhb: and it is always good to have more than one choice | |||
like with backends | |||
dalek | arVM/libffi: 30b3bbc | FROGGS++ | src/core/nativecall_dyncall.c: unbreak dyncall build, nwc10++ |
15:43 | |
JimmyZ_ | more than a way to do it | ||
FROGGS | aye | ||
japhb | Oh, fair enough. Just wanted to know if it was a "keeping options open" or "libffi is only a fallback if you can't use dyncall, because dyncall has more features" or "neither one has a complete set of platform support" or what have you. Sounds like #1 and #3 right now. :-) | 15:50 | |
FROGGS | correct :o) | 15:51 | |
JimmyZ_ | what ffi java use on windows | 15:53 | |
FROGGS | I dont know | ||
TEttinger | JimmyZ_: I'm pretty sure OpenJDK on windows needs a microsoft toolchain, they may use non-portable APIs on windows | 15:55 | |
I know it needs a weird version of DirectX for Swing UI | |||
FROGGS | ohh, libffi states it works for Windows/Cygwin and Windows/MingW | 15:56 | |
JimmyZ_ | no MSVC.. | 15:57 | |
FROGGS | JimmyZ: though, there is a msvcc.sh in the tarball that cares about MSVC written by Timothy Wall [email@hidden.address] | 16:00 | |
TEttinger | ironic that it's a .sh | ||
FROGGS | his names also show up in the jna or jni docs | ||
TEttinger: probably used in a cygwin shell that does some magic | |||
ahh, it translates gcc flags to msvc flags | 16:01 | ||
JimmyZ_ | andthen supports msvc?š | ||
FROGGS | somehow... | 16:02 | |
It's also possible to build libffi on Windows platforms with | 16:03 | ||
Microsoft's Visual C++ compiler. In this case, use the msvcc.sh | |||
wrapper script during configuration like so: | |||
path/to/configure CC=path/to/msvcc.sh CXX=path/to/msvcc.sh LD=link CPP="cl -nologo -EP" | |||
nwc10 | FROGGS: yes, works on my machine, and "my" machine | 16:10 | |
FROGGS | :D | 16:12 | |
dalek | arVM: d8c65d1 | FROGGS++ | src/6model/reprs/CPointer.c: silence cast warning on 32 bit systems |
16:24 | |
FROGGS | nebuchadnezzar: the last commit solves the first warning shown here: qa.debian.org/bls/packages/m/moarvm.html | 16:25 | |
nebuchadnezzar: but it is not clear to me what the second means | 16:26 | ||
nebuchadnezzar: what LDFLAGS need to be respected? | |||
nebuchadnezzar | FROGGS: I think it's about the hardening flag, and it happens only on one architecture | 16:32 | |
I'll see with other perl6 maintainers | |||
FROGGS: for now I was looking at the reproductibility guide, it looks like there is something that change each time the package is build | 16:33 | ||
FROGGS: for the hardening flag I'll run blhc directly on the log to have more informations | 16:45 | ||
paste.debian.net/260299/ | 16:49 | ||
looks like building minilua.c is missing some LDFLAGS | 16:51 | ||
So, the question is why minilua.c is build on kfreebsd-amd64 and not on the other architectures? | 16:53 | ||
jnthn | Because our JIT only works on 64-bit, and we only need that for the JIT | 17:37 | |
I'd expect it to be built on 64-bit with Linux kernel... Also it's only a build dependency; we don't ship the minilua | 17:38 | ||
FROGGS | nebuchadnezzar: one thing that changes every time is src/gen/config.c | 17:51 | |
it contains an unordered hash | |||
17:51
colomon joined
|
|||
FROGGS | and we record the build time I think | 17:51 | |
hmmm, there is no build date time, so that's good | 17:54 | ||
I wonder if there is something else, besides the config.c | 17:55 | ||
dalek | arVM: 69050de | FROGGS++ | Configure.pl: sort config.c keys to have predictable output |
18:01 | |
FROGGS | nebuchadnezzar: ^^ | ||
if I would now get the same sha1 for a release tarball, we should be fine, right? | 18:02 | ||
nebuchadnezzar | FROGGS: I'll try to build a package two times to see if it works | 18:06 | |
jnthn: ok, so as the amd64 is already uploaded by dod we do not have the build log, I'll check one locally | 18:07 | ||
FROGGS | hmmm, it still changes for me | ||
nebuchadnezzar: I think I'll know what is going on in a minute | 18:15 | ||
files that change: Makefile, src/gen/config.c, libmoar.so | 18:16 | ||
I think I got it | 18:22 | ||
japhb | FROGGS++ nebuchadnezzar++ # Thanks for the excellent packaging work, guys! | 18:28 | |
Debian++ # High standards that make packaged products *better* | 18:29 | ||
dalek | arVM: 49f0c1c | FROGGS++ | Configure.pl: sort thirdparty libs/objects etc This is the second patch aiming a reproducable build. |
18:30 | |
FROGGS | nebuchadnezzar: I think I'm done | ||
japhb | The goal on this one is to build twice and get a bit-exact identical tarball? | 18:32 | |
Is there a plan for attacking the same problem on NQP and Rakudo? (Or do we no longer use timestamps for block IDs and such?) | 18:33 | ||
nwc10 | japhb: technically I think that a tarball can't be bit-exact, because it countains file timestamps. But I think that it is byte-for-byte on the file names and contents | ||
FROGGS | japhb: yes, that's the goal, and no, we can't easily achieve that for nqp/rakudo yet | 18:34 | |
japhb | nwc10: Hmmm. In theory we could work around that, but understood | 18:35 | |
FROGGS: gotcha | |||
19:17
vendethiel- joined
19:37
colomon joined
19:40
zakharyas joined
|
|||
FROGGS | user@debian-mips:~/MoarVM$ LD_LIBRARY_PATH=. ./moar --version | 20:02 | |
This is MoarVM version 2015.06-26-g30b3bbc | |||
user@debian-mips:~/MoarVM$ uname -a | |||
Linux debian-mips 3.2.0-4-4kc-malta #1 Debian 3.2.51-1 mips GNU/Linux | |||
with --has-libffi moarvm will just build on mips without any further tweak | 20:03 | ||
nebuchadnezzar | FROGGS: thanks | 20:18 | |
jnthn | FROGGS++ | 20:32 | |
The compiler toolchain uses timestamps in various places. | 20:33 | ||
20:34
colomon joined
|
|||
jnthn | I can think of two of hand, of which one can possibly trivially go away | 20:39 | |
TEttinger | FROGGS++, nice work fixing support for a super-obscure arch! | 21:13 | |
21:16
FROGGS_ joined
21:36
colomon joined
|
|||
nebuchadnezzar | TEttinger: sure FROGGS++, he does a lot to help the Debian packaging | 22:20 | |
japhb | nebuchadnezzar: s/the Debian packaging// and it's still true. :-) | 22:57 | |
23:27
FROGGS joined
23:30
vendethiel joined
23:52
LLamaRider joined
|