some more changes to use VAX assembler

This commit is contained in:
ceriel 1990-01-12 10:29:26 +00:00
parent c9312a41da
commit 6dac59f2d4
74 changed files with 665 additions and 549 deletions

View file

@ -2,3 +2,4 @@ LIST
Makefile
compmodule
libem_s.a
end.s

View file

@ -1,25 +1,28 @@
# $Header$
all: libem_o.a
MACH=vax4
all: libem_o.a end.o
install: cp
cp: all
install: all
../../install libem_o.a tail_em
../../install end.o end_em
cmp: all
cmp: all
-../../compare libem_o.a tail_em
-../../compare end.o end_em
end.o: end.s
$(MACH) -I../../../h -c end.s
libem_o.a: libem_s.a
ASAR=ar ; export ASAR ;\
RANLIB=ranlib ; export RANLIB ;\
ASAR=aal ; export ASAR ;\
march . libem_o.a
clean:
rm -f *.o libem_o.a
opr:
opr :
make pr | opr
pr:
@pr `pwd`/Makefile
@arch pv libem_s.a | pr -h `pwd`/libem_s.a
@pr `pwd`/end.s

View file

@ -1,10 +1,12 @@
# $Header$
.globl .aar4
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .aar4
! $Header$
.aar4:
movl (sp)+,r2
movl (sp)+,r0
movl 8(r0),r1 # elementsize in r1
movl 8(r0),r1 ! elementsize in r1
subl3 (r0),(sp)+,r0
mull2 r1,r0
addl2 (sp)+,r0

View file

@ -1,20 +1,21 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .adf
# $Header$
! $Header$
.globl .adf
.adf:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq 1f
addf2 (sp)+,(sp)
jmp (r1)
L1:
1:
cmpl r0,$8
bneq L2
bneq 2f
addd2 (sp)+,(sp)
jmp (r1)
L2:
2:
pushl $EILLINS
jmp .fat

View file

@ -1,15 +1,16 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .adi
# $Header$
! $Header$
.globl .adi
.adi:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq 1f
addl2 (sp)+,(sp)
jmp (r1)
L1:
1:
pushl $EILLINS
jmp .fat

View file

@ -1,13 +1,15 @@
# $Header$
.globl .and
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .and
# bytes in r0
! $Header$
! bytes in r0
.and:
movl (sp)+,r3
addl3 r0,sp,r1
ashl $-2,r0,r0
L1:
1:
mcoml (sp)+,r2
bicl2 r2,(r1)+
sobgtr r0,L1
sobgtr r0,1b
jmp (r3)

View file

@ -1,16 +1,17 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .ass
# $Header$
! $Header$
.globl .ass
.ass:
movl (sp)+,r1
cmpl r0,$4
bneq Lerr
bneq 1f
movl (sp)+,r0
addl2 r0,sp
jmp (r1)
Lerr:
1:
pushl $EILLINS
jmp .fat

View file

@ -1,29 +1,30 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .bls
# $Header$
! $Header$
.globl .bls
.bls:
movl (sp)+,r3
cmpl r0,$4
bneq Lerr
movl (sp)+,r0 # number of bytes in r0
movl (sp)+,r1 # addresses in r1, r2
bneq 5f
movl (sp)+,r0 ! number of bytes in r0
movl (sp)+,r1 ! addresses in r1, r2
movl (sp)+,r2
blbc r0,L1
blbc r0,1f
movb (r2)+,(r1)+
L1:
bbc $1,r0,L2
1:
bbc $1,r0,2f
movw (r2)+,(r1)+
L2:
2:
ashl $-2,r0,r0
beql L4
L3:
beql 4f
3:
movl (r2)+,(r1)+
sobgtr r0,L3
L4:
sobgtr r0,3b
4:
jmp (r3)
Lerr:
5:
pushl $EILLINS
jmp .fat

View file

@ -1,33 +1,34 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cff
# $Header$
! $Header$
.globl .cff
.cff:
movl (sp)+,r1
movl (sp)+,r0
cmpl r0,$4
bneq Ldtd
bneq 1f
movl (sp)+,r0
cmpl r0,$4
bneq Lddf
bneq 2f
jmp (r1)
Lddf:
2:
cmpl r0,$8
bneq Lerr
bneq 4f
cvtdf (sp)+,-(sp)
jmp (r1)
Ldtd:
1:
movl (sp)+,r0
cmpl r0,$4
bneq Lddd
bneq 3f
cvtfd (sp)+,-(sp)
jmp (r1)
Lddd:
3:
cmpl r0,$8
bneq Lerr
bneq 4f
jmp (r1)
Lerr:
4:
pushl $EILLINS
jmp .fat

View file

@ -1,24 +1,25 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cfi
# $Header$
! $Header$
.globl .cfi
.cfi:
movl (sp)+,r1
movl (sp)+,r0
cmpl r0,$4
bneq Lerr
bneq 1f
movl (sp)+,r0
cmpl r0,$4
bneq Lddl
bneq 2f
cvtfl (sp)+,-(sp)
jmp (r1)
Lddl:
2:
cmpl r0,$8
bneq Lerr
bneq 1f
cvtdl (sp)+,-(sp)
jmp (r1)
Lerr:
1:
pushl $EILLINS
jmp .fat

