mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-25 15:18:22 +02:00
* fixing bugs related to load_reg_ref
This commit is contained in:
parent
116d2b3f53
commit
a3aea23c2e
@ -78,6 +78,7 @@ specific processor ABI. It is overriden for each CPU target.
|
|||||||
procedure g_flags2reg(list:TAasmOutput;Size:TCgSize;CONST f:tresflags;reg:TRegister);override;
|
procedure g_flags2reg(list:TAasmOutput;Size:TCgSize;CONST f:tresflags;reg:TRegister);override;
|
||||||
procedure g_overflowCheck(List:TAasmOutput;const p:TNode);override;
|
procedure g_overflowCheck(List:TAasmOutput;const p:TNode);override;
|
||||||
procedure g_stackframe_entry(list:TAasmOutput;localsize:LongInt);override;
|
procedure g_stackframe_entry(list:TAasmOutput;localsize:LongInt);override;
|
||||||
|
procedure g_restore_all_registers(list:TAasmOutput;selfused,accused,acchiused:boolean);override;
|
||||||
procedure g_restore_frame_pointer(list:TAasmOutput);override;
|
procedure g_restore_frame_pointer(list:TAasmOutput);override;
|
||||||
procedure g_return_from_proc(list:TAasmOutput;parasize:aword);override;
|
procedure g_return_from_proc(list:TAasmOutput;parasize:aword);override;
|
||||||
procedure g_save_all_registers(list : taasmoutput);override;
|
procedure g_save_all_registers(list : taasmoutput);override;
|
||||||
@ -252,28 +253,55 @@ procedure TCgSparc.a_load_const_ref(list:TAasmOutput;size:tcgsize;a:aword;CONST
|
|||||||
WITH List DO
|
WITH List DO
|
||||||
IF a=0
|
IF a=0
|
||||||
THEN
|
THEN
|
||||||
Concat(taicpu.op_reg_ref(A_ST,R_G0,ref))
|
Concat(taicpu.op_reg_ref(A_ST,R_G0,Ref))
|
||||||
ELSE
|
ELSE
|
||||||
BEGIN
|
BEGIN
|
||||||
a_load_const_reg(list,size,a,R_G1);
|
a_load_const_reg(list,size,a,R_G1);
|
||||||
case size of
|
a_load_reg_ref(list,size,R_G1,Ref);
|
||||||
OS_32,OS_S32:
|
|
||||||
Concat(taicpu.op_reg_ref(A_ST,R_G1,ref));
|
|
||||||
OS_64,OS_S64:
|
|
||||||
Concat(taicpu.op_reg_ref(A_STD,R_G1,ref));
|
|
||||||
else
|
|
||||||
InternalError(2002102100);
|
|
||||||
end;
|
|
||||||
END;
|
END;
|
||||||
END;
|
END;
|
||||||
procedure TCgSparc.a_load_reg_ref(list:TAasmOutput;size:TCGSize;reg:tregister;CONST ref:TReference);
|
procedure TCgSparc.a_load_reg_ref(list:TAasmOutput;size:TCGSize;reg:tregister;const Ref:TReference);
|
||||||
BEGIN
|
var
|
||||||
list.concat(taicpu.op_reg_ref(A_ST,reg,ref));
|
op:tasmop;
|
||||||
END;
|
begin
|
||||||
|
case size of
|
||||||
|
{ signed integer registers }
|
||||||
|
OS_S8:
|
||||||
|
Op:=A_STB;{Store Signed Byte}
|
||||||
|
OS_S16:
|
||||||
|
Op:=A_STH;{Store Signed Halfword}
|
||||||
|
OS_S32:
|
||||||
|
Op:=A_ST;{Store Word}
|
||||||
|
OS_S64:
|
||||||
|
Op:=A_STD;{Store Double Word}
|
||||||
|
{ unsigned integer registers }
|
||||||
|
//A_STSTUB;{Store-Store Unsigned Byte}
|
||||||
|
OS_8:
|
||||||
|
Op:=A_STB;{Store Unsigned Bye}
|
||||||
|
OS_16:
|
||||||
|
Op:=A_STH;{Store Unsigned Halfword}
|
||||||
|
OS_32:
|
||||||
|
Op:=A_ST;{Store Word}
|
||||||
|
OS_64:
|
||||||
|
Op:=A_STD;{Store Double Word}
|
||||||
|
{ floating-point real registers }
|
||||||
|
OS_F32:
|
||||||
|
Op:=A_STF;{Store Floating-point word}
|
||||||
|
//A_STFSR
|
||||||
|
OS_F64:
|
||||||
|
Op:=A_STDF;{Store Double Floating-point word}
|
||||||
|
//A_STC;{Store Coprocessor}
|
||||||
|
//A_STCSR;
|
||||||
|
//A_STDC;{Store Double Coprocessor}
|
||||||
|
else
|
||||||
|
InternalError(2002122100);
|
||||||
|
end;
|
||||||
|
with list do
|
||||||
|
concat(taicpu.op_reg_ref(op,reg,ref));
|
||||||
|
end;
|
||||||
procedure TCgSparc.a_load_ref_reg(list:TAasmOutput;size:TCgSize;const ref:TReference;reg:tregister);
|
procedure TCgSparc.a_load_ref_reg(list:TAasmOutput;size:TCgSize;const ref:TReference;reg:tregister);
|
||||||
var
|
var
|
||||||
op:tasmop;
|
op:tasmop;
|
||||||
s:topsize;
|
|
||||||
begin
|
begin
|
||||||
case size of
|
case size of
|
||||||
{ signed integer registers }
|
{ signed integer registers }
|
||||||
@ -907,6 +935,10 @@ after execution of that instruction is the called function stack pointer}
|
|||||||
with list do
|
with list do
|
||||||
concat(Taicpu.Op_reg_const_reg(A_SAVE,Stack_Pointer_Reg,-LocalSize,Stack_Pointer_Reg));
|
concat(Taicpu.Op_reg_const_reg(A_SAVE,Stack_Pointer_Reg,-LocalSize,Stack_Pointer_Reg));
|
||||||
end;
|
end;
|
||||||
|
procedure TCgSparc.g_restore_all_registers(list:TaasmOutput;selfused,accused,acchiused:boolean);
|
||||||
|
begin
|
||||||
|
{$warning FIX ME TCgSparc.g_restore_all_registers}
|
||||||
|
end;
|
||||||
procedure TCgSparc.g_restore_frame_pointer(list:TAasmOutput);
|
procedure TCgSparc.g_restore_frame_pointer(list:TAasmOutput);
|
||||||
begin
|
begin
|
||||||
{This function intontionally does nothing as frame pointer is restored in the
|
{This function intontionally does nothing as frame pointer is restored in the
|
||||||
@ -1345,7 +1377,10 @@ BEGIN
|
|||||||
END.
|
END.
|
||||||
{
|
{
|
||||||
$Log$
|
$Log$
|
||||||
Revision 1.31 2003-01-05 21:32:35 mazen
|
Revision 1.32 2003-01-06 22:51:47 mazen
|
||||||
|
* fixing bugs related to load_reg_ref
|
||||||
|
|
||||||
|
Revision 1.31 2003/01/05 21:32:35 mazen
|
||||||
* fixing several bugs compiling the RTL
|
* fixing several bugs compiling the RTL
|
||||||
|
|
||||||
Revision 1.30 2003/01/05 13:36:53 florian
|
Revision 1.30 2003/01/05 13:36:53 florian
|
||||||
|
Loading…
Reference in New Issue
Block a user