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