| //===- 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 |