mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-11-23 09:29:27 +01:00
* converted lo/hi to processor independent code, generated code is the
same as before (when turning on the optimizer)
This commit is contained in:
parent
f9e7a027b9
commit
5501aa4e9a
@ -120,32 +120,6 @@ implementation
|
|||||||
truelabel:=otlabel;
|
truelabel:=otlabel;
|
||||||
falselabel:=oflabel;
|
falselabel:=oflabel;
|
||||||
end;
|
end;
|
||||||
in_lo_word,
|
|
||||||
in_hi_word :
|
|
||||||
begin
|
|
||||||
secondpass(left);
|
|
||||||
location.loc:=LOC_REGISTER;
|
|
||||||
if left.location.loc<>LOC_REGISTER then
|
|
||||||
begin
|
|
||||||
if left.location.loc=LOC_CREGISTER then
|
|
||||||
begin
|
|
||||||
location.register:=reg32toreg16(getregister32);
|
|
||||||
emit_reg_reg(A_MOV,S_W,left.location.register,
|
|
||||||
location.register);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
del_reference(left.location.reference);
|
|
||||||
location.register:=reg32toreg16(getregister32);
|
|
||||||
emit_ref_reg(A_MOV,S_W,newreference(left.location.reference),
|
|
||||||
location.register);
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else location.register:=left.location.register;
|
|
||||||
if inlinenumber=in_hi_word then
|
|
||||||
emit_const_reg(A_SHR,S_W,8,location.register);
|
|
||||||
location.register:=reg16toreg8(location.register);
|
|
||||||
end;
|
|
||||||
in_sizeof_x,
|
in_sizeof_x,
|
||||||
in_typeof_x :
|
in_typeof_x :
|
||||||
begin
|
begin
|
||||||
@ -180,73 +154,6 @@ implementation
|
|||||||
location.register);
|
location.register);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
in_lo_long,
|
|
||||||
in_hi_long :
|
|
||||||
begin
|
|
||||||
secondpass(left);
|
|
||||||
location.loc:=LOC_REGISTER;
|
|
||||||
if left.location.loc<>LOC_REGISTER then
|
|
||||||
begin
|
|
||||||
if left.location.loc=LOC_CREGISTER then
|
|
||||||
begin
|
|
||||||
location.register:=getregister32;
|
|
||||||
emit_reg_reg(A_MOV,S_L,left.location.register,
|
|
||||||
location.register);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
del_reference(left.location.reference);
|
|
||||||
location.register:=getregister32;
|
|
||||||
emit_ref_reg(A_MOV,S_L,newreference(left.location.reference),
|
|
||||||
location.register);
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else location.register:=left.location.register;
|
|
||||||
if inlinenumber=in_hi_long then
|
|
||||||
emit_const_reg(A_SHR,S_L,16,location.register);
|
|
||||||
location.register:=reg32toreg16(location.register);
|
|
||||||
end;
|
|
||||||
in_lo_qword,
|
|
||||||
in_hi_qword:
|
|
||||||
begin
|
|
||||||
secondpass(left);
|
|
||||||
location.loc:=LOC_REGISTER;
|
|
||||||
case left.location.loc of
|
|
||||||
LOC_CREGISTER:
|
|
||||||
begin
|
|
||||||
location.register:=getregister32;
|
|
||||||
if inlinenumber=in_hi_qword then
|
|
||||||
emit_reg_reg(A_MOV,S_L,left.location.registerhigh,
|
|
||||||
location.register)
|
|
||||||
else
|
|
||||||
emit_reg_reg(A_MOV,S_L,left.location.registerlow,
|
|
||||||
location.register)
|
|
||||||
end;
|
|
||||||
LOC_MEM,LOC_REFERENCE:
|
|
||||||
begin
|
|
||||||
del_reference(left.location.reference);
|
|
||||||
location.register:=getregister32;
|
|
||||||
r:=newreference(left.location.reference);
|
|
||||||
if inlinenumber=in_hi_qword then
|
|
||||||
inc(r^.offset,4);
|
|
||||||
emit_ref_reg(A_MOV,S_L,
|
|
||||||
r,location.register);
|
|
||||||
end;
|
|
||||||
LOC_REGISTER:
|
|
||||||
begin
|
|
||||||
if inlinenumber=in_hi_qword then
|
|
||||||
begin
|
|
||||||
location.register:=left.location.registerhigh;
|
|
||||||
ungetregister32(left.location.registerlow);
|
|
||||||
end
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
location.register:=left.location.registerlow;
|
|
||||||
ungetregister32(left.location.registerhigh);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
in_length_x :
|
in_length_x :
|
||||||
begin
|
begin
|
||||||
secondpass(left);
|
secondpass(left);
|
||||||
@ -843,7 +750,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.28 2001-12-02 16:19:17 jonas
|
Revision 1.29 2001-12-04 15:59:03 jonas
|
||||||
|
* converted lo/hi to processor independent code, generated code is the
|
||||||
|
same as before (when turning on the optimizer)
|
||||||
|
|
||||||
|
Revision 1.28 2001/12/02 16:19:17 jonas
|
||||||
* less unnecessary regvar loading with if-statements
|
* less unnecessary regvar loading with if-statements
|
||||||
|
|
||||||
Revision 1.26 2001/09/28 20:38:51 jonas
|
Revision 1.26 2001/09/28 20:38:51 jonas
|
||||||
|
|||||||
@ -59,7 +59,7 @@ implementation
|
|||||||
globtype, cutils,
|
globtype, cutils,
|
||||||
symbase,symconst,symtype,symdef,symsym,symtable,types,
|
symbase,symconst,symtype,symdef,symsym,symtable,types,
|
||||||
pass_1,
|
pass_1,
|
||||||
ncal,ncon,ncnv,nadd,nld,nbas,nflw,nmem,
|
ncal,ncon,ncnv,nadd,nld,nbas,nflw,nmem,nmat,
|
||||||
cpubase,tgcpu,cgbase
|
cpubase,tgcpu,cgbase
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1962,6 +1962,7 @@ implementation
|
|||||||
var
|
var
|
||||||
srsym : tsym;
|
srsym : tsym;
|
||||||
hp,hpp : tnode;
|
hp,hpp : tnode;
|
||||||
|
shiftconst: longint;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
result:=nil;
|
result:=nil;
|
||||||
@ -1987,11 +1988,24 @@ implementation
|
|||||||
in_lo_word,
|
in_lo_word,
|
||||||
in_hi_word:
|
in_hi_word:
|
||||||
begin
|
begin
|
||||||
if registers32<1 then
|
shiftconst := 0;
|
||||||
registers32:=1;
|
case inlinenumber of
|
||||||
location.loc:=LOC_REGISTER;
|
in_hi_qword:
|
||||||
|
shiftconst := 32;
|
||||||
|
in_hi_long:
|
||||||
|
shiftconst := 16;
|
||||||
|
in_hi_word:
|
||||||
|
shiftconst := 8;
|
||||||
|
end;
|
||||||
|
if shiftconst <> 0 then
|
||||||
|
result := ctypeconvnode.create(cshlshrnode.create(shrn,left,
|
||||||
|
cordconstnode.create(shiftconst,u32bittype)),resulttype)
|
||||||
|
else
|
||||||
|
result := ctypeconvnode.create(left,resulttype);
|
||||||
|
left := nil;
|
||||||
|
include(result.flags,nf_explizit);
|
||||||
|
firstpass(result);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
in_sizeof_x:
|
in_sizeof_x:
|
||||||
begin
|
begin
|
||||||
if push_high_param(left.resulttype.def) then
|
if push_high_param(left.resulttype.def) then
|
||||||
@ -2308,7 +2322,11 @@ begin
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.64 2001-12-03 14:21:34 jonas
|
Revision 1.65 2001-12-04 15:59:03 jonas
|
||||||
|
* converted lo/hi to processor independent code, generated code is the
|
||||||
|
same as before (when turning on the optimizer)
|
||||||
|
|
||||||
|
Revision 1.64 2001/12/03 14:21:34 jonas
|
||||||
* fixed web bug 1693 (dynarray support for length)
|
* fixed web bug 1693 (dynarray support for length)
|
||||||
|
|
||||||
Revision 1.63 2001/10/24 16:17:36 jonas
|
Revision 1.63 2001/10/24 16:17:36 jonas
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user