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-31 08:26:22 +0100
commit7ce1eaa80b25b90112890d71337be9b513fd959c (patch)
treec34d8f4cdb9a7bb5ab9bee2a780ae177d31da6b2
parent1f49c02920ddd61ce64b50975e51aa62703b2c23 (diff)
downloadseabios-hppa-7ce1eaa80b25b90112890d71337be9b513fd959c.zip
seabios-hppa-7ce1eaa80b25b90112890d71337be9b513fd959c.tar.gz
seabios-hppa-7ce1eaa80b25b90112890d71337be9b513fd959c.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)
/****************************************************************