Add original unix v6
This commit is contained in:
@@ -0,0 +1,320 @@
|
||||
/
|
||||
/
|
||||
|
||||
/ rc -- complex arithmetic
|
||||
|
||||
.globl c8c16
|
||||
.globl c16c8
|
||||
.globl i4c8
|
||||
.globl r4c8
|
||||
.globl r8c8
|
||||
.globl i4c16
|
||||
.globl r4c16
|
||||
.globl r8c16
|
||||
.globl cad8
|
||||
.globl csb8
|
||||
.globl cmp8
|
||||
.globl cdv8
|
||||
.globl cng8
|
||||
.globl cad16
|
||||
.globl csb16
|
||||
.globl cmp16
|
||||
.globl cdv16
|
||||
.globl cng16
|
||||
.globl rval16
|
||||
.globl rval16p
|
||||
.globl gas16
|
||||
.globl ceq8
|
||||
.globl cne8
|
||||
.globl ceq16
|
||||
.globl cne16
|
||||
|
||||
.globl cpi8
|
||||
.globl cpi16
|
||||
|
||||
one = 040200
|
||||
a = r2
|
||||
b = r3
|
||||
c = r4
|
||||
d = r5
|
||||
|
||||
e = r0
|
||||
f = r1
|
||||
|
||||
gas16:
|
||||
mov 16.(sp),r0
|
||||
setd
|
||||
movf (sp)+,a
|
||||
movf (sp)+,b
|
||||
tst (sp)+
|
||||
movf a,(r0)+
|
||||
movf b,(r0)+
|
||||
jmp *(r4)+
|
||||
|
||||
rval16p:
|
||||
mov r3,r0
|
||||
add (r4)+,r0
|
||||
mov (r0),r0
|
||||
br 1f
|
||||
|
||||
rval16:
|
||||
mov (r4)+,r0
|
||||
1:
|
||||
setd
|
||||
movf (r0)+,a
|
||||
movf (r0)+,b
|
||||
movf b,-(sp)
|
||||
movf a,-(sp)
|
||||
jmp *(r4)+
|
||||
|
||||
cad16:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
cad8:
|
||||
setf
|
||||
1:
|
||||
jsr pc,garg
|
||||
addf a,e
|
||||
addf b,f
|
||||
br sarg
|
||||
|
||||
csb16:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
csb8:
|
||||
setf
|
||||
1:
|
||||
jsr pc,garg
|
||||
subf a,e
|
||||
negf e
|
||||
subf b,f
|
||||
negf f
|
||||
br sarg
|
||||
|
||||
cmp16:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
cmp8:
|
||||
setf
|
||||
1:
|
||||
jsr pc,garg
|
||||
mulf a,e
|
||||
mulf b,f
|
||||
subf f,e
|
||||
mulf d,a
|
||||
mulf c,b
|
||||
movf a,f
|
||||
addf b,f
|
||||
|
||||
sarg:
|
||||
movf f,-(sp)
|
||||
movf e,-(sp)
|
||||
jmp *(r4)+
|
||||
|
||||
cdv16:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
cdv8:
|
||||
setf
|
||||
1:
|
||||
divide:
|
||||
jsr pc,garg
|
||||
absf e
|
||||
absf f
|
||||
cmpf e,f
|
||||
cfcc
|
||||
blt 1f
|
||||
|
||||
/ algorithm #1 |c| > |d|
|
||||
|
||||
movf d,e
|
||||
divf c,e / r = d/c
|
||||
movf d,f
|
||||
mulf e,f
|
||||
addf c,f / x = c+rd
|
||||
movf f,c
|
||||
movf a,f
|
||||
mulf e,f
|
||||
negf f
|
||||
addf b,f
|
||||
mulf b,e
|
||||
addf a,e
|
||||
divf c,e
|
||||
divf c,f
|
||||
br sarg
|
||||
|
||||
/ algorithm #2 |c| < |d|
|
||||
|
||||
1:
|
||||
movf c,e
|
||||
divf d,e / r = c/d
|
||||
movf c,f
|
||||
mulf e,f
|
||||
addf d,f / x = d+rc
|
||||
movf f,c
|
||||
movf b,f
|
||||
mulf e,f
|
||||
subf a,f
|
||||
mulf a,e
|
||||
addf b,e
|
||||
divf c,e
|
||||
divf c,f
|
||||
br sarg
|
||||
|
||||
cng16:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
cng8:
|
||||
setf
|
||||
1:
|
||||
movf (sp)+,a
|
||||
negf a
|
||||
negf (sp)
|
||||
movf a,-(sp)
|
||||
jmp *(r4)+
|
||||
|
||||
/ setup the following registers
|
||||
/ (a,bi) +o (c,di) -> (e+fi)
|
||||
/ a,b,c,d are input
|
||||
/ e,f are output and also contain
|
||||
/ c,d on input
|
||||
|
||||
garg:
|
||||
mov (sp)+,r0
|
||||
movf (sp)+,e
|
||||
movf e,c
|
||||
movf (sp)+,f
|
||||
movf f,d
|
||||
movf (sp)+,a
|
||||
movf (sp)+,b
|
||||
jmp (r0)
|
||||
|
||||
i4c8:
|
||||
setf
|
||||
br 1f
|
||||
|
||||
i4c16:
|
||||
setd
|
||||
1:
|
||||
setl
|
||||
movif (sp)+,fr0
|
||||
br 2f
|
||||
|
||||
r4c8:
|
||||
setf
|
||||
br 1f
|
||||
|
||||
r8c16:
|
||||
setd
|
||||
1:
|
||||
movf (sp)+,fr0
|
||||
br 2f
|
||||
|
||||
r4c16:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
r8c8:
|
||||
setf
|
||||
1:
|
||||
movof (sp)+,fr0
|
||||
2:
|
||||
clrf -(sp)
|
||||
movf fr0,-(sp)
|
||||
jmp *(r4)+
|
||||
|
||||
c16c8:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
c8c16:
|
||||
setf
|
||||
1:
|
||||
movf (sp)+,r0
|
||||
movf (sp)+,r1
|
||||
movfo r1,-(sp)
|
||||
movfo r0,-(sp)
|
||||
jmp *(r4)+
|
||||
|
||||
ceq16:
|
||||
setd
|
||||
br 1f
|
||||
ceq8:
|
||||
setf
|
||||
1:
|
||||
mov $1,r1
|
||||
br 2f
|
||||
|
||||
cne16:
|
||||
setd
|
||||
br 1f
|
||||
|
||||
cne8:
|
||||
setf
|
||||
1:
|
||||
clr r1
|
||||
2:
|
||||
jsr pc,garg
|
||||
cmpf c,a
|
||||
cfcc
|
||||
bne 1f
|
||||
cmpf d,b
|
||||
cfcc
|
||||
beq 2f
|
||||
1:
|
||||
inc r1
|
||||
bic $2,r1
|
||||
2:
|
||||
mov r1,-(sp)
|
||||
jmp *(r4)+
|
||||
|
||||
cpi8:
|
||||
setf
|
||||
br 1f
|
||||
|
||||
cpi16:
|
||||
setd
|
||||
1:
|
||||
clr r0
|
||||
tst (sp)+
|
||||
mov (sp)+,r1
|
||||
bge 1f
|
||||
inc r0
|
||||
neg r1
|
||||
1:
|
||||
movf (sp)+,fr0
|
||||
movf fr0,fr4
|
||||
movf (sp)+,fr0
|
||||
movf fr0,fr5
|
||||
movf $one,fr0
|
||||
clrf fr1
|
||||
1:
|
||||
dec r1
|
||||
bmi 1f
|
||||
movf fr0,fr2
|
||||
movf fr1,fr3
|
||||
mulf fr4,fr0
|
||||
mulf fr4,fr1
|
||||
mulf fr5,fr2
|
||||
mulf fr5,fr3
|
||||
subf fr3,fr0
|
||||
addf fr2,fr1
|
||||
br 1b
|
||||
1:
|
||||
tst r0
|
||||
beq 1f
|
||||
clrf -(sp)
|
||||
movf $one,fr2
|
||||
movf fr2,-(sp)
|
||||
movf fr1,-(sp)
|
||||
movf fr0,-(sp)
|
||||
jmp divide
|
||||
1:
|
||||
movf fr1,-(sp)
|
||||
movf fr0,-(sp)
|
||||
jmp *(r4)+
|
||||
Reference in New Issue
Block a user