View file

@ -1,37 +1,38 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cfu
# $Header$
! $Header$
.globl .cfu
.cfu:
movl (sp)+,r2
movpsl r1
bicl2 $~040,r1
bicpsw $040 # integer overflow traps must be ignored
bicpsw $040 ! integer overflow traps must be ignored
movl (sp)+,r0
cmpl (sp),$4
bneq Lddt
bneq 1f
tstl (sp)+
tstf (sp)
bgeq L1
bgeq 5f
mnegf (sp),(sp)
L1:
5:
cvtfl (sp)+,-(sp)
L2:
2:
cmpl r0,$4
bneq Lerr
bispsw r1 # restore trap enable bit
bneq 4f
bispsw r1 ! restore trap enable bit
jmp (r2)
Lddt:
1:
cmpl (sp)+,$8
bneq Lerr
bneq 4f
tstd (sp)
bgeq L3
bgeq 3f
mnegd (sp),(sp)
L3:
3:
cvtdl (sp)+,-(sp)
brb L2
Lerr:
br 2b
4:
pushl $EILLINS
jmp .fat

View file

@ -1,27 +1,28 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cif
# $Header$
! $Header$
.globl .cif
.cif:
movl (sp)+,r1
movl (sp)+,r0
cmpl r0,$4
bneq Ldbl
bneq Idbl
movl (sp)+,r0
cmpl r0,$4
bneq Lerr
bneq Ierr
cvtlf (sp)+,-(sp)
jmp (r1)
Ldbl:
Idbl:
cmpl r0,$8
bneq Lerr
bneq Ierr
movl (sp)+,r0
cmpl r0,$4
bneq Lerr
bneq Ierr
cvtld (sp)+,-(sp)
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,25 +1,26 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cii
# $Header$
! $Header$
.globl .cii
.cii:
movl (sp)+, r1
movl (sp)+, r0
cmpl (sp), $1
beql Lfrom1
beql Ifrom1
cmpl (sp), $2
beql Lfrom2
beql Ifrom2
cmpl (sp)+, $4
bgtr Lerr
bgtr Ierr
jmp (r1)
Lfrom1:
Ifrom1:
cvtbw 4(sp), 4(sp)
Lfrom2:
Ifrom2:
tstl (sp)+
cvtwl (sp), (sp)
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,13 +1,15 @@
# $Header$
.globl .cmand
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cmand
# bytes in r0
! $Header$
! bytes in r0
.cmand:
movl (sp)+,r2
addl3 r0,sp,r1
ashl $-2,r0,r0
L1:
I1:
bicl2 (sp)+,(r1)+
sobgtr r0,L1
sobgtr r0,I1
jmp (r2)

View file

@ -1,30 +1,31 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cmf
# $Header$
! $Header$
.globl .cmf
.cmf:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
clrl r0
cmpf (sp)+,(sp)+
brb L3
L1:
br I3
I1:
cmpl r0,$8
bneq Lerr
bneq Ierr
clrl r0
cmpd (sp)+,(sp)+
L3:
beql L2
bgtr L4
I3:
beql I2
bgtr I4
incl r0
brb L2
L4:
br I2
I4:
decl r0
L2:
I2:
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,23 +1,23 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cmi
# $Header$
.globl .cmi
! $Header$
.cmi:
movl (sp)+,r1
cmpl r0,$4
bneq Lerr
bneq Ierr
clrl r0
cmpl (sp)+,(sp)+
beql L1
bgtr L2
beql I1
bgtr I2
incl r0
brb L1
L2:
br I1
I2:
decl r0
L1:
I1:
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,16 +1,18 @@
# $Header$
.globl .cms
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cms
# bytes in r0
! $Header$
! bytes in r0
.cms:
movl (sp)+,r3
addl3 sp,r0,r1
addl3 r1,r0,r2
ashl $-2,r0,r0
L1:
I1:
cmpl (sp)+,(r1)+
bneq L2
sobgtr r0,L1
L2:
bneq I2
sobgtr r0,I1
I2:
movl r2,sp
jmp (r3)

View file

@ -1,23 +1,24 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cmu
# $Header$
! $Header$
.globl .cmu
.cmu:
movl (sp)+,r1
cmpl r0,$4
bneq Lerr
bneq Ierr
clrl r0
cmpl (sp)+,(sp)+
beqlu L1
bgtru L2
beqlu I1
bgtru I2
incl r0
brb L1
L2:
br I1
I2:
decl r0
L1:
I1:
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,12 +1,14 @@
# $Header$
.globl .com
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .com
# bytes in r0
! $Header$
! bytes in r0
.com:
movl (sp)+,r2
movl sp,r1
ashl $-2,r0,r0
L1:
I1:
mcoml (r1),(r1)+
sobgtr r0,L1
sobgtr r0,I1
jmp (r2)

