@@ -667,8 +667,7 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
667
667
#ifndef UNIX_AMD64_ABI
668
668
#define ETW_EBP_FRAMED 0 // if 1 we cannot use EBP as a scratch register and must create EBP based frames for most methods
669
669
#else // UNIX_AMD64_ABI
670
- // TODO-Amd64-Unis: Enable Frame Pointer chaining for most methods when uniwinding and the rest is implemented. Set the following to 1.
671
- #define ETW_EBP_FRAMED 0 // if 1 we cannot use EBP as a scratch register and must create EBP based frames for most methods
670
+ #define ETW_EBP_FRAMED 1 // if 1 we cannot use EBP as a scratch register and must create EBP based frames for most methods
672
671
#endif // UNIX_AMD64_ABI
673
672
#define FEATURE_FP_REGALLOC 0 // Enabled if RegAlloc is used to enregister Floating Point LclVars
674
673
#define CSE_CONSTS 1 // Enable if we want to CSE constants
@@ -723,71 +722,134 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
723
722
724
723
#define RBM_ALLINT (RBM_INT_CALLEE_SAVED | RBM_INT_CALLEE_TRASH)
725
724
#ifndef UNIX_AMD64_ABI
725
+ #if !ETW_EBP_FRAMED
726
726
#define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_EBP|RBM_ESI|RBM_EDI)
727
+ #else // ETW_EBP_FRAMED
728
+ #define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_ESI|RBM_EDI)
729
+ #endif // ETW_EBP_FRAMED
727
730
#else // UNIX_AMD64_ABI
731
+ #if !ETW_EBP_FRAMED
728
732
#define RBM_LOWINT (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_EBX|RBM_EBP)
733
+ #else // ETW_EBP_FRAMED
734
+ #define RBM_LOWINT (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_EBX)
735
+ #endif // ETW_EBP_FRAMED
729
736
#endif // UNIX_AMD64_ABI
730
737
731
738
#if 0
739
+ #if !ETW_EBP_FRAMED
732
740
#define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX,REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
733
741
REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
742
+ #else // ETW_EBP_FRAMED
743
+ #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX,REG_ESI,REG_EDI,REG_EBX, \
744
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
745
+ #endif // ETW_EBP_FRAMED
746
+
734
747
#else
735
748
// TEMPORARY ORDER TO AVOID CALLEE-SAVES
736
749
// TODO-CQ: Review this and set appropriately
737
750
#ifndef UNIX_AMD64_ABI
751
+ #if !ETW_EBP_FRAMED
738
752
#define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX, \
739
753
REG_R8,REG_R9,REG_R10,REG_R11, \
740
754
REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
741
755
REG_R14,REG_R15,REG_R12,REG_R13
756
+ #else // ETW_EBP_FRAMED
757
+ #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX, \
758
+ REG_R8,REG_R9,REG_R10,REG_R11, \
759
+ REG_ESI,REG_EDI,REG_EBX, \
760
+ REG_R14,REG_R15,REG_R12,REG_R13
761
+ #endif // ETW_EBP_FRAMED
742
762
#else // UNIX_AMD64_ABI
763
+ #if !ETW_EBP_FRAMED
743
764
#define REG_VAR_ORDER \
744
- REG_EAX, REG_EDI, REG_ESI, \
745
- REG_EDX, REG_ECX, REG_R8, REG_R9, \
746
- REG_R10, REG_R11, REG_EBX, REG_EBP, \
747
- REG_R14, REG_R15, REG_R12, REG_R13
765
+ REG_EAX,REG_EDI,REG_ESI, \
766
+ REG_EDX,REG_ECX,REG_R8,REG_R9, \
767
+ REG_R10,REG_R11,REG_EBX,REG_EBP, \
768
+ REG_R14,REG_R15,REG_R12,REG_R13
769
+ #else // ETW_EBP_FRAMED
770
+ #define REG_VAR_ORDER \
771
+ REG_EAX,REG_EDI,REG_ESI, \
772
+ REG_EDX,REG_ECX,REG_R8,REG_R9, \
773
+ REG_R10,REG_R11,REG_EBX, \
774
+ REG_R14,REG_R15,REG_R12,REG_R13
775
+ #endif // ETW_EBP_FRAMED
748
776
#endif // UNIX_AMD64_ABI
749
777
#endif
750
778
751
- #define REG_VAR_ORDER_FLT REG_XMM0, REG_XMM1, REG_XMM2, REG_XMM3, REG_XMM4, REG_XMM5, REG_XMM6, REG_XMM7, REG_XMM8, REG_XMM9, REG_XMM10, REG_XMM11, REG_XMM12, REG_XMM13, REG_XMM14, REG_XMM15
752
-
753
- #define MAX_VAR_ORDER_SIZE 15
779
+ #define REG_VAR_ORDER_FLT REG_XMM0,REG_XMM1,REG_XMM2,REG_XMM3,REG_XMM4,REG_XMM5,REG_XMM6,REG_XMM7,REG_XMM8,REG_XMM9,REG_XMM10,REG_XMM11,REG_XMM12,REG_XMM13,REG_XMM14,REG_XMM15
754
780
755
781
#ifndef UNIX_AMD64_ABI
782
+ #if !ETW_EBP_FRAMED
783
+ #define MAX_VAR_ORDER_SIZE 15
756
784
#define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_EBP, \
757
- REG_R8, REG_R9, REG_R10, REG_R11, REG_R14, REG_R15, REG_R12, REG_R13
785
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
786
+ #else // ETW_EBP_FRAMED
787
+ #define MAX_VAR_ORDER_SIZE 14
788
+ #define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI, \
789
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
790
+ #endif // ETW_EBP_FRAMED
791
+
758
792
#else // UNIX_AMD64_ABI
793
+ #if !ETW_EBP_FRAMED
759
794
#define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_EBP, \
760
- REG_R8, REG_R9, REG_R10, REG_R11, REG_R14, REG_R15, REG_R12, REG_R13
795
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
796
+ #else // ETW_EBP_FRAMED
797
+ #define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX, \
798
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
799
+ #endif // ETW_EBP_FRAMED
800
+
761
801
#endif // UNIX_AMD64_ABI
762
802
763
- #define REG_TMP_ORDER_COUNT 15
764
803
#ifndef UNIX_AMD64_ABI
804
+ #if !ETW_EBP_FRAMED
805
+ #define REG_TMP_ORDER_COUNT 15
765
806
#define REG_PREDICT_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_EBP, \
766
807
REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
767
-
768
808
#define CNT_CALLEE_SAVED (8)
809
+ #else // ETW_EBP_FRAMED
810
+ #define REG_TMP_ORDER_COUNT 14
811
+ #define REG_PREDICT_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI, \
812
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
813
+ #define CNT_CALLEE_SAVED (7)
814
+ #endif // ETW_EBP_FRAMED
815
+
769
816
#define CNT_CALLEE_TRASH (7)
770
817
#define CNT_CALLEE_ENREG (CNT_CALLEE_SAVED)
771
818
772
819
#define CNT_CALLEE_SAVED_FLOAT (10)
773
820
#define CNT_CALLEE_TRASH_FLOAT (6)
774
821
822
+ #if !ETW_EBP_FRAMED
775
823
#define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ESI,REG_EDI,REG_EBP,REG_R12,REG_R13,REG_R14,REG_R15
776
824
#define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ESI,RBM_EDI,RBM_EBP,RBM_R12,RBM_R13,RBM_R14,RBM_R15
825
+ #else // ETW_EBP_FRAMED
826
+ #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ESI,REG_EDI,REG_R12,REG_R13,REG_R14,REG_R15
827
+ #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ESI,RBM_EDI,RBM_R12,RBM_R13,RBM_R14,RBM_R15
828
+ #endif // ETW_EBP_FRAMED
777
829
#define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES) // RBX, RSI, RDI, RBP, R12, R13, R14, R15
778
830
#else // UNIX_AMD64_ABI
831
+ #if !ETW_EBP_FRAMED
779
832
#define REG_PREDICT_ORDER REG_EAX, REG_EDI, REG_ESI, REG_EDX, REG_ECX, REG_EBX, REG_EBP, \
780
- REG_R8, REG_R9, REG_R10, REG_R11, REG_R14, REG_R15, REG_R12, REG_R13
781
-
833
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
782
834
#define CNT_CALLEE_SAVED (6)
835
+ #else // ETW_EBP_FRAMED
836
+ #define REG_PREDICT_ORDER REG_EAX, REG_EDI, REG_ESI, REG_EDX, REG_ECX, REG_EBX, \
837
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
838
+ #define CNT_CALLEE_SAVED (5)
839
+ #endif // ETW_EBP_FRAMED
783
840
#define CNT_CALLEE_TRASH (9)
784
841
#define CNT_CALLEE_ENREG (CNT_CALLEE_SAVED)
785
842
786
843
#define CNT_CALLEE_SAVED_FLOAT (0)
787
844
#define CNT_CALLEE_TRASH_FLOAT (16)
788
845
846
+ #if !ETW_EBP_FRAMED
789
847
#define REG_CALLEE_SAVED_ORDER REG_EBX,REG_EBP,REG_R12,REG_R13,REG_R14,REG_R15
790
848
#define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_EBP,RBM_R12,RBM_R13,RBM_R14,RBM_R15
849
+ #else // ETW_EBP_FRAMED
850
+ #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_R12,REG_R13,REG_R14,REG_R15
851
+ #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_R12,RBM_R13,RBM_R14,RBM_R15
852
+ #endif // ETW_EBP_FRAMED
791
853
#define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES) // RBX, RBP, R12, R13, R14, R15
792
854
#endif // UNIX_AMD64_ABI
793
855
0 commit comments