^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Copyright (c) 2021, The Linux Foundation. All rights reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) SYM_FUNC_START(__hexagon_modsi3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) p2 = cmp.ge(r0,#0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) r2 = abs(r0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) r1 = abs(r1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) r3 = cl0(r2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) r4 = cl0(r1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) p0 = cmp.gtu(r1,r2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) r3 = sub(r4,r3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) if (p0) jumpr r31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) p1 = cmp.eq(r3,#0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) loop0(1f,r3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) r0 = r2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) r2 = lsl(r1,r3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) .falign
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) p0 = cmp.gtu(r2,r0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) if (!p0.new) r0 = sub(r0,r2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) r2 = lsr(r2,#1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) if (p1) r1 = #0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) }:endloop0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) p0 = cmp.gtu(r2,r0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) if (!p0.new) r0 = sub(r0,r1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) if (p2) jumpr r31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) r0 = neg(r0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) jumpr r31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) SYM_FUNC_END(__hexagon_modsi3)