@@ -667,12 +667,11 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
667
667
#define FEATURE_EH_FUNCLETS 1
668
668
#define FEATURE_EH_CALLFINALLY_THUNKS 1 // Generate call-to-finally code in "thunks" in the enclosing EH region, protected by "cloned finally" clauses.
669
669
#define FEATURE_STACK_FP_X87 0
670
- #ifndef UNIX_AMD64_ABI
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
672
- #else // UNIX_AMD64_ABI
673
- // TODO-Amd64-Unis: Enable Frame Pointer chaining for most methods when uniwinding and the rest is implemented. Set the following to 1.
670
+ #ifdef UNIX_AMD64_ABI
671
+ #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
+ #else // !UNIX_AMD64_ABI
674
673
#define ETW_EBP_FRAMED 0 // if 1 we cannot use EBP as a scratch register and must create EBP based frames for most methods
675
- #endif // UNIX_AMD64_ABI
674
+ #endif // ! UNIX_AMD64_ABI
676
675
#define FEATURE_FP_REGALLOC 0 // Enabled if RegAlloc is used to enregister Floating Point LclVars
677
676
#define CSE_CONSTS 1 // Enable if we want to CSE constants
678
677
@@ -695,26 +694,26 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
695
694
#define STACK_ALIGN 16 // stack alignment requirement
696
695
#define STACK_ALIGN_SHIFT 3 // Shift-right amount to convert stack size in bytes to size in pointer sized words
697
696
698
- #ifndef UNIX_AMD64_ABI
699
- #if !ETW_EBP_FRAMED
700
- #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI|RBM_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
701
- #else // ETW_EBP_FRAMED
702
- #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
703
- #endif // ETW_EBP_FRAMED
704
- #define RBM_INT_CALLEE_TRASH (RBM_EAX|RBM_ECX|RBM_EDX|RBM_R8|RBM_R9|RBM_R10|RBM_R11)
705
- #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)
706
- #define RBM_FLT_CALLEE_TRASH (RBM_XMM0|RBM_XMM1|RBM_XMM2|RBM_XMM3|RBM_XMM4|RBM_XMM5)
707
- #else // UNIX_AMD64_ABI
708
- #if !ETW_EBP_FRAMED
709
- #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
710
- #else // ETW_EBP_FRAMED
697
+ #ifdef UNIX_AMD64_ABI
698
+ #if ETW_EBP_FRAMED
711
699
#define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
712
- #endif // ETW_EBP_FRAMED
700
+ #else // !ETW_EBP_FRAMED
701
+ #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
702
+ #endif // !ETW_EBP_FRAMED
713
703
#define RBM_INT_CALLEE_TRASH (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_R8|RBM_R9|RBM_R10|RBM_R11)
714
704
#define RBM_FLT_CALLEE_SAVED (0)
715
705
#define RBM_FLT_CALLEE_TRASH (RBM_XMM0|RBM_XMM1|RBM_XMM2|RBM_XMM3|RBM_XMM4|RBM_XMM5|RBM_XMM6|RBM_XMM7| \
716
706
RBM_XMM8|RBM_XMM9|RBM_XMM10|RBM_XMM11|RBM_XMM12|RBM_XMM13|RBM_XMM14|RBM_XMM15)
717
- #endif // UNIX_AMD64_ABI
707
+ #else // !UNIX_AMD64_ABI
708
+ #if ETW_EBP_FRAMED
709
+ #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
710
+ #else // ETW_EBP_FRAMED
711
+ #define RBM_INT_CALLEE_SAVED (RBM_EBX|RBM_ESI|RBM_EDI|RBM_EBP|RBM_R12|RBM_R13|RBM_R14|RBM_R15)
712
+ #endif // ETW_EBP_FRAMED
713
+ #define RBM_INT_CALLEE_TRASH (RBM_EAX|RBM_ECX|RBM_EDX|RBM_R8|RBM_R9|RBM_R10|RBM_R11)
714
+ #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)
715
+ #define RBM_FLT_CALLEE_TRASH (RBM_XMM0|RBM_XMM1|RBM_XMM2|RBM_XMM3|RBM_XMM4|RBM_XMM5)
716
+ #endif // !UNIX_AMD64_ABI
718
717
719
718
#define REG_FLT_CALLEE_SAVED_FIRST REG_XMM6
720
719
#define REG_FLT_CALLEE_SAVED_LAST REG_XMM15
@@ -725,74 +724,135 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
725
724
#define RBM_CALLEE_TRASH_NOGC RBM_CALLEE_TRASH
726
725
727
726
#define RBM_ALLINT (RBM_INT_CALLEE_SAVED | RBM_INT_CALLEE_TRASH)
728
- #ifndef UNIX_AMD64_ABI
729
- #define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_EBP|RBM_ESI|RBM_EDI)
730
- #else // UNIX_AMD64_ABI
727
+ #ifdef UNIX_AMD64_ABI
728
+ #if ETW_EBP_FRAMED
729
+ #define RBM_LOWINT (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_EBX)
730
+ #else // !ETW_EBP_FRAMED
731
731
#define RBM_LOWINT (RBM_EAX|RBM_RDI|RBM_RSI|RBM_EDX|RBM_ECX|RBM_EBX|RBM_EBP)
732
- #endif // UNIX_AMD64_ABI
732
+ #endif // !ETW_EBP_FRAMED
733
+ #else // !UNIX_AMD64_ABI
734
+ #if ETW_EBP_FRAMED
735
+ #define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_ESI|RBM_EDI)
736
+ #else // !ETW_EBP_FRAMED
737
+ #define RBM_LOWINT (RBM_EAX|RBM_ECX|RBM_EBX|RBM_EBP|RBM_ESI|RBM_EDI)
738
+ #endif // !ETW_EBP_FRAMED
739
+ #endif // !UNIX_AMD64_ABI
733
740
734
741
#if 0
735
- #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX,REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
736
- REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
742
+ #if 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
+ #else // !ETW_EBP_FRAMED
746
+ #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX,REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
747
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
748
+ #endif // !ETW_EBP_FRAMED
749
+
737
750
#else
738
751
// TEMPORARY ORDER TO AVOID CALLEE-SAVES
739
752
// TODO-CQ: Review this and set appropriately
740
- #ifndef UNIX_AMD64_ABI
741
- #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX, \
742
- REG_R8,REG_R9,REG_R10,REG_R11, \
743
- REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
744
- REG_R14,REG_R15,REG_R12,REG_R13
745
- #else // UNIX_AMD64_ABI
746
- #define REG_VAR_ORDER \
747
- REG_EAX, REG_EDI, REG_ESI, \
748
- REG_EDX, REG_ECX, REG_R8, REG_R9, \
749
- REG_R10, REG_R11, REG_EBX, REG_EBP, \
750
- REG_R14, REG_R15, REG_R12, REG_R13
751
- #endif // UNIX_AMD64_ABI
753
+ #ifdef UNIX_AMD64_ABI
754
+ #if ETW_EBP_FRAMED
755
+ #define REG_VAR_ORDER \
756
+ REG_EAX,REG_EDI,REG_ESI, \
757
+ REG_EDX,REG_ECX,REG_R8,REG_R9, \
758
+ REG_R10,REG_R11,REG_EBX, \
759
+ REG_R14,REG_R15,REG_R12,REG_R13
760
+ #else // !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,REG_EBP, \
765
+ REG_R14,REG_R15,REG_R12,REG_R13
766
+ #endif // !ETW_EBP_FRAMED
767
+ #else // !UNIX_AMD64_ABI
768
+ #if ETW_EBP_FRAMED
769
+ #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX, \
770
+ REG_R8,REG_R9,REG_R10,REG_R11, \
771
+ REG_ESI,REG_EDI,REG_EBX, \
772
+ REG_R14,REG_R15,REG_R12,REG_R13
773
+ #else // !ETW_EBP_FRAMED
774
+ #define REG_VAR_ORDER REG_EAX,REG_EDX,REG_ECX, \
775
+ REG_R8,REG_R9,REG_R10,REG_R11, \
776
+ REG_ESI,REG_EDI,REG_EBX,REG_EBP, \
777
+ REG_R14,REG_R15,REG_R12,REG_R13
778
+ #endif // !ETW_EBP_FRAMED
779
+ #endif // !UNIX_AMD64_ABI
752
780
#endif
753
781
754
- #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
782
+ #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
755
783
756
- #define MAX_VAR_ORDER_SIZE 15
784
+ #ifdef UNIX_AMD64_ABI
785
+ #if ETW_EBP_FRAMED
786
+ #define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX, \
787
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
788
+ #else // !ETW_EBP_FRAMED
789
+ #define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_EBP, \
790
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
791
+ #endif // !ETW_EBP_FRAMED
792
+ #else // !UNIX_AMD64_ABI
793
+ #if ETW_EBP_FRAMED
794
+ #define MAX_VAR_ORDER_SIZE 14
795
+ #define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI, \
796
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
797
+ #else // !ETW_EBP_FRAMED
798
+ #define MAX_VAR_ORDER_SIZE 15
799
+ #define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_EBP, \
800
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
801
+ #endif // !ETW_EBP_FRAMED
802
+ #endif // !UNIX_AMD64_ABI
803
+
804
+ #ifdef UNIX_AMD64_ABI
805
+ #if ETW_EBP_FRAMED
806
+ #define REG_PREDICT_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX, \
807
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
808
+ #define CNT_CALLEE_SAVED (5)
809
+ #else // ETW_EBP_FRAMED
810
+ #define REG_PREDICT_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_EBP, \
811
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
812
+ #define CNT_CALLEE_SAVED (6)
813
+ #endif // ETW_EBP_FRAMED
814
+ #define CNT_CALLEE_TRASH (9)
815
+ #define CNT_CALLEE_ENREG (CNT_CALLEE_SAVED)
757
816
758
- #ifndef UNIX_AMD64_ABI
759
- #define REG_TMP_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_EBP, \
760
- REG_R8, REG_R9, REG_R10, REG_R11, REG_R14, REG_R15, REG_R12, REG_R13
761
- #else // UNIX_AMD64_ABI
762
- #define REG_TMP_ORDER REG_EAX,REG_EDI,REG_ESI,REG_EDX,REG_ECX,REG_EBX,REG_EBP, \
763
- REG_R8, REG_R9, REG_R10, REG_R11, REG_R14, REG_R15, REG_R12, REG_R13
764
- #endif // UNIX_AMD64_ABI
817
+ #define CNT_CALLEE_SAVED_FLOAT (0)
818
+ #define CNT_CALLEE_TRASH_FLOAT (16)
765
819
820
+ #if ETW_EBP_FRAMED
821
+ #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_R12,REG_R13,REG_R14,REG_R15
822
+ #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_R12,RBM_R13,RBM_R14,RBM_R15
823
+ #else // !ETW_EBP_FRAMED
824
+ #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_EBP,REG_R12,REG_R13,REG_R14,REG_R15
825
+ #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_EBP,RBM_R12,RBM_R13,RBM_R14,RBM_R15
826
+ #endif // !ETW_EBP_FRAMED
827
+ #define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES) // RBX, RBP, R12, R13, R14, R15
828
+ #else // !UNIX_AMD64_ABI
829
+ #if ETW_EBP_FRAMED
830
+ #define REG_TMP_ORDER_COUNT 14
831
+ #define REG_PREDICT_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI, \
832
+ REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
833
+ #define CNT_CALLEE_SAVED (7)
834
+ #else // ETW_EBP_FRAMED
766
835
#define REG_TMP_ORDER_COUNT 15
767
- #ifndef UNIX_AMD64_ABI
768
836
#define REG_PREDICT_ORDER REG_EAX,REG_EDX,REG_ECX,REG_EBX,REG_ESI,REG_EDI,REG_EBP, \
769
837
REG_R8,REG_R9,REG_R10,REG_R11,REG_R14,REG_R15,REG_R12,REG_R13
770
-
771
838
#define CNT_CALLEE_SAVED (8)
839
+ #endif // ETW_EBP_FRAMED
840
+
772
841
#define CNT_CALLEE_TRASH (7)
773
842
#define CNT_CALLEE_ENREG (CNT_CALLEE_SAVED)
774
843
775
844
#define CNT_CALLEE_SAVED_FLOAT (10)
776
845
#define CNT_CALLEE_TRASH_FLOAT (6)
777
846
847
+ #if ETW_EBP_FRAMED
848
+ #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ESI,REG_EDI,REG_R12,REG_R13,REG_R14,REG_R15
849
+ #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ESI,RBM_EDI,RBM_R12,RBM_R13,RBM_R14,RBM_R15
850
+ #else // !ETW_EBP_FRAMED
778
851
#define REG_CALLEE_SAVED_ORDER REG_EBX,REG_ESI,REG_EDI,REG_EBP,REG_R12,REG_R13,REG_R14,REG_R15
779
852
#define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_ESI,RBM_EDI,RBM_EBP,RBM_R12,RBM_R13,RBM_R14,RBM_R15
853
+ #endif // !ETW_EBP_FRAMED
780
854
#define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES) // RBX, RSI, RDI, RBP, R12, R13, R14, R15
781
- #else // UNIX_AMD64_ABI
782
- #define REG_PREDICT_ORDER REG_EAX, REG_EDI, REG_ESI, REG_EDX, REG_ECX, REG_EBX, REG_EBP, \
783
- REG_R8, REG_R9, REG_R10, REG_R11, REG_R14, REG_R15, REG_R12, REG_R13
784
-
785
- #define CNT_CALLEE_SAVED (6)
786
- #define CNT_CALLEE_TRASH (9)
787
- #define CNT_CALLEE_ENREG (CNT_CALLEE_SAVED)
788
-
789
- #define CNT_CALLEE_SAVED_FLOAT (0)
790
- #define CNT_CALLEE_TRASH_FLOAT (16)
791
-
792
- #define REG_CALLEE_SAVED_ORDER REG_EBX,REG_EBP,REG_R12,REG_R13,REG_R14,REG_R15
793
- #define RBM_CALLEE_SAVED_ORDER RBM_EBX,RBM_EBP,RBM_R12,RBM_R13,RBM_R14,RBM_R15
794
- #define CALLEE_SAVED_REG_MAXSZ (CNT_CALLEE_SAVED*REGSIZE_BYTES) // RBX, RBP, R12, R13, R14, R15
795
- #endif // UNIX_AMD64_ABI
855
+ #endif // !UNIX_AMD64_ABI
796
856
797
857
#define CALLEE_SAVED_FLOAT_MAXSZ (CNT_CALLEE_SAVED_FLOAT*16)
798
858
@@ -808,13 +868,13 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
808
868
#define RBM_TMP_0 RBM_EAX
809
869
810
870
// This is the second register in REG_TMP_ORDER
811
- #ifndef UNIX_AMD64_ABI
812
- #define REG_TMP_1 REG_EDX
813
- #define RBM_TMP_1 RBM_EDX
814
- #else // UNIX_AMD64_ABI
871
+ #ifdef UNIX_AMD64_ABI
815
872
#define REG_TMP_1 REG_EDI
816
873
#define RBM_TMP_1 RBM_EDI
817
- #endif // UNIX_AMD64_ABI
874
+ #else // !UNIX_AMD64_ABI
875
+ #define REG_TMP_1 REG_EDX
876
+ #define RBM_TMP_1 RBM_EDX
877
+ #endif // !UNIX_AMD64_ABI
818
878
#define REG_PAIR_TMP REG_PAIR_EAXEDX
819
879
#define RBM_PAIR_TMP (RBM_EAX|RBM_EDX)
820
880
#define REG_PAIR_TMP_LO REG_EAX
@@ -834,13 +894,13 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
834
894
#define RBM_SCRATCH RBM_EAX
835
895
836
896
// Where is the exception object on entry to the handler block?
837
- #ifndef UNIX_AMD64_ABI
838
- #define REG_EXCEPTION_OBJECT REG_EDX
839
- #define RBM_EXCEPTION_OBJECT RBM_EDX
840
- #else
897
+ #ifdef UNIX_AMD64_ABI
841
898
#define REG_EXCEPTION_OBJECT REG_ESI
842
899
#define RBM_EXCEPTION_OBJECT RBM_ESI
843
- #endif // UNIX_AMD64_ABI
900
+ #else // !UNIX_AMD64_ABI
901
+ #define REG_EXCEPTION_OBJECT REG_EDX
902
+ #define RBM_EXCEPTION_OBJECT RBM_EDX
903
+ #endif // !UNIX_AMD64_ABI
844
904
845
905
#define REG_JUMP_THUNK_PARAM REG_EAX
846
906
#define RBM_JUMP_THUNK_PARAM RBM_EAX
@@ -924,28 +984,7 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
924
984
925
985
#define FIRST_ARG_STACK_OFFS (REGSIZE_BYTES) // return address
926
986
927
- #ifndef UNIX_AMD64_ABI
928
- #define MAX_REG_ARG 4
929
- #define MAX_FLOAT_REG_ARG 4
930
- #define REG_ARG_FIRST REG_ECX
931
- #define REG_ARG_LAST REG_R9
932
- #define INIT_ARG_STACK_SLOT 4 // 4 outgoing reserved stack slots
933
-
934
- #define REG_ARG_0 REG_ECX
935
- #define REG_ARG_1 REG_EDX
936
- #define REG_ARG_2 REG_R8
937
- #define REG_ARG_3 REG_R9
938
-
939
- SELECTANY const regNumber intArgRegs [] = {REG_ECX , REG_EDX , REG_R8 , REG_R9 };
940
- SELECTANY const regMaskTP intArgMasks [] = {RBM_ECX , RBM_EDX , RBM_R8 , RBM_R9 };
941
- SELECTANY const regNumber fltArgRegs [] = {REG_XMM0 , REG_XMM1 , REG_XMM2 , REG_XMM3 };
942
- SELECTANY const regMaskTP fltArgMasks [] = {RBM_XMM0 , RBM_XMM1 , RBM_XMM2 , RBM_XMM3 };
943
-
944
- #define RBM_ARG_0 RBM_ECX
945
- #define RBM_ARG_1 RBM_EDX
946
- #define RBM_ARG_2 RBM_R8
947
- #define RBM_ARG_3 RBM_R9
948
- #else // UNIX_AMD64_ABI
987
+ #ifdef UNIX_AMD64_ABI
949
988
#define MAX_REG_ARG 6
950
989
#define MAX_FLOAT_REG_ARG 8
951
990
#define REG_ARG_FIRST REG_EDI
@@ -970,7 +1009,28 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
970
1009
#define RBM_ARG_3 RBM_ECX
971
1010
#define RBM_ARG_4 RBM_R8
972
1011
#define RBM_ARG_5 RBM_R9
973
- #endif // UNIX_AMD64_ABI
1012
+ #else // !UNIX_AMD64_ABI
1013
+ #define MAX_REG_ARG 4
1014
+ #define MAX_FLOAT_REG_ARG 4
1015
+ #define REG_ARG_FIRST REG_ECX
1016
+ #define REG_ARG_LAST REG_R9
1017
+ #define INIT_ARG_STACK_SLOT 4 // 4 outgoing reserved stack slots
1018
+
1019
+ #define REG_ARG_0 REG_ECX
1020
+ #define REG_ARG_1 REG_EDX
1021
+ #define REG_ARG_2 REG_R8
1022
+ #define REG_ARG_3 REG_R9
1023
+
1024
+ SELECTANY const regNumber intArgRegs [] = { REG_ECX , REG_EDX , REG_R8 , REG_R9 };
1025
+ SELECTANY const regMaskTP intArgMasks [] = { RBM_ECX , RBM_EDX , RBM_R8 , RBM_R9 };
1026
+ SELECTANY const regNumber fltArgRegs [] = { REG_XMM0 , REG_XMM1 , REG_XMM2 , REG_XMM3 };
1027
+ SELECTANY const regMaskTP fltArgMasks [] = { RBM_XMM0 , RBM_XMM1 , RBM_XMM2 , RBM_XMM3 };
1028
+
1029
+ #define RBM_ARG_0 RBM_ECX
1030
+ #define RBM_ARG_1 RBM_EDX
1031
+ #define RBM_ARG_2 RBM_R8
1032
+ #define RBM_ARG_3 RBM_R9
1033
+ #endif // !UNIX_AMD64_ABI
974
1034
975
1035
#define REG_FLTARG_0 REG_XMM0
976
1036
#define REG_FLTARG_1 REG_XMM1
@@ -982,10 +1042,7 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
982
1042
#define RBM_FLTARG_2 RBM_XMM2
983
1043
#define RBM_FLTARG_3 RBM_XMM3
984
1044
985
- #ifndef UNIX_AMD64_ABI
986
- #define RBM_ARG_REGS (RBM_ARG_0|RBM_ARG_1|RBM_ARG_2|RBM_ARG_3)
987
- #define RBM_FLTARG_REGS (RBM_FLTARG_0|RBM_FLTARG_1|RBM_FLTARG_2|RBM_FLTARG_3)
988
- #else // UNIX_AMD64_ABI
1045
+ #ifdef UNIX_AMD64_ABI
989
1046
#define REG_FLTARG_4 REG_XMM4
990
1047
#define REG_FLTARG_5 REG_XMM5
991
1048
#define REG_FLTARG_6 REG_XMM6
@@ -998,7 +1055,10 @@ typedef unsigned short regPairNoSmall; // arm: need 12 bits
998
1055
999
1056
#define RBM_ARG_REGS (RBM_ARG_0|RBM_ARG_1|RBM_ARG_2|RBM_ARG_3|RBM_ARG_4|RBM_ARG_5)
1000
1057
#define RBM_FLTARG_REGS (RBM_FLTARG_0|RBM_FLTARG_1|RBM_FLTARG_2|RBM_FLTARG_3|RBM_FLTARG_4|RBM_FLTARG_5|RBM_FLTARG_6|RBM_FLTARG_7)
1001
- #endif // UNIX_AMD64_ABI
1058
+ #else // !UNIX_AMD64_ABI
1059
+ #define RBM_ARG_REGS (RBM_ARG_0|RBM_ARG_1|RBM_ARG_2|RBM_ARG_3)
1060
+ #define RBM_FLTARG_REGS (RBM_FLTARG_0|RBM_FLTARG_1|RBM_FLTARG_2|RBM_FLTARG_3)
1061
+ #endif // !UNIX_AMD64_ABI
1002
1062
1003
1063
// The registers trashed by profiler enter/leave/tailcall hook
1004
1064
// See vm\amd64\amshelpers.asm for more details.
0 commit comments