10bf65c64SMarek Vasut/* 20bf65c64SMarek Vasut * linux/arch/arm/lib/muldi3.S 30bf65c64SMarek Vasut * 40bf65c64SMarek Vasut * Author: Nicolas Pitre 50bf65c64SMarek Vasut * Created: Oct 19, 2005 60bf65c64SMarek Vasut * Copyright: Monta Vista Software, Inc. 70bf65c64SMarek Vasut * 80bf65c64SMarek Vasut * SPDX-License-Identifier: GPL-2.0 90bf65c64SMarek Vasut */ 100bf65c64SMarek Vasut 110bf65c64SMarek Vasut#include <linux/linkage.h> 120bf65c64SMarek Vasut#include <asm/assembler.h> 130bf65c64SMarek Vasut 140bf65c64SMarek Vasut#ifdef __ARMEB__ 150bf65c64SMarek Vasut#define xh r0 160bf65c64SMarek Vasut#define xl r1 170bf65c64SMarek Vasut#define yh r2 180bf65c64SMarek Vasut#define yl r3 190bf65c64SMarek Vasut#else 200bf65c64SMarek Vasut#define xl r0 210bf65c64SMarek Vasut#define xh r1 220bf65c64SMarek Vasut#define yl r2 230bf65c64SMarek Vasut#define yh r3 240bf65c64SMarek Vasut#endif 250bf65c64SMarek Vasut 26*b2f18584SStephen Warren.pushsection .text.__muldi3, "ax" 270bf65c64SMarek VasutENTRY(__muldi3) 280bf65c64SMarek VasutENTRY(__aeabi_lmul) 290bf65c64SMarek Vasut 300bf65c64SMarek Vasut mul xh, yl, xh 310bf65c64SMarek Vasut mla xh, xl, yh, xh 320bf65c64SMarek Vasut mov ip, xl, lsr #16 330bf65c64SMarek Vasut mov yh, yl, lsr #16 340bf65c64SMarek Vasut bic xl, xl, ip, lsl #16 350bf65c64SMarek Vasut bic yl, yl, yh, lsl #16 360bf65c64SMarek Vasut mla xh, yh, ip, xh 370bf65c64SMarek Vasut mul yh, xl, yh 380bf65c64SMarek Vasut mul xl, yl, xl 390bf65c64SMarek Vasut mul ip, yl, ip 400bf65c64SMarek Vasut adds xl, xl, yh, lsl #16 410bf65c64SMarek Vasut adc xh, xh, yh, lsr #16 420bf65c64SMarek Vasut adds xl, xl, ip, lsl #16 430bf65c64SMarek Vasut adc xh, xh, ip, lsr #16 440bf65c64SMarek Vasut ret lr 450bf65c64SMarek Vasut 460bf65c64SMarek VasutENDPROC(__muldi3) 470bf65c64SMarek VasutENDPROC(__aeabi_lmul) 48*b2f18584SStephen Warren.popsection 49