Add one byte to another, saturating at 0x7F and -0x80.
64 {
65#if QADD7_C == 1
66 int16_t t = i + j;
67 if (t > 127)
68 t = 127;
69 else if (t < -128)
70 t = -128;
71 return t;
72#elif QADD7_AVRASM == 1
73 asm volatile(
74
75 "add %0, %1 \n\t"
76
77
78
79
80
81 "brvc L_%= \n\t"
82 "ldi %0, 0x7F \n\t"
83
84
85
86 "adc %0, __zero_reg__\n\t"
87 "L_%=: "
88 : "+d"(i)
89 : "r"(j));
90 return i;
91#elif QADD7_ARM_DSP_ASM == 1
92 asm volatile("qadd8 %0, %0, %1" : "+r"(i) : "r"(j));
93 return i;
94#else
95#error "No implementation for qadd7 available."
96#endif
97}