aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2023-10-22 20:17:23 +0200
committerHelge Deller <deller@gmx.de>2023-10-22 20:17:23 +0200
commit9fc7a6b5d5f1692c83df9ed540bcdf3322f087fc (patch)
tree49c126b9d96e6631cd9f9fc529762ab105db5861
parentaf73e559b83c88576dc2c32841506fa9ae7ffeef (diff)
downloadseabios-hppa-9fc7a6b5d5f1692c83df9ed540bcdf3322f087fc.zip
seabios-hppa-9fc7a6b5d5f1692c83df9ed540bcdf3322f087fc.tar.gz
seabios-hppa-9fc7a6b5d5f1692c83df9ed540bcdf3322f087fc.tar.bz2
parisc: Add PSW.W handling in iodc_entry
Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--src/parisc/head.S17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/parisc/head.S b/src/parisc/head.S
index 7bc7c09..95072df 100644
--- a/src/parisc/head.S
+++ b/src/parisc/head.S
@@ -403,6 +403,11 @@ ENTRY(iodc_entry)
stw %arg1,-40(%sp)
stw %arg2,-44(%sp)
stw %arg3,-48(%sp)
+ ;! nuke the W bit
+ .level 2.0
+ rsm PSW_W_SM, %r31
+ .level 1.1
+ stw %r31,-52(%sp) /* store PSW_W */
ldo -FRAME_SIZE(%sp),%arg0
loadgp
@@ -412,8 +417,18 @@ ENTRY(iodc_entry)
.iodc_ret:
ldo -FRAME_SIZE(%sp),%sp
ldw -20(%sp),%rp
- bv %r0(%rp)
ldw -32(%sp),%dp
+
+// .word 0xfffdead0
+ ldw -52(%sp),%r31
+ load32 0x8000000,%r1 /* mask PSW_W */
+ and,= %r31,%r1,%r0
+ bv %r0(%rp) /* return without setting PSW_W */
+ nop
+ bv %r0(%rp) /* return with setting PSW_W */
+ .level 2.0
+ ssm PSW_W_SM,%r0
+ .level 1.1
END(iodc_entry)
/****************************************************************