@@ -700,22 +700,26 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
700
700
#define STACK_ALIGN 16 // stack alignment requirement
701
701
#define STACK_ALIGN_SHIFT 3 // Shift-right amount to convert stack size in bytes to size in pointer sized words
702
702
703
- #ifdef UNIX_AMD64_ABI
704
703
#if ETW_EBP_FRAMED
705
- #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
704
+ #define RBM_ETW_FRAMED_EBP RBM_NONE
705
+ #define RBM_ETW_FRAMED_EBP_LIST
706
+ #define REG_ETW_FRAMED_EBP_LIST
707
+ #define REG_ETW_FRAMED_EBP_COUNT 0
706
708
#else // !ETW_EBP_FRAMED
707
- #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
709
+ #define RBM_ETW_FRAMED_EBP RBM_EBP
710
+ #define RBM_ETW_FRAMED_EBP_LIST RBM_EBP,
711
+ #define REG_ETW_FRAMED_EBP_LIST REG_EBP,
712
+ #define REG_ETW_FRAMED_EBP_COUNT 1
708
713
#endif // !ETW_EBP_FRAMED
714
+
715
+ #ifdef UNIX_AMD64_ABI
716
+ #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ETW_FRAMED_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
709
717
#define RBM_INT_CALLEE_TRASH (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_R8|RBM_R9|RBM_R10|RBM_R11)
710
718
#define RBM_FLT_CALLEE_SAVED (0)
711
719
#define RBM_FLT_CALLEE_TRASH (RBM_XMM0|RBM_XMM1|RBM_XMM2|RBM_XMM3|RBM_XMM4|RBM_XMM5|RBM_XMM6|RBM_XMM7| \
712
720
RBM_XMM8|RBM_XMM9|RBM_XMM10|RBM_XMM11|RBM_XMM12|RBM_XMM13|RBM_XMM14|RBM_XMM15)
713
721
#else // !UNIX_AMD64_ABI
714
- #if ETW_EBP_FRAMED
715
- #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
716
- #else // ETW_EBP_FRAMED
717
- #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI|RBM_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
718
- #endif // ETW_EBP_FRAMED
722
+ #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI|RBM_ETW_FRAMED_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
719
723
#define RBM_INT_CALLEE_TRASH (RBM_EAX|RBM_ECX|RBM_EDX|RBM_R8|RBM_R9|RBM_R10|RBM_R11)
720
724
#define RBM_FLT_CALLEE_SAVED (RBM_XMM6|RBM_XMM7|RBM_XMM8|RBM_XMM9|RBM_XMM10|RBM_XMM11|RBM_XMM12|RBM_XMM13|RBM_XMM14|RBM_XMM15)
721
725
#define RBM_FLT_CALLEE_TRASH (RBM_XMM0|RBM_XMM1|RBM_XMM2|RBM_XMM3|RBM_XMM4|RBM_XMM5)
@@ -731,135 +735,69 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
731
735
732
736
#define RBM_ALLINT (RBM_INT_CALLEE_SAVED | RBM_INT_CALLEE_TRASH)
733
737
#ifdef UNIX_AMD64_ABI
734
- #if ETW_EBP_FRAMED
735
- #define RBM_LOWINT (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_EBX)
736
- #else // !ETW_EBP_FRAMED
737
- #define RBM_LOWINT (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_EBX|RBM_EBP)
738
- #endif // !ETW_EBP_FRAMED
738
+ #define RBM_LOWINT (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_EBX|RBM_ETW_FRAMED_EBP)
739
739
#else // !UNIX_AMD64_ABI
740
- #if ETW_EBP_FRAMED
741
- #define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_ESI|RBM_EDI)
742
- #else // !ETW_EBP_FRAMED
743
- #define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_EBP|RBM_ESI|RBM_EDI)
744
- #endif // !ETW_EBP_FRAMED
740
+ #define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_ETW_FRAMED_EBP|RBM_ESI|RBM_EDI)
745
741
#endif // !UNIX_AMD64_ABI
746
742
747
743
#if 0
748
- #if ETW_EBP_FRAMED
749
- #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX,REG_ESI,REG_EDI,REG_EBX, \
750
- REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
751
- #else // !ETW_EBP_FRAMED
752
- #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX,REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
744
+ #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX,REG_ESI,REG_EDI,REG_EBX,REG_ETW_FRAMED_EBP_LIST \
753
745
REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
754
- #endif // !ETW_EBP_FRAMED
755
-
756
746
#else
757
747
// TEMPORARY ORDER TO AVOID CALLEE-SAVES
758
748
// TODO-CQ: Review this and set appropriately
759
749
#ifdef UNIX_AMD64_ABI
760
- #if ETW_EBP_FRAMED
761
- #define REG_VAR_ORDER \
762
- REG_EAX,REG_EDI,REG_ESI, \
763
- REG_EDX,REG_ECX,REG_R8,REG_R9, \
764
- REG_R10,REG_R11,REG_EBX, \
765
- REG_R14,REG_R15,REG_R12,REG_R13
766
- #else // !ETW_EBP_FRAMED
767
- #define REG_VAR_ORDER \
768
- REG_EAX,REG_EDI,REG_ESI, \
750
+ #define REG_VAR_ORDER REG_EAX,REG_EDI,REG_ESI, \
769
751
REG_EDX,REG_ECX,REG_R8,REG_R9, \
770
- REG_R10,REG_R11,REG_EBX,REG_EBP, \
752
+ REG_R10,REG_R11,REG_EBX,REG_ETW_FRAMED_EBP_LIST \
771
753
REG_R14,REG_R15,REG_R12,REG_R13
772
- #endif // !ETW_EBP_FRAMED
773
754
#else // !UNIX_AMD64_ABI
774
- #if ETW_EBP_FRAMED
775
755
#define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX, \
776
756
REG_R8,REG_R9,REG_R10,REG_R11, \
777
- REG_ESI,REG_EDI,REG_EBX, \
757
+ REG_ESI,REG_EDI,REG_EBX,REG_ETW_FRAMED_EBP_LIST \
778
758
REG_R14,REG_R15,REG_R12,REG_R13
779
- #else // !ETW_EBP_FRAMED
780
- #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX, \
781
- REG_R8,REG_R9,REG_R10,REG_R11, \
782
- REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
783
- REG_R14,REG_R15,REG_R12,REG_R13
784
- #endif // !ETW_EBP_FRAMED
785
759
#endif // !UNIX_AMD64_ABI
786
760
#endif
787
761
788
762
#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
789
763
790
764
#ifdef UNIX_AMD64_ABI
791
- #if ETW_EBP_FRAMED
792
- #define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX, \
765
+ #define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_ETW_FRAMED_EBP_LIST \
793
766
REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
794
- #else // !ETW_EBP_FRAMED
795
- #define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_EBP, \
796
- REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
797
- #endif // !ETW_EBP_FRAMED
798
767
#else // !UNIX_AMD64_ABI
799
- #if ETW_EBP_FRAMED
800
- #define MAX_VAR_ORDER_SIZE 14
801
- #define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI, \
802
- REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
803
- #else // !ETW_EBP_FRAMED
804
- #define MAX_VAR_ORDER_SIZE 15
805
- #define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_EBP, \
768
+ #define MAX_VAR_ORDER_SIZE (14 + REG_ETW_FRAMED_EBP_COUNT)
769
+ #define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_ETW_FRAMED_EBP_LIST \
806
770
REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
807
- #endif // !ETW_EBP_FRAMED
808
771
#endif // !UNIX_AMD64_ABI
809
772
810
773
#ifdef UNIX_AMD64_ABI
811
- #if ETW_EBP_FRAMED
812
- #define REG_PREDICT_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX, \
813
- REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
814
- #define CNT_CALLEE_SAVED (5)
815
- #else // ETW_EBP_FRAMED
816
- #define REG_PREDICT_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_EBP, \
817
- REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
818
- #define CNT_CALLEE_SAVED (6)
819
- #endif // ETW_EBP_FRAMED
774
+ #define REG_PREDICT_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_ETW_FRAMED_EBP_LIST \
775
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
776
+ #define CNT_CALLEE_SAVED (5 + REG_ETW_FRAMED_EBP_COUNT)
820
777
#define CNT_CALLEE_TRASH (9)
821
778
#define CNT_CALLEE_ENREG (CNT_CALLEE_SAVED)
822
779
823
780
#define CNT_CALLEE_SAVED_FLOAT (0)
824
781
#define CNT_CALLEE_TRASH_FLOAT (16)
825
782
826
- #if ETW_EBP_FRAMED
827
- #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_R12,REG_R13,REG_R14,REG_R15
828
- #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_R12,RBM_R13,RBM_R14,RBM_R15
829
- #else // !ETW_EBP_FRAMED
830
- #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_EBP,REG_R12,REG_R13,REG_R14,REG_R15
831
- #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_EBP,RBM_R12,RBM_R13,RBM_R14,RBM_R15
832
- #endif // !ETW_EBP_FRAMED
833
- #define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES) // RBX, RBP, R12, R13, R14, R15
783
+ #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ETW_FRAMED_EBP_LIST REG_R12,REG_R13,REG_R14,REG_R15
784
+ #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ETW_FRAMED_EBP_LIST RBM_R12,RBM_R13,RBM_R14,RBM_R15
834
785
#else // !UNIX_AMD64_ABI
835
- #if ETW_EBP_FRAMED
836
- #define REG_TMP_ORDER_COUNT 14
837
- #define REG_PREDICT_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI, \
786
+ #define REG_TMP_ORDER_COUNT (14 + REG_ETW_FRAMED_EBP_COUNT)
787
+ #define REG_PREDICT_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_ETW_FRAMED_EBP_LIST \
838
788
REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
839
- #define CNT_CALLEE_SAVED (7)
840
- #else // ETW_EBP_FRAMED
841
- #define REG_TMP_ORDER_COUNT 15
842
- #define REG_PREDICT_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_EBP, \
843
- REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
844
- #define CNT_CALLEE_SAVED (8)
845
- #endif // ETW_EBP_FRAMED
846
-
789
+ #define CNT_CALLEE_SAVED (7 + REG_ETW_FRAMED_EBP_COUNT)
847
790
#define CNT_CALLEE_TRASH (7)
848
791
#define CNT_CALLEE_ENREG (CNT_CALLEE_SAVED)
849
792
850
793
#define CNT_CALLEE_SAVED_FLOAT (10)
851
794
#define CNT_CALLEE_TRASH_FLOAT (6)
852
795
853
- #if ETW_EBP_FRAMED
854
- #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ESI,REG_EDI,REG_R12,REG_R13,REG_R14,REG_R15
855
- #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ESI,RBM_EDI,RBM_R12,RBM_R13,RBM_R14,RBM_R15
856
- #else // !ETW_EBP_FRAMED
857
- #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ESI,REG_EDI,REG_EBP,REG_R12,REG_R13,REG_R14,REG_R15
858
- #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ESI,RBM_EDI,RBM_EBP,RBM_R12,RBM_R13,RBM_R14,RBM_R15
859
- #endif // !ETW_EBP_FRAMED
860
- #define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES) // RBX, RSI, RDI, RBP, R12, R13, R14, R15
796
+ #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ESI,REG_EDI,REG_ETW_FRAMED_EBP_LIST REG_R12,REG_R13,REG_R14,REG_R15
797
+ #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ESI,RBM_EDI,RBM_ETW_FRAMED_EBP_LIST RBM_R12,RBM_R13,RBM_R14,RBM_R15
861
798
#endif // !UNIX_AMD64_ABI
862
799
800
+ #define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES)
863
801
#define CALLEE_SAVED_FLOAT_MAXSZ (CNT_CALLEE_SAVED_FLOAT*16)
864
802
865
803
// We reuse the ESP register as a illegal value in the register predictor
0 commit comments