Im trying to implement my own memcpy function in asm. CPU is dsPIC33F, compiler Microchip C30.
asm("repeat %2 \n mov.b [%1++], [%0++]" 
   : : "r"(dst), "r"(src), "ri"(len));
When len is variable, this works fine: the compiler picks a register and there is no problem.
But when len is a compile-time constant (eg 10), assembler says: Error: Invalid operands specified ('repeat 10').
This is because microchip assembler requires # before immediates: repeat #10
Using #%2 in the source wouldn't be viable because that would break if the compiler picked a register.
Is it a microchip compiler bug?
Is there any way to write inline asm that will expand correctly to
repeat reg or repeat #imm for "ri" or "g"?