FYI, another wrinkle: MSVC doesn't support inline assembly for x64 targets <https://msdn.microsoft.com/en-us/library/wbk4z78b.aspx>. :-|
Sounds like the suggested workaround is intrinsics or using the assembler directly. On Monday, January 4, 2016 at 7:18:01 PM UTC-8, Benedikt Meurer wrote: > > Hm, skipping those tests in the simulators could easily backfire. Let's > just do the runtime function approach and see how far we can get. > > -- Benedikt > > Ben Smith <bi...@chromium.org <javascript:>> schrieb am Mo., 4. Jan. > 2016, 22:05: > >> >> >> On Tuesday, December 29, 2015 at 9:07:15 PM UTC-8, Benedikt Meurer wrote: >>> >>> The runtime approach w/ inline assembly sounds fine as a starting point. >>> Maybe we can kill FCG and CS this year, and then we can reconsider a TF >>> only solution (the interpreter handlers are also TF based) >>> >>> -- Benedikt >>> >> >> Another complication here: none (?) of the simulators seem to handle the >> sync/atomic instructions. AFAICT, this should be fine as long as we're >> using the runtime functions w/ inline assembly, but as soon as TF generates >> those instructions they'll need to be handled. They'll also need to be >> somehow translated into the equivalent host sync/atomic instructions, if it >> is possible to be executing an Atomic runtime function at the same time as >> a TF compiled function. >> >> This is probably more trouble than it's worth, though. Maybe the best >> solution is to skip tests that need threads when running via the simulator? >> >> >>> >>> Ben Smith <bi...@chromium.org> schrieb am Di., 29. Dez. 2015, 22:35: >>> >>>> On Thursday, December 17, 2015 at 2:17:01 PM UTC-8, Ben Smith wrote: >>>>> >>>>> >>>>> >>>>> On Thursday, December 17, 2015 at 11:26:48 AM UTC-8, Benedikt Meurer >>>>> wrote: >>>>>> >>>>>> Can't you use the same instruction sequence, even from C++ code? >>>>>> >>>>> >>>>> Yeah, I could, just not using the compiler intrinsics. I was hoping to >>>>> avoid duplicating the sequence in multiple locations, but it might be the >>>>> best way. >>>>> >>>>> >>>>>> Or compile a small stub that is callable from C++ directly and >>>>>> thereby use the same instruction sequence? >>>>>> >>>>> >>>>> Right, this way makes the most sense to me. >>>>> >>>> >>>> OK, I've investigated this some more and have some more questions: >>>> >>>> The Atomics functions are polymorphic over the different TypedArray >>>> types (similar to ArrayBuffer keyed property access). So currently the >>>> functions check the TypedArray base type and forward to the current atomic >>>> instruction for that type. But TurboFan for asm.js should have enough type >>>> information to determine the correct TypedArray type without this check, >>>> so >>>> it makes sense that the codestubs should not have this check. >>>> >>>> So assuming we have codestubs like AtomicLoad8, AtomicLoad16, etc. how >>>> can I call these from FCG? It looks like the current way code stubs are >>>> called in FCG is via intrinsics (e.g. Math.pow or String.fromCharCode). >>>> But >>>> if I am hooking to the JavaScript functions then I'll have to match >>>> Atomics.load first, then do the TypedArray check in the FCG compiler so I >>>> can forward to the correct codestub. Looks like it should work, but I'm >>>> wondering if it is the right way to do things. It seems like the current >>>> path uses a type feedback in an IC to handle this, though that seems like >>>> a >>>> lot more work, and AFAICT won't be optimized without CS anyway, is that >>>> correct? >>>> >>>> And speaking of CrankShaft, doesn't implementing the type check in FCG >>>> require me to do the same check in CS? Or is there a way to share this >>>> code >>>> between the two? >>>> >>>> Thinking through it more, perhaps the best solution is to use inline >>>> assembly in the runtime functions. Inline assembly doesn't seem to be used >>>> much in v8 (mostly just the atomics implementations borrowed for >>>> Chromium), >>>> but it would really simplify the code here: I could use the same runtime >>>> functions I'm using now for FCG and CS, then have TF generate the same >>>> instruction sequence. The biggest drawback is that keeping the instruction >>>> sequences the same would have to be maintained manually. >>>> >>>> What do you think? >>>> >>>> >>>>> >>>>> >>>>>> Also the code stub should work if that's being used by CS and FCG, >>>>>> while you can inline the code into TF. You just need to make sure to >>>>>> generate the exactly the same instructions I guess? >>>>>> >>>>> >>>>> Yeah, I suppose inlining the TF can be a later optimization if desired. >>>>> >>>>> >>>>>> IIRC Jaro thought about this already, maybe he can give some advice. >>>>>> >>>>>> On Thu, Dec 17, 2015 at 8:06 PM, Ben Smith <bi...@chromium.org> >>>>>> wrote: >>>>>> >>>>>>> >>>>>>> >>>>>>> On Wednesday, December 16, 2015 at 7:16:07 PM UTC-8, Benedikt Meurer >>>>>>> wrote: >>>>>>>> >>>>>>>> You probably need the same guarantees for CS. So how about putting >>>>>>>> them into a code stub? And calling the stub for the %_ cases in all >>>>>>>> three >>>>>>>> compilers? >>>>>>>> >>>>>>> >>>>>>> Yes, that's what I was thinking too, but I was wondering if there >>>>>>> was another way -- AIUI the code stub has the overhead of a function >>>>>>> call >>>>>>> for all compilers, right? >>>>>>> >>>>>>> >>>>>>>> BTW wouldn't it work if FCG always uses the C++ version? >>>>>>>> >>>>>>> >>>>>>> Maybe I'm misunderstanding when the various compilers are used. But >>>>>>> if it's possible that some code that was compiled with FCG is being >>>>>>> used at >>>>>>> the same time that compiled with TF is used and they are accessing the >>>>>>> same >>>>>>> shared memory, then it's necessary that they have the same instruction >>>>>>> sequence. >>>>>>> >>>>>>> >>>>>>>> -- Benedikt >>>>>>>> >>>>>>>> Ben Smith <bi...@chromium.org> schrieb am Do., 17. Dez. 2015, >>>>>>>> 00:01: >>>>>>>> >>>>>>>>> Hi v8-dev, >>>>>>>>> >>>>>>>>> I added the Atomics API earlier this year (in >>>>>>>>> src/js/harmony-atomics.js and src/runtime/runtime-atomics.cc). It's >>>>>>>>> currently implemented as runtime functions using compiler intrinsics. >>>>>>>>> I'd >>>>>>>>> like to add a TurboFan implementation, but I need to make sure that >>>>>>>>> the >>>>>>>>> generated assembly is the same in both the full-codegen and for TF. >>>>>>>>> What's >>>>>>>>> the best way to do this? >>>>>>>>> >>>>>>>>> FYI, here's the associated bug: >>>>>>>>> https://bugs.chromium.org/p/v8/issues/detail?id=4614 >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> -Ben >>>>>>>>> >>>>>>>>> -- >>>>>>>>> -- >>>>>>>>> v8-dev mailing list >>>>>>>>> v8-...@googlegroups.com >>>>>>>>> http://groups.google.com/group/v8-dev >>>>>>>>> --- >>>>>>>>> You received this message because you are subscribed to the Google >>>>>>>>> Groups "v8-dev" group. >>>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>>> send an email to v8-dev+un...@googlegroups.com. >>>>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>>>> >>>>>>>> -- >>>>>>> -- >>>>>>> v8-dev mailing list >>>>>>> v8-...@googlegroups.com >>>>>>> http://groups.google.com/group/v8-dev >>>>>>> --- >>>>>>> You received this message because you are subscribed to the Google >>>>>>> Groups "v8-dev" group. >>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>> send an email to v8-dev+un...@googlegroups.com. >>>>>>> For more options, visit https://groups.google.com/d/optout. >>>>>>> >>>>>> >>>>>> -- >>>> -- >>>> v8-dev mailing list >>>> v8-...@googlegroups.com >>>> http://groups.google.com/group/v8-dev >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "v8-dev" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to v8-dev+un...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> -- >> -- >> v8-dev mailing list >> v8-...@googlegroups.com <javascript:> >> http://groups.google.com/group/v8-dev >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to v8-dev+un...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.