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