Really a difference in ASM and C-Backend
Code: Select all
Macro mac_AbsQ1(number)
(number ! (number >> 63) + (number >> 63) &1)
EndMacro
Macro mac_AbsQ2(number)
((number + (number >> 63)) ! (number >> 63))
EndMacro
Procedure AbsQ(number)
If number < 0
ProcedureReturn -number
EndIf
ProcedureReturn number
EndProcedure
Define I, K, N, t1
t1 = ElapsedMilliseconds()
#Start = 100000000000000005
For I = #Start To #Start +32
Debug " "
K = -I
N = mac_AbsQ1(K)
Debug "AbsQ1 = " + N
N = mac_AbsQ2(K)
Debug "AbsQ2 = " + N
N = AbsQ(K)
Debug "AbsQ = " + N
; Abs() is different in ASM and C-Backend
N = Abs(K)
Debug "Abs() = " + N
Next
t1 = ElapsedMilliseconds() - t1
MessageRequester("Time", Str(t1))
here the C Version Output => not correct! With ASM it's correct!
AbsQ1 = 100000000000000005
AbsQ2 = 100000000000000005
AbsQ = 100000000000000005
Abs() = 100000000000000000
AbsQ1 = 100000000000000006
AbsQ2 = 100000000000000006
AbsQ = 100000000000000006
Abs() = 100000000000000000
AbsQ1 = 100000000000000007
AbsQ2 = 100000000000000007
AbsQ = 100000000000000007
Abs() = 100000000000000000
AbsQ1 = 100000000000000008
AbsQ2 = 100000000000000008
AbsQ = 100000000000000008
Abs() = 100000000000000000
AbsQ1 = 100000000000000009
AbsQ2 = 100000000000000009
AbsQ = 100000000000000009
Abs() = 100000000000000016
AbsQ1 = 100000000000000010
AbsQ2 = 100000000000000010
AbsQ = 100000000000000010
Abs() = 100000000000000016
AbsQ1 = 100000000000000011
AbsQ2 = 100000000000000011
AbsQ = 100000000000000011
Abs() = 100000000000000016
AbsQ1 = 100000000000000012
AbsQ2 = 100000000000000012
AbsQ = 100000000000000012
Abs() = 100000000000000016
AbsQ1 = 100000000000000013
AbsQ2 = 100000000000000013
AbsQ = 100000000000000013
Abs() = 100000000000000016
AbsQ1 = 100000000000000014
AbsQ2 = 100000000000000014
AbsQ = 100000000000000014
Abs() = 100000000000000016
AbsQ1 = 100000000000000015
AbsQ2 = 100000000000000015
AbsQ = 100000000000000015
Abs() = 100000000000000016
AbsQ1 = 100000000000000016
AbsQ2 = 100000000000000016
AbsQ = 100000000000000016
Abs() = 100000000000000016
AbsQ1 = 100000000000000017
AbsQ2 = 100000000000000017
AbsQ = 100000000000000017
Abs() = 100000000000000016