1*3cab2bb3Spatrick//===----------------------Hexagon builtin routine ------------------------===// 2*3cab2bb3Spatrick// 3*3cab2bb3Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*3cab2bb3Spatrick// See https://llvm.org/LICENSE.txt for license information. 5*3cab2bb3Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*3cab2bb3Spatrick// 7*3cab2bb3Spatrick//===----------------------------------------------------------------------===// 8*3cab2bb3Spatrick 9*3cab2bb3Spatrick 10*3cab2bb3Spatrick .macro FUNCTION_BEGIN name 11*3cab2bb3Spatrick .text 12*3cab2bb3Spatrick .p2align 5 13*3cab2bb3Spatrick .globl \name 14*3cab2bb3Spatrick .type \name, @function 15*3cab2bb3Spatrick\name: 16*3cab2bb3Spatrick .endm 17*3cab2bb3Spatrick 18*3cab2bb3Spatrick .macro FUNCTION_END name 19*3cab2bb3Spatrick .size \name, . - \name 20*3cab2bb3Spatrick .endm 21*3cab2bb3Spatrick 22*3cab2bb3Spatrick 23*3cab2bb3SpatrickFUNCTION_BEGIN __hexagon_umodsi3 24*3cab2bb3Spatrick { 25*3cab2bb3Spatrick r2 = cl0(r0) 26*3cab2bb3Spatrick r3 = cl0(r1) 27*3cab2bb3Spatrick p0 = cmp.gtu(r1,r0) 28*3cab2bb3Spatrick } 29*3cab2bb3Spatrick { 30*3cab2bb3Spatrick r2 = sub(r3,r2) 31*3cab2bb3Spatrick if (p0) jumpr r31 32*3cab2bb3Spatrick } 33*3cab2bb3Spatrick { 34*3cab2bb3Spatrick loop0(1f,r2) 35*3cab2bb3Spatrick p1 = cmp.eq(r2,#0) 36*3cab2bb3Spatrick r2 = lsl(r1,r2) 37*3cab2bb3Spatrick } 38*3cab2bb3Spatrick .falign 39*3cab2bb3Spatrick1: 40*3cab2bb3Spatrick { 41*3cab2bb3Spatrick p0 = cmp.gtu(r2,r0) 42*3cab2bb3Spatrick if (!p0.new) r0 = sub(r0,r2) 43*3cab2bb3Spatrick r2 = lsr(r2,#1) 44*3cab2bb3Spatrick if (p1) r1 = #0 45*3cab2bb3Spatrick }:endloop0 46*3cab2bb3Spatrick { 47*3cab2bb3Spatrick p0 = cmp.gtu(r2,r0) 48*3cab2bb3Spatrick if (!p0.new) r0 = sub(r0,r1) 49*3cab2bb3Spatrick jumpr r31 50*3cab2bb3Spatrick } 51*3cab2bb3SpatrickFUNCTION_END __hexagon_umodsi3 52*3cab2bb3Spatrick 53*3cab2bb3Spatrick .globl __qdsp_umodsi3 54*3cab2bb3Spatrick .set __qdsp_umodsi3, __hexagon_umodsi3 55