+++ /dev/null
-/** @file\r
- Compiler intrinsic for 64-bit mod, ported from LLVM code.\r
-\r
- Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>\r
-\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-/**\r
- University of Illinois/NCSA\r
- Open Source License\r
-\r
- Copyright (c) 2003-2008 University of Illinois at Urbana-Champaign.\r
- All rights reserved.\r
-\r
- Developed by:\r
-\r
- LLVM Team\r
-\r
- University of Illinois at Urbana-Champaign\r
-\r
- http://llvm.org\r
-\r
- Permission is hereby granted, free of charge, to any person obtaining a copy of\r
- this software and associated documentation files (the "Software"), to deal with\r
- the Software without restriction, including without limitation the rights to\r
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\r
- of the Software, and to permit persons to whom the Software is furnished to do\r
- so, subject to the following conditions:\r
-\r
- * Redistributions of source code must retain the above copyright notice,\r
- this list of conditions and the following disclaimers.\r
-\r
- * Redistributions in binary form must reproduce the above copyright notice,\r
- this list of conditions and the following disclaimers in the\r
- documentation and/or other materials provided with the distribution.\r
-\r
- * Neither the names of the LLVM Team, University of Illinois at\r
- Urbana-Champaign, nor the names of its contributors may be used to\r
- endorse or promote products derived from this Software without specific\r
- prior written permission.\r
-\r
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
- FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
- CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE\r
- SOFTWARE.\r
-**/\r
-\r
-\r
-#include "Llvm_int_lib.h"\r
-\r
-UINT64 __udivmoddi4(UINT64 a, UINT64 b, UINT64* rem);\r
-\r
-// Returns: a % b\r
-\r
-INT64\r
-__moddi3(INT64 a, INT64 b)\r
-{\r
- const int bits_in_dword_m1 = (int)(sizeof(INT64) * CHAR_BIT) - 1;\r
- INT64 s = b >> bits_in_dword_m1; // s = b < 0 ? -1 : 0\r
- b = (b ^ s) - s; // negate if s == -1\r
- s = a >> bits_in_dword_m1; // s = a < 0 ? -1 : 0\r
- a = (a ^ s) - s; // negate if s == -1\r
- INT64 r;\r
- __udivmoddi4(a, b, (UINT64*)&r);\r
- return (r ^ s) - s; // negate if s == -1\r
-}\r
-\r