Undefined behaviour in hotspot

Andrew Haley aph at redhat.com
Sun Apr 27 09:03:09 UTC 2014


On 04/25/2014 03:10 AM, Christian Thalinger wrote:
> 
> On Apr 24, 2014, at 10:33 AM, Christian Thalinger <christian.thalinger at oracle.com> wrote:
> 
>>
>> On Apr 21, 2014, at 10:41 PM, Volker Simonis <volker.simonis at gmail.com> wrote:
>>
>>> Hi,
>>>
>>> I think the simplest and safest fix would be to make encoding() (and
>>> all the corresponding functions) static functions which take a
>>> Register as argument like:
>>>
>>> static int encoding(const RegisterImpl* r) { assert(is_valid(r),
>>> "invalid register"); return (intptr_t)r; }
>>>
>>> This wouldn't waste any more memory and it would be fully C++
>>> compliant at the price of a slightly more verbose usage:
>>>
>>> 2577    void Assembler::push(Register src) {
>>> 2578      int encode = prefix_and_encode(RegisterImpl::encoding(src));
>>> 2579
>>>
>>> And of course this would work with any compiler.
>>>
>>> What do you think?
>>
>> I’d rather make Register a real C++ class with an _encoding field.
>> There are not that many registers used or allocated that it would
>> make a big difference in memory usage.

I don't think this is a good idea.  Some ABIs pass structs in memory,
even structs with a single word field.  You'd be be pessimizing such
systems, for no good reason AFAICS.

Andrew.


More information about the hotspot-dev mailing list