00:08 nyef: ... Or it's that it's far too easy to not realize that you've not plugged the DPort cable far enough into the back of the monitor. /-:
00:09 imirkin: gotta get it in there good
00:10 nyef: Gotta rotate the monitor 45 degrees off center in order to have the angle to be able to *see* that it's not in there good enough.
00:10 imirkin: really too bad that 3d monitors are no longer going to be a thing. cool idea =/
00:10 imirkin: (still a bit off in terms of the actual execution though...)
00:58 Horizon_Brave: Good evening folks
01:38 noobineer: I have a monitor with its EDID not getting detected correctly, it works but not at the highest res, only up to 1024x768, i was reading this guide (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/Documentation/EDID/HOWTO.txt) about creating a EDID for my monitor, is that worth doing or should I try making an xorg.conf instead? I'm using ubuntu-mate 16.04 and nouveau
01:40 gnarface: noobineer: personally i've had more luck with the custom xorg.conf approach
01:41 gnarface: noobineer: i've gone down the path of manually loading the extracted binary EDID too, only to find out that for whatever reason, it didn't help
01:42 noobineer: thanks, another question then
01:42 noobineer: ./usr/share/X11/xorg.conf.d/ is this the right place to store it?
01:42 noobineer: I'm not sure how that system has changed with the automatic detection stuff nowadays
01:43 gnarface: it varies depending on distro
01:44 gnarface: if you look at the top of your Xorg.0.log (the location of which which sadly also now varies depending on distro) you can see where it looks for it. /etc/X11/xorg.conf is probably the FIRST place it looks though in most cases. any directory named "xorg.conf.d" is for secondarily loading partial snippets of xorg.conf
01:44 noobineer: well, I guess one thing I'm not sure about, is can I write just a partial config and only define that sections I want to change like display, device, screen? or should it be the whole config in one?
01:45 gnarface: my *personal* experience has been better just using a whole xorg.conf, but it has helped a lot that i'd been using it since well before the move to auto-detect everything
01:45 noobineer: ok that's kinda what I thought
01:45 gnarface: in theory though, yes you should be able to just write a partial to override just parts
01:45 gnarface: most distros actually ship by default with several such partials these days, and NO main xorg.conf
01:46 orbea: that is what I do, just define the things I want to change and no main xorg.conf
01:46 gnarface: (the partials mostly to do with various input devices/drivers)
01:46 noobineer: so do you name the partials anything in particular? I was seeing it called 20-nouveau.conf in an example somewhere
01:47 gnarface: i think they have to end with .conf, otherwise the numbering is just to control what order they load
01:48 noobineer: alright, thanks for the help explaining
01:48 gnarface: no problem
01:49 Horizon_Brave: +1 for remaining quiet and learning something from somone else's questions xD
03:55 nyef: Bleh. intel-gpu-tools opens the *first* card available, and there's no override.
03:56 nyef: God forbid someone should have two or more cards in their system, and even worse would be to have them all use the same driver. /-:
04:45 imirkin: nyef: not a common use-case with intel gpu's :)
04:55 nyef: No, I imagine not, what with them having that horrid piece of junk on each GPU die.
05:27 nyef: (In retrospect, I probably should have put an emoticon on that last line... except that I'm really not a fan of x86 type CPUs.)
07:00 karolherbst: imirkin: if you wanna check out hitman: use my "hitman" branch and start the game like this: MESA_VENDOR_OVERRIDE="ATI Technologies Inc." gdb --args ./HitmanPro -ao START_BENCHMARK true -ao BENCHMARK_SCENE_INDEX 1 -ao AUTO_QUIT_ENGINE 120 ConsoleCmd UI_ShowProfileData 1 ConsoleCmd EnableFPSLimiter 0 -ao FullScreen 0 ConsoleCmd settings_vsync 0 ConsoleCmd settings_SetHDR 0 -ao RESOLUTION 1280x720
07:00 karolherbst: that's what I used for my testing, gdb is important, otherwise the game catches the crashes and doesn't print any traces
07:00 karolherbst: won't be able to do anything the next few days I think
07:01 karolherbst: HitmanPro is within the bin folder
07:01 karolherbst: and you might want to delete libcurl from lib
07:49 pq: imirkin, nyef, as igt is no longer intel-specific, such issues would be well too report.
17:48 nyef: ... X won't start unless there's a display connected to the HDMI on the second video card, but it then won't *use* that second video card for output? What?
17:50 nyef: Oh, and this is on 4.10. On 4.9, it's fine.
17:50 nyef: (Well, 4.9.6.)
17:51 pmoreau: Maybe xf86-video-nouveau 1.14 helps?
17:52 imirkin_: there is also some kind of issue with multi-screen on 4.10
17:59 nyef: Yeah, I'm sortof trying to reproduce on gf119 some HPD and related total system lockup things that I've found on gt215.
17:59 nyef: I might just move on and come back to it mid-to-late 4.11-rc or even once 4.11 is released.
18:00 imirkin_: gotta pick your battles
18:00 nyef: Exactly.
18:01 Echelon9-away: Can I find a python + envytools dev to review this trivial clean ups patchset? https://github.com/envytools/envytools/pull/87
18:06 Echelon9-away: thanks imirkin
18:06 Echelon9-away: anything you want me to review for a +1?
18:06 imirkin_: hm?
18:07 Echelon9-away: my queue: skeggsb has been too busy to look at the HBM mem type, so I plan on just sending a nouveau patch for the new GDDR5X mem type in a day or so
19:01 imirkin_: Echelon9-away: don't wait on skeggsb for anything in the next couple of weeks - he's out on vacation i think
19:05 Echelon9-away: ok, that's good to know. I'll press ahead
19:42 karolherbst: how can I dump shaders again now with the new style? :/
19:43 karolherbst: ahh MESA_SHADER_CAPTURE_PATH
19:47 nyef: ... Not finding a third set of infoframe registers on gf119. Doesn't mean that there isn't a set, just that I'm not finding one.
19:47 imirkin_: look harder!
19:49 imirkin_: nyef: also check if perhaps the gk104 stuff is really where the gf119 infoframe stuff is :)
19:50 imirkin_: hm probably not
19:50 imirkin_: i suspect that gf119 is a lot more similar to gt215 than gk104
19:50 imirkin_: dunno.
19:51 karolherbst: imirkin_: I've pushed the hitman pro shaders
19:51 karolherbst: 1409 unique ones :(
19:51 imirkin_: any that we do a horrible job compiling?
19:52 nyef: For now, I'm going to do what I did for gk104: Swipe the audio infoframe registers, since they're not actually used to set the audio infoframe.
19:53 karolherbst: currently checking
19:53 karolherbst: it takes time to compile those
19:53 karolherbst: total local used in shared programs : 6845 -> 6845 (0.00%)
19:53 karolherbst: I guess this is kind of bad
19:54 nyef: I'm also considering working out the overall register map for PDISPLAY as best I can understand it, since I just don't have a good mental model for it at this point.
19:59 imirkin_: feel free to update the pdisplay stuff in rnndb
19:59 imirkin_: you're aware of the 'lookup' tool i presume?
20:03 nyef: Vaguely aware.
20:03 karolherbst: mhh
20:04 karolherbst: by running some passes again: total local used in shared programs : 6845 -> 6601 (-3.56%)
20:04 imirkin_: nyef: try it. lookup -a d9 61c520
20:04 imirkin_: er oops
20:04 imirkin_: lookup -a d9 616798
20:04 nyef: The issue isn't doing the lookup, it's "what is the structure of this register space over the various DISP versions?"
20:04 imirkin_: yeah, i get it...
20:05 imirkin_: stuff is generally named so that the same names across disp versions means roughly the same things
20:07 karolherbst: imirkin_: how long would it take to implement a statistic, which tells us how often a certain shader combination is executed?
20:12 imirkin_: qapitrace has some thing which measures time spent in shaders
20:13 karolherbst: okay, lots of spilling in shaders
20:13 karolherbst: :(
20:13 imirkin_: but yeah, it'd be nice to say we spend X time in this shader, etc
20:13 karolherbst: yeah
20:13 imirkin_: maybe we can do somethign clever with counters
20:13 karolherbst: but time spent in shaders is also nice
20:14 imirkin_: unfortunately diff shaders can run in parallel...
20:14 karolherbst: yeah
20:14 karolherbst: but we have shaders like this: type: 5, local: 404, gpr: 63, inst: 3802, bytes: 34768
20:14 karolherbst: this is bad in itself
20:14 imirkin_: yeah, you need to get more gpr's :)
20:14 karolherbst: :D
20:15 imirkin_: that's a compute shader too. ouch.
20:15 karolherbst: yes
20:15 karolherbst: takes 5 seconds to compile
20:15 imirkin_: hardly seems worth it :)
20:16 karolherbst: hum, am I doing something wrong? NV50_PROG_DBEUG=3
20:16 karolherbst: ups
20:16 imirkin_: i think one usually spells it "DEBUG"
20:16 karolherbst: yeah, that helps
20:17 karolherbst: ugh
20:17 karolherbst: that shader
20:17 karolherbst: https://gist.github.com/karolherbst/fbfa391895cc8de8bc79541a6846e868
20:17 karolherbst: BB:9
20:18 karolherbst: ....
20:18 imirkin_: lol
20:18 imirkin_: this is the most useless code ever
20:18 imirkin_: set u32 $r13 lt f32 $r7 $r12
20:19 imirkin_: slct u32 $r13 eq $r63 0xffffffff $r13
20:19 imirkin_: which ... == $r13. or the inverse of r13.
20:19 imirkin_: (i never remember the arg order)
20:19 imirkin_: and then these things are or'd together
20:19 imirkin_: UGH
20:19 imirkin_: USELESS
20:20 karolherbst: I guess with a nice opt pass, we can eliminate a lot here
20:20 imirkin_: a lot of ops, although it won't translate into fewer registers
20:21 imirkin_: (probably)
20:21 karolherbst: I don't mind this
20:21 karolherbst: less instructions is already good
20:22 karolherbst: okay
20:23 karolherbst: so slct on a bool eq 0x0 0xffffffff is the bool itself
20:23 imirkin_: or !bool. would have to think.
20:23 imirkin_: (aka look up wtf slct does)
20:23 karolherbst: if the condititon is true src1 is returned otherwise src2
20:24 imirkin_: what are you looking at?
20:24 karolherbst: I remember it this way, I will verify
20:26 karolherbst: ohhh wait
20:26 karolherbst: this comment: "SLCT(a, b, const) -> cc(const) ? a : b"
20:26 karolherbst: okay
20:26 karolherbst: src2 is the input
20:26 karolherbst: uhhh
20:26 karolherbst: wait
20:27 imirkin_: yeah that sounds right.
20:27 karolherbst: and this is checked against... 0
20:27 karolherbst: I think
20:27 imirkin_: so... eq 0 -1 a => !a
20:28 karolherbst: no... I think that src2 is checked against 0 with the CC on true: src0 on false: src1
20:28 karolherbst: or was that set?
20:29 imirkin_: that is correct.
20:29 imirkin_: however...
20:29 karolherbst: slct->getSrc(2)->asImm()->compare(slct->asCmp()->setCond, 0.0f)
20:29 karolherbst: is inside the code
20:29 imirkin_: oh right
20:29 imirkin_: a == 0 ? 0 : -1
20:29 karolherbst: yeah
20:29 imirkin_: ok yeah. so that is just "a"
20:29 karolherbst: sounds about right
20:30 karolherbst: okay
20:30 karolherbst: slct(0, -1, bool) -> bool
20:31 karolherbst: what instructions can produce a bool? set and what else?
20:31 imirkin_: just set i think
20:31 karolherbst: do I have to check against u32 as well?
20:31 imirkin_: there's a function that's like
20:31 imirkin_: findOriginalCompareTo0
20:31 imirkin_: or something.
20:32 imirkin_: the type should match the set
20:32 karolherbst: okay
20:32 imirkin_: set can produce either a u32 bool 0/-1 or a f32 "bool float" 0/1.0
20:32 karolherbst: slct(true, false, set) -> set (as long as slct.dType == set.dType)
20:32 imirkin_: well, for slct eq
20:32 imirkin_: there's slct ne
20:32 imirkin_: and slct lt
20:32 karolherbst: ohh right
20:33 karolherbst: slct_eq(true, false, set) -> set
20:33 imirkin_: yeah, but it's easy enough to handle the slct_ne case too
20:33 karolherbst: !set`?
20:33 imirkin_: right.
20:33 karolherbst: mhh opkay, I check if it's worth it an concentrate on slct_eq(true, false, set) -> set first
20:34 karolherbst: there is also slct_eq(false, true, set) -> !set
20:34 karolherbst: and so on
20:34 karolherbst: inside which opt should I put it? algebraicopt?
20:35 karolherbst: or rather ConstantFolding?
20:35 karolherbst: mhh
20:35 karolherbst: I would tend to the first one
20:37 imirkin_: i'd have to check the code
20:37 imirkin_: we already do some amount of this
20:37 imirkin_: do it in the same place where we do this ;)
20:37 imirkin_: findSomethingWithZero
20:37 imirkin_: whereever that gets called, add your logic in there
20:37 imirkin_: it's dealing with a slightly different case
20:37 karolherbst: findSomethingWithZero not found
20:37 imirkin_: but i think it's similar enough
20:37 imirkin_: s/Something/the-thing-in-the-function
20:38 karolherbst: findOriginForTestWithZero?
20:38 imirkin_: findOriginForTestWithZero
20:38 imirkin_: it's under ConstantFolding it seems
20:38 karolherbst: yeah
20:38 imirkin_: so i'd add stuff there.
20:38 imirkin_: it likely won't fit exactly into the current framework
20:38 karolherbst: inside opnd3?
20:38 imirkin_: yea
20:39 imirkin_: er well
20:39 imirkin_: i think expr() will get called for it
20:39 imirkin_: since src0 and src1 will be immediates
20:39 karolherbst: okay
20:39 karolherbst: makes sense
20:40 karolherbst: there is a if ( a==b) res.data.u32 = a->data.u32; .. oh well
20:40 karolherbst: should be easy to add it there
20:42 karolherbst: that expr function does odd things at the end
20:42 imirkin_: yeah, you don't want any of that
20:42 imirkin_: so you'll want to handle stuff + return
20:42 karolherbst: mhh makes sense :D
20:42 imirkin_: it's meant for "real" constant folding
20:42 imirkin_: e.g. add 2 + 3 gets replaced with a mov 5
20:43 karolherbst: the currend slct switch does "slct(a, a, b) -> a" right?
20:43 imirkin_: not in constant folding though...
20:44 imirkin_: i'm guessing in algebraicopt?
20:44 karolherbst: ConstantFolding::expr
20:44 karolherbst: https://github.com/karolherbst/mesa/blob/hitman/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp#L637-L641
20:44 imirkin_: oh right. i see.
20:44 karolherbst: okay, just wanted to make sure, cause I will add a comment
20:44 imirkin_: yes. if a is immediate and a == b
20:44 imirkin_: which i guess can happen due to various stupidity
20:46 karolherbst: is imm0 == src0 and imm1==src1 in expre?
20:46 karolherbst: *expr
20:46 karolherbst: yeah, seems that way
20:57 karolherbst: nice... there is no eq at that point :(
20:59 karolherbst: imirkin_: can I simply do imm0.reg.data.u32 == 0 and imm1.reg.data.u32 == -1 or is there something super smart I could use?
20:59 imirkin_: that's it
20:59 imirkin_: so remember that this is all before LoadPropagation
21:00 imirkin_: so the values are all GPR's
21:00 imirkin_: and then that getImmediate() figures out if the GPR has an immediate value
21:00 karolherbst: yeah sure, I have the immediates alredy, that's not my problem
21:00 karolherbst: I was more like finding a way _not_ to check for the real type
21:01 karolherbst: sadly ImmediateValue::compare only works for f32
21:03 imirkin_: .isInteger
21:04 karolherbst: yeah well, then I still have that -1/1 issue for u32 vs f32 floats, haven't I?
21:04 imirkin_: can't win 'em all
21:04 imirkin_: i wouldn't worry about set's that return float
21:04 imirkin_: they're fairly rare
21:04 karolherbst: maybe I should just write a helper function for that
21:04 karolherbst: ohh okay, then u32 it is for now
21:09 karolherbst: imirkin_: okay, they come in as slct_ne(-1, 0, ibool)
21:10 karolherbst: imirkin_: do I have to replace the slct with a cvt or is mov fine?
21:11 imirkin_: if you neg it, yeah. otherwise mov is fine.
21:11 karolherbst: slct_ne(-1, 0, ibool) -> ibool, right?
21:11 imirkin_: sure.
21:12 karolherbst: uhhh, i is a CmpInstruction, does that matter?
21:12 imirkin_: yes. make a new instruction, sink this one.
21:13 karolherbst: I just have to create a new one after i, and bind the def, delete_Instruction(i); right?
21:14 imirkin_: yea
21:15 karolherbst: bld.mkOp1(OP_MOV, TYPE_U32, i->getDef(0), i->getSrc(2)); ?
21:18 karolherbst: wuhu
21:18 karolherbst: 100 instructions killed here
21:27 karolherbst: hum... https://gist.github.com/karolherbst/33d2eed71ac76812d7fd758828414423
21:27 karolherbst: why 0.53% more locals :(
21:32 imirkin_: lol
21:32 imirkin_: can't win 'em all
21:32 karolherbst: that result looks pretty much like ... useless
21:32 imirkin_: i dunno. -0.5% instructions sounds nice.
21:32 karolherbst: yeah, but 0.5% locals is bad
21:33 karolherbst: but I guess we will be able to fix that
21:33 imirkin_: yeah, it's a little sad.
21:33 karolherbst: can't I use OP_NEG in the negated case directly?
21:34 karolherbst: uhhh wait
21:34 karolherbst: how do I negate a bool? :/
21:34 imirkin_: OP_NOT
21:34 karolherbst: nice
21:37 karolherbst: if I do it for all 4 combinations the result gets worse....
21:43 karolherbst: over our shader-db: total instructions in shared programs : 3902748 -> 3897016 (-0.15%)
21:43 karolherbst: and just 0.04% more locals
21:43 karolherbst: the locals are all from hitman though
21:44 karolherbst: hurt also a few F1 gprs
21:44 karolherbst: lol
21:45 karolherbst: it only helped f1, tomb_raider and hitman... all feral games
21:46 karolherbst: https://github.com/karolherbst/mesa/commit/6bb3ba3538e71f7b49d8f1a1bf9926a3dcbf2fe9
21:47 imirkin_: if (cmp->dType != TYPE_U32 && slct->dType != TYPE_U32)
21:47 imirkin_: 
21:47 imirkin_: probably want ||
21:48 imirkin_: CmpInstruction *cmp = findOriginForTestWithZero(i->getSrc(2));
21:48 imirkin_: that's not quite right
21:48 imirkin_: we don't care about it being a test with zero
21:48 imirkin_: i'd just do CmpInstruction *cmp = i->getSrc()->getInsn()->asCmp();
21:48 imirkin_: (that might crash, so guard it on getInsn() != null)
21:49 imirkin_: although.... at that point, it really should be != null
21:49 karolherbst: I don't care if that's a cmp though
21:49 karolherbst: cause I don't access it
21:50 karolherbst: I set check op and that's whould be good enough
21:50 karolherbst: *just
21:50 imirkin_: yea
21:50 imirkin_: that's fine
21:50 karolherbst: mhh, but it could be a mov or so
21:50 karolherbst: or not?
21:51 imirkin_: yeah, it could =/
21:51 imirkin_: that's why findOriginForTestWithZero
21:51 imirkin_: has that loop
21:51 imirkin_: but it probably won't be :)
21:52 karolherbst: I could work that OP_ out a bit, but I doubt it's really worth it
21:52 imirkin_:agrees
21:53 karolherbst: we should add compiled shaders into the compare script
21:53 karolherbst: because some are failing
21:53 imirkin_: ?
21:53 karolherbst: or handle that case better
21:54 karolherbst: "nvc0_program_translate:609 - shader translation failed: -4"
21:54 imirkin_: oh
21:54 imirkin_: right.
21:54 imirkin_: go for it :)
21:54 karolherbst: :D
21:54 karolherbst: I just got a shader-db/run crash again...
22:11 karolherbst: mhh nice, with the fixes, 4 instruction less optimized
22:13 karolherbst: imirkin: wasn't there a way to check for U32 and S32 at the same time, or doesn't it matter here?
22:16 imirkin_: not sure
22:20 karolherbst: lol " On Linux, VDPAU can now be used for displaying frames. It's used to achieve smoother framerates because it allows precise tracking and scheduling of frame times. Added ogl_bEnableVDPAU cvar (disabled by default) to control whether VDPAU is used - requires gfxRestart()."
22:20 karolherbst: this is part of the talos principle changelog :D
22:20 karolherbst: it's from 2015 though
22:21 imirkin_: crazy.
22:22 karolherbst: well, if it works :D
22:28 karolherbst: newer version of the shader: https://gist.githubusercontent.com/karolherbst/fbfa391895cc8de8bc79541a6846e868/raw/fb81438f25a63ced254421386f6887d03f78d924/gistfile1.txt
22:28 imirkin_: wtf
22:28 imirkin_: 127: set u32 $r12 neu f32 $r3 1.000000 (8)
22:28 imirkin_: 131: and u32 $r12 $r12 0x3f800000 (8)
22:29 imirkin_: i have an opt that's supposed to pick that up =/
22:29 karolherbst: mhh
22:29 imirkin_: i guess it's not getting triggered coz of something dumb
22:29 karolherbst: maybe that is genreated too late?
22:29 imirkin_: anyways, that's supposed to become set f32 $r12 ...
22:30 imirkin_: also i'm surprised that all those or's/and's survive... it should be done with set_and
22:30 imirkin_: and set_or
22:30 imirkin_: gr
22:30 karolherbst: maybe cause it is all u32?
22:30 imirkin_: might not have an opt for that...
22:32 karolherbst: do you want to look into it or shall I?
22:32 imirkin_: i don't really have time for much right now
22:32 karolherbst: k
22:33 imirkin_: also i'd kinda recommend slct where the cond is the result of a set to get converted into SELP and make the set produce a predicate.
22:33 imirkin_: since that should reduce register pressure a tad
22:33 karolherbst: I have such an opt
22:33 imirkin_: 3381: set u32 $r2 ne $r2 $r63 (8)
22:33 imirkin_: 3382: slct u32 $r1 ne $r15 $r1 $r2 (8)
22:34 imirkin_: sequences like this are foolish
22:34 imirkin_: the set is unnecessary.
22:34 karolherbst: let me search for it
22:34 imirkin_: since it's comparing some value against 0
22:34 imirkin_: the slct can take care of that.
22:35 imirkin_: we ought to have a slct(set) algebraic opt for that
22:35 karolherbst: https://github.com/karolherbst/mesa/commit/404e434b4cfd0b224aae5d67e862c986b7a679a8
22:36 karolherbst: hum
22:36 karolherbst: it should do more than what's inside the comment
22:36 imirkin_: (we already have a very basic SLCT one, but it can do more.)
22:42 karolherbst: ohh, now I know what you mean
22:43 karolherbst: so instead of using a gpr every slct(set) should uise a predicate instead
22:43 karolherbst: and slct needs to be converted to selp
22:43 karolherbst: or can slct read a predicate?
22:47 imirkin_: i think you're missing the point
22:47 imirkin_: what is the set doing?
22:48 karolherbst: return a boolean value
22:48 imirkin_: based on whether ...
22:49 karolherbst: what do you mean?
22:49 imirkin_: 3381: set u32 $r2 ne $r2 $r63 (8)
22:49 karolherbst: that looks silly....
22:49 imirkin_: so it returns a boolean value based on ... what
22:50 karolherbst: comparison against 0?
22:50 imirkin_: uh huh
22:50 imirkin_: and then you take the result of that comparison
22:50 imirkin_: and feed it as the cc arg of a slct
22:50 imirkin_: which compares it against ...
22:50 karolherbst: 0
22:50 imirkin_: so the set is a little unnecessary
22:50 karolherbst: I see
22:51 karolherbst: even the CC is the same
22:51 karolherbst: uh...
22:51 imirkin_: well, as long as slct can support the same setCond, it should be the same
22:51 imirkin_: might need some careful flipping sometimes
22:52 karolherbst: true is 0 for u32? or do I mix somethign up again
22:52 imirkin_: 0 is always false
22:52 karolherbst: okay
22:52 imirkin_: -1 for u32 is true, 1.0 for f32
22:53 karolherbst: I am too tired... I don't even know why what I did for the other opt is right anymore...
22:53 imirkin_: as long as there are fewer instructions it must be right =]
22:53 karolherbst: has to be
22:54 karolherbst: it also looks the same (tm)
22:54 karolherbst: allthough I guess I should see a differenc really fast
22:54 karolherbst: or maybe not
22:58 karolherbst: that "3388: slct u32 $r9 ne $r63 $r1 $r0"....
22:59 karolherbst: oh man
22:59 imirkin_: that's reasonable.
22:59 karolherbst: well
22:59 karolherbst: $r1 is the result of a set
22:59 karolherbst: same as the $r0
22:59 imirkin_: yeah, but there's no way around that
23:00 imirkin_: you might be able to or/and it somehow
23:00 karolherbst: I wouldn't be too sure about this. this entire block looks a bit... oddisch
23:00 karolherbst: *oddish
23:00 imirkin_: heh. is that "odd in germany"? :p
23:00 karolherbst: ....
23:01 karolherbst: look oddish up
23:01 imirkin_: a lot of german words have "sch" in them
23:01 karolherbst: ohhh
23:01 imirkin_: while almost no english words end in that
23:01 karolherbst: that you mean
23:01 karolherbst: no
23:01 karolherbst: "komisch" is german for odd
23:01 imirkin_:was joking
23:03 karolherbst: what's s[] =
23:03 karolherbst: ?
23:03 imirkin_: shared memory
23:03 karolherbst: k
23:03 imirkin_: shared between invocations
23:03 karolherbst: I see
23:05 karolherbst: huh
23:07 karolherbst: 3366 and 3367
23:08 imirkin_: ...
23:08 imirkin_: a&~b vs b&~a
23:08 karolherbst: better, those are results of sets
23:11 karolherbst: no idea, that code looks stupid
23:19 imirkin_: 3373: mov u32 $r12 0x00000001 (8)
23:19 imirkin_: 3374: slct u32 $r3 eq $r12 0x00000002 $r1 (8)
23:19 imirkin_: a very astute optimizer might notice that $r1 came from a set u32
23:20 imirkin_: and woudl convert this whole thing into an add
23:20 imirkin_: [because the two options are off-by-one]