4 ms·
> Which "add" instruction? I believe the intention was whichever one matched the types. If you're adding 2 16-bit ints, it would use the 16-bit add instruction
by Sprocklem 9y ago
> Which "add" instruction?
I believe the intention was whichever one matched the types. If you're adding 2 16-bit ints, it would use the 16-bit add instruction, if it existed or a larger one (then, in this case, cast it back down to 16-bits when appropriate). If it's a floating-point type, it would get a floating point add.
[Edit: The compilers usually wouldn't provide a 16-bit int type if they didn't have the instructions to deal with it.]
> What if the operands are of different types?
C89 has well defined promotion rules. You'd convert the operands appropriately, then use the equivalent add.
> What if the CPU doesn't have an "add" instruction?
Then it would probably end up as a function call to a system specific function. Either way, it wouldn't do anything particularly unexpected for the system.
> If you want assembly language, you know where to find it.
C was originally just used as a high-level assembly language. I suspect people found it easier to reason about, even if it basically used the system instruction's behaviour.