asm woes...

Era Scarecrow via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 27 02:39:36 PDT 2016


On Friday, 27 May 2016 at 09:22:49 UTC, Guillaume Piolat wrote:
> On Friday, 27 May 2016 at 09:11:01 UTC, Era Scarecrow wrote:
>>  Hmmm it just occurs to me I made a big assumption. I assumed 
>> that if the CPU supports 64bit operations, that it would be 
>> compiled to use 64bit registers when possible. I'm assuming 
>> this is not the case. As such the tests I was doing will  
>> probably be of little help _unless_ it was X86_64 code, or a 
>> check that verifies it's 64bit hardware?
>
> You have to write your code three times, one for
>
> version(D_InlineAsm_X86)
> version (D_InlineAsm_X86_64)
> and a version without assembly.

  If longs are emulated, then only X86_64 and without assembly 
would be considered, as there would be no benefit to doing the 
X86 version. If i can do it, the two will be identical, except 
for which stack register is used. (A lot of wasted space for so 
little to add).

> TBH I don't know how to access members in assembly, I think you 
> shouldn't ever do that. It will depend heavily on the 
> particular calling convention called.
> Just put these fields in local variables.
>
> <snip>
>
> The compiler will replace with the right register-indexed stuff.
> But honestly I doubt it will be any faster because on the other 
> hand you mess with the optimizer.

  Hmmm tried it as you have it listed. Still hangs. Tried it 
directly with qword with and without [ESP], still hangs.

  The listed inline assembler here on Dlang says to use 
'variableName[ESP]', which then becomes obvious it's a variable 
and even probably inserts type-size information as appropriate. 
Although I did it manually as you had listed but it still hangs. 
I suppose there's the requirement to have a register pointing to 
this, which then would be mov EAX, this, and then add lo[EAX], 
1...


More information about the Digitalmars-d-learn mailing list