1*03ce13f7SAndroid Build Coastguard Worker //===- subzero/runtime/szrt.c - Subzero runtime source ----------*- C++ -*-===// 2*03ce13f7SAndroid Build Coastguard Worker // 3*03ce13f7SAndroid Build Coastguard Worker // The Subzero Code Generator 4*03ce13f7SAndroid Build Coastguard Worker // 5*03ce13f7SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*03ce13f7SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*03ce13f7SAndroid Build Coastguard Worker // 8*03ce13f7SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*03ce13f7SAndroid Build Coastguard Worker // 10*03ce13f7SAndroid Build Coastguard Worker // This file implements wrappers for particular bitcode instructions 11*03ce13f7SAndroid Build Coastguard Worker // that are too uncommon and complex for a particular target to bother 12*03ce13f7SAndroid Build Coastguard Worker // implementing directly in Subzero target lowering. This needs to be 13*03ce13f7SAndroid Build Coastguard Worker // compiled by some non-Subzero compiler. 14*03ce13f7SAndroid Build Coastguard Worker // 15*03ce13f7SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 16*03ce13f7SAndroid Build Coastguard Worker 17*03ce13f7SAndroid Build Coastguard Worker #include <stdint.h> 18*03ce13f7SAndroid Build Coastguard Worker __Sz_fptoui_f32_i32(float value)19*03ce13f7SAndroid Build Coastguard Workeruint32_t __Sz_fptoui_f32_i32(float value) { return (uint32_t)value; } 20*03ce13f7SAndroid Build Coastguard Worker __Sz_fptoui_f64_i32(double value)21*03ce13f7SAndroid Build Coastguard Workeruint32_t __Sz_fptoui_f64_i32(double value) { return (uint32_t)value; } 22*03ce13f7SAndroid Build Coastguard Worker __Sz_fptoui_f32_i64(float Value)23*03ce13f7SAndroid Build Coastguard Workeruint64_t __Sz_fptoui_f32_i64(float Value) { return (uint64_t)Value; } 24*03ce13f7SAndroid Build Coastguard Worker __Sz_fptoui_f64_i64(double Value)25*03ce13f7SAndroid Build Coastguard Workeruint64_t __Sz_fptoui_f64_i64(double Value) { return (uint64_t)Value; } 26*03ce13f7SAndroid Build Coastguard Worker __Sz_fptosi_f32_i64(float Value)27*03ce13f7SAndroid Build Coastguard Workerint64_t __Sz_fptosi_f32_i64(float Value) { return (int64_t)Value; } 28*03ce13f7SAndroid Build Coastguard Worker __Sz_fptosi_f64_i64(double Value)29*03ce13f7SAndroid Build Coastguard Workerint64_t __Sz_fptosi_f64_i64(double Value) { return (int64_t)Value; } 30*03ce13f7SAndroid Build Coastguard Worker __Sz_uitofp_i32_f32(uint32_t Value)31*03ce13f7SAndroid Build Coastguard Workerfloat __Sz_uitofp_i32_f32(uint32_t Value) { return (float)Value; } 32*03ce13f7SAndroid Build Coastguard Worker __Sz_uitofp_i64_f32(uint64_t Value)33*03ce13f7SAndroid Build Coastguard Workerfloat __Sz_uitofp_i64_f32(uint64_t Value) { return (float)Value; } 34*03ce13f7SAndroid Build Coastguard Worker __Sz_uitofp_i32_f64(uint32_t Value)35*03ce13f7SAndroid Build Coastguard Workerdouble __Sz_uitofp_i32_f64(uint32_t Value) { return (double)Value; } 36*03ce13f7SAndroid Build Coastguard Worker __Sz_uitofp_i64_f64(uint64_t Value)37*03ce13f7SAndroid Build Coastguard Workerdouble __Sz_uitofp_i64_f64(uint64_t Value) { return (double)Value; } 38*03ce13f7SAndroid Build Coastguard Worker __Sz_sitofp_i64_f32(int64_t Value)39*03ce13f7SAndroid Build Coastguard Workerfloat __Sz_sitofp_i64_f32(int64_t Value) { return (float)Value; } 40*03ce13f7SAndroid Build Coastguard Worker __Sz_sitofp_i64_f64(int64_t Value)41*03ce13f7SAndroid Build Coastguard Workerdouble __Sz_sitofp_i64_f64(int64_t Value) { return (double)Value; } 42*03ce13f7SAndroid Build Coastguard Worker 43*03ce13f7SAndroid Build Coastguard Worker // Other helper calls emitted by Subzero but not implemented here: 44*03ce13f7SAndroid Build Coastguard Worker // Compiler-rt: 45*03ce13f7SAndroid Build Coastguard Worker // __udivsi3 - udiv i32 46*03ce13f7SAndroid Build Coastguard Worker // __divsi3 - sdiv i32 47*03ce13f7SAndroid Build Coastguard Worker // __umodsi3 - urem i32 48*03ce13f7SAndroid Build Coastguard Worker // __modsi3 - srem i32 49*03ce13f7SAndroid Build Coastguard Worker // __udivdi3 - udiv i64 50*03ce13f7SAndroid Build Coastguard Worker // __divdi3 - sdiv i64 51*03ce13f7SAndroid Build Coastguard Worker // __umoddi3 - urem i64 52*03ce13f7SAndroid Build Coastguard Worker // __moddi3 - srem i64 53*03ce13f7SAndroid Build Coastguard Worker // __popcountsi2 - call @llvm.ctpop.i32 54*03ce13f7SAndroid Build Coastguard Worker // __popcountdi2 - call @llvm.ctpop.i64 55*03ce13f7SAndroid Build Coastguard Worker // libm: 56*03ce13f7SAndroid Build Coastguard Worker // fmodf - frem f32 57*03ce13f7SAndroid Build Coastguard Worker // fmod - frem f64 58*03ce13f7SAndroid Build Coastguard Worker // libc: 59*03ce13f7SAndroid Build Coastguard Worker // setjmp - call @llvm.nacl.setjmp 60*03ce13f7SAndroid Build Coastguard Worker // longjmp - call @llvm.nacl.longjmp 61*03ce13f7SAndroid Build Coastguard Worker // memcpy - call @llvm.memcpy.p0i8.p0i8.i32 62*03ce13f7SAndroid Build Coastguard Worker // memmove - call @llvm.memmove.p0i8.p0i8.i32 63*03ce13f7SAndroid Build Coastguard Worker // memset - call @llvm.memset.p0i8.i32 64*03ce13f7SAndroid Build Coastguard Worker // unsandboxed_irt: 65*03ce13f7SAndroid Build Coastguard Worker // __nacl_read_tp 66*03ce13f7SAndroid Build Coastguard Worker // __aeabi_read_tp [arm32 only] 67*03ce13f7SAndroid Build Coastguard Worker // MIPS runtime library: 68*03ce13f7SAndroid Build Coastguard Worker // __sync_fetch_and_add_8 69*03ce13f7SAndroid Build Coastguard Worker // __sync_fetch_and_and_8 70*03ce13f7SAndroid Build Coastguard Worker // __sync_fetch_and_or_8 71*03ce13f7SAndroid Build Coastguard Worker // __sync_fetch_and_sub_8 72*03ce13f7SAndroid Build Coastguard Worker // __sync_fetch_and_xor_8 73*03ce13f7SAndroid Build Coastguard Worker // __sync_lock_test_and_set_8 74*03ce13f7SAndroid Build Coastguard Worker // __sync_val_compare_and_swap_8 75