~ubuntu-branches/ubuntu/wily/x264/wily-proposed

« back to all changes in this revision

Viewing changes to common/x86/quant-a.asm

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-01-19 07:28:39 UTC
  • mfrom: (12.1.11 experimental)
  • Revision ID: package-import@ubuntu.com-20120119072839-0vj6g40ky09d9nru
Tags: 2:0.120.2127+gitf33c8cb-2ubuntu1
* Merge from Debian, remaining changes:
  - build against libgpac-dev to enable .mp4 output

Show diffs side-by-side

added added

removed removed

Lines of Context:
428
428
;;; m4      0
429
429
    mova      m0, %1
430
430
%ifdef HIGH_BIT_DEPTH
431
 
    pmaddwd   m0, %2
432
 
    paddd     m0, m3
 
431
    pmadcswd   m0, m0, %2, m3
433
432
    psrad     m0, m2
434
433
%else
435
434
    punpckhwd m1, m0, m4
436
435
    punpcklwd m0, m4
437
 
    pmaddwd   m0, %2
438
 
    pmaddwd   m1, %3
439
 
    paddd     m0, m3
440
 
    paddd     m1, m3
 
436
    pmadcswd  m0, m0, %2, m3
 
437
    pmadcswd  m1, m1, %3, m3
441
438
    psrad     m0, m2
442
439
    psrad     m1, m2
443
440
    packssdw  m0, m1
574
571
INIT_XMM sse2
575
572
DEQUANT 4, 4, 1
576
573
DEQUANT 8, 6, 1
 
574
INIT_XMM xop
 
575
DEQUANT 4, 4, 1
 
576
DEQUANT 8, 6, 1
577
577
%else
578
578
%ifndef ARCH_X86_64
579
579
INIT_MMX mmx
586
586
INIT_XMM avx
587
587
DEQUANT 4, 4, 2
588
588
DEQUANT 8, 6, 2
 
589
INIT_XMM xop
 
590
DEQUANT 4, 4, 2
 
591
DEQUANT 8, 6, 2
589
592
%endif
590
593
 
591
594
%macro DEQUANT_DC 2
622
625
    pshufd m2, m2, 0
623
626
%rep SIZEOF_PIXEL*32/mmsize
624
627
    mova      m0, [r0+x]
625
 
    pmaddwd   m0, m2
626
 
    paddd     m0, m4
 
628
    pmadcswd  m0, m0, m2, m4
627
629
    psrad     m0, m3
628
630
    mova      [r0+x], m0
629
631
%assign x x+mmsize
651
653
%ifdef HIGH_BIT_DEPTH
652
654
INIT_XMM sse2
653
655
DEQUANT_DC d, pmaddwd
 
656
INIT_XMM xop
 
657
DEQUANT_DC d, pmaddwd
654
658
%else
655
659
%ifndef ARCH_X86_64
656
660
INIT_MMX mmx2
1153
1157
    pmovmskb  %2, mm0
1154
1158
%elif mmsize == 16
1155
1159
    movdqa   xmm0, [%3+ 0]
 
1160
%if %1 == 8
 
1161
    packssdw xmm0, [%3+16]
 
1162
    packsswb xmm0, xmm0
 
1163
%else
1156
1164
    movdqa   xmm1, [%3+32]
1157
1165
    packssdw xmm0, [%3+16]
1158
1166
    packssdw xmm1, [%3+48]
1159
1167
    packsswb xmm0, xmm1
 
1168
%endif
1160
1169
    pcmpeqb  xmm0, xmm2
1161
1170
    pmovmskb   %2, xmm0
 
1171
%elif %1 == 8
 
1172
    movq     mm0, [%3+ 0]
 
1173
    movq     mm1, [%3+16]
 
1174
    packssdw mm0, [%3+ 8]
 
1175
    packssdw mm1, [%3+24]
 
1176
    packsswb mm0, mm1
 
1177
    pcmpeqb  mm0, mm2
 
