From 1fdfb7bbb93de952d295d2d375b41387bbf6d2b3 Mon Sep 17 00:00:00 2001 From: John van Groningen Date: Mon, 13 Dec 2010 11:02:08 +0000 Subject: put functions in areals.asm in different sections to enable optimizing linking, these sections are first called _T000, _T001 .. and renamed to .text using rename_Tn_sections.c --- areals.asm | 61 +++++++++++++---- build_windows_object_files_64.bat | 10 ++- rename_Tn_sections.c | 140 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 195 insertions(+), 16 deletions(-) create mode 100644 rename_Tn_sections.c diff --git a/areals.asm b/areals.asm index 73cfafb..5555800 100644 --- a/areals.asm +++ b/areals.asm @@ -1,10 +1,8 @@ -_TEXT segment para 'CODE' -_TEXT ends _DATA segment para 'DATA' _DATA ends - _TEXT segment +_T000 segment para 'CODE' public sin_real @@ -24,7 +22,7 @@ sin_real: jbe sin_real_0 ucomisd xmm0,qword ptr real_2_p_53 - jae sin_cos_or_tan_real_too_large ; x>=-2^53 + jae sin_or_cos_real_too_large ; x>=-2^53 call rem_36825084_pi @@ -116,7 +114,7 @@ sin_real_n: jae sin_real_n_0 ucomisd xmm0,qword ptr real_m_2_p_53 - jbe sin_cos_or_tan_real_too_small_or_nan ; x<=-2^53 | NAN + jbe sin_or_cos_real_too_small_or_nan ; x<=-2^53 | NAN call rem_n_36825084_pi @@ -758,7 +756,7 @@ cos_real: jbe cos_real_0 ucomisd xmm0,qword ptr real_2_p_53 - jae sin_cos_or_tan_real_too_large ; x>=-2^53 + jae sin_or_cos_real_too_large ; x>=-2^53 call rem_36825084_pi @@ -848,7 +846,7 @@ cos_real_n: jae cos_real_n_0 ucomisd xmm0,qword ptr real_m_2_p_53 - jbe sin_cos_or_tan_real_too_small_or_nan ; x<=-2^53 | NAN + jbe sin_or_cos_real_too_small_or_nan ; x<=-2^53 | NAN call rem_n_36825084_pi @@ -1216,6 +1214,15 @@ cos_real_m_s: addsd xmm0,xmm8 ret +sin_or_cos_real_too_large: +sin_or_cos_real_too_small_or_nan: + subsd xmm0,xmm0 + ret + +_T000 ends + +_T001 segment para 'CODE' + public tan_real tan_real: @@ -1236,7 +1243,7 @@ tan_real: jbe tan_real_0 ucomisd xmm0,qword ptr real_2_p_53 - jae sin_cos_or_tan_real_too_large ; x>=-2^53 + jae tan_real_too_large ; x>=-2^53 call rem_36825084_pi @@ -1344,7 +1351,7 @@ tan_real_n: jae tan_real_n_0 ucomisd xmm0,qword ptr real_m_2_p_53 - jbe sin_cos_or_tan_real_too_small_or_nan ; x<=-2^53 | NAN + jbe tan_real_too_small_or_nan ; x<=-2^53 | NAN call rem_n_36825084_pi jmp tan_real_pn_l @@ -2735,12 +2742,15 @@ tan_real_0_5_n: movlpd xmm14,qword ptr real_0_5 jmp tan_real_0_5_a_s_0_5_3_pn - -sin_cos_or_tan_real_too_large: -sin_cos_or_tan_real_too_small_or_nan: +tan_real_too_large: +tan_real_too_small_or_nan: subsd xmm0,xmm0 ret +_T001 ends + +_T002 segment para 'CODE' + rem_36825084_pi: movsd xmm1,xmm0 divsd xmm0,qword ptr real_36825084_pi @@ -2877,6 +2887,9 @@ rem_n_36825084_pi_g3: psllq xmm6,xmm4 ret +_T002 ends + +_T003 segment para 'CODE' public asin_real @@ -3263,6 +3276,9 @@ asin_real_e: divsd xmm0,xmm0 ret +_T003 ends + +_T004 segment para 'CODE' public acos_real @@ -3563,6 +3579,10 @@ acos_real_e: divsd xmm0,xmm0 ret +_T004 ends + +_T005 segment para 'CODE' + public atan_real atan_real: @@ -4348,6 +4368,10 @@ atan_real_large: movlpd xmm0,qword ptr real_pi_d_2 ret +_T005 ends + +_T006 segment para 'CODE' + public exp_real exp_real: @@ -4795,6 +4819,10 @@ exp_real_3_n_large: movlpd xmm0,qword ptr real_0_0 ret +_T006 ends + +_T007 segment para 'CODE' + public ln_real ln_real: @@ -5456,6 +5484,10 @@ ln_real_less_0_or_nan: ln_real_inf_or_nan: ret +_T007 ends + +_T008 segment para 'CODE' + public log10_real log10_real: @@ -6174,6 +6206,9 @@ log10_real_less_0_or_nan: log10_real_inf_or_nan: ret +_T008 ends + +_T009 segment para 'CODE' public pow_real @@ -7086,7 +7121,7 @@ exp2_underflow: movlpd xmm0,qword ptr qword ptr real_0_0 ret -_TEXT ends +_T009 ends _DATA segment diff --git a/build_windows_object_files_64.bat b/build_windows_object_files_64.bat index 9eff5cb..e069718 100644 --- a/build_windows_object_files_64.bat +++ b/build_windows_object_files_64.bat @@ -1,8 +1,12 @@ call "c:\Program Files\Microsoft SDK\SetEnv.bat" /AMD64 /RETAIL +cl /nologo /O rename_Tn_sections.c ml64 /nologo /c /Fo _startup0.o _startup0.asm -ml64 /nologo /c /Fo _startup1.o astartup.asm -ml64 /nologo /c /DPROFILE /Fo _startup1Profile.o astartup.asm -ml64 /nologo /c /DPROFILE /DTRACE /Fo _startup1Trace.o astartup.asm +ml64 /nologo /c /Fo _startup1_.o astartup.asm +.\rename_Tn_sections _startup1_.o _startup1.o +ml64 /nologo /c /DPROFILE /Fo _startup1Profile_.o astartup.asm +.\rename_Tn_sections _startup1Profile_.o _startup1Profile.o +ml64 /nologo /c /DPROFILE /DTRACE /Fo _startup1Trace_.o astartup.asm +.\rename_Tn_sections _startup1Trace_.o _startup1Trace.o cl /nologo /c /O /DWINDOWS /DTIME_PROFILE /DWRITE_HEAP /Fo_startup2.o wcon.c "C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin\x86_amd64\ml64.exe" /nologo /c /Fo _startup3.o afileIO3.asm cl /nologo /c /O /DWINDOWS /DA64 /DTIME_PROFILE /Fo_startup4.o wfileIO3.c diff --git a/rename_Tn_sections.c b/rename_Tn_sections.c new file mode 100644 index 0000000..8b20348 --- /dev/null +++ b/rename_Tn_sections.c @@ -0,0 +1,140 @@ + +#include + +int main (int argc,char **argv) +{ + FILE *fs,*fd; + char header[20]; + int f_nscns,f_nsyms,f_opthdr,f_symptr; + int section_n,symbol_n,offset; + + if (argc!=3){ + printf ("usage: rename_Tn_sections source_object_file destination_object_file\n"); + return 1; + } + + fs=fopen (argv[1],"rb"); + if (fs==NULL){ + printf ("opening file %s failed\n",argv[1]); + return 1; + } + + fd=fopen (argv[2],"wb"); + if (fd==NULL){ + printf ("creating file %s failed\n",argv[2]); + return 1; + } + + fread (header,1,20,fs); + fwrite (header,1,20,fd); + + f_nscns = *(short *)&header[2]; + f_nsyms = *(int*)&header[12]; + f_opthdr = *(short*)&header[16]; + f_symptr = *(int*)&header[8]; + + /* + printf ("number of sections = %d\n",f_nscns); + printf ("number of symbols = %d\n",f_nsyms); + printf ("symbol table offset = %d\n",f_symptr); + printf ("opthdr = %d\n",f_opthdr); + */ + + for (section_n=0; section_n0){ + fread (symbol,1,18,fs); + fwrite (symbol,1,18,fd); + --n_numaux; + ++symbol_n; + } + } + + for (;;){ + int c; + + c=fgetc (fs); + if (c==EOF) + break; + fputc (c,fd); + } + + fclose (fs); + fclose (fd); + + return 0; +} -- cgit v1.2.3