diff options
-rw-r--r-- | areals.asm | 61 | ||||
-rw-r--r-- | build_windows_object_files_64.bat | 10 | ||||
-rw-r--r-- | rename_Tn_sections.c | 140 |
3 files changed, 195 insertions, 16 deletions
@@ -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 <stdio.h>
+
+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_n<f_nscns; ++section_n){
+ char section_header[40];
+
+ fread (section_header,1,40,fs);
+
+/* printf ("%s\n",section_header); */
+
+ if (section_header[0]=='_' &&
+ section_header[1]=='T' &&
+ (unsigned)(section_header[2]-'0') < 10u &&
+ (unsigned)(section_header[3]-'0') < 10u &&
+ (unsigned)(section_header[4]-'0') < 10u &&
+ section_header[5]=='\0')
+ {
+ section_header[0]='.';
+ section_header[1]='t';
+ section_header[2]='e';
+ section_header[3]='x';
+ section_header[4]='t';
+ }
+
+ fwrite (section_header,1,40,fd);
+ }
+
+ offset = 20 + 40*f_nscns;
+
+ while (offset<f_symptr){
+ int c;
+
+ c=fgetc (fs);
+ fputc (c,fd);
+ ++offset;
+ }
+// fseek (fs,f_symptr,SEEK_SET);
+
+ for (symbol_n=0; symbol_n<f_nsyms; ++symbol_n){
+ char symbol[18];
+ int n_numaux,n_scnum;
+
+ fread (symbol,1,18,fs);
+
+ n_numaux = *(unsigned char*)&symbol[17];
+ n_scnum = *(short*)&symbol[12];
+
+ if (symbol[16]==3 && n_numaux!=0 && n_scnum!=-1){
+ if (*(int*)&symbol[0]!=0){
+ int n;
+
+ for (n=0; n<8; ++n){
+ if (symbol[n]=='\0')
+ break;
+/* printf ("%c",symbol[n]); */
+ }
+
+ if (symbol[0]=='_' &&
+ symbol[1]=='T' &&
+ (unsigned)(symbol[2]-'0') < 10u &&
+ (unsigned)(symbol[3]-'0') < 10u &&
+ (unsigned)(symbol[4]-'0') < 10u &&
+ symbol[5]=='\0')
+ {
+ symbol[0]='.';
+ symbol[1]='t';
+ symbol[2]='e';
+ symbol[3]='x';
+ symbol[4]='t';
+ }
+
+/* printf ("\n"); */
+ } else
+/* printf ("?\n")*/
+ ;
+ }
+
+ fwrite (symbol,1,18,fd);
+
+ while (n_numaux>0){
+ 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;
+}
|