[squeak-dev] Re: [Pharo-project] [NativeBoost] new win32 build available

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 receiver.
         proxy integerValueOf: EAX.

         asm mov: EAX to: ECX;
                 mov: 0 to: EAX;
                 mov: 1 to: EBX;
                 label: loopStart;
                 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"
                 dec: ECX;
                 cmp: ECX with: 1;
                 jg: loopStart.

         proxy positive32BitIntegerFor: EBX.
         gen epilogue]

SmallInteger >>fib
     |tmp res|
     tmp := 1.
     res := 0.
     0 to: self -1 do: [:ix | |oldRes|
             oldRes := res.
             res := tmp + res.
             tmp := oldRes.].
     ^res

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

Cheers,
Henry






More information about the Squeak-dev mailing list