瀏覽代碼

* x86: Fixed bug where XMM7 wasn't used by the register allocator

J. Gareth "Curious Kit" Moreton 2 月之前
父節點
當前提交
9d55e3aa0e
共有 3 個文件被更改,包括 9 次插入6 次删除
  1. 1 1
      compiler/i386/rgcpu.pas
  2. 1 1
      compiler/i8086/rgcpu.pas
  3. 7 4
      compiler/x86_64/rgcpu.pas

+ 1 - 1
compiler/i386/rgcpu.pas

@@ -57,7 +57,7 @@ implementation
       var
       var
         supreg : tsuperregister;
         supreg : tsuperregister;
       begin
       begin
-        if getsubreg(reg) in [R_SUBL,R_SUBH] then
+        if (getregtype(reg)=R_INTREGISTER) and (getsubreg(reg) in [R_SUBL,R_SUBH]) then
           begin
           begin
             { Some registers have no 8-bit subregister }
             { Some registers have no 8-bit subregister }
             supreg:=getsupreg(reg);
             supreg:=getsupreg(reg);

+ 1 - 1
compiler/i8086/rgcpu.pas

@@ -77,7 +77,7 @@ implementation
       var
       var
         supreg : tsuperregister;
         supreg : tsuperregister;
       begin
       begin
-        if getsubreg(reg) in [R_SUBL,R_SUBH] then
+        if (getregtype(reg)=R_INTREGISTER) and (getsubreg(reg) in [R_SUBL,R_SUBH]) then
           begin
           begin
             { Some registers have no 8-bit subregister }
             { Some registers have no 8-bit subregister }
             supreg:=getsupreg(reg);
             supreg:=getsupreg(reg);

+ 7 - 4
compiler/x86_64/rgcpu.pas

@@ -44,10 +44,13 @@ unit rgcpu;
       var
       var
         supreg : tsuperregister;
         supreg : tsuperregister;
       begin
       begin
-        supreg:=getsupreg(reg);
-        { All registers conflict with rsp/rbp }
-        add_edge(supreg,RS_RSP);
-        // add_edge(supreg,RS_RBP);
+        if (getregtype(reg)=R_INTREGISTER) then
+          begin
+            supreg:=getsupreg(reg);
+            { All registers conflict with rsp/rbp }
+            add_edge(supreg,RS_RSP);
+            // add_edge(supreg,RS_RBP);
+          end;
       end;
       end;
 
 
 end.
 end.