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 Makefile
compmodule compmodule
libem_s.a libem_s.a
end.s

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,22 +1,23 @@
#include "em_abs.h" #include "em_abs.h"
.sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.define .dvu4
# $Header$ ! $Header$
.globl .dvu4
.dvu4: .dvu4:
movl (sp)+,r3 movl (sp)+,r3
movl (sp)+,r2 movl (sp)+,r2
blss L1 blss I1
movl (sp)+,r0 movl (sp)+,r0
clrl r1 clrl r1
ediv r2,r0,r0,r1 ediv r2,r0,r0,r1
jmp (r3) jmp (r3)
L1: I1:
cmpl (sp)+,r2 cmpl (sp)+,r2
bgequ L2 bgequ I2
clrl r0 clrl r0
jmp (r3) jmp (r3)
L2: I2:
movl $1,r0 movl $1,r0
jmp (r3) 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$ .sect .text; .sect .rom; .sect .data; .sect .bss; .sect .text
.globl .exg .define .exg
# bytes in r0 ! $Header$
! bytes in r0
.exg: .exg:
movl (sp)+,r3 movl (sp)+,r3
addl3 sp,r0,r2 addl3 sp,r0,r2
addl2 r0,r2 addl2 r0,r2
ashl $-2,r0,r1 ashl $-2,r0,r1
L1: I1:
movl -(r2),-(sp) movl -(r2),-(sp)
sobgtr r1,L1 sobgtr r1,I1
addl3 r0,r2,r1 addl3 r0,r2,r1
L2: I2:
movw -(r2),-(r1) movw -(r2),-(r1)
sobgtr r0,L2 sobgtr r0,I2
movl r1,sp movl r1,sp
jmp (r3) jmp (r3)

View file

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

View file

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

View file

@ -1,24 +1,27 @@
#include "em_abs.h" #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: .fif:
movl (sp)+,r2 movl (sp)+,r2
cmpl r0,$4 cmpl r0,$4
bneq L1 bneq I1
mulf3 (sp)+,(sp)+,r0 mulf3 (sp)+,(sp)+,r0
emodf r0,$0,$0f1.0,r1,-(sp) emodf r0,$0,Ione,r1,-(sp)
subf3 (sp),r0,-(sp) subf3 (sp),r0,-(sp)
jmp (r2) jmp (r2)
L1: I1:
cmpl r0,$8 cmpl r0,$8
bneq L2 bneq I2
muld3 (sp)+,(sp)+,r0 muld3 (sp)+,(sp)+,r0
emodd r0,$0,$0f1.0,r0,-(sp) emodd r0,$0,Ione,r0,-(sp)
subd3 (sp),r0,-(sp) subd3 (sp),r0,-(sp)
jmp (r2) jmp (r2)
L2: I2:
pushl $EILLINS pushl $EILLINS
jmp .fat jmp .fat

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,25 +1,26 @@
#include "em_abs.h" #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: .setx:
movl (sp)+,r3 movl (sp)+,r3
movl (sp)+,r1 # bitnumber in r1 movl (sp)+,r1 ! bitnumber in r1
subl3 r0,sp,r2 subl3 r0,sp,r2
L1: I1:
clrl -(sp) clrl -(sp)
cmpl sp,r2 cmpl sp,r2
bgtru L1 bgtru I1
ashl $3,r0,r2 # number of bits in r2 ashl $3,r0,r2 ! number of bits in r2
cmpl r1,r2 cmpl r1,r2
bgequ L2 bgequ I2
bbcs r1,(sp),L3 bbcs r1,(sp),I3
L3: I3:
jmp (r3) jmp (r3)
L2: I2:
pushl $ESET pushl $ESET
jsb .trp jsb .trp
jmp (r3) jmp (r3)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,28 +1,27 @@
#include "em_abs.h" #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: .lar:
cmpl r0,$4 cmpl r0,$4
bneq Lillins bneq Iillins
jmp .lar4 jmp .lar4
.globl .sar
.sar: .sar:
cmpl r0,$4 cmpl r0,$4
bneq Lillins bneq Iillins
jmp .sar4 jmp .sar4
.globl .aar
.aar: .aar:
cmpl r0,$4 cmpl r0,$4
bneq Lillins bneq Iillins
jmp .aar4 jmp .aar4
Lillins: Iillins:
pushl $EILLINS pushl $EILLINS
jmp .fat jmp .fat

View file

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