You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.5 KiB
75 lines
2.5 KiB
//===- 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
|