From b00a52ea9b506279390aad76aafe02acaaed2a6f Mon Sep 17 00:00:00 2001 From: Madeline Busig Date: Mon, 25 Mar 2024 17:11:49 -0600 Subject: [PATCH] Add armv4t assembly macros for division by 10^x, x=[1,9] --- include/mtl/armv4t/asm/math.s | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/include/mtl/armv4t/asm/math.s b/include/mtl/armv4t/asm/math.s index 2020215..9333c3e 100644 --- a/include/mtl/armv4t/asm/math.s +++ b/include/mtl/armv4t/asm/math.s @@ -15,6 +15,54 @@ lsrs \rd, $3 .endm +.macro udiv100 rd, rx, rt + ldr \rt, =0x51EB851F + umull \rt, \rd, \rx, \rt + lsrs \rd, $5 +.endm + +.macro udiv1000 rd, rx, rt + ldr \rt, =0x10624DD3 + umull \rt, \rd, \rx, \rt + lsrs \rd, $6 +.endm + +.macro udiv10000 rd, rx, rt + ldr \rt, =0xD1B71759 + umull \rt, \rd, \rx, \rt + lsrs \rd, $13 +.endm + +.macro udiv100000 rd, rx, rt + ldr \rt, =0x29f17 + umull \rt, \rd, \rx, \rt + lsrs \rd, $2 +.endm + +.macro udiv1000000 rd, rx, rt + ldr \rt, =0x431BDE83 + umull \rt, \rd, \rx, \rt + lsrs \rd, $18 +.endm + +.macro udiv10000000 rd, rx, rt + ldr \rt, =0x6B5FCA6B + umull \rt, \rd, \rx, \rt + lsrs \rd, $22 +.endm + +.macro udiv100000000 rd, rx, rt + ldr \rt, =0x55E63B89 + umull \rt, \rd, \rx, \rt + lsrs \rd, $25 +.endm + +.macro udiv1000000000 rd, rx, rt + ldr \rt, =0x44b82fa1 + umull \rt, \rd, \rx, \rt + lsrs \rd, $28 +.endm + /* * Calculates rx % 10 and places the result in rd. Clobbers the value of * temporary register rt