< prev index next >
src/java.desktop/share/native/liblcms/cmsintrp.c
Print this page
@@ -28,11 +28,11 @@
// file:
//
//---------------------------------------------------------------------------------
//
// 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"),
// to deal in the Software without restriction, including without limitation
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
@@ -208,47 +208,47 @@
if (p != NULL) _cmsFree(p ->ContextID, p);
}
// 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;
return (cmsUInt16Number) (dif);
}
// 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;
int val3;
const cmsUInt16Number* LutTable = (cmsUInt16Number*) p ->Table;
// if last value...
if (Value[0] == 0xffff) {
Output[0] = LutTable[p -> Domain[0]];
- return;
}
-
- val3 = p -> Domain[0] * Value[0];
+ else
+ {
+ 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
y0 = LutTable[cell0];
- y1 = LutTable[cell0+1];
-
+ y1 = LutTable[cell0 + 1];
Output[0] = LinearInterp(rest, y0, y1);
+ }
}
// To prevent out of bounds indexing
cmsINLINE cmsFloat32Number fclamp(cmsFloat32Number v)
{
@@ -269,34 +269,35 @@
val2 = fclamp(Value[0]);
// 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;
- y0 = LutTable[cell0] ;
- y1 = LutTable[cell1] ;
+ y0 = LutTable[cell0];
+ y1 = LutTable[cell1];
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;
int v;
cmsUInt32Number OutChan;
@@ -335,32 +336,38 @@
val2 = fclamp(Value[0]);
// if last value...
if (val2 == 1.0) {
- Output[0] = LutTable[p -> Domain[0]];
- return;
- }
- 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];
+
+ cell0 = (int)floor(val2);
+ cell1 = (int)ceil(val2);
// Rest is 16 LSB bits
rest = val2 - cell0;
- cell0 *= p -> opta[0];
- cell1 *= p -> opta[0];
+ cell0 *= p->opta[0];
+ cell1 *= p->opta[0];
- for (OutChan=0; OutChan < p->nOutputs; OutChan++) {
+ for (OutChan = 0; OutChan < p->nOutputs; OutChan++) {
- y0 = LutTable[cell0 + OutChan] ;
- y1 = LutTable[cell1 + OutChan] ;
+ y0 = LutTable[cell0 + OutChan];
+ y1 = LutTable[cell1 + OutChan];
Output[OutChan] = y0 + (y1 - y0) * rest;
}
+ }
}
// Bilinear interpolation (16 bits) - cmsFloat32Number version
static
void BilinearInterpFloat(const cmsFloat32Number Input[],
@@ -413,25 +420,25 @@
# undef LERP
# undef DENS
}
// 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])
#define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a)))
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;
TotalOut = p -> nOutputs;
@@ -544,25 +551,25 @@
# undef LERP
# undef DENS
}
// 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])
#define LERP(a,l,h) (cmsUInt16Number) (l + ROUND_FIXED_TO_INT(((h-l)*a)))
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,
dxy0, dxy1, dxyz;
@@ -724,14 +731,14 @@
#undef DENS
-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;
cmsS15Fixed16Number rx, ry, rz;
int x0, y0, z0;
@@ -858,14 +865,14 @@
}
}
#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;
cmsS15Fixed16Number k0, rk;
int K0, K1;
@@ -1087,15 +1094,15 @@
Output[i] = y0 + (y1 - y0) * rest;
}
}
-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;
cmsS15Fixed16Number k0, rk;
int K0, K1;
@@ -1176,14 +1183,14 @@
}
}
-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;
cmsS15Fixed16Number k0, rk;
int K0, K1;
@@ -1262,14 +1269,14 @@
Output[i] = y0 + (y1 - y0) * rest;
}
}
-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;
cmsS15Fixed16Number k0, rk;
int K0, K1;
@@ -1348,14 +1355,14 @@
Output[i] = y0 + (y1 - y0) * rest;
}
}
-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;
cmsS15Fixed16Number k0, rk;
int K0, K1;
< prev index next >