View file

@ -1,22 +1,23 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .csa4
# $Header$
! $Header$
.globl .csa4
.csa4:
movl (sp)+,r0 # descriptor address
movl (sp)+,r1 # index
movl (r0)+,r2 # default
movl (sp)+,r0 ! descriptor address
movl (sp)+,r1 ! index
movl (r0)+,r2 ! default
subl2 (r0)+,r1
cmpl (r0)+,r1
blssu L1
blssu I1
movl (r0)[r1],r1
bneq L2
L1:
bneq I2
I1:
movl r2,r1
bneq L2
bneq I2
pushl $ECASE
jmp .fat
L2:
I2:
jmp (r1)

View file

@ -1,29 +1,30 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .csb4
# $Header$
! $Header$
.globl .csb4
.csb4:
movl (sp)+,r0 # descriptor address
movl (sp)+,r1 # index
pushl r4 # Save r4
movl (r0)+,r4 # default
movl (r0)+,r2 # number of cases
L1:
movl (sp)+,r0 ! descriptor address
movl (sp)+,r1 ! index
pushl r4 ! Save r4
movl (r0)+,r4 ! default
movl (r0)+,r2 ! number of cases
I1:
decl r2
blss L2
blss I2
movl (r0)+,r3
cmpl r1,r3
beql Lfound
tstl (r0)+ # useless address
brb L1
Lfound:
beql Ifound
tstl (r0)+ ! useless address
br I1
Ifound:
movl (r0)+,r4
L2:
I2:
movl r4,r0
beql a3
movl (sp)+,r4 # Restore r4
movl (sp)+,r4 ! Restore r4
jmp (r0)
a3:
pushl $ECASE

View file

@ -1,21 +1,21 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .csa
.define .csb
# $Header$
! $Header$
.globl .csa
.csa:
cmpl r0,$4
bneq Lillins
bneq Iillins
jmp .csa4
.globl .csb
.csb:
cmpl r0,$4
bneq Lillins
bneq Iillins
jmp .csb4
Lillins:
Iillins:
pushl $EILLINS
jmp .fat

View file

@ -1,34 +1,35 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cuf
# $Header$
! $Header$
.globl .cuf
.cuf:
movl (sp)+,r2
movl (sp)+,r0
movl (sp)+,r1
cmpl r1,$4
bneq Lerr
bneq Ierr
cmpl r0,$4
bneq Ldld
bneq Idld
cvtlf (sp)+,-(sp)
bgeq Lout
addf2 Ltwo32f,(sp)
Lout:
bgeq Iout
addf2 Itwo32f,(sp)
Iout:
jmp (r2)
Ldld:
Idld:
cmpl r0,$8
bneq Lerr
bneq Ierr
cvtld (sp)+,-(sp)
bgeq Lout
addd2 Ltwo32F,(sp)
bgeq Iout
addd2 Itwo32F,(sp)
jmp (r2)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat
.data
Ltwo32f:
.float 0f4294967296.0
Ltwo32F:
.double 0f4294967296.0
.sect .rom
Itwo32f:
.data1 0200,0117,00,00
Itwo32F:
.data1 0200,0117,00,00,00,00,00,00

View file

@ -1,18 +1,19 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cui
# $Header$
! $Header$
.globl .cui
.cui:
movl (sp)+,r1
movl (sp)+,r0
cmpl r0,$4
bneq Lerr
bneq Ierr
movl (sp)+,r0
cmpl r0,$4
bneq Lerr
bneq Ierr
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,16 +1,17 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .cuu
# $Header$
! $Header$
.globl .cuu
.cuu:
movl (sp)+,r1
cmpl (sp)+,$4
bneq Lerr
bneq Ierr
cmpl (sp)+, $4
bneq Lerr
bneq Ierr
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,16 +1,17 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .dus
# $Header$
! $Header$
.globl .dus
.dus:
movl (sp)+,r1
cmpl r0,$4
bneq Lerr
bneq Ierr
movl (sp)+,r0
pushl r1
jmp .dup
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,20 +1,21 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .dvf
# $Header$
! $Header$
.globl .dvf
.dvf:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
divf2 (sp)+,(sp)
jmp (r1)
L1:
I1:
cmpl r0,$8
bneq L2
bneq I2
divd2 (sp)+,(sp)
jmp (r1)
L2:
I2:
pushl $EILLINS
jmp .fat

View file

@ -1,15 +1,16 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .dvi
# $Header$
! $Header$
.globl .dvi
.dvi:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
divl2 (sp)+,(sp)
jmp (r1)
L1:
I1:
pushl $EILLINS
jmp .fat

View file

@ -1,13 +1,14 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .dvu
# $Header$
! $Header$
.globl .dvu
.dvu:
cmpl r0,$4
bneq Lerr
bneq Ierr
jmp .dvu4
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,22 +1,23 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .dvu4
# $Header$
! $Header$
.globl .dvu4
.dvu4:
movl (sp)+,r3
movl (sp)+,r2
blss L1
blss I1
movl (sp)+,r0
clrl r1
ediv r2,r0,r0,r1
jmp (r3)
L1:
I1:
cmpl (sp)+,r2
bgequ L2
bgequ I2
clrl r0
jmp (r3)
L2:
I2:
movl $1,r0
jmp (r3)

