📄 test.asm
字号:
.686P
.MODEL FLAT, STDCALL
OPTION CASEMAP:NONE
OPTION PROLOGUE:NONE
OPTION EPILOGUE:NONE
.XMM
INCLUDE jpeg.inc
.DATA
ALIGN 4
BUFFSIZE = 259
;//BUFFSIZE = 256
;//BUFFSIZE = 8
;//BUFFSIZE = 1
;//BUFFSIZE = 0
;//Dummy byte 1 DUP (?)
TEST_Buffer byte BUFFSIZE DUP (?)
nrandom_seed dword ?
randinit byte 0
.CODE
;//=========================================================================
;// Park Miller random number algorithm.
;// Written by Jaymeson Trudgen (NaN)
;// Optimized by Rickey Bowers Jr. (bitRAKE)
;//=========================================================================
nrandom PROC
cmp randinit, 0
jne @F
rdtsc
mov nrandom_seed, eax
mov randinit, 1
@@:
xor edx, edx
mov ecx, 127773
div ecx
mov ecx, eax
mov eax, 16807
mul edx
mov edx, ecx
mov ecx, eax
mov eax, 2836
mul edx
sub ecx, eax
xor edx, edx
mov eax, ecx
mov nrandom_seed, ecx
mov eax, ecx
ret
nrandom ENDP
;//=========================================================================
;// Test bitstream
;//=========================================================================
IF 0
TEST_Bitstream PROTO
call TEST_Bitstream
ret
ENDIF
TEST_Bitstream PROC
pushad
DBGSTART
call JPG_InitDecoder
;// fill with random values
mov ebx, BUFFSIZE
lea edi, TEST_Buffer
jmp z
SetLoop:
rdtsc
call nrandom
stosb
mov ecx, 8
shl eax, 24
@@:
sub edx, edx
shl eax, 1
adc edx, 0
DBG "%d", edx
loop @B
z:
dec ebx
jge SetLoop
;// read using random value
call JPG_InitDecoder
lea esi, TEST_Buffer
mov ecx, BUFFSIZE
call BS_Init
IF 0
mov eax, 32
call BS_GetBits
jc Ok
int 3
Ok:
ENDIF
DBG "--------"
;// number of bits
mov ebx, BUFFSIZE * 8
;//jmp Next
ByteLoop:
rdtsc
call nrandom
and eax, 31
inc eax
IF BUFFSIZE NE 0
cmp ebx, eax
cmovl eax, ebx
ENDIF
mov esi, eax
call BS_GetBits
jc Err
sub ebx, esi
mov ecx, 32
sub ecx, esi
shl eax, cl
@@:
sub edx, edx
shl eax, 1
adc edx, 0
DBG "%d", edx
dec esi
jnz @B
Next:
test ebx, ebx
jnz ByteLoop
Done:
DBGSTOP
popad
push Ctx
call JPEG_Free
ret
Err:
int 3
jmp Done
TEST_Bitstream ENDP
;//=========================================================================
;// Test bitstream ECS
;//=========================================================================
IF 0
TEST_BitstreamECS PROTO
call TEST_BitstreamECS
ret
ENDIF
TEST_BitstreamECS PROC
.DATA
A = 1
ALIGN A
ECS0 byte 00h, 01h, 02h, 003h, 004h, 005h, 006h, 007h
ECS00 byte 00h, 01h, 02h, 003h, 004h, 005h, 006h, 007h
ALIGN A
ECS1 byte 0FFh, 00h, 00h, 01h, 02h, 003h, 004h, 005h, 006h, 007h
ECS10 byte 0FFh, 00h, 01h, 02h, 003h, 004h, 005h, 006h, 007h
ALIGN A
ECS2 byte 00h, 0FFh, 00h, 01h, 02h, 003h, 004h, 005h, 006h, 007h
ECS20 byte 00h, 0FFh, 01h, 02h, 003h, 004h, 005h, 006h, 007h
ALIGN A
ECS3 byte 00h, 01h, 0FFh, 00h, 02h, 003h, 004h, 005h, 006h, 007h
ECS30 byte 00h, 01h, 0FFh, 02h, 003h, 004h, 005h, 006h, 007h
ALIGN A
ECS4 byte 00h, 01h, 02h, 0FFh, 00h, 003h, 004h, 005h, 006h, 007h
ECS40 byte 00h, 01h, 02h, 0FFh, 003h, 004h, 005h, 006h, 007h
ALIGN A
ECS5 byte 00h, 01h, 02h, 003h, 0FFh, 00h, 004h, 005h, 006h, 007h
ECS50 byte 00h, 01h, 02h, 003h, 0FFh, 004h, 005h, 006h, 007h
ALIGN A
ECS6 byte 00h, 01h, 02h, 003h, 004h, 0FFh, 00h, 005h, 006h, 007h
ECS60 byte 00h, 01h, 02h, 003h, 004h, 0FFh, 005h, 006h, 007h
ALIGN A
ECS7 byte 00h, 01h, 02h, 003h, 004h, 005h, 0FFh, 000h, 006h, 007h
ECS70 byte 00h, 01h, 02h, 003h, 004h, 005h, 0FFh, 006h, 007h
ALIGN A
ECS8 byte 00h, 01h, 02h, 003h, 004h, 005h, 006h, 0FFh, 00h, 007h
ECS80 byte 00h, 01h, 02h, 003h, 004h, 005h, 006h, 0FFh, 007h
ALIGN A
ECS9 byte 00h, 01h, 02h, 003h, 004h, 005h, 006h, 0FFh, 00h, 0FFh
ECS90 byte 00h, 01h, 02h, 003h, 004h, 005h, 006h, 0FFh, 007h
TabECS dword ECS0, ECS1, ECS2, ECS3, ECS4, ECS5, ECS6, ECS7, ECS8, ECS9
SizECS dword sizeof ECS0, sizeof ECS1, sizeof ECS2, sizeof ECS3, sizeof ECS4, sizeof ECS5, sizeof ECS6, sizeof ECS7, sizeof ECS8, sizeof ECS9
SizECS0 dword sizeof ECS00, sizeof ECS10, sizeof ECS20, sizeof ECS30, sizeof ECS40, sizeof ECS50, sizeof ECS60, sizeof ECS70, sizeof ECS80, sizeof ECS90
.CODE
pushad
sub esp, 4
I TEXTEQU <DPTR [esp]>
DBGSTART
call JPG_InitDecoder
sub ebx, ebx
TLoop:
mov esi, TabECS[4*ebx]
mov ecx, SizECS[4*ebx]
lea edi, [esi][ecx]
call BS_Init
call BS_GetPtr
mov eax, SizECS0[4*ebx]
mov I, eax
@@:
mov eax, 8
call BS_GetBitsECS
jc Err
scasb
jne Err0
dec I
jnz @B
inc ebx
cmp ebx, LENGTHOF TabECS
jb TLoop
Done:
add esp, 4
DBGSTOP
popad
push Ctx
call JPEG_Free
ret
Err0:
int 3
Err:
int 3
jmp Done
TEST_BitstreamECS ENDP
;//=========================================================================
;// Test IDCT
;//=========================================================================
.DATA
ALIGN 16
In8x8 dword 6750 , 28811 , 46 , 28613 , 27442 , 29854 , 6440 , 20346
dword 24059 , 5706 , 23840 , 3889 , 4215 , 9549 , 20201 , 15494
dword 5640 , 3974 , 23380 , 2709 , 17889 , 25204 , 22114 , 28345
dword 6730 , 13889 , 29519 , 5587 , 16756 , 1366 , 23326 , 10024
dword 6241 , 11606 , 10994 , 23276 , 5240 , 25957 , 9383 , 23077
dword 7711 , 25671 , 22004 , 22529 , 9546 , 2937 , 2447 , 16286
dword 29474 , 2026 , 28240 , 17294 , 7258 , 28851 , 2866 , 29552
dword 14919 , 19094 , 1180 , 3566 , 30823 , 19006 , 22822 , 8013
Quant real4 51.0, 167.0, 214.0, 117.0, 20.0, 154.0, 57.0, 158.0
real4 243.0, 247.0, 226.0, 97.0, 175.0, 150.0, 33.0, 28.0
real4 96.0, 117.0, 237.0, 210.0, 50.0, 44.0, 79.0, 78.0
real4 147.0, 48.0, 99.0, 77.0, 157.0, 227.0, 93.0, 73.0
real4 76.0, 115.0, 44.0, 155.0, 137.0, 16.0, 155.0, 167.0
real4 252.0, 53.0, 211.0, 122.0, 242.0, 162.0, 94.0, 131.0
real4 169.0, 140.0, 60.0, 82.0, 62.0, 151.0, 55.0, 120.0
real4 43.0, 128.0, 63.0, 205.0, 250.0, 8.0, 98.0, 204.0
OutRef8x8 real4 12996638.71, -1515747.313, 2104118.988, -2874427.058, 625755.514, -1367282.426, 3009623.351, 2219209.274
real4 -2770526.608, 2282276.638, 421852.567, 704530.2941, -3269913.042, 547708.2844, -28271.3284, -830504.8428
real4 4853183.670, -506173.7389, 1494843.332, 2901514.394, 1513145.906, -1054465.212, 2082220.807, -687542.5017
real4 -202193.6234, 1548101.447, 25635.4192, -1165761.071, 262903.6128, 1202631.069, 2037055.112, -4062162.782
real4 803410.6922, -2670995.900, 140406.5582, 1932917.187, 2758966.863, -871584.0054, -3850392.968, -3058166.795
real4 -367386.3162, -326892.6243, 1339150.221, 1013610.957, -1101620.689, 442798.1391, 2678721.226, -2105032.760
real4 1344461.076, -1417005.547, -2071111.442, -681459.3677, -171310.3151, -2245939.700, -3561763.620, -943361.8538
real4 -443645.2060, -2241107.648, 1000200.811, -1504940.145, 419218.819, -569571.4046, 1122600.912, -4537151.985
OutRow16x16 real4 1378576.373, 535041.7096, -210355.3275, -212921.1994, 168193.7226, 280566.1987, 94225.4252, 5596.2436, 71409.9541, -2852.6888, -211986.1815, -179087.1058, 130603.5782, 153580.2935, -466094.4292, -1190246.566
real4 1743591.249, 1280047.575, 740016.0976, 462356.8506, 416624.1714, 352765.3116, 152618.2874, -73956.46000, -180596.3854, -136075.8758, 23466.25950, 272977.6168, 565982.9244, 800332.6534, 900907.9622, 907098.3037
real4 1445504.808, 596301.0340, -135050.0574, -133185.4661, 137023.5950, -39978.80144, -575261.4929, -818629.2950, -573583.7742, -293040.4549, -284770.3678, -272845.3891, 51514.12642, 479691.8566, 627607.7106, 539700.8215
real4 1161988.366, 515462.6861, -134096.3182, -272540.2748, -49529.73361, 58868.89978, -92843.59926, -229371.6327, -139040.8175, 20980.25184, -11770.01048, -212627.5234, -293483.9392, -59976.37452, 372799.9802, 704031.0706
real4 1248203.658, 290857.2937, -412886.0427, -199803.1805, 203885.2565, -41656.5671, -565329.5132, -444688.7474, 286457.1119, 678882.0671, 323056.8163, -114780.0526, -40745.54764, 159512.2694, -122574.4637, -628666.6390
real4 1577118.030, 899575.9469, 209867.3171, -52075.62662, -122809.8905, -334758.7775, -517596.7456, -334054.2463, 61414.40329, 174214.0708, -76182.75372, -216340.9463, 55984.56704, 417136.4817, 439530.8213, 242550.0696
real4 1450240.303, 519550.0668, -232321.8636, -95737.05178, 421686.3972, 527857.6990, 260918.5578, 162665.0630, 283212.3436, 220562.5916, 4950.2728, 173530.5266, 791971.9232, 1092212.112, 534851.0714, -258988.9969
real4 1356136.542, 490364.1979, -396382.7366, -612054.6450, -284959.9335, 63059.26979, 254229.1810, 454363.8237, 635632.2821, 475686.4921, -129337.5196, -765851.6853, -913408.9394, -501763.0260, 94797.93248, 480796.3458
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
real4 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.
OutRef16x16 real4 11361359.33, 5127200.510, -571208.931, -1115960.593, 890113.584, 866723.2332, -989039.8991, -1278075.250, 444905.1187, 1138356.455, -362573.4822, -1315024.556, 348418.6926, 2540726.264, 2381826.586, 796274.410
real4 4575961.633, 2412656.900, 446368.7730, 245237.6700, 797770.4240, 408141.4174, -816201.2401, -1448147.491, -1009274.492, -409488.0457, -235582.6262, 65861.3396, 884482.0370, 1452207.581, 994170.2577, 140381.8942
real4 -1427309.433, -68874.1659, 1107016.558, 1092477.120, 488487.6195, 186525.4464, -40545.5422, -824507.8008, -1721213.993, -1570231.275, -266472.6480, 867041.9672, 795647.7739, 29511.2771, -356757.8791, -250451.4831
real4 -1308503.126, -157918.4773, 693784.7490, 496648.0928, 154937.9864, 577808.9601, 1128931.262, 654387.7806, -576203.0345, -1132148.014, -504706.3683, 219883.0662, 60051.10963, -505346.9396, -524818.9667, -125615.6708
real4 2079244.223, 1148860.821, 90091.2670, -275512.5720, 203605.3306, 1044868.541, 1628840.838, 1580963.973, 899406.9834, -27086.01592, -590720.2072, -438873.3372, 127187.3938, 410623.5372, 97110.57960, -373432.6348
real4 3014621.364, 1591141.769, 255222.1157, 67493.08622, 557041.3144, 831871.0863, 854018.4655, 979221.5030, 953662.5705, 359785.4227, -258666.2259, 134915.5649, 1323065.290, 1657244.265, 250874.2472, -1488529.548
real4 812832.9755, 684545.6403, 691828.0595, 789309.0802, 583485.2804, 26705.6877, -345641.5337, -178056.3137, 146528.6029, 175770.1263, 242352.4402, 926405.1118, 1763318.438, 1394321.266, -573968.3801, -2547909.866
real4 -719686.9970, -241840.4482, 295172.7702, 418875.7643, 37644.88600, -462766.2998, -598867.4862, -272275.6906, 183805.6260, 431474.1932, 462196.3762, 409715.0964, 170683.5305, -527041.5178, -1618348.157, -2488782.784
real4 181756.8383, -338063.7459, -806911.6685, -786479.4886, -410906.9120, -35172.23088, 285345.1809, 706019.1465, 1112671.365, 1065540.288, 319585.0811, -798819.6882, -1677939.568, -1990581.293, -1883907.193, -1710467.274
real4 1208034.788, -140740.0414, -1334625.705, -1199781.651, -112636.5439, 815407.8765, 1163564.650, 1285190.620, 1339023.834, 981286.8037, 86460.54270, -835619.9067, -1251563.423, -1255804.324, -1272897.173, -1389995.092
real4 492210.3668, -211865.0470, -728971.9939, -402785.2027, 450032.8326, 1054364.305, 1070034.456, 711548.7448, 269810.1880, -75564.3196, -98637.76571, 320492.5526, 781924.9248, 551028.8713, -530741.8040, -1593587.705
real4 -455517.1800, -203410.7790, 58231.40415, 174322.1012, 234023.9116, 320888.0234, 267802.7036, -137344.3688, -722842.6101, -925054.3298, -359461.7593, 650702.6560, 1253374.705, 846264.8266, -319076.2614, -1310535.387
real4 206266.9429, 189206.0976, -31984.5599, -447929.6988, -735333.3635, -654674.4610, -387355.0482, -296867.4211, -460549.9691, -642650.6624, -685283.6562, -688940.5993, -755216.7054, -775269.3287, -627295.2148, -436736.0193
real4 1366691.659, 347856.1394, -790595.9951, -1277825.054, -1160595.030, -881477.1838, -569937.0706, -107093.0324, 308763.3678, 149790.7784, -759426.1460, -1848624.690, -2310714.241, -1887751.823, -1024664.259, -386808.5371
real4 985567.6306, -334387.5172, -1329084.430, -1017494.646, -258036.1156, -197009.0461, -561488.7802, -373386.2802, 283979.5526, 365828.9968, -405917.0245, -1063168.786, -941332.1724, -712114.7692, -1214770.442, -2005072.196
real4 -316309.0480, -1243700.302, -1410017.650, -167333.2016, 971464.3568, 586853.8256, -581854.1462, -912038.2199, -309913.8475, 68746.5754, 25074.5648, 528660.5178, 1518269.466, 1229266.795, -1234246.808, -3872677.170
Out8x8 real4 8*8 dup (?)
Out16x16 real4 16*16 dup (?)
cpu dword ?
espsav dword ?
.CODE
IF 0
TEST_IDCT PROTO
call TEST_IDCT
ret 4*4
ENDIF
TEST_8x8_SSE = 0
TEST_8x8_SSE2 = 1
TEST_16x16_SSE = 0
TEST_16x16_SSE2 = 1
TEST_ROWONLY = 0
TEST_IDCT PROC
pushad
mov espsav, esp
sub esp, 16*16*4+16
and esp, NOT(15)
DBGSTART
mov eax, 1
cpuid
DBG_CPUID
mov cpu, edx
mov eax, sizeof(DECODER)
call MEM_Alloc
mov Ctx, eax
ITST=0
IF TEST_8x8_SSE
ITST=ITST+1
bt cpu, 25
jnc @CatStr(Next,%ITST)
DBG "8x8 SSE"
mov [Ctx].RetIdct, @CatStr(RetIdct,%ITST)
mov ebx, 100
@CatStr(T,%ITST):
lea esi, In8x8
mov edi, esp
mov ecx, 8*8
rep movsd
lea eax, Quant
lea edi, Out8x8
jmp IDCT_8x8_SSE
@CatStr(RetIdct,%ITST):
mov ecx, -8*8
lea edi, Out8x8
emms
@@:
fld OutRef8x8[4*ecx+4*8*8]
fsub DPTR [edi][4*ecx+4*8*8]
fabs
fstp DPTR [edi][4*ecx+4*8*8]
inc ecx
jnz @B
DBG "Diff :"
pushad
mov ecx, 8
mov edx, 8
call DBG_DumpNxMFloats
popad
dec ebx
jnz @CatStr(T,%ITST)
@CatStr(Next,%ITST):
ENDIF
IF TEST_16x16_SSE
ITST = ITST+1
bt cpu, 25
jnc @CatStr(Next,%ITST)
DBG "16x16 SSE"
mov [Ctx].RetIdct, @CatStr(RetIdct,%ITST)
mov ebx, 100
@CatStr(T,%ITST):
lea esi, In8x8
mov edi, esp
mov ecx, 8*8
rep movsd
lea eax, Quant
lea edi, Out16x16
jmp IDCT_16x16_SSE
@CatStr(RetIdct,%ITST):
mov ecx, -16*16*4
lea edi, Out16x16
emms
@@:
IF TEST_ROWONLY EQ 0
fld OutRef16x16[ecx+16*16*4]
ELSE
fld OutRow16x16[ecx+16*16*4]
ENDIF
fsub DPTR [edi][ecx+16*16*4]
fabs
fstp DPTR [edi][ecx+16*16*4]
add ecx, 4
jnz @B
DBG "Diff :"
pushad
mov ecx, 16
mov edx, 16
call DBG_DumpNxMFloats
popad
dec ebx
jnz @CatStr(T,%ITST)
@CatStr(Next,%ITST):
ENDIF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -