瀏覽代碼

Initial revision

ceriel 36 年之前
父節點
當前提交
151a5b3664
共有 9 個文件被更改,包括 207 次插入0 次删除
  1. 5 0
      mach/arm/libem/.distr
  2. 4 0
      mach/arm/libem/LIST
  3. 21 0
      mach/arm/libem/Makefile
  4. 31 0
      mach/arm/libem/dvi.s
  5. 16 0
      mach/arm/libem/end.s
  6. 49 0
      mach/arm/libem/head_em.s
  7. 27 0
      mach/arm/libem/los.s
  8. 27 0
      mach/arm/libem/mli.s
  9. 27 0
      mach/arm/libem/sts.s

+ 5 - 0
mach/arm/libem/.distr

@@ -0,0 +1,5 @@
+LIST
+Makefile
+end.s
+head_em.s
+tail_em.a

+ 4 - 0
mach/arm/libem/LIST

@@ -0,0 +1,4 @@
+los.s
+sts.s
+dvi.s
+mli.s

+ 21 - 0
mach/arm/libem/Makefile

@@ -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 - 0
mach/arm/libem/dvi.s

@@ -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 - 0
mach/arm/libem/end.s

@@ -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 - 0
mach/arm/libem/head_em.s

@@ -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 - 0
mach/arm/libem/los.s

@@ -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 - 0
mach/arm/libem/mli.s

@@ -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 - 0
mach/arm/libem/sts.s

@@ -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