ppc asm to pass vm pointer: overflow fns

db4
Phil Dawes 2009-09-30 07:59:36 +01:00
parent 6fa0a93498
commit a73e6f20d4
1 changed files with 12 additions and 9 deletions

View File

@ -4,40 +4,43 @@ in the public domain. */
#define DS_REG r13 #define DS_REG r13
DEF(void,primitive_fixnum_add,(void)): DEF(void,primitive_fixnum_add,(void *vm)):
mr r5,r3 /* save vm ptr for overflow */
lwz r3,0(DS_REG) lwz r3,0(DS_REG)
lwz r4,-4(DS_REG) lwz r4,-4(DS_REG)
subi DS_REG,DS_REG,4 subi DS_REG,DS_REG,4
li r0,0 li r0,0
mtxer r0 mtxer r0
addo. r5,r3,r4 addo. r6,r3,r4
bso add_overflow bso add_overflow
stw r5,0(DS_REG) stw r6,0(DS_REG)
blr blr
add_overflow: add_overflow:
b MANGLE(overflow_fixnum_add) b MANGLE(overflow_fixnum_add)
DEF(void,primitive_fixnum_subtract,(void)): DEF(void,primitive_fixnum_subtract,(void *vm)):
mr r5,r3 /* save vm ptr for overflow */
lwz r3,-4(DS_REG) lwz r3,-4(DS_REG)
lwz r4,0(DS_REG) lwz r4,0(DS_REG)
subi DS_REG,DS_REG,4 subi DS_REG,DS_REG,4
li r0,0 li r0,0
mtxer r0 mtxer r0
subfo. r5,r4,r3 subfo. r6,r4,r3
bso sub_overflow bso sub_overflow
stw r5,0(DS_REG) stw r6,0(DS_REG)
blr blr
sub_overflow: sub_overflow:
b MANGLE(overflow_fixnum_subtract) b MANGLE(overflow_fixnum_subtract)
DEF(void,primitive_fixnum_multiply,(void)): DEF(void,primitive_fixnum_multiply,(void *vm)):
mr r5,r3 /* save vm ptr for overflow */
lwz r3,0(DS_REG) lwz r3,0(DS_REG)
lwz r4,-4(DS_REG) lwz r4,-4(DS_REG)
subi DS_REG,DS_REG,4 subi DS_REG,DS_REG,4
srawi r3,r3,3 srawi r3,r3,3
mullwo. r5,r3,r4 mullwo. r6,r3,r4
bso multiply_overflow bso multiply_overflow
stw r5,0(DS_REG) stw r6,0(DS_REG)
blr blr
multiply_overflow: multiply_overflow:
srawi r4,r4,3 srawi r4,r4,3