programmerjake | and no it isn't quite RB|0, it does something completely different than just supply zero as an input | 00:00 |
---|---|---|
programmerjake | I'll add it as a TODO | 00:12 |
ghostmansd[m] | markos, predicates should work, just try it | 00:35 |
ghostmansd[m] | You'll likely need -mregnames switch for stuff like m=r3 or dm=r30 | 00:36 |
*** lxo <lxo!~lxo@linux-libre.fsfla.org> has quit IRC | 00:58 | |
*** programmerjake <programmerjake!~programme@2001:470:69fc:105::172f> has quit IRC | 02:42 | |
*** programmerjake <programmerjake!~programme@2001:470:69fc:105::172f> has joined #libre-soc | 03:00 | |
markos | ghostmansd, I'm just getting Error: unrecognized mode: 'pred1' on this line: | 07:57 |
markos | ori pred1, pred1, 0b0001000100010001 | 07:57 |
markos | sv.add/m=pred1 *op, *ip, *ip+3 | 07:57 |
markos | where ip=10, op=30, pred1=6 | 08:05 |
lkcl | markos, use the predicate by regname explicitly | 09:22 |
lkcl | r3/r10/r31/eq/lt etc. | 09:22 |
lkcl | it's not macro-substitutable | 09:23 |
lkcl | if you want macro-substitution on predicate masks use "gcc -E" or sed | 09:23 |
lkcl | and you can't have sv.add/m=6 | 09:23 |
lkcl | this is the list of options: | 09:25 |
lkcl | https://git.libre-soc.org/?p=openpower-isa.git;a=blob;f=src/openpower/sv/trans/svp64.py;h=a285d1a317f43d8aad5d3abc703fb12094569102;hb=e8b9ea79376d1fe69ee747e026a366d03ad5d5e6#l443 | 09:25 |
*** octavius <octavius!~octavius@202.147.93.209.dyn.plus.net> has joined #libre-soc | 09:26 | |
*** jn <jn!~quassel@user/jn/x-3390946> has quit IRC | 09:27 | |
*** jn <jn!~quassel@2a02:908:1065:960:20d:b9ff:fe49:15fc> has joined #libre-soc | 09:28 | |
*** jn <jn!~quassel@user/jn/x-3390946> has joined #libre-soc | 09:28 | |
markos | same error | 09:32 |
markos | unrecognized mode: '6' | 09:33 |
markos | tried sm= also, same result | 09:38 |
*** octavius <octavius!~octavius@202.147.93.209.dyn.plus.net> has quit IRC | 09:57 | |
lkcl | markos: again, you *cannot* put *anything* other than the exact and precise list of qualifiers listed in svp64.py line 443 source code | 10:05 |
lkcl | m=r3 | 10:05 |
lkcl | m=~r3 | 10:05 |
lkcl | m=r10 | 10:05 |
lkcl | m=~r10 | 10:05 |
lkcl | m=1<<3 | 10:05 |
lkcl | m=r31 | 10:05 |
lkcl | m=~r31 | 10:05 |
lkcl | m=eq | 10:05 |
lkcl | m=ne | 10:05 |
lkcl | me=so | 10:06 |
lkcl | m=lt | 10:06 |
lkcl | it is not a register | 10:06 |
markos | so predicate *needs* to be on these registers? I can't just use any other register | 10:06 |
markos | ok | 10:06 |
markos | I see | 10:06 |
lkcl | it is a qualifier that happens to contain the word "r3", or the word "r10" | 10:06 |
*** ghostmansd <ghostmansd!~ghostmans@broadband-188-32-220-156.ip.moscow.rt.ru> has quit IRC | 10:06 | |
lkcl | there are only 3 bits for predicate-masks, a 4th says whether to use the GPR or CRfield | 10:07 |
markos | well, r3/r10/r31 are registers, it's a bit confusing | 10:07 |
lkcl | we can't up an entire 6 bits in a precious 24-bit prefix for one single predicate source | 10:07 |
lkcl | and another 6 bits for a second predicate | 10:07 |
lkcl | that's 50% of the 24-bits solely and exclusively dedicated to selecting predicate masks | 10:08 |
lkcl | even Power ISA v3.1's new MMA instructions only have 4-bit for selection of a predicate mask | 10:08 |
lkcl | RVV only has *one* bit "v0 or not to use v0" | 10:08 |
markos | nah, it's ok, now that I know it and why it is so, I will make a mental note not to use anything else | 10:09 |
lkcl | SVE/2 has only the one register (sometimes *zero* registers!) for predicates | 10:10 |
lkcl | the alternative would be to have some sort of "tagging" which means a setup and a teardown instruction | 10:10 |
lkcl | "set the predicate for the next instruction(s)" | 10:10 |
lkcl | which gets messy pretty quickly | 10:10 |
markos | ok, it compiles now, but does need -mregnames | 10:13 |
lkcl | sounds about right | 10:17 |
lkcl | programmerjake, if you can swap RA and RB in pcdec, the Power ISA and TestIssuer and PowerDecoder2 are all set up for RA|0 (but not RB|0) | 10:27 |
lkcl | you can then use "if rb_used | (_RA = 0)" | 10:27 |
lkcl | and in HDL that will be a flag in the pipeline's RecordSubset "ra_zero" | 10:28 |
lkcl | comb += self.do_copy("zero_a", dec_ai.immz_out) # RA==0 detected | 10:29 |
markos | lkcl, is it possible to iterate the indices in sv instructions? ie currently I'm doing: | 10:53 |
markos | sv.add/dm=r10 *t, *ip, *ip+3 # a1 = ip[0] + ip[3] | 10:53 |
markos | sv.add/dm=r10 *t+4, *ip+4, *ip+7 | 10:53 |
markos | damn the tabs | 10:53 |
markos | but if I can just do a loop and add +4 to the registers, that would be great | 10:54 |
markos | or... I could just use the predicate for that... | 10:55 |
markos | trying it now | 10:55 |
markos | f*cking hell, it works! | 10:56 |
markos | never mind, ignore the question | 10:56 |
*** jevinskie[m] <jevinskie[m]!~jevinskie@2001:470:69fc:105::bb3> has quit IRC | 11:00 | |
*** underpantsgnome[ <underpantsgnome[!~tinybronc@2001:470:69fc:105::2:1af6> has quit IRC | 11:00 | |
*** sadoon[m] <sadoon[m]!~sadoonunr@2001:470:69fc:105::1:f0fa> has quit IRC | 11:00 | |
*** programmerjake <programmerjake!~programme@2001:470:69fc:105::172f> has quit IRC | 11:00 | |
*** cesar <cesar!~cesar@2001:470:69fc:105::76c> has quit IRC | 11:00 | |
*** programmerjake <programmerjake!~programme@2001:470:69fc:105::172f> has joined #libre-soc | 11:06 | |
markos | is there a sv.srdi (shift right immediate)? trying to do: sv.srdi/dm=r10 *op+1, *op+1, 12 # op[1] >>= 12 | 11:11 |
*** cesar <cesar!~cesar@2001:470:69fc:105::76c> has joined #libre-soc | 11:11 | |
*** jevinskie[m] <jevinskie[m]!~jevinskie@2001:470:69fc:105::bb3> has joined #libre-soc | 11:11 | |
*** sadoon[m] <sadoon[m]!~sadoonunr@2001:470:69fc:105::1:f0fa> has joined #libre-soc | 11:11 | |
*** psydroid <psydroid!~psydroid@user/psydroid> has joined #libre-soc | 11:11 | |
*** underpantsgnome[ <underpantsgnome[!~tinybronc@2001:470:69fc:105::2:1af6> has joined #libre-soc | 11:11 | |
markos | actually, this code makes as complain: | 11:12 |
markos | # op[1] = (c1 * 2217 + d1 * 5352 + 14500) >> 12; | 11:12 |
markos | sv.maddld/dm=r10 *op+1, *op+2, const2, const4 # op[1] = c1 * 2217 + 14500 | 11:12 |
markos | sv.maddld/dm=r10 *op+1, *op+3, const3, *op+1 # op[1] += d1 * 5352 | 11:12 |
markos | sv.srdi/dm=r10 *op+1, *op+1, 12 # op[1] >>= 12 | 11:12 |
markos | vp8_dct4x4_real.s:44: Error: vector register cannot fit into EXTRA2 | 11:12 |
markos | vp8_dct4x4_real.s:45: Error: vector register cannot fit into EXTRA2 | 11:12 |
markos | vp8_dct4x4_real.s:46: Error: unrecognized opcode: `*op+1,*op+1,12' | 11:12 |
markos | any suggestions? | 11:14 |
lkcl | markos, see unit tests, grep for "iota" | 11:34 |
markos | also how would you do that with asm: + (d1 != 0) | 11:34 |
lkcl | use "sv.svstate" | 11:34 |
lkcl | 1 sec... | 11:35 |
markos | full expression: # op[4] = ((c1 * 2217 + d1 * 5352 + 12000) >> 16) + (d1 != 0) | 11:35 |
lkcl | ok you're limited in the range of regs for the 4-operand instructions (annoyingly) unless you use REMAP "offsets" | 11:35 |
markos | what's the largest offset I can use? | 11:36 |
lkcl | is this with "spacing" on the predicate mask? like.... r10=0b1000100010001000 | 11:36 |
lkcl | 8 | 11:36 |
lkcl | or i think 16 1 sec | 11:37 |
markos | yes, predicate mask is actually the reverse: 0b0001000100010001 | 11:37 |
markos | and VL=16 | 11:37 |
lkcl | ok then just shift it up | 11:38 |
markos | ah so that index is at 0 | 11:39 |
markos | yu[ | 11:39 |
markos | yup even | 11:39 |
* lkcl thinking | 11:39 | |
lkcl | yes | 11:39 |
lkcl | unfortunately madd* is only 1P otherwise you'd be able to use twin-predication | 11:39 |
lkcl | but you need to get all the "starting" points onto even-numbered boundaries. | 11:40 |
lkcl | blech, you're doing this fully loop-unrolled, aren't you? :) | 11:41 |
lkcl | blech! | 11:41 |
markos | yes, unfortunately | 11:41 |
markos | well, if | 11:41 |
markos | if I can get the indices to increase as well I could convert it into a loop | 11:42 |
markos | and set VL=4 and pred mask to 0b0001 | 11:42 |
markos | sv.svstep might be what I need | 11:43 |
lkcl | sv.svstep blats a series of indices into a thingy for you. | 11:44 |
lkcl | but... you know what? you might try using REMAP Indexed-mode | 11:44 |
lkcl | and keep the predicate-mask to 0b0000_0000_0000_1111 (to do 4 operations only) | 11:44 |
lkcl | 1 se | 11:44 |
lkcl | c | 11:44 |
lkcl | https://git.libre-soc.org/?p=openpower-isa.git;a=blob;f=src/openpower/decoder/isa/test_caller_svindex.py;hb=HEAD#l226 | 11:46 |
markos | I need to understand how this work | 11:47 |
markos | +s | 11:47 |
lkcl | https://git.libre-soc.org/?p=openpower-isa.git;a=blob;f=src/openpower/decoder/isa/test_caller_setvl.py;h=542e652bb909b9d13eff3c2d752a96b859ffcbcc;hb=101e3a30f90f567eaa2b7f5f7fd2306a04bfcad4#l1007 | 11:48 |
lkcl | basically you can create your *own* offsets. | 11:48 |
lkcl | anything you like. | 11:48 |
lkcl | it's misnamed "permutation" pretty much right across board of computer science but of course it's not *actually* a mathematical permutation | 11:49 |
lkcl | https://libre-soc.org/openpower/sv/remap/#svindex | 11:50 |
lkcl | so | 11:50 |
lkcl | set up an area of registers you want to use as the offsets | 11:50 |
lkcl | but only 4 of them | 11:50 |
markos | 4 registers as indices you mean | 11:51 |
lkcl | yes. | 11:51 |
lkcl | the other 12 all zero | 11:51 |
lkcl | (because you'll be using a mask of 0b0000_0000_0000_1111 so why bother) | 11:52 |
markos | ok, this needs some more reading to understand how it works | 11:52 |
lkcl | it's like "vperm" | 11:52 |
markos | I might ping you later | 11:52 |
markos | s/might/will certainly/ :) | 11:52 |
lkcl | :) | 11:52 |
lkcl | v3.0C 6.8.4 p258 | 11:53 |
lkcl | look that up first | 11:53 |
markos | I know how vperm works, I need to get my head around how such behaviour fits in this example :) | 11:54 |
*** jn <jn!~quassel@user/jn/x-3390946> has quit IRC | 12:04 | |
lkcl | ahh :) | 12:06 |
lkcl | hmmm in theeoryyy... you could set up the whole lot as a transposed group | 12:08 |
lkcl | or use the built-in transpose capability (yx=1) | 12:08 |
lkcl | set all the indices to 0123...15 with iota (svstep) | 12:09 |
markos | I think I'll try svstep first | 12:10 |
lkcl | but then use svindex SVd=4, sk=0, yx=1 | 12:10 |
lkcl | just remember to use setvl first before doing svindex because it uses VL to *compute* the size of the 2nd dimension | 12:11 |
lkcl | (not enough space for all the parameters, to be able to specify the 2nd dimension as an operand, sigh) | 12:11 |
lkcl | but by using that, you should be able to issue all 16 sv.madd*s in one instruction. | 12:13 |
*** jn <jn!~quassel@2a02:908:1065:960:20d:b9ff:fe49:15fc> has joined #libre-soc | 12:15 | |
*** jn <jn!~quassel@user/jn/x-3390946> has joined #libre-soc | 12:15 | |
*** octavius <octavius!~octavius@202.147.93.209.dyn.plus.net> has joined #libre-soc | 12:16 | |
markos | ok, I figured out what svstep does, now svindex | 12:23 |
markos | ok, I'm just beginning to realize how powerful REMAP is | 12:27 |
markos | still incredibly complex, could use with a few hands-on examples on how to use it | 12:27 |
markos | lkcl, this is the function I'm trying to convert: https://chromium.googlesource.com/webm/libvpx/+/refs/heads/main/vp8/encoder/dct.c#15 | 12:33 |
markos | rather trivial but that's why I chose it | 12:33 |
markos | but I don't see how it can fit the DCT remap, there is no triple loop | 12:33 |
lkcl | blegh. they loop-unrolled it | 12:47 |
lkcl | lines 21-35 are the 4 row-dcts | 12:48 |
lkcl | lines 38-51 are the 4 column-dcts | 12:48 |
lkcl | lines 22-25 are the inner-butterfly | 12:48 |
lkcl | lines 27-28 are the outer butterfly | 12:48 |
lkcl | and 30-31 likewise | 12:49 |
lkcl | probably with some sqrt(2) divisions (in integer) thrown-in | 12:49 |
markos | so can I use DCT remap on this or is too hackish an implementation? | 12:57 |
*** jn <jn!~quassel@user/jn/x-3390946> has quit IRC | 12:58 | |
lkcl | you can *replace* it with QTY 2x DCT remaps | 13:00 |
lkcl | lines 22-25 *are* the triple-loop inner-butterfly | 13:01 |
lkcl | but you can't tell that because it's only 4 operations | 13:01 |
lkcl | for a 2-wide DCT the triple-loop actually degenerates to a single operation | 13:01 |
lkcl | btw if it is easier, use sv.add which *can* do odd-numbered register numbers (uses EXTRA3) | 13:04 |
lkcl | followed by a mulli *=8 | 13:04 |
markos | that's what I'm doing, I've done the conversion up to the point of calculating op[1], op[3] | 13:06 |
lkcl | ok. suggest doing similar for now - break it down into sv.add and sv.mulli | 13:07 |
lkcl | really better off with butterfly-integer ops i feel - the ff* and fd* set - https://libre-soc.org/openpower/isa/svfparith/ | 13:09 |
lkcl | but it's, well, hoo they're expensive. 3-in 2-out | 13:10 |
ghostmansd[m] | lkcl, actually predicates can be substituted | 13:47 |
ghostmansd[m] | I added support for it | 13:47 |
ghostmansd[m] | But yes, numbers are not allowed. | 13:47 |
ghostmansd[m] | I'm not sure this works for all scenarios, though | 13:48 |
markos | ok, got around that by using mulld+add, however, I'm still having trouble with sv.srdi, I get unrecognlized opcode | 14:13 |
markos | sv.srdi/dm=r10 *op, *op, 12 | 14:13 |
markos | ghostmansd[m], ^^ | 14:31 |
ghostmansd[m] | Is srdi an alias? | 14:55 |
markos | ah yes | 14:55 |
markos | equivalent to : rldicl ra,rs,64-n,n | 14:55 |
markos | ok, I confirm that the original works, still it would be nice to have the aliases work also | 15:09 |
ghostmansd[m] | Yeah this is one of the things we need to do | 15:11 |
*** lxo <lxo!~lxo@gateway/tor-sasl/lxo> has joined #libre-soc | 15:49 | |
*** jn <jn!~quassel@2a02:908:1065:960:20d:b9ff:fe49:15fc> has joined #libre-soc | 16:00 | |
*** jn <jn!~quassel@user/jn/x-3390946> has joined #libre-soc | 16:00 | |
*** ghostmansd[m] <ghostmansd[m]!~ghostmans@broadband-188-32-220-156.ip.moscow.rt.ru> has quit IRC | 16:23 | |
*** ghostmansd[m] <ghostmansd[m]!~ghostmans@176.59.40.7> has joined #libre-soc | 16:24 | |
*** ghostmansd[m] <ghostmansd[m]!~ghostmans@176.59.40.7> has quit IRC | 17:08 | |
*** ghostmansd[m] <ghostmansd[m]!~ghostmans@broadband-188-32-220-156.ip.moscow.rt.ru> has joined #libre-soc | 17:11 | |
markos | is there a 16-bit multiplication instruction for Power or do I have to just and the result? | 17:58 |
lkcl | no, only 32- and 64- | 17:58 |
lkcl | sigh elwidth-overrides, sigh, still to be done, sigh | 17:59 |
programmerjake | mulli is technically 64x16-bit multiplication, probably not what you were thinking of though... | 18:00 |
markos | no, I need to truncate the values to 16-bit as it skews computation and I'm getting different results | 18:04 |
lkcl | yep just AND. | 18:05 |
lkcl | andi | 18:06 |
markos | right | 18:06 |
*** tplaten <tplaten!~isengaara@55d44a52.access.ecotel.net> has joined #libre-soc | 18:18 | |
tplaten | yesterday I had a look at the output path of litedram and gram, today I will have a look at the input path | 18:21 |
lkcl | tplaten, cool. | 18:37 |
*** octavius <octavius!~octavius@202.147.93.209.dyn.plus.net> has quit IRC | 18:47 | |
tplaten | next will be comparing the bitslip thing | 19:12 |
markos | I must be misunderstanding something wrt predicates | 19:13 |
markos | I have these 2 lines: | 19:13 |
markos | ori pred, pred, 0b1100110011001100 | 19:13 |
markos | sv.mulli/dm=r10 *t2, *t, 2217 | 19:13 |
markos | pred =r10 | 19:13 |
tplaten | I already found one difference, there is a DELAYG in litedram, with configurable cmd_delay | 19:13 |
markos | what I expect is to have t2 registers as follows: 0, 0, (*t+2)* 2217, (*t+3)*2217, 0, 0, (*t+6)*2217, (*t+7)*2217, etc | 19:14 |
markos | for VL=16 | 19:15 |
markos | but I also get the elements for pos=0, 4, 8, etc | 19:15 |
lkcl | that's ORing *into* the old value of pred | 19:30 |
lkcl | you probably want ori pred, 0, 0b1100110011001100 | 19:30 |
lkcl | check a dump of what pred is. | 19:30 |
lkcl | hooraaay after several weeks i have a first pack/unpack unit test running | 19:32 |
tplaten | in gram the whole bitslip thing seems to be missing | 19:34 |
markos | lkcl, gaaaaah, it's embarrassing when you're right all the time :D | 19:34 |
markos | it's been bothering me for the past hour and I was trying to figure out where have I gotten it wrong with all those instructions! | 19:37 |
lkcl | markos, the penalty is: i don't do much else :) | 19:41 |
tplaten | In gram/common.py I found class BitSlip(Elaboratable), the class is not used anywhere. So I add this to ecp5ddrphy.py | 19:41 |
*** tplaten <tplaten!~isengaara@55d44a52.access.ecotel.net> has quit IRC | 20:09 | |
markos | ghostmansd[m], lkcl just a curiosity, -mregnames is an optional argument, but it's required for predicates to work, should it not be allowed to use numeric values instead of r3/r10/r31, etc? | 20:45 |
ghostmansd[m] | Not really. How would you encode `1<<r3` without marking it as a register? `1<<3` makes a totally different meaning to me, nothing related to predicates. | 20:46 |
ghostmansd[m] | But, well, if we can come up with names different to registers, I can support these. | 20:46 |
ghostmansd[m] | All other uses for registers assume -mregnames, other than disassembly. | 20:47 |
markos | ghostmansd[m], right | 20:47 |
markos | is it possible to enable it by default for -mlibresoc then? | 20:48 |
ghostmansd[m] | Assembly needs it. To me, frankly speaking, allowing `add 0,1,2` is a bigger mistake than forcing -mregnames to allow `add r0,r1,r2`. | 20:48 |
markos | I don't disagree on this, but people don't always enable it | 20:48 |
ghostmansd[m] | Yeah it's possible. I kept it for our assembly, which doesn't support register names. :-) | 20:48 |
ghostmansd[m] | See, that's kinda curriculum uitiosum. | 20:49 |
markos | fair enough, just a note for future discussion :) | 20:49 |
ghostmansd[m] | Hm, curriculus vitiosus | 20:49 |
markos | when the bugs arrive from a horde of angry developers that cannot compile their assembly :D | 20:49 |
ghostmansd[m] | It's been a while with Latin | 20:49 |
markos | never studied tbh, I've had my fill of ancient languages with ancient greek :) | 20:50 |
ghostmansd[m] | Frankly, I'd enforce explicit register names everywhere. | 20:50 |
ghostmansd[m] | That I had too :-) | 20:50 |
ghostmansd[m] | Are you from Greece? | 20:51 |
ghostmansd[m] | Because there's virtually no other reason to learn it | 20:51 |
ghostmansd[m] | Other than being from Greece or studying the classical philology | 20:51 |
ghostmansd[m] | I had the latter | 20:51 |
ghostmansd[m] | And apparently you had the former, eh? | 20:52 |
markos | yes, but not really | 20:52 |
markos | ancient greek is mandatory for all children right up to the point where they have to choose a direction for their studies | 20:52 |
markos | so, around 16? | 20:53 |
ghostmansd[m] | Wow, really? | 20:53 |
ghostmansd[m] | This is really cool | 20:53 |
markos | yes, that doesn't mean everyone can read Plato, because the way it's taught is pretty sterile | 20:53 |
ghostmansd[m] | Well to me ancient Greek was one of the most difficult languages I ever encountered | 20:53 |
markos | it is difficult even for us | 20:53 |
ghostmansd[m] | Well likely you study some kind of koine | 20:53 |
ghostmansd[m] | Xenophon perhaps too | 20:53 |
ghostmansd[m] | We started with Anabasis | 20:53 |
markos | Xenophon, Plato, Lysias, Herodotus | 20:54 |
ghostmansd[m] | This is kinda "classic of classis" | 20:54 |
markos | and some Homer but that one is really hard | 20:54 |
ghostmansd[m] | Homer is extremely difficult | 20:54 |
markos | it's archaic | 20:54 |
ghostmansd[m] | Hell they even had digamma these days | 20:54 |
ghostmansd[m] | I mean, if you try to keep the rhyme | 20:54 |
markos | yes, I have the book of Iliad and I'm reading it and it's taking me ages to finish a single page | 20:55 |
ghostmansd[m] | You know in his times they had it | 20:55 |
markos | with the translation next even :D | 20:55 |
ghostmansd[m] | Well Odyssea is simpler | 20:55 |
markos | true | 20:55 |
ghostmansd[m] | Anthra moi ennepe Mousa | 20:55 |
markos | Polytropon os mala polle | 20:55 |
ghostmansd[m] | Planthe epei Troies | 20:55 |
markos | or something similar, my memory is not as good | 20:55 |
markos | hahaha | 20:55 |
ghostmansd[m] | No that was correct | 20:56 |
markos | ok you probably know more than I do | 20:56 |
ghostmansd[m] | You just forgot "ton" before polytropon :-) | 20:56 |
ghostmansd[m] | But hey, still correct | 20:56 |
ghostmansd[m] | I still recall the beginning of Anabasis | 20:56 |
programmerjake | my dad learned ancient greek and hebrew as part of school for becoming a pastor because that's what the bible was mostly originally written in...so there are other reasons to learn ancient greek | 20:57 |
ghostmansd[m] | Dareiou kai Parysatidai gignontai paides dyo, presbyteros men Artaxerxes, neoteros ho de Kyros | 20:57 |
markos | thankfully, the bible has much simpler form of ancient greek, hellenistic | 20:57 |
markos | which is much closer to the modern syntax | 20:57 |
markos | and I can read it without much effort | 20:58 |
ghostmansd[m] | Yeah this is kinda even more stable than koine | 20:58 |
markos | I have a whole bookshelf of such books | 20:58 |
lkcl | we studied both at stonyhurst college (roman catholic jesuit boarding school) but honestly i sucked at both of them | 20:58 |
markos | I am grateful for learning even that little ancient greek that I know, because they give you a strong basis for etymology | 20:58 |
ghostmansd[m] | But yeah, Greek is hard, no joking. All these time forms. | 20:59 |
ghostmansd[m] | I literally hated aoristos and perfectum forms. | 20:59 |
ghostmansd[m] | IIRC we had to learn 6 forms for some verbs. | 20:59 |
ghostmansd[m] | I mean, 6 initial forms. | 20:59 |
markos | aoristos is the coolest form tbh, or should I say was :) | 20:59 |
ghostmansd[m] | Not even mentioning persons and plurals. | 21:00 |
programmerjake | well, imho learning to read/write chinese/japanese is waay harder... | 21:00 |
markos | yes, it becomes impossible to remember | 21:00 |
ghostmansd[m] | Well we had aoristos in Slavic languages too. | 21:00 |
ghostmansd[m] | This is really cool form. | 21:00 |
markos | programmerjake, japanese is a very simple language, the writing is hard, but there is literally one single form for a verb | 21:00 |
markos | it's hard because you have to learn a few thousand symbols | 21:00 |
programmerjake | hence why I said reading/writing, not speaking | 21:01 |
markos | but it's pretty simple in terms of number of forms, want to transform a phrase into a question? add 'ka' at the end | 21:01 |
ghostmansd[m] | Well ancient Greek helps a lot with writing modern Greek correctly. | 21:01 |
ghostmansd[m] | All these sounds you converted to sound like "i"... | 21:02 |
markos | I'd say japanese is the closest thing to state machine. Person + verb + time , there you go | 21:02 |
markos | a single word for each :) | 21:02 |
ghostmansd[m] | All these oi, ei, i, H, y... | 21:02 |
programmerjake | well, if you think japanese is simple, try learning formal japanese...i know a bit due to watching too much anime, but formal japanese is nearly incomprehensible... | 21:02 |
markos | programmerjake, not saying it's easy, far from it | 21:03 |
markos | but it's easier than eg. ancient greek or even german | 21:03 |
markos | excluding the writing difficulties | 21:03 |
markos | I've actually just enrolled to start japanese in a few days | 21:03 |
programmerjake | for me, chinese is even harder, because my brain is programmed to mostly ignore tone | 21:04 |
markos | programmerjake, no argument there :) | 21:04 |
markos | what is it, 70k glyphs? | 21:04 |
markos | and 7 variations of 's'? | 21:04 |
markos | my oldest son wants to learn chinese, and my youngest russian | 21:05 |
programmerjake | and chinese has distinctions that I think of as exactly the same sound...qi vs chi and xi vs shi... | 21:05 |
markos | I chose japanese and my wife arabic, with english we have covered pretty much the world population :D | 21:05 |
programmerjake | well, if you just choose spanish that covers like half the world anyway... | 21:06 |
markos | one of the kids wants to learn spanish eventually, but they're simple to learn, at least just to communicate | 21:06 |
ghostmansd[m] | Russian is difficult too | 21:07 |
markos | ghostmansd[m], but it's still easier than chinese :) | 21:08 |
markos | when we see something incomprehensible, we say 'it looks chinese to me' - rest of the world says 'it looks greek to me' but obviously we can't use that :) | 21:08 |
lkcl | yyeah the spanish version of Fawlty Towers had Manuel be portuguese... :) | 21:11 |
markos | hahaha | 21:11 |
markos | 'never mention the War!' | 21:11 |
jn | "Das kommt mir Spanisch vor" -- when germans don't understand a text | 21:13 |
ghostmansd[m] | markos, well we also say "Chinese", but this is not related to knowledge of Greek :-) | 21:16 |
*** octavius <octavius!~octavius@202.147.93.209.dyn.plus.net> has joined #libre-soc | 21:24 |
Generated by irclog2html.py 2.17.1 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!