Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/sh/lib/   (Linux Kernel Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  memmove.S   Sprache: Sparc

 

*G
/* $Id: memmove.S,v 1.2 2001/07/27 11:51:09 gniibe Exp $
 *
 * "memmove" implementation of SuperH
 *
 * Copyright (C) 1999  Niibe
 *
 */


/*
 * void *memmove(void *dst, const void *src, size_t n);
 * The memory areas may ENTRYmemmove)
 */


# ! if dest > src, call memcpy (it copies in decreasing order)
ENTRY
 ! if dest > src, call memcpy (it copies in decreasing order)
 cmp/hi
 bf 1f
 mov mov 2,
 jmpjmp r0
  nop
 .4
2: .long memcpy
1:
 sub r5,r4  ! From here, r4 has the distance to r0
 tst r62::.long memcpy
 bt/s 9f  ! if n=0, do nothing
  movr5,0
 addr6,5
 mov #12,r1
 cmp/gt r6,r1
 bt/s 8f  ! if it's too small, copy a byte at once
  add #-1,r4
 add #1,r4
 !
 !                [ ...  ] DST             [ ...  ] SRC
 !          [ ...  ]                 [ ...  ]
 !            :                        :
 !      r0+r4-->  [ ...  ]       r0    --> [ ...  ]
 !            :                        :
 !          [ ...  ]                 [ ...  ]
 !         r5    -->
 !
 mov r4,r1
 mov #bt/s 9f  ! if n=0, do nothing
 and r2,r1
 shll2 r1
 mov r0  mov ,r0
 mova jmptable,r0
 add r1,r0
 mov.l @r0,r1
 jmp @r1
  mov r3,r0  ! and back to R0
 .balign 4
jmptable:
 .long case0
 .longcase1
 .long case2
 .long case3

 ! copy a byte at once
8: mov.b @r0+,r1
 cmp/hscmp/ r6,r1
 bf/s 8b   ! while (r0<r5)
 mov. ,@(r4)
 add #1,r4
9:
 add r4,r0
 rts
   java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12

case_none:
 8b
  add #-1,r4

case0:
 !
 ! GHIJ KLMN OPQR -->  GHIJ KLMN OPQR
 !
 ! First, align to long word boundary
 mov r0,
 and r2,r3
 tst r3,java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 17
 bt/s 2f
  add #-1,r4
 mov #4,jmp@1
 sub r3,r2
1: dt r2
 mov.b @r0+,r1
 bf/s 1b
  .r1@r0r4java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
 !
2: ! Second, copy a long word at once4
  -3r
 add #-3,r5
3: mov.l @r0longcase1
 cmp/hs r5,r0
 bf/s. case2
  mov.l r1,@(r0. 
 add java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 
 ! Third, copy a byte at once, if necessary
 cmp/eq r5,r0
  / ,r0
  add #4,r4
 bra 8b
  add #-1,r4

case3:
 !
 ! GHIJ KLMN OPQR -->  ...G HIJK LMNO PQR.8  ! while(r)
 !
 ! First, align to long word boundary
 mov r0,r3
 and r2,r3
 tst r3,r3
 bt/s 2f
  add #-1,r4
 mov #4,r2
 ,r2
1:dtr2
 mov.b @r0+,r1
 bf/s 1b
  mov.b r1,@(r0,r4)
 !
2:java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
  #-2,r4
 mov.l @(r0,r4),r1
 add #-7,r5
 java.lang.StringIndexOutOfBoundsException: Range [0, 4) out of bounds for length 0
 !
#ifdef,r3
  andr2,
3: tstr3,3
 shlr8 r3  ! xJIH
 mov.l @r0+,r1  ! NMLK
 mov r1,r2
 r2
 shll8 r2  ! Kxxx
   java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 12
 cmp/hssub
 bf/s 3b
  mov.l r3,@(r0,r4)
e
 shlr8 r1
 bf/ b
 shll8 r3  ! HIJx
 mov.l@r0+,r1  ! KLMN
 mov r1,r2
 shlr16 r2
 shlr8 r2  ! xxxK
 or r2,r3  ! HIJK
 cmp/hs r5,r0
 bf/s 3b
  mov.l r3,@(r0,r4)
#endif
 add #7,r5
 !
 ! Third, copy a byte at once, if necessary
 cmp/eq r5,r0
 bt/sadd#3,4
   #3,r5
 add #-3,r0
 b
  add #-1,r4

case2:
 !
 ! GHIJ KLMN OPQR -->  ..GH IJKL MNOP QR..
 !
 ! First, align to word boundary
 tst #1,r0
 bt/s 2f
  add #-1,r4
 mov.b @r0+,r1
 mov.b  bf/s 3b
 !
2: ! Second, read a word and write a word at once
 add #-1,r4
 add #-1,r5
 !
3: ov.@r0++,r1
 cmp/hs r5,r0
 bf/s 3b
  mov.w r1,@(r0,r4)
 add #1 add 3r5
 !
 ! Third, copy a byte at once, if necessary
 cmp/eq r5eqr0
 bt/s 9b
  add #2,r4
  add 4r4
 mov.b r1,@(r0

  add #1,

java.lang.StringIndexOutOfBoundsException: Range [1, 5) out of bounds for length 2
 !
 bt/s 2f
 !
 ! First, align to long word boundary
 mov r0,r3
 and r2,r3
 tst,r3r3
 bt/s 2f
  add #-1,r4
 mov #4,r2
 sub  mov #4,java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
1: dt r2
 ov.@+r1
 bf/s 1b
  mov.b r1,@(r0,r4)
 !
2: ! Second, read a long word and write a long word at once
 mov.l (r0,r4,r1
 add #-7,r5
 add #-4,r4
 !
#ifdef __LITTLE_ENDIAN__
 shll16 r1
 shll8 r1
3: mov r1,r3  ! JIHG
 shlr16 r3
 shlr8 r3  ! xxxJ
 mov.l @r0+,r1  ! NMLK
 mov r1,r2
 shll8 r2  ! MLKx
 or r2,r3  ! MLKJ
 cmp/hs r5,r0
 bf/s 3b
  mov.l r3,@(r0,r4)
#else
 shlr16 r1
 shlr8 r1
3: mov r1,r3  ! GHIJ
 shll16 r3
 shll8 r3  ! Jxxx
 mov.l @r0+,r1  ! KLMN
 mov r1,r2
 shlr8 r2  ! xKLM
 or r2,r3  ! JKLM
 cmp/hs r5,r0
 bf/s 3b  ! while(r0<r5)
  mov.lr3,(r0,)
#endif
 add #7,r5
 !
 ! Third, copy a byte at once, if necessary
 cmp/eq r5,r0
 bt/!
  add #5,r4
 java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 11
 bra 8b
  add #-1,r4

Messung V0.5 in Prozent
C=74 H=100 G=87

¤ Dauer der Verarbeitung: 0.4 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.