Detabify. Remove trailing whitespace.

This commit is contained in:
Markus F.X.J. Oberhumer
2010-03-01 01:28:03 +01:00
parent f03f42ca4d
commit 3bc3b3d10e
2 changed files with 314 additions and 312 deletions
+1 -1
View File
@@ -113,7 +113,7 @@ L90:
pop %arg1 # ADRU pop %arg1 # ADRU
pop %rcx # JMPU pop %rcx # JMPU
pop %rcx # breadcrumb size in pages pop %rcx # breadcrumb size in pages
shl $12,%ecx shl $12,%ecx
addl %ecx,%arg1l # addr += crumb XXX 4GB addl %ecx,%arg1l # addr += crumb XXX 4GB
subl %ecx,%arg2l # len -= crumb XXX 4GB subl %ecx,%arg2l # len -= crumb XXX 4GB
push %rax # &entry push %rax # &entry
+313 -311
View File
@@ -1,5 +1,5 @@
// In LZMA SDK 4.63 file lzma.txt (2008-12-30): // In LZMA SDK 4.63 file lzma.txt (2008-12-30):
// LZMA SDK is written and placed in the public domain by Igor Pavlov. // LZMA SDK is written and placed in the public domain by Igor Pavlov.
// The creative expression of this hand compilation into assembly language, // The creative expression of this hand compilation into assembly language,
// including (but not limited to) code organization and register assignment, // including (but not limited to) code organization and register assignment,
// remains copyright by John F. Reiser and licensed under GNU Lesser General // remains copyright by John F. Reiser and licensed under GNU Lesser General
@@ -82,38 +82,38 @@ Literal= (RepLenCoder + kNumLenProbs)
#define call bl /* subroutine call */ #define call bl /* subroutine call */
#define symbol mi #define symbol mi
#define mo mi #define mo mi
#define mi r0 #define mi r0
#define p_in r1 #define p_in r1
#define t1 r2 #define t1 r2
#define t0 r3 #define t0 r3
#define bit r4 #define bit r4
#define i r5 #define i r5
#define state r6 #define state r6
#define Range r7 #define Range r7
#define inPtr r8 #define inPtr r8
#define outPtr r9 #define outPtr r9
#define prob r10 #define prob r10
#define p r11 #define p r11
#define Code r12 #define Code r12
#define nowPos bit /* temporary only */ #define nowPos bit /* temporary only */
#define distance bit #define distance bit
#define numDirectBits bit #define numDirectBits bit
#define hibit bit #define hibit bit
#define matchB i #define matchB i
#define probLen i #define probLen i
#define probLit i #define probLit i
#define posSlot posState #define posSlot posState
#define r_posSlot t0 #define r_posSlot t0
#define r_len i #define r_len i
#define r_rep0 p_in #define r_rep0 p_in
#define vs r0 #define vs r0
vs_ps= 2 vs_ps= 2
@@ -123,390 +123,392 @@ vs_lc= 0
#if !defined(PARAMETER_STYLE) /*{*/ #if !defined(PARAMETER_STYLE) /*{*/
#define PARAMETER_STYLE 1 #define PARAMETER_STYLE 1
// Possible choices: // Possible choices:
// 1 /* 0 bytes; 1-byte encoding of pb,lp,lc [default] */ // 1 /* 0 bytes; 1-byte encoding of pb,lp,lc [default] */
// 2 /* -24 bytes; 2-byte encoding requires no division */ // 2 /* -24 bytes; 2-byte encoding requires no division */
// 3 /* -32 bytes; separate bytes lc,lp,pb,xx at -4+ probs */ // 3 /* -32 bytes; separate bytes lc,lp,pb,xx at -4+ probs */
#endif /*}*/ #endif /*}*/
/* LzmaDecode(r0=vs, r1=inStream, r2=inSize, r3= &inSizeProcessed, /* LzmaDecode(r0=vs, r1=inStream, r2=inSize, r3= &inSizeProcessed,
[sp,#0]= outStream, [sp,#4]= outSize, [sp,#8]= &outSizeProcessed) [sp,#0]= outStream, [sp,#4]= outSize, [sp,#8]= &outSizeProcessed)
*/ */
LzmaDecode: .globl LzmaDecode LzmaDecode: .globl LzmaDecode
// save &inSizeProcesesed and caller registers // save &inSizeProcesesed and caller registers
stmdb sp!,{r3, r4,r5,r6,r7, r8,r9,r10,r11, lr} stmdb sp!,{r3, r4,r5,r6,r7, r8,r9,r10,r11, lr}
add r12,r2,r1 // inLim add r12,r2,r1 // inLim
ldr outPtr,[sp, #10*4 + 0*4] // outStream ldr outPtr,[sp, #10*4 + 0*4] // outStream
ldr r7,[sp, #10*4 + 1*4] // outSize ldr r7,[sp, #10*4 + 1*4] // outSize
mov inPtr,r1 mov inPtr,r1
add r10,r7,outPtr // outLim add r10,r7,outPtr // outLim
#if 1==PARAMETER_STYLE /*{ [0]: pb*45 + lp*9 + lc */ #if 1==PARAMETER_STYLE /*{ [0]: pb*45 + lp*9 + lc */
mov p,vs mov p,vs
ldrb r6,[inPtr],#1 ldrb r6,[inPtr],#1
mov r4,#0 // r4= pb; mov r4,#0 // r4= pb;
1: 1:
cmp r6,#45; subhs r6,r6,#45; addhs r4,r4,#1; bhs 1b cmp r6,#45; subhs r6,r6,#45; addhs r4,r4,#1; bhs 1b
mov r5,#0 // r5= lp; mov r5,#0 // r5= lp;
1: 1:
cmp r6,#9; subhs r6,r6, #9; addhs r5,r5,#1; bhs 1b // r6= lc; cmp r6,#9; subhs r6,r6, #9; addhs r5,r5,#1; bhs 1b // r6= lc;
#endif /*}*/ #endif /*}*/
#if 2==PARAMETER_STYLE /*{ [0]: ((lc + lp)<<3) | pb; [1]: (lp<<4) | lc */ #if 2==PARAMETER_STYLE /*{ [0]: ((lc + lp)<<3) | pb; [1]: (lp<<4) | lc */
mov p,vs mov p,vs
ldrb r4,[inPtr],#1; and r4,r4,#7 // pb ldrb r4,[inPtr],#1; and r4,r4,#7 // pb
ldrb r6,[inPtr],#1; mov r5,r6,lsr #4 // lp ldrb r6,[inPtr],#1; mov r5,r6,lsr #4 // lp
and r6,r6,#0xf // lc and r6,r6,#0xf // lc
#endif /*}*/ #endif /*}*/
#if 3==PARAMETER_STYLE /*{ lc,lp,pb,xx in separate bytes before probs[] */ #if 3==PARAMETER_STYLE /*{ lc,lp,pb,xx in separate bytes before probs[] */
add p,vs,#4 add p,vs,#4
ldrb r6,[vs, #vs_lc] ldrb r6,[vs, #vs_lc]
ldrb r5,[vs, #vs_lp] ldrb r5,[vs, #vs_lp]
ldrb r4,[vs, #vs_ps] ldrb r4,[vs, #vs_ps]
#endif /*}*/ #endif /*}*/
#undef vs #undef vs
add r14,r5,r6 // lp + lc add r14,r5,r6 // lp + lc
mvn Range,#0 // ~0 mvn Range,#0 // ~0
mvn r5,Range,lsl r5 // ~(~0<<lp) == litPosMask mvn r5,Range,lsl r5 // ~(~0<<lp) == litPosMask
mvn r4,Range,lsl r4 // ~(~0<<ps) == posStateMask mvn r4,Range,lsl r4 // ~(~0<<ps) == posStateMask
mov r3,#1 mov r3,#1
mov r2,#1 mov r2,#1
mov r1,#1 mov r1,#1
mov r0,#1 mov r0,#1
stmdb sp!,{r0,r1,r2,r3, r4,r5,r6,r7, r8,r9,r10,r11, r12,r14} stmdb sp!,{r0,r1,r2,r3, r4,r5,r6,r7, r8,r9,r10,r11, r12,r14}
#define rep0 [sp, #0*4] #define rep0 [sp, #0*4]
#define rep1 [sp, #1*4] #define rep1 [sp, #1*4]
#define rep2 [sp, #2*4] #define rep2 [sp, #2*4]
#define rep3 [sp, #3*4] #define rep3 [sp, #3*4]
#define posStateMask [sp, #4*4] #define posStateMask [sp, #4*4]
#define litPosMask [sp, #5*4] #define litPosMask [sp, #5*4]
#define lc [sp, #6*4] #define lc [sp, #6*4]
#define prevB [sp, #7*4] #define prevB [sp, #7*4]
#define inBuf [sp, #8*4] #define inBuf [sp, #8*4]
#define outBuf [sp, #9*4] #define outBuf [sp, #9*4]
#define outLim [sp, #10*4] #define outLim [sp, #10*4]
#define posState [sp, #11*4] #define posState [sp, #11*4]
#define inLim [sp, #12*4] #define inLim [sp, #12*4]
#define m_len [sp, #13*4] #define m_len [sp, #13*4]
#define inSizeProcessed [sp, #(14 )*4] #define inSizeProcessed [sp, #(14 )*4]
#define outSizeProcessed [sp, #(14+10+2)*4] #define outSizeProcessed [sp, #(14+10+2)*4]
mov state,#0 mov state,#0
str state,prevB str state,prevB
mov r2,#LZMA_LIT_SIZE mov r2,#LZMA_LIT_SIZE
mov r2,r2, lsl r14 // LZMA_LIT_SIZE << (lp + lc) mov r2,r2, lsl r14 // LZMA_LIT_SIZE << (lp + lc)
add r2,r2,#lo8(LZMA_BASE_SIZE) add r2,r2,#lo8(LZMA_BASE_SIZE)
add r2,r2,#hi8(LZMA_BASE_SIZE) // nProbs add r2,r2,#hi8(LZMA_BASE_SIZE) // nProbs
mov r1,p mov r1,p
mov r0, #(kBitModelTotal>>1) mov r0, #(kBitModelTotal>>1)
orr r0,r0,#(kBitModelTotal>>1)<<16 orr r0,r0,#(kBitModelTotal>>1)<<16
L10: L10:
str r0,[r1],#4 str r0,[r1],#4
subs r2,r2,#2; bgt L10 subs r2,r2,#2; bgt L10
add r0,inPtr,#5 // sentinel add r0,inPtr,#5 // sentinel
L14: L14:
call rcInit2; cmp r0,inPtr; bne L14 call rcInit2; cmp r0,inPtr; bne L14
L200: // main loop L200: // main loop
ldr t0,outBuf ldr t0,outBuf
ldr t1,posStateMask ldr t1,posStateMask
sub nowPos,outPtr,t0 sub nowPos,outPtr,t0
and mi,nowPos,t1 and mi,nowPos,t1
str mi,posState str mi,posState
add mi,mi,state, lsl #kNumPosBitsMax add mi,mi,state, lsl #kNumPosBitsMax
add p_in,p,#IsMatch<<1 add p_in,p,#IsMatch<<1
call rcGetBit_mi0; bne L270 call rcGetBit_mi0; bne L270
ldr t0,litPosMask ldr t0,litPosMask
ldr t1,lc ldr t1,lc
and t0,t0,nowPos and t0,t0,nowPos
ldrb mi,prevB ldrb mi,prevB
mov t0,t0,lsl t1 // (nowPos & litPosMask)<<lc mov t0,t0,lsl t1 // (nowPos & litPosMask)<<lc
rsb t1,t1,#8 rsb t1,t1,#8
add t0,t0,mi,lsr t1 // + (prevB >> (8- lc)) add t0,t0,mi,lsr t1 // + (prevB >> (8- lc))
add prob, p,#lo8(Literal<<1) add prob, p,#lo8(Literal<<1)
add t0,t0,t0,lsl #1 // *3 add t0,t0,t0,lsl #1 // *3
add prob,prob,#hi8(Literal<<1) add prob,prob,#hi8(Literal<<1)
mov symbol,#1 mov symbol,#1
add prob,prob,t0,lsl #1+ 8 // *768 *2 add prob,prob,t0,lsl #1+ 8 // *768 *2
cmp state,#kNumLitStates; blo L240 cmp state,#kNumLitStates; blo L240
L205: L205:
ldr r_rep0,rep0 ldr r_rep0,rep0
ldrb matchB,[outPtr, -r_rep0] ldrb matchB,[outPtr, -r_rep0]
L210: // symbol === mi === mo L210: // symbol === mi === mo
mov matchB,matchB,lsl #1 mov matchB,matchB,lsl #1
add p_in,prob,#0x100<<1 add p_in,prob,#0x100<<1
and bit,matchB,#0x100 and bit,matchB,#0x100
add p_in,p_in,bit,lsl #1 add p_in,p_in,bit,lsl #1
call rcGetBit_mi call rcGetBit_mi
and t0,symbol,#1 and t0,symbol,#1
cmp t0,bit,lsr #8; bne L243 // break cmp t0,bit,lsr #8; bne L243 // break
cmp symbol,#0x100; blo L210 cmp symbol,#0x100; blo L210
b L245 b L245
L240: // symbol === mi === mo L240: // symbol === mi === mo
mov p_in,prob mov p_in,prob
call rcGetBit_mi call rcGetBit_mi
L243: L243:
cmp symbol,#0x100; blo L240 cmp symbol,#0x100; blo L240
L245: L245:
mov t0,#6 mov t0,#6
cmp state,#10; movlo t0,#3 cmp state,#10; movlo t0,#3
cmp state,# 4; movlo t0,state cmp state,# 4; movlo t0,state
sub state,state,t0 sub state,state,t0
b L298 // assumes symbol===r0 b L298 // assumes symbol===r0
L270: L270:
add p_in,p,#IsRep<<1 add p_in,p,#IsRep<<1
call rcGetBit_state0; bne L290 call rcGetBit_state0; bne L290
ldr t0,rep2 ldr t0,rep2
ldr t1,rep1 ldr t1,rep1
ldr r_rep0,rep0 ldr r_rep0,rep0
str t0,rep3 str t0,rep3
str t1,rep2 str t1,rep2
str r_rep0,rep1 str r_rep0,rep1
cmp state,#kNumLitStates cmp state,#kNumLitStates
mov state,#3 mov state,#3
movlo state,#0 movlo state,#0
add prob, p,#lo8(LenCoder<<1) add prob, p,#lo8(LenCoder<<1)
add prob,prob,#hi8(LenCoder<<1) add prob,prob,#hi8(LenCoder<<1)
b L350 b L350
L290: L290:
add p_in,p,#IsRepG0<<1 add p_in,p,#IsRepG0<<1
call rcGetBit_state0; bne L300 call rcGetBit_state0; bne L300
L293: L293:
ldr t0,posState ldr t0,posState
add p_in,p,#IsRep0Long<<1 add p_in,p,#IsRep0Long<<1
add mi,t0,state,lsl #kNumPosBitsMax add mi,t0,state,lsl #kNumPosBitsMax
call rcGetBit_mi0; bne L340 call rcGetBit_mi0; bne L340
L295: L295:
cmp state,#kNumLitStates cmp state,#kNumLitStates
mov state,#11 mov state,#11
movlo state,#9 movlo state,#9
L297: L297:
ldr t0,outBuf ldr t0,outBuf
ldr r_rep0,rep0 ldr r_rep0,rep0
sub nowPos,outPtr,t0 sub nowPos,outPtr,t0
cmp nowPos,r_rep0; blo lzmaDataError cmp nowPos,r_rep0; blo lzmaDataError
ldrb r0,[outPtr, -r_rep0] ldrb r0,[outPtr, -r_rep0]
L298: L298:
strb r0,[outPtr],#1 strb r0,[outPtr],#1
b L519 b L519
L300: L300:
add p_in,p,#IsRepG1<<1 add p_in,p,#IsRepG1<<1
call rcGetBit_state0; ldr distance,rep1; beq L330 call rcGetBit_state0; ldr distance,rep1; beq L330
L310: L310:
add p_in,p,#IsRepG2<<1 add p_in,p,#IsRepG2<<1
call rcGetBit_state0; ldr distance,rep2; beq L325 call rcGetBit_state0; ldr distance,rep2; beq L325
L320: L320:
ldr t0,rep2 ldr t0,rep2
ldr distance,rep3 ldr distance,rep3
str t0,rep3 str t0,rep3
L325: L325:
ldr t0,rep1 ldr t0,rep1
str t0,rep2 str t0,rep2
L330: L330:
ldr r_rep0,rep0 ldr r_rep0,rep0
str distance,rep0 str distance,rep0
str r_rep0,rep1 str r_rep0,rep1
L340: L340:
cmp state,#kNumLitStates cmp state,#kNumLitStates
mov state,#11 mov state,#11
movlo state,#8 movlo state,#8
add prob, p,#lo8(RepLenCoder<<1) add prob, p,#lo8(RepLenCoder<<1)
add prob,prob,#hi8(RepLenCoder<<1) add prob,prob,#hi8(RepLenCoder<<1)
L350: L350:
add p_in,prob,#LenChoice<<1 add p_in,prob,#LenChoice<<1
call rcGetBit_0; bne L360 call rcGetBit_0; bne L360
ldr t0,posState ldr t0,posState
add probLen,prob,#LenLow<<1 add probLen,prob,#LenLow<<1
mov t1,#0 mov t1,#0
add probLen,probLen,t0,lsl #1+ kLenNumLowBits add probLen,probLen,t0,lsl #1+ kLenNumLowBits
mov hibit,#1<<kLenNumLowBits mov hibit,#1<<kLenNumLowBits
b L390 b L390
L360: L360:
add p_in,prob,#LenChoice2<<1 add p_in,prob,#LenChoice2<<1
call rcGetBit_0; bne L370 call rcGetBit_0; bne L370
ldr t0,posState ldr t0,posState
add probLen,prob,#LenMid<<1 add probLen,prob,#LenMid<<1
mov t1,#kLenNumLowSymbols mov t1,#kLenNumLowSymbols
add probLen,probLen,t0,lsl #1+ kLenNumMidBits add probLen,probLen,t0,lsl #1+ kLenNumMidBits
mov hibit,#1<<kLenNumMidBits mov hibit,#1<<kLenNumMidBits
b L390 b L390
L370: L370:
add probLen,prob,#LenHigh<<1 add probLen,prob,#LenHigh<<1
mov t1,#kLenNumLowSymbols + kLenNumMidSymbols mov t1,#kLenNumLowSymbols + kLenNumMidSymbols
mov hibit,$1<<kLenNumHighBits mov hibit,$1<<kLenNumHighBits
L390: L390:
str t1,m_len str t1,m_len
mov mi,#1 mov mi,#1
L395: // RangeDecoderBitTreeDecode L395: // RangeDecoderBitTreeDecode
mov p_in,probLen mov p_in,probLen
call rcGetBit_mi; subs t0,mo,hibit; blo L395 call rcGetBit_mi; subs t0,mo,hibit; blo L395
ldr r_len,m_len ldr r_len,m_len
add r_len,r_len,t0 add r_len,r_len,t0
str r_len,m_len str r_len,m_len
ldr r_rep0,rep0 // rep0 in register from L400 to L500(L510) ldr r_rep0,rep0 // rep0 in register from L400 to L500(L510)
cmp state,#4; bhs L500 cmp state,#4; bhs L500
/*L400:*/ /*L400:*/
add state,state,#kNumLitStates add state,state,#kNumLitStates
cmp r_len,#kNumLenToPosStates cmp r_len,#kNumLenToPosStates
movhs r_len,#kNumLenToPosStates -1 movhs r_len,#kNumLenToPosStates -1
add probLit,p,r_len,lsl #1+ kNumPosSlotBits add probLit,p,r_len,lsl #1+ kNumPosSlotBits
add probLit,probLit,#PosSlot<<1 add probLit,probLit,#PosSlot<<1
mov mi,#1 mov mi,#1
mov hibit,#1<<kNumPosSlotBits mov hibit,#1<<kNumPosSlotBits
L403: // RangeDecoderBitTreeDecode L403: // RangeDecoderBitTreeDecode
mov p_in,probLit mov p_in,probLit
call rcGetBit_mi; subs r_posSlot,mo,hibit; blo L403 call rcGetBit_mi; subs r_posSlot,mo,hibit; blo L403
str r_posSlot,posSlot str r_posSlot,posSlot
cmp r_posSlot,#kStartPosModelIndex; blo L460 cmp r_posSlot,#kStartPosModelIndex; blo L460
L405: L405:
mov numDirectBits,r_posSlot,lsr #1 mov numDirectBits,r_posSlot,lsr #1
sub numDirectBits,numDirectBits,#1 sub numDirectBits,numDirectBits,#1
and r_rep0,r_posSlot,#1 and r_rep0,r_posSlot,#1
orr r_rep0,r_rep0,#2 orr r_rep0,r_rep0,#2
cmp r_posSlot,#kEndPosModelIndex; bhs L410 cmp r_posSlot,#kEndPosModelIndex; bhs L410
L407: L407:
mov r_rep0,r_rep0,lsl numDirectBits mov r_rep0,r_rep0,lsl numDirectBits
add prob,p, #lo8((SpecPos -1)<<1) add prob,p, #lo8((SpecPos -1)<<1)
sub t0,r_rep0,r_posSlot // r_posSlot dies sub t0,r_rep0,r_posSlot // r_posSlot dies
add prob,prob,#hi8((SpecPos -1)<<1) add prob,prob,#hi8((SpecPos -1)<<1)
add prob,prob,t0,lsl #1 add prob,prob,t0,lsl #1
b L438 b L438
L410: L410:
sub numDirectBits,numDirectBits,#kNumAlignBits sub numDirectBits,numDirectBits,#kNumAlignBits
L420: L420:
call rcNormalize call rcNormalize
mov Range,Range,lsr #1 mov Range,Range,lsr #1
cmp Code,Range cmp Code,Range
subhs Code,Code,Range // if (Code>=Range) Code-=Range; subhs Code,Code,Range // if (Code>=Range) Code-=Range;
adc r_rep0,r_rep0,r_rep0 // r_rep0 = (r_rep0<<1) + (Code>=Range) adc r_rep0,r_rep0,r_rep0 // r_rep0 = (r_rep0<<1) + (Code>=Range)
L430: L430:
subs numDirectBits,numDirectBits,#1; bne L420 subs numDirectBits,numDirectBits,#1; bne L420
add prob,p, #lo8(Align<<1) add prob,p, #lo8(Align<<1)
add prob,prob,#hi8(Align<<1) add prob,prob,#hi8(Align<<1)
mov r_rep0,r_rep0,lsl #kNumAlignBits mov r_rep0,r_rep0,lsl #kNumAlignBits
mov numDirectBits,#kNumAlignBits mov numDirectBits,#kNumAlignBits
L438: L438:
str r_rep0,rep0 str r_rep0,rep0
mov i,#1 mov i,#1
mov mi,#1 mov mi,#1
L440: L440:
mov p_in,prob; call rcGetBit_mi mov p_in,prob; call rcGetBit_mi
tst mo,#1; beq L445 tst mo,#1; beq L445
ldr r_rep0,rep0 ldr r_rep0,rep0
orr r_rep0,r_rep0,i orr r_rep0,r_rep0,i
str r_rep0,rep0 str r_rep0,rep0
L445: L445:
mov i,i,lsl #1 mov i,i,lsl #1
subs numDirectBits,numDirectBits,#1; bne L440 subs numDirectBits,numDirectBits,#1; bne L440
ldr r_rep0,rep0 ldr r_rep0,rep0
b L465 b L465
L450: L450:
L460: L460:
ldr r_rep0,posSlot ldr r_rep0,posSlot
L465: L465:
adds r_rep0,r_rep0,#1 adds r_rep0,r_rep0,#1
#if 0 /*{ only for the stream version */ #if 0 /*{ only for the stream version */
bne L470 bne L470
mov t0,#kLzmaStreamWasFinishedId mov t0,#kLzmaStreamWasFinishedId
str t0,m_len str t0,m_len
b L530 b L530
L470: L470:
#endif /*}*/ #endif /*}*/
str r_rep0,rep0 str r_rep0,rep0
ldr r_len,m_len ldr r_len,m_len
L500: L500:
ldr t0,outBuf ldr t0,outBuf
add r_len,r_len,#kMatchMinLen add r_len,r_len,#kMatchMinLen
sub t0,outPtr,t0 // nowPos sub t0,outPtr,t0 // nowPos
cmp r_rep0,t0; bhi lzmaDataError cmp r_rep0,t0; bhi lzmaDataError
ldr t1,outLim ldr t1,outLim
L510: L510:
ldrb r0,[outPtr, -r_rep0] ldrb r0,[outPtr, -r_rep0]
strb r0,[outPtr],#1 strb r0,[outPtr],#1
cmp outPtr,t1; bhs L530 cmp outPtr,t1; bhs L530
subs r_len,r_len,#1; bne L510 subs r_len,r_len,#1; bne L510
#if HAS_ARM_PLD /*{*/ #if HAS_ARM_PLD /*{*/
pld [outPtr,#32] // fetch next cache line pld [outPtr,#32] // fetch next cache line
#endif /*}*/ #endif /*}*/
L519: L519:
strb r0,prevB // implicit &0xFF strb r0,prevB // implicit &0xFF
L520: // bottom of while loop L520: // bottom of while loop
ldr t1,outLim ldr t1,outLim
cmp outPtr,t1; blo L200 cmp outPtr,t1; blo L200
L530: L530:
call rcNormalize call rcNormalize
mov r0,#0 // success mov r0,#0 // success
lzmaExit: lzmaExit:
ldr t1,inBuf ldr t1,inBuf
sub t0,inPtr,t1 sub t0,inPtr,t1
ldr t1,inSizeProcessed ldr t1,inSizeProcessed
str t0,[t1] str t0,[t1]
ldr t1,outBuf ldr t1,outBuf
sub t0,outPtr,t1 sub t0,outPtr,t1
ldr t1,outSizeProcessed ldr t1,outSizeProcessed
str t0,[t1] str t0,[t1]
add sp,sp,#(14+1)*4 add sp,sp,#(14+1)*4
ldmia sp!,{r4,r5,r6,r7, r8,r9,r10,r11, pc} ldmia sp!,{r4,r5,r6,r7, r8,r9,r10,r11, pc}
lzmaDataError: lzmaDataError:
mov r0,#1 // failure mov r0,#1 // failure
b lzmaExit b lzmaExit
rcNormalize: rcNormalize:
cmp Range,#kTopValue cmp Range,#kTopValue
movhs pc,lr movhs pc,lr
rcLoad: rcLoad:
ldr t0,inLim ldr t0,inLim
mov Range,Range, lsl #8 mov Range,Range, lsl #8
cmp t0,inPtr cmp t0,inPtr
beq lzmaDataError beq lzmaDataError
rcInit2: rcInit2:
ldrb t0,[inPtr],#1 ldrb t0,[inPtr],#1
orr Code,t0,Code, lsl #8 orr Code,t0,Code, lsl #8
mov pc,lr mov pc,lr
rcGetBit_state0: // rcGetBit(0, state + p_in) rcGetBit_state0: // rcGetBit(0, state + p_in)
mov mi,state mov mi,state
rcGetBit_mi0: // rcGetBit(0, mi + p_in) rcGetBit_mi0: // rcGetBit(0, mi + p_in)
add p_in,p_in,mi, lsl #1 add p_in,p_in,mi, lsl #1
rcGetBit_0: // rcGetBit(0, p_in) rcGetBit_0: // rcGetBit(0, p_in)
mov mi,#0 mov mi,#0
rcGetBit_mi: // rcGetBit(mi, mi + p_in) rcGetBit_mi: // rcGetBit(mi, mi + p_in)
add p_in,p_in,mi, lsl #1 add p_in,p_in,mi, lsl #1
rcGetBit: // Out: CC set on mo rcGetBit: // Out: CC set on mo
cmp Range,#kTopValue cmp Range,#kTopValue
mov t1,lr mov t1,lr
bllo rcLoad // conditional subroutine call bllo rcLoad // conditional subroutine call
#define starp t0 #define starp t0
#define bound lr #define bound lr
#define y0tmp lr #define y0tmp lr
ldrh starp,[p_in] ldrh starp,[p_in]
mov y0tmp,Range, lsr #kNumBitModelTotalBits mov y0tmp,Range, lsr #kNumBitModelTotalBits
mul bound,starp,y0tmp mul bound,starp,y0tmp
cmp Code,bound cmp Code,bound
movlo Range, bound movlo Range, bound
subhs Range,Range,bound subhs Range,Range,bound
rsblo y0tmp,starp,#kBitModelTotal rsblo y0tmp,starp,#kBitModelTotal
subhs Code, Code, bound subhs Code, Code, bound
addlo starp,starp,y0tmp, lsr #kNumMoveBits addlo starp,starp,y0tmp, lsr #kNumMoveBits
subhs starp,starp,starp, lsr #kNumMoveBits subhs starp,starp,starp, lsr #kNumMoveBits
adcs mo,mi,mi // mo = (mi<<1) | (Code >= bound); set CC adcs mo,mi,mi // mo = (mi<<1) | (Code >= bound); set CC
strh starp,[p_in] strh starp,[p_in]
#undef y0tmp #undef y0tmp
#undef bound #undef bound
#undef starp #undef starp
mov pc,t1 mov pc,t1
// vi:ts=8:et