浏览代码

* give an internalerror when calling cg.makeregsize() for a high level
target (explanation why in comments)

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

Jonas Maebe 11 年之前
父节点
当前提交
831cc96f48
共有 2 个文件被更改,包括 13 次插入1 次删除
  1. 12 0
      compiler/cghlcpu.pas
  2. 1 1
      compiler/cgobj.pas

+ 12 - 0
compiler/cghlcpu.pas

@@ -38,6 +38,7 @@ uses
   type
     thlbasecgcpu = class(tcg)
      public
+      function makeregsize(list: TAsmList; reg: Tregister; size: Tcgsize): Tregister; override;
       procedure g_save_registers(list:TAsmList);override;
       procedure g_restore_registers(list:TAsmList);override;
       procedure g_stackpointer_alloc(list: TAsmList; size: longint); override;
@@ -208,6 +209,17 @@ implementation
         internalerror(2012042822);
       end;
 
+
+    function thlbasecgcpu.makeregsize(list: TAsmList; reg: Tregister; size: Tcgsize): Tregister;
+      begin
+        { you can't just change the size of a (virtual) register on high level
+          targets, you have to allocate a new register of the right size and
+          move the data there }
+        internalerror(2014081201);
+        { suppress warning }
+        result:=NR_NO;
+      end;
+
     procedure thlbasecgcpu.g_save_registers(list: TAsmList);
       begin
         { do nothing }

+ 1 - 1
compiler/cgobj.pas

@@ -106,7 +106,7 @@ unit cgobj;
           procedure do_register_allocation(list:TAsmList;headertai:tai);virtual;
           procedure translate_register(var reg : tregister);
 
-          function makeregsize(list:TAsmList;reg:Tregister;size:Tcgsize):Tregister;
+          function makeregsize(list:TAsmList;reg:Tregister;size:Tcgsize):Tregister; virtual;
 
           {# Emit a label to the instruction stream. }
           procedure a_label(list : TAsmList;l : tasmlabel);virtual;