When you build an instruction, the arguments you pass to it must have the exact data type required by the function that the instruction is calling, because casting is performed at the high level compiling, not at the low level, and an instruction (so an argument) is a low level compiling data.