浏览代码

* moved tjvmnotnode implementation to generic ncghlmat unit, and also use it
for llvm

git-svn-id: branches/hlcgllvm@28363 -

Jonas Maebe 11 年之前
父节点
当前提交
f70865fc1f
共有 4 个文件被更改,包括 84 次插入35 次删除
  1. 1 0
      .gitattributes
  2. 2 33
      compiler/jvm/njvmmat.pas
  3. 5 2
      compiler/llvm/nllvmmat.pas
  4. 76 0
      compiler/ncghlmat.pas

+ 1 - 0
.gitattributes

@@ -460,6 +460,7 @@ compiler/ncgcal.pas svneol=native#text/plain
 compiler/ncgcnv.pas svneol=native#text/plain
 compiler/ncgcon.pas svneol=native#text/plain
 compiler/ncgflw.pas svneol=native#text/plain
+compiler/ncghlmat.pas svneol=native#text/plain
 compiler/ncginl.pas svneol=native#text/plain
 compiler/ncgld.pas svneol=native#text/plain
 compiler/ncgmat.pas svneol=native#text/plain

+ 2 - 33
compiler/jvm/njvmmat.pas

@@ -26,7 +26,7 @@ unit njvmmat;
 interface
 
     uses
-      node,nmat,ncgmat;
+      node,nmat,ncgmat,ncghlmat;
 
     type
       tjvmmoddivnode = class(tmoddivnode)
@@ -40,9 +40,7 @@ interface
          procedure pass_generate_code;override;
       end;
 
-      tjvmnotnode = class(tcgnotnode)
-         function pass_1: tnode; override;
-         procedure second_boolean;override;
+      tjvmnotnode = class(tcghlnotnode)
       end;
 
       tjvmunaryminusnode = class(tcgunaryminusnode)
@@ -187,35 +185,6 @@ implementation
       end;
 
 
-{*****************************************************************************
-                               tjvmnotnode
-*****************************************************************************}
-
-    function tjvmnotnode.pass_1: tnode;
-      begin
-        result:=inherited;
-        if not assigned(result) and
-           is_boolean(resultdef) then
-          expectloc:=LOC_JUMP;
-      end;
-
-
-    procedure tjvmnotnode.second_boolean;
-      var
-        hl : tasmlabel;
-      begin
-        hl:=current_procinfo.CurrTrueLabel;
-        current_procinfo.CurrTrueLabel:=current_procinfo.CurrFalseLabel;
-        current_procinfo.CurrFalseLabel:=hl;
-        secondpass(left);
-        hlcg.maketojumpbool(current_asmdata.CurrAsmList,left);
-        hl:=current_procinfo.CurrTrueLabel;
-        current_procinfo.CurrTrueLabel:=current_procinfo.CurrFalseLabel;
-        current_procinfo.CurrFalseLabel:=hl;
-        location.loc:=LOC_JUMP;
-      end;
-
-
 {*****************************************************************************
                             tjvmunaryminustnode
 *****************************************************************************}

+ 5 - 2
compiler/llvm/nllvmmat.pas

@@ -27,7 +27,7 @@ interface
 
 uses
   symtype,
-  node, nmat, ncgmat, cgbase;
+  node, nmat, ncgmat, ncghlmat, cgbase;
 
 type
   tllvmmoddivnode = class(tcgmoddivnode)
@@ -38,6 +38,9 @@ type
     procedure emit_float_sign_change(r: tregister; _size : tdef);override;
   end;
 
+  tllvmnotnode = class(tcghlnotnode)
+  end;
+
 implementation
 
 uses
@@ -114,7 +117,7 @@ begin
   cmoddivnode := tllvmmoddivnode;
 (*
   cshlshrnode := tllvmshlshrnode;
-  cnotnode    := tllvmnotnode;
 *)
+  cnotnode    := tllvmnotnode;
   cunaryminusnode := Tllvmunaryminusnode;
 end.

+ 76 - 0
compiler/ncghlmat.pas

@@ -0,0 +1,76 @@
+{
+    Copyright (c) 2014 Jonas Maebe
+
+    Generate high level target code for math nodes
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ ****************************************************************************
+}
+unit ncghlmat;
+
+{$i fpcdefs.inc}
+
+interface
+
+uses
+  node,
+  ncgmat;
+
+type
+
+  tcghlnotnode = class(tcgnotnode)
+    function pass_1: tnode; override;
+   protected
+    procedure second_boolean; override;
+  end;
+
+implementation
+
+uses
+  aasmbase,aasmdata,
+  defutil,
+  procinfo,
+  cgbase,pass_2,hlcgobj;
+
+{*****************************************************************************
+                               tcghlnotnode
+*****************************************************************************}
+
+function tcghlnotnode.pass_1: tnode;
+  begin
+    result:=inherited;
+    if not assigned(result) and
+       is_boolean(resultdef) then
+      expectloc:=LOC_JUMP;
+  end;
+
+
+procedure tcghlnotnode.second_boolean;
+  var
+    hl : tasmlabel;
+  begin
+    hl:=current_procinfo.CurrTrueLabel;
+    current_procinfo.CurrTrueLabel:=current_procinfo.CurrFalseLabel;
+    current_procinfo.CurrFalseLabel:=hl;
+    secondpass(left);
+    hlcg.maketojumpbool(current_asmdata.CurrAsmList,left);
+    hl:=current_procinfo.CurrTrueLabel;
+    current_procinfo.CurrTrueLabel:=current_procinfo.CurrFalseLabel;
+    current_procinfo.CurrFalseLabel:=hl;
+    location.loc:=LOC_JUMP;
+  end;
+
+end.