i8086 fixes in Tcgx86.g_concatcopy and TCGSize2OpSize

git-svn-id: branches/i8086@23720 -
This commit is contained in:
nickysn 2013-03-08 00:13:02 +00:00
parent 27e4048ed6
commit 5f7d432ff9

View File

@ -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