Przeglądaj źródła

+ added Z80 helper functions is_regpair and split_regpair

git-svn-id: trunk@45149 -
nickysn 5 lat temu
rodzic
commit
a5d36e1bc6
1 zmienionych plików z 37 dodań i 0 usunięć
  1. 37 0
      compiler/z80/cpubase.pas

+ 37 - 0
compiler/z80/cpubase.pas

@@ -277,6 +277,8 @@ unit cpubase;
     function findreg_by_number(r:Tregister):tregisterindex;
     function std_regnum_search(const s:string):Tregister;
     function std_regname(r:Tregister):string;
+    function is_regpair(r:Tregister):boolean;
+    procedure split_regpair(regpair:Tregister;out reglo,reghi:Tregister);
 
     function inverse_cond(const c: TAsmCond): TAsmCond; {$ifdef USEINLINE}inline;{$endif USEINLINE}
     function conditions_equal(const c1, c2: TAsmCond): boolean; {$ifdef USEINLINE}inline;{$endif USEINLINE}
@@ -397,6 +399,41 @@ unit cpubase;
       end;
 
 
+    function is_regpair(r: Tregister): boolean;
+      begin
+        result:=(r=NR_AF) or (r=NR_BC) or (r=NR_DE) or (r=NR_HL);
+      end;
+
+
+    procedure split_regpair(regpair: Tregister; out reglo, reghi: Tregister);
+      begin
+        case regpair of
+          NR_AF:
+            begin
+              reglo:=NR_F;
+              reghi:=NR_A;
+            end;
+          NR_BC:
+            begin
+              reglo:=NR_C;
+              reghi:=NR_B;
+            end;
+          NR_DE:
+            begin
+              reglo:=NR_E;
+              reghi:=NR_D;
+            end;
+          NR_HL:
+            begin
+              reglo:=NR_L;
+              reghi:=NR_H;
+            end;
+          else
+            internalerror(2020042801);
+        end;
+      end;
+
+
     function inverse_cond(const c: TAsmCond): TAsmCond; {$ifdef USEINLINE}inline;{$endif USEINLINE}
       const
         inverse: array[TAsmCond] of TAsmCond=(C_None,