I think i've found a bug, should / how do i report it.

Chris Warwick sp at m.me.not
Mon Mar 12 09:56:40 PDT 2007


"Don Clugston" <dac at nospam.com.au> wrote in message 
news:et3rdl$1bhc$1 at digitalmars.com...
> Chris Warwick wrote:
>> "Derek Parnell" <derek at psych.ward> wrote in message 
>> news:1898vpzduavha.1b2w76ic8zmeg.dlg at 40tude.net...
>>> On Mon, 12 Mar 2007 01:43:34 -0000, Chris Warwick wrote:
>>>
>>>> Apologys for the previous jibberish.. i've been on honeymoon with D for 
>>>> the
>>>> last 4 days and havn't had much sleep lol.. So the problem is still 
>>>> there i
>>>> just wrote out the examples wrong.. getting my movd's and movq's all 
>>>> mixed
>>>> up.. Anyway copy and past this time so i dont feck up...
>>>>
>>>> private ulong MMXZERO = 0x0;
>>>>     movq       MM0,MMXZERO;
>>>>
>>>> compiles fine, as expected.
>>>>
>>>> But the addition of 'const'
>>>>
>>>> private const ulong MMXZERO = 0x0;
>>>>     movq       MM0,MMXZERO;
>>>>
>>>> causes "bad type/size of operands 'movq'"
>>>>
>>>> cheers
>>>>
>>>> cw
>>> The MMX instruction 'movq' requires that the source/destination is 
>>> either
>>> MMX register or an address of a 64-bit value, except that both can't be
>>> addresses. I believe that the DMD compile optimizes the 'const' value to 
>>> be
>>> a literal zero so you end up with ...
>>>
>>>   movq, MM0,0x0
>>>
>>> which is not allowed.
>>
>> Should it really be optimizing typed constants like that, especialy with 
>> asm?
>>
>> is it worth me bring this issue up somewhere?
>>
>> cheers,
>>
>> cw
>
> 'const' doesn't mean the same as in C++. A const is a constant, not a 
> variable. You cannot take the address of a const; in many ways it's more 
> like a #define. In theory, the const may not even be allocated any storage 
> space at all in the final executable. (In practice, I think it always is, 
> but I hope that changes eventually).

ah ok, thanks.

cw 




More information about the Digitalmars-d-learn mailing list