20
mach/vax4/libem/end.s Normal file
View file

@ -0,0 +1,20 @@
.define endtext,enddata,endbss,_etext,_edata,_end
.sect .text
.align 4
.sect .rom
.align 4
.sect .data
.align 4
.sect .bss
.align 4
.sect .end ! only for declaration of _end and endbss.
.sect .text
endtext:
_etext:
.sect .data
enddata:
_edata:
.sect .end
_end:
endbss:

View file

@ -1,18 +1,20 @@
# $Header$
.globl .exg
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .exg
# bytes in r0
! $Header$
! bytes in r0
.exg:
movl (sp)+,r3
addl3 sp,r0,r2
addl2 r0,r2
ashl $-2,r0,r1
L1:
I1:
movl -(r2),-(sp)
sobgtr r1,L1
sobgtr r1,I1
addl3 r0,r2,r1
L2:
I2:
movw -(r2),-(r1)
sobgtr r0,L2
sobgtr r0,I2
movl r1,sp
jmp (r3)

View file

@ -1,15 +1,17 @@
# $Header$
.globl .fat
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .fat
! $Header$
.fat:
pushl (sp)
jsb .trp
movl $L1,ap
movl $I1,ap
movl (sp)+,6(ap)
chmk (ap)+
halt
.data
L1: .word 1
.long 1
.long 0
.sect .rom
I1: .data2 1
.data4 1
.data4 0

View file

@ -1,28 +1,29 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .fef
# $Header$
! $Header$
.globl .fef
.fef:
movl (sp)+,r3
cmpl r0,$4
bneq L1
bneq I1
movf (sp)+,r0
jsb Lhulp
jsb Ihulp
movf r0,-(sp)
jmp (r3)
L1:
I1:
cmpl r0,$8
bneq L2
bneq I2
movd (sp)+,r0
jsb Lhulp
jsb Ihulp
movd r0,-(sp)
jmp (r3)
L2:
I2:
pushl $EILLINS
jmp .fat
Lhulp:
Ihulp:
extzv $7,$8,r0,r2
subl3 $128,r2,-(sp)
insv $128,$7,$8,r0

View file

@ -1,24 +1,27 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .fif
# $Header$
! $Header$
.globl .fif
.sect .rom
Ione: .data1 0200, 077, 00, 00, 00, 00, 00, 00
.fif:
movl (sp)+,r2
cmpl r0,$4
bneq L1
bneq I1
mulf3 (sp)+,(sp)+,r0
emodf r0,$0,$0f1.0,r1,-(sp)
emodf r0,$0,Ione,r1,-(sp)
subf3 (sp),r0,-(sp)
jmp (r2)
L1:
I1:
cmpl r0,$8
bneq L2
bneq I2
muld3 (sp)+,(sp)+,r0
emodd r0,$0,$0f1.0,r0,-(sp)
emodd r0,$0,Ione,r0,-(sp)
subd3 (sp),r0,-(sp)
jmp (r2)
L2:
I2:
pushl $EILLINS
jmp .fat

View file

@ -1,16 +1,17 @@
# $Header$
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .gto
! $Header$
.globl .strlb
.globl .gto
# Nonlocal goto.
# On the stack is a pointer to a block containing :
# 1. the new local base (ptr+8)
# 2. the new stack pointer (ptr+4)
# 3. the new program counter (ptr)
.extern .strlb
! Nonlocal goto.
! On the stack is a pointer to a block containing :
! 1. the new local base (ptr+8)
! 2. the new stack pointer (ptr+4)
! 3. the new program counter (ptr)
.gto:
movl (sp)+,r2
movl 4(r2),sp # Store new stack pointer
pushl (r2) # Push target address
pushl 8(r2) # Push new local base
jsb .strlb # Store in fp, compute ap
movl 4(r2),sp ! Store new stack pointer
pushl (r2) ! Push target address
pushl 8(r2) ! Push new local base
jsb .strlb ! Store in fp, compute ap
rsb

View file

@ -1,18 +1,20 @@
# $Header$
.globl .inn
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .inn
# bytes in r0
! $Header$
! bytes in r0
.inn:
movl (sp)+,r3
movl (sp)+,r1
ashl $3,r0,r2 # nr of bits in r2
ashl $3,r0,r2 ! nr of bits in r2
cmpl r1,r2
bgequ L2
bbc r1,(sp),L2
bgequ I2
bbc r1,(sp),I2
movl $1,r1
L1:
I1:
addl2 r0,sp
jmp (r3)
L2:
I2:
clrl r1
brb L1
br I1

View file

