<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">On Sep 10, 2014, at 8:16 AM, David Chase <<a href="mailto:david.r.chase@oracle.com">david.r.chase@oracle.com</a>> wrote:<br><div><br class="Apple-interchange-newline"><blockquote type="cite"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;">Perhaps it would be better to say (after the comment)</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;"> int float_index = 1 + (j << 1);</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;">and repeat float_index three times,</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;">and likewise for the even index in the double case</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;"> int double_index = (j<<1)</span></blockquote><div><br></div><div>I agree with that point.</div><br><blockquote type="cite"><span style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; float: none; display: inline !important;">Other than that, I like it, especially the typos/spellos that you caught in associated files.</span><br style="font-family: Helvetica; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;"></blockquote><br></div><div>+1</div><div><br></div><div>Style comment:  The name "_sp_adjustment_floating_point" should be "_floating_point_sp_adjustment" to match HotSpot's local pattern for C++ accessors.  Also, since it is a boolean, the accessor should sound like a boolean (not an "adjustment"), like "adjust_sp_for_floating_point".</div><div><br></div><div>But, I have a bigger issue which make make that moot:  The "adjust_sp_for_floating_point" dance is awkward but acceptable (maybe with amendments) if it is truly a system-specific issue.  I don't think it is system-specific, but ABI-specific.  What does the ABI documentation say about this case?</div><div><br></div><div>I googled to <a href="http://www.sparc.org/technical-documents-test-2/specifications/">http://www.sparc.org/technical-documents-test-2/specifications/</a> and then to <a href="http://www.sparc.org/wp-content/uploads/2014/01/SCD.2.4.1.pdf.gz">http://www.sparc.org/wp-content/uploads/2014/01/SCD.2.4.1.pdf.gz</a>  .</div><div><br></div><div>That document is (or should be) normative for all implementations of C on sparc, including both Linux and Solaris.  On page 3P-12, under "Floating Arguments", it says:</div><div><br></div><div><blockquote type="cite">When a callee prototype exists, and does not indicate variable arguments, floating- point values assigned to locations %sp+BIAS+128 through %sp+BIAS+248 will be promoted into floating-point registers, as shown above.</blockquote><div><br></div>By "promoted" it means that the argument is located in two places, an unused spill slot in the "parameter array" (starts at %sp+BIAS+128), and a live float register.  In most cases, there are 6 or fewer arguments of any type, and the standard parameter array slots (%sp+BIAS+128 to %sp+BIAS+176 exclusive) serve as shadow slots.  But floating point registers %d6 to %d16 require slots beyond that (up to %sp+BIAS+248, as the spec. says).</div><div><br></div><div>This means that the whole adjust_sp_for_floating_point dance should go away, and the parameter array extension needs to be done on all LP64 sparc systems.</div><div><br></div><div>Sparc does it this way in order to have a very simple varargs implementation (one contiguous parameter array, allocated by the caller).  If there are other systems which have a similar C ABI, we will have a similar bug for those also.  Would you mind looking at the corresponding code for other cpus we support, and seeing if there is potentially the same bug there also?  If so we can check the relevant ABI docs and perhaps file bugs for those guys also.</div><div><br></div><div>Thanks!</div><div><br></div><div> John</div></body></html>