📄 imdct_l_arm.s
字号:
ldr r12, =WL5 @ r12 = window_l[5]
movs r10, r10, lsr #28
adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
smull r10, lr, r12, r6 @ r10..lr = (window_l[5] * x[5])
ldr r12, =WL6 @ r12 = window_l[6]
movs r10, r10, lsr #28
adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
smull r10, lr, r12, r7 @ r10..lr = (window_l[6] * x[6])
ldr r12, =WL7 @ r12 = window_l[7]
movs r10, r10, lsr #28
adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
smull r10, lr, r12, r8 @ r10..lr = (window_l[7] * x[7])
ldr r12, =WL8 @ r12 = window_l[8]
movs r10, r10, lsr #28
adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
smull r10, lr, r12, r9 @ r10..lr = (window_l[8] * x[8])
movs r10, r10, lsr #28
adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
stmia r1, { r0, r2 - r9 } @ store windowed x[0] .. x[8]
cmp r11, #BLOCK_MODE_START
beq start_block_x18_to_x35
@----
normal_block_x18_to_x35:
ldr r11, =WL3 @ r11 = window_l[3]
ldr r12, =WL4 @ r12 = window_l[4]
add r1, r1, #(18*4) @ r1 = &x[18]
ldmia r1!, { r0, r2 - r4, r6 - r10 } @ load 9 words from x18, update pointer
@ r0 = x18
@ r1 = &x[27]
@ r2 = x19
@ r3 = x20
@ r4 = x21
@ r5 = .
@ r6 = x22
@ r7 = x23
@ r8 = x24
@ r9 = x25
@ r10 = x26
@ r11 = window_l[3]
@ r12 = window_l[4]
@ lr = .
smull r5, lr, r12, r6 @ r5..lr = (window_l[4] * (x[22] == x[31]))
movs r5, r5, lsr #28
adc r5, r5, lr, lsl #4 @ r5 = bits[59..28] of windowed x31
smull r6, lr, r11, r4 @ r5..lr = (window_l[3] * (x[21] == x[32]))
ldr r12, =WL5 @ r12 = window_l[5]
movs r6, r6, lsr #28
adc r6, r6, lr, lsl #4 @ r6 = bits[59..28] of windowed x32
smull r4, lr, r12, r7 @ r4..lr = (window_l[5] * (x[23] == x[30]))
ldr r11, =WL1 @ r11 = window_l[1]
ldr r12, =WL2 @ r12 = window_l[2]
movs r4, r4, lsr #28
adc r4, r4, lr, lsl #4 @ r4 = bits[59..28] of windowed x30
smull r7, lr, r12, r3 @ r7..lr = (window_l[2] * (x[20] == x[33]))
ldr r12, =WL6 @ r12 = window_l[6]
movs r7, r7, lsr #28
adc r7, r7, lr, lsl #4 @ r7 = bits[59..28] of windowed x33
smull r3, lr, r12, r8 @ r3..lr = (window_l[6] * (x[24] == x[29]))
movs r3, r3, lsr #28
adc r3, r3, lr, lsl #4 @ r3 = bits[59..28] of windowed x29
smull r8, lr, r11, r2 @ r7..lr = (window_l[1] * (x[19] == x[34]))
ldr r12, =WL7 @ r12 = window_l[7]
ldr r11, =WL8 @ r11 = window_l[8]
movs r8, r8, lsr #28
adc r8, r8, lr, lsl #4 @ r8 = bits[59..28] of windowed x34
smull r2, lr, r12, r9 @ r7..lr = (window_l[7] * (x[25] == x[28]))
ldr r12, =WL0 @ r12 = window_l[0]
movs r2, r2, lsr #28
adc r2, r2, lr, lsl #4 @ r2 = bits[59..28] of windowed x28
smull r9, lr, r12, r0 @ r3..lr = (window_l[0] * (x[18] == x[35]))
movs r9, r9, lsr #28
adc r9, r9, lr, lsl #4 @ r9 = bits[59..28] of windowed x35
smull r0, lr, r11, r10 @ r7..lr = (window_l[8] * (x[26] == x[27]))
ldr r11, =WL16 @ r11 = window_l[16]
ldr r12, =WL17 @ r12 = window_l[17]
movs r0, r0, lsr #28
adc r0, r0, lr, lsl #4 @ r0 = bits[59..28] of windowed x27
stmia r1, { r0, r2 - r9 } @ store windowed x[27] .. x[35]
ldmdb r1!, { r0, r2 - r9 } @ load 9 words downto (and including) x18
smull r10, lr, r12, r0 @ r10..lr = (window_l[17] * x[18])
movs r10, r10, lsr #28
adc r0, r10, lr, lsl #4 @ r0 = bits[59..28] of windowed x0
smull r10, lr, r11, r2 @ r10..lr = (window_l[16] * x[19])
ldr r11, =WL14 @ r11 = window_l[14]
ldr r12, =WL15 @ r12 = window_l[15]
movs r10, r10, lsr #28
adc r2, r10, lr, lsl #4 @ r2 = bits[59..28] of windowed x1
smull r10, lr, r12, r3 @ r10..lr = (window_l[15] * x[20])
movs r10, r10, lsr #28
adc r3, r10, lr, lsl #4 @ r3 = bits[59..28] of windowed x2
smull r10, lr, r11, r4 @ r10..lr = (window_l[14] * x[21])
ldr r11, =WL12 @ r11 = window_l[12]
ldr r12, =WL13 @ r12 = window_l[13]
movs r10, r10, lsr #28
adc r4, r10, lr, lsl #4 @ r4 = bits[59..28] of windowed x3
smull r10, lr, r12, r5 @ r10..lr = (window_l[13] * x[22])
movs r10, r10, lsr #28
adc r5, r10, lr, lsl #4 @ r5 = bits[59..28] of windowed x4
smull r10, lr, r11, r6 @ r10..lr = (window_l[12] * x[23])
ldr r11, =WL10 @ r12 = window_l[10]
ldr r12, =WL11 @ r12 = window_l[11]
movs r10, r10, lsr #28
adc r6, r10, lr, lsl #4 @ r6 = bits[59..28] of windowed x5
smull r10, lr, r12, r7 @ r10..lr = (window_l[11] * x[24])
movs r10, r10, lsr #28
adc r7, r10, lr, lsl #4 @ r7 = bits[59..28] of windowed x6
smull r10, lr, r11, r8 @ r10..lr = (window_l[10] * x[25])
ldr r12, =WL9 @ r12 = window_l[9]
movs r10, r10, lsr #28
adc r8, r10, lr, lsl #4 @ r8 = bits[59..28] of windowed x7
smull r10, lr, r12, r9 @ r10..lr = (window_l[9] * x[26])
movs r10, r10, lsr #28
adc r9, r10, lr, lsl #4 @ r9 = bits[59..28] of windowed x8
stmia r1, { r0, r2 - r9 } @ store windowed x[18] .. x[26]
@----
@ NB there are 2 possible exits from this function - this is only one of them
@----
add sp, sp, #(21*4) @ return stack frame
ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
@----
stop_block_x0_to_x17:
@ r0 = x0
@ r1 = &x[9]
@ r2 = x1
@ r3 = x2
@ r4 = x3
@ r5 = x4
@ r6 = x5
@ r7 = x6
@ r8 = x7
@ r9 = x8
@ r10 = -x0
@ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
@ r12 = .
@ lr = .
rsb r0, r6, #0 @ r0 = -x5
rsb r6, r2, #0 @ r6 = -x1
rsb r2, r5, #0 @ r2 = -x4
rsb r5, r3, #0 @ r5 = -x2
rsb r3, r4, #0 @ r3 = -x3
add r1, r1, #(3*4) @ r1 = &x[12]
stmia r1, { r0, r2, r3, r5, r6, r10 } @ store unchanged x[12] .. x[17]
ldr r0, =WL1 @ r0 = window_l[1] == window_s[0]
rsb r10, r9, #0 @ r10 = -x8
rsb r12, r8, #0 @ r12 = -x7
rsb lr, r7, #0 @ lr = -x6
@ r0 = WL1
@ r1 = &x[12]
@ r2 = .
@ r3 = .
@ r4 = .
@ r5 = .
@ r6 = .
@ r7 = x6
@ r8 = x7
@ r9 = x8
@ r10 = -x8
@ r11 = window mode: (0 == normal), (1 == start block), (3 == stop block)
@ r12 = -x7
@ lr = -x6
smull r5, r6, r0, r7 @ r5..r6 = (window_l[1] * x[6])
ldr r2, =WL4 @ r2 = window_l[4] == window_s[1]
movs r5, r5, lsr #28
adc r7, r5, r6, lsl #4 @ r7 = bits[59..28] of windowed x6
smull r5, r6, r2, r8 @ r5..r6 = (window_l[4] * x[7])
ldr r3, =WL7 @ r3 = window_l[7] == window_s[2]
movs r5, r5, lsr #28
adc r8, r5, r6, lsl #4 @ r8 = bits[59..28] of windowed x7
smull r5, r6, r3, r9 @ r5..r6 = (window_l[7] * x[8])
ldr r4, =WL10 @ r4 = window_l[10] == window_s[3]
movs r5, r5, lsr #28
adc r9, r5, r6, lsl #4 @ r9 = bits[59..28] of windowed x8
smull r5, r6, r4, r10 @ r5..r6 = (window_l[10] * (x[9] == -x[8]))
ldr r0, =WL13 @ r0 = window_l[13] == window_s[4]
movs r5, r5, lsr #28
adc r10, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
smull r5, r6, r0, r12 @ r5..r6 = (window_l[13] * (x[10] == -x[7]))
ldr r2, =WL16 @ r2 = window_l[16] == window_s[5]
movs r5, r5, lsr #28
adc r12, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
smull r5, r6, r2, lr @ r5..r6 = (window_l[16] * (x[11] == -x[6]))
ldr r0, =0x00
movs r5, r5, lsr #28
adc lr, r5, r6, lsl #4 @ r10 = bits[59..28] of windowed x9
stmdb r1!, { r7 - r10, r12, lr } @ store windowed x[6] .. x[11]
ldr r5, =0x00
ldr r6, =0x00
ldr r2, =0x00
ldr r3, =0x00
ldr r4, =0x00
stmdb r1!, { r0, r2 - r6 } @ store windowed x[0] .. x[5]
b normal_block_x18_to_x35
@----
start_block_x18_to_x35:
ldr r4, =WL1 @ r0 = window_l[1] == window_s[0]
add r1, r1, #(24*4) @ r1 = &x[24]
ldmia r1, { r0, r2, r3 } @ load 3 words from x24, dont update pointer
@ r0 = x24
@ r1 = &x[24]
@ r2 = x25
@ r3 = x26
@ r4 = WL1
@ r5 = WL4
@ r6 = WL7
@ r7 = WL10
@ r8 = WL13
@ r9 = WL16
@ r10 = .
@ r11 = .
@ r12 = .
@ lr = .
ldr r5, =WL4 @ r5 = window_l[4] == window_s[1]
smull r10, r11, r4, r0 @ r10..r11 = (window_l[1] * (x[24] == x[29]))
ldr r6, =WL7 @ r6 = window_l[7] == window_s[2]
movs r10, r10, lsr #28
adc lr, r10, r11, lsl #4 @ lr = bits[59..28] of windowed x29
smull r10, r11, r5, r2 @ r10..r11 = (window_l[4] * (x[25] == x[28]))
ldr r7, =WL10 @ r7 = window_l[10] == window_s[3]
movs r10, r10, lsr #28
adc r12, r10, r11, lsl #4 @ r12 = bits[59..28] of windowed x28
smull r10, r11, r6, r3 @ r10..r11 = (window_l[7] * (x[26] == x[27]))
ldr r8, =WL13 @ r8 = window_l[13] == window_s[4]
movs r10, r10, lsr #28
adc r4, r10, r11, lsl #4 @ r4 = bits[59..28] of windowed x27
smull r10, r11, r7, r3 @ r10..r11 = (window_l[10] * x[26])
ldr r9, =WL16 @ r9 = window_l[16] == window_s[5]
movs r10, r10, lsr #28
adc r3, r10, r11, lsl #4 @ r3 = bits[59..28] of windowed x26
smull r10, r11, r8, r2 @ r10..r11 = (window_l[13] * x[25])
ldr r5, =0x00
movs r10, r10, lsr #28
adc r2, r10, r11, lsl #4 @ r2 = bits[59..28] of windowed x25
smull r10, r11, r9, r0 @ r10..r11 = (window_l[16] * x[24])
ldr r6, =0x00
movs r10, r10, lsr #28
adc r0, r10, r11, lsl #4 @ r0 = bits[59..28] of windowed x24
stmia r1!, { r0, r2, r3, r4, r12, lr } @ store windowed x[24] .. x[29]
ldr r7, =0x00
ldr r8, =0x00
ldr r9, =0x00
ldr r10, =0x00
stmia r1!, { r5 - r10 } @ store windowed x[30] .. x[35]
@----
@ NB there are 2 possible exits from this function - this is only one of them
@----
add sp, sp, #(21*4) @ return stack frame
ldmia sp!, { r4 - r11, pc } @ restore callee saved regs, and return
@----
@END
@----
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -