00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
#undef LH_DATA_IN_TYPE
00015
#undef LH_DATA_OUT_TYPE
00016
#undef LH_LUT_DATA_TYPE
00017
#undef LH_DATA_IN_COUNT
00018
#undef LH_DATA_OUT_COUNT
00019
#undef LH_DATA_SHR
00020
#undef LH_DATA_SHR_CORR
00021
#undef LH_LUT_DATA_SHR
00022
#undef LH_BIT_BREIT_INTERNAL
00023
#if LH_DATA_IN_SIZE_16
00024
#define LH_DATA_IN_TYPE LH_UINT16
00025
#else
00026 #define LH_DATA_IN_TYPE LH_UINT8
00027
#endif
00028
#if LH_DATA_OUT_SIZE_16
00029
#define LH_DATA_OUT_TYPE LH_UINT16
00030
#else
00031 #define LH_DATA_OUT_TYPE LH_UINT8
00032
#endif
00033
#if LH_LUT_DATA_SIZE_16
00034
#define LH_BIT_BREIT_INTERNAL 16
00035
#define LH_LUT_DATA_TYPE LH_UINT16
00036
#else
00037
#if LH_DATA_IN_SIZE_16
00038
#define LH_BIT_BREIT_INTERNAL 16
00039
#else
00040 #define LH_BIT_BREIT_INTERNAL 10
00041
#endif
00042 #define LH_LUT_DATA_TYPE LH_UINT8
00043
#endif
00044
00045
#if LH_DATA_IN_COUNT_4
00046
#define LH_DATA_IN_COUNT 4
00047
#else
00048 #define LH_DATA_IN_COUNT 3
00049
#endif
00050
00051
#if LH_DATA_OUT_COUNT_4
00052
#define LH_DATA_OUT_COUNT 4
00053
#else
00054 #define LH_DATA_OUT_COUNT 3
00055
#endif
00056
00057 #define LH_BIT_MASKE_ADR (((1<<LH_BIT_BREIT_ADR)-1)<< (LH_BIT_BREIT_INTERNAL-LH_BIT_BREIT_ADR))
00058 #define LH_BIT_BREIT_SELEKTOR (LH_BIT_BREIT_INTERNAL-LH_BIT_BREIT_ADR)
00059 #define LH_BIT_MASKE_SELEKTOR ((1<<LH_BIT_BREIT_SELEKTOR)-1)
00060
00061 #define LH_ADR_BEREICH_SEL (1<<LH_BIT_BREIT_SELEKTOR)
00062
00063
#if LH_LUT_DATA_SIZE_16
00064
#define LH_DATA_SHR (16+LH_BIT_BREIT_SELEKTOR-LH_ADR_BREIT_AUS_LUT)
00065
#define LH_DATA_SHR_CORR 8
00066
#define LH_LUT_DATA_SHR 16
00067
#else
00068 #define LH_DATA_SHR (8+LH_BIT_BREIT_SELEKTOR-LH_ADR_BREIT_AUS_LUT)
00069 #define LH_LUT_DATA_SHR 8
00070
#endif
00071
00072
#if LH_DATA_IN_COUNT_4
00073
{
00074
static LH_UINT16 MMXTab [] =
00075 {
00076 0x0000, 0x0000, 0x0000, 0x0000,
00077 0x0001, 0x0001, 0x0001, 0x0001,
00078 0x0002, 0x0002, 0x0002, 0x0002,
00079 0x0003, 0x0003, 0x0003, 0x0003,
00080 0x0004, 0x0004, 0x0004, 0x0004,
00081 0x0005, 0x0005, 0x0005, 0x0005,
00082 0x0006, 0x0006, 0x0006, 0x0006,
00083 0x0007, 0x0007, 0x0007, 0x0007,
00084 0x0008, 0x0008, 0x0008, 0x0008,
00085 0x0009, 0x0009, 0x0009, 0x0009,
00086 0x000A, 0x000A, 0x000A, 0x000a,
00087 0x000B, 0x000B, 0x000B, 0x000b,
00088 0x000C, 0x000C, 0x000C, 0x000c,
00089 0x000D, 0x000D, 0x000D, 0x000d,
00090 0x000E, 0x000E, 0x000E, 0x000e,
00091 0x000F, 0x000F, 0x000F, 0x000f,
00092 0x0010, 0x0010, 0x0010, 0x0010,
00093 0x0011, 0x0011, 0x0011, 0x0011,
00094 0x0012, 0x0012, 0x0012, 0x0012,
00095 0x0013, 0x0013, 0x0013, 0x0013,
00096 0x0014, 0x0014, 0x0014, 0x0014,
00097 0x0015, 0x0015, 0x0015, 0x0015,
00098 0x0016, 0x0016, 0x0016, 0x0016,
00099 0x0017, 0x0017, 0x0017, 0x0017,
00100 0x0018, 0x0018, 0x0018, 0x0018,
00101 0x0019, 0x0019, 0x0019, 0x0019,
00102 0x001A, 0x001A, 0x001A, 0x001a,
00103 0x001B, 0x001B, 0x001B, 0x001b,
00104 0x001C, 0x001C, 0x001C, 0x001c,
00105 0x001D, 0x001D, 0x001D, 0x001d,
00106 0x001E, 0x001E, 0x001E, 0x001e,
00107 0x001F, 0x001F, 0x001F, 0x001f,
00108 0x0020, 0x0020, 0x0020, 0x0020,
00109 0x0021, 0x0021, 0x0021, 0x0021,
00110 0x0022, 0x0022, 0x0022, 0x0022,
00111 0x0023, 0x0023, 0x0023, 0x0023,
00112 0x0024, 0x0024, 0x0024, 0x0024,
00113 0x0025, 0x0025, 0x0025, 0x0025,
00114 0x0026, 0x0026, 0x0026, 0x0026,
00115 0x0027, 0x0027, 0x0027, 0x0027,
00116 0x0028, 0x0028, 0x0028, 0x0028,
00117 0x0029, 0x0029, 0x0029, 0x0029,
00118 0x002A, 0x002A, 0x002A, 0x002a,
00119 0x002B, 0x002B, 0x002B, 0x002b,
00120 0x002C, 0x002C, 0x002C, 0x002c,
00121 0x002D, 0x002D, 0x002D, 0x002d,
00122 0x002E, 0x002E, 0x002E, 0x002e,
00123 0x002F, 0x002F, 0x002F, 0x002f,
00124 0x0030, 0x0030, 0x0030, 0x0030,
00125 0x0031, 0x0031, 0x0031, 0x0031,
00126 0x0032, 0x0032, 0x0032, 0x0032,
00127 0x0033, 0x0033, 0x0033, 0x0033,
00128 0x0034, 0x0034, 0x0034, 0x0034,
00129 0x0035, 0x0035, 0x0035, 0x0035,
00130 0x0036, 0x0036, 0x0036, 0x0036,
00131 0x0037, 0x0037, 0x0037, 0x0037,
00132 0x0038, 0x0038, 0x0038, 0x0038,
00133 0x0039, 0x0039, 0x0039, 0x0039,
00134 0x003A, 0x003A, 0x003A, 0x003a,
00135 0x003B, 0x003B, 0x003B, 0x003b,
00136 0x003C, 0x003C, 0x003C, 0x003c,
00137 0x003D, 0x003D, 0x003D, 0x003d,
00138 0x003E, 0x003E, 0x003E, 0x003e,
00139 0x003F, 0x003F, 0x003F, 0x003f,
00140 0x0040, 0x0040, 0x0040, 0x0040,
00141 0x0041, 0x0041, 0x0041, 0x0041,
00142 0x0042, 0x0042, 0x0042, 0x0042,
00143 0x0043, 0x0043, 0x0043, 0x0043,
00144 0x0044, 0x0044, 0x0044, 0x0044,
00145 0x0045, 0x0045, 0x0045, 0x0045,
00146 0x0046, 0x0046, 0x0046, 0x0046,
00147 0x0047, 0x0047, 0x0047, 0x0047,
00148 0x0048, 0x0048, 0x0048, 0x0048,
00149 0x0049, 0x0049, 0x0049, 0x0049,
00150 0x004A, 0x004A, 0x004A, 0x004a,
00151 0x004B, 0x004B, 0x004B, 0x004b,
00152 0x004C, 0x004C, 0x004C, 0x004c,
00153 0x004D, 0x004D, 0x004D, 0x004d,
00154 0x004E, 0x004E, 0x004E, 0x004e,
00155 0x004F, 0x004F, 0x004F, 0x004f,
00156 0x0050, 0x0050, 0x0050, 0x0050,
00157 0x0051, 0x0051, 0x0051, 0x0051,
00158 0x0052, 0x0052, 0x0052, 0x0052,
00159 0x0053, 0x0053, 0x0053, 0x0053,
00160 0x0054, 0x0054, 0x0054, 0x0054,
00161 0x0055, 0x0055, 0x0055, 0x0055,
00162 0x0056, 0x0056, 0x0056, 0x0056,
00163 0x0057, 0x0057, 0x0057, 0x0057,
00164 0x0058, 0x0058, 0x0058, 0x0058,
00165 0x0059, 0x0059, 0x0059, 0x0059,
00166 0x005A, 0x005A, 0x005A, 0x005a,
00167 0x005B, 0x005B, 0x005B, 0x005b,
00168 0x005C, 0x005C, 0x005C, 0x005c,
00169 0x005D, 0x005D, 0x005D, 0x005d,
00170 0x005E, 0x005E, 0x005E, 0x005e,
00171 0x005F, 0x005F, 0x005F, 0x005f,
00172 0x0060, 0x0060, 0x0060, 0x0060,
00173 0x0061, 0x0061, 0x0061, 0x0061,
00174 0x0062, 0x0062, 0x0062, 0x0062,
00175 0x0063, 0x0063, 0x0063, 0x0063,
00176 0x0064, 0x0064, 0x0064, 0x0064,
00177 0x0065, 0x0065, 0x0065, 0x0065,
00178 0x0066, 0x0066, 0x0066, 0x0066,
00179 0x0067, 0x0067, 0x0067, 0x0067,
00180 0x0068, 0x0068, 0x0068, 0x0068,
00181 0x0069, 0x0069, 0x0069, 0x0069,
00182 0x006A, 0x006A, 0x006A, 0x006a,
00183 0x006B, 0x006B, 0x006B, 0x006b,
00184 0x006C, 0x006C, 0x006C, 0x006c,
00185 0x006D, 0x006D, 0x006D, 0x006d,
00186 0x006E, 0x006E, 0x006E, 0x006e,
00187 0x006F, 0x006F, 0x006F, 0x006f,
00188 0x0070, 0x0070, 0x0070, 0x0070,
00189 0x0071, 0x0071, 0x0071, 0x0071,
00190 0x0072, 0x0072, 0x0072, 0x0072,
00191 0x0073, 0x0073, 0x0073, 0x0073,
00192 0x0074, 0x0074, 0x0074, 0x0074,
00193 0x0075, 0x0075, 0x0075, 0x0075,
00194 0x0076, 0x0076, 0x0076, 0x0076,
00195 0x0077, 0x0077, 0x0077, 0x0077,
00196 0x0078, 0x0078, 0x0078, 0x0078,
00197 0x0079, 0x0079, 0x0079, 0x0079,
00198 0x007A, 0x007A, 0x007A, 0x007a,
00199 0x007B, 0x007B, 0x007B, 0x007b,
00200 0x007C, 0x007C, 0x007C, 0x007c,
00201 0x007D, 0x007D, 0x007D, 0x007d,
00202 0x007E, 0x007E, 0x007E, 0x007e,
00203 0x007F, 0x007F, 0x007F, 0x007f,
00204 0x0080, 0x0080, 0x0080, 0x0080
00205 };
00206
LH_UINT32 ein_regY;
00207
LH_UINT32 ein_regM;
00208
LH_UINT32 ein_regC;
00209
LH_UINT32 ein_regK;
00210
LH_DATA_IN_TYPE ein_cache[4];
00211
LH_LUT_DATA_TYPE * paNewVal0;
00212
LH_UINT32 ako0;
00213
LH_UINT32 ako1;
00214
LH_UINT32 ako2;
00215
LH_UINT32 ako3;
00216
00217
LH_UINT8 Mode;
00218
LH_UINT32 PixelCount, LineCount, i, j;
00219
long inputOffset,outputOffset;
00220
LH_DATA_IN_TYPE * input0 = (
LH_DATA_IN_TYPE *)calcParam->inputData[0];
00221
LH_DATA_IN_TYPE * input1 = (
LH_DATA_IN_TYPE *)calcParam->inputData[1];
00222
LH_DATA_IN_TYPE * input2 = (
LH_DATA_IN_TYPE *)calcParam->inputData[2];
00223
LH_DATA_IN_TYPE * input3 = (
LH_DATA_IN_TYPE *)calcParam->inputData[3];
00224
LH_DATA_IN_TYPE * input4 = (
LH_DATA_IN_TYPE *)calcParam->inputData[4];
00225
00226
LH_DATA_OUT_TYPE * output0 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[0];
00227
LH_DATA_OUT_TYPE * output1 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[1];
00228
LH_DATA_OUT_TYPE * output2 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[2];
00229
LH_DATA_OUT_TYPE * output3 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[3];
00230
LH_DATA_OUT_TYPE * output4 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[4];
00231
00232
LH_UINT16 * My_InputLut = (
LH_UINT16 *)lutParam->inputLut;
00233
LH_LUT_DATA_TYPE * My_OutputLut = (
LH_LUT_DATA_TYPE *)lutParam->outputLut;
00234
LH_LUT_DATA_TYPE * My_ColorLut = (
LH_LUT_DATA_TYPE *)lutParam->colorLut;
00235
00236
LH_DATA_OUT_TYPE Mask = (
LH_DATA_OUT_TYPE)-1;
00237
LH_UINT16 ak[4];
00238
LH_UINT8 bFPUState [108];
00239
#define Test_mode
00240
#ifdef Test_mode
00241
LH_UINT16 TestRam[4];
00242
#endif
00243
00244
#ifdef DEBUG_OUTPUT
00245
CMError err =
noErr;
00246
#endif
00247
LH_START_PROC(
LH_CALC_PROC_NAME)
00248
00249 #
if LH_DATA_IN_SIZE_16
00250 inputOffset = (
long)calcParam->cmInputPixelOffset / 2;
00251
#else
00252
inputOffset = (
long)calcParam->cmInputPixelOffset;
00253
#endif
00254
#if LH_DATA_OUT_SIZE_16
00255
outputOffset = (
long)calcParam->cmOutputPixelOffset / 2;
00256
#else
00257
outputOffset = (
long)calcParam->cmOutputPixelOffset;
00258
#endif
00259
00260
if (calcParam->clearMask)
00261 Mask = 0;
00262 Mode =
LH_CALC_ENGINE_UNDEF_MODE;
00263
00264
00265
if ((calcParam->cmInputPixelOffset * calcParam->cmPixelPerLine == calcParam->cmInputBytesPerLine) && (calcParam->cmOutputPixelOffset * calcParam->cmPixelPerLine == calcParam->cmOutputBytesPerLine))
00266 {
00267 PixelCount = calcParam->cmPixelPerLine * calcParam->cmLineCount;
00268 LineCount = 1;
00269 }
00270
else
00271 {
00272 PixelCount = calcParam->cmPixelPerLine;
00273 LineCount = calcParam->cmLineCount;
00274 }
00275
if (calcParam->copyAlpha )
00276 {
00277 Mode =
LH_CALC_ENGINE_U_TO_U;
00278 }
00279
else
00280 {
00281
if (calcParam->clearMask)
00282 Mode =
LH_CALC_ENGINE_P_TO_U;
00283
else
00284 Mode =
LH_CALC_ENGINE_P_TO_P;
00285 }
00286
00287 __asm {
00288 fnsave bFPUState
00289 pxor mm0,mm0
00290 pxor mm1,mm1
00291 pxor mm2,mm2
00292 pxor mm3,mm3
00293 pxor mm4,mm4
00294 pxor mm5,mm5
00295 pxor mm6,mm6
00296 pxor mm7,mm7
00297 }
00298 j = 0;
00299
while (LineCount)
00300 {
00301 i = PixelCount;
00302
while (i)
00303 {
00304
#if LH_LUT_DATA_SIZE_16
00305
#if LH_DATA_IN_SIZE_16 || LH_DATA_OUT_SIZE_16
00306
register LH_UINT32 ko;
00307
#endif
00308
#if LH_DATA_IN_SIZE_16
00309
register LH_DATA_IN_TYPE aValIn;
00310
#endif
00311
#if LH_DATA_OUT_SIZE_16
00312
register LH_UINT32 aVal;
00313
#endif
00314
#if LH_DATA_IN_SIZE_16
00315
aValIn = (ein_cache[0]=*input0) - ( *input0 >> (
LH_ADR_BREIT_EIN_LUT ));
00316 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00317 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 0 <<
LH_ADR_BREIT_EIN_LUT );
00318 ein_regC = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >>( 16-
LH_ADR_BREIT_EIN_LUT );
00319
00320 aValIn = (ein_cache[1]=*input1) - ( *input1 >> (
LH_ADR_BREIT_EIN_LUT ));
00321 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00322 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 1 <<
LH_ADR_BREIT_EIN_LUT );
00323 ein_regM = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 16-
LH_ADR_BREIT_EIN_LUT );
00324
00325 aValIn = (ein_cache[2]=*input2) - ( *input2 >> (
LH_ADR_BREIT_EIN_LUT ));
00326 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00327 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 2 <<
LH_ADR_BREIT_EIN_LUT );
00328 ein_regY = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 16-
LH_ADR_BREIT_EIN_LUT );
00329
00330 aValIn = (ein_cache[3]=*input3) - ( *input3 >> (
LH_ADR_BREIT_EIN_LUT ));
00331 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00332 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 3 <<
LH_ADR_BREIT_EIN_LUT );
00333 ein_regK = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 16-
LH_ADR_BREIT_EIN_LUT );
00334
#else
00335
ein_regC = My_InputLut[(ein_cache[0]=*input0) + ( 0 <<
LH_ADR_BREIT_EIN_LUT )];
00336 ein_regM = My_InputLut[(ein_cache[1]=*input1) + ( 1 <<
LH_ADR_BREIT_EIN_LUT )];
00337 ein_regY = My_InputLut[(ein_cache[2]=*input2) + ( 2 <<
LH_ADR_BREIT_EIN_LUT )];
00338 ein_regK = My_InputLut[(ein_cache[3]=*input3) + ( 3 <<
LH_ADR_BREIT_EIN_LUT )];
00339
#endif
00340
#else
00341
#if LH_DATA_IN_SIZE_16
00342
register LH_DATA_IN_TYPE aValIn;
00343
register LH_UINT32 ko;
00344 aValIn = (ein_cache[0]=*input0) - ( *input0 >> (
LH_ADR_BREIT_EIN_LUT ));
00345 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00346 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 0 <<
LH_ADR_BREIT_EIN_LUT );
00347 ein_regC = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >>( 10-
LH_ADR_BREIT_EIN_LUT );
00348
00349 aValIn = (ein_cache[1]=*input1) - ( *input1 >> (
LH_ADR_BREIT_EIN_LUT ));
00350 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00351 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 1 <<
LH_ADR_BREIT_EIN_LUT );
00352 ein_regM = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 10-
LH_ADR_BREIT_EIN_LUT );
00353
00354 aValIn = (ein_cache[2]=*input2) - ( *input2 >> (
LH_ADR_BREIT_EIN_LUT ));
00355 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00356 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 2 <<
LH_ADR_BREIT_EIN_LUT );
00357 ein_regY = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 10-
LH_ADR_BREIT_EIN_LUT );
00358
00359 aValIn = (ein_cache[3]=*input3) - ( *input3 >> (
LH_ADR_BREIT_EIN_LUT ));
00360 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
00361 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 3 <<
LH_ADR_BREIT_EIN_LUT );
00362 ein_regK = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 10-
LH_ADR_BREIT_EIN_LUT );
00363
00364
00365
00366
00367
#else
00368
ein_regC = My_InputLut[(ein_cache[0]=*input0) + ( 0 <<
LH_ADR_BREIT_EIN_LUT )];
00369 ein_regM = My_InputLut[(ein_cache[1]=*input1) + ( 1 <<
LH_ADR_BREIT_EIN_LUT )];
00370 ein_regY = My_InputLut[(ein_cache[2]=*input2) + ( 2 <<
LH_ADR_BREIT_EIN_LUT )];
00371 ein_regK = My_InputLut[(ein_cache[3]=*input3) + ( 3 <<
LH_ADR_BREIT_EIN_LUT )];
00372
#endif
00373
#endif
00374
paNewVal0 = (
LH_LUT_DATA_TYPE *)My_ColorLut +
00375 ((((((((ein_regC &
LH_BIT_MASKE_ADR) <<
LH_BIT_BREIT_ADR) +
00376 (ein_regM &
LH_BIT_MASKE_ADR)) <<
LH_BIT_BREIT_ADR) +
00377 (ein_regY &
LH_BIT_MASKE_ADR))>> (
LH_BIT_BREIT_SELEKTOR-
LH_BIT_BREIT_ADR)) +
00378 (ein_regK >>
LH_BIT_BREIT_SELEKTOR))*
LH_DATA_OUT_COUNT);
00379 ein_regC &=
LH_BIT_MASKE_SELEKTOR;
00380 ein_regM &=
LH_BIT_MASKE_SELEKTOR;
00381 ein_regY &=
LH_BIT_MASKE_SELEKTOR;
00382 ein_regK &=
LH_BIT_MASKE_SELEKTOR;
00383
if (ein_regY >= ein_regC)
00384 {
00385
if( ein_regM >= ein_regC )
00386 {
00387
if( ein_regY >= ein_regM )
00388 {
00389
if( ein_regC >= ein_regK )
00390 {
00391 ako0 =
LH_ADR_BEREICH_SEL - ein_regY;
00392 ako1 = ein_regY - ein_regM;
00393 ako2 = ein_regM - ein_regC;
00394 ako3 = ein_regC - ein_regK;
00395
#if LH_LUT_DATA_SIZE_16
00396
#if LH_DATA_OUT_SIZE_16
00397
00398 aVal = ( ako0 * paNewVal0[0] +
00399 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00400 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00401 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00402 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
00403 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00404 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00405 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00406 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
00407 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00408
00409 aVal = ( ako0 * paNewVal0[1] +
00410 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00411 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00412 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00413 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
00414 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00415 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00416 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00417 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
00418 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00419
00420 aVal = ( ako0 * paNewVal0[2] +
00421 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00422 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00423 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00424 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
00425 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00426 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00427 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00428 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
00429 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00430
00431
#if LH_DATA_OUT_COUNT_4
00432
aVal = ( ako0 * paNewVal0[3] +
00433 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00434 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00435 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00436 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
00437 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00438 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00439 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00440 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
00441 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00442
#endif
00443
00444
#else
00445
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
00446 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00447 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00448 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00449 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00450 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
00451 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00452 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00453 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00454 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00455 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
00456 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00457 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00458 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00459 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00460
#if LH_DATA_OUT_COUNT_4
00461
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
00462 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00463 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00464 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00465 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00466
#endif
00467
#endif
00468
00469
#else
00470
__asm {
00471 mov eax, paNewVal0
00472
00473 mov ebx, ako0
00474 movq mm5, MMXTab [ebx*8]
00475
#ifdef Test_mode
00476
movq TestRam,mm5
00477
#endif
00478
punpcklbw mm1,[eax]
00479 mov ebx, ako1
00480 psrlw mm1,8
00481
#ifdef Test_mode
00482
movq TestRam,mm1
00483
#endif
00484
00485 pmullw mm5,mm1
00486 movq mm6, MMXTab [ebx*8]
00487
#ifdef Test_mode
00488
movq TestRam,mm6
00489
#endif
00490
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
00491 mov ebx, ako2
00492 psrlw mm2,8
00493
#ifdef Test_mode
00494
movq TestRam,mm2
00495
#endif
00496
pmullw mm6,mm2
00497
00498 movq mm7, MMXTab [ebx*8]
00499 paddusw mm5,mm6
00500
#ifdef Test_mode
00501
movq TestRam,mm7
00502
#endif
00503
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
00504 mov ebx, ako3
00505 psrlw mm1,8
00506
#ifdef Test_mode
00507
movq TestRam,mm1
00508
#endif
00509
pmullw mm7,mm1
00510
00511 movq mm6, MMXTab [ebx*8]
00512 paddusw mm5,mm7
00513
#ifdef Test_mode
00514
movq TestRam,mm6
00515
#endif
00516
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
00517 mov ebx, ein_regK
00518 psrlw mm2,8
00519
#ifdef Test_mode
00520
movq TestRam,mm2
00521
#endif
00522
pmullw mm6,mm2
00523
00524 movq mm7, MMXTab [ebx*8]
00525 paddusw mm5,mm6
00526
#ifdef Test_mode
00527
movq TestRam,mm7
00528
#endif
00529
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
00530 mov ebx, ako2
00531 psrlw mm1,8
00532
#ifdef Test_mode
00533
movq TestRam,mm1
00534
#endif
00535
pmullw mm7,mm1
00536 paddusw mm5,mm7
00537
#ifdef Test_mode
00538
movq TestRam,mm5
00539
#endif
00540
00541
00542 xor eax,eax
00543 psrlw mm5,
LH_DATA_SHR
00544 movq ak,mm5
00545
00546 mov ax,ak
00547 mov esi,My_OutputLut
00548 mov al,
BYTE PTR[eax+esi]
00549 mov edi,output0
00550 mov [edi], al
00551 mov ax,ak+2
00552 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
00553 mov edi,output1
00554 mov [edi], al
00555 mov ax,ak+4
00556 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
00557 mov edi,output2
00558 mov [edi], al
00559
#if LH_DATA_OUT_COUNT_4
00560
mov ax,ak+6
00561 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
00562 mov edi,output3
00563 mov [edi], al
00564
#endif
00565
00566
00567 }
00568
#endif
00569
}
00570
else if(ein_regM >= ein_regK )
00571 {
00572 ako0 =
LH_ADR_BEREICH_SEL - ein_regY;
00573 ako1 = ein_regY - ein_regM;
00574 ako2 = ein_regM - ein_regK;
00575 ako3 = ein_regK - ein_regC;
00576
#if LH_LUT_DATA_SIZE_16
00577
#if LH_DATA_OUT_SIZE_16
00578
00579 aVal = ( ako0 * paNewVal0[0] +
00580 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00581 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00582 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00583 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
00584 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00585 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00586 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00587 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
00588 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00589
00590 aVal = ( ako0 * paNewVal0[1] +
00591 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00592 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00593 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00594 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
00595 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00596 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00597 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00598 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
00599 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00600
00601 aVal = ( ako0 * paNewVal0[2] +
00602 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00603 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00604 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00605 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
00606 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00607 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00608 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00609 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
00610 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00611
00612
#if LH_DATA_OUT_COUNT_4
00613
aVal = ( ako0 * paNewVal0[3] +
00614 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00615 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00616 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00617 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
00618 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00619 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00620 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00621 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
00622 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00623
#endif
00624
00625
#else
00626
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
00627 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00628 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00629 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00630 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00631 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
00632 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00633 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00634 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00635 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00636 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
00637 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00638 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00639 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00640 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00641
#if LH_DATA_OUT_COUNT_4
00642
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
00643 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00644 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00645 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00646 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00647
#endif
00648
#endif
00649
00650
#else
00651
__asm {
00652 mov eax, paNewVal0
00653
00654 mov ebx, ako0
00655 movq mm5, MMXTab [ebx*8]
00656
#ifdef Test_mode
00657
movq TestRam,mm5
00658
#endif
00659
punpcklbw mm1,[eax]
00660 mov ebx, ako1
00661 psrlw mm1,8
00662
#ifdef Test_mode
00663
movq TestRam,mm1
00664
#endif
00665
00666 pmullw mm5,mm1
00667 movq mm6, MMXTab [ebx*8]
00668
#ifdef Test_mode
00669
movq TestRam,mm6
00670
#endif
00671
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
00672 mov ebx, ako2
00673 psrlw mm2,8
00674
#ifdef Test_mode
00675
movq TestRam,mm2
00676
#endif
00677
pmullw mm6,mm2
00678
00679 movq mm7, MMXTab [ebx*8]
00680 paddusw mm5,mm6
00681
#ifdef Test_mode
00682
movq TestRam,mm7
00683
#endif
00684
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
00685 mov ebx, ako3
00686 psrlw mm1,8
00687
#ifdef Test_mode
00688
movq TestRam,mm1
00689
#endif
00690
pmullw mm7,mm1
00691
00692 movq mm6, MMXTab [ebx*8]
00693 paddusw mm5,mm7
00694
#ifdef Test_mode
00695
movq TestRam,mm6
00696
#endif
00697
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
00698 mov ebx, ein_regC
00699 psrlw mm2,8
00700
#ifdef Test_mode
00701
movq TestRam,mm2
00702
#endif
00703
pmullw mm6,mm2
00704
00705 movq mm7, MMXTab [ebx*8]
00706 paddusw mm5,mm6
00707
#ifdef Test_mode
00708
movq TestRam,mm7
00709
#endif
00710
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
00711 mov ebx, ako2
00712 psrlw mm1,8
00713
#ifdef Test_mode
00714
movq TestRam,mm1
00715
#endif
00716
pmullw mm7,mm1
00717 paddusw mm5,mm7
00718
#ifdef Test_mode
00719
movq TestRam,mm5
00720
#endif
00721
00722
00723 xor eax,eax
00724 psrlw mm5,
LH_DATA_SHR
00725 movq ak,mm5
00726
00727 mov ax,ak
00728 mov esi,My_OutputLut
00729 mov al,
BYTE PTR[eax+esi]
00730 mov edi,output0
00731 mov [edi], al
00732 mov ax,ak+2
00733 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
00734 mov edi,output1
00735 mov [edi], al
00736 mov ax,ak+4
00737 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
00738 mov edi,output2
00739 mov [edi], al
00740
#if LH_DATA_OUT_COUNT_4
00741
mov ax,ak+6
00742 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
00743 mov edi,output3
00744 mov [edi], al
00745
#endif
00746
00747
00748 }
00749
#endif
00750
}
00751
else if(ein_regY >= ein_regK )
00752 {
00753 ako0 =
LH_ADR_BEREICH_SEL - ein_regY;
00754 ako1 = ein_regY - ein_regK;
00755 ako2 = ein_regK - ein_regM;
00756 ako3 = ein_regM - ein_regC;
00757
#if LH_LUT_DATA_SIZE_16
00758
#if LH_DATA_OUT_SIZE_16
00759
00760 aVal = ( ako0 * paNewVal0[0] +
00761 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00762 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00763 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00764 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
00765 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00766 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00767 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00768 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
00769 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00770
00771 aVal = ( ako0 * paNewVal0[1] +
00772 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00773 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00774 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00775 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
00776 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00777 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00778 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00779 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
00780 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00781
00782 aVal = ( ako0 * paNewVal0[2] +
00783 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00784 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00785 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00786 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
00787 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00788 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00789 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00790 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
00791 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00792
00793
#if LH_DATA_OUT_COUNT_4
00794
aVal = ( ako0 * paNewVal0[3] +
00795 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00796 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00797 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00798 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
00799 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00800 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00801 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00802 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
00803 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00804
#endif
00805
00806
#else
00807
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
00808 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
00809 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00810 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00811 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00812 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
00813 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
00814 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00815 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00816 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00817 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
00818 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
00819 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00820 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00821 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00822
#if LH_DATA_OUT_COUNT_4
00823
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
00824 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
00825 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00826 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00827 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00828
#endif
00829
#endif
00830
00831
#else
00832
__asm {
00833 mov eax, paNewVal0
00834
00835 mov ebx, ako0
00836 movq mm5, MMXTab [ebx*8]
00837
#ifdef Test_mode
00838
movq TestRam,mm5
00839
#endif
00840
punpcklbw mm1,[eax]
00841 mov ebx, ako1
00842 psrlw mm1,8
00843
#ifdef Test_mode
00844
movq TestRam,mm1
00845
#endif
00846
00847 pmullw mm5,mm1
00848 movq mm6, MMXTab [ebx*8]
00849
#ifdef Test_mode
00850
movq TestRam,mm6
00851
#endif
00852
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
00853 mov ebx, ako2
00854 psrlw mm2,8
00855
#ifdef Test_mode
00856
movq TestRam,mm2
00857
#endif
00858
pmullw mm6,mm2
00859
00860 movq mm7, MMXTab [ebx*8]
00861 paddusw mm5,mm6
00862
#ifdef Test_mode
00863
movq TestRam,mm7
00864
#endif
00865
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
00866 mov ebx, ako3
00867 psrlw mm1,8
00868
#ifdef Test_mode
00869
movq TestRam,mm1
00870
#endif
00871
pmullw mm7,mm1
00872
00873 movq mm6, MMXTab [ebx*8]
00874 paddusw mm5,mm7
00875
#ifdef Test_mode
00876
movq TestRam,mm6
00877
#endif
00878
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
00879 mov ebx, ein_regC
00880 psrlw mm2,8
00881
#ifdef Test_mode
00882
movq TestRam,mm2
00883
#endif
00884
pmullw mm6,mm2
00885
00886 movq mm7, MMXTab [ebx*8]
00887 paddusw mm5,mm6
00888
#ifdef Test_mode
00889
movq TestRam,mm7
00890
#endif
00891
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
00892 mov ebx, ako2
00893 psrlw mm1,8
00894
#ifdef Test_mode
00895
movq TestRam,mm1
00896
#endif
00897
pmullw mm7,mm1
00898 paddusw mm5,mm7
00899
#ifdef Test_mode
00900
movq TestRam,mm5
00901
#endif
00902
00903
00904 xor eax,eax
00905 psrlw mm5,
LH_DATA_SHR
00906 movq ak,mm5
00907
00908 mov ax,ak
00909 mov esi,My_OutputLut
00910 mov al,
BYTE PTR[eax+esi]
00911 mov edi,output0
00912 mov [edi], al
00913 mov ax,ak+2
00914 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
00915 mov edi,output1
00916 mov [edi], al
00917 mov ax,ak+4
00918 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
00919 mov edi,output2
00920 mov [edi], al
00921
#if LH_DATA_OUT_COUNT_4
00922
mov ax,ak+6
00923 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
00924 mov edi,output3
00925 mov [edi], al
00926
#endif
00927
00928
00929 }
00930
#endif
00931
}
00932
else{
00933 ako0 =
LH_ADR_BEREICH_SEL - ein_regK;
00934 ako1 = ein_regK - ein_regY;
00935 ako2 = ein_regY - ein_regM;
00936 ako3 = ein_regM - ein_regC;
00937
#if LH_LUT_DATA_SIZE_16
00938
#if LH_DATA_OUT_SIZE_16
00939
00940 aVal = ( ako0 * paNewVal0[0] +
00941 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00942 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00943 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00944 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
00945 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00946 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00947 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00948 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
00949 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00950
00951 aVal = ( ako0 * paNewVal0[1] +
00952 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00953 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00954 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00955 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
00956 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00957 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00958 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00959 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
00960 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00961
00962 aVal = ( ako0 * paNewVal0[2] +
00963 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00964 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00965 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00966 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
00967 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00968 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00969 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00970 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
00971 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00972
00973
#if LH_DATA_OUT_COUNT_4
00974
aVal = ( ako0 * paNewVal0[3] +
00975 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00976 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00977 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
00978 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
00979 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
00980 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
00981 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
00982 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
00983 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
00984
#endif
00985
00986
#else
00987
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
00988 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00989 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00990 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
00991 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00992 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
00993 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00994 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00995 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
00996 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
00997 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
00998 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
00999 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01000 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01001 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01002
#if LH_DATA_OUT_COUNT_4
01003
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
01004 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01005 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01006 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01007 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01008
#endif
01009
#endif
01010
01011
#else
01012
__asm {
01013 mov eax, paNewVal0
01014
01015 mov ebx, ako0
01016 movq mm5, MMXTab [ebx*8]
01017
#ifdef Test_mode
01018
movq TestRam,mm5
01019
#endif
01020
punpcklbw mm1,[eax]
01021 mov ebx, ako1
01022 psrlw mm1,8
01023
#ifdef Test_mode
01024
movq TestRam,mm1
01025
#endif
01026
01027 pmullw mm5,mm1
01028 movq mm6, MMXTab [ebx*8]
01029
#ifdef Test_mode
01030
movq TestRam,mm6
01031
#endif
01032
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01033 mov ebx, ako2
01034 psrlw mm2,8
01035
#ifdef Test_mode
01036
movq TestRam,mm2
01037
#endif
01038
pmullw mm6,mm2
01039
01040 movq mm7, MMXTab [ebx*8]
01041 paddusw mm5,mm6
01042
#ifdef Test_mode
01043
movq TestRam,mm7
01044
#endif
01045
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01046 mov ebx, ako3
01047 psrlw mm1,8
01048
#ifdef Test_mode
01049
movq TestRam,mm1
01050
#endif
01051
pmullw mm7,mm1
01052
01053 movq mm6, MMXTab [ebx*8]
01054 paddusw mm5,mm7
01055
#ifdef Test_mode
01056
movq TestRam,mm6
01057
#endif
01058
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01059 mov ebx, ein_regC
01060 psrlw mm2,8
01061
#ifdef Test_mode
01062
movq TestRam,mm2
01063
#endif
01064
pmullw mm6,mm2
01065
01066 movq mm7, MMXTab [ebx*8]
01067 paddusw mm5,mm6
01068
#ifdef Test_mode
01069
movq TestRam,mm7
01070
#endif
01071
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01072 mov ebx, ako2
01073 psrlw mm1,8
01074
#ifdef Test_mode
01075
movq TestRam,mm1
01076
#endif
01077
pmullw mm7,mm1
01078 paddusw mm5,mm7
01079
#ifdef Test_mode
01080
movq TestRam,mm5
01081
#endif
01082
01083
01084 xor eax,eax
01085 psrlw mm5,
LH_DATA_SHR
01086 movq ak,mm5
01087
01088 mov ax,ak
01089 mov esi,My_OutputLut
01090 mov al,
BYTE PTR[eax+esi]
01091 mov edi,output0
01092 mov [edi], al
01093 mov ax,ak+2
01094 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
01095 mov edi,output1
01096 mov [edi], al
01097 mov ax,ak+4
01098 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
01099 mov edi,output2
01100 mov [edi], al
01101
#if LH_DATA_OUT_COUNT_4
01102
mov ax,ak+6
01103 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
01104 mov edi,output3
01105 mov [edi], al
01106
#endif
01107
01108
01109 }
01110
#endif
01111
}
01112 }
01113
else
01114 {
01115
if( ein_regC >= ein_regK )
01116 {
01117 ako0 =
LH_ADR_BEREICH_SEL - ein_regM;
01118 ako1 = ein_regM - ein_regY;
01119 ako2 = ein_regY - ein_regC;
01120 ako3 = ein_regC - ein_regK;
01121
#if LH_LUT_DATA_SIZE_16
01122
#if LH_DATA_OUT_SIZE_16
01123
01124 aVal = ( ako0 * paNewVal0[0] +
01125 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01126 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01127 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01128 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
01129 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01130 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01131 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01132 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
01133 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01134
01135 aVal = ( ako0 * paNewVal0[1] +
01136 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01137 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01138 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01139 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
01140 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01141 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01142 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01143 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
01144 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01145
01146 aVal = ( ako0 * paNewVal0[2] +
01147 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01148 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01149 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01150 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
01151 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01152 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01153 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01154 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
01155 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01156
01157
#if LH_DATA_OUT_COUNT_4
01158
aVal = ( ako0 * paNewVal0[3] +
01159 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01160 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01161 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01162 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
01163 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01164 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01165 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01166 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
01167 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01168
#endif
01169
01170
#else
01171
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
01172 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01173 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01174 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01175 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01176 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
01177 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01178 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01179 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01180 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01181 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
01182 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01183 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01184 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01185 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01186
#if LH_DATA_OUT_COUNT_4
01187
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
01188 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01189 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01190 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01191 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01192
#endif
01193
#endif
01194
01195
#else
01196
__asm {
01197 mov eax, paNewVal0
01198
01199 mov ebx, ako0
01200 movq mm5, MMXTab [ebx*8]
01201
#ifdef Test_mode
01202
movq TestRam,mm5
01203
#endif
01204
punpcklbw mm1,[eax]
01205 mov ebx, ako1
01206 psrlw mm1,8
01207
#ifdef Test_mode
01208
movq TestRam,mm1
01209
#endif
01210
01211 pmullw mm5,mm1
01212 movq mm6, MMXTab [ebx*8]
01213
#ifdef Test_mode
01214
movq TestRam,mm6
01215
#endif
01216
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01217 mov ebx, ako2
01218 psrlw mm2,8
01219
#ifdef Test_mode
01220
movq TestRam,mm2
01221
#endif
01222
pmullw mm6,mm2
01223
01224 movq mm7, MMXTab [ebx*8]
01225 paddusw mm5,mm6
01226
#ifdef Test_mode
01227
movq TestRam,mm7
01228
#endif
01229
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01230 mov ebx, ako3
01231 psrlw mm1,8
01232
#ifdef Test_mode
01233
movq TestRam,mm1
01234
#endif
01235
pmullw mm7,mm1
01236
01237 movq mm6, MMXTab [ebx*8]
01238 paddusw mm5,mm7
01239
#ifdef Test_mode
01240
movq TestRam,mm6
01241
#endif
01242
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01243 mov ebx, ein_regK
01244 psrlw mm2,8
01245
#ifdef Test_mode
01246
movq TestRam,mm2
01247
#endif
01248
pmullw mm6,mm2
01249
01250 movq mm7, MMXTab [ebx*8]
01251 paddusw mm5,mm6
01252
#ifdef Test_mode
01253
movq TestRam,mm7
01254
#endif
01255
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01256 mov ebx, ako2
01257 psrlw mm1,8
01258
#ifdef Test_mode
01259
movq TestRam,mm1
01260
#endif
01261
pmullw mm7,mm1
01262 paddusw mm5,mm7
01263
#ifdef Test_mode
01264
movq TestRam,mm5
01265
#endif
01266
01267
01268 xor eax,eax
01269 psrlw mm5,
LH_DATA_SHR
01270 movq ak,mm5
01271
01272 mov ax,ak
01273 mov esi,My_OutputLut
01274 mov al,
BYTE PTR[eax+esi]
01275 mov edi,output0
01276 mov [edi], al
01277 mov ax,ak+2
01278 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
01279 mov edi,output1
01280 mov [edi], al
01281 mov ax,ak+4
01282 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
01283 mov edi,output2
01284 mov [edi], al
01285
#if LH_DATA_OUT_COUNT_4
01286
mov ax,ak+6
01287 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
01288 mov edi,output3
01289 mov [edi], al
01290
#endif
01291
01292
01293 }
01294
#endif
01295
}
01296
else if(ein_regY >= ein_regK )
01297 {
01298 ako0 =
LH_ADR_BEREICH_SEL - ein_regM;
01299 ako1 = ein_regM - ein_regY;
01300 ako2 = ein_regY - ein_regK;
01301 ako3 = ein_regK - ein_regC;
01302
#if LH_LUT_DATA_SIZE_16
01303
#if LH_DATA_OUT_SIZE_16
01304
01305 aVal = ( ako0 * paNewVal0[0] +
01306 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01307 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01308 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01309 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
01310 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01311 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01312 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01313 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
01314 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01315
01316 aVal = ( ako0 * paNewVal0[1] +
01317 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01318 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01319 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01320 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
01321 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01322 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01323 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01324 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
01325 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01326
01327 aVal = ( ako0 * paNewVal0[2] +
01328 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01329 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01330 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01331 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
01332 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01333 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01334 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01335 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
01336 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01337
01338
#if LH_DATA_OUT_COUNT_4
01339
aVal = ( ako0 * paNewVal0[3] +
01340 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01341 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01342 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01343 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
01344 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01345 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01346 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01347 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
01348 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01349
#endif
01350
01351
#else
01352
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
01353 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01354 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01355 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01356 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01357 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
01358 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01359 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01360 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01361 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01362 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
01363 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01364 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01365 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01366 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01367
#if LH_DATA_OUT_COUNT_4
01368
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
01369 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01370 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01371 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01372 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01373
#endif
01374
#endif
01375
01376
#else
01377
__asm {
01378 mov eax, paNewVal0
01379
01380 mov ebx, ako0
01381 movq mm5, MMXTab [ebx*8]
01382
#ifdef Test_mode
01383
movq TestRam,mm5
01384
#endif
01385
punpcklbw mm1,[eax]
01386 mov ebx, ako1
01387 psrlw mm1,8
01388
#ifdef Test_mode
01389
movq TestRam,mm1
01390
#endif
01391
01392 pmullw mm5,mm1
01393 movq mm6, MMXTab [ebx*8]
01394
#ifdef Test_mode
01395
movq TestRam,mm6
01396
#endif
01397
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01398 mov ebx, ako2
01399 psrlw mm2,8
01400
#ifdef Test_mode
01401
movq TestRam,mm2
01402
#endif
01403
pmullw mm6,mm2
01404
01405 movq mm7, MMXTab [ebx*8]
01406 paddusw mm5,mm6
01407
#ifdef Test_mode
01408
movq TestRam,mm7
01409
#endif
01410
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01411 mov ebx, ako3
01412 psrlw mm1,8
01413
#ifdef Test_mode
01414
movq TestRam,mm1
01415
#endif
01416
pmullw mm7,mm1
01417
01418 movq mm6, MMXTab [ebx*8]
01419 paddusw mm5,mm7
01420
#ifdef Test_mode
01421
movq TestRam,mm6
01422
#endif
01423
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01424 mov ebx, ein_regC
01425 psrlw mm2,8
01426
#ifdef Test_mode
01427
movq TestRam,mm2
01428
#endif
01429
pmullw mm6,mm2
01430
01431 movq mm7, MMXTab [ebx*8]
01432 paddusw mm5,mm6
01433
#ifdef Test_mode
01434
movq TestRam,mm7
01435
#endif
01436
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01437 mov ebx, ako2
01438 psrlw mm1,8
01439
#ifdef Test_mode
01440
movq TestRam,mm1
01441
#endif
01442
pmullw mm7,mm1
01443 paddusw mm5,mm7
01444
#ifdef Test_mode
01445
movq TestRam,mm5
01446
#endif
01447
01448
01449 xor eax,eax
01450 psrlw mm5,
LH_DATA_SHR
01451 movq ak,mm5
01452
01453 mov ax,ak
01454 mov esi,My_OutputLut
01455 mov al,
BYTE PTR[eax+esi]
01456 mov edi,output0
01457 mov [edi], al
01458 mov ax,ak+2
01459 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
01460 mov edi,output1
01461 mov [edi], al
01462 mov ax,ak+4
01463 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
01464 mov edi,output2
01465 mov [edi], al
01466
#if LH_DATA_OUT_COUNT_4
01467
mov ax,ak+6
01468 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
01469 mov edi,output3
01470 mov [edi], al
01471
#endif
01472
01473
01474 }
01475
#endif
01476
}
01477
else if(ein_regM >= ein_regK )
01478 {
01479 ako0 =
LH_ADR_BEREICH_SEL - ein_regM;
01480 ako1 = ein_regM - ein_regK;
01481 ako2 = ein_regK - ein_regY;
01482 ako3 = ein_regY - ein_regC;
01483
#if LH_LUT_DATA_SIZE_16
01484
#if LH_DATA_OUT_SIZE_16
01485
01486 aVal = ( ako0 * paNewVal0[0] +
01487 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01488 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01489 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01490 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
01491 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01492 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01493 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01494 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
01495 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01496
01497 aVal = ( ako0 * paNewVal0[1] +
01498 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01499 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01500 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01501 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
01502 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01503 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01504 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01505 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
01506 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01507
01508 aVal = ( ako0 * paNewVal0[2] +
01509 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01510 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01511 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01512 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
01513 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01514 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01515 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01516 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
01517 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01518
01519
#if LH_DATA_OUT_COUNT_4
01520
aVal = ( ako0 * paNewVal0[3] +
01521 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01522 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01523 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01524 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
01525 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01526 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01527 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01528 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
01529 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01530
#endif
01531
01532
#else
01533
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
01534 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01535 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01536 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01537 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01538 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
01539 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01540 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01541 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01542 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01543 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
01544 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01545 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01546 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01547 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01548
#if LH_DATA_OUT_COUNT_4
01549
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
01550 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01551 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01552 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01553 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01554
#endif
01555
#endif
01556
01557
#else
01558
__asm {
01559 mov eax, paNewVal0
01560
01561 mov ebx, ako0
01562 movq mm5, MMXTab [ebx*8]
01563
#ifdef Test_mode
01564
movq TestRam,mm5
01565
#endif
01566
punpcklbw mm1,[eax]
01567 mov ebx, ako1
01568 psrlw mm1,8
01569
#ifdef Test_mode
01570
movq TestRam,mm1
01571
#endif
01572
01573 pmullw mm5,mm1
01574 movq mm6, MMXTab [ebx*8]
01575
#ifdef Test_mode
01576
movq TestRam,mm6
01577
#endif
01578
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01579 mov ebx, ako2
01580 psrlw mm2,8
01581
#ifdef Test_mode
01582
movq TestRam,mm2
01583
#endif
01584
pmullw mm6,mm2
01585
01586 movq mm7, MMXTab [ebx*8]
01587 paddusw mm5,mm6
01588
#ifdef Test_mode
01589
movq TestRam,mm7
01590
#endif
01591
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01592 mov ebx, ako3
01593 psrlw mm1,8
01594
#ifdef Test_mode
01595
movq TestRam,mm1
01596
#endif
01597
pmullw mm7,mm1
01598
01599 movq mm6, MMXTab [ebx*8]
01600 paddusw mm5,mm7
01601
#ifdef Test_mode
01602
movq TestRam,mm6
01603
#endif
01604
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01605 mov ebx, ein_regC
01606 psrlw mm2,8
01607
#ifdef Test_mode
01608
movq TestRam,mm2
01609
#endif
01610
pmullw mm6,mm2
01611
01612 movq mm7, MMXTab [ebx*8]
01613 paddusw mm5,mm6
01614
#ifdef Test_mode
01615
movq TestRam,mm7
01616
#endif
01617
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01618 mov ebx, ako2
01619 psrlw mm1,8
01620
#ifdef Test_mode
01621
movq TestRam,mm1
01622
#endif
01623
pmullw mm7,mm1
01624 paddusw mm5,mm7
01625
#ifdef Test_mode
01626
movq TestRam,mm5
01627
#endif
01628
01629
01630 xor eax,eax
01631 psrlw mm5,
LH_DATA_SHR
01632 movq ak,mm5
01633
01634 mov ax,ak
01635 mov esi,My_OutputLut
01636 mov al,
BYTE PTR[eax+esi]
01637 mov edi,output0
01638 mov [edi], al
01639 mov ax,ak+2
01640 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
01641 mov edi,output1
01642 mov [edi], al
01643 mov ax,ak+4
01644 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
01645 mov edi,output2
01646 mov [edi], al
01647
#if LH_DATA_OUT_COUNT_4
01648
mov ax,ak+6
01649 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
01650 mov edi,output3
01651 mov [edi], al
01652
#endif
01653
01654
01655 }
01656
#endif
01657
}
01658
else
01659 {
01660 ako0 =
LH_ADR_BEREICH_SEL - ein_regK;
01661 ako1 = ein_regK - ein_regM;
01662 ako2 = ein_regM - ein_regY;
01663 ako3 = ein_regY - ein_regC;
01664
#if LH_LUT_DATA_SIZE_16
01665
#if LH_DATA_OUT_SIZE_16
01666
01667 aVal = ( ako0 * paNewVal0[0] +
01668 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01669 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01670 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01671 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
01672 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01673 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01674 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01675 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
01676 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01677
01678 aVal = ( ako0 * paNewVal0[1] +
01679 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01680 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01681 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01682 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
01683 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01684 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01685 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01686 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
01687 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01688
01689 aVal = ( ako0 * paNewVal0[2] +
01690 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01691 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01692 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01693 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
01694 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01695 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01696 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01697 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
01698 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01699
01700
#if LH_DATA_OUT_COUNT_4
01701
aVal = ( ako0 * paNewVal0[3] +
01702 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01703 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01704 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01705 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
01706 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01707 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01708 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01709 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
01710 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01711
#endif
01712
01713
#else
01714
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
01715 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01716 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01717 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
01718 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01719 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
01720 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01721 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01722 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
01723 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01724 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
01725 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01726 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01727 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
01728 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01729
#if LH_DATA_OUT_COUNT_4
01730
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
01731 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01732 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01733 ako3 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
01734 ein_regC * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01735
#endif
01736
#endif
01737
01738
#else
01739
__asm {
01740 mov eax, paNewVal0
01741
01742 mov ebx, ako0
01743 movq mm5, MMXTab [ebx*8]
01744
#ifdef Test_mode
01745
movq TestRam,mm5
01746
#endif
01747
punpcklbw mm1,[eax]
01748 mov ebx, ako1
01749 psrlw mm1,8
01750
#ifdef Test_mode
01751
movq TestRam,mm1
01752
#endif
01753
01754 pmullw mm5,mm1
01755 movq mm6, MMXTab [ebx*8]
01756
#ifdef Test_mode
01757
movq TestRam,mm6
01758
#endif
01759
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01760 mov ebx, ako2
01761 psrlw mm2,8
01762
#ifdef Test_mode
01763
movq TestRam,mm2
01764
#endif
01765
pmullw mm6,mm2
01766
01767 movq mm7, MMXTab [ebx*8]
01768 paddusw mm5,mm6
01769
#ifdef Test_mode
01770
movq TestRam,mm7
01771
#endif
01772
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01773 mov ebx, ako3
01774 psrlw mm1,8
01775
#ifdef Test_mode
01776
movq TestRam,mm1
01777
#endif
01778
pmullw mm7,mm1
01779
01780 movq mm6, MMXTab [ebx*8]
01781 paddusw mm5,mm7
01782
#ifdef Test_mode
01783
movq TestRam,mm6
01784
#endif
01785
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01786 mov ebx, ein_regC
01787 psrlw mm2,8
01788
#ifdef Test_mode
01789
movq TestRam,mm2
01790
#endif
01791
pmullw mm6,mm2
01792
01793 movq mm7, MMXTab [ebx*8]
01794 paddusw mm5,mm6
01795
#ifdef Test_mode
01796
movq TestRam,mm7
01797
#endif
01798
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01799 mov ebx, ako2
01800 psrlw mm1,8
01801
#ifdef Test_mode
01802
movq TestRam,mm1
01803
#endif
01804
pmullw mm7,mm1
01805 paddusw mm5,mm7
01806
#ifdef Test_mode
01807
movq TestRam,mm5
01808
#endif
01809
01810
01811 xor eax,eax
01812 psrlw mm5,
LH_DATA_SHR
01813 movq ak,mm5
01814
01815 mov ax,ak
01816 mov esi,My_OutputLut
01817 mov al,
BYTE PTR[eax+esi]
01818 mov edi,output0
01819 mov [edi], al
01820 mov ax,ak+2
01821 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
01822 mov edi,output1
01823 mov [edi], al
01824 mov ax,ak+4
01825 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
01826 mov edi,output2
01827 mov [edi], al
01828
#if LH_DATA_OUT_COUNT_4
01829
mov ax,ak+6
01830 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
01831 mov edi,output3
01832 mov [edi], al
01833
#endif
01834
01835
01836 }
01837
#endif
01838
}
01839 }
01840 }
01841
else
01842 {
01843
if( ein_regM >= ein_regK )
01844 {
01845 ako0 =
LH_ADR_BEREICH_SEL - ein_regY;
01846 ako1 = ein_regY - ein_regC;
01847 ako2 = ein_regC - ein_regM;
01848 ako3 = ein_regM - ein_regK;
01849
#if LH_LUT_DATA_SIZE_16
01850
#if LH_DATA_OUT_SIZE_16
01851
01852 aVal = ( ako0 * paNewVal0[0] +
01853 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01854 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01855 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01856 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
01857 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01858 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01859 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01860 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
01861 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01862
01863 aVal = ( ako0 * paNewVal0[1] +
01864 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01865 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01866 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01867 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
01868 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01869 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01870 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01871 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
01872 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01873
01874 aVal = ( ako0 * paNewVal0[2] +
01875 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01876 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01877 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01878 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
01879 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01880 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01881 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01882 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
01883 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01884
01885
#if LH_DATA_OUT_COUNT_4
01886
aVal = ( ako0 * paNewVal0[3] +
01887 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01888 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01889 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01890 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
01891 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
01892 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
01893 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
01894 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
01895 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
01896
#endif
01897
01898
#else
01899
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
01900 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01901 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01902 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
01903 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01904 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
01905 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01906 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01907 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
01908 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01909 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
01910 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01911 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01912 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
01913 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01914
#if LH_DATA_OUT_COUNT_4
01915
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
01916 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01917 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01918 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
01919 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
01920
#endif
01921
#endif
01922
01923
#else
01924
__asm {
01925 mov eax, paNewVal0
01926
01927 mov ebx, ako0
01928 movq mm5, MMXTab [ebx*8]
01929
#ifdef Test_mode
01930
movq TestRam,mm5
01931
#endif
01932
punpcklbw mm1,[eax]
01933 mov ebx, ako1
01934 psrlw mm1,8
01935
#ifdef Test_mode
01936
movq TestRam,mm1
01937
#endif
01938
01939 pmullw mm5,mm1
01940 movq mm6, MMXTab [ebx*8]
01941
#ifdef Test_mode
01942
movq TestRam,mm6
01943
#endif
01944
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01945 mov ebx, ako2
01946 psrlw mm2,8
01947
#ifdef Test_mode
01948
movq TestRam,mm2
01949
#endif
01950
pmullw mm6,mm2
01951
01952 movq mm7, MMXTab [ebx*8]
01953 paddusw mm5,mm6
01954
#ifdef Test_mode
01955
movq TestRam,mm7
01956
#endif
01957
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01958 mov ebx, ako3
01959 psrlw mm1,8
01960
#ifdef Test_mode
01961
movq TestRam,mm1
01962
#endif
01963
pmullw mm7,mm1
01964
01965 movq mm6, MMXTab [ebx*8]
01966 paddusw mm5,mm7
01967
#ifdef Test_mode
01968
movq TestRam,mm6
01969
#endif
01970
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
01971 mov ebx, ein_regK
01972 psrlw mm2,8
01973
#ifdef Test_mode
01974
movq TestRam,mm2
01975
#endif
01976
pmullw mm6,mm2
01977
01978 movq mm7, MMXTab [ebx*8]
01979 paddusw mm5,mm6
01980
#ifdef Test_mode
01981
movq TestRam,mm7
01982
#endif
01983
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
01984 mov ebx, ako2
01985 psrlw mm1,8
01986
#ifdef Test_mode
01987
movq TestRam,mm1
01988
#endif
01989
pmullw mm7,mm1
01990 paddusw mm5,mm7
01991
#ifdef Test_mode
01992
movq TestRam,mm5
01993
#endif
01994
01995
01996 xor eax,eax
01997 psrlw mm5,
LH_DATA_SHR
01998 movq ak,mm5
01999
02000 mov ax,ak
02001 mov esi,My_OutputLut
02002 mov al,
BYTE PTR[eax+esi]
02003 mov edi,output0
02004 mov [edi], al
02005 mov ax,ak+2
02006 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
02007 mov edi,output1
02008 mov [edi], al
02009 mov ax,ak+4
02010 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
02011 mov edi,output2
02012 mov [edi], al
02013
#if LH_DATA_OUT_COUNT_4
02014
mov ax,ak+6
02015 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
02016 mov edi,output3
02017 mov [edi], al
02018
#endif
02019
02020
02021 }
02022
#endif
02023
}
02024
else if(ein_regC >= ein_regK )
02025 {
02026 ako0 =
LH_ADR_BEREICH_SEL - ein_regY;
02027 ako1 = ein_regY - ein_regC;
02028 ako2 = ein_regC - ein_regK;
02029 ako3 = ein_regK - ein_regM;
02030
#if LH_LUT_DATA_SIZE_16
02031
#if LH_DATA_OUT_SIZE_16
02032
02033 aVal = ( ako0 * paNewVal0[0] +
02034 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02035 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02036 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02037 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
02038 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02039 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02040 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02041 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
02042 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02043
02044 aVal = ( ako0 * paNewVal0[1] +
02045 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02046 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02047 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02048 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
02049 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02050 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02051 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02052 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
02053 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02054
02055 aVal = ( ako0 * paNewVal0[2] +
02056 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02057 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02058 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02059 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
02060 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02061 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02062 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02063 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
02064 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02065
02066
#if LH_DATA_OUT_COUNT_4
02067
aVal = ( ako0 * paNewVal0[3] +
02068 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02069 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02070 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02071 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
02072 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02073 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02074 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02075 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
02076 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02077
#endif
02078
02079
#else
02080
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
02081 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02082 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02083 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02084 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02085 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
02086 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02087 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02088 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02089 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02090 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
02091 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02092 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02093 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02094 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02095
#if LH_DATA_OUT_COUNT_4
02096
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
02097 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02098 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02099 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02100 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02101
#endif
02102
#endif
02103
02104
#else
02105
__asm {
02106 mov eax, paNewVal0
02107
02108 mov ebx, ako0
02109 movq mm5, MMXTab [ebx*8]
02110
#ifdef Test_mode
02111
movq TestRam,mm5
02112
#endif
02113
punpcklbw mm1,[eax]
02114 mov ebx, ako1
02115 psrlw mm1,8
02116
#ifdef Test_mode
02117
movq TestRam,mm1
02118
#endif
02119
02120 pmullw mm5,mm1
02121 movq mm6, MMXTab [ebx*8]
02122
#ifdef Test_mode
02123
movq TestRam,mm6
02124
#endif
02125
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02126 mov ebx, ako2
02127 psrlw mm2,8
02128
#ifdef Test_mode
02129
movq TestRam,mm2
02130
#endif
02131
pmullw mm6,mm2
02132
02133 movq mm7, MMXTab [ebx*8]
02134 paddusw mm5,mm6
02135
#ifdef Test_mode
02136
movq TestRam,mm7
02137
#endif
02138
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02139 mov ebx, ako3
02140 psrlw mm1,8
02141
#ifdef Test_mode
02142
movq TestRam,mm1
02143
#endif
02144
pmullw mm7,mm1
02145
02146 movq mm6, MMXTab [ebx*8]
02147 paddusw mm5,mm7
02148
#ifdef Test_mode
02149
movq TestRam,mm6
02150
#endif
02151
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02152 mov ebx, ein_regM
02153 psrlw mm2,8
02154
#ifdef Test_mode
02155
movq TestRam,mm2
02156
#endif
02157
pmullw mm6,mm2
02158
02159 movq mm7, MMXTab [ebx*8]
02160 paddusw mm5,mm6
02161
#ifdef Test_mode
02162
movq TestRam,mm7
02163
#endif
02164
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02165 mov ebx, ako2
02166 psrlw mm1,8
02167
#ifdef Test_mode
02168
movq TestRam,mm1
02169
#endif
02170
pmullw mm7,mm1
02171 paddusw mm5,mm7
02172
#ifdef Test_mode
02173
movq TestRam,mm5
02174
#endif
02175
02176
02177 xor eax,eax
02178 psrlw mm5,
LH_DATA_SHR
02179 movq ak,mm5
02180
02181 mov ax,ak
02182 mov esi,My_OutputLut
02183 mov al,
BYTE PTR[eax+esi]
02184 mov edi,output0
02185 mov [edi], al
02186 mov ax,ak+2
02187 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
02188 mov edi,output1
02189 mov [edi], al
02190 mov ax,ak+4
02191 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
02192 mov edi,output2
02193 mov [edi], al
02194
#if LH_DATA_OUT_COUNT_4
02195
mov ax,ak+6
02196 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
02197 mov edi,output3
02198 mov [edi], al
02199
#endif
02200
02201
02202 }
02203
#endif
02204
}
02205
else if(ein_regY >= ein_regK )
02206 {
02207 ako0 =
LH_ADR_BEREICH_SEL - ein_regY;
02208 ako1 = ein_regY - ein_regK;
02209 ako2 = ein_regK - ein_regC;
02210 ako3 = ein_regC - ein_regM;
02211
#if LH_LUT_DATA_SIZE_16
02212
#if LH_DATA_OUT_SIZE_16
02213
02214 aVal = ( ako0 * paNewVal0[0] +
02215 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02216 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02217 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02218 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
02219 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02220 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02221 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02222 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
02223 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02224
02225 aVal = ( ako0 * paNewVal0[1] +
02226 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02227 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02228 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02229 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
02230 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02231 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02232 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02233 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
02234 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02235
02236 aVal = ( ako0 * paNewVal0[2] +
02237 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02238 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02239 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02240 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
02241 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02242 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02243 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02244 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
02245 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02246
02247
#if LH_DATA_OUT_COUNT_4
02248
aVal = ( ako0 * paNewVal0[3] +
02249 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02250 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02251 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02252 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
02253 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02254 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02255 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02256 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
02257 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02258
#endif
02259
02260
#else
02261
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
02262 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02263 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02264 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02265 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02266 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
02267 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02268 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02269 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02270 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02271 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
02272 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02273 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02274 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02275 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02276
#if LH_DATA_OUT_COUNT_4
02277
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
02278 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02279 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02280 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02281 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02282
#endif
02283
#endif
02284
02285
#else
02286
__asm {
02287 mov eax, paNewVal0
02288
02289 mov ebx, ako0
02290 movq mm5, MMXTab [ebx*8]
02291
#ifdef Test_mode
02292
movq TestRam,mm5
02293
#endif
02294
punpcklbw mm1,[eax]
02295 mov ebx, ako1
02296 psrlw mm1,8
02297
#ifdef Test_mode
02298
movq TestRam,mm1
02299
#endif
02300
02301 pmullw mm5,mm1
02302 movq mm6, MMXTab [ebx*8]
02303
#ifdef Test_mode
02304
movq TestRam,mm6
02305
#endif
02306
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02307 mov ebx, ako2
02308 psrlw mm2,8
02309
#ifdef Test_mode
02310
movq TestRam,mm2
02311
#endif
02312
pmullw mm6,mm2
02313
02314 movq mm7, MMXTab [ebx*8]
02315 paddusw mm5,mm6
02316
#ifdef Test_mode
02317
movq TestRam,mm7
02318
#endif
02319
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02320 mov ebx, ako3
02321 psrlw mm1,8
02322
#ifdef Test_mode
02323
movq TestRam,mm1
02324
#endif
02325
pmullw mm7,mm1
02326
02327 movq mm6, MMXTab [ebx*8]
02328 paddusw mm5,mm7
02329
#ifdef Test_mode
02330
movq TestRam,mm6
02331
#endif
02332
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02333 mov ebx, ein_regM
02334 psrlw mm2,8
02335
#ifdef Test_mode
02336
movq TestRam,mm2
02337
#endif
02338
pmullw mm6,mm2
02339
02340 movq mm7, MMXTab [ebx*8]
02341 paddusw mm5,mm6
02342
#ifdef Test_mode
02343
movq TestRam,mm7
02344
#endif
02345
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02346 mov ebx, ako2
02347 psrlw mm1,8
02348
#ifdef Test_mode
02349
movq TestRam,mm1
02350
#endif
02351
pmullw mm7,mm1
02352 paddusw mm5,mm7
02353
#ifdef Test_mode
02354
movq TestRam,mm5
02355
#endif
02356
02357
02358 xor eax,eax
02359 psrlw mm5,
LH_DATA_SHR
02360 movq ak,mm5
02361
02362 mov ax,ak
02363 mov esi,My_OutputLut
02364 mov al,
BYTE PTR[eax+esi]
02365 mov edi,output0
02366 mov [edi], al
02367 mov ax,ak+2
02368 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
02369 mov edi,output1
02370 mov [edi], al
02371 mov ax,ak+4
02372 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
02373 mov edi,output2
02374 mov [edi], al
02375
#if LH_DATA_OUT_COUNT_4
02376
mov ax,ak+6
02377 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
02378 mov edi,output3
02379 mov [edi], al
02380
#endif
02381
02382
02383 }
02384
#endif
02385
}
02386
else
02387 {
02388 ako0 =
LH_ADR_BEREICH_SEL - ein_regK;
02389 ako1 = ein_regK - ein_regY;
02390 ako2 = ein_regY - ein_regC;
02391 ako3 = ein_regC - ein_regM;
02392
#if LH_LUT_DATA_SIZE_16
02393
#if LH_DATA_OUT_SIZE_16
02394
02395 aVal = ( ako0 * paNewVal0[0] +
02396 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02397 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02398 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02399 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
02400 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02401 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02402 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02403 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
02404 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02405
02406 aVal = ( ako0 * paNewVal0[1] +
02407 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02408 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02409 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02410 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
02411 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02412 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02413 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02414 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
02415 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02416
02417 aVal = ( ako0 * paNewVal0[2] +
02418 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02419 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02420 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02421 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
02422 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02423 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02424 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02425 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
02426 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02427
02428
#if LH_DATA_OUT_COUNT_4
02429
aVal = ( ako0 * paNewVal0[3] +
02430 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02431 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02432 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02433 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
02434 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02435 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02436 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02437 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
02438 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02439
#endif
02440
02441
#else
02442
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
02443 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02444 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02445 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02446 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02447 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
02448 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02449 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02450 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02451 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02452 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
02453 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02454 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02455 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02456 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02457
#if LH_DATA_OUT_COUNT_4
02458
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
02459 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02460 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02461 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02462 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02463
#endif
02464
#endif
02465
02466
#else
02467
__asm {
02468 mov eax, paNewVal0
02469
02470 mov ebx, ako0
02471 movq mm5, MMXTab [ebx*8]
02472
#ifdef Test_mode
02473
movq TestRam,mm5
02474
#endif
02475
punpcklbw mm1,[eax]
02476 mov ebx, ako1
02477 psrlw mm1,8
02478
#ifdef Test_mode
02479
movq TestRam,mm1
02480
#endif
02481
02482 pmullw mm5,mm1
02483 movq mm6, MMXTab [ebx*8]
02484
#ifdef Test_mode
02485
movq TestRam,mm6
02486
#endif
02487
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02488 mov ebx, ako2
02489 psrlw mm2,8
02490
#ifdef Test_mode
02491
movq TestRam,mm2
02492
#endif
02493
pmullw mm6,mm2
02494
02495 movq mm7, MMXTab [ebx*8]
02496 paddusw mm5,mm6
02497
#ifdef Test_mode
02498
movq TestRam,mm7
02499
#endif
02500
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02501 mov ebx, ako3
02502 psrlw mm1,8
02503
#ifdef Test_mode
02504
movq TestRam,mm1
02505
#endif
02506
pmullw mm7,mm1
02507
02508 movq mm6, MMXTab [ebx*8]
02509 paddusw mm5,mm7
02510
#ifdef Test_mode
02511
movq TestRam,mm6
02512
#endif
02513
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02514 mov ebx, ein_regM
02515 psrlw mm2,8
02516
#ifdef Test_mode
02517
movq TestRam,mm2
02518
#endif
02519
pmullw mm6,mm2
02520
02521 movq mm7, MMXTab [ebx*8]
02522 paddusw mm5,mm6
02523
#ifdef Test_mode
02524
movq TestRam,mm7
02525
#endif
02526
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02527 mov ebx, ako2
02528 psrlw mm1,8
02529
#ifdef Test_mode
02530
movq TestRam,mm1
02531
#endif
02532
pmullw mm7,mm1
02533 paddusw mm5,mm7
02534
#ifdef Test_mode
02535
movq TestRam,mm5
02536
#endif
02537
02538
02539 xor eax,eax
02540 psrlw mm5,
LH_DATA_SHR
02541 movq ak,mm5
02542
02543 mov ax,ak
02544 mov esi,My_OutputLut
02545 mov al,
BYTE PTR[eax+esi]
02546 mov edi,output0
02547 mov [edi], al
02548 mov ax,ak+2
02549 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
02550 mov edi,output1
02551 mov [edi], al
02552 mov ax,ak+4
02553 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
02554 mov edi,output2
02555 mov [edi], al
02556
#if LH_DATA_OUT_COUNT_4
02557
mov ax,ak+6
02558 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
02559 mov edi,output3
02560 mov [edi], al
02561
#endif
02562
02563
02564 }
02565
#endif
02566
}
02567 }
02568 }
02569
else
02570 {
02571
if( ein_regM >= ein_regC )
02572 {
02573
if( ein_regY >= ein_regK )
02574 {
02575 ako0 =
LH_ADR_BEREICH_SEL - ein_regM;
02576 ako1 = ein_regM - ein_regC;
02577 ako2 = ein_regC - ein_regY;
02578 ako3 = ein_regY - ein_regK;
02579
#if LH_LUT_DATA_SIZE_16
02580
#if LH_DATA_OUT_SIZE_16
02581
02582 aVal = ( ako0 * paNewVal0[0] +
02583 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02584 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02585 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02586 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
02587 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02588 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02589 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02590 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
02591 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02592
02593 aVal = ( ako0 * paNewVal0[1] +
02594 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02595 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02596 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02597 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
02598 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02599 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02600 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02601 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
02602 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02603
02604 aVal = ( ako0 * paNewVal0[2] +
02605 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02606 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02607 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02608 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
02609 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02610 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02611 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02612 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
02613 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02614
02615
#if LH_DATA_OUT_COUNT_4
02616
aVal = ( ako0 * paNewVal0[3] +
02617 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02618 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02619 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02620 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
02621 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02622 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02623 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02624 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
02625 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02626
#endif
02627
02628
#else
02629
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
02630 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02631 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02632 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02633 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02634 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
02635 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02636 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02637 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02638 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02639 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
02640 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02641 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02642 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02643 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02644
#if LH_DATA_OUT_COUNT_4
02645
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
02646 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02647 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02648 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02649 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02650
#endif
02651
#endif
02652
02653
#else
02654
__asm {
02655 mov eax, paNewVal0
02656
02657 mov ebx, ako0
02658 movq mm5, MMXTab [ebx*8]
02659
#ifdef Test_mode
02660
movq TestRam,mm5
02661
#endif
02662
punpcklbw mm1,[eax]
02663 mov ebx, ako1
02664 psrlw mm1,8
02665
#ifdef Test_mode
02666
movq TestRam,mm1
02667
#endif
02668
02669 pmullw mm5,mm1
02670 movq mm6, MMXTab [ebx*8]
02671
#ifdef Test_mode
02672
movq TestRam,mm6
02673
#endif
02674
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02675 mov ebx, ako2
02676 psrlw mm2,8
02677
#ifdef Test_mode
02678
movq TestRam,mm2
02679
#endif
02680
pmullw mm6,mm2
02681
02682 movq mm7, MMXTab [ebx*8]
02683 paddusw mm5,mm6
02684
#ifdef Test_mode
02685
movq TestRam,mm7
02686
#endif
02687
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02688 mov ebx, ako3
02689 psrlw mm1,8
02690
#ifdef Test_mode
02691
movq TestRam,mm1
02692
#endif
02693
pmullw mm7,mm1
02694
02695 movq mm6, MMXTab [ebx*8]
02696 paddusw mm5,mm7
02697
#ifdef Test_mode
02698
movq TestRam,mm6
02699
#endif
02700
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02701 mov ebx, ein_regK
02702 psrlw mm2,8
02703
#ifdef Test_mode
02704
movq TestRam,mm2
02705
#endif
02706
pmullw mm6,mm2
02707
02708 movq mm7, MMXTab [ebx*8]
02709 paddusw mm5,mm6
02710
#ifdef Test_mode
02711
movq TestRam,mm7
02712
#endif
02713
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02714 mov ebx, ako2
02715 psrlw mm1,8
02716
#ifdef Test_mode
02717
movq TestRam,mm1
02718
#endif
02719
pmullw mm7,mm1
02720 paddusw mm5,mm7
02721
#ifdef Test_mode
02722
movq TestRam,mm5
02723
#endif
02724
02725
02726 xor eax,eax
02727 psrlw mm5,
LH_DATA_SHR
02728 movq ak,mm5
02729
02730 mov ax,ak
02731 mov esi,My_OutputLut
02732 mov al,
BYTE PTR[eax+esi]
02733 mov edi,output0
02734 mov [edi], al
02735 mov ax,ak+2
02736 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
02737 mov edi,output1
02738 mov [edi], al
02739 mov ax,ak+4
02740 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
02741 mov edi,output2
02742 mov [edi], al
02743
#if LH_DATA_OUT_COUNT_4
02744
mov ax,ak+6
02745 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
02746 mov edi,output3
02747 mov [edi], al
02748
#endif
02749
02750
02751 }
02752
#endif
02753
}
02754
else if(ein_regC >= ein_regK )
02755 {
02756 ako0 =
LH_ADR_BEREICH_SEL - ein_regM;
02757 ako1 = ein_regM - ein_regC;
02758 ako2 = ein_regC - ein_regK;
02759 ako3 = ein_regK - ein_regY;
02760
#if LH_LUT_DATA_SIZE_16
02761
#if LH_DATA_OUT_SIZE_16
02762
02763 aVal = ( ako0 * paNewVal0[0] +
02764 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02765 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02766 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02767 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
02768 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02769 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02770 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02771 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
02772 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02773
02774 aVal = ( ako0 * paNewVal0[1] +
02775 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02776 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02777 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02778 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
02779 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02780 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02781 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02782 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
02783 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02784
02785 aVal = ( ako0 * paNewVal0[2] +
02786 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02787 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02788 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02789 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
02790 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02791 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02792 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02793 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
02794 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02795
02796
#if LH_DATA_OUT_COUNT_4
02797
aVal = ( ako0 * paNewVal0[3] +
02798 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02799 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02800 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02801 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
02802 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02803 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02804 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02805 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
02806 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02807
#endif
02808
02809
#else
02810
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
02811 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02812 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02813 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02814 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02815 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
02816 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02817 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02818 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02819 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02820 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
02821 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02822 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02823 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02824 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02825
#if LH_DATA_OUT_COUNT_4
02826
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
02827 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02828 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02829 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02830 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02831
#endif
02832
#endif
02833
02834
#else
02835
__asm {
02836 mov eax, paNewVal0
02837
02838 mov ebx, ako0
02839 movq mm5, MMXTab [ebx*8]
02840
#ifdef Test_mode
02841
movq TestRam,mm5
02842
#endif
02843
punpcklbw mm1,[eax]
02844 mov ebx, ako1
02845 psrlw mm1,8
02846
#ifdef Test_mode
02847
movq TestRam,mm1
02848
#endif
02849
02850 pmullw mm5,mm1
02851 movq mm6, MMXTab [ebx*8]
02852
#ifdef Test_mode
02853
movq TestRam,mm6
02854
#endif
02855
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02856 mov ebx, ako2
02857 psrlw mm2,8
02858
#ifdef Test_mode
02859
movq TestRam,mm2
02860
#endif
02861
pmullw mm6,mm2
02862
02863 movq mm7, MMXTab [ebx*8]
02864 paddusw mm5,mm6
02865
#ifdef Test_mode
02866
movq TestRam,mm7
02867
#endif
02868
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
02869 mov ebx, ako3
02870 psrlw mm1,8
02871
#ifdef Test_mode
02872
movq TestRam,mm1
02873
#endif
02874
pmullw mm7,mm1
02875
02876 movq mm6, MMXTab [ebx*8]
02877 paddusw mm5,mm7
02878
#ifdef Test_mode
02879
movq TestRam,mm6
02880
#endif
02881
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02882 mov ebx, ein_regY
02883 psrlw mm2,8
02884
#ifdef Test_mode
02885
movq TestRam,mm2
02886
#endif
02887
pmullw mm6,mm2
02888
02889 movq mm7, MMXTab [ebx*8]
02890 paddusw mm5,mm6
02891
#ifdef Test_mode
02892
movq TestRam,mm7
02893
#endif
02894
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
02895 mov ebx, ako2
02896 psrlw mm1,8
02897
#ifdef Test_mode
02898
movq TestRam,mm1
02899
#endif
02900
pmullw mm7,mm1
02901 paddusw mm5,mm7
02902
#ifdef Test_mode
02903
movq TestRam,mm5
02904
#endif
02905
02906
02907 xor eax,eax
02908 psrlw mm5,
LH_DATA_SHR
02909 movq ak,mm5
02910
02911 mov ax,ak
02912 mov esi,My_OutputLut
02913 mov al,
BYTE PTR[eax+esi]
02914 mov edi,output0
02915 mov [edi], al
02916 mov ax,ak+2
02917 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
02918 mov edi,output1
02919 mov [edi], al
02920 mov ax,ak+4
02921 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
02922 mov edi,output2
02923 mov [edi], al
02924
#if LH_DATA_OUT_COUNT_4
02925
mov ax,ak+6
02926 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
02927 mov edi,output3
02928 mov [edi], al
02929
#endif
02930
02931
02932 }
02933
#endif
02934
}
02935
else if(ein_regM >= ein_regK )
02936 {
02937 ako0 =
LH_ADR_BEREICH_SEL - ein_regM;
02938 ako1 = ein_regM - ein_regK;
02939 ako2 = ein_regK - ein_regC;
02940 ako3 = ein_regC - ein_regY;
02941
#if LH_LUT_DATA_SIZE_16
02942
#if LH_DATA_OUT_SIZE_16
02943
02944 aVal = ( ako0 * paNewVal0[0] +
02945 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02946 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02947 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02948 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
02949 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02950 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02951 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02952 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
02953 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02954
02955 aVal = ( ako0 * paNewVal0[1] +
02956 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02957 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02958 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02959 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
02960 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02961 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02962 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02963 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
02964 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02965
02966 aVal = ( ako0 * paNewVal0[2] +
02967 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
02968 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02969 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
02970 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
02971 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02972 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02973 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02974 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
02975 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02976
02977
#if LH_DATA_OUT_COUNT_4
02978
aVal = ( ako0 * paNewVal0[3] +
02979 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
02980 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02981 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
02982 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
02983 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
02984 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
02985 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
02986 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
02987 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
02988
#endif
02989
02990
#else
02991
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
02992 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
02993 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02994 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
02995 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
02996 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
02997 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
02998 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
02999 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03000 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03001 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
03002 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03003 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03004 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03005 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03006
#if LH_DATA_OUT_COUNT_4
03007
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
03008 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03009 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03010 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03011 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03012
#endif
03013
#endif
03014
03015
#else
03016
__asm {
03017 mov eax, paNewVal0
03018
03019 mov ebx, ako0
03020 movq mm5, MMXTab [ebx*8]
03021
#ifdef Test_mode
03022
movq TestRam,mm5
03023
#endif
03024
punpcklbw mm1,[eax]
03025 mov ebx, ako1
03026 psrlw mm1,8
03027
#ifdef Test_mode
03028
movq TestRam,mm1
03029
#endif
03030
03031 pmullw mm5,mm1
03032 movq mm6, MMXTab [ebx*8]
03033
#ifdef Test_mode
03034
movq TestRam,mm6
03035
#endif
03036
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
03037 mov ebx, ako2
03038 psrlw mm2,8
03039
#ifdef Test_mode
03040
movq TestRam,mm2
03041
#endif
03042
pmullw mm6,mm2
03043
03044 movq mm7, MMXTab [ebx*8]
03045 paddusw mm5,mm6
03046
#ifdef Test_mode
03047
movq TestRam,mm7
03048
#endif
03049
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03050 mov ebx, ako3
03051 psrlw mm1,8
03052
#ifdef Test_mode
03053
movq TestRam,mm1
03054
#endif
03055
pmullw mm7,mm1
03056
03057 movq mm6, MMXTab [ebx*8]
03058 paddusw mm5,mm7
03059
#ifdef Test_mode
03060
movq TestRam,mm6
03061
#endif
03062
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03063 mov ebx, ein_regY
03064 psrlw mm2,8
03065
#ifdef Test_mode
03066
movq TestRam,mm2
03067
#endif
03068
pmullw mm6,mm2
03069
03070 movq mm7, MMXTab [ebx*8]
03071 paddusw mm5,mm6
03072
#ifdef Test_mode
03073
movq TestRam,mm7
03074
#endif
03075
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03076 mov ebx, ako2
03077 psrlw mm1,8
03078
#ifdef Test_mode
03079
movq TestRam,mm1
03080
#endif
03081
pmullw mm7,mm1
03082 paddusw mm5,mm7
03083
#ifdef Test_mode
03084
movq TestRam,mm5
03085
#endif
03086
03087
03088 xor eax,eax
03089 psrlw mm5,
LH_DATA_SHR
03090 movq ak,mm5
03091
03092 mov ax,ak
03093 mov esi,My_OutputLut
03094 mov al,
BYTE PTR[eax+esi]
03095 mov edi,output0
03096 mov [edi], al
03097 mov ax,ak+2
03098 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
03099 mov edi,output1
03100 mov [edi], al
03101 mov ax,ak+4
03102 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
03103 mov edi,output2
03104 mov [edi], al
03105
#if LH_DATA_OUT_COUNT_4
03106
mov ax,ak+6
03107 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
03108 mov edi,output3
03109 mov [edi], al
03110
#endif
03111
03112
03113 }
03114
#endif
03115
}
03116
else
03117 {
03118 ako0 =
LH_ADR_BEREICH_SEL - ein_regK;
03119 ako1 = ein_regK - ein_regM;
03120 ako2 = ein_regM - ein_regC;
03121 ako3 = ein_regC - ein_regY;
03122
#if LH_LUT_DATA_SIZE_16
03123
#if LH_DATA_OUT_SIZE_16
03124
03125 aVal = ( ako0 * paNewVal0[0] +
03126 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03127 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03128 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03129 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
03130 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03131 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03132 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03133 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
03134 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03135
03136 aVal = ( ako0 * paNewVal0[1] +
03137 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03138 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03139 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03140 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
03141 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03142 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03143 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03144 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
03145 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03146
03147 aVal = ( ako0 * paNewVal0[2] +
03148 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03149 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03150 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03151 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
03152 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03153 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03154 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03155 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
03156 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03157
03158
#if LH_DATA_OUT_COUNT_4
03159
aVal = ( ako0 * paNewVal0[3] +
03160 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03161 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03162 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03163 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
03164 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03165 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03166 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03167 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
03168 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03169
#endif
03170
03171
#else
03172
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
03173 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03174 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03175 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03176 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03177 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
03178 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03179 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03180 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03181 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03182 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
03183 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03184 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03185 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03186 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03187
#if LH_DATA_OUT_COUNT_4
03188
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
03189 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03190 ako2 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03191 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03192 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03193
#endif
03194
#endif
03195
03196
#else
03197
__asm {
03198 mov eax, paNewVal0
03199
03200 mov ebx, ako0
03201 movq mm5, MMXTab [ebx*8]
03202
#ifdef Test_mode
03203
movq TestRam,mm5
03204
#endif
03205
punpcklbw mm1,[eax]
03206 mov ebx, ako1
03207 psrlw mm1,8
03208
#ifdef Test_mode
03209
movq TestRam,mm1
03210
#endif
03211
03212 pmullw mm5,mm1
03213 movq mm6, MMXTab [ebx*8]
03214
#ifdef Test_mode
03215
movq TestRam,mm6
03216
#endif
03217
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03218 mov ebx, ako2
03219 psrlw mm2,8
03220
#ifdef Test_mode
03221
movq TestRam,mm2
03222
#endif
03223
pmullw mm6,mm2
03224
03225 movq mm7, MMXTab [ebx*8]
03226 paddusw mm5,mm6
03227
#ifdef Test_mode
03228
movq TestRam,mm7
03229
#endif
03230
punpcklbw mm1,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03231 mov ebx, ako3
03232 psrlw mm1,8
03233
#ifdef Test_mode
03234
movq TestRam,mm1
03235
#endif
03236
pmullw mm7,mm1
03237
03238 movq mm6, MMXTab [ebx*8]
03239 paddusw mm5,mm7
03240
#ifdef Test_mode
03241
movq TestRam,mm6
03242
#endif
03243
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03244 mov ebx, ein_regY
03245 psrlw mm2,8
03246
#ifdef Test_mode
03247
movq TestRam,mm2
03248
#endif
03249
pmullw mm6,mm2
03250
03251 movq mm7, MMXTab [ebx*8]
03252 paddusw mm5,mm6
03253
#ifdef Test_mode
03254
movq TestRam,mm7
03255
#endif
03256
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03257 mov ebx, ako2
03258 psrlw mm1,8
03259
#ifdef Test_mode
03260
movq TestRam,mm1
03261
#endif
03262
pmullw mm7,mm1
03263 paddusw mm5,mm7
03264
#ifdef Test_mode
03265
movq TestRam,mm5
03266
#endif
03267
03268
03269 xor eax,eax
03270 psrlw mm5,
LH_DATA_SHR
03271 movq ak,mm5
03272
03273 mov ax,ak
03274 mov esi,My_OutputLut
03275 mov al,
BYTE PTR[eax+esi]
03276 mov edi,output0
03277 mov [edi], al
03278 mov ax,ak+2
03279 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
03280 mov edi,output1
03281 mov [edi], al
03282 mov ax,ak+4
03283 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
03284 mov edi,output2
03285 mov [edi], al
03286
#if LH_DATA_OUT_COUNT_4
03287
mov ax,ak+6
03288 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
03289 mov edi,output3
03290 mov [edi], al
03291
#endif
03292
03293
03294 }
03295
#endif
03296
}
03297 }
03298
else
03299 {
03300
if( ein_regY >= ein_regM )
03301 {
03302
if( ein_regM >= ein_regK )
03303 {
03304 ako0 =
LH_ADR_BEREICH_SEL - ein_regC;
03305 ako1 = ein_regC - ein_regY;
03306 ako2 = ein_regY - ein_regM;
03307 ako3 = ein_regM - ein_regK;
03308
#if LH_LUT_DATA_SIZE_16
03309
#if LH_DATA_OUT_SIZE_16
03310
03311 aVal = ( ako0 * paNewVal0[0] +
03312 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03313 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03314 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03315 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
03316 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03317 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03318 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03319 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
03320 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03321
03322 aVal = ( ako0 * paNewVal0[1] +
03323 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03324 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03325 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03326 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
03327 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03328 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03329 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03330 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
03331 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03332
03333 aVal = ( ako0 * paNewVal0[2] +
03334 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03335 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03336 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03337 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
03338 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03339 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03340 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03341 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
03342 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03343
03344
#if LH_DATA_OUT_COUNT_4
03345
aVal = ( ako0 * paNewVal0[3] +
03346 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03347 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03348 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03349 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
03350 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03351 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03352 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03353 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
03354 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03355
#endif
03356
03357
#else
03358
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
03359 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03360 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03361 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03362 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03363 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
03364 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03365 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03366 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03367 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03368 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
03369 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03370 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03371 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03372 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03373
#if LH_DATA_OUT_COUNT_4
03374
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
03375 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03376 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03377 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03378 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03379
#endif
03380
#endif
03381
03382
#else
03383
__asm {
03384 mov eax, paNewVal0
03385
03386 mov ebx, ako0
03387 movq mm5, MMXTab [ebx*8]
03388
#ifdef Test_mode
03389
movq TestRam,mm5
03390
#endif
03391
punpcklbw mm1,[eax]
03392 mov ebx, ako1
03393 psrlw mm1,8
03394
#ifdef Test_mode
03395
movq TestRam,mm1
03396
#endif
03397
03398 pmullw mm5,mm1
03399 movq mm6, MMXTab [ebx*8]
03400
#ifdef Test_mode
03401
movq TestRam,mm6
03402
#endif
03403
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
03404 mov ebx, ako2
03405 psrlw mm2,8
03406
#ifdef Test_mode
03407
movq TestRam,mm2
03408
#endif
03409
pmullw mm6,mm2
03410
03411 movq mm7, MMXTab [ebx*8]
03412 paddusw mm5,mm6
03413
#ifdef Test_mode
03414
movq TestRam,mm7
03415
#endif
03416
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
03417 mov ebx, ako3
03418 psrlw mm1,8
03419
#ifdef Test_mode
03420
movq TestRam,mm1
03421
#endif
03422
pmullw mm7,mm1
03423
03424 movq mm6, MMXTab [ebx*8]
03425 paddusw mm5,mm7
03426
#ifdef Test_mode
03427
movq TestRam,mm6
03428
#endif
03429
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
03430 mov ebx, ein_regK
03431 psrlw mm2,8
03432
#ifdef Test_mode
03433
movq TestRam,mm2
03434
#endif
03435
pmullw mm6,mm2
03436
03437 movq mm7, MMXTab [ebx*8]
03438 paddusw mm5,mm6
03439
#ifdef Test_mode
03440
movq TestRam,mm7
03441
#endif
03442
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03443 mov ebx, ako2
03444 psrlw mm1,8
03445
#ifdef Test_mode
03446
movq TestRam,mm1
03447
#endif
03448
pmullw mm7,mm1
03449 paddusw mm5,mm7
03450
#ifdef Test_mode
03451
movq TestRam,mm5
03452
#endif
03453
03454
03455 xor eax,eax
03456 psrlw mm5,
LH_DATA_SHR
03457 movq ak,mm5
03458
03459 mov ax,ak
03460 mov esi,My_OutputLut
03461 mov al,
BYTE PTR[eax+esi]
03462 mov edi,output0
03463 mov [edi], al
03464 mov ax,ak+2
03465 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
03466 mov edi,output1
03467 mov [edi], al
03468 mov ax,ak+4
03469 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
03470 mov edi,output2
03471 mov [edi], al
03472
#if LH_DATA_OUT_COUNT_4
03473
mov ax,ak+6
03474 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
03475 mov edi,output3
03476 mov [edi], al
03477
#endif
03478
03479
03480 }
03481
#endif
03482
}
03483
else if(ein_regY >= ein_regK )
03484 {
03485 ako0 =
LH_ADR_BEREICH_SEL - ein_regC;
03486 ako1 = ein_regC - ein_regY;
03487 ako2 = ein_regY - ein_regK;
03488 ako3 = ein_regK - ein_regM;
03489
#if LH_LUT_DATA_SIZE_16
03490
#if LH_DATA_OUT_SIZE_16
03491
03492 aVal = ( ako0 * paNewVal0[0] +
03493 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03494 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03495 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03496 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
03497 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03498 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03499 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03500 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
03501 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03502
03503 aVal = ( ako0 * paNewVal0[1] +
03504 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03505 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03506 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03507 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
03508 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03509 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03510 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03511 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
03512 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03513
03514 aVal = ( ako0 * paNewVal0[2] +
03515 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03516 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03517 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03518 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
03519 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03520 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03521 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03522 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
03523 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03524
03525
#if LH_DATA_OUT_COUNT_4
03526
aVal = ( ako0 * paNewVal0[3] +
03527 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03528 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03529 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03530 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
03531 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03532 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03533 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03534 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
03535 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03536
#endif
03537
03538
#else
03539
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
03540 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03541 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03542 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03543 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03544 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
03545 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03546 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03547 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03548 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03549 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
03550 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03551 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03552 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03553 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03554
#if LH_DATA_OUT_COUNT_4
03555
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
03556 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03557 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03558 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03559 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03560
#endif
03561
#endif
03562
03563
#else
03564
__asm {
03565 mov eax, paNewVal0
03566
03567 mov ebx, ako0
03568 movq mm5, MMXTab [ebx*8]
03569
#ifdef Test_mode
03570
movq TestRam,mm5
03571
#endif
03572
punpcklbw mm1,[eax]
03573 mov ebx, ako1
03574 psrlw mm1,8
03575
#ifdef Test_mode
03576
movq TestRam,mm1
03577
#endif
03578
03579 pmullw mm5,mm1
03580 movq mm6, MMXTab [ebx*8]
03581
#ifdef Test_mode
03582
movq TestRam,mm6
03583
#endif
03584
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
03585 mov ebx, ako2
03586 psrlw mm2,8
03587
#ifdef Test_mode
03588
movq TestRam,mm2
03589
#endif
03590
pmullw mm6,mm2
03591
03592 movq mm7, MMXTab [ebx*8]
03593 paddusw mm5,mm6
03594
#ifdef Test_mode
03595
movq TestRam,mm7
03596
#endif
03597
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
03598 mov ebx, ako3
03599 psrlw mm1,8
03600
#ifdef Test_mode
03601
movq TestRam,mm1
03602
#endif
03603
pmullw mm7,mm1
03604
03605 movq mm6, MMXTab [ebx*8]
03606 paddusw mm5,mm7
03607
#ifdef Test_mode
03608
movq TestRam,mm6
03609
#endif
03610
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03611 mov ebx, ein_regM
03612 psrlw mm2,8
03613
#ifdef Test_mode
03614
movq TestRam,mm2
03615
#endif
03616
pmullw mm6,mm2
03617
03618 movq mm7, MMXTab [ebx*8]
03619 paddusw mm5,mm6
03620
#ifdef Test_mode
03621
movq TestRam,mm7
03622
#endif
03623
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03624 mov ebx, ako2
03625 psrlw mm1,8
03626
#ifdef Test_mode
03627
movq TestRam,mm1
03628
#endif
03629
pmullw mm7,mm1
03630 paddusw mm5,mm7
03631
#ifdef Test_mode
03632
movq TestRam,mm5
03633
#endif
03634
03635
03636 xor eax,eax
03637 psrlw mm5,
LH_DATA_SHR
03638 movq ak,mm5
03639
03640 mov ax,ak
03641 mov esi,My_OutputLut
03642 mov al,
BYTE PTR[eax+esi]
03643 mov edi,output0
03644 mov [edi], al
03645 mov ax,ak+2
03646 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
03647 mov edi,output1
03648 mov [edi], al
03649 mov ax,ak+4
03650 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
03651 mov edi,output2
03652 mov [edi], al
03653
#if LH_DATA_OUT_COUNT_4
03654
mov ax,ak+6
03655 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
03656 mov edi,output3
03657 mov [edi], al
03658
#endif
03659
03660
03661 }
03662
#endif
03663
}
03664
else if(ein_regC >= ein_regK )
03665 {
03666 ako0 =
LH_ADR_BEREICH_SEL - ein_regC;
03667 ako1 = ein_regC - ein_regK;
03668 ako2 = ein_regK - ein_regY;
03669 ako3 = ein_regY - ein_regM;
03670
#if LH_LUT_DATA_SIZE_16
03671
#if LH_DATA_OUT_SIZE_16
03672
03673 aVal = ( ako0 * paNewVal0[0] +
03674 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03675 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03676 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03677 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
03678 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03679 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03680 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03681 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
03682 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03683
03684 aVal = ( ako0 * paNewVal0[1] +
03685 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03686 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03687 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03688 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
03689 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03690 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03691 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03692 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
03693 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03694
03695 aVal = ( ako0 * paNewVal0[2] +
03696 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03697 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03698 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03699 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
03700 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03701 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03702 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03703 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
03704 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03705
03706
#if LH_DATA_OUT_COUNT_4
03707
aVal = ( ako0 * paNewVal0[3] +
03708 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03709 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03710 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03711 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
03712 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03713 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03714 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03715 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
03716 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03717
#endif
03718
03719
#else
03720
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
03721 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
03722 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03723 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03724 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03725 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
03726 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
03727 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03728 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03729 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03730 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
03731 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
03732 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03733 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03734 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03735
#if LH_DATA_OUT_COUNT_4
03736
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
03737 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
03738 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03739 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03740 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03741
#endif
03742
#endif
03743
03744
#else
03745
__asm {
03746 mov eax, paNewVal0
03747
03748 mov ebx, ako0
03749 movq mm5, MMXTab [ebx*8]
03750
#ifdef Test_mode
03751
movq TestRam,mm5
03752
#endif
03753
punpcklbw mm1,[eax]
03754 mov ebx, ako1
03755 psrlw mm1,8
03756
#ifdef Test_mode
03757
movq TestRam,mm1
03758
#endif
03759
03760 pmullw mm5,mm1
03761 movq mm6, MMXTab [ebx*8]
03762
#ifdef Test_mode
03763
movq TestRam,mm6
03764
#endif
03765
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
03766 mov ebx, ako2
03767 psrlw mm2,8
03768
#ifdef Test_mode
03769
movq TestRam,mm2
03770
#endif
03771
pmullw mm6,mm2
03772
03773 movq mm7, MMXTab [ebx*8]
03774 paddusw mm5,mm6
03775
#ifdef Test_mode
03776
movq TestRam,mm7
03777
#endif
03778
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03779 mov ebx, ako3
03780 psrlw mm1,8
03781
#ifdef Test_mode
03782
movq TestRam,mm1
03783
#endif
03784
pmullw mm7,mm1
03785
03786 movq mm6, MMXTab [ebx*8]
03787 paddusw mm5,mm7
03788
#ifdef Test_mode
03789
movq TestRam,mm6
03790
#endif
03791
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03792 mov ebx, ein_regM
03793 psrlw mm2,8
03794
#ifdef Test_mode
03795
movq TestRam,mm2
03796
#endif
03797
pmullw mm6,mm2
03798
03799 movq mm7, MMXTab [ebx*8]
03800 paddusw mm5,mm6
03801
#ifdef Test_mode
03802
movq TestRam,mm7
03803
#endif
03804
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03805 mov ebx, ako2
03806 psrlw mm1,8
03807
#ifdef Test_mode
03808
movq TestRam,mm1
03809
#endif
03810
pmullw mm7,mm1
03811 paddusw mm5,mm7
03812
#ifdef Test_mode
03813
movq TestRam,mm5
03814
#endif
03815
03816
03817 xor eax,eax
03818 psrlw mm5,
LH_DATA_SHR
03819 movq ak,mm5
03820
03821 mov ax,ak
03822 mov esi,My_OutputLut
03823 mov al,
BYTE PTR[eax+esi]
03824 mov edi,output0
03825 mov [edi], al
03826 mov ax,ak+2
03827 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
03828 mov edi,output1
03829 mov [edi], al
03830 mov ax,ak+4
03831 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
03832 mov edi,output2
03833 mov [edi], al
03834
#if LH_DATA_OUT_COUNT_4
03835
mov ax,ak+6
03836 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
03837 mov edi,output3
03838 mov [edi], al
03839
#endif
03840
03841
03842 }
03843
#endif
03844
}
03845
else
03846 {
03847 ako0 =
LH_ADR_BEREICH_SEL - ein_regK;
03848 ako1 = ein_regK - ein_regC;
03849 ako2 = ein_regC - ein_regY;
03850 ako3 = ein_regY - ein_regM;
03851
#if LH_LUT_DATA_SIZE_16
03852
#if LH_DATA_OUT_SIZE_16
03853
03854 aVal = ( ako0 * paNewVal0[0] +
03855 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03856 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03857 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03858 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
03859 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03860 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03861 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03862 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
03863 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03864
03865 aVal = ( ako0 * paNewVal0[1] +
03866 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03867 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03868 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03869 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
03870 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03871 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03872 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03873 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
03874 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03875
03876 aVal = ( ako0 * paNewVal0[2] +
03877 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03878 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03879 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03880 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
03881 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03882 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03883 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03884 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
03885 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03886
03887
#if LH_DATA_OUT_COUNT_4
03888
aVal = ( ako0 * paNewVal0[3] +
03889 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03890 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03891 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03892 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
03893 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
03894 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
03895 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
03896 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
03897 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
03898
#endif
03899
03900
#else
03901
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
03902 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03903 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03904 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
03905 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03906 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
03907 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03908 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03909 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
03910 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03911 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
03912 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03913 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03914 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
03915 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03916
#if LH_DATA_OUT_COUNT_4
03917
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
03918 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03919 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03920 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
03921 ein_regM * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
03922
#endif
03923
#endif
03924
03925
#else
03926
__asm {
03927 mov eax, paNewVal0
03928
03929 mov ebx, ako0
03930 movq mm5, MMXTab [ebx*8]
03931
#ifdef Test_mode
03932
movq TestRam,mm5
03933
#endif
03934
punpcklbw mm1,[eax]
03935 mov ebx, ako1
03936 psrlw mm1,8
03937
#ifdef Test_mode
03938
movq TestRam,mm1
03939
#endif
03940
03941 pmullw mm5,mm1
03942 movq mm6, MMXTab [ebx*8]
03943
#ifdef Test_mode
03944
movq TestRam,mm6
03945
#endif
03946
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03947 mov ebx, ako2
03948 psrlw mm2,8
03949
#ifdef Test_mode
03950
movq TestRam,mm2
03951
#endif
03952
pmullw mm6,mm2
03953
03954 movq mm7, MMXTab [ebx*8]
03955 paddusw mm5,mm6
03956
#ifdef Test_mode
03957
movq TestRam,mm7
03958
#endif
03959
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03960 mov ebx, ako3
03961 psrlw mm1,8
03962
#ifdef Test_mode
03963
movq TestRam,mm1
03964
#endif
03965
pmullw mm7,mm1
03966
03967 movq mm6, MMXTab [ebx*8]
03968 paddusw mm5,mm7
03969
#ifdef Test_mode
03970
movq TestRam,mm6
03971
#endif
03972
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03973 mov ebx, ein_regM
03974 psrlw mm2,8
03975
#ifdef Test_mode
03976
movq TestRam,mm2
03977
#endif
03978
pmullw mm6,mm2
03979
03980 movq mm7, MMXTab [ebx*8]
03981 paddusw mm5,mm6
03982
#ifdef Test_mode
03983
movq TestRam,mm7
03984
#endif
03985
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
03986 mov ebx, ako2
03987 psrlw mm1,8
03988
#ifdef Test_mode
03989
movq TestRam,mm1
03990
#endif
03991
pmullw mm7,mm1
03992 paddusw mm5,mm7
03993
#ifdef Test_mode
03994
movq TestRam,mm5
03995
#endif
03996
03997
03998 xor eax,eax
03999 psrlw mm5,
LH_DATA_SHR
04000 movq ak,mm5
04001
04002 mov ax,ak
04003 mov esi,My_OutputLut
04004 mov al,
BYTE PTR[eax+esi]
04005 mov edi,output0
04006 mov [edi], al
04007 mov ax,ak+2
04008 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
04009 mov edi,output1
04010 mov [edi], al
04011 mov ax,ak+4
04012 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
04013 mov edi,output2
04014 mov [edi], al
04015
#if LH_DATA_OUT_COUNT_4
04016
mov ax,ak+6
04017 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
04018 mov edi,output3
04019 mov [edi], al
04020
#endif
04021
04022
04023 }
04024
#endif
04025
}
04026 }
04027
else if( ein_regY >= ein_regK )
04028 {
04029 ako0 =
LH_ADR_BEREICH_SEL - ein_regC;
04030 ako1 = ein_regC - ein_regM;
04031 ako2 = ein_regM - ein_regY;
04032 ako3 = ein_regY - ein_regK;
04033
#if LH_LUT_DATA_SIZE_16
04034
#if LH_DATA_OUT_SIZE_16
04035
04036 aVal = ( ako0 * paNewVal0[0] +
04037 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04038 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04039 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04040 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
04041 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04042 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04043 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04044 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
04045 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04046
04047 aVal = ( ako0 * paNewVal0[1] +
04048 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04049 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04050 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04051 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
04052 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04053 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04054 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04055 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
04056 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04057
04058 aVal = ( ako0 * paNewVal0[2] +
04059 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04060 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04061 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04062 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
04063 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04064 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04065 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04066 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
04067 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04068
04069
#if LH_DATA_OUT_COUNT_4
04070
aVal = ( ako0 * paNewVal0[3] +
04071 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04072 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04073 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04074 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
04075 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04076 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04077 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04078 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
04079 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04080
#endif
04081
04082
#else
04083
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
04084 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04085 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04086 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04087 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04088 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
04089 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04090 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04091 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04092 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04093 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
04094 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04095 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04096 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04097 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04098
#if LH_DATA_OUT_COUNT_4
04099
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
04100 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04101 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04102 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04103 ein_regK * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04104
#endif
04105
#endif
04106
04107
#else
04108
__asm {
04109 mov eax, paNewVal0
04110
04111 mov ebx, ako0
04112 movq mm5, MMXTab [ebx*8]
04113
#ifdef Test_mode
04114
movq TestRam,mm5
04115
#endif
04116
punpcklbw mm1,[eax]
04117 mov ebx, ako1
04118 psrlw mm1,8
04119
#ifdef Test_mode
04120
movq TestRam,mm1
04121
#endif
04122
04123 pmullw mm5,mm1
04124 movq mm6, MMXTab [ebx*8]
04125
#ifdef Test_mode
04126
movq TestRam,mm6
04127
#endif
04128
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
04129 mov ebx, ako2
04130 psrlw mm2,8
04131
#ifdef Test_mode
04132
movq TestRam,mm2
04133
#endif
04134
pmullw mm6,mm2
04135
04136 movq mm7, MMXTab [ebx*8]
04137 paddusw mm5,mm6
04138
#ifdef Test_mode
04139
movq TestRam,mm7
04140
#endif
04141
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
04142 mov ebx, ako3
04143 psrlw mm1,8
04144
#ifdef Test_mode
04145
movq TestRam,mm1
04146
#endif
04147
pmullw mm7,mm1
04148
04149 movq mm6, MMXTab [ebx*8]
04150 paddusw mm5,mm7
04151
#ifdef Test_mode
04152
movq TestRam,mm6
04153
#endif
04154
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
04155 mov ebx, ein_regK
04156 psrlw mm2,8
04157
#ifdef Test_mode
04158
movq TestRam,mm2
04159
#endif
04160
pmullw mm6,mm2
04161
04162 movq mm7, MMXTab [ebx*8]
04163 paddusw mm5,mm6
04164
#ifdef Test_mode
04165
movq TestRam,mm7
04166
#endif
04167
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04168 mov ebx, ako2
04169 psrlw mm1,8
04170
#ifdef Test_mode
04171
movq TestRam,mm1
04172
#endif
04173
pmullw mm7,mm1
04174 paddusw mm5,mm7
04175
#ifdef Test_mode
04176
movq TestRam,mm5
04177
#endif
04178
04179
04180 xor eax,eax
04181 psrlw mm5,
LH_DATA_SHR
04182 movq ak,mm5
04183
04184 mov ax,ak
04185 mov esi,My_OutputLut
04186 mov al,
BYTE PTR[eax+esi]
04187 mov edi,output0
04188 mov [edi], al
04189 mov ax,ak+2
04190 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
04191 mov edi,output1
04192 mov [edi], al
04193 mov ax,ak+4
04194 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
04195 mov edi,output2
04196 mov [edi], al
04197
#if LH_DATA_OUT_COUNT_4
04198
mov ax,ak+6
04199 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
04200 mov edi,output3
04201 mov [edi], al
04202
#endif
04203
04204
04205 }
04206
#endif
04207
}
04208
else if(ein_regM >= ein_regK )
04209 {
04210 ako0 =
LH_ADR_BEREICH_SEL - ein_regC;
04211 ako1 = ein_regC - ein_regM;
04212 ako2 = ein_regM - ein_regK;
04213 ako3 = ein_regK - ein_regY;
04214
#if LH_LUT_DATA_SIZE_16
04215
#if LH_DATA_OUT_SIZE_16
04216
04217 aVal = ( ako0 * paNewVal0[0] +
04218 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04219 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04220 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04221 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
04222 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04223 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04224 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04225 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
04226 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04227
04228 aVal = ( ako0 * paNewVal0[1] +
04229 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04230 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04231 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04232 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
04233 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04234 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04235 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04236 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
04237 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04238
04239 aVal = ( ako0 * paNewVal0[2] +
04240 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04241 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04242 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04243 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
04244 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04245 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04246 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04247 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
04248 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04249
04250
#if LH_DATA_OUT_COUNT_4
04251
aVal = ( ako0 * paNewVal0[3] +
04252 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04253 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04254 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04255 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
04256 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04257 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04258 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04259 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
04260 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04261
#endif
04262
04263
#else
04264
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
04265 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04266 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04267 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04268 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04269 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
04270 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04271 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04272 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04273 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04274 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
04275 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04276 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04277 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04278 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04279
#if LH_DATA_OUT_COUNT_4
04280
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
04281 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04282 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04283 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04284 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04285
#endif
04286
#endif
04287
04288
#else
04289
__asm {
04290 mov eax, paNewVal0
04291
04292 mov ebx, ako0
04293 movq mm5, MMXTab [ebx*8]
04294
#ifdef Test_mode
04295
movq TestRam,mm5
04296
#endif
04297
punpcklbw mm1,[eax]
04298 mov ebx, ako1
04299 psrlw mm1,8
04300
#ifdef Test_mode
04301
movq TestRam,mm1
04302
#endif
04303
04304 pmullw mm5,mm1
04305 movq mm6, MMXTab [ebx*8]
04306
#ifdef Test_mode
04307
movq TestRam,mm6
04308
#endif
04309
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
04310 mov ebx, ako2
04311 psrlw mm2,8
04312
#ifdef Test_mode
04313
movq TestRam,mm2
04314
#endif
04315
pmullw mm6,mm2
04316
04317 movq mm7, MMXTab [ebx*8]
04318 paddusw mm5,mm6
04319
#ifdef Test_mode
04320
movq TestRam,mm7
04321
#endif
04322
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
04323 mov ebx, ako3
04324 psrlw mm1,8
04325
#ifdef Test_mode
04326
movq TestRam,mm1
04327
#endif
04328
pmullw mm7,mm1
04329
04330 movq mm6, MMXTab [ebx*8]
04331 paddusw mm5,mm7
04332
#ifdef Test_mode
04333
movq TestRam,mm6
04334
#endif
04335
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04336 mov ebx, ein_regY
04337 psrlw mm2,8
04338
#ifdef Test_mode
04339
movq TestRam,mm2
04340
#endif
04341
pmullw mm6,mm2
04342
04343 movq mm7, MMXTab [ebx*8]
04344 paddusw mm5,mm6
04345
#ifdef Test_mode
04346
movq TestRam,mm7
04347
#endif
04348
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04349 mov ebx, ako2
04350 psrlw mm1,8
04351
#ifdef Test_mode
04352
movq TestRam,mm1
04353
#endif
04354
pmullw mm7,mm1
04355 paddusw mm5,mm7
04356
#ifdef Test_mode
04357
movq TestRam,mm5
04358
#endif
04359
04360
04361 xor eax,eax
04362 psrlw mm5,
LH_DATA_SHR
04363 movq ak,mm5
04364
04365 mov ax,ak
04366 mov esi,My_OutputLut
04367 mov al,
BYTE PTR[eax+esi]
04368 mov edi,output0
04369 mov [edi], al
04370 mov ax,ak+2
04371 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
04372 mov edi,output1
04373 mov [edi], al
04374 mov ax,ak+4
04375 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
04376 mov edi,output2
04377 mov [edi], al
04378
#if LH_DATA_OUT_COUNT_4
04379
mov ax,ak+6
04380 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
04381 mov edi,output3
04382 mov [edi], al
04383
#endif
04384
04385
04386 }
04387
#endif
04388
}
04389
else
04390 {
04391
if(ein_regC >= ein_regK )
04392 {
04393 ako0 =
LH_ADR_BEREICH_SEL - ein_regC;
04394 ako1 = ein_regC - ein_regK;
04395 ako2 = ein_regK - ein_regM;
04396 ako3 = ein_regM - ein_regY;
04397
#if LH_LUT_DATA_SIZE_16
04398
#if LH_DATA_OUT_SIZE_16
04399
04400 aVal = ( ako0 * paNewVal0[0] +
04401 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04402 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04403 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04404 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
04405 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04406 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04407 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04408 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
04409 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04410
04411 aVal = ( ako0 * paNewVal0[1] +
04412 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04413 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04414 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04415 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
04416 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04417 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04418 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04419 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
04420 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04421
04422 aVal = ( ako0 * paNewVal0[2] +
04423 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04424 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04425 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04426 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
04427 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04428 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04429 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04430 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
04431 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04432
04433
#if LH_DATA_OUT_COUNT_4
04434
aVal = ( ako0 * paNewVal0[3] +
04435 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04436 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04437 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04438 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
04439 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04440 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04441 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04442 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
04443 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04444
#endif
04445
04446
#else
04447
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
04448 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+0] +
04449 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04450 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04451 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04452 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
04453 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+1] +
04454 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04455 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04456 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04457 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
04458 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+2] +
04459 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04460 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04461 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04462
#if LH_DATA_OUT_COUNT_4
04463
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
04464 ako1 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)+3] +
04465 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04466 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04467 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04468
#endif
04469
#endif
04470
04471
#else
04472
__asm {
04473 mov eax, paNewVal0
04474
04475 mov ebx, ako0
04476 movq mm5, MMXTab [ebx*8]
04477
#ifdef Test_mode
04478
movq TestRam,mm5
04479
#endif
04480
punpcklbw mm1,[eax]
04481 mov ebx, ako1
04482 psrlw mm1,8
04483
#ifdef Test_mode
04484
movq TestRam,mm1
04485
#endif
04486
04487 pmullw mm5,mm1
04488 movq mm6, MMXTab [ebx*8]
04489
#ifdef Test_mode
04490
movq TestRam,mm6
04491
#endif
04492
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
04493 mov ebx, ako2
04494 psrlw mm2,8
04495
#ifdef Test_mode
04496
movq TestRam,mm2
04497
#endif
04498
pmullw mm6,mm2
04499
04500 movq mm7, MMXTab [ebx*8]
04501 paddusw mm5,mm6
04502
#ifdef Test_mode
04503
movq TestRam,mm7
04504
#endif
04505
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04506 mov ebx, ako3
04507 psrlw mm1,8
04508
#ifdef Test_mode
04509
movq TestRam,mm1
04510
#endif
04511
pmullw mm7,mm1
04512
04513 movq mm6, MMXTab [ebx*8]
04514 paddusw mm5,mm7
04515
#ifdef Test_mode
04516
movq TestRam,mm6
04517
#endif
04518
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04519 mov ebx, ein_regY
04520 psrlw mm2,8
04521
#ifdef Test_mode
04522
movq TestRam,mm2
04523
#endif
04524
pmullw mm6,mm2
04525
04526 movq mm7, MMXTab [ebx*8]
04527 paddusw mm5,mm6
04528
#ifdef Test_mode
04529
movq TestRam,mm7
04530
#endif
04531
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04532 mov ebx, ako2
04533 psrlw mm1,8
04534
#ifdef Test_mode
04535
movq TestRam,mm1
04536
#endif
04537
pmullw mm7,mm1
04538 paddusw mm5,mm7
04539
#ifdef Test_mode
04540
movq TestRam,mm5
04541
#endif
04542
04543
04544 xor eax,eax
04545 psrlw mm5,
LH_DATA_SHR
04546 movq ak,mm5
04547
04548 mov ax,ak
04549 mov esi,My_OutputLut
04550 mov al,
BYTE PTR[eax+esi]
04551 mov edi,output0
04552 mov [edi], al
04553 mov ax,ak+2
04554 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
04555 mov edi,output1
04556 mov [edi], al
04557 mov ax,ak+4
04558 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
04559 mov edi,output2
04560 mov [edi], al
04561
#if LH_DATA_OUT_COUNT_4
04562
mov ax,ak+6
04563 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
04564 mov edi,output3
04565 mov [edi], al
04566
#endif
04567
04568
04569 }
04570
#endif
04571
}
04572
else
04573 {
04574 ako0 =
LH_ADR_BEREICH_SEL - ein_regK;
04575 ako1 = ein_regK - ein_regC;
04576 ako2 = ein_regC - ein_regM;
04577 ako3 = ein_regM - ein_regY;
04578
#if LH_LUT_DATA_SIZE_16
04579
#if LH_DATA_OUT_SIZE_16
04580
04581 aVal = ( ako0 * paNewVal0[0] +
04582 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04583 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04584 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04585 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] );
04586 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04587 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04588 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04589 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
04590 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04591
04592 aVal = ( ako0 * paNewVal0[1] +
04593 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04594 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04595 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04596 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] );
04597 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04598 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04599 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04600 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
04601 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04602
04603 aVal = ( ako0 * paNewVal0[2] +
04604 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04605 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04606 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04607 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] );
04608 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04609 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04610 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04611 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
04612 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04613
04614
#if LH_DATA_OUT_COUNT_4
04615
aVal = ( ako0 * paNewVal0[3] +
04616 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04617 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04618 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04619 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] );
04620 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
04621 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
04622 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
04623 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
04624 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
04625
#endif
04626
04627
#else
04628
*output0 = My_OutputLut[(( ako0 * paNewVal0[0] +
04629 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04630 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04631 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] +
04632 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+0] )>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04633 *output1 = My_OutputLut[(( ako0 * paNewVal0[1] +
04634 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04635 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04636 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] +
04637 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+1] )>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04638 *output2 = My_OutputLut[(( ako0 * paNewVal0[2] +
04639 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04640 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04641 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] +
04642 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+2] )>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04643
#if LH_DATA_OUT_COUNT_4
04644
*output3 = My_OutputLut[(( ako0 * paNewVal0[3] +
04645 ako1 * paNewVal0[(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04646 ako2 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04647 ako3 * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] +
04648 ein_regY * paNewVal0[(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)+3] )>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
04649
#endif
04650
#endif
04651
04652
#else
04653
__asm {
04654 mov eax, paNewVal0
04655
04656 mov ebx, ako0
04657 movq mm5, MMXTab [ebx*8]
04658
#ifdef Test_mode
04659
movq TestRam,mm5
04660
#endif
04661
punpcklbw mm1,[eax]
04662 mov ebx, ako1
04663 psrlw mm1,8
04664
#ifdef Test_mode
04665
movq TestRam,mm1
04666
#endif
04667
04668 pmullw mm5,mm1
04669 movq mm6, MMXTab [ebx*8]
04670
#ifdef Test_mode
04671
movq TestRam,mm6
04672
#endif
04673
punpcklbw mm2,[eax+(((((((0<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04674 mov ebx, ako2
04675 psrlw mm2,8
04676
#ifdef Test_mode
04677
movq TestRam,mm2
04678
#endif
04679
pmullw mm6,mm2
04680
04681 movq mm7, MMXTab [ebx*8]
04682 paddusw mm5,mm6
04683
#ifdef Test_mode
04684
movq TestRam,mm7
04685
#endif
04686
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04687 mov ebx, ako3
04688 psrlw mm1,8
04689
#ifdef Test_mode
04690
movq TestRam,mm1
04691
#endif
04692
pmullw mm7,mm1
04693
04694 movq mm6, MMXTab [ebx*8]
04695 paddusw mm5,mm7
04696
#ifdef Test_mode
04697
movq TestRam,mm6
04698
#endif
04699
punpcklbw mm2,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 0)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04700 mov ebx, ein_regY
04701 psrlw mm2,8
04702
#ifdef Test_mode
04703
movq TestRam,mm2
04704
#endif
04705
pmullw mm6,mm2
04706
04707 movq mm7, MMXTab [ebx*8]
04708 paddusw mm5,mm6
04709
#ifdef Test_mode
04710
movq TestRam,mm7
04711
#endif
04712
punpcklbw mm1,[eax+(((((((1<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1)<<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
04713 mov ebx, ako2
04714 psrlw mm1,8
04715
#ifdef Test_mode
04716
movq TestRam,mm1
04717
#endif
04718
pmullw mm7,mm1
04719 paddusw mm5,mm7
04720
#ifdef Test_mode
04721
movq TestRam,mm5
04722
#endif
04723
04724
04725 xor eax,eax
04726 psrlw mm5,
LH_DATA_SHR
04727 movq ak,mm5
04728
04729 mov ax,ak
04730 mov esi,My_OutputLut
04731 mov al,
BYTE PTR[eax+esi]
04732 mov edi,output0
04733 mov [edi], al
04734 mov ax,ak+2
04735 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
04736 mov edi,output1
04737 mov [edi], al
04738 mov ax,ak+4
04739 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
04740 mov edi,output2
04741 mov [edi], al
04742
#if LH_DATA_OUT_COUNT_4
04743
mov ax,ak+6
04744 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
04745 mov edi,output3
04746 mov [edi], al
04747
#endif
04748
04749
04750 }
04751
#endif
04752
}
04753 }
04754 }
04755 }
04756
#if LH_DATA_OUT_SIZE_16 && ! LH_LUT_DATA_SIZE_16
04757
*output0 |= (*output0 << 8);
04758 *output1 |= (*output1 << 8);
04759 *output2 |= (*output2 << 8);
04760
#if LH_DATA_OUT_COUNT_4
04761
*output3 |= (*output3 << 8);
04762
#endif
04763
#endif
04764
04765
if (Mode ==
LH_CALC_ENGINE_P_TO_P)
04766 {
04767
while (--i)
04768 {
04769 input0 += inputOffset;
04770 input1 += inputOffset;
04771 input2 += inputOffset;
04772 input3 += inputOffset;
04773 output0 += outputOffset;
04774 output1 += outputOffset;
04775 output2 += outputOffset;
04776
#if LH_DATA_OUT_COUNT_4
04777
output3 += outputOffset;
04778
#endif
04779
04780
if ((*input0 ^ ein_cache[0]) || (*input1 ^ ein_cache[1]) || (*input2 ^ ein_cache[2]) || (*input3 ^ ein_cache[3]))
04781 {
04782
break;
04783 }
04784 *output0 = output0[-outputOffset];
04785 *output1 = output1[-outputOffset];
04786 *output2 = output2[-outputOffset];
04787
#if LH_DATA_OUT_COUNT_4
04788
*output3 = output3[-outputOffset];
04789
#endif
04790
}
04791 }
04792
else if (Mode ==
LH_CALC_ENGINE_P_TO_U)
04793 {
04794
#if LH_DATA_OUT_COUNT_4
04795
*output4 &= Mask;
04796
#else
04797
*output3 &= Mask;
04798
#endif
04799
while (--i)
04800 {
04801 input0 += inputOffset;
04802 input1 += inputOffset;
04803 input2 += inputOffset;
04804 input3 += inputOffset;
04805 output0 += outputOffset;
04806 output1 += outputOffset;
04807 output2 += outputOffset;
04808 output3 += outputOffset;
04809
#if LH_DATA_OUT_COUNT_4
04810
output4 += outputOffset;
04811
#endif
04812
if ((*input0 ^ ein_cache[0]) || (*input1 ^ ein_cache[1]) || (*input2 ^ ein_cache[2]) || (*input3 ^ ein_cache[3]))
04813 {
04814
break;
04815 }
04816 *output0 = output0[-outputOffset];
04817 *output1 = output1[-outputOffset];
04818 *output2 = output2[-outputOffset];
04819
#if LH_DATA_OUT_COUNT_4
04820
*output3 = output3[-outputOffset];
04821 *output4 &= Mask;
04822
#else
04823
*output3 &= Mask;
04824
#endif
04825
}
04826 }
04827
else
04828 {
04829
#if LH_DATA_OUT_COUNT_4
04830
*output4 = (
LH_DATA_OUT_TYPE)*input4;
04831
#else
04832
*output3 = (
LH_DATA_OUT_TYPE)*input4;
04833
#endif
04834
while (--i)
04835 {
04836 input0 += inputOffset;
04837 input1 += inputOffset;
04838 input2 += inputOffset;
04839 input3 += inputOffset;
04840 input4 += inputOffset;
04841
04842 output0 += outputOffset;
04843 output1 += outputOffset;
04844 output2 += outputOffset;
04845 output3 += outputOffset;
04846
#if LH_DATA_OUT_COUNT_4
04847
output4 += outputOffset;
04848
#endif
04849
if ((*input0 ^ ein_cache[0]) || (*input1 ^ ein_cache[1]) || (*input2 ^ ein_cache[2]) || (*input3 ^ ein_cache[3]))
04850 {
04851
break;
04852 }
04853 *output0 = output0[-outputOffset];
04854 *output1 = output1[-outputOffset];
04855 *output2 = output2[-outputOffset];
04856
#if LH_DATA_OUT_COUNT_4
04857
*output3 = output3[-outputOffset];
04858 *output4 = (
LH_DATA_OUT_TYPE)*input4;
04859
#else
04860
*output3 = (
LH_DATA_OUT_TYPE)*input4;
04861
#endif
04862
}
04863 }
04864 }
04865
if (--LineCount)
04866 {
04867 j++;
04868 input0 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[0] + j * calcParam->cmInputBytesPerLine);
04869 input1 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[1] + j * calcParam->cmInputBytesPerLine);
04870 input2 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[2] + j * calcParam->cmInputBytesPerLine);
04871 input3 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[3] + j * calcParam->cmInputBytesPerLine);
04872 input4 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[4] + j * calcParam->cmInputBytesPerLine);
04873
04874 output0 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[0] + j * calcParam->cmOutputBytesPerLine);
04875 output1 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[1] + j * calcParam->cmOutputBytesPerLine);
04876 output2 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[2] + j * calcParam->cmOutputBytesPerLine);
04877 output3 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[3] + j * calcParam->cmOutputBytesPerLine);
04878
#if LH_DATA_OUT_COUNT_4
04879
output4 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[4] + j * calcParam->cmOutputBytesPerLine);
04880
#endif
04881
}
04882 }
04883 __asm {
04884 emms
04885 frstor bFPUState
04886 }
04887
LH_END_PROC(
LH_CALC_PROC_NAME)
04888
return 0;
04889 }
04890
#else
04891
{
04892
04893
static LH_UINT16 MMXTab [260] =
04894 {
04895 0x0000, 0x0000, 0x0000, 0x0000,
04896 0x0001, 0x0001, 0x0001, 0x0001,
04897 0x0002, 0x0002, 0x0002, 0x0002,
04898 0x0003, 0x0003, 0x0003, 0x0003,
04899 0x0004, 0x0004, 0x0004, 0x0004,
04900 0x0005, 0x0005, 0x0005, 0x0005,
04901 0x0006, 0x0006, 0x0006, 0x0006,
04902 0x0007, 0x0007, 0x0007, 0x0007,
04903 0x0008, 0x0008, 0x0008, 0x0008,
04904 0x0009, 0x0009, 0x0009, 0x0009,
04905 0x000A, 0x000A, 0x000A, 0x000a,
04906 0x000B, 0x000B, 0x000B, 0x000b,
04907 0x000C, 0x000C, 0x000C, 0x000c,
04908 0x000D, 0x000D, 0x000D, 0x000d,
04909 0x000E, 0x000E, 0x000E, 0x000e,
04910 0x000F, 0x000F, 0x000F, 0x000f,
04911 0x0010, 0x0010, 0x0010, 0x0010,
04912 0x0011, 0x0011, 0x0011, 0x0011,
04913 0x0012, 0x0012, 0x0012, 0x0012,
04914 0x0013, 0x0013, 0x0013, 0x0013,
04915 0x0014, 0x0014, 0x0014, 0x0014,
04916 0x0015, 0x0015, 0x0015, 0x0015,
04917 0x0016, 0x0016, 0x0016, 0x0016,
04918 0x0017, 0x0017, 0x0017, 0x0017,
04919 0x0018, 0x0018, 0x0018, 0x0018,
04920 0x0019, 0x0019, 0x0019, 0x0019,
04921 0x001A, 0x001A, 0x001A, 0x001a,
04922 0x001B, 0x001B, 0x001B, 0x001b,
04923 0x001C, 0x001C, 0x001C, 0x001c,
04924 0x001D, 0x001D, 0x001D, 0x001d,
04925 0x001E, 0x001E, 0x001E, 0x001e,
04926 0x001F, 0x001F, 0x001F, 0x001f,
04927 0x0020, 0x0020, 0x0020, 0x0020,
04928 0x0021, 0x0021, 0x0021, 0x0021,
04929 0x0022, 0x0022, 0x0022, 0x0022,
04930 0x0023, 0x0023, 0x0023, 0x0023,
04931 0x0024, 0x0024, 0x0024, 0x0024,
04932 0x0025, 0x0025, 0x0025, 0x0025,
04933 0x0026, 0x0026, 0x0026, 0x0026,
04934 0x0027, 0x0027, 0x0027, 0x0027,
04935 0x0028, 0x0028, 0x0028, 0x0028,
04936 0x0029, 0x0029, 0x0029, 0x0029,
04937 0x002A, 0x002A, 0x002A, 0x002a,
04938 0x002B, 0x002B, 0x002B, 0x002b,
04939 0x002C, 0x002C, 0x002C, 0x002c,
04940 0x002D, 0x002D, 0x002D, 0x002d,
04941 0x002E, 0x002E, 0x002E, 0x002e,
04942 0x002F, 0x002F, 0x002F, 0x002f,
04943 0x0030, 0x0030, 0x0030, 0x0030,
04944 0x0031, 0x0031, 0x0031, 0x0031,
04945 0x0032, 0x0032, 0x0032, 0x0032,
04946 0x0033, 0x0033, 0x0033, 0x0033,
04947 0x0034, 0x0034, 0x0034, 0x0034,
04948 0x0035, 0x0035, 0x0035, 0x0035,
04949 0x0036, 0x0036, 0x0036, 0x0036,
04950 0x0037, 0x0037, 0x0037, 0x0037,
04951 0x0038, 0x0038, 0x0038, 0x0038,
04952 0x0039, 0x0039, 0x0039, 0x0039,
04953 0x003A, 0x003A, 0x003A, 0x003a,
04954 0x003B, 0x003B, 0x003B, 0x003b,
04955 0x003C, 0x003C, 0x003C, 0x003c,
04956 0x003D, 0x003D, 0x003D, 0x003d,
04957 0x003E, 0x003E, 0x003E, 0x003e,
04958 0x003F, 0x003F, 0x003F, 0x003f,
04959 0x0040, 0x0040, 0x0040, 0x0040
04960 };
04961
04962
LH_UINT32 ein_regb;
04963
LH_UINT32 ein_regg;
04964
LH_UINT32 ein_regr;
04965
LH_DATA_IN_TYPE ein_cache[3];
04966
LH_LUT_DATA_TYPE * paNewVal0;
04967
LH_UINT32 ako0;
04968
LH_UINT32 ako1;
04969
LH_UINT32 ako2;
04970
04971
LH_UINT8 Mode;
04972
LH_UINT32 PixelCount, LineCount, i, j;
04973
long inputOffset,outputOffset;
04974
LH_DATA_IN_TYPE * input0 = (
LH_DATA_IN_TYPE *)calcParam->inputData[0];
04975
LH_DATA_IN_TYPE * input1 = (
LH_DATA_IN_TYPE *)calcParam->inputData[1];
04976
LH_DATA_IN_TYPE * input2 = (
LH_DATA_IN_TYPE *)calcParam->inputData[2];
04977
LH_DATA_IN_TYPE * input3 = (
LH_DATA_IN_TYPE *)calcParam->inputData[3];
04978
04979
LH_DATA_OUT_TYPE * output0 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[0];
04980
LH_DATA_OUT_TYPE * output1 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[1];
04981
LH_DATA_OUT_TYPE * output2 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[2];
04982
LH_DATA_OUT_TYPE * output3 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[3];
04983
LH_DATA_OUT_TYPE * output4 = (
LH_DATA_OUT_TYPE *)calcParam->outputData[4];
04984
04985
LH_UINT16 * My_InputLut = (
LH_UINT16 *)lutParam->inputLut;
04986
LH_LUT_DATA_TYPE * My_OutputLut = (
LH_LUT_DATA_TYPE *)lutParam->outputLut;
04987
LH_LUT_DATA_TYPE * My_ColorLut = (
LH_LUT_DATA_TYPE *)lutParam->colorLut;
04988
04989
LH_DATA_OUT_TYPE Mask = (
LH_DATA_OUT_TYPE)-1;
04990
04991
LH_UINT16 ak[4];
04992
LH_UINT8 bFPUState [108];
04993
04994
#ifdef Test_mode
04995
LH_UINT16 TestRam[4];
04996
#endif
04997
#ifdef DEBUG_OUTPUT
04998
CMError err =
noErr;
04999
#endif
05000
LH_START_PROC(LH_CALC_PROC_NAME)
05001
05002 #
if LH_DATA_IN_SIZE_16
05003 inputOffset = (
long)calcParam->cmInputPixelOffset / 2;
05004
#else
05005
inputOffset = (
long)calcParam->cmInputPixelOffset;
05006
#endif
05007
#if LH_DATA_OUT_SIZE_16
05008
outputOffset = (
long)calcParam->cmOutputPixelOffset / 2;
05009
#else
05010
outputOffset = (
long)calcParam->cmOutputPixelOffset;
05011
#endif
05012
05013
if (calcParam->clearMask)
05014 Mask = 0;
05015 Mode =
LH_CALC_ENGINE_UNDEF_MODE;
05016
05017
05018
if ((calcParam->cmInputPixelOffset * calcParam->cmPixelPerLine == calcParam->cmInputBytesPerLine) && (calcParam->cmOutputPixelOffset * calcParam->cmPixelPerLine == calcParam->cmOutputBytesPerLine))
05019 {
05020 PixelCount = calcParam->cmPixelPerLine * calcParam->cmLineCount;
05021 LineCount = 1;
05022 }
05023
else
05024 {
05025 PixelCount = calcParam->cmPixelPerLine;
05026 LineCount = calcParam->cmLineCount;
05027 }
05028
if (calcParam->copyAlpha )
05029 {
05030 Mode =
LH_CALC_ENGINE_U_TO_U;
05031 }
05032
else
05033 {
05034
if (calcParam->clearMask)
05035 Mode =
LH_CALC_ENGINE_P_TO_U;
05036
else
05037 Mode =
LH_CALC_ENGINE_P_TO_P;
05038 }
05039 __asm {
05040 fnsave bFPUState
05041 pxor mm0,mm0
05042 pxor mm1,mm1
05043 pxor mm2,mm2
05044 pxor mm3,mm3
05045 pxor mm4,mm4
05046 pxor mm5,mm5
05047 pxor mm6,mm6
05048 pxor mm7,mm7
05049 }
05050 j = 0;
05051
while (LineCount)
05052 {
05053 i = PixelCount;
05054
while (i)
05055 {
05056
#if LH_LUT_DATA_SIZE_16
05057
#if LH_DATA_IN_SIZE_16 || LH_DATA_OUT_SIZE_16
05058
register LH_UINT32 ko;
05059
#endif
05060
#if LH_DATA_IN_SIZE_16
05061
register LH_DATA_IN_TYPE aValIn;
05062
#endif
05063
#if LH_DATA_OUT_SIZE_16
05064
register LH_UINT32 aVal;
05065
#endif
05066
#if LH_DATA_IN_SIZE_16
05067
aValIn = (ein_cache[0]=*input0) - ( *input0 >> (
LH_ADR_BREIT_EIN_LUT ));
05068 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
05069 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 0 <<
LH_ADR_BREIT_EIN_LUT );
05070 ein_regr = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >>( 16-
LH_ADR_BREIT_EIN_LUT );
05071
05072 aValIn = (ein_cache[1]=*input1) - ( *input1 >> (
LH_ADR_BREIT_EIN_LUT ));
05073 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
05074 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 1 <<
LH_ADR_BREIT_EIN_LUT );
05075 ein_regg = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 16-
LH_ADR_BREIT_EIN_LUT );
05076
05077 aValIn = (ein_cache[2]=*input2) - ( *input2 >> (
LH_ADR_BREIT_EIN_LUT ));
05078 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
05079 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 2 <<
LH_ADR_BREIT_EIN_LUT );
05080 ein_regb = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 16-
LH_ADR_BREIT_EIN_LUT );
05081
#else
05082
ein_regr = My_InputLut[(ein_cache[0]=*input0) + ( 0 <<
LH_ADR_BREIT_EIN_LUT )];
05083 ein_regg = My_InputLut[(ein_cache[1]=*input1) + ( 1 <<
LH_ADR_BREIT_EIN_LUT )];
05084 ein_regb = My_InputLut[(ein_cache[2]=*input2) + ( 2 <<
LH_ADR_BREIT_EIN_LUT )];
05085
#endif
05086
#else
05087
#if LH_DATA_IN_SIZE_16
05088
register LH_DATA_IN_TYPE aValIn;
05089
register LH_UINT32 ko;
05090 aValIn = (ein_cache[0]=*input0) - ( *input0 >> (
LH_ADR_BREIT_EIN_LUT ));
05091 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
05092 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 0 <<
LH_ADR_BREIT_EIN_LUT );
05093 ein_regr = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >>( 10-
LH_ADR_BREIT_EIN_LUT );
05094
05095 aValIn = (ein_cache[1]=*input1) - ( *input1 >> (
LH_ADR_BREIT_EIN_LUT ));
05096 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
05097 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 1 <<
LH_ADR_BREIT_EIN_LUT );
05098 ein_regg = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 10-
LH_ADR_BREIT_EIN_LUT );
05099
05100 aValIn = (ein_cache[2]=*input2) - ( *input2 >> (
LH_ADR_BREIT_EIN_LUT ));
05101 ko = aValIn & ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT ))-1 );
05102 aValIn = (aValIn >> ( 16-
LH_ADR_BREIT_EIN_LUT )) + ( 2 <<
LH_ADR_BREIT_EIN_LUT );
05103 ein_regb = ( My_InputLut[aValIn] * ( (1<<( 16-
LH_ADR_BREIT_EIN_LUT )) - ko ) + My_InputLut[aValIn +1] * ko ) >> ( 10-
LH_ADR_BREIT_EIN_LUT );
05104
05105
05106
05107
#else
05108
ein_regr = My_InputLut[(ein_cache[0]=*input0) + ( 0 <<
LH_ADR_BREIT_EIN_LUT )];
05109 ein_regg = My_InputLut[(ein_cache[1]=*input1) + ( 1 <<
LH_ADR_BREIT_EIN_LUT )];
05110 ein_regb = My_InputLut[(ein_cache[2]=*input2) + ( 2 <<
LH_ADR_BREIT_EIN_LUT )];
05111
#endif
05112
#endif
05113
paNewVal0 = (
LH_LUT_DATA_TYPE *)My_ColorLut +
05114 ((((((ein_regr &
LH_BIT_MASKE_ADR) <<
LH_BIT_BREIT_ADR) +
05115 (ein_regg &
LH_BIT_MASKE_ADR))>> (
LH_BIT_BREIT_SELEKTOR-
LH_BIT_BREIT_ADR)) +
05116 (ein_regb >>
LH_BIT_BREIT_SELEKTOR))*
LH_DATA_OUT_COUNT);
05117 ein_regr &=
LH_BIT_MASKE_SELEKTOR;
05118 ein_regg &=
LH_BIT_MASKE_SELEKTOR;
05119 ein_regb &=
LH_BIT_MASKE_SELEKTOR;
05120
if (ein_regb >= ein_regr)
05121 {
05122
if (ein_regg >= ein_regr)
05123 {
05124
if (ein_regb >= ein_regg)
05125 {
05126
05127 ako0 = (
LH_ADR_BEREICH_SEL) - ein_regb;
05128 ako1 = ein_regb - ein_regg;
05129 ako2 = ein_regg - ein_regr;
05130
#if LH_LUT_DATA_SIZE_16
05131
#if LH_DATA_OUT_SIZE_16
05132
05133 aVal = (ako0 * paNewVal0[0] +
05134 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05135 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05136 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05137 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05138 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05139 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05140 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
05141 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05142
05143 paNewVal0++;
05144 aVal = (ako0 * paNewVal0[0] +
05145 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05146 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05147 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05148 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05149 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05150 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05151 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
05152 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05153
05154 paNewVal0++;
05155 aVal = (ako0 * paNewVal0[0] +
05156 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05157 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05158 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05159 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05160 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05161 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05162 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
05163 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05164
05165
#if LH_DATA_OUT_COUNT_4
05166
paNewVal0++;
05167 aVal = (ako0 * paNewVal0[0] +
05168 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05169 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05170 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05171 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05172 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05173 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05174 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
05175 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05176
#endif
05177
05178
#else
05179
*output0 = My_OutputLut[((ako0 * paNewVal0[0] +
05180 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05181 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05182 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05183 paNewVal0++;
05184 *output1 = My_OutputLut[((ako0 * paNewVal0[0] +
05185 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05186 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05187 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05188 paNewVal0++;
05189 *output2 = My_OutputLut[((ako0 * paNewVal0[0] +
05190 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05191 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05192 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05193
#if LH_DATA_OUT_COUNT_4
05194
paNewVal0++;
05195 *output3 = My_OutputLut[((ako0 * paNewVal0[0] +
05196 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05197 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05198 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05199
#endif
05200
#endif
05201
05202
#else
05203
__asm {
05204 mov eax, paNewVal0
05205
05206 mov ebx, ako0
05207 movq mm5, MMXTab [ebx*8]
05208
#ifdef Test_mode
05209
movq TestRam,mm5
05210
#endif
05211
punpcklbw mm1,[eax]
05212 mov ebx, ako1
05213 psrlw mm1,8
05214
#ifdef Test_mode
05215
movq TestRam,mm1
05216
#endif
05217
05218 pmullw mm5,mm1
05219 movq mm6, MMXTab [ebx*8]
05220
#ifdef Test_mode
05221
movq TestRam,mm6
05222
#endif
05223
punpcklbw mm2,[eax+(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05224 mov ebx, ako2
05225 psrlw mm2,8
05226
#ifdef Test_mode
05227
movq TestRam,mm2
05228
#endif
05229
pmullw mm6,mm2
05230
05231 movq mm7, MMXTab [ebx*8]
05232 paddusw mm5,mm6
05233
#ifdef Test_mode
05234
movq TestRam,mm7
05235
#endif
05236
punpcklbw mm1,[eax+(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05237 mov ebx, ein_regr
05238 psrlw mm1,8
05239
#ifdef Test_mode
05240
movq TestRam,mm1
05241
#endif
05242
pmullw mm7,mm1
05243
05244 movq mm6, MMXTab [ebx*8]
05245 paddusw mm5,mm7
05246
#ifdef Test_mode
05247
movq TestRam,mm7
05248
#endif
05249
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05250 psrlw mm2,8
05251
#ifdef Test_mode
05252
movq TestRam,mm2
05253
#endif
05254
pmullw mm6,mm2
05255 paddusw mm5,mm6
05256
#ifdef Test_mode
05257
movq TestRam,mm6
05258
#endif
05259
05260
05261 xor eax,eax
05262 psrlw mm5,
LH_DATA_SHR
05263 movq ak,mm5
05264
05265 mov ax,ak
05266 mov esi,My_OutputLut
05267 mov al,
BYTE PTR[eax+esi]
05268 mov edi,output0
05269 mov [edi], al
05270 mov ax,ak+2
05271 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
05272 mov edi,output1
05273 mov [edi], al
05274 mov ax,ak+4
05275 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
05276 mov edi,output2
05277 mov [edi], al
05278
#if LH_DATA_OUT_COUNT_4
05279
mov ax,ak+6
05280 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
05281 mov edi,output3
05282 mov [edi], al
05283
#endif
05284
05285
05286 }
05287
#endif
05288
}
05289
else
05290 {
05291 ako0 = (
LH_ADR_BEREICH_SEL) - ein_regg;
05292 ako1 = ein_regg - ein_regb;
05293 ako2 = ein_regb - ein_regr;
05294
#if LH_LUT_DATA_SIZE_16
05295
#if LH_DATA_OUT_SIZE_16
05296
05297 aVal = (ako0 * paNewVal0[0] +
05298 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05299 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05300 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05301 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05302 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05303 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05304 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
05305 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05306
05307 paNewVal0++;
05308 aVal = (ako0 * paNewVal0[0] +
05309 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05310 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05311 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05312 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05313 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05314 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05315 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
05316 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05317
05318 paNewVal0++;
05319 aVal = (ako0 * paNewVal0[0] +
05320 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05321 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05322 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05323 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05324 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05325 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05326 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
05327 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05328
05329
#if LH_DATA_OUT_COUNT_4
05330
paNewVal0++;
05331 aVal = (ako0 * paNewVal0[0] +
05332 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05333 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05334 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05335 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05336 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05337 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05338 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
05339 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05340
#endif
05341
05342
#else
05343
*output0 = My_OutputLut[((ako0 * paNewVal0[0] +
05344 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05345 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05346 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05347 paNewVal0++;
05348 *output1 = My_OutputLut[((ako0 * paNewVal0[0] +
05349 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05350 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05351 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05352 paNewVal0++;
05353 *output2 = My_OutputLut[((ako0 * paNewVal0[0] +
05354 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05355 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05356 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05357
#if LH_DATA_OUT_COUNT_4
05358
paNewVal0++;
05359 *output3 = My_OutputLut[((ako0 * paNewVal0[0] +
05360 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05361 ako2 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05362 ein_regr * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05363
#endif
05364
#endif
05365
05366
#else
05367
__asm {
05368 mov eax, paNewVal0
05369
05370 mov ebx, ako0
05371 movq mm5, MMXTab [ebx*8]
05372
#ifdef Test_mode
05373
movq TestRam,mm5
05374
#endif
05375
punpcklbw mm1,[eax]
05376 mov ebx, ako1
05377 psrlw mm1,8
05378
#ifdef Test_mode
05379
movq TestRam,mm1
05380
#endif
05381
05382 pmullw mm5,mm1
05383 movq mm6, MMXTab [ebx*8]
05384
#ifdef Test_mode
05385
movq TestRam,mm6
05386
#endif
05387
punpcklbw mm2,[eax+(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
05388 mov ebx, ako2
05389 psrlw mm2,8
05390
#ifdef Test_mode
05391
movq TestRam,mm2
05392
#endif
05393
pmullw mm6,mm2
05394
05395 movq mm7, MMXTab [ebx*8]
05396 paddusw mm5,mm6
05397
#ifdef Test_mode
05398
movq TestRam,mm7
05399
#endif
05400
punpcklbw mm1,[eax+(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05401 mov ebx, ein_regr
05402 psrlw mm1,8
05403
#ifdef Test_mode
05404
movq TestRam,mm1
05405
#endif
05406
pmullw mm7,mm1
05407
05408 movq mm6, MMXTab [ebx*8]
05409 paddusw mm5,mm7
05410
#ifdef Test_mode
05411
movq TestRam,mm7
05412
#endif
05413
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05414 psrlw mm2,8
05415
#ifdef Test_mode
05416
movq TestRam,mm2
05417
#endif
05418
pmullw mm6,mm2
05419 paddusw mm5,mm6
05420
#ifdef Test_mode
05421
movq TestRam,mm6
05422
#endif
05423
05424
05425 xor eax,eax
05426 psrlw mm5,
LH_DATA_SHR
05427 movq ak,mm5
05428
05429 mov ax,ak
05430 mov esi,My_OutputLut
05431 mov al,
BYTE PTR[eax+esi]
05432 mov edi,output0
05433 mov [edi], al
05434 mov ax,ak+2
05435 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
05436 mov edi,output1
05437 mov [edi], al
05438 mov ax,ak+4
05439 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
05440 mov edi,output2
05441 mov [edi], al
05442
#if LH_DATA_OUT_COUNT_4
05443
mov ax,ak+6
05444 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
05445 mov edi,output3
05446 mov [edi], al
05447
#endif
05448
05449
05450 }
05451
05452
#endif
05453
}
05454 }
05455
else
05456 {
05457 ako0 = (
LH_ADR_BEREICH_SEL) - ein_regb;
05458 ako1 = ein_regb - ein_regr;
05459 ako2 = ein_regr - ein_regg;
05460
#if LH_LUT_DATA_SIZE_16
05461
#if LH_DATA_OUT_SIZE_16
05462
05463 aVal = (ako0 * paNewVal0[0] +
05464 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05465 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05466 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05467 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05468 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05469 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05470 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
05471 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05472
05473 paNewVal0++;
05474 aVal = (ako0 * paNewVal0[0] +
05475 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05476 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05477 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05478 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05479 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05480 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05481 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
05482 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05483
05484 paNewVal0++;
05485 aVal = (ako0 * paNewVal0[0] +
05486 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05487 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05488 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05489 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05490 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05491 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05492 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
05493 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05494
05495
#if LH_DATA_OUT_COUNT_4
05496
paNewVal0++;
05497 aVal = (ako0 * paNewVal0[0] +
05498 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05499 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05500 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05501 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05502 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05503 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05504 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
05505 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05506
#endif
05507
05508
#else
05509
*output0 = My_OutputLut[((ako0 * paNewVal0[0] +
05510 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05511 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05512 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05513 paNewVal0++;
05514 *output1 = My_OutputLut[((ako0 * paNewVal0[0] +
05515 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05516 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05517 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05518 paNewVal0++;
05519 *output2 = My_OutputLut[((ako0 * paNewVal0[0] +
05520 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05521 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05522 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05523
#if LH_DATA_OUT_COUNT_4
05524
paNewVal0++;
05525 *output3 = My_OutputLut[((ako0 * paNewVal0[0] +
05526 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05527 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05528 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05529
#endif
05530
#endif
05531
05532
#else
05533
__asm {
05534 mov eax, paNewVal0
05535
05536 mov ebx, ako0
05537 movq mm5, MMXTab [ebx*8]
05538
#ifdef Test_mode
05539
movq TestRam,mm5
05540
#endif
05541
punpcklbw mm1,[eax]
05542 mov ebx, ako1
05543 psrlw mm1,8
05544
#ifdef Test_mode
05545
movq TestRam,mm1
05546
#endif
05547
05548 pmullw mm5,mm1
05549 movq mm6, MMXTab [ebx*8]
05550
#ifdef Test_mode
05551
movq TestRam,mm6
05552
#endif
05553
punpcklbw mm2,[eax+(((((0 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05554 mov ebx, ako2
05555 psrlw mm2,8
05556
#ifdef Test_mode
05557
movq TestRam,mm2
05558
#endif
05559
pmullw mm6,mm2
05560
05561 movq mm7, MMXTab [ebx*8]
05562 paddusw mm5,mm6
05563
#ifdef Test_mode
05564
movq TestRam,mm7
05565
#endif
05566
punpcklbw mm1,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05567 mov ebx, ein_regg
05568 psrlw mm1,8
05569
#ifdef Test_mode
05570
movq TestRam,mm1
05571
#endif
05572
pmullw mm7,mm1
05573
05574 movq mm6, MMXTab [ebx*8]
05575 paddusw mm5,mm7
05576
#ifdef Test_mode
05577
movq TestRam,mm7
05578
#endif
05579
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05580 psrlw mm2,8
05581
#ifdef Test_mode
05582
movq TestRam,mm2
05583
#endif
05584
pmullw mm6,mm2
05585 paddusw mm5,mm6
05586
#ifdef Test_mode
05587
movq TestRam,mm6
05588
#endif
05589
05590
05591 xor eax,eax
05592 psrlw mm5,
LH_DATA_SHR
05593 movq ak,mm5
05594
05595 mov ax,ak
05596 mov esi,My_OutputLut
05597 mov al,
BYTE PTR[eax+esi]
05598 mov edi,output0
05599 mov [edi], al
05600 mov ax,ak+2
05601 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
05602 mov edi,output1
05603 mov [edi], al
05604 mov ax,ak+4
05605 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
05606 mov edi,output2
05607 mov [edi], al
05608
#if LH_DATA_OUT_COUNT_4
05609
mov ax,ak+6
05610 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
05611 mov edi,output3
05612 mov [edi], al
05613
#endif
05614
05615
05616 }
05617
#endif
05618
}
05619 }
05620
else
05621 {
05622
if (ein_regg >= ein_regr)
05623 {
05624 ako0 = (
LH_ADR_BEREICH_SEL) - ein_regg;
05625 ako1 = ein_regg - ein_regr;
05626 ako2 = ein_regr - ein_regb;
05627
#if LH_LUT_DATA_SIZE_16
05628
#if LH_DATA_OUT_SIZE_16
05629
05630 aVal = (ako0 * paNewVal0[0] +
05631 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05632 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05633 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05634 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05635 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05636 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05637 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
05638 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05639
05640 paNewVal0++;
05641 aVal = (ako0 * paNewVal0[0] +
05642 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05643 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05644 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05645 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05646 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05647 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05648 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
05649 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05650
05651 paNewVal0++;
05652 aVal = (ako0 * paNewVal0[0] +
05653 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05654 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05655 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05656 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05657 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05658 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05659 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
05660 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05661
05662
#if LH_DATA_OUT_COUNT_4
05663
paNewVal0++;
05664 aVal = (ako0 * paNewVal0[0] +
05665 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05666 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05667 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05668 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05669 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05670 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05671 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
05672 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05673
#endif
05674
05675
#else
05676
*output0 = My_OutputLut[((ako0 * paNewVal0[0] +
05677 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05678 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05679 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05680 paNewVal0++;
05681 *output1 = My_OutputLut[((ako0 * paNewVal0[0] +
05682 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05683 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05684 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05685 paNewVal0++;
05686 *output2 = My_OutputLut[((ako0 * paNewVal0[0] +
05687 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05688 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05689 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05690
#if LH_DATA_OUT_COUNT_4
05691
paNewVal0++;
05692 *output3 = My_OutputLut[((ako0 * paNewVal0[0] +
05693 ako1 * paNewVal0[(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05694 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05695 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05696
#endif
05697
#endif
05698
05699
#else
05700
__asm {
05701 mov eax, paNewVal0
05702
05703 mov ebx, ako0
05704 movq mm5, MMXTab [ebx*8]
05705
#ifdef Test_mode
05706
movq TestRam,mm5
05707
#endif
05708
punpcklbw mm1,[eax]
05709 mov ebx, ako1
05710 psrlw mm1,8
05711
#ifdef Test_mode
05712
movq TestRam,mm1
05713
#endif
05714
05715 pmullw mm5,mm1
05716 movq mm6, MMXTab [ebx*8]
05717
#ifdef Test_mode
05718
movq TestRam,mm6
05719
#endif
05720
punpcklbw mm2,[eax+(((((0 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
05721 mov ebx, ako2
05722 psrlw mm2,8
05723
#ifdef Test_mode
05724
movq TestRam,mm2
05725
#endif
05726
pmullw mm6,mm2
05727
05728 movq mm7, MMXTab [ebx*8]
05729 paddusw mm5,mm6
05730
#ifdef Test_mode
05731
movq TestRam,mm7
05732
#endif
05733
punpcklbw mm1,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
05734 mov ebx, ein_regb
05735 psrlw mm1,8
05736
#ifdef Test_mode
05737
movq TestRam,mm1
05738
#endif
05739
pmullw mm7,mm1
05740
05741 movq mm6, MMXTab [ebx*8]
05742 paddusw mm5,mm7
05743
#ifdef Test_mode
05744
movq TestRam,mm7
05745
#endif
05746
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05747 psrlw mm2,8
05748
#ifdef Test_mode
05749
movq TestRam,mm2
05750
#endif
05751
pmullw mm6,mm2
05752 paddusw mm5,mm6
05753
#ifdef Test_mode
05754
movq TestRam,mm6
05755
#endif
05756
05757
05758 xor eax,eax
05759 psrlw mm5,
LH_DATA_SHR
05760 movq ak,mm5
05761
05762 mov ax,ak
05763 mov esi,My_OutputLut
05764 mov al,
BYTE PTR[eax+esi]
05765 mov edi,output0
05766 mov [edi], al
05767 mov ax,ak+2
05768 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
05769 mov edi,output1
05770 mov [edi], al
05771 mov ax,ak+4
05772 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
05773 mov edi,output2
05774 mov [edi], al
05775
#if LH_DATA_OUT_COUNT_4
05776
mov ax,ak+6
05777 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
05778 mov edi,output3
05779 mov [edi], al
05780
#endif
05781
05782
05783 }
05784
#endif
05785
}
05786
else
05787 {
05788
if (ein_regb >= ein_regg)
05789 {
05790 ako0 = (
LH_ADR_BEREICH_SEL) - ein_regr;
05791 ako1 = ein_regr - ein_regb;
05792 ako2 = ein_regb - ein_regg;
05793
#if LH_LUT_DATA_SIZE_16
05794
#if LH_DATA_OUT_SIZE_16
05795
05796 aVal = (ako0 * paNewVal0[0] +
05797 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05798 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05799 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05800 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05801 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05802 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05803 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
05804 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05805
05806 paNewVal0++;
05807 aVal = (ako0 * paNewVal0[0] +
05808 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05809 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05810 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05811 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05812 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05813 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05814 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
05815 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05816
05817 paNewVal0++;
05818 aVal = (ako0 * paNewVal0[0] +
05819 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05820 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05821 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05822 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05823 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05824 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05825 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
05826 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05827
05828
#if LH_DATA_OUT_COUNT_4
05829
paNewVal0++;
05830 aVal = (ako0 * paNewVal0[0] +
05831 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05832 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05833 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05834 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05835 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05836 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05837 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
05838 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05839
#endif
05840
05841
#else
05842
*output0 = My_OutputLut[((ako0 * paNewVal0[0] +
05843 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05844 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05845 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05846 paNewVal0++;
05847 *output1 = My_OutputLut[((ako0 * paNewVal0[0] +
05848 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05849 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05850 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05851 paNewVal0++;
05852 *output2 = My_OutputLut[((ako0 * paNewVal0[0] +
05853 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05854 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05855 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05856
#if LH_DATA_OUT_COUNT_4
05857
paNewVal0++;
05858 *output3 = My_OutputLut[((ako0 * paNewVal0[0] +
05859 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05860 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)] +
05861 ein_regg * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
05862
#endif
05863
#endif
05864
05865
#else
05866
__asm {
05867 mov eax, paNewVal0
05868
05869 mov ebx, ako0
05870 movq mm5, MMXTab [ebx*8]
05871
#ifdef Test_mode
05872
movq TestRam,mm5
05873
#endif
05874
punpcklbw mm1,[eax]
05875 mov ebx, ako1
05876 psrlw mm1,8
05877
#ifdef Test_mode
05878
movq TestRam,mm1
05879
#endif
05880
05881 pmullw mm5,mm1
05882 movq mm6, MMXTab [ebx*8]
05883
#ifdef Test_mode
05884
movq TestRam,mm6
05885
#endif
05886
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
05887 mov ebx, ako2
05888 psrlw mm2,8
05889
#ifdef Test_mode
05890
movq TestRam,mm2
05891
#endif
05892
pmullw mm6,mm2
05893
05894 movq mm7, MMXTab [ebx*8]
05895 paddusw mm5,mm6
05896
#ifdef Test_mode
05897
movq TestRam,mm7
05898
#endif
05899
punpcklbw mm1,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05900 mov ebx, ein_regg
05901 psrlw mm1,8
05902
#ifdef Test_mode
05903
movq TestRam,mm1
05904
#endif
05905
pmullw mm7,mm1
05906
05907 movq mm6, MMXTab [ebx*8]
05908 paddusw mm5,mm7
05909
#ifdef Test_mode
05910
movq TestRam,mm7
05911
#endif
05912
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
05913 psrlw mm2,8
05914
#ifdef Test_mode
05915
movq TestRam,mm2
05916
#endif
05917
pmullw mm6,mm2
05918 paddusw mm5,mm6
05919
#ifdef Test_mode
05920
movq TestRam,mm6
05921
#endif
05922
05923
05924 xor eax,eax
05925 psrlw mm5,
LH_DATA_SHR
05926 movq ak,mm5
05927
05928 mov ax,ak
05929 mov esi,My_OutputLut
05930 mov al,
BYTE PTR[eax+esi]
05931 mov edi,output0
05932 mov [edi], al
05933 mov ax,ak+2
05934 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
05935 mov edi,output1
05936 mov [edi], al
05937 mov ax,ak+4
05938 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
05939 mov edi,output2
05940 mov [edi], al
05941
#if LH_DATA_OUT_COUNT_4
05942
mov ax,ak+6
05943 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
05944 mov edi,output3
05945 mov [edi], al
05946
#endif
05947
05948
05949 }
05950
#endif
05951
}
05952
else
05953 {
05954 ako0 = (
LH_ADR_BEREICH_SEL) - ein_regr;
05955 ako1 = ein_regr - ein_regg;
05956 ako2 = ein_regg - ein_regb;
05957
#if LH_LUT_DATA_SIZE_16
05958
#if LH_DATA_OUT_SIZE_16
05959
05960 aVal = (ako0 * paNewVal0[0] +
05961 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05962 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05963 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05964 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05965 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05966 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05967 aVal = (aVal >> (
LH_DATA_SHR )) + ( 0 <<
LH_ADR_BREIT_AUS_LUT );
05968 *output0 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05969
05970 paNewVal0++;
05971 aVal = (ako0 * paNewVal0[0] +
05972 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05973 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05974 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05975 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05976 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05977 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05978 aVal = (aVal >> (
LH_DATA_SHR )) + ( 1 <<
LH_ADR_BREIT_AUS_LUT );
05979 *output1 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05980
05981 paNewVal0++;
05982 aVal = (ako0 * paNewVal0[0] +
05983 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05984 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05985 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05986 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05987 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
05988 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
05989 aVal = (aVal >> (
LH_DATA_SHR )) + ( 2 <<
LH_ADR_BREIT_AUS_LUT );
05990 *output2 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
05991
05992
#if LH_DATA_OUT_COUNT_4
05993
paNewVal0++;
05994 aVal = (ako0 * paNewVal0[0] +
05995 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05996 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
05997 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]);
05998 aVal = aVal + ( aVal >> (
LH_LUT_DATA_SHR ));
05999 aVal = aVal - ( aVal >> (
LH_ADR_BREIT_AUS_LUT ));
06000 ko = (aVal>>LH_DATA_SHR_CORR) & ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR))-1 );
06001 aVal = (aVal >> (
LH_DATA_SHR )) + ( 3 <<
LH_ADR_BREIT_AUS_LUT );
06002 *output3 = (
LH_DATA_OUT_TYPE)((My_OutputLut[aVal] * ( (1<<(
LH_DATA_SHR - LH_DATA_SHR_CORR )) - ko ) + My_OutputLut[aVal +1] * ko)>>(
LH_DATA_SHR - LH_DATA_SHR_CORR) );
06003
#endif
06004
06005
#else
06006
*output0 = My_OutputLut[((ako0 * paNewVal0[0] +
06007 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06008 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06009 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (0<<
LH_ADR_BREIT_AUS_LUT)]>>8;
06010 paNewVal0++;
06011 *output1 = My_OutputLut[((ako0 * paNewVal0[0] +
06012 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06013 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06014 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (1<<
LH_ADR_BREIT_AUS_LUT)]>>8;
06015 paNewVal0++;
06016 *output2 = My_OutputLut[((ako0 * paNewVal0[0] +
06017 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06018 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06019 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (2<<
LH_ADR_BREIT_AUS_LUT)]>>8;
06020
#if LH_DATA_OUT_COUNT_4
06021
paNewVal0++;
06022 *output3 = My_OutputLut[((ako0 * paNewVal0[0] +
06023 ako1 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06024 ako2 * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)] +
06025 ein_regb * paNewVal0[(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)])>>
LH_DATA_SHR) + (3<<
LH_ADR_BREIT_AUS_LUT)]>>8;
06026
#endif
06027
#endif
06028
06029
#else
06030
__asm {
06031 mov eax, paNewVal0
06032
06033 mov ebx, ako0
06034 movq mm5, MMXTab [ebx*8]
06035
#ifdef Test_mode
06036
movq TestRam,mm5
06037
#endif
06038
punpcklbw mm1,[eax]
06039 mov ebx, ako1
06040 psrlw mm1,8
06041
#ifdef Test_mode
06042
movq TestRam,mm1
06043
#endif
06044
06045 pmullw mm5,mm1
06046 movq mm6, MMXTab [ebx*8]
06047
#ifdef Test_mode
06048
movq TestRam,mm6
06049
#endif
06050
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 0) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
06051 mov ebx, ako2
06052 psrlw mm2,8
06053
#ifdef Test_mode
06054
movq TestRam,mm2
06055
#endif
06056
pmullw mm6,mm2
06057
06058 movq mm7, MMXTab [ebx*8]
06059 paddusw mm5,mm6
06060
#ifdef Test_mode
06061
movq TestRam,mm7
06062
#endif
06063
punpcklbw mm1,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 0) *
LH_DATA_OUT_COUNT)]
06064 mov ebx, ein_regb
06065 psrlw mm1,8
06066
#ifdef Test_mode
06067
movq TestRam,mm1
06068
#endif
06069
pmullw mm7,mm1
06070
06071 movq mm6, MMXTab [ebx*8]
06072 paddusw mm5,mm7
06073
#ifdef Test_mode
06074
movq TestRam,mm7
06075
#endif
06076
punpcklbw mm2,[eax+(((((1 <<
LH_BIT_BREIT_ADR) | 1) <<
LH_BIT_BREIT_ADR) | 1) *
LH_DATA_OUT_COUNT)]
06077 psrlw mm2,8
06078
#ifdef Test_mode
06079
movq TestRam,mm2
06080
#endif
06081
pmullw mm6,mm2
06082 paddusw mm5,mm6
06083
#ifdef Test_mode
06084
movq TestRam,mm6
06085
#endif
06086
06087
06088 xor eax,eax
06089 psrlw mm5,
LH_DATA_SHR
06090 movq ak,mm5
06091
06092 mov ax,ak
06093 mov esi,My_OutputLut
06094 mov al,
BYTE PTR[eax+esi]
06095 mov edi,output0
06096 mov [edi], al
06097 mov ax,ak+2
06098 mov al,
BYTE PTR[eax+esi+(1<<
LH_ADR_BREIT_AUS_LUT)]
06099 mov edi,output1
06100 mov [edi], al
06101 mov ax,ak+4
06102 mov al,
BYTE PTR[eax+esi+(2<<
LH_ADR_BREIT_AUS_LUT)]
06103 mov edi,output2
06104 mov [edi], al
06105
#if LH_DATA_OUT_COUNT_4
06106
mov ax,ak+6
06107 mov al,
BYTE PTR[eax+esi+(3<<
LH_ADR_BREIT_AUS_LUT)]
06108 mov edi,output3
06109 mov [edi], al
06110
#endif
06111
06112
06113 }
06114
#endif
06115
}
06116 }
06117 }
06118
#if LH_DATA_OUT_SIZE_16 && ! LH_LUT_DATA_SIZE_16
06119
*output0 |= (*output0 << 8);
06120 *output1 |= (*output1 << 8);
06121 *output2 |= (*output2 << 8);
06122
#if LH_DATA_OUT_COUNT_4
06123
*output3 |= (*output3 << 8);
06124
#endif
06125
#endif
06126
06127
if (Mode ==
LH_CALC_ENGINE_P_TO_P)
06128 {
06129
while (--i)
06130 {
06131 input0 += inputOffset;
06132 input1 += inputOffset;
06133 input2 += inputOffset;
06134 output0 += outputOffset;
06135 output1 += outputOffset;
06136 output2 += outputOffset;
06137
#if LH_DATA_OUT_COUNT_4
06138
output3 += outputOffset;
06139
#endif
06140
06141
if ((*input0 ^ ein_cache[0]) || (*input1 ^ ein_cache[1]) || (*input2 ^ ein_cache[2]))
06142 {
06143
break;
06144 }
06145 *output0 = output0[-outputOffset];
06146 *output1 = output1[-outputOffset];
06147 *output2 = output2[-outputOffset];
06148
#if LH_DATA_OUT_COUNT_4
06149
*output3 = output3[-outputOffset];
06150
#endif
06151
}
06152 }
06153
else if (Mode ==
LH_CALC_ENGINE_P_TO_U)
06154 {
06155
#if LH_DATA_OUT_COUNT_4
06156
*output4 &= Mask;
06157
#else
06158
*output3 &= Mask;
06159
#endif
06160
while (--i)
06161 {
06162 input0 += inputOffset;
06163 input1 += inputOffset;
06164 input2 += inputOffset;
06165 output0 += outputOffset;
06166 output1 += outputOffset;
06167 output2 += outputOffset;
06168 output3 += outputOffset;
06169
#if LH_DATA_OUT_COUNT_4
06170
output4 += outputOffset;
06171
#endif
06172
if ((*input0 ^ ein_cache[0]) || (*input1 ^ ein_cache[1]) || (*input2 ^ ein_cache[2]))
06173 {
06174
break;
06175 }
06176 *output0 = output0[-outputOffset];
06177 *output1 = output1[-outputOffset];
06178 *output2 = output2[-outputOffset];
06179
#if LH_DATA_OUT_COUNT_4
06180
*output3 = output3[-outputOffset];
06181 *output4 &= Mask;
06182
#else
06183
*output3 &= Mask;
06184
#endif
06185
}
06186 }
06187
else
06188 {
06189
#if LH_DATA_OUT_COUNT_4
06190
*output4 = (
LH_DATA_OUT_TYPE)*input3;
06191
#else
06192
*output3 = (
LH_DATA_OUT_TYPE)*input3;
06193
#endif
06194
while (--i)
06195 {
06196 input0 += inputOffset;
06197 input1 += inputOffset;
06198 input2 += inputOffset;
06199 input3 += inputOffset;
06200
06201 output0 += outputOffset;
06202 output1 += outputOffset;
06203 output2 += outputOffset;
06204 output3 += outputOffset;
06205
#if LH_DATA_OUT_COUNT_4
06206
output4 += outputOffset;
06207
#endif
06208
if ((*input0 ^ ein_cache[0]) || (*input1 ^ ein_cache[1]) || (*input2 ^ ein_cache[2]))
06209 {
06210
break;
06211 }
06212 *output0 = output0[-outputOffset];
06213 *output1 = output1[-outputOffset];
06214 *output2 = output2[-outputOffset];
06215
#if LH_DATA_OUT_COUNT_4
06216
*output3 = output3[-outputOffset];
06217 *output4 = (
LH_DATA_OUT_TYPE)*input3;
06218
#else
06219
*output3 = (
LH_DATA_OUT_TYPE)*input3;
06220
#endif
06221
}
06222 }
06223 }
06224
if (--LineCount)
06225 {
06226 j++;
06227 input0 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[0] + j * calcParam->cmInputBytesPerLine);
06228 input1 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[1] + j * calcParam->cmInputBytesPerLine);
06229 input2 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[2] + j * calcParam->cmInputBytesPerLine);
06230 input3 = (
LH_DATA_IN_TYPE *)((
LH_UINT8 *)calcParam->inputData[3] + j * calcParam->cmInputBytesPerLine);
06231
06232 output0 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[0] + j * calcParam->cmOutputBytesPerLine);
06233 output1 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[1] + j * calcParam->cmOutputBytesPerLine);
06234 output2 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[2] + j * calcParam->cmOutputBytesPerLine);
06235 output3 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[3] + j * calcParam->cmOutputBytesPerLine);
06236
#if LH_DATA_OUT_COUNT_4
06237
output4 = (
LH_DATA_OUT_TYPE *)((
LH_UINT8 *)calcParam->outputData[4] + j * calcParam->cmOutputBytesPerLine);
06238
#endif
06239
}
06240 }
06241 __asm {
06242 emms
06243 frstor bFPUState
06244 }
06245
LH_END_PROC(LH_CALC_PROC_NAME)
06246 return 0;
06247 }
06248 #endif
06249 #undef LH_CALC_PROC_NAME