Browse Source

* use only one temporary 16-bit register, instead of two in tcg8086.g_flags2ref
when the target ref is 32-bit.

git-svn-id: trunk@26342 -

nickysn 11 years ago
parent
commit
974fea30b2
1 changed files with 8 additions and 3 deletions
  1. 8 3
      compiler/i8086/cgcpu.pas

+ 8 - 3
compiler/i8086/cgcpu.pas

@@ -1382,10 +1382,15 @@ unit cgcpu;
     procedure tcg8086.g_flags2ref(list: TAsmList; size: TCgSize; const f: tresflags; const ref: TReference);
       var
         tmpreg : tregister;
+        tmpregsize: TCgSize;
       begin
-        tmpreg:=getintregister(list,size);
-        g_flags2reg(list,size,f,tmpreg);
-        a_load_reg_ref(list,size,size,tmpreg,ref);
+        if size in [OS_8,OS_S8,OS_16,OS_S16] then
+          tmpregsize:=size
+        else
+          tmpregsize:=OS_16;
+        tmpreg:=getintregister(list,tmpregsize);
+        g_flags2reg(list,tmpregsize,f,tmpreg);
+        a_load_reg_ref(list,tmpregsize,size,tmpreg,ref);
       end;