mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-23 08:24:18 +00:00
Upload
Digital Research
This commit is contained in:
149
CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102a/clib/uldiv.s
Normal file
149
CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102a/clib/uldiv.s
Normal file
@@ -0,0 +1,149 @@
|
||||
*#include <portab.h>
|
||||
*long uldivr = 0;
|
||||
*
|
||||
*
|
||||
*long uldiv(al1,al2) /* unsigned long divide */
|
||||
*long al1,al2;
|
||||
*{
|
||||
*
|
||||
*#ifdef ALCYON
|
||||
* register long l1,l2;
|
||||
* /* you must modify comparisons in the assembler file
|
||||
* * for this routine to work.
|
||||
* */
|
||||
*#else
|
||||
* register unsigned long l1, l2;
|
||||
*#endif
|
||||
* register long q, b;
|
||||
*
|
||||
* l1 = al1;
|
||||
* l2 = al2;
|
||||
* if(l2==0) {
|
||||
* uldivr = 0x80000000;
|
||||
* return(0x80000000);
|
||||
* }
|
||||
* if(l2 > l1) { /** comparison (ble->bls) **/
|
||||
* uldivr = l1;
|
||||
* return(0);
|
||||
* }
|
||||
* if(l1==l2) {
|
||||
* q = 1;
|
||||
* l1 = 0;
|
||||
* goto doret;
|
||||
* }
|
||||
* b = 1; /* bit value */
|
||||
* while(l1>=l2) { /** comparison (blt->blo) **/
|
||||
* if( l2 > (l2<<1) ) /** comparison (bgt->bhi) **/
|
||||
* break; /* detect overflow */
|
||||
* l2 =<< 1;
|
||||
* b =<< 1;
|
||||
* }
|
||||
* q = 0;
|
||||
* while(b) { /* now do shifts and subtracts */
|
||||
* if(l1>=l2) { /** comparison (blt->blo) **/
|
||||
* q =| b;
|
||||
* l1 =- l2;
|
||||
* }
|
||||
* b =>> 1;
|
||||
* l2 =>> 1;
|
||||
* }
|
||||
*doret:
|
||||
* uldivr = l1;
|
||||
* return(q);
|
||||
*}
|
||||
*
|
||||
*
|
||||
.globl _uldivr
|
||||
.data
|
||||
_uldivr:
|
||||
.dc.w 0,0
|
||||
.globl _uldiv
|
||||
.text
|
||||
_uldiv:
|
||||
~~uldiv:
|
||||
~b=R4
|
||||
~q=R5
|
||||
~l1=R7
|
||||
~l2=R6
|
||||
~al1=8
|
||||
~al2=12
|
||||
link R14,#0
|
||||
movem.l R3-R7,-(sp)
|
||||
*line 20
|
||||
move.l 8(R14),R7
|
||||
*line 21
|
||||
move.l 12(R14),R6
|
||||
*line 22
|
||||
tst.l R6
|
||||
bne L2
|
||||
*line 23
|
||||
move.l #$80000000,_uldivr
|
||||
*line 24
|
||||
move.l #$80000000,R0
|
||||
bra L1
|
||||
L2:
|
||||
*line 26
|
||||
cmp.l R7,R6
|
||||
bls L3 *<<<<< ble
|
||||
*line 27
|
||||
move.l R7,_uldivr
|
||||
*line 28
|
||||
clr.l R0
|
||||
bra L1
|
||||
L3:
|
||||
*line 30
|
||||
cmp.l R6,R7
|
||||
bne L4
|
||||
*line 31
|
||||
move.l #1,R5
|
||||
*line 32
|
||||
clr.l R7
|
||||
bra L5
|
||||
L4:
|
||||
*line 35
|
||||
move.l #1,R4
|
||||
L7:
|
||||
*line 36
|
||||
cmp.l R6,R7
|
||||
blo L6 *<<<< blt
|
||||
*line 38
|
||||
move.l R6,R0
|
||||
asl.l #1,R0
|
||||
cmp.l R0,R6
|
||||
bhi L6 *<<<< bgt
|
||||
*line 39
|
||||
asl.l #1,R6
|
||||
*line 40
|
||||
asl.l #1,R4
|
||||
bra L7
|
||||
L6:
|
||||
*line 42
|
||||
clr.l R5
|
||||
L9:
|
||||
*line 43
|
||||
tst.l R4
|
||||
beq L8
|
||||
*line 44
|
||||
cmp.l R6,R7
|
||||
blo L10 *<<<< blt
|
||||
*line 45
|
||||
or.l R4,R5
|
||||
*line 46
|
||||
sub.l R6,R7
|
||||
L10:
|
||||
*line 48
|
||||
lsr.l #1,R4 *<<<< asr
|
||||
*line 49
|
||||
lsr.l #1,R6 *<<<< asr
|
||||
bra L9
|
||||
L8:L5:
|
||||
*line 52
|
||||
move.l R7,_uldivr
|
||||
*line 53
|
||||
move.l R5,R0
|
||||
bra L1
|
||||
L1:tst.l (sp)+
|
||||
movem.l (sp)+,R4-R7
|
||||
unlk R14
|
||||
rts
|
||||
.data
|
Reference in New Issue
Block a user