@@ -354,22 +354,17 @@ static void trace_init()
354
354
trace_inited = 1 ;
355
355
356
356
{ // See if we can determine the overhead.
357
- uint u;
358
357
timer_t starttime;
359
358
timer_t endtime;
360
- Stack * st;
361
359
362
- st = trace_tos;
360
+ auto st = trace_tos;
363
361
trace_tos = null ;
364
362
QueryPerformanceCounter(&starttime);
363
+ uint u;
365
364
for (u = 0 ; u < 100 ; u++ )
366
365
{
367
- asm
368
- {
369
- call _trace_pro_n ;
370
- db 0 ;
371
- call _trace_epi_n ;
372
- }
366
+ _c_trace_pro(0 ,null );
367
+ _c_trace_epi();
373
368
}
374
369
QueryPerformanceCounter(&endtime);
375
370
trace_ohd = (endtime - starttime) / u;
@@ -759,281 +754,6 @@ static void trace_merge()
759
754
// ///////////////////////////////////////////
760
755
// Function called by trace code in function prolog.
761
756
762
- void _trace_pro_n ()
763
- {
764
- /* Length of string is either:
765
- * db length
766
- * ascii string
767
- * or:
768
- * db 0x0FF
769
- * db 0
770
- * dw length
771
- * ascii string
772
- */
773
-
774
- version (OSX )
775
- {
776
- // 16 byte align stack
777
- version (D_InlineAsm_X86 )
778
- {
779
- asm
780
- {
781
- naked ;
782
- pushad ;
783
-
784
- sub ESP , 4 * 16 ;
785
- movdqu 0 * 16 [ESP ], XMM0 ;
786
- movdqu 1 * 16 [ESP ], XMM1 ;
787
- movdqu 2 * 16 [ESP ], XMM2 ;
788
- movdqu 3 * 16 [ESP ], XMM3 ;
789
-
790
- mov ECX ,8 * 4 + 4 * 16 [ESP ] ;
791
- xor EAX ,EAX ;
792
- mov AL ,[ECX ] ;
793
- cmp AL ,0xFF ;
794
- jne L1 ;
795
- cmp byte ptr 1 [ECX ],0 ;
796
- jne L1 ;
797
- mov AX ,2 [ECX ] ;
798
- add 8 * 4 + 4 * 16 [ESP ],3 ;
799
- add ECX ,3 ;
800
- L1 : inc EAX ;
801
- inc ECX ;
802
- add 8 * 4 + 4 * 16 [ESP ],EAX ;
803
- dec EAX ;
804
- sub ESP ,4 ;
805
- push ECX ;
806
- push EAX ;
807
- call trace_pro ;
808
- add ESP ,12 ;
809
-
810
- movdqu XMM0 , 0 * 16 [ESP ] ;
811
- movdqu XMM1 , 1 * 16 [ESP ] ;
812
- movdqu XMM2 , 2 * 16 [ESP ] ;
813
- movdqu XMM3 , 3 * 16 [ESP ] ;
814
- add ESP , 4 * 16 ;
815
-
816
- popad ;
817
- ret ;
818
- }
819
- }
820
- else version (D_InlineAsm_X86_64 )
821
- {
822
- asm
823
- { naked ;
824
- push RAX ;
825
- push RCX ;
826
- push RDX ;
827
- push RSI ;
828
- push RDI ;
829
- push R8 ;
830
- push R9 ;
831
- push R10 ;
832
- push R11 ;
833
-
834
- sub RSP , 8 * 16 ;
835
- movdqu 0 * 16 [RSP ], XMM0 ;
836
- movdqu 1 * 16 [RSP ], XMM1 ;
837
- movdqu 2 * 16 [RSP ], XMM2 ;
838
- movdqu 3 * 16 [RSP ], XMM3 ;
839
- movdqu 4 * 16 [RSP ], XMM4 ;
840
- movdqu 5 * 16 [RSP ], XMM5 ;
841
- movdqu 6 * 16 [RSP ], XMM6 ;
842
- movdqu 7 * 16 [RSP ], XMM7 ;
843
-
844
- mov RCX ,9 * 8 + 8 * 16 [RSP ] ;
845
- xor RAX ,RAX ;
846
- mov AL ,[RCX ] ;
847
- cmp AL ,0xFF ;
848
- jne L1 ;
849
- cmp byte ptr 1 [RCX ],0 ;
850
- jne L1 ;
851
- mov AX ,2 [RCX ] ;
852
- add 9 * 8 + 8 * 16 [RSP ],3 ;
853
- add RCX ,3 ;
854
- L1 : inc RAX ;
855
- inc RCX ;
856
- add 9 * 8 + 8 * 16 [RSP ],RAX ;
857
- dec RAX ;
858
- // push RCX ;
859
- // push RAX ;
860
- mov RDI ,RAX ;
861
- mov RSI ,RCX ;
862
- call trace_pro ;
863
- // add RSP,16 ;
864
-
865
- movdqu XMM0 , 0 * 16 [RSP ] ;
866
- movdqu XMM1 , 1 * 16 [RSP ] ;
867
- movdqu XMM2 , 2 * 16 [RSP ] ;
868
- movdqu XMM3 , 3 * 16 [RSP ] ;
869
- movdqu XMM4 , 4 * 16 [RSP ] ;
870
- movdqu XMM5 , 5 * 16 [RSP ] ;
871
- movdqu XMM6 , 6 * 16 [RSP ] ;
872
- movdqu XMM7 , 7 * 16 [RSP ] ;
873
- add RSP , 8 * 16 ;
874
-
875
- pop R11 ;
876
- pop R10 ;
877
- pop R9 ;
878
- pop R8 ;
879
- pop RDI ;
880
- pop RSI ;
881
- pop RDX ;
882
- pop RCX ;
883
- pop RAX ;
884
- ret ;
885
- }
886
- }
887
- else
888
- static assert (0 );
889
- }
890
- else
891
- {
892
- version (D_InlineAsm_X86 )
893
- {
894
- asm
895
- {
896
- naked ;
897
- pushad ;
898
- mov ECX ,8 * 4 [ESP ] ;
899
- xor EAX ,EAX ;
900
- mov AL ,[ECX ] ;
901
- cmp AL ,0xFF ;
902
- jne L1 ;
903
- cmp byte ptr 1 [ECX ],0 ;
904
- jne L1 ;
905
- mov AX ,2 [ECX ] ;
906
- add 8 * 4 [ESP ],3 ;
907
- add ECX ,3 ;
908
- L1 : inc EAX ;
909
- inc ECX ;
910
- add 8 * 4 [ESP ],EAX ;
911
- dec EAX ;
912
- push ECX ;
913
- push EAX ;
914
- call trace_pro ;
915
- add ESP ,8 ;
916
- popad ;
917
- ret ;
918
- }
919
- }
920
- else version (Win64 )
921
- {
922
- asm
923
- { naked ;
924
- push RAX ;
925
- push RCX ;
926
- push RDX ;
927
- push RSI ;
928
- push RDI ;
929
- push R8 ;
930
- push R9 ;
931
- push R10 ;
932
- push R11 ;
933
- mov RCX ,9 * 8 [RSP ] ;
934
- xor RAX ,RAX ;
935
- mov AL ,[RCX ] ;
936
- cmp AL ,0xFF ;
937
- jne L1 ;
938
- cmp byte ptr 1 [RCX ],0 ;
939
- jne L1 ;
940
- mov AX ,2 [RCX ] ;
941
- add 9 * 8 [RSP ],3 ;
942
- add RCX ,3 ;
943
- L1 : inc RAX ;
944
- inc RCX ;
945
- add 9 * 8 [RSP ],RAX ;
946
- dec RAX ;
947
- sub RSP ,0x20 ;
948
- mov 16 [RSP ],RCX ;
949
- mov 8 [RSP ],RAX ;
950
- lea RCX ,8 [RSP ] ;
951
- call trace_pro ;
952
- add RSP ,0x20 ;
953
- pop R11 ;
954
- pop R10 ;
955
- pop R9 ;
956
- pop R8 ;
957
- pop RDI ;
958
- pop RSI ;
959
- pop RDX ;
960
- pop RCX ;
961
- pop RAX ;
962
- ret ;
963
- }
964
- }
965
- else version (D_InlineAsm_X86_64 )
966
- {
967
- asm
968
- {
969
- naked ;
970
- push RAX ;
971
- push RCX ;
972
- push RDX ;
973
- push RSI ;
974
- push RDI ;
975
- push R8 ;
976
- push R9 ;
977
- push R10 ;
978
- push R11 ;
979
-
980
- sub RSP , 8 * 16 ;
981
- movdqu 0 * 16 [RSP ], XMM0 ;
982
- movdqu 1 * 16 [RSP ], XMM1 ;
983
- movdqu 2 * 16 [RSP ], XMM2 ;
984
- movdqu 3 * 16 [RSP ], XMM3 ;
985
- movdqu 4 * 16 [RSP ], XMM4 ;
986
- movdqu 5 * 16 [RSP ], XMM5 ;
987
- movdqu 6 * 16 [RSP ], XMM6 ;
988
- movdqu 7 * 16 [RSP ], XMM7 ;
989
-
990
- mov RCX ,9 * 8 + 8 * 16 [RSP ] ;
991
- xor RAX ,RAX ;
992
- mov AL ,[RCX ] ;
993
- cmp AL ,0xFF ;
994
- jne L1 ;
995
- cmp byte ptr 1 [RCX ],0 ;
996
- jne L1 ;
997
- mov AX ,2 [RCX ] ;
998
- add 9 * 8 + 8 * 16 [RSP ],3 ;
999
- add RCX ,3 ;
1000
- L1 : inc RAX ;
1001
- inc RCX ;
1002
- add 9 * 8 + 8 * 16 [RSP ],RAX ;
1003
- dec RAX ;
1004
- // push RCX ;
1005
- // push RAX ;
1006
- mov RDI ,RAX ;
1007
- mov RSI ,RCX ;
1008
- call trace_pro ;
1009
- // add RSP,16 ;
1010
-
1011
- movdqu XMM0 , 0 * 16 [RSP ] ;
1012
- movdqu XMM1 , 1 * 16 [RSP ] ;
1013
- movdqu XMM2 , 2 * 16 [RSP ] ;
1014
- movdqu XMM3 , 3 * 16 [RSP ] ;
1015
- movdqu XMM4 , 4 * 16 [RSP ] ;
1016
- movdqu XMM5 , 5 * 16 [RSP ] ;
1017
- movdqu XMM6 , 6 * 16 [RSP ] ;
1018
- movdqu XMM7 , 7 * 16 [RSP ] ;
1019
- add RSP , 8 * 16 ;
1020
-
1021
- pop R11 ;
1022
- pop R10 ;
1023
- pop R9 ;
1024
- pop R8 ;
1025
- pop RDI ;
1026
- pop RSI ;
1027
- pop RDX ;
1028
- pop RCX ;
1029
- pop RAX ;
1030
- ret ;
1031
- }
1032
- }
1033
- else
1034
- static assert (0 );
1035
- }
1036
- }
1037
757
1038
758
// ///////////////////////////////////////////
1039
759
// Function called by trace code in function epilog.
0 commit comments