Squashed backup commit (no shallow-clone history issues) of xiaomi-mt6833-dev/kernel_xiaomi_mt6833 (lineage-23.2 branch, upstream commit 9eece662e) plus all fixes applied to get everpal_defconfig building clean against a modern (GCC 15.2.0) toolchain -- see the previous commit message on the lineage-23.2 branch (also in this repo history is not available here since this is a squashed snapshot; full incremental history lives in the local DL380 checkout and the upstream GitHub remote). Upstream: https://github.com/xiaomi-mt6833-dev/kernel_xiaomi_mt6833 (lineage-23.2)
74 lines
1.0 KiB
ArmAsm
74 lines
1.0 KiB
ArmAsm
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#include "libgcc.h"
|
|
|
|
; numerator in A0/A1
|
|
; denominator in A2/A3
|
|
.global __modsi3
|
|
__modsi3:
|
|
PUSHP S2P
|
|
bsr modnorm
|
|
bsr __divsi3
|
|
mov.l er3,er0
|
|
bra exitdiv
|
|
|
|
.global __umodsi3
|
|
__umodsi3:
|
|
bsr __udivsi3:16
|
|
mov.l er3,er0
|
|
rts
|
|
|
|
.global __divsi3
|
|
__divsi3:
|
|
PUSHP S2P
|
|
bsr divnorm
|
|
bsr __udivsi3:16
|
|
|
|
; examine what the sign should be
|
|
exitdiv:
|
|
btst #3,S2L
|
|
beq reti
|
|
|
|
; should be -ve
|
|
neg.l A0P
|
|
|
|
reti:
|
|
POPP S2P
|
|
rts
|
|
|
|
divnorm:
|
|
mov.l A0P,A0P ; is the numerator -ve
|
|
stc ccr,S2L ; keep the sign in bit 3 of S2L
|
|
bge postive
|
|
|
|
neg.l A0P ; negate arg
|
|
|
|
postive:
|
|
mov.l A1P,A1P ; is the denominator -ve
|
|
bge postive2
|
|
|
|
neg.l A1P ; negate arg
|
|
xor.b #0x08,S2L ; toggle the result sign
|
|
|
|
postive2:
|
|
rts
|
|
|
|
;; Basically the same, except that the sign of the divisor determines
|
|
;; the sign.
|
|
modnorm:
|
|
mov.l A0P,A0P ; is the numerator -ve
|
|
stc ccr,S2L ; keep the sign in bit 3 of S2L
|
|
bge mpostive
|
|
|
|
neg.l A0P ; negate arg
|
|
|
|
mpostive:
|
|
mov.l A1P,A1P ; is the denominator -ve
|
|
bge mpostive2
|
|
|
|
neg.l A1P ; negate arg
|
|
|
|
mpostive2:
|
|
rts
|
|
|
|
.end
|