1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%verify "executed" 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* EABI appears to have Java-style conversions of +inf/-inf/NaN */ 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project%include "armv5te/unop.S" {"instr":"bl __aeabi_f2iz"} 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#if 0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@include "armv5te/unop.S" {"instr":"bl f2i_doconv"} 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project@break 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Convert the float in r0 to an int in r0. 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We have to clip values to int min/max per the specification. The 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * expected common case is a "reasonable" value that converts directly 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to modest integer. The EABI convert function isn't doing this for us. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectf2i_doconv: 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stmfd sp!, {r4, lr} 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0x4f000000 @ (float)maxint 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r4, r0 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpge @ is arg >= maxint? 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mvnne r0, #0x80000000 @ return maxint (7fffffff) 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, #0xcf000000 @ (float)minint 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmple @ is arg <= minint? 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ nonzero == yes 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project movne r0, #0x80000000 @ return minint (80000000) 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmnefd sp!, {r4, pc} 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r1, r4 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_fcmpeq @ is arg == self? 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cmp r0, #0 @ zero == no 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmeqfd sp!, {r4, pc} @ return zero for NaN 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mov r0, r4 @ recover arg 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bl __aeabi_f2iz @ convert float to int 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ldmfd sp!, {r4, pc} 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#endif 41