Home | History | Annotate | Download | only in lib
      1 /* ===-- addvti3.c - Implement __addvti3 -----------------------------------===
      2  *
      3  *                     The LLVM Compiler Infrastructure
      4  *
      5  * This file is dual licensed under the MIT and the University of Illinois Open
      6  * Source Licenses. See LICENSE.TXT for details.
      7  *
      8  * ===----------------------------------------------------------------------===
      9  *
     10  * This file implements __addvti3 for the compiler_rt library.
     11  *
     12  * ===----------------------------------------------------------------------===
     13  */
     14 
     15 #if __x86_64
     16 
     17 #include "int_lib.h"
     18 
     19 /* Returns: a + b */
     20 
     21 /* Effects: aborts if a + b overflows */
     22 
     23 ti_int
     24 __addvti3(ti_int a, ti_int b)
     25 {
     26     ti_int s = a + b;
     27     if (b >= 0)
     28     {
     29         if (s < a)
     30             compilerrt_abort();
     31     }
     32     else
     33     {
     34         if (s >= a)
     35             compilerrt_abort();
     36     }
     37     return s;
     38 }
     39 
     40 #endif
     41