浏览代码

* fixed wrong references (used r0 as base register)

Jonas Maebe 23 年之前
父节点
当前提交
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
         dcbt    0,r4
         mtctr   r5
         mtctr   r5
         subi    r4,r4,1
         subi    r4,r4,1
-        subi    r0,r3,1
+        subi    r10,r3,1
 LStrlCopyLoop:
 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
         bdnzf   cr0*4+eq, LStrlCopyLoop
         { if we stopped because we copied a #0, we're done }
         { if we stopped because we copied a #0, we're done }
         beq     LStrlCopyDone
         beq     LStrlCopyDone
         { otherwise add the #0 }
         { otherwise add the #0 }
-        li      r10,0
-        stb     r10,1(r0)
+        li      r0,0
+        stb     r0,1(r10)
 LStrlCopyDone:
 LStrlCopyDone:
 end ['R0','R4','R10','CR0'];
 end ['R0','R4','R10','CR0'];
 
 
@@ -190,16 +190,16 @@ function strcomp(str1,str2 : pchar) : longint;assembler;
 {      in r3                                                                }
 {      in r3                                                                }
 asm
 asm
         { use r0 instead of r3 for str1 since r3 contains result }
         { use r0 instead of r3 for str1 since r3 contains result }
-        subi    r0,r3,1
+        subi    r9,r3,1
         subi    r4,r4,1
         subi    r4,r4,1
 LStrCompLoop:
 LStrCompLoop:
         { load next chars }
         { load next chars }
-        lbzu    r9,1(r0)
+        lbzu    r0,1(r9)
         { check if one is zero }
         { check if one is zero }
-        cmpli   cr1,r9,0
+        cmpli   cr1,r0,0
         lbzu    r10,1(r4)
         lbzu    r10,1(r4)
         { calculate difference }
         { calculate difference }
-        sub.    r3,r9,r10
+        sub.    r3,r0,r10
         { if chars not equal, we're ready }
         { if chars not equal, we're ready }
         bne     LStrCompDone
         bne     LStrCompDone
         { if they are equal and one is zero, then the other one is zero too }
         { if they are equal and one is zero, then the other one is zero too }
@@ -220,19 +220,19 @@ asm
         dcbt    0,r3
         dcbt    0,r3
         { use r0 instead of r3 for str1 since r3 contains result }
         { use r0 instead of r3 for str1 since r3 contains result }
         cmpl    r5,0
         cmpl    r5,0
-        subi    r0,r3,1
+        subi    r9,r3,1
         li      r3,0
         li      r3,0
         beq     LStrlCompDone
         beq     LStrlCompDone
         mtctr   r5
         mtctr   r5
         subi    r4,r4,1
         subi    r4,r4,1
 LStrlCompLoop:
 LStrlCompLoop:
         { load next chars }
         { load next chars }
-        lbzu    r9,1(r0)
+        lbzu    r0,1(r9)
         { check if one is zero }
         { check if one is zero }
-        cmpli   cr1,r9,0
+        cmpli   cr1,r0,0
         lbzu    r10,1(r4)
         lbzu    r10,1(r4)
         { calculate difference }
         { calculate difference }
-        sub.    r3,r9,r10
+        sub.    r3,r0,r10
         { if chars not equal, we're ready }
         { if chars not equal, we're ready }
         bne     LStrlCompDone
         bne     LStrlCompDone
         { if they are equal and one is zero, then the other one is zero too }
         { if they are equal and one is zero, then the other one is zero too }
@@ -315,32 +315,32 @@ asm
         dcbt    0,r3
         dcbt    0,r3
         { use r0 instead of r3 for str1 since r3 contains result }
         { use r0 instead of r3 for str1 since r3 contains result }
         cmpl    r5,0
         cmpl    r5,0
-        subi    r0,r3,1
+        subi    r9,r3,1
         li      r3,0
         li      r3,0
         beq-    LStrlCompDone
         beq-    LStrlCompDone
         mtctr   r5
         mtctr   r5
         subi    r4,r4,1
         subi    r4,r4,1
 LStriCompLoop:
 LStriCompLoop:
         { load next chars }
         { load next chars }
-        lbzu    r9,1(r0)
+        lbzu    r0,1(r9)
         { check if one is zero }
         { check if one is zero }
-        cmpli   cr1,r9,0
+        cmpli   cr1,r0,0
         lbzu    r10,1(r4)
         lbzu    r10,1(r4)
         { calculate difference }
         { calculate difference }
-        sub.    r3,r9,r10
+        sub.    r3,r0,r10
         { if chars are equal, no further test is necessary }
         { if chars are equal, no further test is necessary }
-        beq+    LStriCompEqual
+        beq     LStriCompEqual
 
 
         { see stricomp for explanation }
         { see stricomp for explanation }
         li       r8,0
         li       r8,0
         li       r5,0
         li       r5,0
 
 
-        subic    r3,r9,'A'
+        subic    r3,r0,'A'
         addme    r8,r8
         addme    r8,r8
         subic    r3,r10,'A'
         subic    r3,r10,'A'
         addme    r5,r5
         addme    r5,r5
 
 
-        subfic   r3,r9,'Z'
+        subfic   r3,r0,'Z'
         andi     r8,r8,0x020
         andi     r8,r8,0x020
         subfe    r7,r7,r7
         subfe    r7,r7,r7
         subfic   r3,r10,'Z'
         subfic   r3,r10,'Z'
@@ -349,11 +349,11 @@ LStriCompLoop:
 
 
         and      r8,r8,r7
         and      r8,r8,r7
         and      r5,r5,r24
         and      r5,r5,r24
-        add      r9,r9,r8
+        add      r0,r0,r8
         add      r10,r10,r5
         add      r10,r10,r5
 
 
         { compare again }
         { compare again }
-        sub.     r3,r9,r10
+        sub.     r3,r0,r10
         bne      LStrCompDone
         bne      LStrCompDone
 LStriCompEqual:
 LStriCompEqual:
         { if they are equal and one is zero, then the other one is zero too }
         { 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$
   $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
     * various fixes, mostly changing the names of the modifies registers to
       upper case since that seems to be required by the compiler
       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;
 function strpcopy(d : pchar;const s : string) : pchar;assembler;
 asm
 asm
         { get length  }
         { get length  }
-        lbz     r10,0(r4)
+        lbz     r0,0(r4)
         { put in counter }
         { put in counter }
-        cmpli   r10,0
-        mtctr   r10
-        subi    r0,r3,1
+        cmpli   r0,0
+        mtctr   r0
+        subi    r10,r3,1
         beq     LStrPCopyEmpty
         beq     LStrPCopyEmpty
 LStrPCopyLoop:
 LStrPCopyLoop:
         { copy everything }
         { copy everything }
-        lbzu    r10,1(r4)
-        stbu    r10,1(r0)
+        lbzu    r0,1(r4)
+        stbu    r0,1(r10)
         bdnz    LStrPCopyLoop
         bdnz    LStrPCopyLoop
         { add terminating #0 }
         { add terminating #0 }
-        li      r10,0
+        li      r0,0
 LStrPCopyEmpty:
 LStrPCopyEmpty:
-        stb     r10,1(r0)
+        stb     r0,1(r10)
 end ['R0','R4','R10','CR0','CTR'];
 end ['R0','R4','R10','CR0','CTR'];
 
 
 {
 {
   $Log$
   $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
     * various fixes, mostly changing the names of the modifies registers to
       upper case since that seems to be required by the compiler
       upper case since that seems to be required by the compiler