dpen.s 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  1. @ Tremolo library
  2. @-----------------------------------------------------------------------
  3. @ Copyright (C) 2002-2009, Xiph.org Foundation
  4. @ Copyright (C) 2010, Robin Watts for Pinknoise Productions Ltd
  5. @ All rights reserved.
  6. @ Redistribution and use in source and binary forms, with or without
  7. @ modification, are permitted provided that the following conditions
  8. @ are met:
  9. @ * Redistributions of source code must retain the above copyright
  10. @ notice, this list of conditions and the following disclaimer.
  11. @ * Redistributions in binary form must reproduce the above
  12. @ copyright notice, this list of conditions and the following disclaimer
  13. @ in the documentation and/or other materials provided with the
  14. @ distribution.
  15. @ * Neither the names of the Xiph.org Foundation nor Pinknoise
  16. @ Productions Ltd nor the names of its contributors may be used to
  17. @ endorse or promote products derived from this software without
  18. @ specific prior written permission.
  19. @
  20. @ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21. @ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22. @ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23. @ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  24. @ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  25. @ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  26. @ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27. @ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28. @ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29. @ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30. @ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31. @ ----------------------------------------------------------------------
  32. .text
  33. .global decode_packed_entry_number
  34. .global decode_packed_entry_number_REALSTART
  35. .global decode_map
  36. .global vorbis_book_decodevv_add
  37. .global _checksum
  38. .extern oggpack_adv
  39. .extern oggpack_look
  40. .extern oggpack_eop
  41. .extern crc_lookup
  42. .hidden crc_lookup
  43. decode_packed_entry_number_REALSTART:
  44. dpen_nobits:
  45. MOV r0,r5 @ r0 = b
  46. MOV r1,#1 @ r1 = 1
  47. BL oggpack_adv @ oggpack_adv(b,1) /* Force eop */
  48. duff:
  49. MVN r0,#0 @ return -1
  50. LDMFD r13!,{r4-r8,r10,PC}
  51. dpen_readfailed:
  52. SUBS r4,r4,#1 @ r4 = --read
  53. BEQ dpen_nobits
  54. MOV r0,r5 @ r0 = b
  55. MOV r1,r4 @ r1 = read
  56. ADR r14,dpen_read_return
  57. B oggpack_look
  58. decode_packed_entry_number:
  59. @ r0 = codebook *book
  60. @ r1 = oggpack_buffer *b
  61. STMFD r13!,{r4-r8,r10,r14}
  62. LDMIA r0,{r4,r6,r7} @ r4 = read = book->max_length
  63. @ r6 = book->dec_table
  64. @ r7 = book->dec_method
  65. MOV r5,r1 @ r5 = b
  66. MOV r0,r5 @ r0 = b
  67. MOV r1,r4 @ r1 = read
  68. BL oggpack_look
  69. dpen_read_return:
  70. CMP r0,#0
  71. BLT dpen_readfailed
  72. @ r0 = lok
  73. @ r4 = read
  74. @ r5 = b
  75. @ r6 = dec_table
  76. @ r7 = dec_method
  77. CMP r7, #3
  78. BGT meth4
  79. BEQ meth3
  80. CMP r7, #1
  81. BGT meth2
  82. BEQ meth1
  83. meth0:
  84. RSB r1, r4, #0 @ r1 = i-read = 0-read
  85. MOV r7, #0 @ r7 = chase
  86. m0_loop:
  87. MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit
  88. ADC r2, r6, r7, LSL #1 @ r8 = &t[chase*2+C]
  89. LDRB r7, [r2]
  90. ADDS r1, r1, #1 @ r1 = i-read++ (i-read<0 => i<read)
  91. @ stall Xscale
  92. CMPLT r7, #0x80
  93. BLT m0_loop
  94. AND r7, r7, #0x7F @ r7 = chase
  95. CMP r1, #0 @ if (i-read >= 0) === (i >= read)
  96. MVNGT r7, #0 @ if (i >= read) value to return = -1
  97. ADD r1, r1, r4 @ r1 = i-read+read+1 = i +1
  98. MOV r0, r5 @ r0 = b
  99. BL oggpack_adv @ oggpack_adv(b, i+1);
  100. MOV r0, r7 @ return chase
  101. LDMFD r13!,{r4-r8,r10,PC}
  102. meth1:
  103. @ r0 = lok
  104. @ r4 = read
  105. @ r5 = b
  106. @ r6 = dec_table
  107. RSB r1, r4, #0 @ r1 = i = -read
  108. MOV r10,#0 @ r10= next = 0
  109. m1_loop:
  110. MOV r7, r10 @ r7 = chase=next
  111. MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit
  112. ADC r8, r6, r7 @ r8 = t+chase+bit
  113. LDRB r10,[r8], -r6 @ r10= next=t[chase+bit] r8=chase+bit
  114. ADDS r1, r1, #1 @ r1 = i++
  115. @ stall Xscale
  116. CMPLT r10,#0x80 @ if (next & 0x80) == 0
  117. BLT m1_loop
  118. ADD r1, r1, r4 @ r1 = i+read
  119. MOV r0, r5 @ r0 = b
  120. BL oggpack_adv @ oggpack_adv(b, i)
  121. CMP r10,#0x80
  122. BLT duff
  123. CMP r8, r7 @ if bit==0 (chase+bit==chase) (sets C)
  124. LDRNEB r14,[r6, r7] @ r14= t[chase]
  125. MOVEQ r14,#128
  126. ADC r12,r8, r6 @ r12= chase+bit+1+t
  127. LDRB r14,[r12,r14,LSR #7] @ r14= t[chase+bit+1+(!bit || t[chase]0x0x80)]
  128. BIC r10,r10,#0x80 @ r3 = next &= ~0x80
  129. @ stall Xscale
  130. ORR r0, r14,r10,LSL #8 @ r7 = chase = (next<<8) | r14
  131. LDMFD r13!,{r4-r8,r10,PC}
  132. meth2:
  133. RSB r1, r4, #0 @ r1 = i-read = 0-read
  134. MOV r7, #0 @ r7 = chase
  135. MOV r6, r6, LSR #1
  136. m2_loop:
  137. MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit
  138. ADC r2, r6, r7, LSL #1 @ r8 = &t[chase*2+C]
  139. LDRH r7, [r2, r2]
  140. ADDS r1, r1, #1 @ r1 = i-read++ (i-read<0 => i<read)
  141. @ stall Xscale
  142. CMPLT r7, #0x8000
  143. BLT m2_loop
  144. BIC r7, r7, #0x8000 @ r7 = chase
  145. CMP r1, #0 @ if (i-read >= 0) === (i >= read)
  146. MVNGT r7, #0 @ if (i >= read) value to return = -1
  147. ADD r1, r1, r4 @ r1 = i-read+read+1 = i +1
  148. MOV r0, r5 @ r0 = b
  149. BL oggpack_adv @ oggpack_adv(b, i+1);
  150. MOV r0, r7 @ return chase
  151. LDMFD r13!,{r4-r8,r10,PC}
  152. meth3:
  153. @ r0 = lok
  154. @ r4 = read
  155. @ r5 = b
  156. @ r6 = dec_table
  157. RSB r1, r4, #0 @ r1 = i = -read
  158. MOV r10,#0 @ r10= next = 0
  159. m3_loop:
  160. MOV r7, r10 @ r7 = chase=next
  161. MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit
  162. ADC r8, r7, #0 @ r8 = chase+bit
  163. MOV r8, r8, LSL #1 @ r8 = (chase+bit)<<1
  164. LDRH r10,[r6, r8] @ r10= next=t[chase+bit]
  165. ADDS r1, r1, #1 @ r1 = i++
  166. @ stall Xscale
  167. CMPLT r10,#0x8000 @ if (next & 0x8000) == 0
  168. BLT m3_loop
  169. ADD r1, r1, r4 @ r1 = i+read
  170. MOV r0, r5 @ r0 = b
  171. BL oggpack_adv @ oggpack_adv(b, i)
  172. CMP r10,#0x8000
  173. BLT duff
  174. MOV r7, r7, LSL #1
  175. CMP r8, r7 @ if bit==0 (chase+bit==chase) sets C
  176. LDRNEH r14,[r6, r7] @ r14= t[chase]
  177. MOVEQ r14,#0x8000
  178. ADC r12,r8, r14,LSR #15 @ r12= 1+((chase+bit)<<1)+(!bit || t[chase]0x0x8000)
  179. ADC r12,r12,r14,LSR #15 @ r12= t + (1+chase+bit+(!bit || t[chase]0x0x8000))<<1
  180. LDRH r14,[r6, r12] @ r14= t[chase+bit+1
  181. BIC r10,r10,#0x8000 @ r3 = next &= ~0x8000
  182. @ stall Xscale
  183. ORR r0, r14,r10,LSL #16 @ r7 = chase = (next<<16) | r14
  184. LDMFD r13!,{r4-r8,r10,PC}
  185. meth4:
  186. RSB r1, r4, #0 @ r1 = i-read = 0-read
  187. MOV r7, #0 @ r7 = chase
  188. m4_loop:
  189. MOVS r0, r0, LSR #1 @ r0 = lok>>1 C = bottom bit
  190. ADC r2, r7, r7 @ r8 = chase*2+C
  191. LDR r7, [r6, r2, LSL #2]
  192. ADDS r1, r1, #1 @ r1 = i-read++ (i-read<0 => i<read)
  193. @ stall Xscale
  194. CMPLT r7, #0x80000000
  195. BLT m4_loop
  196. BIC r7, r7, #0x80000000 @ r7 = chase
  197. CMP r1, #0 @ if (i-read >= 0) === (i >= read)
  198. MVNGT r7, #0 @ if (i >= read) value to return = -1
  199. ADD r1, r1, r4 @ r1 = i-read+read+1 = i +1
  200. MOV r0, r5 @ r0 = b
  201. BL oggpack_adv @ oggpack_adv(b, i+1);
  202. MOV r0, r7 @ return chase
  203. LDMFD r13!,{r4-r8,r10,PC}
  204. decode_map:
  205. @ r0 = codebook *s
  206. @ r1 = oggpack_buffer *b
  207. @ r2 = int v
  208. @ r3 = int point
  209. STMFD r13!,{r4-r11,r14}
  210. MOV r4, r0 @ r4 = s
  211. MOV r5, r1 @ r5 = b
  212. MOV r6, r2 @ r6 = v
  213. MOV r7, r3 @ r7 = point
  214. BL decode_packed_entry_number
  215. MOV r8, r0
  216. MOV r0, r5
  217. BL oggpack_eop
  218. CMP r0, #0
  219. BNE dm_duff
  220. @ r4 = s
  221. @ r5 = b
  222. @ r6 = v
  223. @ r7 = point
  224. @ r8 = entry
  225. LDR r1, [r4,#12] @ r1 = s->dec_type
  226. LDR r2, [r4,#16] @ r2 = s->q_bits
  227. LDR r3, [r4,#20] @ r3 = s->dim
  228. LDR r5, [r4,#24] @ r5 = s->q_delp
  229. LDR r11,[r4,#28] @ r11= s->q_minp
  230. LDR r12,[r4,#32] @ r12= s->q_del = mul
  231. LDR r14,[r4,#36] @ r14= s->q_min
  232. SUBS r11,r7, r11 @ r11= add = point - s->q_minp
  233. MOVGT r14,r14,ASR r11 @ r14= add = s->q_min >> add (if add >0)
  234. RSBLT r11,r11,#0
  235. MOVLT r14,r14,LSL r11 @ r14= add = s->q_min << -add (if add < 0)
  236. SUBS r5, r7, r5 @ r5 = shiftM = point - s->q_delp
  237. LDR r7, [r4,#40] @ r7 = s->q_seq
  238. RSBLT r5, r5, #0 @ if (shiftM<0) r5 =-shiftM
  239. MOVLT r12,r12,LSL r5 @ r12=mul<<-shiftM
  240. MOVLT r5, #0 @ r5 =shiftM = 0
  241. MOVGT r14,r14,LSL r5 @ add <<= shiftM
  242. CMP r7,#0 @ seqMask = (s->q_seq?-1:0)
  243. MVNNE r7,#0
  244. CMP r1, #2
  245. BEQ dm2
  246. BGT dm3
  247. CMP r1,#0 @ probably never happens
  248. BLE dm_duff
  249. dm1:
  250. @ r1 = s->dec_type
  251. @ r2 = s->q_bits
  252. @ r3 = s->dim
  253. @ r5 = shiftM
  254. @ r6 = v
  255. @ r7 = seqMask
  256. @ r8 = entry
  257. @ r12= mul
  258. @ r14= add
  259. MOV r0, #1
  260. RSB r0, r0, r0, LSL r2 @ r0 = mask = (1<<s->q_bits)-1
  261. MOV r11,#0 @ r11= prev = 0
  262. dm1_loop:
  263. AND r1, r8, r0 @ r1 = v = entry & mask
  264. MLA r1, r12, r1, r14 @ r1 = (add + mul*v)
  265. MOV r8, r8, LSR r2 @ r8 = entry>>s->q_bits
  266. SUBS r3, r3, #1
  267. ADD r1, r11,r1, ASR r5 @ r1 = v = prev+((add+mul*v)>>shiftM)
  268. AND r11,r1, r7 @ r11= prev = seqMask & v
  269. STR r1, [r6], #4 @ *v++ = v
  270. BGT dm1_loop
  271. MOV r0, #0
  272. LDMFD r13!,{r4-r11,PC}
  273. dm2:
  274. @ r1 = s->dec_type
  275. @ r2 = s->q_bits
  276. @ r3 = s->dim
  277. @ r4 = s
  278. @ r5 = shiftM
  279. @ r6 = v
  280. @ r7 = seqMask
  281. @ r8 = entry
  282. @ r12= mul
  283. @ r14= add
  284. LDR r1, [r4,#44] @ r1 = s->q_pack
  285. LDR r4, [r4,#48] @ r4 = s->q_val
  286. MOV r11,#0 @ r11= prev
  287. MOV r0, #1
  288. RSB r0, r0, r0, LSL r1 @ r8 = mask = (1<<s->q_pack)-1
  289. CMP r2,#8
  290. BGT dm2_hword
  291. dm2_loop:
  292. AND r2, r8, r0 @ r2 = entry & mask
  293. LDRB r2, [r4, r2] @ r2 = v = q->val[entry & mask]
  294. MOV r8, r8, LSR r1 @ r8 = entry>>q_pack
  295. MLA r2, r12,r2, r14 @ r2 = (add+mul*v)
  296. SUBS r3, r3, #1
  297. ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM
  298. AND r11,r2, r7 @ r11= prev = seqMask & v
  299. STR r2, [r6], #4 @ *v++ = v
  300. BGT dm2_loop
  301. MOV r0, #0
  302. LDMFD r13!,{r4-r11,PC}
  303. dm2_hword:
  304. AND r2, r8, r0 @ r2 = entry & mask
  305. MOV r2, r2, LSL #1 @ r2 = 2*r2
  306. LDRH r2, [r4, r2] @ r2 = v = q->val[entry & mask]
  307. MOV r8, r8, LSR r1 @ r8 = entry>>q_pack
  308. MLA r2, r12,r2, r14 @ r2 = (add+mul*v)
  309. SUBS r3, r3, #1
  310. ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM
  311. AND r11,r2, r7 @ r11= prev = seqMask & v
  312. STR r2, [r6], #4 @ *v++ = v
  313. BGT dm2_hword
  314. MOV r0, #0
  315. LDMFD r13!,{r4-r11,PC}
  316. dm3:
  317. @ r1 = s->dec_type
  318. @ r2 = s->q_bits
  319. @ r3 = s->dim
  320. @ r4 = s
  321. @ r5 = shiftM
  322. @ r6 = v
  323. @ r7 = seqMask
  324. @ r8 = entry
  325. @ r12= mul
  326. @ r14= add
  327. LDR r1, [r4,#44] @ r1 = s->q_pack
  328. LDR r4, [r4,#52] @ r4 = s->q_val
  329. CMP r2,#8
  330. MOV r11,#0 @ r11= prev
  331. MLA r4,r1,r8,r4 @ r4 = ptr = s->q_val+entry*s->q_pack
  332. BGT dm3_hword
  333. dm3_loop:
  334. LDRB r2, [r4], #1 @ r2 = v = *ptr++
  335. SUBS r3, r3, #1
  336. MLA r2, r12,r2, r14 @ r2 = (add+mul*v)
  337. ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM
  338. AND r11,r2, r7 @ r11= prev = seqMask & v
  339. STR r2, [r6], #4 @ *v++ = v
  340. BGT dm3_loop
  341. MOV r0, #0
  342. LDMFD r13!,{r4-r11,PC}
  343. dm3_hword:
  344. LDRH r2, [r4], #2 @ r2 = *ptr++
  345. SUBS r3, r3, #1
  346. MLA r2, r12,r2, r14 @ r2 = (add+mul*v)
  347. ADD r2, r11,r2, ASR r5 @ r2 = v = prev+(add+mul*v)>>shiftM
  348. AND r11,r2, r7 @ r11= prev = seqMask & v
  349. STR r2, [r6], #4 @ *v++ = v
  350. BGT dm3_hword
  351. MOV r0, #0
  352. LDMFD r13!,{r4-r11,PC}
  353. dm_duff:
  354. MVN r0,#0
  355. LDMFD r13!,{r4-r11,PC}
  356. vorbis_book_decodevv_add:
  357. @ r0 = codebook *book
  358. @ r1 = ogg_int32_t **a
  359. @ r2 = long offset
  360. @ r3 = int ch
  361. @ <> = b
  362. @ <> = n
  363. @ <> = point
  364. STMFD r13!,{r4-r11,R14}
  365. LDR r7, [r0, #13*4] @ r7 = used_entries
  366. MOV r9, r0 @ r9 = book
  367. MOV r10,r1 @ r10= 0xa[chptr] chptr=0
  368. MOV r6, r3 @ r6 = ch
  369. ADD r8, r10,r3, LSL #2 @ r8 = 0xa[ch]
  370. MOV r11,r2 @ r11= offset
  371. CMP r7, #0 @ if (used_entries <= 0)
  372. BLE vbdvva_exit @ exit
  373. LDR r5, [r13,#10*4] @ r5 = n
  374. vbdvva_loop1:
  375. @ r5 = n
  376. @ r6 = ch
  377. @ r8 = 0xa[ch]
  378. @ r9 = book
  379. @ r10= 0xa[chptr]
  380. @ r11= offset
  381. MOV r0, r9 @ r0 = book
  382. LDR r1, [r13,# 9*4] @ r1 = b
  383. LDR r2, [r9, #14*4] @ r2 = v = dec_buf
  384. LDR r3, [r13,#11*4] @ r3 = point
  385. BL decode_map
  386. CMP r0, #0
  387. BNE vbdvva_fail
  388. LDR r0, [r9, # 5*4] @ r0 = book->dim
  389. LDR r1, [r9, #14*4] @ r1 = v = dec_buf
  390. vbdvva_loop2:
  391. LDR r2, [r10],#4 @ r2 = a[chptr++]
  392. LDR r12,[r1], #4 @ r1 = v[j++]
  393. CMP r10,r8 @ if (chptr == ch)
  394. SUBEQ r10,r10,r6, LSL #2 @ chptr = 0
  395. LDR r14,[r2, r11,LSL #2]! @ r2 = 0xa[chptr++][i] r14=[r12]
  396. ADDEQ r11,r11,#1 @ i++
  397. SUBEQ r5, r5, #1 @ n--
  398. SUBS r0, r0, #1 @ r0--
  399. ADD r12,r12,r14 @ r12= a[chptr++][i]+ v[j]
  400. STR r12,[r2] @ r12= a[chptr++][i]+=v[j]
  401. BGT vbdvva_loop2
  402. CMP r5,#0
  403. BGT vbdvva_loop1
  404. vbdvva_exit:
  405. MOV r0, #0 @ return 0
  406. LDMFD r13!,{r4-r11,PC}
  407. vbdvva_fail:
  408. MVN r0, #0 @ return -1
  409. LDMFD r13!,{r4-r11,PC}
  410. _checksum:
  411. @ r0 = ogg_reference *or
  412. @ r1 = bytes
  413. STMFD r13!,{r5-r6,r14}
  414. ADR r6,.Lcrc_lookup
  415. LDR r5,[r6]
  416. ADD r5,r6
  417. MOV r14,#0 @ r14= crc_reg = 0
  418. MOVS r12,r0
  419. BEQ _cs_end
  420. _cs_loop1:
  421. LDMIA r12,{r0,r2,r3,r12} @ r0 = or->buffer
  422. @ r2 = or->begin
  423. @ r3 = or->length
  424. @ r12= or->next
  425. LDR r0,[r0] @ r0 = or->buffer->data
  426. CMP r1,r3 @ r3 = post = (bytes < or->length ?
  427. MOVLT r3,r1 @ bytes : or->length)
  428. MOVS r6,r3 @ r6 = j = post
  429. BEQ _cs_no_bytes
  430. ADD r0,r0,r2 @ r0 = or->buffer->data + or->begin
  431. _cs_loop2:
  432. LDRB r2, [r0],#1 @ r2 = data[j]
  433. @ stall
  434. @ stall Xscale
  435. EOR r2, r2, r14,LSR #24 @ r2 = (crc_reg>>24)^data[j]
  436. LDR r2, [r5, r2, LSL #2] @ r2 = crc_lkp[(crc_reg>>24)^data[j]]
  437. SUBS r6, r6, #1 @ j--
  438. @ stall Xscale
  439. EOR r14,r2, r14,LSL #8 @ r14= crc_reg = (crc_reg<<8)^r2
  440. BGT _cs_loop2
  441. _cs_no_bytes:
  442. SUBS r1, r1, r3
  443. CMPNE r12,#0
  444. BNE _cs_loop1
  445. _cs_end:
  446. MOV r0,r14
  447. LDMFD r13!,{r5-r6,PC}
  448. .Lcrc_lookup:
  449. .WORD crc_lookup-.Lcrc_lookup
  450. @ END