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