Template Arguments in inline ASM
Don Clugston
dac at nospam.com.au
Sun Sep 9 13:13:10 PDT 2007
John Kiro wrote:
> Hell There
>
> I made the following example to see how far can inline asm blocks use template args:
> ========================================
> void asm_template(T)(T Tval,T* pDest)
> {
> asm{
> fld Tval;
> mov EAX,pDest;
> fstp T ptr[EAX]; //#1
> fstp float ptr[EAX]; //#2
> mov EDX,T.sizeof; //#3
> mov ECX,float.sizeof; //#4
> }//asm
> }//asm_template
>
> void main()
> {
> float f1=4.0;
> float f2=5.0;
>
> asm_template!(float)(f1,&f2);
> }
> ========================================
> Here is the compilation result of the 4 statements marked above:
> #1: ERROR: "cannot use type float as an operand"
> #2: OK
> #3: OK!!!
> #4: ERROR: "ptr expected"
>
> For me, if #1 would be illegal, then the error should not have mentioned "type float". In other words, why would it fail if T is correctly interpreted to float?
> I also see that it's surprising that #3 compiles while #4 doesn't (the reverse would be more natural).
> In conclusion, I see that template args are partially (and unclearly) supported inside ASM blocks. Me, I hope to have better support for aliases & template args in ASM blocks.
> What do you think friends?
>
> Regards,
> John
Yup. #1 and #4 are bugs. Put them into Bugzilla.
There are several bugs related to asm and templates. Bug #1125, in particular,
is giving me a lot of grief at the moment. And in the last DMD, there's a new
bad code generation bug with using tuple parameters from asm.
More information about the Digitalmars-d
mailing list