Initial revision
This commit is contained in:
parent
07a378fffe
commit
bab801171f
9 changed files with 207 additions and 0 deletions
5
mach/arm/libem/.distr
Normal file
5
mach/arm/libem/.distr
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
LIST
|
||||||
|
Makefile
|
||||||
|
end.s
|
||||||
|
head_em.s
|
||||||
|
tail_em.a
|
4
mach/arm/libem/LIST
Normal file
4
mach/arm/libem/LIST
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
los.s
|
||||||
|
sts.s
|
||||||
|
dvi.s
|
||||||
|
mli.s
|
21
mach/arm/libem/Makefile
Normal file
21
mach/arm/libem/Makefile
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
all:
|
||||||
|
|
||||||
|
install:
|
||||||
|
../../install head_em.s head_em
|
||||||
|
../../install libem_s.a tail_em
|
||||||
|
../../install end.s end_em
|
||||||
|
|
||||||
|
cmp:
|
||||||
|
-../../compare head_em.s head_em
|
||||||
|
-../../compare libem_s.a tail_em
|
||||||
|
-../../compare end.s end_em
|
||||||
|
|
||||||
|
clean:
|
||||||
|
|
||||||
|
opr :
|
||||||
|
make pr | opr
|
||||||
|
|
||||||
|
pr:
|
||||||
|
@pr `pwd`/head_em.s
|
||||||
|
@arch pv libem_s.a | pr -h `pwd`/libem_s.a
|
||||||
|
@pr `pwd`/end.s
|
31
mach/arm/libem/dvi.s
Normal file
31
mach/arm/libem/dvi.s
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
.define .dvi
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
|
||||||
|
.dvi: LDMFD R12<,{R1,R2}
|
||||||
|
MOV R3,#0
|
||||||
|
CMP R1,#0
|
||||||
|
ADD.MI R3,R3,#1
|
||||||
|
RSB.MI R1,R1,#0
|
||||||
|
CMP R2,#0
|
||||||
|
ADD.MI R3,R3,#2
|
||||||
|
RSB.MI R2,R2,#0
|
||||||
|
MOV R0,#1
|
||||||
|
div1: CMP R1,#0x80000000
|
||||||
|
CMP.CC R1,R2
|
||||||
|
MOV.CC R1,R1,ASL #1
|
||||||
|
MOV.CC R0,R0,ASL #1
|
||||||
|
BCC div1
|
||||||
|
MOV R3,#0
|
||||||
|
div2: CMP R2,R1
|
||||||
|
SUB.CS R2,R2,R1
|
||||||
|
ADD.CS R3,R3,R0
|
||||||
|
MOV.S R0,R0,LSR #1
|
||||||
|
MOV.NE R1,R1,LSR #1
|
||||||
|
BNE div2
|
||||||
|
TST R4, #2
|
||||||
|
RSB.NE R2,R2,#0
|
||||||
|
TST R4, #1
|
||||||
|
TST.NE R4, #1
|
||||||
|
RSB.NE R3,R3,#0
|
||||||
|
MOV R15,R14
|
16
mach/arm/libem/end.s
Normal file
16
mach/arm/libem/end.s
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
.define _endtext,_enddata,_endbss
|
||||||
|
.sect .text
|
||||||
|
.align 4
|
||||||
|
.sect .rom
|
||||||
|
.align 4
|
||||||
|
.sect .data
|
||||||
|
.align 4
|
||||||
|
.sect .bss
|
||||||
|
.align 4
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
_endtext:
|
||||||
|
.sect .data
|
||||||
|
_enddata:
|
||||||
|
.sect .bss
|
||||||
|
_endbss:
|
49
mach/arm/libem/head_em.s
Normal file
49
mach/arm/libem/head_em.s
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
.define begdat, begbss
|
||||||
|
.define hol0, argv, envp, reghp
|
||||||
|
.define ignmask, trpreg, rcktrap
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
.sect .rom
|
||||||
|
.sect .data
|
||||||
|
.sect .bss
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
|
||||||
|
ADR R0,begbss
|
||||||
|
ADR R1,_endbss
|
||||||
|
MOV R2,#0
|
||||||
|
1:
|
||||||
|
STR R2,[R0],#4
|
||||||
|
CMP R0,R1
|
||||||
|
BGT 1b
|
||||||
|
|
||||||
|
MOV R12, #0x100000
|
||||||
|
ADR R11, envp
|
||||||
|
STMFD R12<, {R11}
|
||||||
|
ADR R11, argv
|
||||||
|
STMFD R12<, {R11}
|
||||||
|
MOV R11, #1
|
||||||
|
STMFD R12<, {R11}
|
||||||
|
BAL.L _m_a_i_n
|
||||||
|
rcktrap:
|
||||||
|
SWI 1
|
||||||
|
|
||||||
|
.sect .bss
|
||||||
|
begbss:
|
||||||
|
.sect .data
|
||||||
|
begdat:
|
||||||
|
hol0:
|
||||||
|
.data4 0
|
||||||
|
.data4 0
|
||||||
|
argv:
|
||||||
|
.data4 2f
|
||||||
|
envp:
|
||||||
|
.data4 0
|
||||||
|
2:
|
||||||
|
.asciz 'PROGRAM'
|
||||||
|
reghp:
|
||||||
|
.data4 _endbss
|
||||||
|
ignmask:
|
||||||
|
.data4 0
|
||||||
|
trpreg:
|
||||||
|
.data4 0
|
27
mach/arm/libem/los.s
Normal file
27
mach/arm/libem/los.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.define .los
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
|
||||||
|
.los: LDMFD R12<,{R0,R1}
|
||||||
|
CMP R0, #8
|
||||||
|
BGE 2F
|
||||||
|
CMP R0,#1
|
||||||
|
LDR.EQ.B R2,[R1]
|
||||||
|
CMP R0,#4
|
||||||
|
LDR.EQ R2,[R1]
|
||||||
|
CMP R0,#2
|
||||||
|
BNE 1F
|
||||||
|
LDR.EQ.B R2,[R1]
|
||||||
|
LDR.EQ.B R3,[R1,#1]
|
||||||
|
ADD R2,R2,R3,LSL #8
|
||||||
|
1:
|
||||||
|
STMFD R12<,{R2}
|
||||||
|
BAL 3F
|
||||||
|
2:
|
||||||
|
SUB R0,R0,#4
|
||||||
|
LDR R11,[R1,R0]
|
||||||
|
STMFD R12<,{R11}
|
||||||
|
CMP R0,#0
|
||||||
|
BNE 2B
|
||||||
|
3:
|
||||||
|
MOV R15,R14
|
27
mach/arm/libem/mli.s
Normal file
27
mach/arm/libem/mli.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.define .mli
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
|
||||||
|
.mli: LDMFD R12<,{R1,R2}
|
||||||
|
MOV R3,#0
|
||||||
|
MOV R0,#0
|
||||||
|
CMP R1,#0
|
||||||
|
ADD.MI R3,R3,#1
|
||||||
|
RSB.MI R1,R1,#0
|
||||||
|
CMP R2,#0
|
||||||
|
ADD.MI R3,R3,#1
|
||||||
|
RSB.MI R2,R2,#0
|
||||||
|
CMP R1,R2
|
||||||
|
BLT 1F
|
||||||
|
MOV R4,R1
|
||||||
|
MOV R1,R2
|
||||||
|
MOV R2,R4
|
||||||
|
1:
|
||||||
|
TST R1,#1
|
||||||
|
ADD.NE R0,R0,R2
|
||||||
|
MOV R2,R2,LSL #1
|
||||||
|
MOV.S R1,R1,LSR #1
|
||||||
|
BNE 1B
|
||||||
|
TST R3,#1
|
||||||
|
RSB.NE R0,R0,#0
|
||||||
|
MOV R15,R14
|
27
mach/arm/libem/sts.s
Normal file
27
mach/arm/libem/sts.s
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
.define .sts
|
||||||
|
|
||||||
|
.sect .text
|
||||||
|
|
||||||
|
.sts: LDMFD R12<,{R0,R1,R2}
|
||||||
|
CMP R0, #8
|
||||||
|
BGE 2f
|
||||||
|
CMP R0, #1
|
||||||
|
STR.EQ.B R2,[R1]
|
||||||
|
CMP R0, #4
|
||||||
|
STR.EQ R2,[R1]
|
||||||
|
CMP R0,#2
|
||||||
|
MOV.NE R15,R14
|
||||||
|
MOV R3,R2,LSR #8
|
||||||
|
SUB R2,R2,R3,LSL #8
|
||||||
|
STR.EQ.B R2,[R1]
|
||||||
|
STR.EQ.B R3,[R1,#1]
|
||||||
|
MOV R15,R14
|
||||||
|
2:
|
||||||
|
ADD R3,R1,R0
|
||||||
|
1:
|
||||||
|
STR R2,[R1]
|
||||||
|
ADD R1,R1,#4
|
||||||
|
CMP R1,R3
|
||||||
|
MOV.EQ R15,R14
|
||||||
|
STMFD R12<,{R2}
|
||||||
|
BAL 1b
|
Loading…
Reference in a new issue