1 //===-- call_apsr.S - Helpers for ARM EABI floating point tests -----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements helpers for ARM EABI floating point tests for the 11 // compiler_rt library. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "../../../../lib/builtins/assembly.h" 16 17 .syntax unified 18 // __attribute__((pcs("aapcs"))) 19 // int32_t call_apsr_d(double a, double b, void(*fn)(double, double)) { 20 // fn(a, b); 21 // return apsr; 22 // } 23 24 DEFINE_COMPILERRT_PRIVATE_FUNCTION(call_apsr_d) 25 push {lr} 26 ldr ip, [sp, #4] 27 blx ip 28 mrs r0, apsr 29 pop {pc} 30 END_COMPILERRT_FUNCTION(call_apsr_d) 31 32 // __attribute__((pcs("aapcs"))) 33 // int32_t call_apsr_f(float a, float b, void(*fn)(float, float)) { 34 // fn(a, b); 35 // return apsr; 36 // } 37 38 DEFINE_COMPILERRT_PRIVATE_FUNCTION(call_apsr_f) 39 push {lr} 40 blx r2 41 mrs r0, apsr 42 pop {pc} 43 END_COMPILERRT_FUNCTION(call_apsr_f) 44