@ -1,12 +1,14 @@
# $Header$
.globl .ior
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .ior
# bytes in r0
! $Header$
! bytes in r0
.ior:
movl (sp)+,r2
addl3 r0,sp,r1
ashl $-2,r0,r0
L1:
I1:
bisl2 (sp)+,(r1)+
sobgtr r0,L1
sobgtr r0,I1
jmp (r2)

View file

@ -1,5 +1,7 @@
# $Header$
.globl .lar4
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .lar4
! $Header$
.lar4:
movl (sp)+,r2
@ -10,17 +12,17 @@
addl2 (sp)+,r0
addl2 r1,r0
cmpl r1,$1
bgtr L3
bgtr I3
movzbl -(r0),-(sp)
jmp (r2)
L3:
I3:
cmpl r1,$2
bgtr L2
bgtr I2
movzwl -(r0),-(sp)
jmp (r2)
L2:
I2:
ashl $-2,r1,r1
L1:
I1:
movl -(r0),-(sp)
sobgtr r1,L1
sobgtr r1,I1
jmp (r2)

View file

@ -1,31 +1,32 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .los
# $Header$
! $Header$
.globl .los
.los:
movl (sp)+,r2
cmpl r0,$4
beql L1
beql I1
pushl $EILLINS
jmp .fat
L1:
movl (sp)+,r0 # nbytes in r0
movl (sp)+,r1 # address in r1
I1:
movl (sp)+,r0 ! nbytes in r0
movl (sp)+,r1 ! address in r1
cmpl r0,$1
beql L2
beql I2
cmpl r0,$2
beql L3
beql I3
addl2 r0,r1
ashl $-2,r0,r0
L4:
I4:
movl -(r1),-(sp)
sobgtr r0,L4
sobgtr r0,I4
jmp (r2)
L2:
I2:
cvtbl (r1),-(sp)
jmp (r2)
L3:
I3:
cvtwl (r1),-(sp)
jmp (r2)

View file

@ -1,25 +1,27 @@
# $Header$
# special version to work with A68S, by CHL
.globl .lpb
# compute AB, given LB
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .lpb
! $Header$
! special version to work with A68S, by CHL
! compute AB, given LB
.lpb:
cmpl r0,fp
bneq L1
bneq I1
moval 4(ap),r0
rsb
L1:
movl 4(r0),r1 # mask for saved registers
addl2 $24,r0 # position of AB if no registers saved
movl $16,r2 # position of first bit to test
L2:
subl3 r2,$28,r3 # remaining size of mask
ffs r2,r3,r1,r2 # find first bit set in mask
beql L3 # no more bits set
addl2 $4,r0 # for each saved register
I1:
movl 4(r0),r1 ! mask for saved registers
addl2 $24,r0 ! position of AB if no registers saved
movl $16,r2 ! position of first bit to test
I2:
subl3 r2,$28,r3 ! remaining size of mask
ffs r2,r3,r1,r2 ! find first bit set in mask
beql I3 ! no more bits set
addl2 $4,r0 ! for each saved register
incl r2
jbr L2
L3:
extzv $30,$2,r1,r2 # Now find out about the stack alignment
# between fp and ap
addl2 r2,r0 # add alignment
jbr I2
I3:
extzv $30,$2,r1,r2 ! Now find out about the stack alignment
! between fp and ap
addl2 r2,r0 ! add alignment
rsb

View file

@ -1,7 +1,9 @@
# $Header$
.globl .lxa
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .lxa
! $Header$
.lxa:
jsb .lxl # Find local base
jsb .lpb # Convert to argument base
jsb .lxl ! Find local base
jsb .lpb ! Convert to argument base
rsb

View file

@ -1,14 +1,16 @@
# $Header$
.globl .lxl
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .lxl
# nlevels in r0 (>=2)
! $Header$
! nlevels in r0 (>=2)
.lxl:
pushl r0
decl (sp)
movl 4(ap),r0
L1:
I1:
jsb .lpb
movl (r0),r0
sobgtr (sp),L1
sobgtr (sp),I1
tstl (sp)+
rsb

View file

@ -1,20 +1,21 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .mlf
# $Header$
! $Header$
.globl .mlf
.mlf:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
mulf2 (sp)+,(sp)
jmp (r1)
L1:
I1:
cmpl r0,$8
bneq L2
bneq I2
muld2 (sp)+,(sp)
jmp (r1)
L2:
I2:
pushl $EILLINS
jmp .fat

View file

@ -1,15 +1,16 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .mli
# $Header$
! $Header$
.globl .mli
.mli:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
mull2 (sp)+,(sp)
jmp (r1)
L1:
I1:
pushl $EILLINS
jmp .fat

View file

@ -1,6 +1,8 @@
# $Header$
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .mon
! $Header$
.globl .mon
.mon:
pushl $EBADMON

View file

@ -1,20 +1,21 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .ngf
# $Header$
! $Header$
.globl .ngf
.ngf:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
mnegf (sp),(sp)
jmp (r1)
L1:
I1:
cmpl r0,$8
bneq L2
bneq I2
mnegd (sp),(sp)
jmp (r1)
L2:
I2:
pushl $EILLINS
jmp .fat

