diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2008-03-01 14:25:44 -0500 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2008-03-01 14:25:44 -0500 |
commit | e20ed9f362a0d81d718c82780208f8361f3d2f51 (patch) | |
tree | c1a7fddfdc7613be3355394ec137283d8fd627d7 | |
parent | d427a3f85aa7dc136d98cdb1ac242f875ed35fa7 (diff) | |
download | seabios-hppa-e20ed9f362a0d81d718c82780208f8361f3d2f51.zip seabios-hppa-e20ed9f362a0d81d718c82780208f8361f3d2f51.tar.gz seabios-hppa-e20ed9f362a0d81d718c82780208f8361f3d2f51.tar.bz2 |
Minor - reduce stack usage of handle_1587.
-rw-r--r-- | src/system.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/system.c b/src/system.c index f3b0d08..331e452 100644 --- a/src/system.c +++ b/src/system.c @@ -165,11 +165,6 @@ handle_1587(struct bregs *regs) SET_VAR(ES, *(u16*)(si+0x28+6), 0x0000); // base 31:24/reserved/limit 19:16 asm volatile( - // Save registers - "pushw %%ds\n" - "pushw %%es\n" - "pushal\n" - // Load new descriptor tables "lgdt %%es:(%1)\n" "lidt %%cs:pmode_IDT_info\n" @@ -207,10 +202,11 @@ handle_1587(struct bregs *regs) // restore IDT to normal real-mode defaults "lidt %%cs:rmode_IDT_info\n" - // restore regisers - "popal\n" - "popw %%es\n" - "popw %%ds\n" : : "c" (regs->cx), "r" (si + 8)); + // Restore %ds (from %ss) + "movw %%ss, %%ax\n" + "movw %%ax, %%ds\n" + : : "c" (regs->cx), "r" (si + 8) + : "eax", "di", "si"); // XXX - also clobbers %es set_a20(prev_a20_enable); |