xref: /aosp_15_r20/external/swiftshader/third_party/subzero/runtime/szrt.c (revision 03ce13f70fcc45d86ee91b7ee4cab1936a95046e)
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 Worker uint32_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 Worker uint32_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 Worker uint64_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 Worker uint64_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 Worker int64_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 Worker int64_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 Worker float __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 Worker float __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 Worker double __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 Worker double __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 Worker float __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 Worker double __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