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

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-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.
>

-- 
-- 
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.

Reply via email to