Below is some Java code, with a comment, from ZXing's ReedSolomon error correction. It points out a hotspot bug with a workaround. What would be the Squeak code to calculate the denominator? I'm guessing that this hotspot bug does not exist in Squeak. I tried this code and it fails:

denominator = field
    multiply: denominator
    by: (field
        addOrSubtract: 1
        by: (field
            multiply: (errorLocations at: j)
            by: xiInverse)).

Notice the commented out code in the first 2 lines of the java comment. The computation seems to revolve around

field addOrSubtract: 1 by: term

or

(term & 0x1) == 0 ? term | 1 : term & ~1;

Here is the Java code.

//denominator = field.multiply(denominator,
//    GenericGF.addOrSubtract(1, field.multiply(errorLocations[j], xiInverse)));
// Above should work but fails on some Apple and Linux JDKs due to a Hotspot bug.
// Below is a funny-looking workaround from Steven Parkes
int term = field.multiply(errorLocations[j], xiInverse);
int termPlus1 = (term & 0x1) == 0 ? term | 1 : term & ~1;
denominator = field.multiply(denominator, termPlus1);

--
---
Kindly,
Robert