How to do unsigned saturating addition in C?

前端 未结 17 1879
孤独总比滥情好
孤独总比滥情好 2020-11-27 02:31

What is the best (cleanest, most efficient) way to write saturating addition in C?

The function or macro should add two unsigned inputs (need both 16- and 32-bit ver

17条回答
  •  盖世英雄少女心
    2020-11-27 03:11

    In IA32 without conditional jumps:

    uint32_t sadd32(uint32_t a, uint32_t b)
    {
    #if defined IA32
      __asm
      {
        mov eax,a
        xor edx,edx
        add eax,b
        setnc dl
        dec edx
        or eax,edx
      }
    #elif defined ARM
      // ARM code
    #else
      // non-IA32/ARM way, copy from above
    #endif
    }
    

提交回复
热议问题