None of these asm lines will compile:
procedure foo(const a: double);
asm
cvtsd2ss xmm0, [a]
cvtsd2ss xmm0, qword [rcx]
cvtsd2ss xmm0, qword ptr [rcx]
With errors that seem to vary depending on the type of a, including:
Error: Asm: [cvtsd2ss reg??,mem128] invalid combination of opcode and operands
These however work just fine:
cvtsd2ss xmm0, [rcx]
movq xmm0, [a]
cvtsd2ss xmm0, xmm0
cvtpd2ps works just fine in all cases, as well as all other instructions I've used so far.