Hi Levente,
I hope you are having a great day! Are you in Budapest? That must be awesome! A very old city.
I thought I would post the Squeak code for this instantiatePoly
primitive. My image still blows up on startUp:. I am grateful you
have guided me through this!
primitiveInitializePolyFieldSizeCoefficients
<export: true>
<var: 'coefficients' type: 'unsigned char*' >
| coefficients count coefficientsOop fieldSize result |
interpreterProxy methodArgumentCount = 2
ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadNumArgs ].
fieldSize := interpreterProxy stackIntegerValue: 1.
coefficientsOop := interpreterProxy stackObjectValue: 0.
(interpreterProxy isIntegerValue: fieldSize)
ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ].
(interpreterProxy isBytes: coefficientsOop)
ifFalse: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ].
count := interpreterProxy stSizeOf: coefficientsOop.
coefficients := interpreterProxy firstIndexableField: coefficientsOop.
(count = 0)
ifTrue: [ ^interpreterProxy primitiveFailFor: PrimErrBadArgument ].
result := self
initializePolyFieldSize: fieldSize
coefficients: coefficients
coefficientsCount: count.
^ interpreterProxy failed
ifTrue: [interpreterProxy primitiveFail]
ifFalse: [interpreterProxy methodReturnValue: result].
Which is calling:
initializePolyFieldSize: fieldSize coefficients: coefficients coefficientsCount: coefficientsCount
<var: 'coefficients' type: #'unsigned char*'>
| coefficientsLength firstNonZero mutableCoefficients |
mutableCoefficients := coefficients.
coefficientsLength := coefficientsCount.
((coefficientsLength > 1) & ((coefficients at: 1) = 0))
ifTrue: [
firstNonZero := 2.
[(firstNonZero <= coefficientsLength) and: [(mutableCoefficients at: firstNonZero) = 0]]
whileTrue: [firstNonZero := firstNonZero + 1].
(firstNonZero > coefficientsLength)
ifTrue: [
mutableCoefficients := interpreterProxy
instantiateClass: interpreterProxy classByteArray
indexableSize: 1]
ifFalse: [
mutableCoefficients := interpreterProxy
instantiateClass: interpreterProxy classByteArray
indexableSize: (coefficientsLength - firstNonZero + 1).
0 to: (coefficientsLength - 1)
do: [:index |
coefficients at: index put: (mutableCoefficients at: index)]]].
^ mutableCoefficients.
I am getting this warning when cross compiling the Squeak plugin to C code.
warning, signature of InterpreterProxy>>instantiateClass:indexableSize: does not match reference implementation.
---
Kindly,
Robert
On 6/4/21 1:21 PM, Robert Withers wrote:
Nope, this wasn't it.
---
Kindly,
Robert
On 6/4/21 12:36 PM, Robert wrote:
Oh! Heading for a coffee with my nurse. I realized I may be passing the field into the primitive instead of the field size. I’ll check it when I get back home!
Kindly,
Robert
. .. ... ‘...^,^
On Fri, Jun 4, 2021 at 12:12, Robert Withers <robert.withers@pm.me> wrote:
Oh! I forgot to relocate leaves that have already been plugganized. This leaves (heh) 3 possible plugganizations that all instantiate ByteArrays. Here, I fixed it.
WITH GF & GFPOLY PRIMITIVES AND DECODER PRIMITIVES (3 asterix for in-progress plugganization) - 22194 tallies, 22648 msec.
**Leaves** 29.1% {6586ms} RSFECDecoderWithPlugin>>decode:twoS: 14.7% {3329ms} RSFECGenericGFPoly class>>newField:coefficients: 1.0% {237ms} RSFECDecoderWithPlugin>>runEuclideanAlgorithmPoly:poly:rDegrees:
Calls to plugganized GF/GFPoly methods, so I think these are as optimized as possible:
7.3% {1646ms} RSFECDecoderWithPlugin>>primFindErrorLocationsDegree:coefficients:result:fieldSize: 2.9% {654ms} RSFECDecoderWithPlugin>>findErrorMagnitudes:errorLocations:
1.4% {317ms} RSFECGenericGFWithPlugin>>log:
---
Kindly,
Robert
On 6/4/21 12:02 PM, Robert Withers wrote:
WITH GF & GFPOLY PRIMITIVES AND DECODER PRIMITIVES (3 asterix for in-progress plugganization) - 22194 tallies, 22648 msec.
**Leaves** 29.1% {6586ms} RSFECDecoderWithPlugin>>decode:twoS: 14.7% {3329ms} RSFECGenericGFPoly class>>newField:coefficients: 7.3% {1646ms} RSFECDecoderWithPlugin>>primFindErrorLocationsDegree:coefficients:result:fieldSize: 2.9% {654ms} RSFECDecoderWithPlugin>>findErrorMagnitudes:errorLocations: 1.0% {237ms} RSFECDecoderWithPlugin>>runEuclideanAlgorithmPoly:poly:rDegrees:
Calls to plugganized GF/GFPoly methods:
1.4% {317ms} RSFECGenericGFWithPlugin>>log: