From 9fd7385c65ff02d3cc411a8a5078d3b954f76bd0 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 1 Aug 1999 23:36:38 +0000 Subject: [PATCH] * some changes to compile the new code generator --- compiler/cg386cnv.pas | 10 +++++++--- compiler/cgai386.pas | 41 +++++++++++++++++++++++++++++++-------- compiler/new/nstatmnt.pas | 13 ++++++++++++- compiler/parser.pas | 7 +++++-- compiler/version.pas | 11 +++++++++-- 5 files changed, 66 insertions(+), 16 deletions(-) diff --git a/compiler/cg386cnv.pas b/compiler/cg386cnv.pas index 2da6c98b18..5187d14e2d 100644 --- a/compiler/cg386cnv.pas +++ b/compiler/cg386cnv.pas @@ -339,11 +339,12 @@ implementation begin exprasmlist^.concat(new(pai386,op_reg_reg(A_XOR,S_L, hregister2,hregister2))); - if (porddef(pto^.resulttype)^.typ=s64bitint) then + if (porddef(pto^.resulttype)^.typ=s64bitint) and + is_signed(pfrom^.resulttype) then begin getlabel(l); exprasmlist^.concat(new(pai386,op_const_reg(A_TEST,S_L, - $80000000,hregister))); + $80000000,makereg32(hregister)))); emitjmp(C_Z,l); exprasmlist^.concat(new(pai386,op_reg(A_NOT,S_L, hregister2))); @@ -1462,7 +1463,10 @@ implementation end. { $Log$ - Revision 1.79 1999-07-22 09:37:34 florian + Revision 1.80 1999-08-01 23:36:38 florian + * some changes to compile the new code generator + + Revision 1.79 1999/07/22 09:37:34 florian + resourcestring implemented + start of longstring support diff --git a/compiler/cgai386.pas b/compiler/cgai386.pas index e450ef5972..ae66f3dbe6 100644 --- a/compiler/cgai386.pas +++ b/compiler/cgai386.pas @@ -1098,16 +1098,37 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister); R_EAX,R_EBX,R_ECX,R_EDX,R_ESI, R_EDI,R_ESP,R_EBP : begin - inc(pushedparasize,4); - if inlined then + if p^.resulttype^.size=8 then begin - r:=new_reference(procinfo.framepointer,para_offset-pushedparasize); - exprasmlist^.concat(new(pai386,op_reg_ref(A_MOV,S_L, - p^.location.register,r))); + inc(pushedparasize,8); + if inlined then + begin + r:=new_reference(procinfo.framepointer,para_offset-pushedparasize); + exprasmlist^.concat(new(pai386,op_reg_ref(A_MOV,S_L, + p^.location.registerlow,r))); + r:=new_reference(procinfo.framepointer,para_offset-pushedparasize+4); + exprasmlist^.concat(new(pai386,op_reg_ref(A_MOV,S_L, + p^.location.registerhigh,r))); + end + else + exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.location.registerhigh))); + ungetregister32(p^.location.registerhigh); + exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.location.registerlow))); + ungetregister32(p^.location.registerlow); end else - exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.location.register))); - ungetregister32(p^.location.register); + begin + inc(pushedparasize,4); + if inlined then + begin + r:=new_reference(procinfo.framepointer,para_offset-pushedparasize); + exprasmlist^.concat(new(pai386,op_reg_ref(A_MOV,S_L, + p^.location.register,r))); + end + else + exprasmlist^.concat(new(pai386,op_reg(A_PUSH,S_L,p^.location.register))); + ungetregister32(p^.location.register); + end; end; R_AX,R_BX,R_CX,R_DX,R_SI,R_DI: begin @@ -1156,6 +1177,7 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister); exprasmlist^.concat(new(pai386,op_reg(A_PUSH,opsize,hreg))); ungetregister32(reg8toreg32(p^.location.register)); end; + else internalerror(1899); end; end; LOC_FPU: @@ -3118,7 +3140,10 @@ procedure mov_reg_to_dest(p : ptree; s : topsize; reg : tregister); end. { $Log$ - Revision 1.21 1999-08-01 17:32:31 florian + Revision 1.22 1999-08-01 23:36:39 florian + * some changes to compile the new code generator + + Revision 1.21 1999/08/01 17:32:31 florian * more fixes for inittable call Revision 1.20 1999/08/01 17:17:37 florian diff --git a/compiler/new/nstatmnt.pas b/compiler/new/nstatmnt.pas index ecb4a5f6ba..1dc379b3e8 100644 --- a/compiler/new/nstatmnt.pas +++ b/compiler/new/nstatmnt.pas @@ -33,6 +33,7 @@ unit nstatmnt; constructor init(l : pnode); procedure det_temp;virtual; procedure det_resulttype;virtual; + procedure secondpass;virtual; end; pstatementnode = ^tstatementnode; @@ -134,11 +135,21 @@ unit nstatmnt; end; end; + procedure tblocknode.secondpass; + + begin + if assigned(left) then + left^.secondpass; + end; + end. { $Log$ - Revision 1.1 1999-01-23 23:35:02 florian + Revision 1.2 1999-08-01 23:36:43 florian + * some changes to compile the new code generator + + Revision 1.1 1999/01/23 23:35:02 florian + first versions } \ No newline at end of file diff --git a/compiler/parser.pas b/compiler/parser.pas index 2b023d6a7e..504b59fe1b 100644 --- a/compiler/parser.pas +++ b/compiler/parser.pas @@ -61,7 +61,7 @@ unit parser; {$ifdef newcg} cgobj, {$ifdef i386} - cg386, + cgcpu, {$endif i386} {$endif newcg} comphook,tree,scanner,pbase,pdecl,psystem,pmodules,cresstr; @@ -471,7 +471,10 @@ unit parser; end. { $Log$ - Revision 1.78 1999-07-24 16:22:18 michael + Revision 1.79 1999-08-01 23:36:40 florian + * some changes to compile the new code generator + + Revision 1.78 1999/07/24 16:22:18 michael + Improved resourcestring handling Revision 1.77 1999/07/23 16:05:22 peter diff --git a/compiler/version.pas b/compiler/version.pas index 7b7d7cc7b4..f0ee949d5a 100644 --- a/compiler/version.pas +++ b/compiler/version.pas @@ -28,11 +28,15 @@ interface wordversion = (0 shl 12)+99; { version string } + version_nr = '0'; release_nr = '99'; patch_nr = '13'; +{$ifdef newcg} minorpatch = ''; - +{$else newcg} + minorpatch = 'newcg'; +{$endif newcg} version_string = version_nr+'.'+release_nr+'.'+patch_nr; full_version_string = version_nr+'.'+release_nr+'.'+patch_nr+minorpatch; @@ -69,7 +73,10 @@ begin end. { $Log$ - Revision 1.9 1999-07-01 21:35:02 peter + Revision 1.10 1999-08-01 23:36:42 florian + * some changes to compile the new code generator + + Revision 1.9 1999/07/01 21:35:02 peter * 0.99.13 instead of 0.99.13a Revision 1.8 1999/06/27 15:49:19 michael