aboutsummaryrefslogtreecommitdiff
path: root/amforth-6.5/avr8/words/umslashmod.asm
diff options
context:
space:
mode:
Diffstat (limited to 'amforth-6.5/avr8/words/umslashmod.asm')
-rw-r--r--amforth-6.5/avr8/words/umslashmod.asm62
1 files changed, 0 insertions, 62 deletions
diff --git a/amforth-6.5/avr8/words/umslashmod.asm b/amforth-6.5/avr8/words/umslashmod.asm
deleted file mode 100644
index 6adfbb1..0000000
--- a/amforth-6.5/avr8/words/umslashmod.asm
+++ /dev/null
@@ -1,62 +0,0 @@
-; ( ud u2 -- rem quot)
-; Arithmetics
-; unsigned division ud / u2 with remainder
-VE_UMSLASHMOD:
- .dw $ff06
- .db "um/mod"
- .dw VE_HEAD
- .set VE_HEAD = VE_UMSLASHMOD
-XT_UMSLASHMOD:
- .dw PFA_UMSLASHMOD
-PFA_UMSLASHMOD:
- movw temp4, tosl
-
- ld temp2, Y+
- ld temp3, Y+
-
- ld temp0, Y+
- ld temp1, Y+
-
-;; unsigned 32/16 -> 16r16 divide
-
-PFA_UMSLASHMODmod:
-
- ; set loop counter
- ldi temp6,$10
-
-PFA_UMSLASHMODmod_loop:
- ; shift left, saving high bit
- clr temp7
- lsl temp0
- rol temp1
- rol temp2
- rol temp3
- rol temp7
-
- ; try subtracting divisor
- cp temp2, temp4
- cpc temp3, temp5
- cpc temp7,zerol
-
- brcs PFA_UMSLASHMODmod_loop_control
-
-PFA_UMSLASHMODmod_subtract:
- ; dividend is large enough
- ; do the subtraction for real
- ; and set lowest bit
- inc temp0
- sub temp2, temp4
- sbc temp3, temp5
-
-PFA_UMSLASHMODmod_loop_control:
- dec temp6
- brne PFA_UMSLASHMODmod_loop
-
-PFA_UMSLASHMODmod_done:
- ; put remainder on stack
- st -Y,temp3
- st -Y,temp2
-
- ; put quotient on stack
- movw tosl, temp0
- jmp_ DO_NEXT