Home | History | Annotate | Download | only in builtins
      1 /* ===-- subvti3.c - Implement __subvti3 -----------------------------------===
      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 __subvti3 for the compiler_rt library.
     11  *
     12  * ===----------------------------------------------------------------------===
     13  */
     14 
     15 #include "int_lib.h"
     16 
     17 #ifdef CRT_HAS_128BIT
     18 
     19 /* Returns: a - b */
     20 
     21 /* Effects: aborts if a - b overflows */
     22 
     23 COMPILER_RT_ABI ti_int
     24 __subvti3(ti_int a, ti_int b)
     25 {
     26     ti_int s = (tu_int) a - (tu_int) 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 /* CRT_HAS_128BIT */
     41