I have a CL for this now: https://codereview.chromium.org/1550803006/. It 
only implements inline assembly for x64/ia32 for now, and uses a separate 
asm source file for x64 on msvc.

On Tuesday, January 5, 2016 at 12:11:11 PM UTC-8, Ben Smith wrote:
>
> 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> 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
>>> 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.

Reply via email to