Minor - reduce stack usage of handle_1587.
authorKevin O'Connor <kevin@koconnor.net>
Sat, 1 Mar 2008 19:25:44 +0000 (14:25 -0500)
committerKevin O'Connor <kevin@koconnor.net>
Sat, 1 Mar 2008 19:25:44 +0000 (14:25 -0500)
src/system.c

index f3b0d0891e1faeec9477c1541475de79195e1cb1..331e4521f6098c43e1c953661e21864fd1249857 100644 (file)
@@ -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);