diff options
author | Helge Deller <deller@gmx.de> | 2023-10-22 20:17:23 +0200 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2023-10-22 20:17:23 +0200 |
commit | 9fc7a6b5d5f1692c83df9ed540bcdf3322f087fc (patch) | |
tree | 49c126b9d96e6631cd9f9fc529762ab105db5861 | |
parent | af73e559b83c88576dc2c32841506fa9ae7ffeef (diff) | |
download | seabios-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.S | 17 |
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) /**************************************************************** |