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.
--- Köszönöm, Robert
On 6/4/21 1:38 PM, Robert Withers wrote:
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%
{
6586
ms} RSFECDecoderWithPlugin>>decode:twoS:
14.7
% {
3329
ms} RSFECGenericGFPoly
class
newField:coefficients:
1.0
% {
237
ms} RSFECDecoderWithPlugin>>runEuclideanAlgorithmPoly:poly:rDegrees:
Calls to plugganized GF/GFPoly methods, so I think these are as optimized as possible:
7.3
% {
1646
ms} RSFECDecoderWithPlugin>>primFindErrorLocationsDegree:coefficients:result:fieldSize:
2.9
% {
654
ms} RSFECDecoderWithPlugin>>findErrorMagnitudes:errorLocations:
1.4
% {
317
ms} 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%
{
6586
ms} RSFECDecoderWithPlugin>>decode:twoS:
14.7
% {
3329
ms} RSFECGenericGFPoly
class
>
>newField:coefficients:
7.3
% {
1646
ms} RSFECDecoderWithPlugin>>primFindErrorLocationsDegree:coefficients:result:fieldSize:
2.9
% {
654
ms} RSFECDecoderWithPlugin>>findErrorMagnitudes:errorLocations:
1.0
% {
237
ms} RSFECDecoderWithPlugin>>runEuclideanAlgorithmPoly:poly:rDegrees:
Calls to plugganized GF/GFPoly methods:
1.4% {317ms} RSFECGenericGFWithPlugin>>log: