|  | //===- subzero/runtime/szrt.c - Subzero runtime source ----------*- C++ -*-===// | 
|  | // | 
|  | //                        The Subzero Code Generator | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file implements wrappers for particular bitcode instructions | 
|  | // that are too uncommon and complex for a particular target to bother | 
|  | // implementing directly in Subzero target lowering.  This needs to be | 
|  | // compiled by some non-Subzero compiler. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #include <stdint.h> | 
|  |  | 
|  | uint32_t __Sz_fptoui_f32_i32(float value) { return (uint32_t)value; } | 
|  |  | 
|  | uint32_t __Sz_fptoui_f64_i32(double value) { return (uint32_t)value; } | 
|  |  | 
|  | uint64_t __Sz_fptoui_f32_i64(float Value) { return (uint64_t)Value; } | 
|  |  | 
|  | uint64_t __Sz_fptoui_f64_i64(double Value) { return (uint64_t)Value; } | 
|  |  | 
|  | int64_t __Sz_fptosi_f32_i64(float Value) { return (int64_t)Value; } | 
|  |  | 
|  | int64_t __Sz_fptosi_f64_i64(double Value) { return (int64_t)Value; } | 
|  |  | 
|  | float __Sz_uitofp_i32_f32(uint32_t Value) { return (float)Value; } | 
|  |  | 
|  | float __Sz_uitofp_i64_f32(uint64_t Value) { return (float)Value; } | 
|  |  | 
|  | double __Sz_uitofp_i32_f64(uint32_t Value) { return (double)Value; } | 
|  |  | 
|  | double __Sz_uitofp_i64_f64(uint64_t Value) { return (double)Value; } | 
|  |  | 
|  | float __Sz_sitofp_i64_f32(int64_t Value) { return (float)Value; } | 
|  |  | 
|  | double __Sz_sitofp_i64_f64(int64_t Value) { return (double)Value; } | 
|  |  | 
|  | // Other helper calls emitted by Subzero but not implemented here: | 
|  | // Compiler-rt: | 
|  | //   __udivsi3     - udiv i32 | 
|  | //   __divsi3      - sdiv i32 | 
|  | //   __umodsi3     - urem i32 | 
|  | //   __modsi3      - srem i32 | 
|  | //   __udivdi3     - udiv i64 | 
|  | //   __divdi3      - sdiv i64 | 
|  | //   __umoddi3     - urem i64 | 
|  | //   __moddi3      - srem i64 | 
|  | //   __popcountsi2 - call @llvm.ctpop.i32 | 
|  | //   __popcountdi2 - call @llvm.ctpop.i64 | 
|  | // libm: | 
|  | //   fmodf - frem f32 | 
|  | //   fmod  - frem f64 | 
|  | // libc: | 
|  | //   setjmp  - call @llvm.nacl.setjmp | 
|  | //   longjmp - call @llvm.nacl.longjmp | 
|  | //   memcpy  - call @llvm.memcpy.p0i8.p0i8.i32 | 
|  | //   memmove - call @llvm.memmove.p0i8.p0i8.i32 | 
|  | //   memset  - call @llvm.memset.p0i8.i32 | 
|  | // unsandboxed_irt: | 
|  | //   __nacl_read_tp | 
|  | //   __aeabi_read_tp [arm32 only] | 
|  | // MIPS runtime library: | 
|  | // __sync_fetch_and_add_8 | 
|  | // __sync_fetch_and_and_8 | 
|  | // __sync_fetch_and_or_8 | 
|  | // __sync_fetch_and_sub_8 | 
|  | // __sync_fetch_and_xor_8 | 
|  | // __sync_lock_test_and_set_8 | 
|  | // __sync_val_compare_and_swap_8 |