mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-06 09:58:29 +02:00
* use pdef^.size instead of orddef^.typ
This commit is contained in:
parent
19bf2df53a
commit
1ce8f6f825
@ -260,11 +260,11 @@ implementation
|
|||||||
tempreference:=p^.left^.location.reference;
|
tempreference:=p^.left^.location.reference;
|
||||||
del_reference(p^.left^.location.reference);
|
del_reference(p^.left^.location.reference);
|
||||||
case p^.resulttype^.deftype of
|
case p^.resulttype^.deftype of
|
||||||
|
enumdef,
|
||||||
orddef :
|
orddef :
|
||||||
begin
|
begin
|
||||||
case porddef(p^.resulttype)^.typ of
|
case p^.resulttype^.size of
|
||||||
s32bit,u32bit,bool32bit :
|
4 : begin
|
||||||
begin
|
|
||||||
inc(pushedparasize,4);
|
inc(pushedparasize,4);
|
||||||
if inlined then
|
if inlined then
|
||||||
begin
|
begin
|
||||||
@ -276,9 +276,7 @@ implementation
|
|||||||
else
|
else
|
||||||
emit_push_mem(tempreference);
|
emit_push_mem(tempreference);
|
||||||
end;
|
end;
|
||||||
s8bit,u8bit,uchar,bool8bit,
|
1,2 : begin
|
||||||
bool16bit,s16bit,u16bit :
|
|
||||||
begin
|
|
||||||
inc(pushedparasize,2);
|
inc(pushedparasize,2);
|
||||||
if inlined then
|
if inlined then
|
||||||
begin
|
begin
|
||||||
@ -291,6 +289,8 @@ implementation
|
|||||||
exprasmlist^.concat(new(pai386,op_ref(A_PUSH,S_W,
|
exprasmlist^.concat(new(pai386,op_ref(A_PUSH,S_W,
|
||||||
newreference(tempreference))));
|
newreference(tempreference))));
|
||||||
end;
|
end;
|
||||||
|
else
|
||||||
|
internalerror(234231);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
floatdef :
|
floatdef :
|
||||||
@ -376,7 +376,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
pointerdef,procvardef,
|
pointerdef,procvardef,
|
||||||
enumdef,classrefdef:
|
classrefdef:
|
||||||
begin
|
begin
|
||||||
inc(pushedparasize,4);
|
inc(pushedparasize,4);
|
||||||
if inlined then
|
if inlined then
|
||||||
@ -1408,7 +1408,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.20 1998-08-31 12:22:15 peter
|
Revision 1.21 1998-09-01 12:47:57 peter
|
||||||
|
* use pdef^.size instead of orddef^.typ
|
||||||
|
|
||||||
|
Revision 1.20 1998/08/31 12:22:15 peter
|
||||||
* secondinline moved to cg386inl
|
* secondinline moved to cg386inl
|
||||||
|
|
||||||
Revision 1.19 1998/08/31 08:52:03 peter
|
Revision 1.19 1998/08/31 08:52:03 peter
|
||||||
|
@ -381,67 +381,68 @@ implementation
|
|||||||
secondpass(p^.left);
|
secondpass(p^.left);
|
||||||
case p^.left^.location.loc of
|
case p^.left^.location.loc of
|
||||||
LOC_FPU : goto do_jmp;
|
LOC_FPU : goto do_jmp;
|
||||||
LOC_MEM,LOC_REFERENCE : is_mem:=true;
|
LOC_MEM,
|
||||||
LOC_CREGISTER,
|
LOC_REFERENCE : is_mem:=true;
|
||||||
LOC_REGISTER : is_mem:=false;
|
LOC_CREGISTER,
|
||||||
LOC_FLAGS : begin
|
LOC_REGISTER : is_mem:=false;
|
||||||
exprasmlist^.concat(new(pai386,op_reg(flag_2_set[p^.right^.location.resflags],S_B,R_AL)));
|
LOC_FLAGS : begin
|
||||||
goto do_jmp;
|
exprasmlist^.concat(new(pai386,op_reg(flag_2_set[p^.right^.location.resflags],S_B,R_AL)));
|
||||||
end;
|
goto do_jmp;
|
||||||
LOC_JUMP : begin
|
end;
|
||||||
emitl(A_LABEL,truelabel);
|
LOC_JUMP : begin
|
||||||
exprasmlist^.concat(new(pai386,op_const_reg(A_MOV,S_B,1,R_AL)));
|
emitl(A_LABEL,truelabel);
|
||||||
emitl(A_JMP,aktexit2label);
|
exprasmlist^.concat(new(pai386,op_const_reg(A_MOV,S_B,1,R_AL)));
|
||||||
exprasmlist^.concat(new(pai386,op_reg_reg(A_XOR,S_B,R_AL,R_AL)));
|
emitl(A_JMP,aktexit2label);
|
||||||
goto do_jmp;
|
exprasmlist^.concat(new(pai386,op_reg_reg(A_XOR,S_B,R_AL,R_AL)));
|
||||||
end;
|
goto do_jmp;
|
||||||
else internalerror(2001);
|
end;
|
||||||
|
else
|
||||||
|
internalerror(2001);
|
||||||
end;
|
end;
|
||||||
if (procinfo.retdef^.deftype=orddef) then
|
case procinfo.retdef^.deftype of
|
||||||
begin
|
orddef,
|
||||||
case porddef(procinfo.retdef)^.typ of
|
enumdef : begin
|
||||||
s32bit,u32bit,bool32bit : if is_mem then
|
case procinfo.retdef^.size of
|
||||||
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,
|
4 : if is_mem then
|
||||||
newreference(p^.left^.location.reference),R_EAX)))
|
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,
|
||||||
else
|
newreference(p^.left^.location.reference),R_EAX)))
|
||||||
emit_reg_reg(A_MOV,S_L,p^.left^.location.register,R_EAX);
|
else
|
||||||
u8bit,s8bit,uchar,bool8bit : if is_mem then
|
emit_reg_reg(A_MOV,S_L,p^.left^.location.register,R_EAX);
|
||||||
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_B,
|
2 : if is_mem then
|
||||||
newreference(p^.left^.location.reference),R_AL)))
|
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_W,
|
||||||
else
|
newreference(p^.left^.location.reference),R_AX)))
|
||||||
emit_reg_reg(A_MOV,S_B,p^.left^.location.register,R_AL);
|
else
|
||||||
s16bit,u16bit,bool16bit : if is_mem then
|
emit_reg_reg(A_MOV,S_W,p^.left^.location.register,R_AX);
|
||||||
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_W,
|
1 : if is_mem then
|
||||||
newreference(p^.left^.location.reference),R_AX)))
|
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_B,
|
||||||
else
|
newreference(p^.left^.location.reference),R_AL)))
|
||||||
emit_reg_reg(A_MOV,S_W,p^.left^.location.register,R_AX);
|
else
|
||||||
end;
|
emit_reg_reg(A_MOV,S_B,p^.left^.location.register,R_AL);
|
||||||
end
|
end;
|
||||||
else
|
end;
|
||||||
if (procinfo.retdef^.deftype in [pointerdef,enumdef,procvardef]) then
|
pointerdef,
|
||||||
begin
|
procvardef : begin
|
||||||
if is_mem then
|
if is_mem then
|
||||||
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,
|
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,
|
||||||
newreference(p^.left^.location.reference),R_EAX)))
|
|
||||||
else
|
|
||||||
exprasmlist^.concat(new(pai386,op_reg_reg(A_MOV,S_L,
|
|
||||||
p^.left^.location.register,R_EAX)));
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if (procinfo.retdef^.deftype=floatdef) then
|
|
||||||
begin
|
|
||||||
if pfloatdef(procinfo.retdef)^.typ=f32bit then
|
|
||||||
begin
|
|
||||||
if is_mem then
|
|
||||||
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,
|
|
||||||
newreference(p^.left^.location.reference),R_EAX)))
|
newreference(p^.left^.location.reference),R_EAX)))
|
||||||
else
|
else
|
||||||
emit_reg_reg(A_MOV,S_L,p^.left^.location.register,R_EAX);
|
exprasmlist^.concat(new(pai386,op_reg_reg(A_MOV,S_L,
|
||||||
end
|
p^.left^.location.register,R_EAX)));
|
||||||
else
|
end;
|
||||||
if is_mem then
|
floatdef : begin
|
||||||
floatload(pfloatdef(procinfo.retdef)^.typ,p^.left^.location.reference);
|
if pfloatdef(procinfo.retdef)^.typ=f32bit then
|
||||||
end;
|
begin
|
||||||
|
if is_mem then
|
||||||
|
exprasmlist^.concat(new(pai386,op_ref_reg(A_MOV,S_L,
|
||||||
|
newreference(p^.left^.location.reference),R_EAX)))
|
||||||
|
else
|
||||||
|
emit_reg_reg(A_MOV,S_L,p^.left^.location.register,R_EAX);
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if is_mem then
|
||||||
|
floatload(pfloatdef(procinfo.retdef)^.typ,p^.left^.location.reference);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
do_jmp:
|
do_jmp:
|
||||||
truelabel:=otlabel;
|
truelabel:=otlabel;
|
||||||
falselabel:=oflabel;
|
falselabel:=oflabel;
|
||||||
@ -737,13 +738,19 @@ do_jmp:
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.12 1998-08-28 10:56:58 peter
|
Revision 1.13 1998-09-01 12:47:58 peter
|
||||||
|
* use pdef^.size instead of orddef^.typ
|
||||||
|
|
||||||
|
Revision 1.12 1998/08/28 10:56:58 peter
|
||||||
* removed warnings
|
* removed warnings
|
||||||
|
|
||||||
Revision 1.11 1998/08/05 16:00:10 florian
|
Revision 1.11 1998/08/05 16:00:10 florian
|
||||||
* some fixes for ansi strings
|
* some fixes for ansi strings
|
||||||
* $log$ to $Log$
|
* $log$ to $Log$
|
||||||
* $log$ to Revision 1.12 1998-08-28 10:56:58 peter
|
* $log$ to Revision 1.13 1998-09-01 12:47:58 peter
|
||||||
|
* $log$ to * use pdef^.size instead of orddef^.typ
|
||||||
|
* $log$ to
|
||||||
|
* $log$ to Revision 1.12 1998/08/28 10:56:58 peter
|
||||||
* $log$ to * removed warnings
|
* $log$ to * removed warnings
|
||||||
* $log$ to changed
|
* $log$ to changed
|
||||||
|
|
||||||
|
@ -219,15 +219,14 @@ implementation
|
|||||||
tempreference:=p^.left^.location.reference;
|
tempreference:=p^.left^.location.reference;
|
||||||
del_reference(p^.left^.location.reference);
|
del_reference(p^.left^.location.reference);
|
||||||
case p^.resulttype^.deftype of
|
case p^.resulttype^.deftype of
|
||||||
|
enumdef,
|
||||||
orddef : begin
|
orddef : begin
|
||||||
case porddef(p^.resulttype)^.typ of
|
case p^.resulttype^.size of
|
||||||
s32bit,u32bit :
|
4 : begin
|
||||||
begin
|
|
||||||
emit_push_mem(tempreference);
|
emit_push_mem(tempreference);
|
||||||
inc(pushedparasize,4);
|
inc(pushedparasize,4);
|
||||||
end;
|
end;
|
||||||
s8bit,u8bit,uchar,bool8bit:
|
1 : Begin
|
||||||
Begin
|
|
||||||
{ We push a BUT, the SP is incremented by 2 }
|
{ We push a BUT, the SP is incremented by 2 }
|
||||||
{ as specified in the Motorola Prog's Ref Manual }
|
{ as specified in the Motorola Prog's Ref Manual }
|
||||||
{ Therefore offet increments BY 2!!! }
|
{ Therefore offet increments BY 2!!! }
|
||||||
@ -258,14 +257,13 @@ implementation
|
|||||||
newreference(tempreference),R_SPPUSH))); }
|
newreference(tempreference),R_SPPUSH))); }
|
||||||
end;
|
end;
|
||||||
inc(pushedparasize,2);
|
inc(pushedparasize,2);
|
||||||
|
end;
|
||||||
end;
|
2 : begin
|
||||||
s16bit,u16bit : begin
|
|
||||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_W,
|
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_W,
|
||||||
newreference(tempreference),R_SPPUSH)));
|
newreference(tempreference),R_SPPUSH)));
|
||||||
inc(pushedparasize,2);
|
inc(pushedparasize,2);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
floatdef : begin
|
floatdef : begin
|
||||||
case pfloatdef(p^.resulttype)^.typ of
|
case pfloatdef(p^.resulttype)^.typ of
|
||||||
@ -302,7 +300,7 @@ implementation
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
pointerdef,procvardef,
|
pointerdef,procvardef,
|
||||||
enumdef,classrefdef: begin
|
classrefdef: begin
|
||||||
emit_push_mem(tempreference);
|
emit_push_mem(tempreference);
|
||||||
inc(pushedparasize,4);
|
inc(pushedparasize,4);
|
||||||
end;
|
end;
|
||||||
@ -1048,7 +1046,10 @@ implementation
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.1 1998-09-01 09:07:09 peter
|
Revision 1.2 1998-09-01 12:47:59 peter
|
||||||
|
* use pdef^.size instead of orddef^.typ
|
||||||
|
|
||||||
|
Revision 1.1 1998/09/01 09:07:09 peter
|
||||||
* m68k fixes, splitted cg68k like cgi386
|
* m68k fixes, splitted cg68k like cgi386
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -404,85 +404,79 @@ implementation
|
|||||||
end;
|
end;
|
||||||
else internalerror(2001);
|
else internalerror(2001);
|
||||||
end;
|
end;
|
||||||
if (procinfo.retdef^.deftype=orddef) then
|
case procinfo.retdef^.deftype of
|
||||||
begin
|
orddef,
|
||||||
case porddef(procinfo.retdef)^.typ of
|
enumdef : begin
|
||||||
s32bit,u32bit,bool32bit : if is_mem then
|
case procinfo.retdef^.size of
|
||||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,
|
4 : if is_mem then
|
||||||
newreference(p^.left^.location.reference),R_D0)))
|
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,
|
||||||
else
|
newreference(p^.left^.location.reference),R_D0)))
|
||||||
emit_reg_reg(A_MOVE,S_L,
|
else
|
||||||
p^.left^.location.register,R_D0);
|
emit_reg_reg(A_MOVE,S_L,p^.left^.location.register,R_D0);
|
||||||
u8bit,s8bit,uchar,bool8bit : if is_mem then
|
2 : if is_mem then
|
||||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_B,
|
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_W,
|
||||||
newreference(p^.left^.location.reference),R_D0)))
|
newreference(p^.left^.location.reference),R_D0)))
|
||||||
else
|
else
|
||||||
emit_reg_reg(A_MOVE,S_B,
|
emit_reg_reg(A_MOVE,S_W,p^.left^.location.register,R_D0);
|
||||||
p^.left^.location.register,R_D0);
|
1 : if is_mem then
|
||||||
s16bit,u16bit,bool16bit : if is_mem then
|
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_B,
|
||||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_W,
|
newreference(p^.left^.location.reference),R_D0)))
|
||||||
newreference(p^.left^.location.reference),R_D0)))
|
else
|
||||||
else
|
emit_reg_reg(A_MOVE,S_B,p^.left^.location.register,R_D0);
|
||||||
emit_reg_reg(A_MOVE,S_W,
|
end;
|
||||||
p^.left^.location.register,R_D0);
|
end;
|
||||||
end;
|
pointerdef,
|
||||||
end
|
procvardef : begin
|
||||||
else
|
|
||||||
if (procinfo.retdef^.deftype in
|
|
||||||
[pointerdef,enumdef,procvardef]) then
|
|
||||||
begin
|
|
||||||
if is_mem then
|
|
||||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,
|
|
||||||
newreference(p^.left^.location.reference),R_D0)))
|
|
||||||
else
|
|
||||||
exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,
|
|
||||||
p^.left^.location.register,R_D0)));
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if (procinfo.retdef^.deftype=floatdef) then
|
|
||||||
{ floating point return values .... }
|
|
||||||
{ single are returned in d0 }
|
|
||||||
begin
|
|
||||||
if (pfloatdef(procinfo.retdef)^.typ=f32bit) or
|
|
||||||
(pfloatdef(procinfo.retdef)^.typ=s32real) then
|
|
||||||
begin
|
|
||||||
if is_mem then
|
if is_mem then
|
||||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,
|
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,
|
||||||
newreference(p^.left^.location.reference),R_D0)))
|
newreference(p^.left^.location.reference),R_D0)))
|
||||||
else
|
else
|
||||||
begin
|
exprasmlist^.concat(new(pai68k,op_reg_reg(A_MOVE,S_L,p^.left^.location.register,R_D0)));
|
||||||
if pfloatdef(procinfo.retdef)^.typ=f32bit then
|
end
|
||||||
emit_reg_reg(A_MOVE,S_L,p^.left^.location.register,R_D0)
|
floatdef : begin
|
||||||
else
|
{ floating point return values .... }
|
||||||
begin
|
{ single are returned in d0 }
|
||||||
{ single values are in the floating point registers }
|
if (pfloatdef(procinfo.retdef)^.typ=f32bit) or
|
||||||
if cs_fp_emulation in aktmoduleswitches then
|
(pfloatdef(procinfo.retdef)^.typ=s32real) then
|
||||||
emit_reg_reg(A_MOVE,S_L,p^.left^.location.fpureg,R_D0)
|
|
||||||
else
|
|
||||||
exprasmlist^.concat(new(pai68k,op_reg_reg(A_FMOVE,S_FS,
|
|
||||||
p^.left^.location.fpureg,R_D0)));
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Begin
|
|
||||||
{ this is only possible in real non emulation mode }
|
|
||||||
{ LOC_MEM,LOC_REFERENCE }
|
|
||||||
if is_mem then
|
|
||||||
begin
|
begin
|
||||||
exprasmlist^.concat(new(pai68k,op_ref_reg(A_FMOVE,
|
if is_mem then
|
||||||
|
exprasmlist^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,
|
||||||
|
newreference(p^.left^.location.reference),R_D0)))
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
if pfloatdef(procinfo.retdef)^.typ=f32bit then
|
||||||
|
emit_reg_reg(A_MOVE,S_L,p^.left^.location.register,R_D0)
|
||||||
|
else
|
||||||
|
begin
|
||||||
|
{ single values are in the floating point registers }
|
||||||
|
if cs_fp_emulation in aktmoduleswitches then
|
||||||
|
emit_reg_reg(A_MOVE,S_L,p^.left^.location.fpureg,R_D0)
|
||||||
|
else
|
||||||
|
exprasmlist^.concat(new(pai68k,op_reg_reg(A_FMOVE,S_FS,
|
||||||
|
p^.left^.location.fpureg,R_D0)));
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Begin
|
||||||
|
{ this is only possible in real non emulation mode }
|
||||||
|
{ LOC_MEM,LOC_REFERENCE }
|
||||||
|
if is_mem then
|
||||||
|
begin
|
||||||
|
exprasmlist^.concat(new(pai68k,op_ref_reg(A_FMOVE,
|
||||||
getfloatsize(pfloatdef(procinfo.retdef)^.typ),
|
getfloatsize(pfloatdef(procinfo.retdef)^.typ),
|
||||||
newreference(p^.left^.location.reference),R_FP0)));
|
newreference(p^.left^.location.reference),R_FP0)));
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
{ LOC_FPU }
|
{ LOC_FPU }
|
||||||
begin
|
begin
|
||||||
{ convert from extended to correct type }
|
{ convert from extended to correct type }
|
||||||
{ when storing }
|
{ when storing }
|
||||||
exprasmlist^.concat(new(pai68k,op_reg_reg(A_FMOVE,
|
exprasmlist^.concat(new(pai68k,op_reg_reg(A_FMOVE,
|
||||||
getfloatsize(pfloatdef(procinfo.retdef)^.typ),p^.left^.location.fpureg,R_FP0)));
|
getfloatsize(pfloatdef(procinfo.retdef)^.typ),p^.left^.location.fpureg,R_FP0)));
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
do_jmp:
|
do_jmp:
|
||||||
truelabel:=otlabel;
|
truelabel:=otlabel;
|
||||||
@ -604,7 +598,7 @@ do_jmp:
|
|||||||
|
|
||||||
begin
|
begin
|
||||||
InternalError(3431243);
|
InternalError(3431243);
|
||||||
(*
|
(*
|
||||||
{ this can be called recursivly }
|
{ this can be called recursivly }
|
||||||
oldendexceptlabel:=endexceptlabel;
|
oldendexceptlabel:=endexceptlabel;
|
||||||
{ we modify EAX }
|
{ we modify EAX }
|
||||||
@ -782,7 +776,10 @@ do_jmp:
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.1 1998-09-01 09:07:09 peter
|
Revision 1.2 1998-09-01 12:48:01 peter
|
||||||
|
* use pdef^.size instead of orddef^.typ
|
||||||
|
|
||||||
|
Revision 1.1 1998/09/01 09:07:09 peter
|
||||||
* m68k fixes, splitted cg68k like cgi386
|
* m68k fixes, splitted cg68k like cgi386
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -767,15 +767,12 @@ begin
|
|||||||
reset_reference(hr^);
|
reset_reference(hr^);
|
||||||
hr^.offset:=procinfo.retoffset;
|
hr^.offset:=procinfo.retoffset;
|
||||||
hr^.base:=procinfo.framepointer;
|
hr^.base:=procinfo.framepointer;
|
||||||
if (procinfo.retdef^.deftype=orddef) then
|
if (procinfo.retdef^.deftype in [orddef,enumdef]) then
|
||||||
begin
|
begin
|
||||||
case porddef(procinfo.retdef)^.typ of
|
case procinfo.retdef^.size of
|
||||||
s32bit,u32bit :
|
4 : procinfo.aktexitcode^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,hr,R_D0)));
|
||||||
procinfo.aktexitcode^.concat(new(pai68k,op_ref_reg(A_MOVE,S_L,hr,R_D0)));
|
2 : procinfo.aktexitcode^.concat(new(pai68k,op_ref_reg(A_MOVE,S_W,hr,R_D0)));
|
||||||
u8bit,s8bit,uchar,bool8bit :
|
1 : procinfo.aktexitcode^.concat(new(pai68k,op_ref_reg(A_MOVE,S_B,hr,R_D0)));
|
||||||
procinfo.aktexitcode^.concat(new(pai68k,op_ref_reg(A_MOVE,S_B,hr,R_D0)));
|
|
||||||
s16bit,u16bit :
|
|
||||||
procinfo.aktexitcode^.concat(new(pai68k,op_ref_reg(A_MOVE,S_W,hr,R_D0)));
|
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@ -1348,7 +1345,10 @@ end;
|
|||||||
end.
|
end.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.12 1998-09-01 09:07:09 peter
|
Revision 1.13 1998-09-01 12:48:02 peter
|
||||||
|
* use pdef^.size instead of orddef^.typ
|
||||||
|
|
||||||
|
Revision 1.12 1998/09/01 09:07:09 peter
|
||||||
* m68k fixes, splitted cg68k like cgi386
|
* m68k fixes, splitted cg68k like cgi386
|
||||||
|
|
||||||
Revision 1.11 1998/08/31 12:26:24 peter
|
Revision 1.11 1998/08/31 12:26:24 peter
|
||||||
|
Loading…
Reference in New Issue
Block a user