Browse Source

i8086 fixes in Tcgx86.g_concatcopy and TCGSize2OpSize

git-svn-id: branches/i8086@23720 -
nickysn 12 years ago
parent
commit
5f7d432ff9
1 changed files with 24 additions and 1 deletions
  1. 24 1
      compiler/x86/cgx86.pas

+ 24 - 1
compiler/x86/cgx86.pas

@@ -139,11 +139,19 @@ unit cgx86;
          S_NO,S_NO,S_NO,S_MD,S_XMM,S_YMM,
          S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM);
 {$else x86_64}
+  {$ifdef i386}
       TCGSize2OpSize: Array[tcgsize] of topsize =
         (S_NO,S_B,S_W,S_L,S_L,S_T,S_B,S_W,S_L,S_L,S_L,
          S_FS,S_FL,S_FX,S_IQ,S_FXX,
          S_NO,S_NO,S_NO,S_MD,S_XMM,S_YMM,
          S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM);
+  {$else i386}
+      TCGSize2OpSize: Array[tcgsize] of topsize =
+        (S_NO,S_B,S_W,S_W,S_W,S_T,S_B,S_W,S_W,S_W,S_W,
+         S_FS,S_FL,S_FX,S_IQ,S_FXX,
+         S_NO,S_NO,S_NO,S_MD,S_XMM,S_YMM,
+         S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM);
+  {$endif i386}
 {$endif x86_64}
 
 {$ifndef NOTARGETWIN}
@@ -1810,9 +1818,15 @@ unit cgx86;
         REGSI=NR_RSI;
         REGDI=NR_RDI;
 {$else cpu64bitalu}
+  {$ifdef cpu32bitalu}
         REGCX=NR_ECX;
         REGSI=NR_ESI;
         REGDI=NR_EDI;
+  {$else cpu32bitalu}
+        REGCX=NR_CX;
+        REGSI=NR_SI;
+        REGDI=NR_DI;
+  {$endif cpu32bitalu}
 {$endif cpu64bitalu}
 
     type  copymode=(copy_move,copy_mmx,copy_string);
@@ -1837,7 +1851,7 @@ unit cgx86;
         cm:=copy_string;
       if (cs_opt_size in current_settings.optimizerswitches) and
          not((len<=16) and (cm=copy_mmx)) and
-         not(len in [1,2,4{$ifdef x86_64},8{$endif x86_64}]) then
+         not(len in [1,2{$ifndef i8086},4{$endif i8086}{$ifdef x86_64},8{$endif x86_64}]) then
         cm:=copy_string;
       if (source.segment<>NR_NO) or
          (dest.segment<>NR_NO) then
@@ -1861,11 +1875,13 @@ unit cgx86;
                     copysize:=2;
                     cgsize:=OS_16;
                   end
+{$ifndef cpu16bitalu}
                 else if len<8 then
                   begin
                     copysize:=4;
                     cgsize:=OS_32;
                   end
+{$endif}
 {$ifdef cpu64bitalu}
                 else if len<16 then
                   begin
@@ -1951,6 +1967,9 @@ unit cgx86;
               end;
 
             getcpuregister(list,REGCX);
+{$ifdef i8086}
+           list.concat(Taicpu.op_none(A_CLD,S_NO));
+{$endif i8086}
 {$ifdef i386}
            list.concat(Taicpu.op_none(A_CLD,S_NO));
 {$endif i386}
@@ -1975,7 +1994,11 @@ unit cgx86;
 {$ifdef cpu64bitalu}
                     list.concat(Taicpu.op_none(A_MOVSQ,S_NO))
 {$else}
+  {$ifdef cpu32bitalu}
                     list.concat(Taicpu.op_none(A_MOVSD,S_NO));
+  {$else}
+                    list.concat(Taicpu.op_none(A_MOVSW,S_NO));
+  {$endif}
 {$endif cpu64bitalu}
                   end;
                 if len>=4 then