1178
    pmovmskb  %2, mm0
1162
1179
%else
1163
1180
    movq     mm0, [%3+ 0]
1164
1181
    movq     mm1, [%3+16]
1194
1211
INIT_MMX mmx2, lzcnt
1195
1212
COEFF_LAST4
1196
1213
 
 
1214
%macro COEFF_LAST8 0
 
1215
cglobal coeff_last8, 1,3
 
1216
    pxor m2, m2
 
1217
    LAST_MASK 8, r1d, r0
 
1218
%if mmsize == 16
 
1219
    xor r1d, 0xffff
 
1220
    shr r1d, 8
 
1221
%else
 
1222
    xor r1d, 0xff
 
1223
%endif
 
1224
    BSR eax, r1d, 0x1f
 
1225
    RET
 
1226
%endmacro
 
1227
 
 
1228
%ifndef ARCH_X86_64
 
1229
INIT_MMX mmx2
 
1230
COEFF_LAST8
 
1231
%endif
 
1232
INIT_XMM sse2
 
1233
COEFF_LAST8
 
1234
INIT_XMM sse2, lzcnt
 
1235
COEFF_LAST8
 
1236
 
1197
1237
%else ; !HIGH_BIT_DEPTH
1198
1238
%macro LAST_MASK 3-4
 
1239
%if %1 <= 8
 
1240
    movq     mm0, [%3+ 0]
1199
1241
%if %1 == 4
1200
 
    movq     mm0, [%3]
1201
1242
    packsswb mm0, mm0
 
1243
%else
 
1244
    packsswb mm0, [%3+ 8]
 
1245
%endif
1202
1246
    pcmpeqb  mm0, mm2
1203
1247
    pmovmskb  %2, mm0
1204
1248
%elif mmsize == 16
1220
1264
%endif
1221
1265
%endmacro
1222
1266
 
1223
 
%macro COEFF_LAST4 0
 
1267
%macro COEFF_LAST48 0
1224
1268
%ifdef ARCH_X86_64
1225
1269
cglobal coeff_last4, 1,1
1226
1270
    BSR  rax, [r0], 0x3f
1239
1283
    lea   eax, [eax+ecx*2]
1240
1284
    RET
1241
1285
%endif
 
1286
 
 
1287
cglobal coeff_last8, 1,3
 
1288
    pxor m2, m2
 
1289
    LAST_MASK 8, r1d, r0, r2d
 
1290
    xor r1d, 0xff
 
1291
    BSR eax, r1d, 0x1f
 
1292
    RET
1242
1293
%endmacro
1243
1294
 
1244
1295
INIT_MMX mmx2
1245
 
COEFF_LAST4
 
1296
COEFF_LAST48
1246
1297
INIT_MMX mmx2, lzcnt
1247
 
COEFF_LAST4
 
1298
COEFF_LAST48
1248
1299
%endif ; HIGH_BIT_DEPTH
1249
1300
 
1250
1301
%macro COEFF_LAST 0
1364
1415
COEFF_LEVELRUN 16
1365
1416
%endif
1366
1417
COEFF_LEVELRUN 4
 
1418
COEFF_LEVELRUN 8
1367
1419
INIT_XMM sse2
 
1420
%ifdef HIGH_BIT_DEPTH
 
1421
COEFF_LEVELRUN 8
 
1422
%endif
1368
1423
COEFF_LEVELRUN 15
1369
1424
COEFF_LEVELRUN 16
1370
1425
INIT_XMM sse2, lzcnt
 
1426
%ifdef HIGH_BIT_DEPTH
 
1427
COEFF_LEVELRUN 8
 
1428
%endif
1371
1429
COEFF_LEVELRUN 15
1372
1430
COEFF_LEVELRUN 16
1373
1431
INIT_MMX mmx2, lzcnt
1374
1432
COEFF_LEVELRUN 4
 
1433
COEFF_LEVELRUN 8