* fixed mtfsb0 instruction for assembler reader/writer

* fixed initialisation of fpscr register to avoid spurious SIGPFE's
    (uses mtfsb0 instruction, so added extra define in options.pas to avoid
    requiring to start with a cross compiler)
This commit is contained in:
Jonas Maebe 2004-01-10 00:16:20 +00:00
parent cdbb601a4e
commit 4c7c8b9c3a
5 changed files with 50 additions and 25 deletions

View File

@ -1672,6 +1672,7 @@ begin
{$ifdef powerpc}
def_symbol('HASINTF');
def_symbol('HASVARIANT');
def_symbol('FPC_MTFSB0_CORRECTED');
{$endif powerpc}
def_symbol('INTERNSETLENGTH');
def_symbol('INTERNLENGTH');
@ -1993,7 +1994,13 @@ finalization
end.
{
$Log$
Revision 1.119 2004-01-02 17:19:04 jonas
Revision 1.120 2004-01-10 00:16:21 jonas
* fixed mtfsb0 instruction for assembler reader/writer
* fixed initialisation of fpscr register to avoid spurious SIGPFE's
(uses mtfsb0 instruction, so added extra define in options.pas to avoid
requiring to start with a cross compiler)
Revision 1.119 2004/01/02 17:19:04 jonas
* if currency = int64, FPC_CURRENCY_IS_INT64 is defined
+ round and trunc for currency and comp if FPC_CURRENCY_IS_INT64 is
defined

View File

@ -61,7 +61,7 @@ uses
a_lhau, a_lhaux, a_lhax, a_hbrx, a_lhz, a_lhzu, a_lhzux, a_lhzx, a_lmw,
a_lswi, a_lswx, a_lwarx, a_lwbrx, a_lwz, a_lwzu, a_lwzux, a_lwzx, a_mcrf,
a_mcrfs, a_mcrxr, a_lcrxe, a_mfcr, a_mffs, a_maffs_, a_mfmsr, a_mfspr, a_mfsr,
a_mfsrin, a_mftb, a_mtcrf, a_a_mtfd0, a_mtfsb1, a_mtfsf, a_mtfsf_,
a_mfsrin, a_mftb, a_mtcrf, a_mtfsb0, a_mtfsb1, a_mtfsf, a_mtfsf_,
a_mtfsfi, a_mtfsfi_, a_mtmsr, a_mtspr, a_mtsr, a_mtsrin, a_mulhw,
a_mulhw_, a_mulhwu, a_mulhwu_, a_mulli, a_mullw, a_mullw_, a_mullwo,
a_mullwo_, a_nand, a_nand_, a_neg, a_neg_, a_nego, a_nego_, a_nor, a_nor_,
@ -694,7 +694,13 @@ implementation
end.
{
$Log$
Revision 1.81 2003-12-16 21:49:47 florian
Revision 1.82 2004-01-10 00:16:21 jonas
* fixed mtfsb0 instruction for assembler reader/writer
* fixed initialisation of fpscr register to avoid spurious SIGPFE's
(uses mtfsb0 instruction, so added extra define in options.pas to avoid
requiring to start with a cross compiler)
Revision 1.81 2003/12/16 21:49:47 florian
* fixed ppc compilation
Revision 1.80 2003/12/09 20:39:43 jonas

View File

@ -53,7 +53,7 @@ interface
'lhau','lhaux','lhax','hbrx','lhz','lhzu','lhzux','lhzx','lmw',
'lswi','lswx','lwarx','lwbrx','lwz','lwzu','lwzux','lwzx','mcrf',
'mcrfs','mcrxr','lcrxe','mfcr','mffs','maffs.','mfmsr','mfspr','mfsr',
'mfsrin','mftb','mtcrf','mtfd0','mtfsb1','mtfsf','mtfsf.',
'mfsrin','mftb','mtcrf','mtfsb0','mtfsb1','mtfsf','mtfsf.',
'mtfsfi','mtfsfi.','mtmsr','mtspr','mtsr','mtsrin','mulhw',
'mulhw.','mulhwu','mulhwu.','mulli','mullw','mullw.','mullwo',
'mullwo.','nand','nand.','neg','neg.','nego','nego.','nor','nor.',
@ -144,7 +144,13 @@ implementation
end.
{
$Log$
Revision 1.4 2004-01-04 21:18:10 jonas
Revision 1.5 2004-01-10 00:16:21 jonas
* fixed mtfsb0 instruction for assembler reader/writer
* fixed initialisation of fpscr register to avoid spurious SIGPFE's
(uses mtfsb0 instruction, so added extra define in options.pas to avoid
requiring to start with a cross compiler)
Revision 1.4 2004/01/04 21:18:10 jonas
+ as_darwin assembler type (labels start with L)
* never generate register->number mappings for Darwin
* always use real register names for Darwin

View File

@ -14,13 +14,6 @@
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
}
procedure darwin_signal_trampoline(pc,r1: pointer; res: longint);
begin
{ give runtime error at the position where the signal was raised }
HandleErrorAddrFrame(res,pc,r1);
end;
procedure SignalToRunerror(Sig: cint; var info : tsiginfo_t;Var SigContext:SigContextRec); cdecl;
var
@ -45,7 +38,7 @@ begin
{ enabled by executing a sigreturn, however then the exception is triggered }
{ triggered again immediately if we don't turn off the "exception occurred" }
{ flags in fpscr }
SigContext.uc_mcontext^.fs.fpscr := SigContext.uc_mcontext^.fs.fpscr and not($fffc0000);
SigContext.uc_mcontext^.fs.fpscr := SigContext.uc_mcontext^.fs.fpscr and not($fffe0700);
end;
SIGILL,
SIGBUS,
@ -59,16 +52,22 @@ begin
{ return to trampoline }
if res <> 0 then
begin
SigContext.uc_mcontext^.ss.r3 := SigContext.uc_mcontext^.ss.srr0;
SigContext.uc_mcontext^.ss.r4 := SigContext.uc_mcontext^.ss.r1;
SigContext.uc_mcontext^.ss.r5 := res;
pointer(SigContext.uc_mcontext^.ss.srr0) := @darwin_signal_trampoline;
SigContext.uc_mcontext^.ss.r3 := res;
SigContext.uc_mcontext^.ss.r4 := SigContext.uc_mcontext^.ss.srr0;
SigContext.uc_mcontext^.ss.r5 := SigContext.uc_mcontext^.ss.r1;
pointer(SigContext.uc_mcontext^.ss.srr0) := @HandleErrorAddrFrame;
end;
end;
{
$Log$
Revision 1.2 2004-01-08 21:52:34 jonas
Revision 1.3 2004-01-10 00:16:21 jonas
* fixed mtfsb0 instruction for assembler reader/writer
* fixed initialisation of fpscr register to avoid spurious SIGPFE's
(uses mtfsb0 instruction, so added extra define in options.pas to avoid
requiring to start with a cross compiler)
Revision 1.2 2004/01/08 21:52:34 jonas
* fixed signal handling under 10.3.2, still have to verify whether it's
backwards compatible

View File

@ -38,6 +38,13 @@ asm
{ clear all "exception happened" flags we care about}
mtfsfi 0,0
mtfsfi 1,0
mtfsfi 2,0
mtfsfi 3,0
{$ifdef fpc_mtfsb0_corrected}
mtfsb0 21
mtfsb0 22
mtfsb0 23
{$endif fpc_mtfsb0_corrected}
{ enable invalid operations and division by zero exceptions. }
{ No overflow/underflow, since those give some spurious }
@ -51,12 +58,7 @@ begin
fpc_enable_ppc_fpu_exceptions;
end;
{
doesn't work, at least not on linux, because there after an exception
fpscr is set to 0 (JM)
}
(*
function fpc_get_ppc_fpscr: cardinal;
assembler;
var
@ -73,7 +75,6 @@ asm
a_mtfsf f0
}
end;
*)
{ This function is never called directly, it's a dummy to hold the register save/
load subroutines
@ -1060,7 +1061,13 @@ end;
{
$Log$
Revision 1.63 2004-01-03 19:46:29 jonas
Revision 1.64 2004-01-10 00:16:20 jonas
* fixed mtfsb0 instruction for assembler reader/writer
* fixed initialisation of fpscr register to avoid spurious SIGPFE's
(uses mtfsb0 instruction, so added extra define in options.pas to avoid
requiring to start with a cross compiler)
Revision 1.63 2004/01/03 19:46:29 jonas
* fixed syntax error caught by Mac OS X' as :)
Revision 1.62 2004/01/02 17:21:50 jonas