--- old/src/java.desktop/share/native/liblcms/cmsintrp.c 2020-08-27 15:57:40.838103139 -0700 +++ new/src/java.desktop/share/native/liblcms/cmsintrp.c 2020-08-27 15:57:40.590103143 -0700 @@ -30,7 +30,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2017 Marti Maria Saguer +// Copyright (c) 1998-2020 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -210,7 +210,7 @@ // Inline fixed point interpolation -cmsINLINE cmsUInt16Number LinearInterp(cmsS15Fixed16Number a, cmsS15Fixed16Number l, cmsS15Fixed16Number h) +cmsINLINE CMS_NO_SANITIZE cmsUInt16Number LinearInterp(cmsS15Fixed16Number a, cmsS15Fixed16Number l, cmsS15Fixed16Number h) { cmsUInt32Number dif = (cmsUInt32Number) (h - l) * a + 0x8000; dif = (dif >> 16) + l; @@ -220,9 +220,9 @@ // Linear interpolation (Fixed-point optimized) static -void LinLerp1D(register const cmsUInt16Number Value[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +void LinLerp1D(CMSREGISTER const cmsUInt16Number Value[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { cmsUInt16Number y1, y0; int cell0, rest; @@ -233,20 +233,20 @@ if (Value[0] == 0xffff) { Output[0] = LutTable[p -> Domain[0]]; - return; } + else + { + val3 = p->Domain[0] * Value[0]; + val3 = _cmsToFixedDomain(val3); // To fixed 15.16 - val3 = p -> Domain[0] * Value[0]; - val3 = _cmsToFixedDomain(val3); // To fixed 15.16 + cell0 = FIXED_TO_INT(val3); // Cell is 16 MSB bits + rest = FIXED_REST_TO_INT(val3); // Rest is 16 LSB bits - cell0 = FIXED_TO_INT(val3); // Cell is 16 MSB bits - rest = FIXED_REST_TO_INT(val3); // Rest is 16 LSB bits + y0 = LutTable[cell0]; + y1 = LutTable[cell0 + 1]; - y0 = LutTable[cell0]; - y1 = LutTable[cell0+1]; - - - Output[0] = LinearInterp(rest, y0, y1); + Output[0] = LinearInterp(rest, y0, y1); + } } // To prevent out of bounds indexing @@ -271,30 +271,31 @@ // if last value... if (val2 == 1.0) { Output[0] = LutTable[p -> Domain[0]]; - return; } + else + { + val2 *= p->Domain[0]; - val2 *= p -> Domain[0]; - - cell0 = (int) floor(val2); - cell1 = (int) ceil(val2); + cell0 = (int)floor(val2); + cell1 = (int)ceil(val2); - // Rest is 16 LSB bits - rest = val2 - cell0; + // Rest is 16 LSB bits + rest = val2 - cell0; - y0 = LutTable[cell0] ; - y1 = LutTable[cell1] ; + y0 = LutTable[cell0]; + y1 = LutTable[cell1]; - Output[0] = y0 + (y1 - y0) * rest; + Output[0] = y0 + (y1 - y0) * rest; + } } // Eval gray LUT having only one input channel -static -void Eval1Input(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval1Input(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { cmsS15Fixed16Number fk; cmsS15Fixed16Number k0, k1, rk, K0, K1; @@ -335,30 +336,36 @@ val2 = fclamp(Value[0]); - // if last value... - if (val2 == 1.0) { - Output[0] = LutTable[p -> Domain[0]]; - return; - } + // if last value... + if (val2 == 1.0) { - val2 *= p -> Domain[0]; + y0 = LutTable[p->Domain[0]]; - cell0 = (int) floor(val2); - cell1 = (int) ceil(val2); + for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { + Output[OutChan] = y0; + } + } + else + { + val2 *= p->Domain[0]; - // Rest is 16 LSB bits - rest = val2 - cell0; + cell0 = (int)floor(val2); + cell1 = (int)ceil(val2); - cell0 *= p -> opta[0]; - cell1 *= p -> opta[0]; + // Rest is 16 LSB bits + rest = val2 - cell0; - for (OutChan=0; OutChan < p->nOutputs; OutChan++) { + cell0 *= p->opta[0]; + cell1 *= p->opta[0]; - y0 = LutTable[cell0 + OutChan] ; - y1 = LutTable[cell1 + OutChan] ; + for (OutChan = 0; OutChan < p->nOutputs; OutChan++) { + + y0 = LutTable[cell0 + OutChan]; + y1 = LutTable[cell1 + OutChan]; Output[OutChan] = y0 + (y1 - y0) * rest; - } + } + } } // Bilinear interpolation (16 bits) - cmsFloat32Number version @@ -415,10 +422,10 @@ } // Bilinear interpolation (16 bits) - optimized version -static -void BilinearInterp16(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +static CMS_NO_SANITIZE +void BilinearInterp16(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { #define DENS(i,j) (LutTable[(i)+(j)+OutChan]) @@ -427,9 +434,9 @@ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; int OutChan, TotalOut; cmsS15Fixed16Number fx, fy; - register int rx, ry; + CMSREGISTER int rx, ry; int x0, y0; - register int X0, X1, Y0, Y1; + CMSREGISTER int X0, X1, Y0, Y1; int d00, d01, d10, d11, dx0, dx1, dxy; @@ -546,10 +553,10 @@ } // Trilinear interpolation (16 bits) - optimized version -static -void TrilinearInterp16(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +static CMS_NO_SANITIZE +void TrilinearInterp16(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) @@ -558,9 +565,9 @@ const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table; int OutChan, TotalOut; cmsS15Fixed16Number fx, fy, fz; - register int rx, ry, rz; + CMSREGISTER int rx, ry, rz; int x0, y0, z0; - register int X0, X1, Y0, Y1, Z0, Z1; + CMSREGISTER int X0, X1, Y0, Y1, Z0, Z1; int d000, d001, d010, d011, d100, d101, d110, d111, dx00, dx01, dx10, dx11, @@ -726,10 +733,10 @@ -static -void TetrahedralInterp16(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p) +static CMS_NO_SANITIZE +void TetrahedralInterp16(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p -> Table; cmsS15Fixed16Number fx, fy, fz; @@ -860,10 +867,10 @@ #define DENS(i,j,k) (LutTable[(i)+(j)+(k)+OutChan]) -static -void Eval4Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval4Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable; cmsS15Fixed16Number fk; @@ -964,9 +971,9 @@ c1 = c2 = c3 = 0; } - Rest = c1 * rx + c2 * ry + c3 * rz; + Rest = c1 * rx + c2 * ry + c3 * rz; - Tmp1[OutChan] = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); + Tmp1[OutChan] = (cmsUInt16Number)(c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); } @@ -1028,9 +1035,9 @@ c1 = c2 = c3 = 0; } - Rest = c1 * rx + c2 * ry + c3 * rz; + Rest = c1 * rx + c2 * ry + c3 * rz; - Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); + Tmp2[OutChan] = (cmsUInt16Number) (c0 + ROUND_FIXED_TO_INT(_cmsToFixedDomain(Rest))); } @@ -1089,11 +1096,11 @@ } -static -void Eval5Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], +static CMS_NO_SANITIZE +void Eval5Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], - register const cmsInterpParams* p16) + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk; @@ -1178,10 +1185,10 @@ -static -void Eval6Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval6Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk; @@ -1264,10 +1271,10 @@ } -static -void Eval7Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval7Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk; @@ -1350,10 +1357,10 @@ } } -static -void Eval8Inputs(register const cmsUInt16Number Input[], - register cmsUInt16Number Output[], - register const cmsInterpParams* p16) +static CMS_NO_SANITIZE +void Eval8Inputs(CMSREGISTER const cmsUInt16Number Input[], + CMSREGISTER cmsUInt16Number Output[], + CMSREGISTER const cmsInterpParams* p16) { const cmsUInt16Number* LutTable = (cmsUInt16Number*) p16 -> Table; cmsS15Fixed16Number fk;