mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 11:48:04 +02:00
* various fixes, mostly changing the names of the modifies registers to
upper case since that seems to be required by the compiler
This commit is contained in:
parent
18b102ce95
commit
3a23eefecc
@ -93,9 +93,9 @@
|
||||
asm
|
||||
fctiwz fr1,fr1
|
||||
stfd fr1,temp.d
|
||||
lwz r3,temp.l2
|
||||
// !!!! fix int64 result
|
||||
end ['r3','f1'];
|
||||
lwz r3,temp.l1
|
||||
lwz r4,temp.l2
|
||||
end ['R3','F1'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_ROUND}
|
||||
@ -113,8 +113,9 @@
|
||||
asm
|
||||
fctiw fr1,fr1
|
||||
stfd fr1,temp.d
|
||||
lwz r3,temp.l2
|
||||
end ['r3','f1'];
|
||||
lwz r3,temp.l1
|
||||
lwz r4,temp.l2
|
||||
end ['R3','F1'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_POWER}
|
||||
@ -207,8 +208,8 @@
|
||||
****************************************************************************}
|
||||
|
||||
const
|
||||
longint_to_real_helper: int64 = 0x4330000080000000;
|
||||
cardinal_to_real_helper: int64 = 0x430000000000000;
|
||||
longint_to_real_helper: int64 = $4330000080000000;
|
||||
cardinal_to_real_helper: int64 = $430000000000000;
|
||||
int_to_real_factor: double = double(high(cardinal))+1.0;
|
||||
|
||||
function fpc_int64_to_double(i: int64): double; compilerproc;
|
||||
@ -239,7 +240,7 @@ asm
|
||||
lfd fr2,int_to_real_factor@l(r3)
|
||||
fsub fr3,fr3,fr1
|
||||
fmadd fr1,fr0,fr2,fr3
|
||||
end ['r0','r3','r4','f0','f1','f2','f3'];
|
||||
end ['R0','R3','R4','F0','F1','F2','F3'];
|
||||
|
||||
|
||||
function fpc_qword_to_double(q: qword): double; compilerproc;
|
||||
@ -267,13 +268,17 @@ asm
|
||||
lfd fr2,int_to_real_factor@l(r3)
|
||||
fsub fr3,fr3,fr1
|
||||
fmadd fr1,fr0,fr2,fr3
|
||||
end ['r0','r3','f0','f1','f2','f3'];
|
||||
end ['R0','R3','F0','F1','F2','F3'];
|
||||
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.7 2002-07-31 16:58:12 jonas
|
||||
Revision 1.8 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.7 2002/07/31 16:58:12 jonas
|
||||
* fixed conversion from int64/qword to double errors
|
||||
|
||||
Revision 1.6 2002/07/29 21:28:17 florian
|
||||
|
@ -123,14 +123,14 @@ L8BytesAligned:
|
||||
sub r4,r4,r10
|
||||
|
||||
LMove32ByteLoop:
|
||||
lfdux f13,r3,r10
|
||||
lfdux f12,r3,r10
|
||||
lfdux f11,r3,r10
|
||||
lfdux f0,r3,r10
|
||||
stfdux f13,r4,r10
|
||||
stfdux f12,r4,r10
|
||||
stfdux f11,r4,r10
|
||||
lfdux f1,r3,r10
|
||||
lfdux f2,r3,r10
|
||||
lfdux f3,r3,r10
|
||||
stfdux f0,r4,r10
|
||||
stfdux f1,r4,r10
|
||||
stfdux f2,r4,r10
|
||||
stfdux f3,r4,r10
|
||||
bdnz LMove32ByteLoop
|
||||
|
||||
{ cr0*4+eq is true if "count and 31" = 0 }
|
||||
@ -310,9 +310,10 @@ LFillCharDone:
|
||||
end;
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FILLWORD}
|
||||
procedure fillword(var x;count : longint;value : word);
|
||||
begin
|
||||
{$define FPC_SYSTEM_HAS_FILLDWORD}
|
||||
procedure filldword(var x;count : longint;value : dword);
|
||||
assembler;
|
||||
asm
|
||||
{ registers:
|
||||
r3 x
|
||||
r4 count
|
||||
@ -327,17 +328,14 @@ begin
|
||||
}
|
||||
asm
|
||||
cmpwi cr0,r3,0
|
||||
andi r17,r4,$3
|
||||
srwi r18,r4,1 //r18:=count div 2
|
||||
mr r13,r3
|
||||
li r14,4
|
||||
ble .FillWordEnd //if count<=0 Then Exit
|
||||
mtctr r4
|
||||
subi r3,r3,4
|
||||
ble .FillWordEnd //if count<=0 Then Exit
|
||||
.FillWordLoop:
|
||||
stwux r5,r13,r14
|
||||
stwu r5,4(r3)
|
||||
bdnz .FillWordLoop
|
||||
.FillWordEnd:
|
||||
end ['r13','r14','ctr']
|
||||
end;
|
||||
end ['R3','R4','R5','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_INDEXBYTE}
|
||||
@ -362,7 +360,7 @@ LIndexByteLoop:
|
||||
bne LIndexByteDone
|
||||
sub r3,r10,r0
|
||||
LIndexByteDone:
|
||||
end ['r0','r3','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R9','R10','CR0','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_INDEXWORD}
|
||||
@ -387,7 +385,7 @@ LIndexWordLoop:
|
||||
bne LIndexWordDone
|
||||
sub r3,r10,r0
|
||||
LIndexWordDone:
|
||||
end ['r0','r3','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R9','R10','CR0','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_INDEXDWORD}
|
||||
@ -412,7 +410,7 @@ LIndexDWordLoop:
|
||||
bne LIndexDWordDone
|
||||
sub r3,r10,r0
|
||||
LIndexDWordDone:
|
||||
end ['r0','r3','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R9','R10','CR0','CTR'];
|
||||
|
||||
{$define FPC_SYSTEM_HAS_COMPAREBYTE}
|
||||
function CompareByte(var buf1,buf2;len:longint):longint; assembler;
|
||||
@ -438,7 +436,7 @@ LCompByteLoop:
|
||||
{ if chars not equal or at the end, we're ready }
|
||||
bdnzt cr0*4+eq, LCompByteLoop
|
||||
LCompByteDone:
|
||||
end ['r0','r3','r4','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R9','R10','CR0','CTR'];
|
||||
|
||||
{$define FPC_SYSTEM_HAS_COMPAREWORD}
|
||||
function CompareWord(var buf1,buf2;len:longint):longint; assembler;
|
||||
@ -464,7 +462,7 @@ LCompWordLoop:
|
||||
{ if chars not equal or at the end, we're ready }
|
||||
bdnzt cr0*4+eq, LCompWordLoop
|
||||
LCompWordDone:
|
||||
end ['r0','r3','r4','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R9','R10','CR0','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_COMPAREDWORD}
|
||||
@ -491,7 +489,7 @@ LCompDWordLoop:
|
||||
{ if chars not equal or at the end, we're ready }
|
||||
bdnzt cr0*4+eq, LCompDWordLoop
|
||||
LCompDWordDone:
|
||||
end ['r0','r3','r4','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R9','R10','CR0','CTR'];
|
||||
|
||||
{$define FPC_SYSTEM_HAS_INDEXCHAR0}
|
||||
function IndexChar0(var buf;len:longint;b:Char):longint; assembler;
|
||||
@ -519,7 +517,7 @@ LIndexChar0Loop:
|
||||
bne LIndexChar0Done
|
||||
sub r3,r9,r0
|
||||
LIndexChar0Done:
|
||||
end ['r0','r3','r4','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R9','R10','CR0','CTR'];
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
@ -627,7 +625,7 @@ LShortStrCopyLoop:
|
||||
lbzu r0,1(r5)
|
||||
stbu r0,1(r3)
|
||||
bdnz LShortStrCopyLoop
|
||||
end ['r0','r3','r4','r5','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R5','R10','CR0','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SHORTSTR_COPY}
|
||||
@ -655,7 +653,7 @@ LShortStrCopyLoop:
|
||||
lbzu r0,1(r4)
|
||||
stbu r0,1(r5)
|
||||
bdnz LShortStrCopyLoop
|
||||
end ['r0','r3','r4','r5','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R5','R10','CR0','CTR'];
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SHORTSTR_CONCAT}
|
||||
function fpc_shortstr_concat(const s1,s2: shortstring): shortstring; compilerproc;
|
||||
@ -683,7 +681,7 @@ LShortStrConcatLoop:
|
||||
lbzu r10,1(r4)
|
||||
stbu r10,1(r3)
|
||||
bdnz LShortStrConcatLoop
|
||||
end ['r3','r4','r8','r9','r10','ctr'];
|
||||
end ['R3','R4','R8','R9','R10','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SHORTSTR_COMPARE}
|
||||
@ -738,7 +736,7 @@ LShortStrCompareLen:
|
||||
{ also return result in flags, maybe we can use this in the CG }
|
||||
mr. r3,r0
|
||||
LShortStrCompareDone:
|
||||
end ['r0','r3','r4','r8','r9','r10','cr0','cr1','ctr'];
|
||||
end ['R0','R3','R4','R8','R9','R10','CR0','CR1','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_PCHAR_TO_SHORTSTR}
|
||||
@ -757,7 +755,7 @@ function get_frame:longint;assembler;
|
||||
asm
|
||||
{$warning FIX ME!}
|
||||
// !!!!!!! depends on ABI !!!!!!!!
|
||||
end ['r3'];
|
||||
end ['R3'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_GET_CALLER_ADDR}
|
||||
@ -765,7 +763,7 @@ function get_caller_addr(framebp:longint):longint;assembler;
|
||||
asm
|
||||
{$warning FIX ME!}
|
||||
// !!!!!!! depends on ABI !!!!!!!!
|
||||
end ['r3'];
|
||||
end ['R3'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_GET_CALLER_FRAME}
|
||||
@ -773,7 +771,7 @@ function get_caller_frame(framebp:longint):longint;assembler;
|
||||
asm
|
||||
{$warning FIX ME!}
|
||||
// !!!!!!! depends on ABI !!!!!!!!
|
||||
end ['r3'];
|
||||
end ['R3'];
|
||||
|
||||
{$define FPC_SYSTEM_HAS_ABS_LONGINT}
|
||||
function abs(l:longint):longint; assembler;[internconst:in_const_abs];
|
||||
@ -781,7 +779,7 @@ asm
|
||||
srawi r0,r3,31
|
||||
add r3,r0,r3
|
||||
xor r3,r3,r0
|
||||
end ['r0','r3'];
|
||||
end ['R0','R3'];
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
@ -792,21 +790,21 @@ end ['r0','r3'];
|
||||
function odd(l:longint):boolean;assembler;[internconst:in_const_odd];
|
||||
asm
|
||||
rlwinm r3,r3,0,31,31
|
||||
end ['r3'];
|
||||
end ['R3'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_SQR_LONGINT}
|
||||
function sqr(l:longint):longint;assembler;[internconst:in_const_sqr];
|
||||
asm
|
||||
mullw r3,r3,r3
|
||||
end ['r3'];
|
||||
end ['R3'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_SPTR}
|
||||
Function Sptr : Longint;assembler;
|
||||
asm
|
||||
mr r3,sp
|
||||
end ['r3'];
|
||||
end ['R3'];
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
@ -838,7 +836,7 @@ LDecLockedLoop:
|
||||
stw r10,0,r3
|
||||
{$endif MT}
|
||||
mr. r3,r10
|
||||
end ['r3','r10'];
|
||||
end ['R3','R10'];
|
||||
|
||||
procedure inclocked(var l : longint);assembler;
|
||||
asm
|
||||
@ -853,12 +851,16 @@ LIncLockedLoop:
|
||||
addi r10,r10,1
|
||||
stw r10,0,r3
|
||||
{$endif MT}
|
||||
end ['r3','r10'];
|
||||
end ['R3','R10'];
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.11 2002-07-30 17:29:53 florian
|
||||
Revision 1.12 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.11 2002/07/30 17:29:53 florian
|
||||
+ dummy setjmp and longjmp added
|
||||
+ dummy implemtation of the destructor helper
|
||||
|
||||
|
@ -15,6 +15,7 @@
|
||||
|
||||
**********************************************************************}
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_LOAD_SMALL}
|
||||
function fpc_set_load_small(l: fpc_small_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_LOAD_SMALL']; compilerproc;
|
||||
{
|
||||
load a normal set p from a smallset l
|
||||
@ -31,9 +32,10 @@ asm
|
||||
stw r0,20(r3)
|
||||
stw r0,24(r3)
|
||||
stw r0,28(r3)
|
||||
end ['r0'];
|
||||
end ['R0'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_CREATE_ELEMENT}
|
||||
{ checked 2001/09/28 (JM) }
|
||||
function fpc_set_create_element(b : byte): fpc_normal_set;assembler;[public,alias:'FPC_SET_CREATE_ELEMENT']; compilerproc;
|
||||
{
|
||||
@ -64,8 +66,10 @@ asm
|
||||
|
||||
// store the result
|
||||
stwx r0,r3,r4
|
||||
end ['r0','r4','r10'];
|
||||
end ['R0','R4','R10'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_SET_BYTE}
|
||||
function fpc_set_set_byte(const source: fpc_normal_set; b : byte): fpc_normal_set;assembler; compilerproc;
|
||||
{
|
||||
add the element b to the set pointed by p
|
||||
@ -91,14 +95,15 @@ Lset_set_byte_copy:
|
||||
li r0,1
|
||||
// generate bit which has to be inserted
|
||||
// (can't use rlwimi, since that one only works for constants)
|
||||
rlwnm r5,r0,r5
|
||||
slw r5,r0,r5
|
||||
// insert it
|
||||
or r5,r4,r5
|
||||
// store result
|
||||
stw r5,(r3)
|
||||
end ['r0','r3','r4','r5','ctr'];
|
||||
end ['R0','R3','R4','R5','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_UNSET_BYTE}
|
||||
function fpc_set_unset_byte(const source: fpc_normal_set; b : byte): fpc_normal_set;assembler; compilerproc;
|
||||
{
|
||||
suppresses the element b to the set pointed by p
|
||||
@ -129,9 +134,10 @@ Lset_unset_byte_copy:
|
||||
andc r5,r4,r5
|
||||
// store result
|
||||
stw r4,(r3)
|
||||
end ['r0','r3','r4','r5','ctr'];
|
||||
end ['R0','R3','R4','R5','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_SET_RANGE}
|
||||
function fpc_set_set_range(const orgset: fpc_normal_set; l,h : byte): fpc_normal_set;assembler; compilerproc;
|
||||
{
|
||||
on entry: result in r3, l in r4, h in r5
|
||||
@ -182,7 +188,7 @@ Lset_range_loop:
|
||||
Lset_range_hi: // in all cases, r3 here contains the address of
|
||||
// the longint which contains the hi bit and r4
|
||||
// contains this longint
|
||||
slw r9,r10,r6 // r7 := bitmask shl (31 - (hi mod 32)) =
|
||||
slw r9,r10,r6 // r9 := bitmask shl (31 - (hi mod 32)) =
|
||||
// bitmask with bits higher than hi cleared
|
||||
// (r8 = $0xffffffff unless the first beq was
|
||||
// taken)
|
||||
@ -190,7 +196,7 @@ Lset_range_hi: // in all cases, r3 here contains the address of
|
||||
or r5,r5,r10 // and combine with existing set
|
||||
stw r5,(r3) // store to set
|
||||
Lset_range_exit:
|
||||
end ['r0','r3','r4','r5','r6','r9','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R5','R6','R9','R10','CR0','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_IN_BYTE}
|
||||
@ -206,15 +212,17 @@ asm
|
||||
rlwinm r0,r4,31-3+1,3,31-2
|
||||
// load dword in which the bit has to be tested
|
||||
lwzx r3,r3,r0
|
||||
|
||||
li r0,1
|
||||
// generate bit which has to be tested
|
||||
rwlwnm r4,r0,r4,0,31
|
||||
// test it
|
||||
and. r3,r3,r4
|
||||
end ['r0','r3','r4','cr0'];
|
||||
end ['R0','R3','R4','CR0'];
|
||||
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_ADD_SETS}
|
||||
function fpc_set_add_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_ADD_SETS']; compilerproc;
|
||||
{
|
||||
adds set1 and set2 into set dest
|
||||
@ -234,10 +242,10 @@ asm
|
||||
or r0,r0,r10
|
||||
stwu r0,4(r3)
|
||||
bdnz LMADDSETS1
|
||||
end ['r0','r3','r4','r5','r10','ctr'];
|
||||
|
||||
end ['R0','R3','R4','R5','R10','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_MUL_SETS}
|
||||
function fpc_set_mul_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_MUL_SETS']; compilerproc;
|
||||
{
|
||||
multiplies (takes common elements of) set1 and set2 result put in dest
|
||||
@ -257,9 +265,10 @@ asm
|
||||
and r0,r0,r10
|
||||
stwu r0,4(r3)
|
||||
bdnz LMMULSETS1
|
||||
end ['r0','r3','r4','r5','r10','ctr'];
|
||||
end ['R0','R3','R4','R5','R10','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_SUB_SETS}
|
||||
function fpc_set_sub_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_SUB_SETS']; compilerproc;
|
||||
{
|
||||
computes the diff from set1 to set2 result in dest
|
||||
@ -279,9 +288,10 @@ asm
|
||||
andc r0,r0,r10
|
||||
stwu r0,4(r3)
|
||||
bdnz LMSUBSETS1
|
||||
end ['r0','r3','r4','r5','r10','ctr'];
|
||||
end ['R0','R3','R4','R5','R10','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_SYMDIF_SETS}
|
||||
function fpc_set_symdif_sets(const set1,set2: fpc_normal_set): fpc_normal_set;assembler;[public,alias:'FPC_SET_SYMDIF_SETS']; compilerproc;
|
||||
{
|
||||
computes the symetric diff from set1 to set2 result in dest
|
||||
@ -301,9 +311,10 @@ asm
|
||||
xor r0,r0,r10
|
||||
stwu r0,4(r3)
|
||||
bdnz LMSYMDIFSETS1
|
||||
end ['r0','r3','r4','r5','r10','ctr'];
|
||||
end ['R0','R3','R4','R5','R10','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_COMP_SETS}
|
||||
function fpc_set_comp_sets(const set1,set2: fpc_normal_set): boolean;assembler;[public,alias:'FPC_SET_COMP_SETS']; compilerproc;
|
||||
{
|
||||
compares set1 and set2 zeroflag is set if they are equal
|
||||
@ -321,8 +332,10 @@ asm
|
||||
bdnzt cr0*4+eq,LMCOMPSETS1
|
||||
cntlzw r3,r0
|
||||
srwi. r3,r3,31
|
||||
end ['r0','r3','r4','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R10','CR0','CTR'];
|
||||
|
||||
|
||||
{$define FPC_SYSTEM_HAS_FPC_SET_CONTAINS_SET}
|
||||
function fpc_set_contains_sets(const set1,set2: fpc_normal_set): boolean;assembler;[public,alias:'FPC_SET_CONTAINS_SETS']; compilerproc;
|
||||
{
|
||||
on exit, zero flag is set if set1 <= set2 (set2 contains set1)
|
||||
@ -341,7 +354,7 @@ asm
|
||||
bdnzt cr0*4+eq,LMCONTAINSSETS1
|
||||
cntlzw r3,r0
|
||||
srwi. r3,r3,31
|
||||
end ['r0','r3','r4','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R10','CR0','CTR'];
|
||||
|
||||
|
||||
|
||||
@ -510,7 +523,11 @@ end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.11 2002-07-28 20:43:49 florian
|
||||
Revision 1.12 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.11 2002/07/28 20:43:49 florian
|
||||
* several fixes for linux/powerpc
|
||||
* several fixes to MT
|
||||
|
||||
|
@ -18,15 +18,21 @@
|
||||
{ the necessary code can be copied from the linux kernel sources }
|
||||
function setjmp(var S : jmp_buf) : longint;assembler;
|
||||
asm
|
||||
{$warning FIXME!!!!}
|
||||
end;
|
||||
|
||||
procedure longjmp(var S : jmp_buf;value : longint);assembler;
|
||||
asm
|
||||
{$warning FIXME!!!!}
|
||||
end;
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2002-07-30 17:29:53 florian
|
||||
Revision 1.3 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.2 2002/07/30 17:29:53 florian
|
||||
+ dummy setjmp and longjmp added
|
||||
+ dummy implemtation of the destructor helper
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
type
|
||||
jmp_buf = record
|
||||
{$warning FIXME!!!!}
|
||||
end;
|
||||
pjmp_buf = ^jmp_buf;
|
||||
|
||||
@ -25,7 +26,11 @@ procedure longjmp(var S : jmp_buf;value : longint);
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.3 2002-07-26 22:46:17 florian
|
||||
Revision 1.4 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.3 2002/07/26 22:46:17 florian
|
||||
* interface of system unit for Linux/PowerPC compiles
|
||||
|
||||
Revision 1.2 2002/07/26 22:08:38 florian
|
||||
|
@ -79,7 +79,7 @@ LStrCopyWrapUpLoop:
|
||||
bge LStrCopyWrapUpLoop
|
||||
LStrCopyDone:
|
||||
{ r3 still contains dest here }
|
||||
end ['r4','r7','r8','r0','r9','r10','cr0','ctr'];
|
||||
end ['R4','R7','R8','R0','R9','R10','CR0','CTR'];
|
||||
|
||||
|
||||
function strecopy(dest,source : pchar) : pchar;assembler;
|
||||
@ -136,7 +136,7 @@ LStrCopyWrapUpLoop:
|
||||
bge LStrCopyWrapUpLoop
|
||||
LStrCopyDone:
|
||||
{ r3 contains new dest here }
|
||||
end ['r3','r4','r8','r0','r3','r10','cr0','ctr'];
|
||||
end ['R3','R4','R8','R0','R3','R10','CR0','CTR'];
|
||||
|
||||
|
||||
function strlcopy(dest,source : pchar;maxlen : longint) : pchar;assembler;
|
||||
@ -159,7 +159,7 @@ LStrlCopyLoop:
|
||||
li r10,0
|
||||
stb r10,1(r0)
|
||||
LStrlCopyDone:
|
||||
end ['r0','r4','r30','cr0'];
|
||||
end ['R0','R4','R10','CR0'];
|
||||
|
||||
|
||||
function strlen(p : pchar) : longint;assembler;
|
||||
@ -181,7 +181,7 @@ LStrEndLoop:
|
||||
cmpli r0,0
|
||||
bne LStrEndLoop
|
||||
LStrEndDone:
|
||||
end ['r0','r3','r4','cr0'];
|
||||
end ['R0','R3','R4','CR0'];
|
||||
|
||||
|
||||
function strcomp(str1,str2 : pchar) : longint;assembler;
|
||||
@ -207,7 +207,7 @@ LStrCompLoop:
|
||||
{ otherwise loop }
|
||||
bne cr1,LStrCompLoop
|
||||
LStrCompDone:
|
||||
end ['r0','r3','r4','r9','r10','cr0','cr1'];
|
||||
end ['R0','R3','R4','R9','R10','CR0','CR1'];
|
||||
|
||||
|
||||
function strlcomp(str1,str2 : pchar;l : longint) : longint;assembler;
|
||||
@ -240,7 +240,7 @@ LStrlCompLoop:
|
||||
{ otherwise loop (if ctr <> 0) }
|
||||
bdnzf cr1*4+eq,LStrlCompLoop
|
||||
LStrlCompDone:
|
||||
end ['r0','r3','r4','r9','r10','cr0','cr1','ctr'];
|
||||
end ['R0','R3','R4','R9','R10','CR0','CR1','CTR'];
|
||||
|
||||
|
||||
function stricomp(str1,str2 : pchar) : longint;assembler;
|
||||
@ -303,7 +303,7 @@ LStriCompEqual:
|
||||
{ otherwise loop }
|
||||
bne cr1,LStriCompLoop
|
||||
LStriCompDone:
|
||||
end ['r3','r4','r26','r27','r28','r29','r30','cr0','cr1'];
|
||||
end ['R3','R4','R26','R27','R28','R29','R30','CR0','CR1'];
|
||||
|
||||
|
||||
function strlicomp(str1,str2 : pchar;l : longint) : longint;assembler;
|
||||
@ -361,7 +361,7 @@ LStriCompEqual:
|
||||
{ otherwise loop (if ctr <> 0) }
|
||||
bdnzf cr1*4+eq,LStriCompLoop
|
||||
LStriCompDone:
|
||||
end ['r0','r3','r4','r5','r7','r8','r9','r10','cr0','cr1','ctr'];
|
||||
end ['R0','R3','R4','R5','R7','R8','R9','R10','CR0','CR1','CTR'];
|
||||
|
||||
|
||||
function strscan(p : pchar;c : char) : pchar;assembler;
|
||||
@ -378,7 +378,7 @@ LStrScanLoop:
|
||||
beq cr1,LStrScanDone
|
||||
bne LStrScanLoop
|
||||
LStrScanDone:
|
||||
end ['r0','r3','r4','cr0','cr1'];
|
||||
end ['R0','R3','R4','CR0','CR1'];
|
||||
|
||||
|
||||
function strrscan(p : pchar;c : char) : pchar;assembler;
|
||||
@ -408,7 +408,7 @@ LStrrScanNotFound:
|
||||
and r10,r10,r0 { r10 = (r0 >= r3) ? 0 : r0 - r3 }
|
||||
add r3,r10,r3 { r3 = (r0 >= r3) ? r3 : r0 }
|
||||
LStrrScanDone:
|
||||
end ['r0','r3','r4','r10','cr0','cr1'];
|
||||
end ['R0','R3','R4','R10','CR0','CR1'];
|
||||
|
||||
|
||||
function strupper(p : pchar) : pchar;assembler;
|
||||
@ -428,7 +428,7 @@ LStrUpperLoop:
|
||||
LStrUpper1:
|
||||
bne cr1,LStrUpperLoop
|
||||
LStrUpperNil:
|
||||
end ['r0','r9','r10','cr0','cr1'];
|
||||
end ['R0','R9','R10','CR0','CR1'];
|
||||
|
||||
|
||||
function strlower(p : pchar) : pchar;assembler;
|
||||
@ -448,12 +448,16 @@ LStrLowerLoop:
|
||||
LStrLower1:
|
||||
bne cr1,LStrLowerLoop
|
||||
LStrLowerNil:
|
||||
end ['r0','r9','r10','cr0','cr1'];
|
||||
end ['R0','R9','R10','CR0','CR1'];
|
||||
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.10 2001-09-28 13:25:04 jonas
|
||||
Revision 1.11 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.10 2001/09/28 13:25:04 jonas
|
||||
* fixed wrong alignment code (sometimes we aligned to multiple of 8
|
||||
instead of the desired multiple of 4)
|
||||
|
||||
|
@ -37,11 +37,15 @@ LStrPCopyLoop:
|
||||
li r10,0
|
||||
LStrPCopyEmpty:
|
||||
stb r10,1(r0)
|
||||
end ['r0','r4','r10','cr0','ctr'];
|
||||
end ['R0','R4','R10','CR0','CTR'];
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.4 2001-09-27 15:30:29 jonas
|
||||
Revision 1.5 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.4 2001/09/27 15:30:29 jonas
|
||||
* conversion to compilerproc and to structure used by i386 rtl
|
||||
* some bugfixes
|
||||
* powerpc.inc is almost complete (only fillchar/word/dword, get_frame etc
|
||||
|
@ -30,11 +30,15 @@ LStrLenLoop:
|
||||
bne LStrLenLoop
|
||||
sub r3,r29,r3
|
||||
LStrLenDone:
|
||||
end ['r3','r4','r29','r30','cr0'];
|
||||
end ['R3','R4','R29','R30','CR0'];
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.1 2001-09-27 15:30:29 jonas
|
||||
Revision 1.2 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.1 2001/09/27 15:30:29 jonas
|
||||
* conversion to compilerproc and to structure used by i386 rtl
|
||||
* some bugfixes
|
||||
* powerpc.inc is almost complete (only fillchar/word/dword, get_frame etc
|
||||
|
@ -46,11 +46,15 @@ LStrPasLoop:
|
||||
|
||||
{ store length }
|
||||
stb r10,0(r3)
|
||||
end ['r0','r3','r4','r10','cr0','ctr'];
|
||||
end ['R0','R3','R4','R10','CR0','CTR'];
|
||||
|
||||
{
|
||||
$Log$
|
||||
Revision 1.2 2001-09-28 13:23:44 jonas
|
||||
Revision 1.3 2002-08-10 17:14:36 jonas
|
||||
* various fixes, mostly changing the names of the modifies registers to
|
||||
upper case since that seems to be required by the compiler
|
||||
|
||||
Revision 1.2 2001/09/28 13:23:44 jonas
|
||||
* small optimization
|
||||
|
||||
Revision 1.1 2001/09/27 15:30:29 jonas
|
||||
|
Loading…
Reference in New Issue
Block a user