2 ms·
Which "add" instruction? Integer (signed or unsigned), floating-point? How big are the operands? What if the operands are of different types? What if the CPU do
by _kst_ 9y ago
Which "add" instruction? Integer (signed or unsigned), floating-point? How big are the operands? What if the operands are of different types? What if the CPU doesn't have an "add" instruction? Or, perhaps more plausibly, doesn't have a divide instruction?
C code defines run-time behavior (or fails to define it in some cases), not CPU instruction sequences. If you want assembly language, you know where to find it.
- 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.