inline asm bug
Simen Kjaeraas
simen.kjaras at gmail.com
Thu Jan 17 11:14:00 PST 2008
Blas Rodriguez Somoza <blas at puertareal.com> wrote:
> Hello
>
> I've found something that seems to a bug working with the inline
> assembler, but I'm not sure if it is the expected behavoir.
>
> The reference to struct/unions don't work if there is nested
> structs/unions defined separately. Example:
>
> union test {
> ulong var1;
> struct var2 {
> ubyte zz;
> }
> }
>
> union test2 {
> ulong var1;
> pp var2;
> }
>
> struct pp {
> ubyte zz;
> }
>
> ..
> ..
> asm{
> ..
> movzx EAX, test.var2.zz[ESI];
> movzx EAX, test2.var2.zz[ESI];
> ..
> }
>
> The first line succeed but the second fails:
>
> Error: need 'this' for address of var2
> Error: need 'this' for address of var2
> bad type/size of operands '*(& var2)'
>
> When, by error, I change the second line to
>
> movzx EAX, test2.var2->zz[ESI];
>
> the compiler crash.
>
>
> Regards
> Blas Rodriguez Somoza
To me it seems you are referencing the struct definitions/prototypes, not
a struct instance. Try something like this:
union test {
ulong var1;
struct var2 {
ubyte zz;
}
}
union test2 {
ulong var1;
pp var2;
}
struct pp {
ubyte zz;
}
test foo; // new lines here
test2 bar;
..
..
asm{
..
movzx EAX, foo.var2.zz[ESI];
movzx EAX, bar.var2.zz[ESI];
..
}
Simen Kjaeraas
More information about the Digitalmars-d
mailing list