66 lines · plain
1//===----------------------Hexagon builtin routine ------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9 10 11 .macro FUNCTION_BEGIN name12 .text13 .p2align 514 .globl \name15 .type \name, @function16\name:17 .endm18 19 .macro FUNCTION_END name20 .size \name, . - \name21 .endm22 23 24FUNCTION_BEGIN __hexagon_modsi325 {26 p2 = cmp.ge(r0,#0)27 r2 = abs(r0)28 r1 = abs(r1)29 }30 {31 r3 = cl0(r2)32 r4 = cl0(r1)33 p0 = cmp.gtu(r1,r2)34 }35 {36 r3 = sub(r4,r3)37 if (p0) jumpr r3138 }39 {40 p1 = cmp.eq(r3,#0)41 loop0(1f,r3)42 r0 = r243 r2 = lsl(r1,r3)44 }45 .falign461:47 {48 p0 = cmp.gtu(r2,r0)49 if (!p0.new) r0 = sub(r0,r2)50 r2 = lsr(r2,#1)51 if (p1) r1 = #052 }:endloop053 {54 p0 = cmp.gtu(r2,r0)55 if (!p0.new) r0 = sub(r0,r1)56 if (p2) jumpr r3157 }58 {59 r0 = neg(r0)60 jumpr r3161 }62FUNCTION_END __hexagon_modsi363 64 .globl __qdsp_modsi365 .set __qdsp_modsi3, __hexagon_modsi366