1276789Sdim//===-- muldf3vfp.S - Implement muldf3vfp ---------------------------------===// 2276789Sdim// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6276789Sdim// 7276789Sdim//===----------------------------------------------------------------------===// 8276789Sdim 9276789Sdim#include "../assembly.h" 10276789Sdim 11276789Sdim// 12276789Sdim// extern double __muldf3vfp(double a, double b); 13276789Sdim// 14276789Sdim// Multiplies two double precision floating point numbers using the Darwin 15276789Sdim// calling convention where double arguments are passsed in GPR pairs 16276789Sdim// 17276789Sdim .syntax unified 18276789Sdim .p2align 2 19276789SdimDEFINE_COMPILERRT_FUNCTION(__muldf3vfp) 20314564Sdim#if defined(COMPILER_RT_ARMHF_TARGET) 21314564Sdim vmul.f64 d0, d0, d1 22314564Sdim#else 23276789Sdim vmov d6, r0, r1 // move first param from r0/r1 pair into d6 24276789Sdim vmov d7, r2, r3 // move second param from r2/r3 pair into d7 25314564Sdim vmul.f64 d6, d6, d7 26276789Sdim vmov r0, r1, d6 // move result back to r0/r1 pair 27314564Sdim#endif 28276789Sdim bx lr 29276789SdimEND_COMPILERRT_FUNCTION(__muldf3vfp) 30309124Sdim 31309124SdimNO_EXEC_STACK_DIRECTIVE 32309124Sdim 33