View file

@ -1,15 +1,16 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .ngi
# $Header$
! $Header$
.globl .ngi
.ngi:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
mnegl (sp),(sp)
jmp (r1)
L1:
I1:
pushl $EILLINS
jmp .fat

View file

@ -1,8 +1,9 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .nop
# $Header$
! $Header$
.globl .nop
.nop:
movl hol0+LINO_AD,r0

View file

@ -1,29 +1,33 @@
# $Header$
.globl printd
.globl printc
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define printd
.define printc
! $Header$
printd:
clrl r1
ediv $10,r0,r0,r1
beql L1
beql I1
pushl r1
jsb printd
movl (sp)+,r1
L1:
addb3 $'0,r1,r0
I1:
addb3 $'0',r1,r0
printc:
movb r0,Lch
movb r0,Ich
movl ap,r2
movl $L9,ap
movl $I9,ap
chmk $4
movl r2,ap
rsb
.data
L9:
.long 3
.long 2
.long Lch
.long 1
Lch: .word 0
.sect .rom
I9:
.data4 3
.data4 2
.data4 Ich
.data4 1
.sect .data
Ich: .data2 0

View file

@ -1,13 +1,14 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .rck
# $Header$
! $Header$
.globl .rck
.rck:
cmpl r0,$4
bneq Lerr
bneq Ierr
jmp .rck4
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,18 +1,19 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .rck4
# $Header$
! $Header$
.globl .rck4
.rck4:
movl (sp)+,r1
movl (sp)+,r0
cmpl (sp),(r0) # compare lower bound
blss Lerr
cmpl (sp),4(r0) # compare upper bound
bgtr Lerr
cmpl (sp),(r0) ! compare lower bound
blss Ierr
cmpl (sp),4(r0) ! compare upper bound
bgtr Ierr
jmp (r1)
Lerr:
Ierr:
pushl r1
pushl $ERANGE
jsb .trp

View file

@ -1,19 +1,20 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .rmi
# $Header$
! $Header$
.globl .rmi
.rmi:
movl (sp)+,r3
cmpl r0,$4
bneq L1
bneq I1
movl (sp)+,r2
movl (sp)+,r1
ashq $-32,r0,r0
ediv r2,r0,r1,r0
pushl r0
jmp (r3)
L1:
I1:
pushl $EILLINS
jmp .fat

View file

@ -1,15 +1,16 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .rmu
# $Header$
! $Header$
.globl .rmu
.rmu:
cmpl r0,$4
bneq Lerr
bneq Ierr
jsb .rmu4
pushl r0
rsb
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,18 +1,20 @@
# $Header$
.globl .rmu4
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .rmu4
! $Header$
.rmu4:
movl (sp)+,r3
movl (sp)+,r2
blss L1
blss I1
movl (sp)+,r0
clrl r1
ediv r2,r0,r1,r0
jmp (r3)
L1:
I1:
movl (sp)+,r0
cmpl r0,r2
blssu L2
blssu I2
subl2 r2,r0
L2:
I2:
jmp (r3)

View file

@ -1,16 +1,17 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .rol
# $Header$
! $Header$
.globl .rol
.rol:
movl (sp)+,r1
cmpl r0,$4
bneq Lerr
bneq Ierr
movl (sp)+,r0
rotl r0,(sp),(sp)
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,16 +1,17 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .ror
# $Header$
! $Header$
.globl .ror
.ror:
movl (sp)+,r1
cmpl r0,$4
bneq Lerr
bneq Ierr
subl3 (sp)+,$32,r0
rotl r0,(sp),(sp)
jmp (r1)
Lerr:
Ierr:
pushl $EILLINS
jmp .fat

View file

@ -1,5 +1,7 @@
# $Header$
.globl .sar4
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sar4
! $Header$
.sar4:
movl (sp)+,r2
@ -10,17 +12,17 @@
mull2 r1,r0
addl2 (sp)+,r0
cmpl r1,$1
bgtr L3
bgtr I3
cvtlb (sp)+,(r0)
jmp (r2)
L3:
I3:
cmpl r1,$2
bgtr L2
bgtr I2
cvtlw (sp)+,(r0)
jmp (r2)
L2:
I2:
ashl $-2,r1,r1
L1:
I1:
movl (sp)+,(r0)+
sobgtr r1,L1
sobgtr r1,I1
jmp (r2)

View file

@ -1,20 +1,21 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sbf
# $Header$
! $Header$
.globl .sbf
.sbf:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
subf2 (sp)+,(sp)
jmp (r1)
L1:
I1:
cmpl r0,$8
bneq L2
bneq I2
subd2 (sp)+,(sp)
jmp (r1)
L2:
I2:
pushl $EILLINS
jmp .fat

View file

@ -1,15 +1,16 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sbi
# $Header$
! $Header$
.globl .sbi
.sbi:
movl (sp)+,r1
cmpl r0,$4
bneq L1
bneq I1
subl2 (sp)+,(sp)
jmp (r1)
L1:
I1:
pushl $EILLINS
jmp .fat

