]> git.sur5r.net Git - cc65/blob - libsrc/common/_swap.s
use mul40 routine instead of doing the multiplication myself
[cc65] / libsrc / common / _swap.s
1 ;
2 ; Ullrich von Bassewitz, 09.12.1998
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: sta     ptr3            ; Save size
13         stx     ptr3+1
14
15         jsr     popax           ; Get q
16         sta     ptr2
17         stx     ptr2+1
18
19         jsr     popax           ; Get p
20         sta     ptr1
21         stx     ptr1+1
22
23 ; Prepare for swap
24
25         ldy     #$00
26
27 ; Swap 256 byte blocks
28
29         ldx     ptr3+1
30         beq     @L2
31
32 @L1:    lda     (ptr1),y
33         tax
34         lda     (ptr2),y
35         sta     (ptr1),y
36         txa
37         sta     (ptr2),y
38         iny
39         bne     @L1
40         dec     ptr3+1
41         bne     @L1
42
43 ; Swap remaining bytes (Y is zero)
44
45 @L2:    ldx     ptr3
46         beq     @L9
47
48 @L3:    lda     (ptr1),y
49         tax
50         lda     (ptr2),y
51         sta     (ptr1),y
52         txa
53         sta     (ptr2),y
54         iny
55         dec     ptr3
56         bne     @L3
57
58 ; Done
59
60 @L9:    rts
61
62