84 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_divsi325 {26 p0 = cmp.ge(r0,#0)27 p1 = cmp.ge(r1,#0)28 r1 = abs(r0)29 r2 = abs(r1)30 }31 {32 r3 = cl0(r1)33 r4 = cl0(r2)34 r5 = sub(r1,r2)35 p2 = cmp.gtu(r2,r1)36 }37#if (__HEXAGON_ARCH__ == 60)38 {39 r0 = #040 p1 = xor(p0,p1)41 p0 = cmp.gtu(r2,r5)42 }43 if (p2) jumpr r3144#else45 {46 r0 = #047 p1 = xor(p0,p1)48 p0 = cmp.gtu(r2,r5)49 if (p2) jumpr r3150 }51#endif52 {53 r0 = mux(p1,#-1,#1)54 if (p0) jumpr r3155 r4 = sub(r4,r3)56 r3 = #157 }58 {59 r0 = #060 r3:2 = vlslw(r3:2,r4)61 loop0(1f,r4)62 }63 .falign641:65 {66 p0 = cmp.gtu(r2,r1)67 if (!p0.new) r1 = sub(r1,r2)68 if (!p0.new) r0 = add(r0,r3)69 r3:2 = vlsrw(r3:2,#1)70 }:endloop071 {72 p0 = cmp.gtu(r2,r1)73 if (!p0.new) r0 = add(r0,r3)74 if (!p1) jumpr r3175 }76 {77 r0 = neg(r0)78 jumpr r3179 }80FUNCTION_END __hexagon_divsi381 82 .globl __qdsp_divsi383 .set __qdsp_divsi3, __hexagon_divsi384