Module Name:    src
Committed By:   matt
Date:           Thu Aug 20 22:32:19 UTC 2009

Modified Files:
        src/sys/arch/mips/mips [matt-nb5-mips64]: copy.S

Log Message:
Make ABI agnostic.  (Almost identical O32 code; uses a different stack slot
for a temporary).


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.5.38.1 src/sys/arch/mips/mips/copy.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/mips/copy.S
diff -u src/sys/arch/mips/mips/copy.S:1.5 src/sys/arch/mips/mips/copy.S:1.5.38.1
--- src/sys/arch/mips/mips/copy.S:1.5	Wed Oct 17 19:55:37 2007
+++ src/sys/arch/mips/mips/copy.S	Thu Aug 20 22:32:19 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: copy.S,v 1.5 2007/10/17 19:55:37 garbled Exp $	*/
+/*	$NetBSD: copy.S,v 1.5.38.1 2009/08/20 22:32:19 matt Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -72,18 +72,18 @@
 	beq	a2, zero, 4f
 1:
 	lbu	v0, 0(a0)
-	subu	a2, a2, 1
+	PTR_SUBU a2, a2, 1
 	beq	v0, zero, 2f
 	sb	v0, 0(a1)			# each byte until NIL
-	addu	a0, a0, 1
+	PTR_ADDU a0, a0, 1
 	bne	a2, zero, 1b			# less than maxlen
-	addu	a1, a1, 1
+	PTR_ADDU a1, a1, 1
 4:
 	li	v0, ENAMETOOLONG		# run out of space
 2:
 	beq	a3, zero, 3f			# return num. of copied bytes
-	subu	a2, t0, a2			# if the 4th arg was non-NULL
-	sw	a2, 0(a3)
+	PTR_SUBU a2, t0, a2			# if the 4th arg was non-NULL
+	PTR_S	a2, 0(a3)
 3:
 	j	ra				# v0 is 0 or ENAMETOOLONG
 	nop
@@ -97,29 +97,29 @@
  * else return 0 or EFAULT.
  */
 LEAF(copyinstr)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(copystrerr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(copystrerr)
 	blt	a0, zero, _C_LABEL(copystrerr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	move	t0, a2
 	beq	a2, zero, 4f
 1:
 	lbu	v0, 0(a0)
-	subu	a2, a2, 1
+	PTR_SUBU a2, a2, 1
 	beq	v0, zero, 2f
 	sb	v0, 0(a1)
-	addu	a0, a0, 1
+	PTR_ADDU a0, a0, 1
 	bne	a2, zero, 1b
-	addu	a1, a1, 1
+	PTR_ADDU a1, a1, 1
 4:
 	li	v0, ENAMETOOLONG
 2:
 	beq	a3, zero, 3f
-	subu	a2, t0, a2
-	sw	a2, 0(a3)
+	PTR_SUBU a2, t0, a2
+	PTR_S	a2, 0(a3)
 3:
 	j	ra				# v0 is 0 or ENAMETOOLONG
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 END(copyinstr)
 
 /*
@@ -130,33 +130,33 @@
  * else return 0 or EFAULT.
  */
 LEAF(copyoutstr)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(copystrerr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(copystrerr)
 	blt	a1, zero, _C_LABEL(copystrerr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	move	t0, a2
 	beq	a2, zero, 4f
 1:
 	lbu	v0, 0(a0)
-	subu	a2, a2, 1
+	PTR_SUBU a2, a2, 1
 	beq	v0, zero, 2f
 	sb	v0, 0(a1)
-	addu	a0, a0, 1
+	PTR_ADDU a0, a0, 1
 	bne	a2, zero, 1b
-	addu	a1, a1, 1
+	PTR_ADDU a1, a1, 1
 4:
 	li	v0, ENAMETOOLONG
 2:
 	beq	a3, zero, 3f
-	subu	a2, t0, a2
-	sw	a2, 0(a3)
+	PTR_SUBU a2, t0, a2
+	PTR_S	a2, 0(a3)
 3:
 	j	ra				# v0 is 0 or ENAMETOOLONG
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 END(copyoutstr)
 
 LEAF(copystrerr)
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	li	v0, EFAULT			# return EFAULT
 END(copystrerr)
@@ -171,36 +171,36 @@
  * called by uiomove(), which may be in the path of servicing a non-fatal
  * page fault.
  */
-NESTED(kcopy, 48, ra)
-	subu	sp, sp, 48			# set up stack frame
+NESTED(kcopy, 2*CALLFRAME_SIZ, ra)
+	PTR_SUBU sp, sp, 2*CALLFRAME_SIZ	# set up stack frame
 	/* Frame contains RA (31) and S0 (16). */
-	.mask	0x80010000, -4
-	sw	ra, 44(sp)			# save ra
-	sw	s0, 32(sp)			# save s0
+	.mask	0x80010000, -SZREG
+	REG_S	ra, CALLFRAME_SIZ+CALLFRAME_RA(sp)	# save ra
+	REG_S	s0, CALLFRAME_SIZ+CALLFRAME_S0(sp)	# save s0
 	move	v0, a0				# swap a0, a1 for call to memcpy
 	move	a0, a1
 	move	a1, v0
-	lw	v1, L_ADDR(MIPS_CURLWP)		# set up fault handler
-	la	v0, _C_LABEL(kcopyerr)
-	lw	s0, U_PCB_ONFAULT(v1)		# save old handler
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)		# set up fault handler
+	PTR_LA	v0, _C_LABEL(kcopyerr)
+	PTR_L	s0, U_PCB_ONFAULT(v1)		# save old handler
 	jal	memcpy
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 
-	lw	v1, L_ADDR(MIPS_CURLWP)		# restore the old handler
-	lw	ra, 44(sp)			# restore ra
-	sw	s0, U_PCB_ONFAULT(v1)
-	lw	s0, 32(sp)			# restore s0
-	addu	sp, sp, 48			# kill stack frame
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)		# restore the old handler
+	REG_L	ra, CALLFRAME_SIZ+CALLFRAME_RA(sp)	# restore ra
+	PTR_S	s0, U_PCB_ONFAULT(v1)
+	REG_L	s0, CALLFRAME_SIZ+CALLFRAME_S0(sp)	# restore s0
+	PTR_ADDU sp, sp, 2*CALLFRAME_SIZ	# kill stack frame
 	j	ra
 	move	v0, zero			# success!
 END(kcopy)
 
 LEAF(kcopyerr)
-	lw	v1, L_ADDR(MIPS_CURLWP)		# restore the old handler
-	lw	ra, 44(sp)			# restore ra
-	sw	s0, U_PCB_ONFAULT(v1)
-	lw	s0, 32(sp)			# restore s0
-	addu	sp, sp, 48			# kill stack frame
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)		# restore the old handler
+	REG_L	ra, CALLFRAME_SIZ+CALLFRAME_RA(sp) 	# restore ra
+	PTR_S	s0, U_PCB_ONFAULT(v1)
+	REG_L	s0, CALLFRAME_SIZ+CALLFRAME_S0(sp) 	# restore s0
+	PTR_ADDU sp, sp, 2*CALLFRAME_SIZ	# kill stack frame
 	j	ra
 	li	v0, EFAULT			# return EFAULT
 END(kcopyerr)
@@ -212,22 +212,22 @@
  * if a bad address is encountered.
  */
 NESTED(copyin, CALLFRAME_SIZ, ra)
-	subu	sp, sp, CALLFRAME_SIZ
+	PTR_SUBU sp, sp, CALLFRAME_SIZ
 	.mask	0x80000000, -4
-	sw	ra, CALLFRAME_RA(sp)
+	REG_S	ra, CALLFRAME_RA(sp)
 	blt	a0, zero, _C_LABEL(copyerr)
 	move	v0, a0				# swap a0, a1 for call to memcpy
 	move	a0, a1
 	move	a1, v0
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(copyerr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(copyerr)
 	jal	memcpy
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	lw	ra, CALLFRAME_RA(sp)
-	addu	sp, sp, CALLFRAME_SIZ
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	REG_L	ra, CALLFRAME_RA(sp)
+	PTR_ADDU sp, sp, CALLFRAME_SIZ
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero
 END(copyin)
@@ -239,31 +239,31 @@
  * if a bad address is encountered.
  */
 NESTED(copyout, CALLFRAME_SIZ, ra)
-	subu	sp, sp, CALLFRAME_SIZ
+	PTR_SUBU sp, sp, CALLFRAME_SIZ
 	.mask	0x80000000, -4
-	sw	ra, CALLFRAME_RA(sp)
+	REG_S	ra, CALLFRAME_RA(sp)
 	blt	a1, zero, _C_LABEL(copyerr)
 	move	v0, a0				# swap a0, a1 for call to memcpy
 	move	a0, a1
 	move	a1, v0
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(copyerr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(copyerr)
 	jal	memcpy
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	lw	ra, CALLFRAME_RA(sp)
-	addu	sp, sp, CALLFRAME_SIZ
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	REG_L	ra, CALLFRAME_RA(sp)
+	PTR_ADDU sp, sp, CALLFRAME_SIZ
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero
 END(copyout)
 
 LEAF(copyerr)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	lw	ra, CALLFRAME_RA(sp)
-	addu	sp, sp, CALLFRAME_SIZ
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	REG_L	ra, CALLFRAME_RA(sp)
+	PTR_ADDU sp, sp, CALLFRAME_SIZ
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	li	v0, EFAULT			# return EFAULT
 END(copyerr)
@@ -274,14 +274,14 @@
  * This function is safe to call during an interrupt context.
  */
 LEAF(fuswintr)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswintrberr)
-	lw	a2, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswintrberr)
+	PTR_L	a2, U_PCB_ONFAULT(v1)
 	blt	a0, zero, _C_LABEL(fswintrberr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	lhu	v0, 0(a0)			# fetch short
 	j	ra
-	sw	a2, U_PCB_ONFAULT(v1)
+	PTR_S	a2, U_PCB_ONFAULT(v1)
 END(fuswintr)
 
 /*
@@ -290,13 +290,13 @@
  * This function is safe to call during an interrupt context.
  */
 LEAF(suswintr)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswintrberr)
-	lw	a2, U_PCB_ONFAULT(v1)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswintrberr)
+	PTR_L	a2, U_PCB_ONFAULT(v1)
 	blt	a0, zero, _C_LABEL(fswintrberr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	sh	a1, 0(a0)			# store short
-	sw	a2, U_PCB_ONFAULT(v1)
+	PTR_S	a2, U_PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero
 END(suswintr)
@@ -307,13 +307,13 @@
  */
 LEAF(fuword)
 XLEAF(fuiword)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswberr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
-	sw	v0, U_PCB_ONFAULT(v1)
-	lw	v0, 0(a0)			# fetch word
+	PTR_S	v0, U_PCB_ONFAULT(v1)
+	INT_L	v0, 0(a0)			# fetch word
 	j	ra
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 END(fuword)
 
 /*
@@ -322,13 +322,13 @@
  */
 LEAF(fusword)
 XLEAF(fuisword)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswberr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	lhu	v0, 0(a0)			# fetch short
 	j	ra
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 END(fusword)
 
 /*
@@ -337,13 +337,13 @@
  */
 LEAF(fubyte)
 XLEAF(fuibyte)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswberr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	lbu	v0, 0(a0)			# fetch byte
 	j	ra
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 END(fubyte)
 
 /*
@@ -351,12 +351,12 @@
  * Stores a word of data to the user-space address.
  */
 LEAF(suword)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswberr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
-	sw	v0, U_PCB_ONFAULT(v1)
-	sw	a1, 0(a0)			# store word
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
+	INT_S	a1, 0(a0)			# store word
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero
 END(suword)
@@ -366,14 +366,14 @@
  * Have to flush instruction cache afterwards.
  */
 LEAF(suiword)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswberr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
-	sw	v0, U_PCB_ONFAULT(v1)
-	sw	a1, 0(a0)			# store word
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
+	INT_S	a1, 0(a0)			# store word
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	move	v0, zero
-	lw	v1, _C_LABEL(mips_cache_ops) + MIPSX_FLUSHICACHE
+	PTR_L	v1, _C_LABEL(mips_cache_ops) + MIPSX_FLUSHICACHE
 	j	v1				# NOTE: must not clobber v0!
 	li	a1, 4				# size of word
 END(suiword)
@@ -384,12 +384,12 @@
  */
 LEAF(susword)
 XLEAF(suisword)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswberr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	sh	a1, 0(a0)			# store short
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero
 END(susword)
@@ -400,12 +400,12 @@
  */
 LEAF(subyte)
 XLEAF(suibyte)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(fswberr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	sb	a1, 0(a0)			# store byte
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero
 END(subyte)
@@ -416,10 +416,10 @@
  * len is length of access (1=byte, 2=short, 4=long)
  */
 LEAF(badaddr)
-	lw	v1, L_ADDR(MIPS_CURLWP)
-	la	v0, _C_LABEL(baderr)
+	PTR_L	v1, L_ADDR(MIPS_CURLWP)
+	PTR_LA	v0, _C_LABEL(baderr)
 	bne	a1, 1, 2f
-	sw	v0, U_PCB_ONFAULT(v1)
+	PTR_S	v0, U_PCB_ONFAULT(v1)
 	b	5f
 	lbu	v0, (a0)
 2:
@@ -428,9 +428,9 @@
 	b	5f
 	lhu	v0, (a0)
 4:
-	lw	v0, (a0)
+	INT_L	v0, (a0)
 5:
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero		# made it w/o errors
 END(badaddr)
@@ -443,14 +443,14 @@
  */
 LEAF(fswintrberr)
 	nop
-	sw	a2, U_PCB_ONFAULT(v1)
+	PTR_S	a2, U_PCB_ONFAULT(v1)
 	j	ra
 	li	v0, -1
 END(fswintrberr)
 
 LEAF(fswberr)
 XLEAF(baderr)
-	sw	zero, U_PCB_ONFAULT(v1)
+	PTR_S	zero, U_PCB_ONFAULT(v1)
 	j	ra
 	li	v0, -1
 END(fswberr)

Reply via email to