View file

@ -1,5 +1,7 @@
# $Header$
.globl .sbs
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sbs
! $Header$
.sbs:
movl (sp)+,r1

View file

@ -1,25 +1,26 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .setx
# $Header$
! $Header$
.globl .setx
# bytes in r0
! bytes in r0
.setx:
movl (sp)+,r3
movl (sp)+,r1 # bitnumber in r1
movl (sp)+,r1 ! bitnumber in r1
subl3 r0,sp,r2
L1:
I1:
clrl -(sp)
cmpl sp,r2
bgtru L1
ashl $3,r0,r2 # number of bits in r2
bgtru I1
ashl $3,r0,r2 ! number of bits in r2
cmpl r1,r2
bgequ L2
bbcs r1,(sp),L3
L3:
bgequ I2
bbcs r1,(sp),I3
I3:
jmp (r3)
L2:
I2:
pushl $ESET
jsb .trp
jmp (r3)

View file

@ -1,5 +1,7 @@
# $Header$
.globl .sig
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sig
! $Header$
.sig:
movl (sp)+,r1

View file

@ -1,12 +1,14 @@
# $Header$
.globl .sim
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sim
! $Header$
.sim:
movl (sp)+,r0
movl (sp)+,.trpim # store ignore mask
bbc $5,.trpim,L3 # floating underflow to be ignored?
movl (sp)+,.trpim ! store ignore mask
bbc $5,.trpim,I3 ! floating underflow to be ignored?
bicpsw $0100
jmp (r0)
L3:
bispsw $0100 # enable underflow trap
I3:
bispsw $0100 ! enable underflow trap
jmp (r0)

View file

@ -1,17 +1,18 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sli
# $Header$
! $Header$
.globl .sli
.sli:
movl (sp)+,r2
cmpl r0,$4
bneq L1
bneq I1
movl (sp)+,r0
movl (sp)+,r1
ashl r0,r1,-(sp)
jmp (r2)
L1:
I1:
pushl $EILLINS
jmp .fat

View file

@ -1,18 +1,19 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sri
# $Header$
! $Header$
.globl .sri
.sri:
movl (sp)+,r2
cmpl r0,$4
bneq L1
bneq I1
movl (sp)+,r0
mnegl r0,r0
movl (sp)+,r1
ashl r0,r1,-(sp)
jmp (r2)
L1:
I1:
pushl $EILLINS
jmp .fat

View file

@ -1,8 +1,9 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sru
# $Header$
! $Header$
.globl .sru
.sru:
movl (sp)+,r3

View file

@ -1,8 +1,9 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .strhp
# $Header$
! $Header$
.globl .strhp
.strhp:
movl (sp)+,r1
@ -10,23 +11,23 @@
pushl r1
movl r0,.reghp
cmpl r0,.hplim
blssu L2
blssu I2
addl2 $02000,r0
bicl2 $0777,r0
movl r0,.hplim
movl ap,r1
movl $L9,ap
movl $I9,ap
chmk (ap)+
bcc L1
bcc I1
pushl $EHEAP
jsb .trp
rsb
L1:
I1:
movl r1,ap
L2:
I2:
rsb
.data
L9: .word 17
.long 1
.hplim: .long _end
.sect .data
I9: .data2 17
.data4 1
.hplim: .data4 _end

View file

@ -1,27 +1,29 @@
# $Header$
# revised version by CHL
.globl .strlb
# Store the value that is on the stack in fp.
# Compute ap.
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .strlb
! $Header$
! revised version by CHL
! Store the value that is on the stack in fp.
! Compute ap.
.strlb:
movl (sp)+,r3
movl (sp)+,fp
pushl r3
movl $20,ap # Compute argumentbase from local base.
# Distance is 5 longwords + the number of
# registers saved.
movl 4(fp),r3 # mask for saved registers
movl $16,r2 # position of first bit to test
L4:
subl3 r2,$28,r1 # remaining size of mask
ffs r2,r1,r3,r2 # find first bit set in mask
beql L5 # no more bits set
addl2 $4,ap # for each saved register
movl $20,ap ! Compute argumentbase from local base.
! Distance is 5 longwords + the number of
! registers saved.
movl 4(fp),r3 ! mask for saved registers
movl $16,r2 ! position of first bit to test
I4:
subl3 r2,$28,r1 ! remaining size of mask
ffs r2,r1,r3,r2 ! find first bit set in mask
beql I5 ! no more bits set
addl2 $4,ap ! for each saved register
incl r2
jbr L4
L5:
extzv $14,$2,6(fp),r3 # Now find out about the stack alignment
# between fp and ap
addl2 r3,ap # add alignment
jbr I4
I5:
extzv $14,$2,6(fp),r3 ! Now find out about the stack alignment
! between fp and ap
addl2 r3,ap ! add alignment
addl2 fp,ap
rsb

View file

