//===-- call_apsr.S - Helpers for ARM EABI floating point tests -----------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file implements helpers for ARM EABI floating point tests for the
// compiler_rt library.
//
//===----------------------------------------------------------------------===//

#include "../../../../lib/builtins/assembly.h"

.syntax unified
// __attribute__((pcs("aapcs")))
// int32_t call_apsr_d(double a, double b, void(*fn)(double, double)) {
//   fn(a, b);
//   return apsr;
// }

DEFINE_COMPILERRT_PRIVATE_FUNCTION(call_apsr_d)
    push {lr}
    ldr ip, [sp, #4]
    blx ip
    mrs r0, apsr
    pop {pc}
END_COMPILERRT_FUNCTION(call_apsr_d)

// __attribute__((pcs("aapcs")))
// int32_t call_apsr_f(float a, float b, void(*fn)(float, float)) {
//   fn(a, b);
//   return apsr;
// }

DEFINE_COMPILERRT_PRIVATE_FUNCTION(call_apsr_f)
    push {lr}
    blx r2
    mrs r0, apsr
    pop {pc}
END_COMPILERRT_FUNCTION(call_apsr_f)
