source: trunk/libs/newlib/src/newlib/libc/machine/rx/memmove.S @ 444

Last change on this file since 444 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 1.1 KB
Line 
1        .file   "memmove.S"
2
3        .section .text
4        .global  _memmove
5        .type    _memmove,@function
6_memmove:
7        ;; R1: DEST
8        ;; R2: SRC
9        ;; R3: COUNT
10#ifdef __RX_DISALLOW_STRING_INSNS__
11        /* Do not use the string instructions - they might prefetch
12           bytes from outside of valid memory.  This is particularly
13           dangerous in I/O space.  */
14
15        cmp      #0, r3         ; If the count is zero, do nothing
16        beq      4f
17       
18        cmp      r1, r2
19        blt      3f             ; If SRC < DEST copy backwards
20
21        mov      r1, r14        ; Save a copy of DEST
22
235:      mov.b    [r2+], r5
24        mov.b    r5, [r14+]
25        sub      #1, r3
26        bne      5b
27       
284:      rts
29
303:      add      r3, r1
31        add      r3, r2
32
336:      mov.b    [-r2], r5
34        mov.b    r5, [-r1]
35        sub      #1, r3
36        bne      6b
37
38        rts
39#else   
40        mov     r1, r4          ; Save a copy of DEST
41        cmp     r1, r2
42        blt     2f              ; If SRC (r2) is less than DEST (r1) then copy backwards
43        smovf
441:     
45        mov     r4, r1          ; Return DEST
46        rts
472:
48        add     r3, r1          ; The SMOVB instructions requires the DEST in r1 and the
49        add     r3, r2          ; SRC in r2 but it needs them to point the last bytes of
50        sub     #1, r2          ; the regions involved not the first bytes, hence these
51        sub     #1, r1          ; additions and subtractions.
52        smovb
53        bra     1b
54
55#endif /* SMOVF allowed.  */
56
57        .size _memmove, . - _memmove
Note: See TracBrowser for help on using the repository browser.