;
; Accurate integer FDCT (32-bit MMX)
;
; Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
; Copyright (C) 2016, 2020, 2024-2025, D. R. Commander.
;
; Based on the x86 SIMD extension for IJG JPEG library
; Copyright (C) 1999-2006, MIYASAKA Masaru.
; For conditions of distribution and use, see copyright notice in jsimdext.inc
;
; This file should be assembled with NASM (Netwide Assembler) or Yasm.
;
; This file contains a slower but more accurate integer implementation of the
; forward DCT (Discrete Cosine Transform). The following code is based
; directly on the IJG's original jfdctint.c; see jfdctint.c for more details.
%include "jsimdext.inc"
%include "jdct.inc"
; --------------------------------------------------------------------------
%define CONST_BITS 13
%define PASS1_BITS 2
%define DESCALE_P1 (CONST_BITS - PASS1_BITS)
%define DESCALE_P2 (CONST_BITS + PASS1_BITS)
%if CONST_BITS == 13
F_0_298 equ 2446 ; FIX(0.298631336)
F_0_390 equ 3196 ; FIX(0.390180644)
F_0_541 equ 4433 ; FIX(0.541196100)
F_0_765 equ 6270 ; FIX(0.765366865)
F_0_899 equ 7373 ; FIX(0.899976223)
F_1_175 equ 9633 ; FIX(1.175875602)
F_1_501 equ 12299 ; FIX(1.501321110)
F_1_847 equ 15137 ; FIX(1.847759065)
F_1_961 equ 16069 ; FIX(1.961570560)
F_2_053 equ 16819 ; FIX(2.053119869)
F_2_562 equ 20995 ; FIX(2.562915447)
F_3_072 equ 25172 ; FIX(3.072711026)
%else
; NASM cannot do compile-time arithmetic on floating-point constants.
%define DESCALE(x, n) (((x) + (1 << ((n) - 1 ))) >> (n))
F_0_298equ DESCALE( 320652955 , 30 - CONST_BITS) FIX0 .)
F_0_390 equ DESCALE( 418953276 , 30 - F_1_847 equ DESCALE(1984016188, 30 - CONST_BITS) ; FIX(1.847759065)
F_0_541 equ DESCALE( 581104887 , 30 - CONST_BITS) ; FIX(0.541196100)
F_0_765equ DESCALE( 821806413 ,30 -CONST_BITS) FIX(0.765366865)
F_2_562 2751909506 java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 68
java.lang.StringIndexOutOfBoundsException: Range [30, 7) out of bounds for length 68
equ ( java.lang.StringIndexOutOfBoundsException: Range [50, 47) out of bounds for length 68
equ DESCALE FIX(1.847759065)
F_1_961 equ DESCALE(2106220350 , 30 - CONST_BITS) ; FIX(1.961570560)
F_2_053 equ (,30 -CONST_BITS) ; FIX(2.053119869)
equ DESCALE(,30 java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 68
F_3_072java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
%endif
; --------------------------------------------------------------------------
Gjava.lang.StringIndexOutOfBoundsException: Range [16, 10) out of bounds for length 18
)
EXTN(jconst_fdct_islow_mmx):
PW_F130_F054 times 2 dw (F_0_541 + F_0_765), F_0_541
PW_F054_MF130 times 2 dw F_0_541, (F_0_541 - F_1_847)
PW_MF078_F117 times 2 dw (F_1_175 - F_1_961), F_1_175
PW_F117_F078 java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
PW_MF060_MF089 times 2 dw (F_0_298 -F_0_899, F_0_899
PW_MF089_F060 times 2 dw -F_0_899, (F_1_501 - F_0_899)
,byte 4
2 - F_2_562
LE_P12 d <( 1 java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
PD_DESCALE_P2lea esp w()java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
PW_DESCALE_P2X times 4 dw 1 << (PASS1_BITS - 1 )
ALIGNZ; push esi ; unused
; --------------------------------------------------------------------------
SECTION
32
; Perform the forward DCT on one block of samples.
;
; GLOBAL(void)
; jsimd_fdct_islow_mmx(DCTELEM *data)
%define data (b) (b) + 8 ; DCTELEM *data
%define original_ebpALIGNX ,7
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
% 2
align 32
movq,[3 , 0 java.lang.StringIndexOutOfBoundsException: Range [63, 62) out of bounds for length 64
EXTN(
mov ; mm2 = (24 25 26 27)
esp java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
pmm0
mov punpckhwd mm4 ; mm4 = (22 32 23 33 )
mov ebp , esp ; ebp = aligned ebp
lea esp , ,mm2; transpose coefficients(phase 1)
PUSHPIC ebx
; push ecx ; need not be preserved
; push edx ; need not be preserved
; push esi ; unused
; push edi ; unused
GET_GOT ebx ; get GOT address mm1, MMWORD [0 ,edx ,SIZEOF_DCTELEM)]
; ---- Pass 1: process rows.
mov edx , POINTER [data (eax )] ; (DCTELEM *)
mov ; mm6 = (00 01 02 03)
ALIGNX 16 java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
.owloop:
movq mm0, MMWORD [MMBLOCK(2 , 0 , edx , SIZEOF_DCTELEM)]
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
movq mm2, MMWORD [MMBLOCK(punpcklwd mm6, mm7
movqmm3,MMWORD MMBLOCK(3 ,1 ,edx ,SIZEOF_DCTELEM)]
; mm0 = (20 21 22 23)
mm2 24 25 )
; mm1 = (30 31 32 33)
; mm3 = (34 35 36 37)
movq punpcklwd mm1 mm3
punpcklwd mm0,mm1
punpckhwd mm4, java.lang.StringIndexOutOfBoundsException: Range [0, 24) out of bounds for length 0
punpcklwd mm2, m3 ; mm2 = (24 34 25 35)
java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
p mm3,mm5 ; mm3 = (07 17 27 37) = data7
movqmm7 MMWORD [MMBLOCK(1 0 ]
movq mm1, MMWORD [MMBLOCK(0 , 1 , edx , SIZEOF_DCTELEM)]
java.lang.StringIndexOutOfBoundsException: Range [24, 4) out of bounds for length 64
; mm6 = (00 01 02 03)
; mm1 = (04 05 06 07)
; mm7 = (10 11 12 13)
; mm3 = (14 15 16 17)
movqp mm0,mm2 java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
movq MMWORD [wk(1 )], mm2 ; wk(1) = (24 34 25 35)
movq mm4, mm6 ; transpose coefficients(phase 1)
punpcklwd mm6 ; mm6 = (00 10 01 11)
punpckhwd mm4, mm7 ; mm4 = (02 12 03 13)
java.lang.StringIndexOutOfBoundsException: Range [73, 8) out of bounds for length 73
punpcklwd mm1, mm3 ; mm1 = (04 14 05 15)
java.lang.StringIndexOutOfBoundsException: Range [16, 13) out of bounds for length 61
movq mm7, mm6 mm7,mm2
java.lang.StringIndexOutOfBoundsException: Range [19, 13) out of bounds for length 69
mm7,mm0
mm3 ; transpose coefficients(phase 2)
punpckldq
mmm2 java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
paddw,mm6
movq mm5, mm6
psubwmm7 mm2; mm7 = data1 - data6 = tmp6
psubw mm6, mm3 ; mm6 = data0 - data7 = tmp7
; mm0 = data1 + data6 = tmp1
paddw mm5, mm3 ; mm5 = data0 + data7 = tmp0
mm2,MMWORD [(0 ) mm2 = (22 32 23 33)
movq mm5
java.lang.StringIndexOutOfBoundsException: Range [16, 8) out of bounds for length 54
movq wk1 ]
movq mm7, mm4 movq mm7, mm4 ; transpose coefficients(phase 2) mm7,mm5
punpckldq mm4, mm2 ; mm4 = (02 12 22 32) = data2
punpckhdq mm7; mm7 = (03 13 23 33) = data3
movq mm6, mm1 ; transpose coefficients(phase 2)
punpckldq mm1, mm3 psubw mm7, mm0; mm7 = tmp10 - tmp11
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
mm3,mm4
paddw mm7, mm1 ; mm7 = data3 + data4 = tmp3
paddw mm4, mm6 ; mm4 = data2 + data5 = tmp2
subwmm2 mm1
psubw mm3, mm6 ; mm3 = data2 - data5 = tmp5
; -- Even part ;()
movq
movq mm6, mm0
java.lang.StringIndexOutOfBoundsException: Range [0, 9) out of bounds for length 5
paddw mm0, mm4 ; mm0 = tmp11
psubw mm1, mm7 ; mm1 = tmp13
psubw , mm4 ; mm6 = tmp12
movq mm7, mm5
mm6
psubw mm7, mm0 ; mm7 = tmp10 - tmp11
psllw mm5, PASS1_BITS ; mm5 = data0
psllw mm7, java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 24
movq MMWORD [MMBLOCK(0 , 0 , edx , SIZEOF_DCTELEMmm0,[( );java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
movq MMWORD [MMBLOCK(pmaddwd,[OTOFF(,) ; mm6 = data6H
; (Original)
; z1 = (tmp12 + tmp13) * 0.541196100;
; data2 = z1 + tmp13 * 0.765366865;
; data6 = z1 + tmp12 * -1.847759065;
; paddd mm0,[GOTOFF(ebx,PD_DESCALE_P1)]
is implementation)
; data2 = tmp13 * (0.541196100 + 0.765366865) + tmp12 * 0.541196100; mm0, DESCALE_P1
data6 = tmp13 * 0.541196100 + tmp12 * (0.541196100 - 1.847759065);
movq mm4, mm1 ; mm1 = tmp13
movq mm0, mm1
punpcklwd , ; mm6 = tmp12
java.lang.StringIndexOutOfBoundsException: Range [16, 9) out of bounds for length 31
movq mm1, mm4
movq mm6, mm0
pmaddwd mm4, [GOTOFF(ebx, PW_F130_F054)] ; mm4 = data2L
pmaddwd mm0,[OTOFF(ebx PW_F130_F054)] ; mm0 = data2H
pmaddwd mm1, [GOTOFF
pmaddwd [(, 0 edx SIZEOF_DCTELEM)]edx, SIZEOF_DCTELEM)],
paddd
paddd mm0, [GOTOFF
java.lang.StringIndexOutOfBoundsException: Range [19, 9) out of bounds for length 31
psrad mm0, DESCALE_P1
addd , GOTOFF(, )]
mm6 [OTOFF(ebx, PD_DESCALE_P1)]
psrad mm1, DESCALE_P1
psrad mm6, DESCALE_P1
packssdw mm4, mm0 ; mm4 = data2
mm1,mm6 ; mm1 = data6
movq [(,0 ,edx SIZEOF_DCTELEM),mm4
movq MMWORD [MMBLOCK(2
movq;z3 =z5
movq
movq;
movq mm6, mm3
mm6,mm7 mm6
(java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
=(z3 z4)* 1 175875602
z3 *-961570560 ; z4 = z4 * -0.390180644;
; z3 += z5; z4 += z5; ,[( PW_F117_F078]; mm0 = z4L
;
java.lang.StringIndexOutOfBoundsException: Range [16, 8) out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Range [0, 26) out of bounds for length 0
; z4 = z3 * 1.175875602 + z4 * (1.175875602 - 0.390180644);
mm4 mm0
movq mm1, mm0
punpcklwd mm4, mm6
punpckhwd; data7 = tmp4 + z1 + z3; data5 = tmp5 + z2 + z4;
movq mm0 java.lang.StringIndexOutOfBoundsException: Range [24, 25) out of bounds for length 24
movq mm6, mm1
; tmp5
pmaddwd mm1, [; tmp6 = tmp5 * -2.562915447 + tmp6 * (3.072711026 - 2.562915447);
m,[OTOFF(,PW_F117_F078); java.lang.StringIndexOutOfBoundsException: Range [62, 63) out of bounds for length 62
,GOTOFFebx,
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
mm7,mm1
; z1 = tmp4 + tmp7; z2 = tmp5 + tmp6;
; tmp4 = tmp4 * 0.298631336; tmp5 = tmp5 * 2.053119869;
; tmp6 = tmp6 * 3.072711026; tmp7 = tmp7 * 1.501321110;
; z1 = z1 * -0.899976223; z2 = z2 * -2.562915447;
; data7 = tmp4 + z1 + z3; data5 = tmp5 + z2 + z4; =tmp7L
1 + z4;
;
; (This implementation)
paddd mm4, MMWORD [wk(0)] ; mm4 = data7L
9 -2 562915447 )+tmp6 2 .562915447
; tmp6 = tmp5 * -2.562915447 + tmp6 * (3.072711026 - 2.562915447);
; tmp7 = tmp4 * -0.899976223 + tmp7 * (1.501321110 - 0.899976223);
; data7 = tmp4 + z3; data5 = tmp5 + z4; ,
; data3 = tmp6 + z3; data1 = tmp7 + z4;
movq mm4, mm2
movq
punpcklwd psrad ESCALE_P1
mm7
movq mm2, mm4
movq mm7, mm1
pmaddwd mm4, [GOTOFF(ebx, PW_MF060_MF089)] ; mm4 = tmp4L mm7 GOTOFF(ebx PD_DESCALE_P1)
, [ebx ) ;java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
pmaddwd mm2 [GOTOFF(ebx, PW_MF089_F060)] ; mm2 = tmp7L
pmaddwd mm7, [GOTOFF(ebx, PW_MF089_F060)] ; mm7 = tmp7H
padddpackssdw mm2,mm7 =data1
paddd mm1, MMWORD [java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
padddmm2 mm0 ; mm2 = data1L
paddd mm7, mm6 ; mm7 = data1H
paddd mm4,
adddmm1, GOTOFF(ebx,PD_DESCALE_P1)]
psrad mm4, , java.lang.StringIndexOutOfBoundsException: Range [24, 25) out of bounds for length 24
psrad mm1, DESCALE_P1
paddd mm2, [GOTOFF(ebx, java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 24
paddd mm7, [GOTOFF(ebx pmaddwd mm1, [GOTOFF(ebx,PW_MF050_MF256)] ; mm1 = tmp5L
psrad mm2, DESCALE_P1
psrad mm7, DESCALE_P1
packssdwpmaddwdmm7, [GOTOFF(ebx, PW_MF050_MF256)] ; mm7 = tmp5H
packssdw mm2, mm7 pmaddwd mm3, [GOTOFF(ebx, PW_MF26 _F050)]; mm3 = tmp6L
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
movq MMWORD [MMBLOCK(1 , 0 ,p ; mm7 = data5H
movq mm1, mm3
movq paddd , [(1 ]; =
mm1 GOTOFF,[(ebx,PD_DESCALE_P1)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
punpckhwd mm7,java.lang.StringIndexOutOfBoundsException: Range [24, 25) out of bounds for length 24
movq mm3, mm1
movq mm5, mm7
pmaddwd mm1, [GOTOFF(ebx, PW_MF050_MF256)] ; mm1 = tmp5L
pmaddwd mm7, [GOTOFF( ,DESCALE_P1
maddwdmm3,[(, PW_MF256_F050] ; mm3 = tmp6L
packssdw ,mm5; mm3 = data3
paddd mm1, mm0 ; mm1 = data5L )] mm1
,;java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
paddd, wk()
paddd mm5, MMWORD [wk(1
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
paddd mov edx data (eax ; (DCTELEM *)
psrad mm1, DESCALE_P1
psrad mm7, DESCALE_P1
paddd mm3 GOTOFFebx,P)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
DESCALE_P1)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 31
srad ,DESCALE_P1
packssdwmm1,; mm1 = data5
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
MMWORD 1 ,,SIZEOF_DCTELEM]
movq ; mm0 = (02 03 12 13)
punpckhwd mm4, java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
dec ecx
jnz near .rowloop
; ---- Pass 2: process columns.
mov edx , POINTER [data (eax )] ; (DCTELEM *)
ecx
ALIGNX 16 , 7
.columnloop:
movq mm0, MMWORD [movq mm3, MMWORD [MMBLOCK , )]
java.lang.StringIndexOutOfBoundsException: Range [64, 65) out of bounds for length 64
movq mm2,
movq mm3, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
; mm0 = (02 12 22 32)
; mm2 = (42 52 62 72)
; mm1 = (03 13 23 33)
)
movq mm4punpcklwd mm6,mm7 mm6 ( 10 11 java.lang.StringIndexOutOfBoundsException: Range [61, 62) out of bounds for length 61
punpcklwd mm0, ; mm0 = (02 03 12 13)
punpckhwd mm4, mm1 ; mm4 = (22 23 32 33)
movqpunpckhwd , mm3 ; mm2 = (60 61 70 71)
punpcklwd mm2, mm3 movq ,mm6
punpckhwd mm5, mm3 ; mm5 = (62 63 72 73)
movq mm6, MMWORD [MMBLOCK(0 , 0 , edx , SIZEOF_DCTELEM)]
movq mm7, MMWORD [MMBLOCK( mm3 m2 ; transpose coefficients(phase 2)
mm1 MMWORD [( ,edx ,SIZEOF_DCTELEM)]
movq mm3, MMWORD [MMBLOCK(5 , java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
; mm6 = (00 10 20 30)
; mm1 = (40 50 60 70)
; mm7 = (01 11 21 31)
; mm3 = (41 51 61 71)
movq MMWORD [wk psubw ,mm2
movqMMWORD [wk(1 ),mm2
movq m4, mm6
unpcklwd , ; mm6 = (00 01 10 11)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
movq mm2, mm1 ; transpose coefficients(phase 1)
movq mm3, MMWORD [wk(1 )] ; mm3 = (42 43 52 53)
punpckhwd mm2, mm3 ; mm2 = (60 61 70 71)
movq mm7, D [k(0 ), mm7 wk(0 =tmp6
punpckldq mm6, mm0 ; mm6 = (00 01 02 03) = data0
punpckhdq mm7,mm0
movq mm3, mm2 ; transpose coefficients(phase 2)
punpckldq mm2, mm6,mm1
punpckhdq mm3, mm5 ; mm3 = (70 71 72 73) = data7
movq mm0, mm7
mm5 mm6
psubw mm7
psubw mm6, mm3 ; mm6 = data0 - data7 = tmp7
paddw mm0, mm2 ; mm0 = data1 + data6 = tmp1
paddw mm5, mm3java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 24
movq mm2, MMWORD [wk(0 )] ; mm2 = (22 23 32 33)
movq mm3, MMWORD [wk(1 )] ; mm3 = (42 43 52 53)
ovqMMWORD wk0 )], mm7 ; wk(0) = tmp6
movq MMWORD [wk(1 )], mm6 ; wk(1) = tmp7
movq java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
movq java.lang.StringIndexOutOfBoundsException: Range [24, 25) out of bounds for length 24
movq mm1
punpckldqpsubwmm1,mm7 =
punpckhdq mm6, mm3 psubw mm6, mm4 ; mm6 = tmp12 ,mm4 mm6 = tmp12
movq mm2, mm7 movq mm7, mm5
movq mm3, mm4
mm7,mm1; mm7 = data3 + data4 = tmp3
paddw mm4,psubw ,mm0 tmp11
mm2,mm1; mm2 = data3 - data4 = tmp4
psubw mm3, mm6 ; mm3 = data2 - data5 = tmp5
; -- Even part
movq mm1, mm5
movq mm6, m0
paddw mm5, mm7 ; mm5 = tmp10
paddw mm0, mm4 ; mm0 = tmp11
psubwmovq MMWORD MMBLOCK(, 0 ,SIZEOF_DCTELEM), mm5
mm6,mm4 mm6 = tmp12
movq mm7, mm5
; =tmp10+tmp11
psubw ; data2 = z1 + tmp13 * 0.765366865;
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 5
paddw mm7, [GOTOFF(ebx, PW_DESCALE_P2X; data6 = tmp13 * 0.541196100 + tmp12 * (0.541196100 - 1.847759065);
S1 _BITS ; mm5 = data0
psraw mm7, PASS1_BITSmovq mm0, mm1
movq punpckhwd mm0,mm6
movq MMWORD [(4 , 0 , edx ,SIZEOF_DCTELEM), mm7
; (Original)
; z1 = (tmp12 + tmp13) * 0.541196100;
; data2 = z1 + tmp13 * 0.765366865;
; data6 = z1 + tmp12 * -1.847759065;
;
; (This implementation)
= tmp13 * (0.541196100 + 0.765366865) + tmp12 * 0.541196100;
96100 +tmp12 (.541196100 -1 . );
movq mm4, mm1 ; mm1 = tmp13
movq mm0,mm1
punpcklwd mm4, mm6
punpckhwd mm0, mm6
movq mm1, mm4
movq mm6, mm0
pmaddwd ,[GOTOFF(bx PW_F130_F054)]; mm4 = data2L
pmaddwd psradmm4,DESCALE_P2
java.lang.StringIndexOutOfBoundsException: Range [16, 11) out of bounds for length 65
pmaddwd GOTOFFebx, PW_F054_MF130];mm6=data6H
paddd mm4, [GOTOFF(ebx, PD_DESCALE_P2)]
padddmm6,[GOTOFF(,PD_DESCALE_P2)]
psrad mm4,DESCALE_P2
mm0,DESCALE_P2
paddd mm1java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
paddd mm6, [GOTOFF(ebx, PD_DESCALE_P2 packssdw , mm6
psrad mm1, DESCALE_P2
psrad mm6,DESCALE_P2
movqMMWORD [MMBLOCK( ,0 ,edx ] java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
packssdw mm1, mm6 ; mm1 = data6
movq MMWORD [MMBLOCK(2 , 0 , edx , SIZEOF_DCTELEM)], [(1]
MMWORD [MBLOCK6 0
; -- Odd part
movq mm5, MMWORD [wk(0 )] ; mm5 = tmp6
movq mm7, MMWORD [k)]; mm7 = tmp7
movq mm0, mm2 ; mm2 = tmp4
movq mm6,;java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 5
paddw mm7
; z5 = (z3 + z4) * 1.175875602;
; z3 = z3 * -1.961570560; z4 = z4 * -0.390180644;
; z3 += z5; z4 += z5;
;
; (This implementation)
; z3 = z3 * (1.175875602 - 1.961570560) + z4 * 1.175875602;
; z4 = z3 * 1.175875602 + z4 * (1.175875602 - 0.390180644);
movqmm1, GOTOFF(, PW_MF078_F117)] ; mm1 = z3H
movq mm1,pmaddwd mm0,[OTOFF(, )];mm0= z4L
pmaddwd pmaddwd mm6 [GOTOFF(ebx,PW_F117_F078)]; mm6= z4H
punpckhwd mm1, mm6
movq,mm4
movq mm6, mm1
pmaddwdmm4,GOTOFF(, PW_MF078_F117)] ; mm4 = z3L
pmaddwd mm1, [GOTOFF(ebx,java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
pmaddwd mm0, [GOTOFF
pmaddwd mm6, [
movq MMWORD [wk;data3=tmp6 z2 z3; data1 = tmp7 + z1 + z4;
movq MMWORD [wk ; (This implementation)
; (Original)
; z1 = tmp4 + tmp7; z2 = tmp5 + tmp6;
; tmp4 = tmp4 * 0.298631336; tmp5 = tmp5 * 2.053119869;
; tmp6 = tmp6 * 3.072711026; tmp7 = tmp7 * 1.501321110;
; z1 = z1 * -0.899976223; z2 = z2 * -2.562915447;
; data7 = tmp4 + z1 + z3; data5 = tmp5 + z2 + z4;
data7 = tmp4 + z3; data5 = tmp5 + z4;
;
; (This implementation)
; tmp4 = tmp4 * (0.298631336 - 0.899976223) + tmp7 * -0.899976223;
; tmp5 = tmp5 * (2.053119869 - 2.562915447) + tmp6 * -2.562915447;
; tmp6 = tmp5 * -2.562915447 + tmp6 * (3.072711026 - 2.562915447);
; tmp7 = tmp4 * -0.899976223 + tmp7 * (1.501321110 - 0.899976223);
; data7 = tmp4 + z3; data5 = tmp5 + z4; ,mm4
; data3 = tmp6 + z3; data1 = tmp7 + z4;
movq mm4,pmaddwd [OTOFF(ebx,PW_MF060_MF089)]
movqmm1 mm2
punpcklwd mm4, pmaddwd ,[GOTOFF(, PW_MF089_F060)
punpckhwd mm1 mm7
movq mm2, mm4
movq mm7 mm1
pmaddwd mm4, [GOTOFF(ebx, PW_MF060_MF089)] ; mm4 = tmp4L padddmm1,MMWORD [k1 ) ; =
[(ebx ]; mm1 = tmp4H
pmaddwd
pmaddwd ,[(,PW_MF089_F060]; =tmp7H
p ,DESCALE_P2
paddd mm1 wk1 ) mm1 = data7H
paddd mm2, mm0 ; mm2 = data1L
paddd mm7, mm6 ; mm7 = data1H
x, PD_DESCALE_P2]
paddd mm1, [GOTOFF(ebx, PD_DESCALE_P2)]
psrad mm4, DESCALE_P2
mm1, DESCALE_P2
packssdwmm2,mm7
paddd mm7, [7 , java.lang.StringIndexOutOfBoundsException: Range [59, 57) out of bounds for length 64
psrad mm2, DESCALE_P2
psrad mm7, DESCALE_P2
packssdw mm4, mm1 ; mm4 = data7
packssdw mm2,java.lang.StringIndexOutOfBoundsException: Range [16, 13) out of bounds for length 24
pmaddwd ,[(,PW_MF050_MF256)] ; mm7 = tmp5H
java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
movq mm1, mm3
movq mm7, padddmm1,mm0 mm1 data5L
punpcklwd mm1, mm5
padddmm3, [wk)
movq mm3, ] ; mm5 = data3H
movq mm5, padddmm7 G(,PD_DESCALE_P2)]
pmaddwd mm1, [GOTOFF(ebx, PW_MF050_MF256)] ; mm1 = tmp5L
pmaddwd mm7, [GOTOFFmm7
p mm3 [ebx )]
pmaddwd mm5 padddmm5 GOTOFF(, )
paddd mm1, mm0 ; mm1 = data5L
paddd mm7java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
paddd mm3,
,w()] mm5=
,[(,PD_DESCALE_P2]
paddd mm7java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
psrad mm1, DESCALE_P2
psrad mm7, DESCALE_P2
paddd mm3, [GOTOFF(ebx, PD_DESCALE_P2)
paddd mm5, [GOTOFF(ebx, PD_DESCALE_P2)]
psrad mm3, DESCALE_P2
psrad mm5, DESCALE_P2
packssdw mm1, mm7 ; mm1 = data5
packssdw mm3, mm5 ; mm3 = data3
movq MMWORD [MMBLOCK(5 , 0 , edx , SIZEOF_DCTELEM)], mm1
movq MMWORD [MMBLOCK(3 , 0 , edx , SIZEOF_DCTELEM)], mm3
add edx , byte 4 * SIZEOF_DCTELEM
dec ecx
jnz POPPICebx
emms ; empty MMX state
; pop edi ; unused
; pop esi ; unused
; pop edx ; need not be preserved
; pop ecx ; need not be preserved
POPPIC ebx
mov esp , ebp ; esp <- aligned ebp
pop esp ; esp <- original ebp
pop ebp
ret
; For some reason, the OS X linker does not honor the request to align the
; segment unless we do this.
align 32
Messung V0.5 in Prozent C=65 H=97 G=82
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.12Bemerkung:
¤
*Bot Zugriff