]> git.sur5r.net Git - cc65/blob - libsrc/common/_swap.s
Merge pull request #14 from groessler/something_to_pull
[cc65] / libsrc / common / _swap.s
1 ;
2 ; Ullrich von Bassewitz, 1998-12-09, 2004-11-30
3 ;
4 ; void __fastcall__ _swap (void* p, void* q, size_t size);
5 ;
6
7         .export         __swap
8         .import         popax
9         .importzp       ptr1, ptr2, ptr3
10
11
12 __swap: eor     #$FF
13         sta     ptr3
14         txa
15         eor     #$FF
16         sta     ptr3+1          ; Save -(size+1) into ptr3
17
18         jsr     popax           ; Get q
19         sta     ptr2
20         stx     ptr2+1
21
22         jsr     popax           ; Get p
23         sta     ptr1
24         stx     ptr1+1
25
26 ; Prepare for swap
27
28         ldy     #$00
29
30 ; Swap loop
31
32 @L1:    inc     ptr3            ; Bump counter low byte
33         beq     @L3             ; Branch on overflow
34
35 @L2:    lda     (ptr1),y
36         tax
37         lda     (ptr2),y
38         sta     (ptr1),y
39         txa
40         sta     (ptr2),y
41         iny
42         bne     @L1
43         inc     ptr1+1
44         inc     ptr2+1
45         bne     @L1             ; Branch always (hopefully)
46
47 ; Bump the high counter byte
48
49 @L3:    inc     ptr3+1
50         bne     @L2
51
52 ; Done
53
54         rts
55