attinst.inc --> strinst.inc

This commit is contained in:
mazen 2002-10-01 21:06:29 +00:00
parent 807d2d4d63
commit b2c63fb6ca
4 changed files with 43 additions and 102 deletions

View File

@ -1,72 +0,0 @@
{*****************************************************************************}
{ File : attinstr.inc }
{ Author : Mazen NEIFER }
{ Project : Free Pascal Compiler (FPC) }
{ Creation date : 2002\05\08 }
{ Last modification date : 2002\07\01 }
{ Licence : GPL }
{ Bug report : mazen.neifer.01@supaero.org }
{*****************************************************************************}
'NONE',
'ABCD',
'ADD','ADDcc','ADDX','ADDXcc',
'AND','ANDcc','ANDN','ADDNcc',
'BN','BNE','BE','BG','BLE','BGE','BI','BGU','BLEU','BCC',
'BCS','BPOS','NEG','BVC','BVS','BA',
'CALL',
'CBccc',
'FBN','FBU','FBG','FBUG','FBL','FBUL','FBLG','FBNE',
'FBE','FBUE','FBGE','FBUGE','FBLE','FBULE','FBO','FBA',
'FLUSH',
'JMPL',
'LDSB','LDSH','LDSTUB',
'LDUB','LDUH','LD','LDD','LDF','LDFSR','LDDF','LDC','LDCSR','LDDC',
'LDSBA','LDSHA','LDUBA','LDUHA','LDA','LDDA',
'LDSTUBA',
'MULScc',
'NOP',
'OR','ORcc','ORN','ORNcc',
'RDASR','RDY','RDPSR','RDWIM','RDTBR',
'RESTORE',
'RETT',
'SAVE',
'SDIV','SDIVcc',
'SMUL','SMULcc',
'SETHI',
'SLL','SRL','SRA',
'STB','STH','ST','STD','STF','STDF','STFSR','STDFQ',
'STC','STDC','STCSR','STDCQ',
'STBA','STHA','STA','STDA',
'SUB','SUBcc','SUBX','SUBXcc',
'SWAP','SWAPA','Ticc','TADDcc','TSUBcc','TADDccTV','TSUBccTV',
'UDIV','UDIVcc',
'UMUL','UMULcc',
'UNMP',
'WRASR','WRY','WRPSR','WRWIM','WRTBR',
'XNOR','XNORcc',
'XOR','XORcc',
{Floating-point instructions}
'FiTOs','FiTOd','FiTOq',
'FsTOi','FdTOi','FqTOi',
'FsTOd','FsTOq',
'FdTOs','FdTOq',
'FqTOd','FqTOs',
'MOVs','NEGs','FABSs',
'FSQRTs','FSQRTd','FSQRTq',
'FADDs','FADDd','FADDq',
'FSUBs','FSUBd','FSUBq',
'FMULs','FMULd','FMULQ',
'FdMULq','FsMULd',
'DIVs','DIVd','FDIVq',
'FCMPs','FCMPd','FCMPq',
'FCPop1','CPop2',
{Synthetic instructions}
'btst','bset','bclr','btog',
'clr','clrb','clrh',
'cmp',
'dec','deccc',
'inc','inccc',
'not',
'set',
'skipz','skipnz',
'tst'

View File

