yes, i see no reason why i cannot share. Here, enjoy this.
typedef Int32 fNum;
#define abs(a) (((a)>0)?(a):(-a))
#define sign(a) ((a>0)?(1):(-1))
#define MAKE_FNUM_const(val)
(sign(val)*((((Int32)(abs(val)))<<16)|((UInt32)(((abs(val))-(UInt32)(abs(val)))*65536))))
//use the above macro to generate constant fNum values, like so
//
// a=fNum_div(a,MAKE_FNUM_const(5.1));
//
// this divides "a" by 5.1
asm fNum fNum_mul(fNum a,fNum b){ //return a*b
SMULL R2,R3,R1,R0
MOV R0,R2,LSR #16
ORR R0,R0,R3,LSL #16
BX LR
}
asm fNum fNum_div(fNum num,fNum denom){ //return num/denom
CMP R1,#0 //no division by zero please!
MVNEQ R0,#0 //if so, return max possible number
BXEQ LR //and bail out
STMFD SP!,{R4-R8,LR}
MOV R7,#0
ANDS R12,R0,#0x80000000
EORNE R7,R7,#1
RSBNE R0,R0,#0
ANDS R12,R1,#0x80000000
EORNE R7,R7,#1
RSBNE R1,R1,#0
//now just unsigned division of R0 by R1
//divide R3,R2 by r1
MOV R3,R0,LSR #15
MOV R2,R0,LSL #17
MOV R0,#0
MOV R8,#32
loop:
CMP R3,R1
ORRCS R0,R0,#0x80000000
SUBCS R3,R3,R1
MOV R0,R0,ROR #31
MOV R3,R3,LSL #1
ORR R3,R3,R2,LSR #31
MOV R2,R2,LSL #1
SUBS R8,R8,#1
BNE loop
//MOV R0,R0,ROR #31
CMP R7,#0
RSBNE R0,R0,#0
LDMFD SP!,{R4-R8,PC}
}
asm Int16 fNum_toInt16(fNum a){ //return integer part of a
MOV R0,R0,LSR #16
BX LR
}
asm fNum fNum_fromInt16(Int16 a){ //return integer part of a
MOV R0,R0,LSL #16
BX LR
}
asm char* fNum_toString(char* s, fNum a){
STMFD SP!,{R4-R6,LR}
ANDS R12,R1,#0x80000000
MOVNE R12,#'-'
STRNEB R12,[R0],#1
RSBNE R1,R1,#0
MOV R4,R0 //new char*
MOV R5,R1 //new fNum
MOV R1,R1,LSR #16
LDR R6,[R9,#-8]
MOV LR,PC
LDR PC,[R6,#0x790]
MOV LR,PC
LDR PC,[R6,#0x798]
ADD R0,R4,R0
MOV R12,#'.'
STRB R12,[R0],#1
BIC R5,R5,#0xFF000000
BIC R5,R5,#0x00FF0000
MOV R12,#0x2700 //10000=0x2710
ORR R12,R12,#0x10
MUL R1,R12,R5
MOV R1,R1,LSR #16
MOV LR,PC
LDR PC,[R6,#0x790]
LDMFD SP!,{R4-R6,PC}
}
--
Best Regards, Dmitry Grinberg
Software Engineer, http://PalmPowerups.com
(847) 226 9295
AIM: hacker19180
MSN: [EMAIL PROTECTED]
ICQ: 165589894
Y! IM: dmitrygr2003
--
For information on using the PalmSource Developer Forums, or to unsubscribe,
please see http://www.palmos.com/dev/support/forums/