@ -1,32 +1,33 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .sts
# $Header$
! $Header$
.globl .sts
.sts:
movl (sp)+,r2
cmpl r0,$4
beql L1
beql I1
pushl $EILLINS
jmp .fat
L1:
movl (sp)+,r0 # number of bytes in r0
movl (sp)+,r1 # address in r1
I1:
movl (sp)+,r0 ! number of bytes in r0
movl (sp)+,r1 ! address in r1
cmpl r0,$1
beql L3
beql I3
cmpl r0,$2
beql L4
beql I4
ashl $-2,r0,r0
L2:
I2:
movl (sp)+,(r1)+
sobgtr r0,L2
sobgtr r0,I2
jmp (r2)
L3:
I3:
movl (sp)+,r0
movb r0,(r1)
jmp (r2)
L4:
I4:
movl (sp)+,r0
movw r0,(r1)
jmp (r2)

View file

@ -1,5 +1,6 @@
# $Header$
.globl .trp
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .trp
! $Header$
.trp:
pushl r0
@ -7,46 +8,44 @@
movl 4(sp),8(sp)
movl (sp)+,(sp)
cmpl r0,$16
bgequ L1 # a trapnumber >= 16 cannot be ignored
bbc r0,.trpim,L1
bgequ I1 ! a trapnumber >= 16 cannot be ignored
bbc r0,.trpim,I1
movl (sp)+,r0
rsb
L1:
pushr $017776 # save registers
pushl r0 # trapnumber on stack
I1:
pushr $017776 ! save registers
pushl r0 ! trapnumber on stack
movl .trppc,r0
beql L2 # is there a user defined traphandler?
beql I2 ! is there a user defined traphandler?
clrl .trppc
calls $1,(r0) # if so, call it
popr $017776 # restore registers
calls $1,(r0) ! if so, call it
popr $017776 ! restore registers
movl (sp)+,r0
rsb
.set write,4
I2:
! Put the (octal) trapnumber in the zeroes in Iemes[].
L2:
# Put the (octal) trapnumber in the zeroes in Lemes[].
movl $Lemesend-9,r1 # Addres after last '0'.
movl $5,r2 # Max number of digits.
movl (sp),r0 # Trap number in r0.
L3:
bicw3 $0177770,r0,r3 # Lower 3 bits form lower octal digit.
bisb2 r3,-(r1) # Put them in the '0'.
ashl $-3,r0,r0 # Shift the 3 bits off.
sobgtr r2,L3
movl $Iemesend-9,r1 ! Addres after last '0'.
movl $5,r2 ! Max number of digits.
movl (sp),r0 ! Trap number in r0.
I3:
bicw3 $0177770,r0,r3 ! Lower 3 bits form lower octal digit.
bisb2 r3,-(r1) ! Put them in the '0'.
ashl $-3,r0,r0 ! Shift the 3 bits off.
sobgtr r2,I3
movl ap,r2
movl $Lwr,ap
chmk $write
movl $Iwr,ap
chmk $4 ! write
movl r2,ap
bpt
.data
Lemes:
.byte 'E,'M,' ,'t,'r,'a,'p,' ,'0,'0,'0,'0,'0,' ,'(,'o,'c,'t,'a,'l,'),0xa
Lemesend:
.sect .data
Iemes:
.data1 'E','M',' ','t','r','a','p',' ','0','0','0','0','0',' ','(','o','c','t','a','l',')',0xa
Iemesend:
.align 2
Lwr:
.long 3 # 3 arguments.
.long 2 # File descriptor 2.
.long Lemes # Address of character buffer.
.long Lemesend - Lemes # Number of characters to write.
Iwr:
.data4 3 ! 3 arguments.
.data4 2 ! File descriptor 2.
.data4 Iemes ! Address of character buffer.
.data4 Iemesend - Iemes ! Number of characters to write.

View file

@ -1,13 +1,15 @@
.globl hol0
.globl .reghp
.globl .trppc
.globl .trpim
.sect .text; .sect .rom; .sect .data; .sect .bss
.sect .data
.define hol0
.define .reghp
.define .trppc
.define .trpim
hol0:
.space 8
.trppc:
.space 4
.trpim:
.long 0
.data4 0
.reghp:
.long _end
.data4 _end

View file

@ -1,28 +1,27 @@
#include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .lar
.define .sar
.define .aar
# $Header$
! $Header$
.globl .lar
.lar:
cmpl r0,$4
bneq Lillins
bneq Iillins
jmp .lar4
.globl .sar
.sar:
cmpl r0,$4
bneq Lillins
bneq Iillins
jmp .sar4
.globl .aar
.aar:
cmpl r0,$4
bneq Lillins
bneq Iillins
jmp .aar4
Lillins:
Iillins:
pushl $EILLINS
jmp .fat

View file

@ -1,12 +1,14 @@
# $Header$
.globl .xor
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .xor
# bytes in r0
! $Header$
! bytes in r0
.xor:
movl (sp)+,r2
addl3 r0,sp,r1
ashl $-2,r0,r0
L1:
I1:
xorl2 (sp)+,(r1)+
sobgtr r0,L1
sobgtr r0,I1
jmp (r2)