; Copyright 1996 Acorn Computers Ltd ; ; Licensed under the Apache License, Version 2.0 (the "License"); ; you may not use this file except in compliance with the License. ; You may obtain a copy of the License at ; ; http://www.apache.org/licenses/LICENSE-2.0 ; ; Unless required by applicable law or agreed to in writing, software ; distributed under the License is distributed on an "AS IS" BASIS, ; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ; See the License for the specific language governing permissions and ; limitations under the License. ; ; generated by Norcroft RISC OS ARM C vsn 5.05 (Acorn Computers Ltd) [Dec 23 1994] AREA |C$$code|, CODE, READONLY |x$codeseg| EXPORT memcpy memcpy MOV a4,a1 MOV ip,a3 SUB a3,a3,#1 CMP ip,#0 MOVLSS pc,lr |L000014.J4.memcpy| LDRB ip,[a2],#1 STRB ip,[a4],#1 MOV ip,a3 SUB a3,a3,#1 CMP ip,#0 BHI |L000014.J4.memcpy| MOVS pc,lr EXPORT strcpy strcpy MOV a3,a1 LDRB a4,[a2,#0] CMP a4,#&1f MOVLES pc,lr |L000040.J4.strcpy| LDRB a4,[a2],#1 STRB a4,[a3],#1 LDRB a4,[a2,#0] CMP a4,#&1f BGT |L000040.J4.strcpy| MOVS pc,lr EXPORT memset memset MOV a4,a1 MOV ip,a3 SUB a3,a3,#1 CMP ip,#0 MOVLSS pc,lr AND a2,a2,#&ff |L000070.J4.memset| STRB a2,[a4],#1 MOV ip,a3 SUB a3,a3,#1 CMP ip,#0 BHI |L000070.J4.memset| MOVS pc,lr IMPORT exit EXPORT panic_exit panic_exit B exit get_2bytes MOV a4,#&ff LDR a2,[a1,#&38] LDR a3,[a1,#&34] CMP a3,a2 LDRCCB a2,[a3],#1 STRCC a3,[a1,#&34] MOVCS a2,a4 MOV a3,a2 ADD ip,a1,#&34 LDMIA ip,{a2,ip} CMP a2,ip LDRCCB a4,[a2],#1 STRCC a2,[a1,#&34]! ADD a1,a4,a3,LSL #8 MOVS pc,lr skip_variable MOV ip,sp STMDB sp!,{v1,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 BL get_2bytes SUB a1,a1,#2 CMP a1,#0 LDMLEDB fp,{v1,fp,sp,pc}^ LDR a2,[v1,#&38] |L0000ec.J4.skip_variable| LDR a3,[v1,#&34] CMP a3,a2 ADDCC a3,a3,#1 STRCC a3,[v1,#&34] SUB a1,a1,#1 CMP a1,#0 BGT |L0000ec.J4.skip_variable| LDMDB fp,{v1,fp,sp,pc}^ IMPORT newline get_dht MOV ip,sp STMDB sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 SUB sp,sp,#&114 BL get_2bytes SUB v4,a1,#2 CMP v4,#0 BLE |L000258.J37.get_dht| MOV v6,#0 MOV v5,#&ff |L000138.J4.get_dht| ADD a2,v1,#&34 LDMIA a2,{a1,a2} CMP a1,a2 LDRCCB a2,[a1],#1 STRCC a1,[v1,#&34] MOVCS a2,v5 MOV v2,a2 STRB v6,[sp,#&100] MOV v3,#0 MOV a1,#1 |L000160.J10.get_dht| ADD a3,v1,#&34 LDMIA a3,{a2,a3} CMP a2,a3 MOVCS a2,v5 BCS |L000180.J11.get_dht| LDRB a3,[a2],#1 STR a2,[v1,#&34] MOV a2,a3 |L000180.J11.get_dht| ADD a3,sp,#&100 STRB a2,[a3,a1] ADD a2,sp,#&100 LDRB a2,[a2,a1] ADD v3,a2,v3 ADD a1,a1,#1 CMP a1,#&10 BLE |L000160.J10.get_dht| CMP v3,#&100 BLGT newline MOVGT a1,#&b9 ADDGT a1,a1,#&4e00 BLGT exit MOV a1,#0 CMP v3,#0 BLE |L0001f0.J18.get_dht| |L0001c0.J17.get_dht| ADD a3,v1,#&34 LDMIA a3,{a2,a3} CMP a2,a3 MOVCS a2,v5 BCS |L0001e0.J20.get_dht| LDRB a3,[a2],#1 STR a2,[v1,#&34] MOV a2,a3 |L0001e0.J20.get_dht| STRB a2,[sp,a1] ADD a1,a1,#1 CMP a1,v3 BLT |L0001c0.J17.get_dht| |L0001f0.J18.get_dht| ADD a1,v3,#&11 SUB v4,v4,a1 TST v2,#&10 SUBNE v2,v2,#&10 ADD a1,v1,v2,LSL #2 ADDEQ v3,a1,#&64 ADDNE v3,a1,#&74 CMP v2,#0 BLT |L00021c.J28.get_dht| CMP v2,#4 BLT |L00022c.J27.get_dht| |L00021c.J28.get_dht| BL newline MOV a1,#&2c8 ADD a1,a1,#&4c00 BL exit |L00022c.J27.get_dht| ADD a2,sp,#&100 MOV a3,#&11 LDR a1,[v3,#0] BL memcpy LDR a1,[v3,#0] ADD a1,a1,#&11 MOV a2,sp MOV a3,#&100 BL memcpy CMP v4,#0 BGT |L000138.J4.get_dht| |L000258.J37.get_dht| LDMDB fp,{v1-v6,fp,sp,pc}^ get_dac MOV ip,sp STMDB sp!,{v1-v5,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 BL get_2bytes SUB v4,a1,#2 CMP v4,#0 LDMLEDB fp,{v1-v5,fp,sp,pc}^ MOV v5,#&ff |L000280.J4.get_dac| ADD a2,v1,#&34 LDMIA a2,{a1,a2} CMP a1,a2 LDRCCB a3,[a1],#1 STRCC a1,[v1,#&34] MOVCS a3,v5 MOV v2,a3 LDR a1,[v1,#&34] CMP a1,a2 LDRCCB a2,[a1],#1 STRCC a1,[v1,#&34] MOVCS a2,v5 MOV v3,a2 CMP v2,#0 BLT |L0002c4.J14.get_dac| CMP v2,#&20 BLT |L0002d4.J13.get_dac| |L0002c4.J14.get_dac| BL newline MOV a1,#&2e8 ADD a1,a1,#&4c00 BL exit |L0002d4.J13.get_dac| CMP v2,#&10 MOVGE a1,v3 ADDGE a2,v1,v2 STRGEB a1,[a2,#&94] BGE |L000314.J19.get_dac| AND a1,v3,#&f ADD a2,v1,v2 STRB a1,[a2,#&84] MOV a3,v3,ASR #4 AND a3,a3,#&ff STRB a3,[a2,#&94] CMP a1,a3 BLGT newline MOVGT a1,#&ef0 ADDGT a1,a1,#&4000 BLGT exit |L000314.J19.get_dac| SUB v4,v4,#2 CMP v4,#0 BGT |L000280.J4.get_dac| LDMDB fp,{v1-v5,fp,sp,pc}^ get_dqt MOV ip,sp STMDB sp!,{v1-v5,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 BL get_2bytes SUB v2,a1,#2 CMP v2,#0 LDMLEDB fp,{v1-v5,fp,sp,pc}^ MOV v4,#&ff |L000348.J4.get_dqt| ADD a2,v1,#&34 LDMIA a2,{a1,a2} CMP a1,a2 MOVCS a1,v4 BCS |L000368.J7.get_dqt| LDRB a2,[a1],#1 STR a1,[v1,#&34] MOV a1,a2 |L000368.J7.get_dqt| MOV v3,a1,ASR #4 AND v5,a1,#&f CMP v5,#4 BLGE newline MOVGE a1,#&30c ADDGE a1,a1,#&4c00 BLGE exit ADD a1,v1,v5,LSL #2 LDR a4,[a1,#&54]! MOV a1,#0 |L000390.J12.get_dqt| ADD ip,v1,#&34 LDMIA ip,{a3,ip} CMP a3,ip LDRCCB a2,[a3],#1 STRCC a3,[v1,#&34] MOVCS a2,v4 MOV a2,a2,LSL #16 MOV a2,a2,LSR #16 TEQ v3,#0 BEQ |L0003d8.J16.get_dqt| LDR a3,[v1,#&34] CMP a3,ip LDRCCB ip,[a3],#1 STRCC a3,[v1,#&34] MOVCS ip,v4 ADD a2,ip,a2,LSL #8 MOV a2,a2,LSL #16 MOV a2,a2,LSR #16 |L0003d8.J16.get_dqt| STR a2,[a4,a1,LSL #2] ADD a1,a1,#1 CMP a1,#&40 BLT |L000390.J12.get_dqt| MOV a1,#0 |L0003ec.J22.get_dqt| ADD a1,a1,#8 CMP a1,#&40 BLT |L0003ec.J22.get_dqt| SUB v2,v2,#&41 TEQ v3,#0 SUBNE v2,v2,#&40 CMP v2,#0 BGT |L000348.J4.get_dqt| LDMDB fp,{v1-v5,fp,sp,pc}^ get_dri MOV ip,sp STMDB sp!,{v1,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 BL get_2bytes TEQ a1,#4 BLNE newline MOVNE a1,#&2d ADDNE a1,a1,#&4f00 BLNE exit MOV a1,v1 BL get_2bytes MOV a1,a1,LSL #16 MOV a1,a1,LSR #16 STR a1,[v1,#&bc]! LDMDB fp,{v1,fp,sp,pc}^ get_app0 MOV ip,sp STMDB sp!,{v1,v2,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 SUB sp,sp,#&10 BL get_2bytes SUB v2,a1,#2 CMP v2,#&e BLT |L000524.J25.get_app0| MOV a1,#0 MOV a2,#&ff |L00047c.J6.get_app0| LDR a3,[v1,#&38] LDR a4,[v1,#&34] CMP a4,a3 LDRCCB a3,[a4],#1 STRCC a4,[v1,#&34] MOVCS a3,a2 STRB a3,[sp,a1] ADD a1,a1,#1 CMP a1,#&e BLT |L00047c.J6.get_app0| SUB v2,v2,#&e LDRB a1,[sp,#0] TEQ a1,#&4a LDREQB a1,[sp,#1] TEQEQ a1,#&46 LDREQB a1,[sp,#2] TEQEQ a1,#&49 LDREQB a1,[sp,#3] TEQEQ a1,#&46 LDREQB a1,[sp,#4] TEQEQ a1,#0 BNE |L000524.J25.get_app0| LDRB a1,[sp,#5] TEQ a1,#1 BLNE newline MOVNE a1,#&4d ADDNE a1,a1,#&4f00 BLNE exit LDRB a1,[sp,#7] STR a1,[v1,#&40] LDRB a1,[sp,#9] LDRB a2,[sp,#8] ADD a1,a1,a2,LSL #8 STR a1,[v1,#&44] LDRB a2,[sp,#&b] LDRB a1,[sp,#&a] ADD a1,a2,a1,LSL #8 STR a1,[v1,#&48] LDR a1,[v1,#&1c] TEQ a1,#0 MOVEQ a1,#3 STREQ a1,[v1,#&1c] |L000524.J25.get_app0| MOV a1,v2 SUB v2,v2,#1 CMP a1,#0 BLE |L000558.J37.get_app0| LDR a2,[v1,#&38] |L000538.J26.get_app0| LDR a1,[v1,#&34] CMP a1,a2 ADDCC a1,a1,#1 STRCC a1,[v1,#&34] MOV a1,v2 SUB v2,v2,#1 CMP a1,#0 BGT |L000538.J26.get_app0| |L000558.J37.get_app0| LDMDB fp,{v1,v2,fp,sp,pc}^ get_sof MOV ip,sp STMDB sp!,{v1-v3,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 BL get_2bytes MOV v3,a1 MOV v2,#&ff ADD a2,v1,#&34 LDMIA a2,{a1,a2} CMP a1,a2 LDRCCB a2,[a1],#1 STRCC a1,[v1,#&34] MOVCS a2,v2 STR a2,[v1,#&3c] MOV a1,v1 BL get_2bytes STR a1,[v1,#&18] MOV a1,v1 BL get_2bytes STR a1,[v1,#&14] MOV a2,a1 ADD a3,v1,#&34 LDMIA a3,{a1,a3} CMP a1,a3 MOVCS a1,v2 BCS |L0005d0.J7.get_sof| LDRB a3,[a1],#1 STR a1,[v1,#&34] MOV a1,a3 |L0005d0.J7.get_sof| STR a1,[v1,#&4c] LDR a3,[v1,#&18] CMP a3,#0 CMPGT a2,#0 CMPGT a1,#0 BLLE newline MOVLE a1,#&82 ADDLE a1,a1,#&4f00 BLLE exit LDR a1,[v1,#&3c] TEQ a1,#8 BLNE newline MOVNE a1,#&86 ADDNE a1,a1,#&4f00 BLNE exit LDR a1,[v1,#&4c] ADD a1,a1,a1,LSL #1 ADD a1,a1,#8 TEQ a1,v3 BLNE newline MOVNE a1,#&92 ADDNE a1,a1,#&4f00 BLNE exit LDR a1,[v1,#&4c] CMP a1,#3 BLGT newline MOVGT a1,#&96 ADDGT a1,a1,#&4f00 BLGT exit MOV a1,#0 LDR a2,[v1,#&4c] CMP a2,#0 LDMLEDB fp,{v1-v3,fp,sp,pc}^ MOV a2,#&f |L000658.J21.get_sof| RSB a4,a1,a1,LSL #3 LDR a3,[v1,#&50] ADD a3,a3,a4,LSL #3 STR a1,[a3,#4] ADD ip,v1,#&34 LDMIA ip,{a4,ip} CMP a4,ip LDRCCB ip,[a4],#1 STRCC a4,[v1,#&34] MOVCS ip,v2 STR ip,[a3,#0] ADD ip,v1,#&34 LDMIA ip,{a4,ip} CMP a4,ip MOVCS a4,v2 BCS |L0006a8.J27.get_sof| MOV ip,a4 LDRB a4,[a4,#0] ADD ip,ip,#1 STR ip,[v1,#&34] |L0006a8.J27.get_sof| AND ip,a2,a4,ASR #4 AND a4,a4,#&f STR a4,[a3,#&c] STR ip,[a3,#8] ADD ip,v1,#&34 LDMIA ip,{a4,ip} CMP a4,ip LDRCCB ip,[a4],#1 STRCC a4,[v1,#&34] MOVCS ip,v2 ADD a1,a1,#1 MOV a1,a1,LSL #16 MOV a1,a1,ASR #16 STR ip,[a3,#&10]! LDR a3,[v1,#&4c] CMP a1,a3 BLT |L000658.J21.get_sof| LDMDB fp,{v1-v3,fp,sp,pc}^ get_sos MOV ip,sp STMDB sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 BL get_2bytes MOV v4,#&ff ADD a3,v1,#&34 LDMIA a3,{a2,a3} CMP a2,a3 LDRCCB a3,[a2],#1 STRCC a2,[v1,#&34] MOVCS a3,v4 MOV v3,a3 SUB v2,a1,#3 MOV a1,#3 STR a3,[v1,#&c8] ADD a1,a1,a3,LSL #1 TEQ a1,v2 BNE |L00074c.J8.get_sos| CMP v3,#1 BLT |L00074c.J8.get_sos| CMP v3,#4 BLE |L00075c.J7.get_sos| |L00074c.J8.get_sos| BL newline MOV a1,#&3bc ADD a1,a1,#&4c00 BL exit |L00075c.J7.get_sos| MOV v5,#0 CMP v3,#0 BLE |L000818.J13.get_sos| |L000768.J12.get_sos| ADD a2,v1,#&34 LDMIA a2,{a1,a2} CMP a1,a2 LDRCCB a3,[a1],#1 STRCC a1,[v1,#&34] MOVCS a3,#&ff LDR a1,[v1,#&34] CMP a1,a2 LDRCCB a2,[a1],#1 STRCC a1,[v1,#&34] MOVCS a2,#&ff MOV v6,a2 SUB v2,v2,#2 MOV v4,#0 LDR a1,[v1,#&4c] CMP a1,#0 BLE |L0007d0.J22.get_sos| LDR a2,[v1,#&50] |L0007b0.J21.get_sos| RSB a4,v4,v4,LSL #3 ADD a4,a2,a4,LSL #3 LDR a4,[a4,#0] TEQ a4,a3 BEQ |L0007d0.J22.get_sos| ADD v4,v4,#1 CMP v4,a1 BLT |L0007b0.J21.get_sos| |L0007d0.J22.get_sos| CMP v4,a1 BLGE newline MOVGE a1,#&ca ADDGE a1,a1,#&4f00 BLGE exit RSB a1,v4,v4,LSL #3 LDR a2,[v1,#&50] ADD a1,a2,a1,LSL #3 ADD a2,v1,v5,LSL #2 STR a1,[a2,#&cc]! MOV a2,#&f AND a2,a2,v6,ASR #4 STR a2,[a1,#&14] AND a2,v6,#&f ADD v5,v5,#1 CMP v5,v3 STR a2,[a1,#&18]! BLT |L000768.J12.get_sos| |L000818.J13.get_sos| CMP v2,#0 LDMLEDB fp,{v1-v6,fp,sp,pc}^ LDR a1,[v1,#&38] |L000824.J30.get_sos| LDR a2,[v1,#&34] CMP a2,a1 ADDCC a2,a2,#1 STRCC a2,[v1,#&34] SUB v2,v2,#1 CMP v2,#0 BGT |L000824.J30.get_sos| LDMDB fp,{v1-v6,fp,sp,pc}^ get_soi STMDB sp!,{lr} MOV a2,#0 MOV ip,#0 MOV a4,#1 MOV lr,#5 |L000858.J4.get_soi| ADD a3,a1,a2 STRB ip,[a3,#&84] STRB a4,[a3,#&94] STRB lr,[a3,#&a4] ADD a2,a2,#1 CMP a2,#&10 BLT |L000858.J4.get_soi| STR ip,[a1,#&bc] STR a4,[a1,#&44] STR ip,[a1,#&40] STR a4,[a1,#&48]! STR ip,[a1,#&70]! LDMIA sp!,{pc}^ next_marker MOV a3,#&ff LDR a2,[a1,#&38] |L000894.J5.next_marker| LDR ip,[a1,#&34] CMP ip,a2 LDRCCB a4,[ip],#1 STRCC ip,[a1,#&34] MOVCS a4,a3 TEQ a4,#&ff BNE |L000894.J5.next_marker| |L0008b0.J10.next_marker| LDR ip,[a1,#&34] CMP ip,a2 LDRCCB a4,[ip],#1 STRCC ip,[a1,#&34] MOVCS a4,a3 TEQ a4,#&ff BEQ |L0008b0.J10.next_marker| TEQ a4,#0 BEQ |L000894.J5.next_marker| MOV a1,a4 MOVS pc,lr process_tables MOV ip,sp STMDB sp!,{v1,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 |L0008ec.J4.process_tables| MOV a1,v1 BL next_marker MOV a2,a1 CMP a1,#&ce LDMEQDB fp,{v1,fp,sp,pc}^ BGT |L000984.J39.process_tables| CMP a1,#&c6 LDMEQDB fp,{v1,fp,sp,pc}^ BGT |L000958.J42.process_tables| CMP a1,#&c2 LDMEQDB fp,{v1,fp,sp,pc}^ BGT |L000934.J45.process_tables| TEQ a1,#1 BEQ |L0008ec.J4.process_tables| TEQ a1,#&c0 TEQNE a1,#&c1 LDMEQDB fp,{v1,fp,sp,pc}^ B |L000a08.J7.process_tables| |L000934.J45.process_tables| TEQ a1,#&c3 LDMEQDB fp,{v1,fp,sp,pc}^ TEQ a1,#&c4 MOVEQ a1,v1 BLEQ get_dht BEQ |L0008ec.J4.process_tables| TEQ a1,#&c5 LDMEQDB fp,{v1,fp,sp,pc}^ B |L000a08.J7.process_tables| |L000958.J42.process_tables| SUB a3,a1,#&c7 CMP a3,#6 ADDLS pc,pc,a3,LSL #2 B |L000a08.J7.process_tables| LDMDB fp,{v1,fp,sp,pc}^ LDMDB fp,{v1,fp,sp,pc}^ LDMDB fp,{v1,fp,sp,pc}^ LDMDB fp,{v1,fp,sp,pc}^ LDMDB fp,{v1,fp,sp,pc}^ B |L0009e4.J25.process_tables| LDMDB fp,{v1,fp,sp,pc}^ |L000984.J39.process_tables| SUB a3,a1,#&cf CMP a3,#&11 ADDLS pc,pc,a3,LSL #2 B |L000a08.J7.process_tables| LDMDB fp,{v1,fp,sp,pc}^ B |L0008ec.J4.process_tables| B |L0008ec.J4.process_tables| B |L0008ec.J4.process_tables| B |L0008ec.J4.process_tables| B |L0008ec.J4.process_tables| B |L0008ec.J4.process_tables| B |L0008ec.J4.process_tables| B |L0008ec.J4.process_tables| LDMDB fp,{v1,fp,sp,pc}^ LDMDB fp,{v1,fp,sp,pc}^ LDMDB fp,{v1,fp,sp,pc}^ B |L0009f0.J10.process_tables| B |L000a08.J7.process_tables| B |L0009fc.J9.process_tables| B |L000a08.J7.process_tables| B |L000a08.J7.process_tables| MOV a1,v1 BL get_app0 B |L0008ec.J4.process_tables| |L0009e4.J25.process_tables| MOV a1,v1 BL get_dac B |L0008ec.J4.process_tables| |L0009f0.J10.process_tables| MOV a1,v1 BL get_dqt B |L0008ec.J4.process_tables| |L0009fc.J9.process_tables| MOV a1,v1 BL get_dri B |L0008ec.J4.process_tables| |L000a08.J7.process_tables| MOV a1,v1 BL skip_variable B |L0008ec.J4.process_tables| read_file_header MOV ip,sp STMDB sp!,{v1-v3,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 LDR a3,[a1,#&34] LDR a1,[a1,#&38] MOV a2,#&ff CMP a3,a1 LDRCCB a1,[a3],#1 STRCC a3,[v1,#&34] MOVCS a1,a2 TEQ a1,#&ff BNE |L000a64.J5.read_file_header| ADD a3,v1,#&34 LDMIA a3,{a1,a3} CMP a1,a3 LDRCCB a2,[a1],#1 STRCC a1,[v1,#&34] TEQ a2,#&d8 BEQ |L000a74.J4.read_file_header| |L000a64.J5.read_file_header| BL newline MOV a1,#&67 ADD a1,a1,#&5000 BL exit |L000a74.J4.read_file_header| MOV a1,v1 BL get_soi MOV a1,v1 BL process_tables MOV v3,#0 MOV v2,#1 TEQ a1,#&c0 TEQNE a1,#&c1 BEQ |L000ab4.J17.read_file_header| TEQ a1,#&c9 BNE |L000ac8.J15.read_file_header| MOV a2,a1 MOV a1,v1 BL get_sof STR v2,[v1,#&b4] B |L000ad8.J14.read_file_header| |L000ab4.J17.read_file_header| MOV a2,a1 MOV a1,v1 BL get_sof STR v3,[v1,#&b4] B |L000ad8.J14.read_file_header| |L000ac8.J15.read_file_header| BL newline MOV a1,#&7b ADD a1,a1,#&5000 BL exit |L000ad8.J14.read_file_header| LDR a1,[v1,#&4c] TEQ a1,#1 STREQ v2,[v1,#&1c]! LDMEQDB fp,{v1-v3,fp,sp,pc}^ TEQ a1,#3 BEQ |L000b04.J25.read_file_header| TEQ a1,#4 STRNE v3,[v1,#&1c]! LDMNEDB fp,{v1-v3,fp,sp,pc}^ MOV a1,#5 B |L000b64.J44.read_file_header| |L000b04.J25.read_file_header| LDR a1,[v1,#&1c] TEQ a1,#0 LDMNEDB fp,{v1-v3,fp,sp,pc}^ LDR a2,[v1,#&50] LDR a1,[a2,#0] MOV a4,a1,LSL #16 MOV a4,a4,ASR #16 LDR a1,[a2,#&38] MOV a1,a1,LSL #16 MOV a1,a1,ASR #16 LDR a2,[a2,#&70] MOV a2,a2,LSL #16 MOV a2,a2,ASR #16 MOV a3,#3 CMP a4,#1 BNE |L000b50.J32.read_file_header| TEQ a1,#2 BEQ |L000b6c.J37.read_file_header| B |L000b54.J38.read_file_header| |L000b50.J32.read_file_header| BNE |L000b6c.J37.read_file_header| |L000b54.J38.read_file_header| TEQ a1,#4 TEQEQ a2,#5 BNE |L000b6c.J37.read_file_header| MOV a1,#4 |L000b64.J44.read_file_header| STR a1,[v1,#&1c]! LDMDB fp,{v1-v3,fp,sp,pc}^ |L000b6c.J37.read_file_header| STR a3,[v1,#&1c]! LDMDB fp,{v1-v3,fp,sp,pc}^ read_scan_header MOV ip,sp STMDB sp!,{v1,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 BL process_tables TEQ a1,#&d9 BEQ |L000bb4.J4.read_scan_header| TEQ a1,#&da MOVEQ a1,v1 BLEQ get_sos MOVEQ a1,#1 LDMEQDB fp,{v1,fp,sp,pc}^ BL newline MOV a1,#&be ADD a1,a1,#&5000 BL exit |L000bb4.J4.read_scan_header| MOV a1,#0 LDMDB fp,{v1,fp,sp,pc}^ ;MPORT huff_DECODE_buildshortcut IMPORT assert fix_huff_tbl MOV ip,sp STMDB sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#4 MOV v2,a1 MOV v1,a2 SUB sp,sp,#&308 MOV a2,#0 MOV a3,#1 |L000bdc.J4.fix_huff_tbl| MOV a1,#1 ADD lr,v1,a3 LDRB a4,[lr,#0] CMP a4,#1 BLT |L000c14.J6.fix_huff_tbl| AND a4,a3,#&ff |L000bf4.J5.fix_huff_tbl| MOV v3,a2 ADD a2,a2,#1 ADD ip,sp,#&204 STRB a4,[ip,v3] ADD a1,a1,#1 LDRB v3,[lr,#0] CMP v3,a1 BGE |L000bf4.J5.fix_huff_tbl| |L000c14.J6.fix_huff_tbl| ADD a3,a3,#1 CMP a3,#&10 BLE |L000bdc.J4.fix_huff_tbl| MOV a1,#0 ADD a3,sp,#&204 STRB a1,[a3,a2] MOV a3,#0 LDRB a4,[sp,#&204] MOV a2,#0 LDRB ip,[sp,#&204] TEQ ip,#0 BEQ |L000ca8.J11.fix_huff_tbl| |L000c44.J10.fix_huff_tbl| ADD lr,sp,#&204 LDRB lr,[lr,a2] TEQ lr,a4 BNE |L000c88.J14.fix_huff_tbl| |L000c54.J13.fix_huff_tbl| MOV lr,a2 ADD a2,a2,#1 ADD ip,sp,lr,LSL #1 STRB a3,[ip,#0] MOV lr,a3,ASR #8 STRB lr,[ip,#1] ADD a3,a3,#1 MOV a3,a3,LSL #16 MOV a3,a3,LSR #16 ADD lr,sp,#&204 LDRB lr,[lr,a2] TEQ lr,a4 BEQ |L000c54.J13.fix_huff_tbl| |L000c88.J14.fix_huff_tbl| MOV a3,a3,LSL #1 MOV a3,a3,LSL #16 MOV a3,a3,LSR #16 ADD a4,a4,#1 ADD lr,sp,#&204 LDRB ip,[lr,a2] TEQ ip,#0 BNE |L000c44.J10.fix_huff_tbl| |L000ca8.J11.fix_huff_tbl| MOV a2,#0 MOV a3,#1 MVN v6,#0 |L000cb4.J18.fix_huff_tbl| ADD v3,v1,a3 LDRB a4,[v3,#0] TEQ a4,#0 BEQ |L000d08.J19.fix_huff_tbl| ADD lr,v1,a3,LSL #2 STR a2,[lr,#&15c] ADD a4,lr,#&15c LDR v4,[sp,a2,LSL #1] MOV v4,v4,LSL #16 MOV v4,v4,LSR #16 LDR ip,[a4,#0] SUB v4,ip,v4 STR v4,[a4,#0] LDRB a4,[v3,#0] ADD a2,a4,a2 ADD a4,sp,a2,LSL #1 LDR a4,[a4,#-2] MOV a4,a4,LSL #16 MOV a4,a4,LSR #16 STR a4,[lr,#&114]! B |L000d10.J21.fix_huff_tbl| |L000d08.J19.fix_huff_tbl| ADD a4,v1,a3,LSL #2 STR v6,[a4,#&114]! |L000d10.J21.fix_huff_tbl| ADD a3,a3,#1 CMP a3,#&10 BLE |L000cb4.J18.fix_huff_tbl| MVN a2,#&ff00000 ADD a2,a2,#&10000000 MOV v3,#0 MOV v5,#&20 STR a2,[v1,#&158] |L000d30.J23.fix_huff_tbl| MOV a1,v3,LSL #24 MOV a2,v1 ADD v2,v2,#&104 STMIA v2,{a1,v5} SUB v2,v2,#&104 MOV a1,v2 BL huff_DECODE_buildshortcut MOV v4,a1 LDR a1,[v2,#&108] CMP a1,#&18 ADDLT a1,v1,v3,LSL #2 STRLT v6,[a1,#&1a0]! BLT |L000d8c.J26.fix_huff_tbl| CMP v4,#0 MOVLT a1,#0 MOVGE a1,#1 MOV a2,#4 BL assert LDR a1,[v2,#&108] SUB a1,v5,a1 ORR a1,v4,a1,LSL #24 ADD a2,v1,v3,LSL #2 STR a1,[a2,#&1a0]! |L000d8c.J26.fix_huff_tbl| ADD v3,v3,#1 CMP v3,#&100 BLT |L000d30.J23.fix_huff_tbl| MOV a1,#0 STR a1,[v2,#&108] STR a1,[v2,#&104]! LDMDB fp,{v1-v6,fp,sp,pc}^ get_bits MOV ip,sp STMDB sp!,{v1-v3,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 MOV v2,a2 LDR a1,[a1,#&108] CMP a2,a1 BLE |L000e40.J5.get_bits| MOV v3,#&ff |L000dcc.J4.get_bits| ADD a2,v1,#&34 LDMIA a2,{a1,a2} CMP a1,a2 MOVCS a1,v3 BCS |L000dec.J7.get_bits| LDRB a3,[a1],#1 STR a1,[v1,#&34] MOV a1,a3 |L000dec.J7.get_bits| LDR a3,[v1,#&104] ORR a3,a1,a3,LSL #8 STR a3,[v1,#&104] LDR a3,[v1,#&108] ADD a3,a3,#8 TEQ a1,#&ff STR a3,[v1,#&108] BNE |L000e34.J10.get_bits| LDR a1,[v1,#&34] CMP a1,a2 LDRCCB a2,[a1],#1 STRCC a1,[v1,#&34] MOVCS a2,v3 TEQ a2,#0 BLNE newline MOVNE a1,#&394 ADDNE a1,a1,#&2400 BLNE exit |L000e34.J10.get_bits| LDR a1,[v1,#&108] CMP v2,a1 BGT |L000dcc.J4.get_bits| |L000e40.J5.get_bits| LDR a1,[v1,#&108] SUB a1,a1,v2 STR a1,[v1,#&108] LDR a2,[v1,#&104]! MOV a1,a2,ASR a1 MOV a2,#1 MOV a2,a2,LSL v2 SUB a2,a2,#1 AND a1,a1,a2 LDMDB fp,{v1-v3,fp,sp,pc}^ huff_DECODE_buildshortcut MOV ip,sp STMDB sp!,{v1-v4,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 MOV v2,a2 LDR a2,[a1,#&108] TEQ a2,#0 BEQ |L000ea0.J5.huff_DECODE_buildshortcut| SUB a2,a2,#1 STR a2,[v1,#&108] LDR a1,[v1,#&104] MOV a1,a1,ASR a2 AND a1,a1,#1 B |L000ea8.J4.huff_DECODE_buildshortcut| |L000ea0.J5.huff_DECODE_buildshortcut| MOV a2,#1 BL get_bits |L000ea8.J4.huff_DECODE_buildshortcut| MOV v4,a1 MOV v3,#1 B |L000eec.J8.huff_DECODE_buildshortcut| |L000eb4.J7.huff_DECODE_buildshortcut| LDR a1,[v1,#&108] TEQ a1,#0 BEQ |L000ed8.J10.huff_DECODE_buildshortcut| SUB a1,a1,#1 STR a1,[v1,#&108] LDR a2,[v1,#&104] MOV a1,a2,ASR a1 AND a1,a1,#1 B |L000ee4.J9.huff_DECODE_buildshortcut| |L000ed8.J10.huff_DECODE_buildshortcut| MOV a1,v1 MOV a2,#1 BL get_bits |L000ee4.J9.huff_DECODE_buildshortcut| ADD v4,a1,v4,LSL #1 ADD v3,v3,#1 |L000eec.J8.huff_DECODE_buildshortcut| ADD a1,v2,v3,LSL #2 LDR a1,[a1,#&114] CMP a1,v4 BGE |L000f04.J12.huff_DECODE_buildshortcut| CMP v3,#8 BLE |L000eb4.J7.huff_DECODE_buildshortcut| |L000f04.J12.huff_DECODE_buildshortcut| CMP v3,#8 MVNGT a1,#0 LDMGTDB fp,{v1-v4,fp,sp,pc}^ ADD a1,v2,v3,LSL #2 LDR a1,[a1,#&15c] ADD a1,a1,v4 ADD a1,v2,a1 LDRB a1,[a1,#&11] LDMDB fp,{v1-v4,fp,sp,pc}^ huff_decoder_init MOV a2,#0 STR a2,[a1,#&108]! MOVS pc,lr mono_convert_block STMDB sp!,{v1,lr} MOV ip,#0 |L000f3c.J4.mono_convert_block| MOV a4,#0 |L000f40.J5.mono_convert_block| ADD lr,ip,a4,LSL #3 LDR lr,[a1,lr,LSL #2] ADD lr,lr,#&40000 MOV lr,lr,ASR #19 ADDS lr,lr,#&80 MOVMI lr,#0 BMI |L000f64.J8.mono_convert_block| CMP lr,#&ff MOVGT lr,#&ff |L000f64.J8.mono_convert_block| ORR v1,lr,lr,LSL #8 ORR lr,v1,lr,LSL #16 STR lr,[a2,a4,LSL #2] ADD a4,a4,#1 CMP a4,#8 BLT |L000f40.J5.mono_convert_block| ADD a2,a2,a3,LSL #2 ADD ip,ip,#1 CMP ip,#8 BLT |L000f3c.J4.mono_convert_block| LDMIA sp!,{v1,pc}^ mono_convert_pixel ADDS a1,a2,#&80 MOVMI a1,#0 BMI |L000fa4.J6.mono_convert_pixel| CMP a1,#&ff MOVGT a1,#&ff |L000fa4.J6.mono_convert_pixel| ORR a2,a1,a1,LSL #8 ORR a1,a2,a1,LSL #16 MOVS pc,lr colour_convert_block MOV ip,sp STMDB sp!,{a1-a3,v1-v6,fp,ip,lr,pc} SUB fp,ip,#4 SUB sp,sp,#&14 MOV v5,a1 ADD a1,a1,#&100 STR a1,[sp,#&10] ADD a1,a1,#&100 STR a1,[sp,#&c] ADD a1,a1,#&100 STR a1,[sp,#8] ADD a1,a1,#&100 STR a1,[sp,#4] ADD a1,a1,#&100 MOV a3,#0 STR a1,[sp,#0] |L000ff0.J4.colour_convert_block| MOV a1,#0 AND v3,a3,#7 MOV v2,a3,ASR #1 |L000ffc.J5.colour_convert_block| AND a4,a1,#7 ADD ip,v3,a4,LSL #3 CMP a3,#8 BGE |L00101c.J7.colour_convert_block| CMP a1,#8 LDRGE a4,[sp,#&10] MOVLT a4,v5 B |L001028.J6.colour_convert_block| |L00101c.J7.colour_convert_block| CMP a1,#8 LDRGE a4,[sp,#8] LDRLT a4,[sp,#&c] |L001028.J6.colour_convert_block| LDR a4,[a4,ip,LSL #2] MOV ip,a1,ASR #1 ADD ip,v2,ip,LSL #3 LDR lr,[sp,#4] LDR lr,[lr,ip,LSL #2] LDR v1,[sp,#0] LDR ip,[v1,ip,LSL #2] ADD a4,a4,#&40000 MOV a4,a4,ASR #19 ADD a4,a4,#&80 ADD lr,lr,#&40000 MOV lr,lr,ASR #19 ADD ip,ip,#&40000 MOV v1,ip,ASR #19 ADD v4,v1,v1,LSL #5 RSB v4,v4,v4,LSL #3 ADD v4,v4,v1,LSL #7 ADD ip,lr,lr,LSL #1 ADD ip,ip,lr,LSL #3 MOV ip,ip,LSL #3 RSB v6,ip,#0 ADD ip,v1,v1,LSL #1 RSB ip,ip,v1,LSL #6 ADD ip,ip,ip,LSL #1 SUB v1,v6,ip ADD ip,lr,lr,LSL #5 RSB ip,ip,lr,LSL #8 ADD ip,ip,lr,LSL #2 MOV ip,ip,LSL #1 ADD lr,v4,#&80 ADDS lr,a4,lr,ASR #8 MOVMI lr,#0 BMI |L0010b4.J15.colour_convert_block| CMP lr,#&ff MOVGT lr,#&ff |L0010b4.J15.colour_convert_block| ADD v1,v1,#&80 ADDS v1,a4,v1,ASR #8 MOVMI v1,#0 BMI |L0010cc.J19.colour_convert_block| CMP v1,#&ff MOVGT v1,#&ff |L0010cc.J19.colour_convert_block| ADD ip,ip,#&80 ADDS a4,a4,ip,ASR #8 MOVMI a4,#0 BMI |L0010e4.J23.colour_convert_block| CMP a4,#&ff MOVGT a4,#&ff |L0010e4.J23.colour_convert_block| ORR ip,lr,v1,LSL #8 ORR a4,ip,a4,LSL #16 STR a4,[a2,a1,LSL #2] ADD a1,a1,#1 CMP a1,#&10 BLT |L000ffc.J5.colour_convert_block| LDR a1,[fp,#-&28] ADD a2,a2,a1,LSL #2 ADD a3,a3,#1 CMP a3,#&10 BLT |L000ff0.J4.colour_convert_block| LDMDB fp,{v1-v6,fp,sp,pc}^ colour_convert_unusual_block MOV ip,sp STMDB sp!,{a1-a4} STMDB sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#&14 SUB sp,sp,#&20 LDR v3,[fp,#&14] STR a1,[sp,#&14] ADD a1,a1,#&100 STR a1,[sp,#&10] ADD a1,a1,#&100 STR a1,[sp,#&c] ADD a1,a1,#&100 STR a1,[sp,#8] ADD a1,a1,#&100 STR a1,[sp,#4] ADD a1,a1,#&100 MOV a3,#0 CMP a3,v3,LSL #3 STR a1,[sp,#0] BGE |L0012a4.J35.colour_convert_unusual_block| SUB a1,a4,#1 STR a1,[sp,#&1c] |L00116c.J4.colour_convert_unusual_block| MOV a1,#0 CMP a1,a4,LSL #3 BGE |L001290.J8.colour_convert_unusual_block| AND v4,a3,#7 SUB lr,v3,#1 MOV ip,a3,ASR lr STR ip,[sp,#&18] |L001188.J7.colour_convert_unusual_block| AND ip,a1,#7 ADD lr,v4,ip,LSL #3 CMP a3,#8 BGE |L0011a8.J11.colour_convert_unusual_block| CMP a1,#8 LDRGE ip,[sp,#&10] LDRLT ip,[sp,#&14] B |L0011b4.J10.colour_convert_unusual_block| |L0011a8.J11.colour_convert_unusual_block| CMP a1,#8 LDRGE ip,[sp,#8] LDRLT ip,[sp,#&c] |L0011b4.J10.colour_convert_unusual_block| LDR lr,[ip,lr,LSL #2] LDR v1,[sp,#&1c] MOV v1,a1,ASR v1 LDR ip,[sp,#&18] ADD ip,ip,v1,LSL #3 LDR v1,[sp,#4] LDR v1,[v1,ip,LSL #2] LDR v2,[sp,#0] LDR ip,[v2,ip,LSL #2] ADD lr,lr,#&40000 MOV lr,lr,ASR #19 ADD lr,lr,#&80 ADD v1,v1,#&40000 MOV v1,v1,ASR #19 ADD ip,ip,#&40000 MOV v2,ip,ASR #19 ADD v5,v2,v2,LSL #5 RSB v5,v5,v5,LSL #3 ADD v5,v5,v2,LSL #7 ADD ip,v1,v1,LSL #1 ADD ip,ip,v1,LSL #3 MOV ip,ip,LSL #3 RSB v6,ip,#0 ADD ip,v2,v2,LSL #1 RSB ip,ip,v2,LSL #6 ADD ip,ip,ip,LSL #1 SUB v2,v6,ip ADD ip,v1,v1,LSL #5 RSB ip,ip,v1,LSL #8 ADD ip,ip,v1,LSL #2 MOV ip,ip,LSL #1 ADD v1,v5,#&80 ADDS v1,lr,v1,ASR #8 MOVMI v1,#0 BMI |L001248.J19.colour_convert_unusual_block| CMP v1,#&ff MOVGT v1,#&ff |L001248.J19.colour_convert_unusual_block| ADD v2,v2,#&80 ADDS v2,lr,v2,ASR #8 MOVMI v2,#0 BMI |L001260.J23.colour_convert_unusual_block| CMP v2,#&ff MOVGT v2,#&ff |L001260.J23.colour_convert_unusual_block| ADD ip,ip,#&80 ADDS ip,lr,ip,ASR #8 MOVMI ip,#0 BMI |L001278.J27.colour_convert_unusual_block| CMP ip,#&ff MOVGT ip,#&ff |L001278.J27.colour_convert_unusual_block| ORR lr,v1,v2,LSL #8 ORR ip,lr,ip,LSL #16 STR ip,[a2,a1,LSL #2] ADD a1,a1,#1 CMP a1,a4,LSL #3 BLT |L001188.J7.colour_convert_unusual_block| |L001290.J8.colour_convert_unusual_block| LDR a1,[fp,#&c] ADD a2,a2,a1,LSL #2 ADD a3,a3,#1 CMP a3,v3,LSL #3 BLT |L00116c.J4.colour_convert_unusual_block| |L0012a4.J35.colour_convert_unusual_block| LDMDB fp,{v1-v6,fp,sp,pc}^ colour_convert_pixels STMDB sp!,{v1-v3,lr} ADD a2,a2,#4 MOV a2,a2,ASR #3 ADD a3,a3,#4 MOV a3,a3,ASR #3 ADD a4,a3,a3,LSL #5 RSB a4,a4,a4,LSL #3 ADD a4,a4,a3,LSL #7 ADD ip,a2,a2,LSL #1 ADD ip,ip,a2,LSL #3 MOV ip,ip,LSL #3 RSB lr,ip,#0 ADD ip,a3,a3,LSL #1 RSB a3,ip,a3,LSL #6 ADD a3,a3,a3,LSL #1 SUB a3,lr,a3 ADD ip,a2,a2,LSL #5 RSB ip,ip,a2,LSL #8 ADD a2,ip,a2,LSL #2 MOV a2,a2,LSL #1 ADD a4,a4,#&80 MOV v2,a4,ASR #8 ADD a3,a3,#&80 MOV v1,a3,ASR #8 ADD a2,a2,#&80 MOV lr,a2,ASR #8 MOV a4,#0 MOV v3,#&80 |L001318.J4.colour_convert_pixels| LDR a2,[a1,a4,LSL #2] ADD a2,a2,#4 ADD ip,v3,a2,ASR #3 ADDS a3,v2,ip MOVMI a3,#0 BMI |L001338.J7.colour_convert_pixels| CMP a3,#&ff MOVGT a3,#&ff |L001338.J7.colour_convert_pixels| ADDS a2,v1,ip MOVMI a2,#0 BMI |L00134c.J11.colour_convert_pixels| CMP a2,#&ff MOVGT a2,#&ff |L00134c.J11.colour_convert_pixels| ADDS ip,lr,ip MOVMI ip,#0 BMI |L001360.J15.colour_convert_pixels| CMP ip,#&ff MOVGT ip,#&ff |L001360.J15.colour_convert_pixels| ORR a2,a3,a2,LSL #8 ORR a2,a2,ip,LSL #16 STR a2,[a1,a4,LSL #2] ADD a4,a4,#1 CMP a4,#4 BLT |L001318.J4.colour_convert_pixels| LDMIA sp!,{v1-v3,pc}^ EXPORT assembler_panic assembler_panic MOVS pc,lr init_workspace MOV ip,sp STMDB sp!,{v1-v3,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 MOV a3,a2 MOV a2,#0 LDR v2,[a1,#&20] LDR v3,[a1,#&10] BL memset STR v2,[v1,#&20] STR v3,[v1,#&10] ADD a1,v1,#&1c ADD a1,a1,#&800 STR a1,[v1,#&50] MOV a1,#0 |L0013bc.J4.init_workspace| ADD a2,v1,a1,LSL #8 ADD a2,a2,#&fc ADD a2,a2,#&800 ADD a3,v1,a1,LSL #2 ADD a1,a1,#1 CMP a1,#4 STR a2,[a3,#&54]! BLT |L0013bc.J4.init_workspace| MOV a1,#0 |L0013e0.J6.init_workspace| RSB a2,a1,a1,LSL #4 ADD a2,a2,a2,LSL #1 ADD a3,v1,a2,LSL #5 SUB a4,a3,#&304 ADD a4,a4,#&1000 ADD a2,v1,a1,LSL #2 ADD a3,a3,#&37c ADD a3,a3,#&2000 ADD a1,a1,#1 CMP a1,#4 STR a4,[a2,#&64]! STR a3,[a2,#&10] BLT |L0013e0.J6.init_workspace| LDMDB fp,{v1-v3,fp,sp,pc}^ save_huff_stream MOV ip,sp STMDB sp!,{v1-v4,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 MOV v2,a2 LDR a1,[a1,#&108] MOV v4,#1 MOV v3,#0 CMP a1,#&20 MOVGE a1,v3 MOVLT a1,v4 MOV a2,#2 BL assert LDR a1,[v1,#&108] CMP a1,#0 MOVLT a1,v3 MOVGE a1,v4 MOV a2,#2 BL assert ADD a2,v1,#&30 LDMIA a2,{a1,a2} CMP a1,a2 MOVCS a1,v3 MOVCC a1,v4 MOV a2,#2 BL assert LDR a1,[v1,#&38] LDR a2,[v1,#&34] CMP a2,a1 MOVCS a1,v3 MOVCC a1,v4 MOV a2,#2 BL assert ADD a2,v1,#&30 LDMIA a2,{a1,a2} SUB a2,a2,a1 LDR a1,[v1,#&108] ADD a1,a1,a2,LSL #5 STR a1,[v2,#0] LDR a1,[v1,#&104] STR a1,[v2,#4] LDR a1,[v1,#&e4] STRB a1,[v2,#8] MOV a1,a1,ASR #8 STRB a1,[v2,#9] LDR a1,[v1,#&e8] STRB a1,[v2,#&a] MOV a1,a1,ASR #8 STRB a1,[v2,#&b] LDR a1,[v1,#&ec] STRB a1,[v2,#&c] MOV a1,a1,ASR #8 STRB a1,[v2,#&d] LDR a1,[v1,#&c0] STRB a1,[v2,#&10] MOV a1,a1,ASR #8 STRB a1,[v2,#&11] LDR a1,[v1,#&c4]! STRB a1,[v2,#&12] MOV a1,a1,ASR #8 STRB a1,[v2,#&13] LDMDB fp,{v1-v4,fp,sp,pc}^ restore_huff_stream MOV ip,sp STMDB sp!,{v1-v3,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 LDR a1,[a2,#4] STR a1,[v1,#&104] LDR a1,[a2,#0] CMP a1,#0 ADDLT a1,a1,#&1f LDR a3,[v1,#&30] ADD a1,a3,a1,ASR #5 STR a1,[v1,#&34] LDR a1,[a2,#0] AND a1,a1,#&1f STR a1,[v1,#&108] LDR a1,[a2,#8] MOV a1,a1,LSL #16 MOV a1,a1,ASR #16 STR a1,[v1,#&e4] LDR a1,[a2,#&a] MOV a1,a1,LSL #16 MOV a1,a1,ASR #16 STR a1,[v1,#&e8] LDR a1,[a2,#&c] MOV a1,a1,LSL #16 MOV a1,a1,ASR #16 STR a1,[v1,#&ec] LDR a1,[a2,#&10] MOV a1,a1,LSL #16 MOV a1,a1,ASR #16 STR a1,[v1,#&c0] LDR a1,[a2,#&12] MOV a1,a1,LSL #16 MOV a1,a1,ASR #16 STR a1,[v1,#&c4] MOV v3,#1 MOV v2,#0 ADD a2,v1,#&30 LDMIA a2,{a1,a2} CMP a1,a2 MOVCS a1,v2 MOVCC a1,v3 MOV a2,#4 BL assert ADD v1,v1,#&30 LDMIB v1!,{a1,a2} CMP a1,a2 MOVCS a1,v2 MOVCC a1,v3 MOV a2,#4 LDMDB fp,{v1-v3,fp,sp,lr} B assert process_restart MOV ip,sp STMDB sp!,{v1-v4,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 LDR a1,[a1,#&34] LDRB v4,[a1],#1 STR a1,[v1,#&34] MOV v3,#1 MOV v2,#0 LDR a1,[v1,#&108] CMP a1,#7 MOVGT a1,v2 MOVLE a1,v3 MOV a2,#2 BL assert TEQ v4,#&ff MOVNE a1,v2 MOVEQ a1,v3 MOV a2,#2 BL assert LDR a1,[v1,#&34] LDRB a1,[a1,#0] TEQ a1,#&ff BNE |L001658.J11.process_restart| |L001640.J10.process_restart| LDR a1,[v1,#&34] ADD a1,a1,#1 STR a1,[v1,#&34] LDRB a1,[a1,#0] TEQ a1,#&ff BEQ |L001640.J10.process_restart| |L001658.J11.process_restart| LDR a1,[v1,#&34] LDRB v4,[a1],#1 STR a1,[v1,#&34] AND a1,v4,#&f8 TEQ a1,#&d0 MOVNE a1,v2 MOVEQ a1,v3 MOV a2,#2 BL assert AND a1,v4,#7 LDR a2,[v1,#&c4] TEQ a1,a2 MOVNE a1,v2 MOVEQ a1,v3 MOV a2,#2 BL assert MOV a2,v2 STR a2,[v1,#&108] STR a2,[v1,#&104] LDR a1,[v1,#&bc] STR a1,[v1,#&c0] LDR a1,[v1,#&c4] ADD a1,a1,#1 AND a1,a1,#7 STR a1,[v1,#&c4] MOV a1,#0 LDR a3,[v1,#&c8] CMP a3,#0 LDMLEDB fp,{v1-v4,fp,sp,pc}^ |L0016cc.J20.process_restart| ADD a3,v1,a1,LSL #2 ADD a1,a1,#1 STR a2,[a3,#&e4]! LDR a3,[v1,#&c8] CMP a1,a3 BLT |L0016cc.J20.process_restart| LDMDB fp,{v1-v4,fp,sp,pc}^ IMPORT asm_huff_skip_blocks do_huff_skip_blocks MOV ip,sp STMDB sp!,{a1-a4} STMDB sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#&14 MOV v1,a1 MOV v2,a2 MOV v3,a3 LDR v4,[fp,#&1c] LDR v5,[fp,#&18] LDR v6,[fp,#&14] LDR a2,[a1,#&bc] TEQ a2,#0 BEQ |L00178c.J4.do_huff_skip_blocks| CMP v4,#0 LDMLEDB fp,{v1-v6,fp,sp,pc}^ B |L001730.J10.do_huff_skip_blocks| |L001728.J6.do_huff_skip_blocks| TEQ a1,#0 BEQ |L00174c.J9.do_huff_skip_blocks| |L001730.J10.do_huff_skip_blocks| LDR a1,[v1,#&c0] TEQ a1,#0 MOVEQ a1,v1 BLEQ process_restart LDR a1,[v1,#&c0] SUB a1,a1,#1 STR a1,[v1,#&c0] |L00174c.J9.do_huff_skip_blocks| MOV a4,#1 MOV a3,v5 MOV a2,v6 STMDB sp!,{a2-a4} MOV a3,v3 MOV a2,v2 MOV a1,v1 LDR a4,[fp,#&10] BL asm_huff_skip_blocks ADD sp,sp,#&c SUB v4,v4,#1 ADD v2,v2,#&100 CMP v4,#0 LDR a1,[fp,#&20] BGT |L001728.J6.do_huff_skip_blocks| LDMDB fp,{v1-v6,fp,sp,pc}^ |L00178c.J4.do_huff_skip_blocks| MOV a4,v4 MOV a3,v5 MOV a2,v6 STMDB sp!,{a2-a4} MOV a3,v3 MOV a2,v2 LDR a4,[fp,#&10] BL asm_huff_skip_blocks LDMDB fp,{v1-v6,fp,sp,pc}^ IMPORT asm_huff_decode_blocks do_huff_decode_blocks MOV ip,sp STMDB sp!,{a1-a4} STMDB sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#&14 MOV v1,a1 MOV v2,a2 MOV v3,a3 LDR v4,[fp,#&1c] LDR v5,[fp,#&18] LDR v6,[fp,#&14] LDR a2,[a1,#&bc] TEQ a2,#0 BEQ |L001854.J4.do_huff_decode_blocks| CMP v4,#0 LDMLEDB fp,{v1-v6,fp,sp,pc}^ B |L0017f8.J10.do_huff_decode_blocks| |L0017f0.J6.do_huff_decode_blocks| TEQ a1,#0 BEQ |L001814.J9.do_huff_decode_blocks| |L0017f8.J10.do_huff_decode_blocks| LDR a1,[v1,#&c0] TEQ a1,#0 MOVEQ a1,v1 BLEQ process_restart LDR a1,[v1,#&c0] SUB a1,a1,#1 STR a1,[v1,#&c0] |L001814.J9.do_huff_decode_blocks| MOV a4,#1 MOV a3,v5 MOV a2,v6 STMDB sp!,{a2-a4} MOV a3,v3 MOV a2,v2 MOV a1,v1 LDR a4,[fp,#&10] BL asm_huff_decode_blocks ADD sp,sp,#&c SUB v4,v4,#1 ADD v2,v2,#&100 CMP v4,#0 LDR a1,[fp,#&20] BGT |L0017f0.J6.do_huff_decode_blocks| LDMDB fp,{v1-v6,fp,sp,pc}^ |L001854.J4.do_huff_decode_blocks| MOV a4,v4 MOV a3,v5 MOV a2,v6 STMDB sp!,{a2-a4} MOV a3,v3 MOV a2,v2 LDR a4,[fp,#&10] BL asm_huff_decode_blocks LDMDB fp,{v1-v6,fp,sp,pc}^ ;MPORT jpeg_scan_file do_jpeg_scan_file MOV ip,sp STMDB sp!,{v1,fp,ip,lr,pc} SUB fp,ip,#4 MOV lr,a3 MOV ip,a4 MOV v1,a1 STR a2,[a1,#&10] MVN a1,#0 MOV a4,#0 MVN a3,#0 MVN a2,#0 STR a1,[v1,#0] MVN a1,#&80000000 STMDB sp!,{a1-a4} MOV a3,ip MOV a2,lr MOV a1,v1 BL jpeg_scan_file LDMDB fp,{v1,fp,sp,pc}^ do_jpeg_scan_file_16 MOV ip,sp STMDB sp!,{v1,fp,ip,lr,pc} SUB fp,ip,#4 MOV lr,a3 MOV ip,a4 MOV v1,a1 STR a2,[a1,#&10] MVN a1,#0 MOV a4,#&10 MVN a3,#0 MVN a2,#0 STR a1,[v1,#0] MVN a1,#&80000000 STMDB sp!,{a1-a4} MOV a3,ip MOV a2,lr MOV a1,v1 MOV a4,#0 BL jpeg_scan_file LDMDB fp,{v1,fp,sp,pc}^ IMPORT |__rt_sdiv| jpeg_scan_file MOV ip,sp STMDB sp!,{a1-a4} STMDB sp!,{v1-v6,fp,ip,lr,pc} SUB fp,ip,#&14 MOV v1,a1 MOV v5,a2 MOV v4,a3 MOV v3,a4 SUB sp,sp,#&20 LDR v2,[fp,#&20] TST v2,#2 LDR v6,[fp,#&14] BICNE v2,v2,#&38 CMP v3,#0 MOVLT v3,#0 TST v2,#&28 BEQ |L001968.J8.jpeg_scan_file| SUBS v3,v3,#&10 MOVMI v3,#0 BIC v3,v3,#&f ADD v6,v6,#&10 |L001968.J8.jpeg_scan_file| LDR a2,[v1,#0] CMP a2,#0 BNE |L001a78.J12.jpeg_scan_file| LDR a2,[v1,#&30] TEQ a2,v5 BNE |L001a80.J42.jpeg_scan_file| LDR a3,[v1,#&38] SUB a2,a3,a2 TEQ a2,v4 BNE |L001a80.J42.jpeg_scan_file| LDR a2,[fp,#&18] CMN a2,#1 LDRNE a2,[v1,#&14] LDRNE a3,[fp,#&18] TEQNE a2,a3 BNE |L001a80.J42.jpeg_scan_file| LDR a2,[fp,#&1c] CMN a2,#1 LDRNE a2,[v1,#&18] LDRNE a3,[fp,#&1c] TEQNE a2,a3 BNE |L001a80.J42.jpeg_scan_file| MOVS a2,v4 ADDMI a2,a2,#7 MOV a2,a2,ASR #3 LDR a2,[v5,a2,LSL #2] LDR a3,[v1,#&10c] TEQ a2,a3 BNE |L001a80.J42.jpeg_scan_file| MOV a3,v4 CMP v4,#0 ADDLT a3,a3,#3 MOV a3,a3,ASR #2 MOV a2,v4 ADDLT a2,a2,#&f SUB a2,a3,a2,ASR #4 LDR a3,[v5,a2,LSL #2] LDR a2,[v1,#&110] TEQ a3,a2 BNE |L001a80.J42.jpeg_scan_file| MOV a2,v4 CMP v4,#0 ADDLT a2,a2,#3 MOV a2,a2,ASR #2 MOV a3,v4 ADDLT a3,a3,#&1f SUB a2,a2,a3,ASR #5 LDR a3,[v5,a2,LSL #2] LDR a2,[v1,#&114] TEQ a3,a2 LDREQ a2,[v1,#&100] TEQEQ a2,v2 BNE |L001a80.J42.jpeg_scan_file| LDR a1,[v1,#&14] CMP v6,a1 MOVGT v6,a1 LDR a1,[v1,#&f8] CMP v3,a1 BLT |L001a60.J39.jpeg_scan_file| LDR a1,[v1,#&fc] CMP v6,a1 BLE |L001a68.J38.jpeg_scan_file| |L001a60.J39.jpeg_scan_file| MVN a1,#0 STR a1,[v1,#&f4] |L001a68.J38.jpeg_scan_file| MOV a1,#0 ADD v1,v1,#&f4 STMIB v1!,{v3,v6} B |L0020bc.J135.jpeg_scan_file| |L001a78.J12.jpeg_scan_file| MOVLT a2,#0 STRLT a2,[v1,#&20] |L001a80.J42.jpeg_scan_file| LDR a2,[v1,#&10] BL init_workspace LDR a1,[v1,#&10] TEQ a1,#0 STREQ a1,[v1,#&28] LDREQ a1,[pc, #L001bc4-.-8] BEQ |L001ab8.J134.jpeg_scan_file| ADD a2,v1,#&1fc ADD a2,a2,#&3800 ADD a1,a1,#&204 SUB a1,a1,#&3c00 MOV a1,a1,LSR #2 BIC a1,a1,#&f STR a2,[v1,#&28] |L001ab8.J134.jpeg_scan_file| STR a1,[v1,#&2c] MOV a1,v4 CMP v4,#0 ADDLT a1,a1,#7 MOV a1,a1,ASR #3 LDR a1,[v5,a1,LSL #2] MOV a2,v4 STR a1,[v1,#&10c] ADDLT a2,a2,#3 MOV a2,a2,ASR #2 MOV a1,v4 ADDLT a1,a1,#&f SUB a1,a2,a1,ASR #4 LDR a1,[v5,a1,LSL #2] MOV a2,v4 STR a1,[v1,#&110] ADDLT a2,a2,#3 MOV a2,a2,ASR #2 MOV a1,v4 ADDLT a1,a1,#&1f SUB a1,a2,a1,ASR #5 LDR a1,[v5,a1,LSL #2] STR a1,[v1,#&114] STR v5,[v1,#&30] STR v5,[v1,#&34] ADD a1,v5,v4 STR a1,[v1,#&38] MOV a1,v1 BL read_file_header MOV a1,v1 BL read_scan_header MOV v4,#0 |L001b38.J57.jpeg_scan_file| ADD v5,v1,v4,LSL #2 MOV a1,v1 LDR a2,[v5,#&64] BL fix_huff_tbl MOV a1,v1 LDR a2,[v5,#&74]! BL fix_huff_tbl ADD v4,v4,#1 CMP v4,#4 BLT |L001b38.J57.jpeg_scan_file| MOV a1,v1 BL huff_decoder_init MVN a1,#0 STR a1,[v1,#&f4] LDR a1,[v1,#&bc] STR a1,[v1,#&c0] MOV a1,#0 STR a1,[v1,#&c4] LDR v4,[v1,#&14] CMP v6,v4 MOVGT v6,v4 CMP v3,v6 MOVGT v3,v6 STR v2,[v1,#&100] ADD v1,v1,#&f8 STMIA v1,{v3,v6} SUB v1,v1,#&f8 LDR a1,[v1,#&3c] TEQ a1,#8 BEQ |L001bc8.J63.jpeg_scan_file| MOV a2,#1 STR a1,[v1,#4] STR a2,[v1,#0] MOV a1,#1 B |L0020bc.J135.jpeg_scan_file| L001bc4 DCD &05f5e100 |L001bc8.J63.jpeg_scan_file| LDR a1,[v1,#&c8] LDR v3,[v1,#&4c] TEQ v3,a1 MOVNE a1,#3 STRNE a1,[v1,#0] BNE |L0020bc.J135.jpeg_scan_file| LDR a1,[fp,#&18] TEQ v4,a1 LDRNE a1,[fp,#&18] CMNNE a1,#1 BEQ |L001c00.J67.jpeg_scan_file| MOV a1,#7 STMIA v1,{a1,v4} B |L0020bc.J135.jpeg_scan_file| |L001c00.J67.jpeg_scan_file| LDR a2,[v1,#&18] STR a2,[sp,#&1c] LDR a1,[fp,#&1c] TEQ a2,a1 LDRNE a1,[fp,#&1c] CMNNE a1,#1 BEQ |L001c34.J70.jpeg_scan_file| MOV a1,#6 STR a1,[v1,#0] LDR a1,[sp,#&1c] STR a1,[v1,#4]! MOV a1,#6 B |L0020bc.J135.jpeg_scan_file| |L001c34.J70.jpeg_scan_file| LDR v6,[v1,#&50] LDR a1,[v6,#&c] MOV v5,a1,LSL #3 LDR a1,[sp,#&1c] ADD a1,a1,v5 SUB a2,a1,#1 MOV a1,v5 BL |__rt_sdiv| ADD a1,a1,a1,LSL #2 MOV a1,a1,LSL #2 LDR a2,[v1,#&28] MOV a1,a1,LSR #2 STR a2,[v1,#&818] ADD a2,a2,a1,LSL #2 STR a2,[v1,#&28] LDR a2,[v1,#&2c] SUB a2,a2,a1 MOV a1,v5 STR a2,[v1,#&2c] BL |__rt_sdiv| MOV a2,a1 CMP a1,v4 BGE |L001ca8.J73.jpeg_scan_file| MOV a1,#&a STMIA v1,{a1,v4} MOV a1,a2 STR a1,[v1,#8]! MOV a1,#&a B |L0020bc.J135.jpeg_scan_file| |L001ca8.J73.jpeg_scan_file| MOV a2,#8 MOV a1,#5 ADD v5,v1,#&e4 TEQ v3,#1 BNE |L001db8.J75.jpeg_scan_file| LDR a3,[v1,#&1c] TEQ a3,#1 MOVNE a1,#8 STMNEIA v1,{a2,a3} BNE |L0020bc.J135.jpeg_scan_file| LDR a2,[v6,#8] TEQ a2,#1 LDREQ a2,[v6,#&c] TEQEQ a2,#1 BEQ |L001d00.J79.jpeg_scan_file| STR a1,[v1,#0] LDR a1,[v6,#8] STR a1,[v1,#4] LDR a1,[v6,#&c]! STR a1,[v1,#8]! MOV a1,#5 B |L0020bc.J135.jpeg_scan_file| |L001d00.J79.jpeg_scan_file| SUB sp,sp,#8 MOV v4,#0 LDR a1,[v1,#&cc] LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR v6,[a2,#&64]! LDR a2,[a1,#&18] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&74] STR a2,[sp,#4] LDR a1,[a1,#&10] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&54] MOV v3,#0 STR a1,[sp,#0] LDR a1,[sp,#&24] CMP a1,#0 BLE |L001dac.J84.jpeg_scan_file| ADD a1,v1,#&118 STR a1,[sp,#&20] |L001d50.J83.jpeg_scan_file| ADD a1,v3,v3,LSL #2 LDR a2,[v1,#&818] ADD a2,a2,a1,LSL #2 MOV a1,v1 BL save_huff_stream ADD v3,v3,#1 MOV a4,#1 LDR a1,[v1,#&14] ADD a1,a1,#7 MOV a3,a1,ASR #3 MOV a2,v5 LDR a1,[sp,#0] STMDB sp!,{a1-a4} MOV a3,v6 MOV a1,v1 LDR a2,[sp,#&30] LDR a4,[sp,#&14] BL do_huff_skip_blocks ADD sp,sp,#&10 ADD v4,v4,#8 LDR a1,[v1,#&18] CMP v4,a1 BLT |L001d50.J83.jpeg_scan_file| |L001dac.J84.jpeg_scan_file| ADD sp,sp,#8 BIC v2,v2,#&30 B |L00203c.J87.jpeg_scan_file| |L001db8.J75.jpeg_scan_file| TEQ v3,#3 BNE |L0020b4.J88.jpeg_scan_file| LDR a3,[v6,#&c] STR a3,[sp,#-4]! LDR a4,[v6,#8] MOV v3,a4 CMP a4,#2 CMPLE a3,#2 BLE |L001df0.J90.jpeg_scan_file| STR a1,[v1,#0] LDR a1,[v6,#8] STR a1,[v1,#4] LDR a1,[v6,#&c]! B |L001e3c.J137.jpeg_scan_file| |L001df0.J90.jpeg_scan_file| LDR a3,[v6,#&40] TEQ a3,#1 LDREQ a3,[v6,#&44] TEQEQ a3,#1 BEQ |L001e18.J94.jpeg_scan_file| STR a1,[v1,#0] LDR a1,[v6,#&40] STR a1,[v1,#4] LDR a1,[v6,#&44]! B |L001e3c.J137.jpeg_scan_file| |L001e18.J94.jpeg_scan_file| LDR a3,[v6,#&78] TEQ a3,#1 LDREQ a3,[v6,#&7c] TEQEQ a3,#1 BEQ |L001e48.J98.jpeg_scan_file| STR a1,[v1,#0] LDR a1,[v6,#&78] STR a1,[v1,#4] LDR a1,[v6,#&7c]! |L001e3c.J137.jpeg_scan_file| STR a1,[v1,#8]! MOV a1,#5 B |L001e60.J138.jpeg_scan_file| |L001e48.J98.jpeg_scan_file| LDR a1,[v1,#&1c] TEQ a1,#3 BEQ |L001e64.J102.jpeg_scan_file| STR a1,[v1,#4] STR a2,[v1,#0] MOV a1,#8 |L001e60.J138.jpeg_scan_file| LDMDB fp,{v1-v6,fp,sp,pc}^ |L001e64.J102.jpeg_scan_file| TEQ v3,#2 LDREQ a1,[sp,#0] TEQEQ a1,#2 BICNE v2,v2,#&30 SUB sp,sp,#&28 MOV a1,#0 MOV v4,#0 STR a1,[sp,#&24] LDR a1,[v1,#&cc] LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&64] STR a2,[sp,#&20] LDR a2,[a1,#&18] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&74] STR a2,[sp,#&1c] LDR a1,[a1,#&10] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&54] STR a1,[sp,#&18] LDR a1,[v1,#&d0] LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&64] STR a2,[sp,#&14] LDR a2,[a1,#&18] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&74] STR a2,[sp,#&10] LDR a1,[a1,#&10] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&54] STR a1,[sp,#&c] LDR a1,[v1,#&d4] LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&64] STR a2,[sp,#8] LDR a2,[a1,#&18] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&74] STR a2,[sp,#4] LDR a1,[a1,#&10] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&54] STR a1,[sp,#0] LDR a1,[sp,#&48] CMP a1,#0 BLE |L002038.J109.jpeg_scan_file| LDR a2,[sp,#&28] MUL a1,a2,v3 ADD a2,v1,#&218 STR a2,[sp,#&3c] ADD a2,v1,#&e8 STR a2,[sp,#&38] ADD a2,v1,#&218 ADD a2,a2,#&400 STR a2,[sp,#&34] ADD a2,v1,#&ec STR a1,[sp,#&40] ADD a1,v1,#&318 ADD a1,a1,#&400 STR a1,[sp,#&2c] STR a2,[sp,#&30] |L001f68.J108.jpeg_scan_file| ADD a1,v4,v4,LSL #2 LDR a2,[v1,#&818] ADD a2,a2,a1,LSL #2 MOV a1,v1 BL save_huff_stream ADD v4,v4,#1 MOV v6,#0 LDR a1,[v1,#&14] CMP a1,#0 BLE |L00201c.J112.jpeg_scan_file| |L001f90.J111.jpeg_scan_file| MOV a4,#0 MOV a2,v5 LDR a1,[sp,#&18] LDR a3,[sp,#&40] STMDB sp!,{a1-a4} MOV a1,v1 LDR a2,[sp,#&4c] LDR a3,[sp,#&30] LDR a4,[sp,#&2c] BL do_huff_skip_blocks ADD sp,sp,#&10 MOV a4,#1 LDR a2,[sp,#&c] LDR a3,[sp,#&38] STMDB sp!,{a2-a4} MOV a1,v1 LDR a2,[sp,#&40] LDR a3,[sp,#&20] LDR a4,[sp,#&1c] BL asm_huff_skip_blocks ADD sp,sp,#&c MOV a4,#1 LDR a2,[sp,#0] LDR a3,[sp,#&30] STMDB sp!,{a2-a4} MOV a1,v1 LDR a2,[sp,#&38] LDR a3,[sp,#&14] LDR a4,[sp,#&10] BL asm_huff_skip_blocks ADD sp,sp,#&c ADD v6,v6,v3,LSL #3 LDR a1,[v1,#&14] CMP v6,a1 BLT |L001f90.J111.jpeg_scan_file| |L00201c.J112.jpeg_scan_file| ADD a2,sp,#&24 LDMIA a2,{a1,a2} ADD a2,a1,a2,LSL #3 STR a2,[sp,#&24] LDR a1,[v1,#&18] CMP a2,a1 BLT |L001f68.J108.jpeg_scan_file| |L002038.J109.jpeg_scan_file| ADD sp,sp,#&2c |L00203c.J87.jpeg_scan_file| TST v2,#4 BEQ |L002078.J117.jpeg_scan_file| LDR a1,[v1,#&50] LDR a1,[a1,#8] MOV a1,a1,LSL #3 LDR a2,[v1,#&2c] BL |__rt_sdiv| LDR a2,[v1,#&14] CMP a1,a2,LSL #1 LDRLT a1,[v1,#&100] BICLT a1,a1,#4 STRLT a1,[v1,#&100] LDRGE a1,[v1,#4] ORRGE a1,a1,#4 STRGE a1,[v1,#4] |L002078.J117.jpeg_scan_file| TST v2,#8 LDRNE a1,[v1,#4] ORRNE a1,a1,#8 STRNE a1,[v1,#4] TST v2,#&10 LDRNE a1,[v1,#4] ORRNE a1,a1,#&10 STRNE a1,[v1,#4] TST v2,#&20 LDRNE a1,[v1,#4] ORRNE a1,a1,#&20 STRNE a1,[v1,#4] STR v2,[v1,#&100] LDR a1,[v1,#0] B |L0020bc.J135.jpeg_scan_file| |L0020b4.J88.jpeg_scan_file| MOV a1,#9 STMIA v1,{a1,v3} |L0020bc.J135.jpeg_scan_file| LDMDB fp,{v1-v6,fp,sp,pc}^ IMPORT asm_j_rev_dct IMPORT asm_mono_convert_block IMPORT asm_colour_convert_block_16 IMPORT asm_colour_convert_block IMPORT asm_colour_convert_block_8 IMPORT asm_get_table32k IMPORT asm_diffuse_to_8bpp jpeg_find_line MOV ip,sp STMDB sp!,{a1-a3,v1-v6,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 LDR a1,[a1,#&50] LDR a1,[a1,#&c] ADD a1,a1,#2 STR a1,[sp,#-&34]! LDR a1,[v1,#&2c] LDR a2,[sp,#0] MOV v4,a1,ASR a2 LDR a1,[v1,#&18] LDR a2,[fp,#-&2c] SUB a1,a1,a2 SUBS a1,a1,#1 MOV v2,#0 STR a1,[fp,#-&2c] MOVMI a1,v2 MOVPL a1,#1 MOV a2,#4 BL assert LDR a2,[fp,#-&2c] LDR a1,[v1,#&18] CMP a2,a1 MOVGE a1,v2 MOVLT a1,#1 MOV a2,#4 BL assert LDR a2,[fp,#-&2c] LDR a1,[sp,#0] MOV a2,a2,ASR a1 STR a2,[sp,#4] LDR a1,[v1,#&f4] TEQ a2,a1 BEQ |L00297c.J10.jpeg_find_line| SUB sp,sp,#4 LDR a1,[v1,#&28] TEQ a1,#0 MOVEQ a1,v2 MOVNE a1,#1 MOV a2,#4 BL assert MVN a1,#0 STR a1,[v1,#&f4] LDR a1,[sp,#8] ADD a2,a1,a1,LSL #2 LDR a1,[v1,#&818] ADD a2,a1,a2,LSL #2 MOV a1,v1 BL restore_huff_stream LDR a1,[v1,#&4c] ADD a3,v1,#&e4 ADD v6,v1,#&118 ADD a2,v1,#&218 TEQ a1,#1 STR a2,[sp,#&30] STR a3,[sp,#&34] BNE |L00233c.J15.jpeg_find_line| SUB sp,sp,#8 MOV v3,#0 LDR a1,[v1,#&cc] LDR v2,[v1,#&28] LDR a2,[a1,#&10] ADD a2,v1,a2,LSL #2 LDR v5,[a2,#&54]! LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&64] STR a2,[sp,#4] LDR a1,[a1,#&18] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&74] STR a1,[sp,#0] LDR a1,[v1,#&f8] CMP a1,#8 BLT |L002234.J17.jpeg_find_line| SUB a1,a1,#8 MOV a1,a1,ASR #3 MOV a4,#1 STR a1,[sp,#-4]! MOV a3,a1 MOV a1,v5 LDR a2,[sp,#&40] STMDB sp!,{a1-a4} MOV a2,v6 MOV a1,v1 LDR a3,[sp,#&18] LDR a4,[sp,#&14] BL do_huff_skip_blocks LDR a1,[sp,#&10]! ADD v3,v3,a1,LSL #3 ADD v2,v2,a1,LSL #5 ADD sp,sp,#4 |L002234.J17.jpeg_find_line| LDR a1,[v1,#&100] TST a1,#2 LDR a1,[v1,#&fc] BEQ |L0022c8.J19.jpeg_find_line| CMP v3,a1 BGE |L0022c0.J22.jpeg_find_line| |L00224c.J21.jpeg_find_line| MOV a4,#1 MOV a3,#1 MOV a1,v5 LDR a2,[sp,#&3c] STMDB sp!,{a1-a4} MOV a1,v1 LDR a2,[sp,#&48] LDR a3,[sp,#&14] LDR a4,[sp,#&10] BL do_huff_skip_blocks ADD sp,sp,#&10 LDR a2,[v1,#&e4] LDR a1,[v5,#0] MUL a2,a1,a2 MOV a1,v1 BL mono_convert_pixel STR a1,[v2,#0] STR a1,[v2,#4] STR a1,[v2,#8] STR a1,[v2,#&c] STR a1,[v2,#&10] STR a1,[v2,#&14] STR a1,[v2,#&18] ADD v3,v3,#8 STR a1,[v2,#&1c]! ADD v2,v2,#4 LDR a1,[v1,#&fc] CMP v3,a1 BLT |L00224c.J21.jpeg_find_line| |L0022c0.J22.jpeg_find_line| MOV a1,#1 B |L002334.J130.jpeg_find_line| |L0022c8.J19.jpeg_find_line| CMP v3,a1 BGE |L002330.J27.jpeg_find_line| |L0022d0.J26.jpeg_find_line| MOV a4,#1 MOV a3,#1 MOV a1,v5 LDR a2,[sp,#&3c] STMDB sp!,{a1-a4} MOV a1,v1 LDR a2,[sp,#&48] LDR a3,[sp,#&14] LDR a4,[sp,#&10] BL do_huff_decode_blocks ADD sp,sp,#&10 MOV a1,v1 MOV a3,#1 LDR a2,[sp,#&38] BL asm_j_rev_dct MOV a1,v6 MOV a3,v4 MOV a2,v2 BL asm_mono_convert_block ADD v3,v3,#8 ADD v2,v2,#&20 LDR a1,[v1,#&fc] CMP v3,a1 BLT |L0022d0.J26.jpeg_find_line| |L002330.J27.jpeg_find_line| MOV a1,#8 |L002334.J130.jpeg_find_line| STR a1,[sp,#8]! B |L0028a8.J30.jpeg_find_line| |L00233c.J15.jpeg_find_line| SUB sp,sp,#&28 MOV v5,#0 LDR a1,[v1,#&cc] LDR v2,[v1,#&28] LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&64] STR a2,[sp,#&24] LDR a2,[a1,#&18] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&74] STR a2,[sp,#&20] LDR a1,[a1,#&10] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&54] STR a1,[sp,#&1c] LDR a1,[v1,#&d0] LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&64] STR a2,[sp,#&18] LDR a2,[a1,#&18] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&74] STR a2,[sp,#&14] LDR a1,[a1,#&10] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&54] STR a1,[sp,#&10] LDR a1,[v1,#&d4] LDR a2,[a1,#&14] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&64] STR a2,[sp,#&c] LDR a2,[a1,#&18] ADD a2,v1,a2,LSL #2 LDR a2,[a2,#&74] STR a2,[sp,#8] LDR a1,[a1,#&10] ADD a1,v1,a1,LSL #2 LDR a1,[a1,#&54] STR a1,[sp,#4] LDR a1,[v1,#&50] LDR a2,[a1,#&c] STR a2,[sp,#0] LDR v3,[a1,#8]! ADD a2,v5,v3,LSL #3 LDR a1,[v1,#&f8] ADD a4,v1,#&e8 ADD a3,v1,#&ec CMP a2,a1 STR a3,[sp,#&50] STR a4,[sp,#&54] BGT |L0024cc.J32.jpeg_find_line| LDR a2,[sp,#0] MUL a1,a2,v3 STR a1,[sp,#&4c] |L002420.J31.jpeg_find_line| MOV a4,#0 LDR a1,[sp,#&1c] LDR a2,[sp,#&5c] LDR a3,[sp,#&4c] STMDB sp!,{a1-a4} MOV a2,v6 MOV a1,v1 LDR a3,[sp,#&34] LDR a4,[sp,#&30] BL do_huff_skip_blocks ADD sp,sp,#&10 MOV a4,#1 LDR a2,[sp,#&10] LDR a3,[sp,#&54] STMDB sp!,{a2-a4} MOV a2,v6 MOV a1,v1 LDR a3,[sp,#&24] LDR a4,[sp,#&20] BL asm_huff_skip_blocks ADD sp,sp,#&c MOV a4,#1 LDR a2,[sp,#4] LDR a3,[sp,#&50] STMDB sp!,{a2-a4} MOV a2,v6 MOV a1,v1 LDR a3,[sp,#&18] LDR a4,[sp,#&14] BL asm_huff_skip_blocks ADD sp,sp,#&c ADD v5,v5,v3,LSL #3 LDR a1,[v1,#&100] TST a1,#&10 ADDNE v2,v2,v3,LSL #4 BNE |L0024bc.J36.jpeg_find_line| TST a1,#&20 ADDEQ v2,v2,v3,LSL #5 ADDNE v2,v2,v3,LSL #3 |L0024bc.J36.jpeg_find_line| ADD a1,v5,v3,LSL #3 LDR a2,[v1,#&f8] CMP a1,a2 BLE |L002420.J31.jpeg_find_line| |L0024cc.J32.jpeg_find_line| LDR a1,[v1,#&100] TST a1,#2 ADD a1,v1,#&318 ADD a1,a1,#&400 STR a1,[sp,#&48] MOV a1,#2 ADD a3,v1,#&218 ADD a3,a3,#&400 STR a3,[sp,#&44] LDR a2,[v1,#&fc] BEQ |L0026a8.J41.jpeg_find_line| CMP v5,a2 BGE |L0026a0.J44.jpeg_find_line| LDR a2,[sp,#0] MUL a1,a2,v3 STR a1,[sp,#&40] |L00250c.J43.jpeg_find_line| SUB sp,sp,#&10 MOV a4,#0 MOV a3,#1 LDR a1,[sp,#&2c] LDR a2,[sp,#&6c] STMDB sp!,{a1-a4} MOV a1,v1 LDR a2,[sp,#&78] LDR a3,[sp,#&44] LDR a4,[sp,#&40] BL do_huff_skip_blocks ADD sp,sp,#&10 LDR a1,[v1,#&e4] LDR a2,[sp,#&2c] LDR a2,[a2,#0] MUL a1,a2,a1 MOV v6,#1 STR a1,[sp,#0] LDR a1,[sp,#&50] CMP a1,#1 BLE |L0025b0.J47.jpeg_find_line| |L002560.J46.jpeg_find_line| MOV a4,#1 LDR a2,[sp,#&2c] LDR a3,[sp,#&6c] STMDB sp!,{a2-a4} ADD a1,v1,v6,LSL #8 ADD a2,a1,#&218 MOV a1,v1 LDR a3,[sp,#&40] LDR a4,[sp,#&3c] BL asm_huff_skip_blocks ADD sp,sp,#&c LDR a2,[v1,#&e4] LDR a1,[sp,#&2c] LDR a1,[a1,#0] MUL a2,a1,a2 STR a2,[sp,v6,LSL #2] ADD v6,v6,#1 LDR a1,[sp,#&50] CMP a1,v6 BGT |L002560.J46.jpeg_find_line| |L0025b0.J47.jpeg_find_line| MOV a4,#1 LDR a2,[sp,#&20] LDR a3,[sp,#&64] STMDB sp!,{a2-a4} MOV a1,v1 LDR a2,[sp,#&60] LDR a3,[sp,#&34] LDR a4,[sp,#&30] BL asm_huff_skip_blocks ADD sp,sp,#&c MOV a4,#1 LDR a2,[sp,#&14] LDR a3,[sp,#&60] STMDB sp!,{a2-a4} MOV a1,v1 LDR a2,[sp,#&64] LDR a3,[sp,#&28] LDR a4,[sp,#&24] BL asm_huff_skip_blocks ADD sp,sp,#&c LDR a2,[v1,#&e8] LDR a1,[sp,#&20] LDR a1,[a1,#0] MUL a2,a1,a2 LDR a3,[v1,#&ec] LDR a1,[sp,#&14] LDR a1,[a1,#0] MUL a3,a1,a3 MOV a1,sp BL colour_convert_pixels MOV v6,#0 MOV a3,#2 MOV a4,#1 |L002634.J50.jpeg_find_line| LDR a1,[sp,#0] STR a1,[v2,v6,LSL #2] TEQ v3,#2 ADDEQ a2,v2,v6,LSL #2 LDREQ a1,[sp,#4] STREQ a1,[a2,#&20]! LDR a1,[sp,#&10] TEQ a1,#2 BNE |L00267c.J53.jpeg_find_line| CMP v3,#2 MOVNE a1,a4 MOVEQ a1,a3 LDR a2,[sp,a1,LSL #2] ADD a1,v4,v6 STR a2,[v2,a1,LSL #2] ADDEQ a1,v2,a1,LSL #2 LDREQ a2,[sp,#&c] STREQ a2,[a1,#&20]! |L00267c.J53.jpeg_find_line| ADD v6,v6,#1 CMP v6,#8 BLT |L002634.J50.jpeg_find_line| ADD v5,v5,v3,LSL #3 ADD v2,v2,v3,LSL #5 ADD sp,sp,#&10 LDR a1,[v1,#&fc] CMP v5,a1 BLT |L00250c.J43.jpeg_find_line| |L0026a0.J44.jpeg_find_line| LDR a1,[sp,#0] B |L0028a4.J131.jpeg_find_line| |L0026a8.J41.jpeg_find_line| CMP v5,a2 BGE |L00289c.J64.jpeg_find_line| ADD a1,v1,#&18 ADD a1,a1,#&400 STR a1,[sp,#&3c] LDR a2,[sp,#0] MUL a1,a2,v3 STR a1,[sp,#&38] |L0026c8.J63.jpeg_find_line| MOV a4,#0 LDR a1,[sp,#&1c] LDR a2,[sp,#&5c] LDR a3,[sp,#&38] STMDB sp!,{a1-a4} MOV a1,v1 LDR a2,[sp,#&68] LDR a3,[sp,#&34] LDR a4,[sp,#&30] BL do_huff_decode_blocks ADD sp,sp,#&10 MOV a4,#1 LDR a2,[sp,#&10] LDR a3,[sp,#&54] STMDB sp!,{a2-a4} MOV a1,v1 LDR a2,[sp,#&50] LDR a3,[sp,#&24] LDR a4,[sp,#&20] BL asm_huff_decode_blocks ADD sp,sp,#&c MOV a4,#1 LDR a2,[sp,#4] LDR a3,[sp,#&50] STMDB sp!,{a2-a4} MOV a1,v1 LDR a2,[sp,#&54] LDR a3,[sp,#&18] LDR a4,[sp,#&14] BL asm_huff_decode_blocks ADD sp,sp,#&c LDR a1,[v1,#&100] TST a1,#1 BEQ |L0027d8.J66.jpeg_find_line| MOV a1,v1 LDR a2,[sp,#&58] LDR a3,[sp,#&38] BL asm_j_rev_dct MOV a1,v6 MOV a3,v4 MOV a2,v2 BL asm_mono_convert_block TEQ v3,#2 BNE |L002788.J68.jpeg_find_line| ADD a2,v2,#&20 MOV a3,v4 LDR a1,[sp,#&58] BL asm_mono_convert_block |L002788.J68.jpeg_find_line| LDR a1,[sp,#0] TEQ a1,#2 BNE |L002870.J77.jpeg_find_line| ADD a2,v2,v4,LSL #5 TEQ v3,#1 STR a2,[sp,#&34] MOVNE a1,#2 MOVEQ a1,#1 ADD a1,v1,a1,LSL #8 ADD a1,a1,#&118 MOV a3,v4 BL asm_mono_convert_block TEQ v3,#2 BNE |L002870.J77.jpeg_find_line| LDR a1,[sp,#&34] ADD a2,a1,#&20 MOV a3,v4 LDR a1,[sp,#&3c] BL asm_mono_convert_block B |L002870.J77.jpeg_find_line| |L0027d8.J66.jpeg_find_line| LDR a1,[sp,#&38] TEQ a1,#4 BNE |L002830.J78.jpeg_find_line| MOV a1,v1 MOV a3,#6 LDR a2,[sp,#&58] BL asm_j_rev_dct LDR a1,[v1,#&100] TST a1,#&10 BEQ |L002814.J80.jpeg_find_line| MOV a1,v6 MOV a3,v4 MOV a2,v2 BL asm_colour_convert_block_16 B |L002870.J77.jpeg_find_line| |L002814.J80.jpeg_find_line| TST a1,#&20 MOV a1,v6 MOV a3,v4 MOV a2,v2 BLEQ asm_colour_convert_block BLNE asm_colour_convert_block_8 B |L002870.J77.jpeg_find_line| |L002830.J78.jpeg_find_line| MOV a1,v1 LDR a2,[sp,#&58] LDR a3,[sp,#&38] BL asm_j_rev_dct MOV a1,v1 MOV a3,#2 LDR a2,[sp,#&44] BL asm_j_rev_dct LDR a4,[sp,#0] STMDB sp!,{a4} MOV a1,v6 MOV a4,v3 MOV a3,v4 MOV a2,v2 BL colour_convert_unusual_block ADD sp,sp,#4 |L002870.J77.jpeg_find_line| ADD v5,v5,v3,LSL #3 LDR a1,[v1,#&100] TST a1,#&10 ADDNE v2,v2,v3,LSL #4 BNE |L002890.J89.jpeg_find_line| TST a1,#&20 ADDEQ v2,v2,v3,LSL #5 ADDNE v2,v2,v3,LSL #3 |L002890.J89.jpeg_find_line| LDR a1,[v1,#&fc] CMP v5,a1 BLT |L0026c8.J63.jpeg_find_line| |L00289c.J64.jpeg_find_line| LDR a1,[sp,#0] MOV a1,a1,LSL #3 |L0028a4.J131.jpeg_find_line| STR a1,[sp,#&28]! |L0028a8.J30.jpeg_find_line| LDR a1,[v1,#&100] TST a1,#8 BEQ |L002970.J94.jpeg_find_line| LDR a1,[v1,#&20] TEQ a1,#0 BNE |L0028e0.J96.jpeg_find_line| LDR a1,[v1,#&24] TEQ a1,#0 BNE |L0028e0.J96.jpeg_find_line| BL asm_get_table32k STR a1,[v1,#&20] TEQ a1,#0 MOVEQ a1,#1 STREQ a1,[v1,#&24] |L0028e0.J96.jpeg_find_line| LDR a1,[v1,#&f8] LDR a4,[v1,#&28] ADD v3,a4,a1,LSL #2 LDR a3,[v1,#&fc] SUB a3,a3,a1 ADD v6,a4,a1 ADD a3,a3,#&f BIC v2,a3,#&f LDR a3,[v1,#&14] SUB a2,a3,a1 CMP a2,v2 MOVLT v2,a2 LDR a2,[v1,#&100] TST a2,#4 ADDNE v3,v3,a1,LSL #2 MOVNE v2,v2,LSL #1 CMP v2,#0 BLE |L002970.J94.jpeg_find_line| |L002928.J105.jpeg_find_line| CMP v2,#&20 MOVLT v5,v2 MOVGE v5,#&10 MOV a3,v4 LDR a4,[fp,#-&28] LDR a2,[sp,#0] STMDB sp!,{a2-a4} MOV a3,v6 MOV a2,v5 MOV a1,v3 LDR a4,[v1,#&20] BL asm_diffuse_to_8bpp ADD sp,sp,#&c ADD v3,v3,v5,LSL #2 ADD v6,v6,v5 SUB v2,v2,v5 CMP v2,#0 BGT |L002928.J105.jpeg_find_line| |L002970.J94.jpeg_find_line| LDR a1,[sp,#8] ADD sp,sp,#4 STR a1,[v1,#&f4] |L00297c.J10.jpeg_find_line| LDR a1,[v1,#&28]! LDR a2,[v1,#&d8]! TST a2,#2 LDR a2,[sp,#0] BEQ |L0029ac.J112.jpeg_find_line| TEQ a2,#4 BNE |L0029c8.J132.jpeg_find_line| LDR a2,[fp,#-&2c] AND a2,a2,#&f CMP a2,#8 ADDGE a1,a1,v4,LSL #2 B |L0029c8.J132.jpeg_find_line| |L0029ac.J112.jpeg_find_line| MOV a3,#1 MOV a2,a3,LSL a2 SUB a2,a2,#1 LDR a3,[fp,#-&2c] AND a2,a2,a3 MUL a2,v4,a2 ADD a1,a1,a2,LSL #2 |L0029c8.J132.jpeg_find_line| LDMDB fp,{v1-v6,fp,sp,pc}^ looks_like_jpeg LDR a2,[a1,#0] ADD ip,a2,#&1f000000 ADD ip,ip,#&2700 CMN ip,#1 BNE |L002a10.J5.looks_like_jpeg| LDRB a2,[a1,#6] TEQ a2,#&4a LDREQB a2,[a1,#7] TEQEQ a2,#&46 LDREQB a2,[a1,#8] TEQEQ a2,#&49 LDREQB a2,[a1,#9] TEQEQ a2,#&46 LDREQB a1,[a1,#&a] TEQEQ a1,#0 MOVEQ a1,#1 MOVEQS pc,lr |L002a10.J5.looks_like_jpeg| MOV a1,#0 MOVS pc,lr find_image_dims MOV ip,sp STMDB sp!,{v1-v4,fp,ip,lr,pc} SUB fp,ip,#4 MOV v1,a1 MOV v2,a2 MOV v4,#0 LDR v3,[fp,#4] AND a2,v3,#3 BL looks_like_jpeg TEQ a1,#0 ADDNE v1,v1,#2 BNE |L002a60.J9.find_image_dims| B |L002ae8.J15.find_image_dims| |L002a4c.J8.find_image_dims| LDRB a2,[v1,#3] LDRB a1,[v1,#2] ADD a1,a2,a1,LSL #8 ADD a1,a1,v1 ADD v1,a1,#2 |L002a60.J9.find_image_dims| LDRB a1,[v1,#0] TEQ a1,#&ff LDRB a1,[v1,#1] BNE |L002a84.J10.find_image_dims| TEQ a1,#&c0 TEQNE a1,#&c1 TEQNE a1,#&c9 BNE |L002a4c.J8.find_image_dims| B |L002a94.J16.find_image_dims| |L002a84.J10.find_image_dims| TEQ a1,#&c0 TEQNE a1,#&c1 TEQNE a1,#&c9 BNE |L002ae8.J15.find_image_dims| |L002a94.J16.find_image_dims| LDRB a1,[v1,#6] LDRB a2,[v1,#5] ADD a1,a1,a2,LSL #8 LDRB a2,[v1,#8] LDRB ip,[v1,#7] ADD a2,a2,ip,LSL #8 LDRB ip,[v1,#9] ORR lr,ip,v4 CMP v3,#1 BLE |L002b0c.J21.find_image_dims| CMP lr,#1 MOVNE ip,#&10 MOVEQ ip,#8 ADD v1,a2,#&f MUL ip,v1,ip MOV v4,ip,LSL #2 BNE |L002af0.J27.find_image_dims| ADDS v1,a1,#7 ADDMI v1,v1,#7 MOV v1,v1,ASR #3 B |L002af4.J26.find_image_dims| |L002ae8.J15.find_image_dims| MOV a1,#1 LDMDB fp,{v1-v4,fp,sp,pc}^ |L002af0.J27.find_image_dims| MOV v1,a1 |L002af4.J26.find_image_dims| ADD ip,v1,v1,LSL #2 ADD ip,v4,ip,LSL #2 ADD ip,ip,#&ff ADD ip,ip,#&3d00 BIC ip,ip,#3 STR ip,[v3,#0] |L002b0c.J21.find_image_dims| TEQ a3,#0 STRNE a1,[a3,#0] TEQ v2,#0 STRNE a2,[v2,#0] TEQ a4,#0 STRNE lr,[a4,#0] MOV a1,#0 LDMDB fp,{v1-v4,fp,sp,pc}^ AREA |C$$data|,DATA |x$dataseg| END