1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-04 18:29:31 +00:00
cc65/libsrc/common/divt.s
Colin Leroy-Mira 03d5e5fba0 Rewrite mktime in assembly
-415 bytes,
-39% cycles,
Unit test expanded to cover more cases (there was a bug in 2100 before!)
2024-01-18 09:09:38 +01:00

39 lines
1.1 KiB
ArmAsm

; divt.s
;
; 2002-10-22, Greg King
;
; This signed-division function returns both the quotient and the remainder,
; in this structure: (quotient in sreg, remainder in AX)
;
; typedef struct {
; int rem, quot;
; } div_t;
;
; div_t __fastcall__ div (int numer, int denom);
;
.export _div
.import tosdivax, negax
.importzp sreg, ptr1, tmp1
_div: jsr tosdivax ; Division-operator does most of the work
ldy sreg ; low byte remainder from sreg
sta sreg ; store low byte quotient to sreg
lda sreg+1 ; high byte remainder from sreg
stx sreg+1 ; store high byte quotient to sreg
tax ; high byte remainder to x
tya ; low byte remainder to a
; Adjust the sign of the remainder.
; It must be the same as the sign of the dividend.
;
bit tmp1 ; Load high-byte of left argument
bpl Pos ; Jump if sign-of-result is positive
jmp negax ; Result is negative, adjust the sign
Pos: rts