diff options
author | Helge Deller <deller@gmx.de> | 2023-10-22 21:29:30 +0200 |
---|---|---|
committer | Helge Deller <deller@gmx.de> | 2023-10-22 21:29:30 +0200 |
commit | 2c6061668f09053c7c536c82b429d97fc66e3e2a (patch) | |
tree | 9d4adf23d2d03ad4869ab6436e780f016af13476 | |
parent | 9fc7a6b5d5f1692c83df9ed540bcdf3322f087fc (diff) | |
download | seabios-hppa-2c6061668f09053c7c536c82b429d97fc66e3e2a.zip seabios-hppa-2c6061668f09053c7c536c82b429d97fc66e3e2a.tar.gz seabios-hppa-2c6061668f09053c7c536c82b429d97fc66e3e2a.tar.bz2 |
parisc: Hackish fix to save PSW.W across pdc/iodc call
Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r-- | src/parisc/head.S | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/parisc/head.S b/src/parisc/head.S index 95072df..3eb7e9c 100644 --- a/src/parisc/head.S +++ b/src/parisc/head.S @@ -346,6 +346,10 @@ END(smp_ivt) PDC and IODC entry *******************************************************/ +/* XXX: memory location in page0: vec_pad0[], temporary storage for PSW.W */ +#define PSW_OFFSET1 24 +#define PSW_OFFSET2 28 + ENTRY(pdc_entry) stw %rp,-20(%sp) stw %dp,-32(%sp) @@ -353,7 +357,7 @@ ENTRY(pdc_entry) stw %arg1,-40(%sp) stw %arg2,-44(%sp) stw %arg3,-48(%sp) - stw %r31,-52(%sp) /* store PSW_W */ + stw %r31,PSW_OFFSET1(%r0) /* store PSW_W */ ldo -FRAME_SIZE(%sp),%arg0 loadgp @@ -363,7 +367,7 @@ ENTRY(pdc_entry) ldo -FRAME_SIZE(%sp),%sp ldw -20(%sp),%rp ldw -32(%sp),%dp - ldw -52(%sp),%r31 + ldw PSW_OFFSET1(%r0),%r31 load32 0x8000000,%r1 /* mask PSW_W */ and,= %r31,%r1,%r0 bv %r0(%rp) /* return without setting PSW_W */ @@ -407,7 +411,7 @@ ENTRY(iodc_entry) .level 2.0 rsm PSW_W_SM, %r31 .level 1.1 - stw %r31,-52(%sp) /* store PSW_W */ + stw %r31,PSW_OFFSET2(%r0) /* store PSW_W */ ldo -FRAME_SIZE(%sp),%arg0 loadgp @@ -420,7 +424,7 @@ ENTRY(iodc_entry) ldw -32(%sp),%dp // .word 0xfffdead0 - ldw -52(%sp),%r31 + ldw PSW_OFFSET2(%r0),%r31 load32 0x8000000,%r1 /* mask PSW_W */ and,= %r31,%r1,%r0 bv %r0(%rp) /* return without setting PSW_W */ |