negvsi2.c revision 2d1fdb26e458c4ddc04155c1d421bced3ba90cd0
1323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)/* ===-- negvsi2.c - Implement __negvsi2 -----------------------------------=== 2323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * 3323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * The LLVM Compiler Infrastructure 4323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * 5323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * This file is dual licensed under the MIT and the University of Illinois Open 6323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * Source Licenses. See LICENSE.TXT for details. 7323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * 8323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * ===----------------------------------------------------------------------=== 9323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * 10323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * This file implements __negvsi2 for the compiler_rt library. 11323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * 12323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) * ===----------------------------------------------------------------------=== 13323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) */ 14323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 15323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "int_lib.h" 16323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 17323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)/* Returns: -a */ 18323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 19323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)/* Effects: aborts if -a overflows */ 20323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 21323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)COMPILER_RT_ABI si_int 22323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)__negvsi2(si_int a) 23323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 24323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) const si_int MIN = (si_int)1 << ((int)(sizeof(si_int) * CHAR_BIT)-1); 25323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (a == MIN) 26323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) compilerrt_abort(); 27323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return -a; 28323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 29323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)