diff options
author | marcel <marcel@FreeBSD.org> | 2003-06-29 17:14:42 +0000 |
---|---|---|
committer | marcel <marcel@FreeBSD.org> | 2003-06-29 17:14:42 +0000 |
commit | d8d789fb8be433ed280d52ec5b13ae301abc922a (patch) | |
tree | 6afbc207e13e29ba534dfbd3a716b0da366340a3 | |
parent | 536016ad69db3ca3302cc7996846b12dbc8d5cf8 (diff) | |
download | FreeBSD-src-d8d789fb8be433ed280d52ec5b13ae301abc922a.zip FreeBSD-src-d8d789fb8be433ed280d52ec5b13ae301abc922a.tar.gz |
Implement fuword32() and suword32(). These functions are used in
kern_thread.c. This is a best effort implementation.
-rw-r--r-- | sys/alpha/alpha/support.s | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/sys/alpha/alpha/support.s b/sys/alpha/alpha/support.s index 8977c2e..53b56f4 100644 --- a/sys/alpha/alpha/support.s +++ b/sys/alpha/alpha/support.s @@ -84,7 +84,27 @@ mov zero, v0 RET END(suword) - + + LEAF(suword32, 2) + LDGP(pv) + + ldiq t0, VM_MAXUSER_ADDRESS /* verify address validity */ + cmpult a0, t0, t1 + beq t1, fusufault + + lda t0, fusufault /* trap faults */ + ldq t2, PC_CURTHREAD(pcpup) + ldq t2, TD_PCB(t2) + stq t0, PCB_ONFAULT(t2) + + stl a1, 0(a0) /* try the store */ + + stq zero, PCB_ONFAULT(t2) /* clean up */ + + mov zero, v0 + RET + END(suword32) + LEAF(subyte, 1) LDGP(pv) @@ -130,6 +150,25 @@ RET END(fuword) + LEAF(fuword32, 1) + LDGP(pv) + + ldiq t0, VM_MAXUSER_ADDRESS /* verify address validity */ + cmpult a0, t0, t1 + beq t1, fusufault + + lda t0, fusufault /* trap faults */ + ldq t2, PC_CURTHREAD(pcpup) + ldq t2, TD_PCB(t2) + stq t0, PCB_ONFAULT(t2) + + ldl v0, 0(a0) /* get the word containing our byte */ + + stq zero, PCB_ONFAULT(t2) /* clean up */ + + RET + END(fuword32) + LEAF(fubyte, 1) LDGP(pv) |