[squeak-dev] Re: [Pharo-project] [NativeBoost] new win32 build
Henrik Sperre Johansen
henrik.s.johansen at veloxit.no
Thu Apr 29 22:54:26 UTC 2010
On 29.04.2010 17:13, Igor Stasenko wrote:
> Core packages were broken, and were unable to load w/o errors.
> But now seems everything loads well.
> Use NBInstaller install.
> Thanks to Henrik for help!
Here's a small example, as well as profile:
SmallInteger >> nbFib
<primitive: 'primitiveNativeCall' module: 'NativeBoostPlugin'>
^ NBNativeCodeGen methodAssembly: [:gen |
| loopStart proxy asm EAX EBX ECX |
asm := gen asm.
proxy := NBInterpreterProxy new asm: asm.
loopStart := asm uniqueLabelName: 'loopStart'.
EAX := asm assembler reg0.
EBX := asm assembler reg3.
ECX := asm assembler reg1.
proxy integerValueOf: EAX.
asm mov: EAX to: ECX;
mov: 0 to: EAX;
mov: 1 to: EBX;
add: EAX with: EBX;
xchg: EAX with: EBX;
"next three could be replaced by loopnz and a dec ECX
before loop, but loopnz isn't there yet"
cmp: ECX with: 1;
proxy positive32BitIntegerFor: EBX.
tmp := 1.
res := 0.
0 to: self -1 do: [:ix | |oldRes|
oldRes := res.
res := tmp + res.
tmp := oldRes.].
Neither work for negative integers, and nbFib overflows for 48, haven't
added largeInt creation logic :)
[1 to: 100000 do: [:ix | 47 fib]] timeToRun 361
[1 to: 100000 do: [:ix | 47 nbFib]] timeToRun 21
[1 to: 100000 do: [:ix | ]] timeToRun 2
More information about the Squeak-dev