@ -790,43 +790,47 @@ stack as in the Intel architecture,
standard calling sequence does not define a maximum stack frame size, nor does
it restrict how a language system uses the "unspecified" areas of the standard
stack frame.}
Dec(LocalSize,(16+1+5)*4);
Dec(LocalSize,(16+1+5)*4);
{Althogh the SPARC architecture require only word alignment, software
convention and the operating system require every stack frame to be double word
aligned}
if(LocalSize and $00000003)<>0
then
LocalSize:=(LocalSize and $FFFFFFFC)+4;
with list do
concat(Taicpu.Op_reg_const_reg(A_SAVE,S_L,Stack_Pointer_Reg,localsize,Stack_Pointer_Reg));
end;
{Execute the SAVE instruction to get a new register window and get a new stack
frame. In the "SAVE %i6,size,%i6" the first %i6 is related to the state before
execution of the SAVE instrucion so it is the caller %i6, when the %i6 after
execution of that instrucion is the called function stack pointer}
with list do
concat(Taicpu.Op_reg_const_reg(A_SAVE,S_L,Stack_Pointer_Reg,localsize,Stack_Pointer_Reg));
end;
procedure tcgSPARC.g_restore_frame_pointer(list:TAasmOutput);
begin
begin
{We use trivial restore, as we set result before}
with list do
concat(Taicpu.Op_reg_const_reg(A_RESTORE,S_L,R_G0,0,R_G0));
end;
with list do
concat(Taicpu.Op_reg_const_reg(A_RESTORE,S_L,R_G0,0,R_G0));
end;
procedure tcgSPARC.g_return_from_proc(list:TAasmOutput;parasize:aword);
var
RetReference:TReference;
begin
{ Routines with the poclearstack flag set use only a ret }
{ also routines with parasize=0 }
with list do
RetReference:TReference;
begin
{According to the SPARC ABI, the stack is cleared using the RESTORE instruction
which is genereted in the g_restore_frame_pointer. Notice that SPARC has no
RETURN instruction and that JMPL is used instead. The JMPL instrucion have one
delay slot, so an inversion is possible such as
JMPL %i6+8,%g0
RESTORE %g0,0,%g0
If no inversion we can use just
RESTORE %g0,0,%g0
JMPL %i6+8,%g0
NOP}
with list do
begin
reference_reset_base(RetReference,R_I7,8);
concat(Taicpu.Op_ref_reg(A_JMPL,S_L,RetReference,R_G0));
if(parasize<>0)
then
{ parameters are limited to 65535 bytes because }
{ ret allows only imm16 }
IF(parasize>65535)
THEN
CGMessage(cg_e_parasize_too_big);
concat(Taicpu.Op_ref_reg(A_JMPL,S_L,RetReference,R_G0));
end
end;
PROCEDURE tcgSPARC.a_loadaddr_ref_reg(list:TAasmOutput;CONST ref:TReference;r:tregister);
end;
PROCEDURE tcgSPARC.a_loadaddr_ref_reg(list:TAasmOutput;CONST ref:TReference;r:tregister);
begin
// list.concat(taicpu.op_ref_reg(A_LEA,S_L,ref,r));
@ -1075,6 +1079,9 @@ BEGIN
END.
{
$Log$
Revision 1.6 2002-10-01 17:41:50 florian
Revision 1.7 2002-10-01 21:06:29 mazen
attinst.inc --> strinst.inc
Revision 1.6 2002/10/01 17:41:50 florian
* fixed log and id
}
}

View File

@ -142,7 +142,7 @@ TYPE
CONST
FirstOp=Low(TAsmOp);
LastOp=High(TAsmOp);
std_op2str:op2strtable=({$INCLUDE attinstr.inc});
std_op2str:op2strtable=({$INCLUDE strinst.inc});
{*****************************************************************************
Operand Sizes
*****************************************************************************}
@ -580,7 +580,10 @@ FUNCTION flags_to_cond(CONST f:TResFlags):TAsmCond;
END.
{
$Log$
Revision 1.8 2002-09-30 19:12:14 mazen
Revision 1.9 2002-10-01 21:06:29 mazen
attinst.inc --> strinst.inc
Revision 1.8 2002/09/30 19:12:14 mazen
* function prologue fixed
Revision 1.7 2002/09/27 04:30:53 mazen

View File

@ -8,7 +8,7 @@
{ Bug report : mazen.neifer.01@supaero.org }
{*****************************************************************************}
{
Id:
$Id$
}
'NONE',
'ABCD',
@ -74,5 +74,8 @@
'skipz','skipnz',
'tst'
{
Log:
$Log$
Revision 1.2 2002-10-01 21:07:48 mazen
attinst.inc --> strinst.inc
}