PERFORCE change 118360 for review

Oleksandr Tymoshenko gonzo at FreeBSD.org
Wed Apr 18 13:45:55 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=118360

Change 118360 by gonzo at gonzo_jeeves on 2007/04/18 13:45:08

	o Implement fubyte, fusword, fuswintr, susword, suswintr.

Affected files ...

.. //depot/projects/mips2/src/sys/mips/mips/support.S#12 edit

Differences ...

==== //depot/projects/mips2/src/sys/mips/mips/support.S#12 (text+ko) ====

@@ -145,10 +145,15 @@
  * <v0>int susword(<a0>void *addr, <a1>int shortword)
  */
 ENTRY(susword)
-	break
-	li	v0, -1
-	jr	ra
-	nop
+	lw	t2, pcpup
+	lw	v1, PC_CURPCB(t2)
+	la	v0, _C_LABEL(fswberr)
+	blt	a0, zero, _C_LABEL(fswberr)
+	sw	v0, PCB_ONFAULT(v1)
+	sh	a1, 0(a0)                       # store short word
+	sw	zero, PCB_ONFAULT(v1)
+	j	ra
+	move	v0, zero
 END(susword)
 
 /*
@@ -156,10 +161,15 @@
  * <v0>int suswintr(<a0>void *addr, <a1>int shortword)
  */
 ENTRY(suswintr)
-	break
-	li	v0, -1
-	jr	ra
-	nop
+	lw	t2, pcpup
+	lw	v1, PC_CURPCB(t2)
+	la	v0, _C_LABEL(fswintrberr)
+	blt	a0, zero, _C_LABEL(fswintrberr)
+	sw	v0, PCB_ONFAULT(v1)
+	sh	a1, 0(a0)                       # store short word
+	sw	zero, PCB_ONFAULT(v1)
+	j	ra
+	move	v0, zero
 END(suswintr)
 
 /*
@@ -193,7 +203,6 @@
 	sw	zero, PCB_ONFAULT(v1)
 	j	ra
 	move	v0, zero
-
 END(suword32)
 
 /*
@@ -217,9 +226,14 @@
  * <v0>int fubyte(<a0>const void *addr)
  */
 ENTRY(fubyte)
-	break
-	li	v0, -1
-	jr	ra
+	lw	t2, pcpup
+	lw	v1, PC_CURPCB(t2)
+	la	a1, _C_LABEL(fswberr)
+	blt	a0, zero, _C_LABEL(fswberr)
+	sw	a1, PCB_ONFAULT(v1)
+	lb	v0, 0(a0)                       # fetch byte
+	sw	zero, PCB_ONFAULT(v1)
+	j	ra
 	nop
 END(fubyte)
 
@@ -228,10 +242,14 @@
  * <v0>int fusword(<a0>const void *addr)
  */
 ENTRY(fusword)
-	break
-	li	v0, -1
-	jr	ra
-	nop
+	lw	t2, pcpup
+	lw	v1, PC_CURPCB(t2)
+	la	v0, _C_LABEL(fswberr)
+	blt	a0, zero, _C_LABEL(fswberr)
+	sw	v0, PCB_ONFAULT(v1)
+	lhu	v0, 0(a0)                       # fetch short word
+	j	ra
+	sw	zero, PCB_ONFAULT(v1)
 END(fusword)
 
 /*
@@ -239,10 +257,14 @@
  * <v0>int fuswintr(<a0>const void *addr)
  */
 ENTRY(fuswintr)
-	break
-	li	v0, -1
-	jr	ra
-	nop
+	lw	t2, pcpup
+	lw	v1, PC_CURPCB(t2)
+	la	v0, _C_LABEL(fswintrberr)
+	blt	a0, zero, _C_LABEL(fswintrberr)
+	sw	v0, PCB_ONFAULT(v1)
+	lhu	v0, 0(a0)                       # fetch short word
+	j	ra
+	sw	zero, PCB_ONFAULT(v1)
 END(fuswintr)
 
 /*
@@ -255,7 +277,7 @@
 	la	v0, _C_LABEL(fswberr)
 	blt	a0, zero, _C_LABEL(fswberr)
 	sw	v0, PCB_ONFAULT(v1)
-	lw	v0, 0(a0)                       # store byte
+	lw	v0, 0(a0)                       # fetch word
 	j	ra
 	sw	zero, PCB_ONFAULT(v1)
 END(fuword)
@@ -263,12 +285,17 @@
 /*
  * fuword32(9)
  * <v0>int fuword32(<a0>const void *addr)
+ * XXXMIPS: MIPS32 implementation only.
  */
 ENTRY(fuword32)
-	break
-	li	v0, -1
-	jr	ra
-	nop
+	lw	t2, pcpup
+	lw	v1, PC_CURPCB(t2)
+	la	v0, _C_LABEL(fswberr)
+	blt	a0, zero, _C_LABEL(fswberr)
+	sw	v0, PCB_ONFAULT(v1)
+	lw	v0, 0(a0)                       # fetch word
+	j	ra
+	sw	zero, PCB_ONFAULT(v1)
 END(fuword32)
 
 /*


More information about the p4-projects mailing list