Incorporated codereview feedback
authorJan Kotas <jkotas@microsoft.com>
Mon, 23 Mar 2015 00:52:27 +0000 (17:52 -0700)
committerJan Kotas <jkotas@microsoft.com>
Mon, 23 Mar 2015 01:18:30 +0000 (18:18 -0700)
src/vm/amd64/AsmHelpers.asm
src/vm/amd64/cgencpu.h
src/vm/amd64/gmscpu.h
src/vm/amd64/unixasmhelpers.S

index e827035..a6d397c 100644 (file)
@@ -141,6 +141,7 @@ RestoreReg macro reg, regnum
         cmove   reg, [rax]
         endm
 
+        ; regnum has to match ENUM_CALLEE_SAVED_REGISTERS macro
         RestoreReg Rdi, 0
         RestoreReg Rsi, 1
         RestoreReg Rbx, 2
index ed05b0f..7e37a95 100644 (file)
@@ -195,6 +195,8 @@ struct REGDISPLAY;
 
 #define NUM_ARGUMENT_REGISTERS 6
 
+// The order of registers in this macro is hardcoded in assembly code
+// at number of places
 #define ENUM_CALLEE_SAVED_REGISTERS() \
     CALLEE_SAVED_REGISTER(R12) \
     CALLEE_SAVED_REGISTER(R13) \
@@ -203,7 +205,7 @@ struct REGDISPLAY;
     CALLEE_SAVED_REGISTER(Rbx) \
     CALLEE_SAVED_REGISTER(Rbp)
 
-#define NUM_CALLEE_SAVED_REGISTERS 8
+#define NUM_CALLEE_SAVED_REGISTERS 6
 
 #else // UNIX_AMD64_ABI
 
@@ -215,6 +217,8 @@ struct REGDISPLAY;
 
 #define NUM_ARGUMENT_REGISTERS 4
 
+// The order of registers in this macro is hardcoded in assembly code
+// at number of places
 #define ENUM_CALLEE_SAVED_REGISTERS() \
     CALLEE_SAVED_REGISTER(Rdi) \
     CALLEE_SAVED_REGISTER(Rsi) \
@@ -243,6 +247,12 @@ struct CalleeSavedRegisters {
     #undef CALLEE_SAVED_REGISTER
 };
 
+struct CalleeSavedRegistersPointers {
+    #define CALLEE_SAVED_REGISTER(regname) PTR_TADDR p##regname;
+    ENUM_CALLEE_SAVED_REGISTERS();
+    #undef CALLEE_SAVED_REGISTER
+};
+
 #define SCRATCH_REGISTER_X86REG kRAX
 
 #ifdef UNIX_AMD64_ABI
index cf2648c..46a0d39 100644 (file)
@@ -68,11 +68,7 @@ protected:
     CalleeSavedRegisters m_Capture;
     
     // context pointers for preserved registers
-    struct {
-#define CALLEE_SAVED_REGISTER(regname) PTR_TADDR p##regname;
-        ENUM_CALLEE_SAVED_REGISTERS();
-#undef CALLEE_SAVED_REGISTER
-    } m_Ptrs;
+    CalleeSavedRegistersPointers m_Ptrs;
 
     PTR_TADDR _pRetAddr;
 
index 75791a7..aaee562 100644 (file)
@@ -68,8 +68,8 @@ DoRestore:
         mov     rdx, [rdi + OFFSETOF__MachState__m_Ptrs + 8 * regnum]; \
         cmp     rax, rdx; \
         cmove   reg, [rax];
-// .endm
 
+        // regnum has to match ENUM_CALLEE_SAVED_REGISTERS macro
         RestoreReg(R12, 0)
         RestoreReg(R13, 1)
         RestoreReg(R14, 2)