mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.6 KiB
61 lines
1.6 KiB
.globl ..__i64div
|
|
|
|
// signed 64 bit divide
|
|
// divide r4:r3 by r6:r5 leaving quotient in r4:r3
|
|
|
|
.pdata
|
|
.align 2
|
|
.ualong ..__i64div,__i64div.e,0,0,__i64div.b
|
|
|
|
.text
|
|
.align 2
|
|
..__i64div:
|
|
.function ..__i64div
|
|
|
|
// no prologue
|
|
|
|
__i64div.b:
|
|
stw r30,-8(sp)
|
|
srawi r7,r4,31 // r7 = -sign bit(r3)
|
|
srawi r8,r6,31 // r8 = -sign bit(r5)
|
|
xor r3,r3,r7 // xor with r7 and subtract to abs
|
|
xor r4,r4,r7
|
|
stw r31,-4(sp)
|
|
subfc r3,r7,r3
|
|
xor r5,r5,r8 // xor with r8 and subtract to abs
|
|
mflr r31
|
|
subfe r4,r7,r4
|
|
xor r6,r6,r8
|
|
subfc r5,r8,r5
|
|
xor r30,r7,r8 // r30 = -sign bit(result)
|
|
subfe r6,r8,r6
|
|
bl ..__u64div
|
|
mtlr r31
|
|
xor r3,r3,r30 // xor with r30 and sub. to set sign
|
|
xor r4,r4,r30
|
|
subfc r3,r30,r3
|
|
lwz r31,-4(sp)
|
|
subfe r4,r30,r4
|
|
lwz r30,-8(sp)
|
|
blr
|
|
__i64div.e:
|
|
|
|
// External Functions ...
|
|
.extern ..__u64div
|
|
|
|
|
|
.debug$S
|
|
.ualong 1
|
|
|
|
.uashort 17
|
|
.uashort 0x9 # S_OBJNAME
|
|
.ualong 0
|
|
.byte 10, "i64div.obj"
|
|
|
|
.uashort 24
|
|
.uashort 0x1 # S_COMPILE
|
|
.byte 0x42 # Target processor = PPC 604
|
|
.byte 3 # Language = ASM
|
|
.byte 0
|
|
.byte 0
|
|
.byte 17, "PowerPC Assembler"
|