Reorder rax in regs, add comments about ABI
authorJack Miller <jack@codezen.org>
Sat, 19 Mar 2016 20:36:45 +0000 (15:36 -0500)
committerJack Miller <jack@codezen.org>
Sat, 19 Mar 2016 20:36:45 +0000 (15:36 -0500)
asm/idt.asm
include/regs.h

index 1c116f2..431789d 100644 (file)
@@ -112,14 +112,16 @@ fixup_idtr:
 
 SECTION .text
 
+/* Save/restore order from regs.h */
+
 %macro SAVE_ALL 0
     push rdi
     push rsi
     push rdx
     push rcx
-    push rax
     push r8
     push r9
+    push rax
     push r10
     push r11
     push rbx
@@ -139,9 +141,9 @@ SECTION .text
     pop rbx
     pop r11
     pop r10
+    pop rax
     pop r9
     pop r8
-    pop rax
     pop rcx
     pop rdx
     pop rsi
index 6d65d3e..2f73e14 100644 (file)
@@ -4,7 +4,14 @@
 
 #include <types.h>
 
-// Figure 5-4 in the IA32 arch manual
+/* Weird order of registers is from the ABI
+ *
+ * rdi, rsi, rdx, rcx, r8, r9 are arguments
+ *
+ * rax is return
+ *
+ * rbx, rbp, r12 - r15 are expected to be preserved by callee
+ */
 
 struct regs {
 
@@ -18,9 +25,9 @@ struct regs {
        u64 rbx;
        u64 r11;
        u64 r10;
+       u64 rax;
        u64 r9;
        u64 r8;
-       u64 rax;
        u64 rcx;
        u64 rdx;
        u64 rsi;