]> git.sur5r.net Git - cc65/blob - libsrc/runtime/ldiv.s
cbbf78aa7a1714c243ecd125ec6b960c17f5c711
[cc65] / libsrc / runtime / ldiv.s
1 ;
2 ; Ullrich von Bassewitz, 17.08.1998
3 ;
4 ; CC65 runtime: division for signed long ints
5 ;
6
7 ; When negating values, we will ignore the possibility here, that one of the
8 ; values if $80000000, in which case the negate will fail.
9
10         .export         tosdiveax
11         .import         poplsargs, udiv32, negeax
12         .importzp       ptr1, tmp1, tmp2
13
14 tosdiveax:
15         jsr     poplsargs       ; Get arguments from stack, adjust sign
16         jsr     udiv32          ; Do the division, result is in (ptr1:sreg)
17         ldx     ptr1+1          ; Load byte 1 of result
18
19 ; Adjust the sign of the result
20
21         lda     tmp1            ; Get sign of left operand
22         eor     tmp2            ; Calculate sign of result
23         bpl     Pos             ; Jump if result positive
24
25 ; Result is negative
26
27         lda     ptr1            ; Load byte 0
28         jmp     negeax          ; Negate value
29
30 ; Result is positive
31
32 Pos:    lda     ptr1
33         rts
34
35