Просмотр исходного кода

* fixed wrong references (used r0 as base register)

Jonas Maebe 23 лет назад
Родитель
Сommit
128c4a9a4b
2 измененных файлов с 39 добавлено и 33 удалено
  1. 27 24
      rtl/powerpc/strings.inc
  2. 12 9
      rtl/powerpc/stringss.inc

+ 27 - 24
rtl/powerpc/strings.inc

@@ -147,17 +147,17 @@ asm
         dcbt    0,r4
         mtctr   r5
         subi    r4,r4,1
-        subi    r0,r3,1
+        subi    r10,r3,1
 LStrlCopyLoop:
-        lbzu    r10,1(r4)
-        cmpli   r10,0
-        stbu    r10,1(r0)
+        lbzu    r0,1(r4)
+        cmpli   r0,0
+        stbu    r0,1(r10)
         bdnzf   cr0*4+eq, LStrlCopyLoop
         { if we stopped because we copied a #0, we're done }
         beq     LStrlCopyDone
         { otherwise add the #0 }
-        li      r10,0
-        stb     r10,1(r0)
+        li      r0,0
+        stb     r0,1(r10)
 LStrlCopyDone:
 end ['R0','R4','R10','CR0'];
 
@@ -190,16 +190,16 @@ function strcomp(str1,str2 : pchar) : longint;assembler;
 {      in r3                                                                }
 asm
         { use r0 instead of r3 for str1 since r3 contains result }
-        subi    r0,r3,1
+        subi    r9,r3,1
         subi    r4,r4,1
 LStrCompLoop:
         { load next chars }
-        lbzu    r9,1(r0)
+        lbzu    r0,1(r9)
         { check if one is zero }
-        cmpli   cr1,r9,0
+        cmpli   cr1,r0,0
         lbzu    r10,1(r4)
         { calculate difference }
-        sub.    r3,r9,r10
+        sub.    r3,r0,r10
         { if chars not equal, we're ready }
         bne     LStrCompDone
         { if they are equal and one is zero, then the other one is zero too }
@@ -220,19 +220,19 @@ asm
         dcbt    0,r3
         { use r0 instead of r3 for str1 since r3 contains result }
         cmpl    r5,0
-        subi    r0,r3,1
+        subi    r9,r3,1
         li      r3,0
         beq     LStrlCompDone
         mtctr   r5
         subi    r4,r4,1
 LStrlCompLoop:
         { load next chars }
-        lbzu    r9,1(r0)
+        lbzu    r0,1(r9)
         { check if one is zero }
-        cmpli   cr1,r9,0
+        cmpli   cr1,r0,0
         lbzu    r10,1(r4)
         { calculate difference }
-        sub.    r3,r9,r10
+        sub.    r3,r0,r10
         { if chars not equal, we're ready }
         bne     LStrlCompDone
         { if they are equal and one is zero, then the other one is zero too }
@@ -315,32 +315,32 @@ asm
         dcbt    0,r3
         { use r0 instead of r3 for str1 since r3 contains result }
         cmpl    r5,0
-        subi    r0,r3,1
+        subi    r9,r3,1
         li      r3,0
         beq-    LStrlCompDone
         mtctr   r5
         subi    r4,r4,1
 LStriCompLoop:
         { load next chars }
-        lbzu    r9,1(r0)
+        lbzu    r0,1(r9)
         { check if one is zero }
-        cmpli   cr1,r9,0
+        cmpli   cr1,r0,0
         lbzu    r10,1(r4)
         { calculate difference }
-        sub.    r3,r9,r10
+        sub.    r3,r0,r10
         { if chars are equal, no further test is necessary }
-        beq+    LStriCompEqual
+        beq     LStriCompEqual
 
         { see stricomp for explanation }
         li       r8,0
         li       r5,0
 
-        subic    r3,r9,'A'
+        subic    r3,r0,'A'
         addme    r8,r8
         subic    r3,r10,'A'
         addme    r5,r5
 
-        subfic   r3,r9,'Z'
+        subfic   r3,r0,'Z'
         andi     r8,r8,0x020
         subfe    r7,r7,r7
         subfic   r3,r10,'Z'
@@ -349,11 +349,11 @@ LStriCompLoop:
 
         and      r8,r8,r7
         and      r5,r5,r24
-        add      r9,r9,r8
+        add      r0,r0,r8
         add      r10,r10,r5
 
         { compare again }
-        sub.     r3,r9,r10
+        sub.     r3,r0,r10
         bne      LStrCompDone
 LStriCompEqual:
         { if they are equal and one is zero, then the other one is zero too }
@@ -453,7 +453,10 @@ end ['R0','R9','R10','CR0','CR1'];
 
 {
   $Log$
-  Revision 1.11  2002-08-10 17:14:36  jonas
+  Revision 1.12  2002-09-06 16:58:43  jonas
+    * fixed wrong references (used r0 as base register)
+
+  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
 

+ 12 - 9
rtl/powerpc/stringss.inc

@@ -22,26 +22,29 @@ function strpas(p : pchar) : string; assembler;
 function strpcopy(d : pchar;const s : string) : pchar;assembler;
 asm
         { get length  }
-        lbz     r10,0(r4)
+        lbz     r0,0(r4)
         { put in counter }
-        cmpli   r10,0
-        mtctr   r10
-        subi    r0,r3,1
+        cmpli   r0,0
+        mtctr   r0
+        subi    r10,r3,1
         beq     LStrPCopyEmpty
 LStrPCopyLoop:
         { copy everything }
-        lbzu    r10,1(r4)
-        stbu    r10,1(r0)
+        lbzu    r0,1(r4)
+        stbu    r0,1(r10)
         bdnz    LStrPCopyLoop
         { add terminating #0 }
-        li      r10,0
+        li      r0,0
 LStrPCopyEmpty:
-        stb     r10,1(r0)
+        stb     r0,1(r10)
 end ['R0','R4','R10','CR0','CTR'];
 
 {
   $Log$
-  Revision 1.5  2002-08-10 17:14:36  jonas
+  Revision 1.6  2002-09-06 16:58:43  jonas
+    * fixed wrong references (used r0 as base register)
+
+  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