0

How can I sum up two signed values? I know I have to use conditional branching in order to compare them and do the actual operation afterwards, but I don't know how to do it in assembly ... (it's ARM architecture).

Max
  • 153
  • 11
  • You don't *have* to branch; I think it should be possible with a predicated instruction which might be more efficient, depending on typical inputs and the surrounding code, and the target CPU microarchitecture. (simple in-order vs. higher-performance out-of-order execution). What is your use-case here? Do you need this over an array of values, maybe with NEON SIMD, or definitely only scalar? – Peter Cordes Nov 11 '18 at 10:44
  • I get two signed values passed to a naked function in C, no array. And it says I have to use branching. – Max Nov 11 '18 at 10:48
  • Are corner cases important? Like getting the right answer even if one of the inputs is `-2^31`, the most negative number whose 2's complement inverse is itself. That's still fine if you consider the resulting sum be unsigned. Anyway, I guess you have the option of doing abs() on both inputs, or checking whether both inputs have the same sign and then doing abs on the result. But the 2nd way has more limited range. Still, you could do it with `EORS` on the 2 inputs, and look at the sign flag set from that result to see if the 2 inputs had the same sign. – Peter Cordes Nov 11 '18 at 10:48
  • "It says"? Is this just a homework assignment where efficiency isn't important? :( If you're stuck, just write it in C and look at compiler output. – Peter Cordes Nov 11 '18 at 10:50
  • Yes, it's a homework and I'm stuck ... Where can I look at the compiler output? – Max Nov 11 '18 at 10:53
  • On https://godbolt.org/, or just use `gcc -S -O3` locally. See [How to remove "noise" from GCC/clang assembly output?](https://stackoverflow.com/q/38552116) – Peter Cordes Nov 11 '18 at 10:56

0 Answers0