aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelge Deller <deller@gmx.de>2024-02-08 22:39:40 +0100
committerHelge Deller <deller@gmx.de>2024-02-08 22:39:40 +0100
commit03774edaad3bfae090ac96ca5450353c641637d1 (patch)
treecad853c7bca6a8e85a69233aed7e0ae56ea55cc9
parent424f05599bf08e31252f79fc9901405c374ede31 (diff)
downloadseabios-hppa-master.zip
seabios-hppa-master.tar.gz
seabios-hppa-master.tar.bz2
parisc: Fix 64-bit PDC call to not trash %dpHEADmaster
Fixes 64-bit HP-UX IPL boot loader. Signed-off-by: Helge Deller <deller@gmx.de>
-rw-r--r--src/parisc/head.S27
1 files changed, 4 insertions, 23 deletions
diff --git a/src/parisc/head.S b/src/parisc/head.S
index 4f2b5b5..018ee99 100644
--- a/src/parisc/head.S
+++ b/src/parisc/head.S
@@ -494,13 +494,6 @@ ENTRY(pdc_entry_table)
addb,*>,n %r0,%r0,pdc_called_narrow /* branch if narrow addressing */
pdc_called_wide:
-#if 0 /* automatically set wide-bit */
- .import psw_defaults, data
- load32_firmware psw_defaults,%r1 /* set PDC_PSW_ENDIAN_BIT in psw_defaults */
- ldi PDC_PSW_ENDIAN_BIT,%r31
- stw %r31,0(%r1)
-#endif
-
/* we know that PDC was called with PSW.W=1 */
load32_firmware pdc_entry_64_64,%r1
bv,n %r0(%r1)
@@ -588,20 +581,6 @@ c64_32_return:
ldd -0x30(%sp),%arg2 /* addr of result buffer */
ldo -2*FRAME_SIZE(%sp),%sp /* restore original 32-bit stack */
-#if 0
- .import psw_defaults, data
- load32_firmware psw_defaults,%r1 /* test PDC_PSW_ENDIAN_BIT in psw_defaults */
- ldw 0(%r1),%r1
- ldi PDC_PSW_ENDIAN_BIT,%arg3
- and %r1,%arg3,%r1
- cmpb,<>,n %r1,%r0,5f /* skip copy results */
-#elif 0
- .import firmware_width_locked, data
- load32_firmware firmware_width_locked,%r1
- ldw 0(%r1),%r1
- cmpb,=,n %r1,%r0,5f /* skip copy results */
-#endif
-
cmpb,=,n %r0,%arg2,5f /* skip copy results if target buffer is NULL */
cmpb,< %ret0,%r0,5f /* skip copy results if return value was negative (=error) */
ldi MEM_PDC_ENTRY,%r1
@@ -623,8 +602,9 @@ convert_ret64_buffer:
bv,n %r0(%rp)
ENTRY(pdc_entry_64_64) /* 64-bit call on 64-bit PDC */
+ ldo FRAME_SIZE(%sp),%sp
std %rp,-0x10(%sp)
- stw %dp,-0x18(%sp)
+ std %dp,-0x18(%sp)
std %arg0,-0x20(%sp)
std %arg1,-0x28(%sp)
std %arg2,-0x30(%sp)
@@ -642,7 +622,8 @@ ENTRY(pdc_entry_64_64) /* 64-bit call on 64-bit PDC */
ldo -FRAME_SIZE(%sp),%sp
ldd -0x10(%sp),%rp
ldd -0x18(%sp),%dp
- bv,n %r0(%rp)
+ bv %r0(%rp)
+ ldo -FRAME_SIZE(%sp),%sp
END(pdc_entry_64_32)
#endif