blob: 20ca1d4d5ea1b7e92024d757256fe3843984b193 [file] [log] [blame]
buzbee54330722011-08-23 16:46:55 -07001// Copyright 2011 Google Inc. All Rights Reserved.
2
3#ifndef ART_SRC_RUNTIME_SUPPORT_H_
4#define ART_SRC_RUNTIME_SUPPORT_H_
5
Ian Rogersad42e132011-09-17 20:23:33 -07006/* Helper for both JNI and regular compiled code */
Ian Rogersff1ed472011-09-20 13:46:24 -07007extern "C" void art_deliver_exception_from_code(void*);
Ian Rogersad42e132011-09-17 20:23:33 -07008
buzbee54330722011-08-23 16:46:55 -07009#if defined(__arm__)
buzbee7b1b86d2011-08-26 18:59:10 -070010 /* Compiler helpers */
Ian Rogersb886da82011-09-23 16:27:54 -070011 extern "C" void* art_array_alloc_from_code(uint32_t, void*, int32_t);
12 extern "C" void* art_check_and_array_alloc_from_code(uint32_t, void*, int32_t);
Ian Rogerse51a5112011-09-23 14:16:35 -070013 extern "C" void art_can_put_array_element_from_code(void*, void*);
Ian Rogersff1ed472011-09-20 13:46:24 -070014 extern "C" void art_check_cast_from_code(void*, void*);
15 extern "C" void art_handle_fill_data_from_code(void*, void*);
Ian Rogerscbba6ac2011-09-22 16:28:37 -070016 extern "C" void* art_initialize_static_storage_from_code(uint32_t, void*);
Ian Rogersff1ed472011-09-20 13:46:24 -070017 extern "C" void art_invoke_interface_trampoline(void*, void*, void*, void*);
Ian Rogerscbba6ac2011-09-22 16:28:37 -070018 extern "C" void art_test_suspend();
Ian Rogersff1ed472011-09-20 13:46:24 -070019 extern "C" void art_throw_array_bounds_from_code(int32_t index, int32_t limit);
20 extern "C" void art_throw_div_zero_from_code();
21 extern "C" void art_throw_null_pointer_exception_from_code();
Ian Rogers932746a2011-09-22 18:57:50 -070022 extern "C" void art_throw_stack_overflow_from_code(void*);
Ian Rogersff1ed472011-09-20 13:46:24 -070023 extern "C" void art_unlock_object_from_code(void*, void*);
buzbee7b1b86d2011-08-26 18:59:10 -070024
25 /* Conversions */
26 extern "C" float __aeabi_i2f(int op1); // OP_INT_TO_FLOAT
27 extern "C" int __aeabi_f2iz(float op1); // OP_FLOAT_TO_INT
28 extern "C" float __aeabi_d2f(double op1); // OP_DOUBLE_TO_FLOAT
29 extern "C" double __aeabi_f2d(float op1); // OP_FLOAT_TO_DOUBLE
30 extern "C" double __aeabi_i2d(int op1); // OP_INT_TO_DOUBLE
31 extern "C" int __aeabi_d2iz(double op1); // OP_DOUBLE_TO_INT
32 extern "C" float __aeabi_l2f(long op1); // OP_LONG_TO_FLOAT
33 extern "C" double __aeabi_l2d(long op1); // OP_LONG_TO_DOUBLE
34
35 /* Single-precision FP arithmetics */
36 extern "C" float __aeabi_fadd(float a, float b); // OP_ADD_FLOAT[_2ADDR]
37 extern "C" float __aeabi_fsub(float a, float b); // OP_SUB_FLOAT[_2ADDR]
38 extern "C" float __aeabi_fdiv(float a, float b); // OP_DIV_FLOAT[_2ADDR]
39 extern "C" float __aeabi_fmul(float a, float b); // OP_MUL_FLOAT[_2ADDR]
40 extern "C" float fmodf(float a, float b); // OP_REM_FLOAT[_2ADDR]
41
42 /* Double-precision FP arithmetics */
43 extern "C" double __aeabi_dadd(double a, double b); // OP_ADD_DOUBLE[_2ADDR]
44 extern "C" double __aeabi_dsub(double a, double b); // OP_SUB_DOUBLE[_2ADDR]
45 extern "C" double __aeabi_ddiv(double a, double b); // OP_DIV_DOUBLE[_2ADDR]
46 extern "C" double __aeabi_dmul(double a, double b); // OP_MUL_DOUBLE[_2ADDR]
47 extern "C" double fmod(double a, double b); // OP_REM_DOUBLE[_2ADDR]
48
49 /* Integer arithmetics */
50 extern "C" int __aeabi_idivmod(int op1, int op2); // OP_REM_INT[_2ADDR|_LIT8|_LIT16]
51 extern "C" int __aeabi_idiv(int op1, int op2); // OP_DIV_INT[_2ADDR|_LIT8|_LIT16]
52
Ian Rogersff1ed472011-09-20 13:46:24 -070053 /* Long long arithmetics - OP_REM_LONG[_2ADDR] & OP_DIV_LONG[_2ADDR] */
54 extern "C" long long __aeabi_ldivmod(long long op1, long long op2);
55 extern "C" long long __aeabi_lmul(long long op1, long long op2);
Ian Rogerscbba6ac2011-09-22 16:28:37 -070056 extern "C" uint64_t art_shl_long(uint64_t, uint32_t);
57 extern "C" uint64_t art_shr_long(uint64_t, uint32_t);
58 extern "C" uint64_t art_ushr_long(uint64_t, uint32_t);
buzbee7b1b86d2011-08-26 18:59:10 -070059
buzbee54330722011-08-23 16:46:55 -070060#endif
61
buzbee54330722011-08-23 16:46:55 -070062#endif // ART_SRC_RUNTIME_SUPPORT_H_