<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 28, 2011, at 1:44 AM, John Rose wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Aug 26, 2011, at 2:16 AM, Christian Thalinger wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div><blockquote type="cite">Also, get_field_by_offset should be called on the actual type of the ciCallSite, not env-&gt;CallSite_klass. &nbsp;Otherwise you might get NULL for the ciField, if the target fields are split out across different call site subclasses.<br></blockquote><br>Are there plans to do this? &nbsp;I changed ciField::is_call_site_target to check for subclasses of CallSite.<br></div></span></blockquote></div><br><div>No, no plans. &nbsp;Just a move toward robustness. &nbsp;Right now we have a common field inherited from CS that is faked into final or volatile field semantics in the subclasses. &nbsp;I'm afraid we could get forced to split the field at some point.</div></div></blockquote><div><br></div>I think the point is now. &nbsp;setTargetVolatile uses Unsafe to fake the volatile field semantics and the compiler doesn't recognize this as a field store to CS.target. &nbsp;Thus we miss the field stores to a VCS and end up with wrong behavior.</div><div><br></div><div>I'm currently preparing something that does this refactoring.</div><div><br></div><div>Why was this Unsafe trick used in the first place?</div><div><br></div><div>-- Christian</div><div><br><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div><div>On Aug 26, 2011, at 2:23 AM, Christian Thalinger wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Aug 26, 2011, at 1:47 AM, John Rose wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Aug 25, 2011, at 11:32 AM, Tom Rodriguez wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">The docs for VolatileCallSite suggest setTarget can be called whenever you feel like it, so it seems like it can be set many times. &nbsp;MutableCallSite can be as well but the implication is that it's not updated very often. &nbsp;I'm actually unclear what distinction is trying to be made with VolatileCallSite.<br></span></blockquote></div><br><div>The MCS and VCS have the same semantics, except for the extra memory barriers on VCS. &nbsp;These barriers do not affect the validity or applicability of push notification. &nbsp;Also, either an MCS or VCS might end up being "megamutable", so there has to be some sort of cutoff that will prevent target-prediction for a CS which has been mispredicted too many times. &nbsp;We need to squeeze a bit of state into the CS, somewhere, which displays how many times the thing has been mispredicted.</div></div></blockquote><div><br></div>So the question is should we go with what we currently have for invokedynamic (only optimize CCS and MCS) or should we allow all CSs to be optimized and start working on the logic John describes. &nbsp;I'm fine with both.</div></div></blockquote></div><div><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><br></div><div>I think we need the throttling logic right away. &nbsp;I'm not comfortable with encouraging users to use VCS just because MCS has a performance bug.</div></div></div><div><br></div><div>-- John</div></div></blockquote></div><br></body></html>