-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAndroid%2Fru.mw
590 lines (532 loc) · 29.5 KB
/
Android%2Fru.mw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
{{Languages|Android}}
{{Distributions|Android}}
= Обновления =
* 20081104 Первый образ Android был создан Шоном МакНейлом! Вы можете его потестировать: [http://people.openmoko.org/sean_mcneil/ образ ядра и файловой системы Android] - SMS и звонки работают, WiFi и Bluetooth - пока нет. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''источник новости'']
* 20081029 [[User:Cfriedt]] [http://benno.id.au Benno] модифицировал систему сборки Android, так что теперь она создаёт образ JFFS2 вместо YAFFS. Unlike JFFS2, which [http://64.233.169.104/search?q=cache:e8czlAdKTn0J:gentoo-wiki.com/JFFS2/Mounting+gentoo+jffs2&hl=en&ct=clnk&cd=1&gl=ca&client=firefox-a can be mounted read-only from an image], mounting a YAFFS image is not possible unless it's already been written to flash (it complains about the block device being of type '1' and not 'NAND'). JFFS2 also has the benefit that it's a standard OpenMoko image format (See [[Flashing the Neo FreeRunner]] or [[Flashing the Neo 1973]])
* 20081023 [[User:Bricode]] To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw
* 20081022 [[User:Cfriedt]] I was able to 'trivially' compile all of the Android source code without error for the ARMv4T architecture by removing v5TE instructions. Although it will definitely not run anything predictably, at least now that I know the build system will work with a few simple substitutions in build/core/combo/arm-linux.mk. At this point I am able to go ahead and re-implement v5TE instructions as v4T instruction sequences instead (or re-implement entire sections of assembly with hand-optimized v4T instructions).
* 20081021 [[User:Cfriedt]] Android -> FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]
* 20081021 Google released the majority [http://source.android.com/download source code] for the phone under Apache free and open-source [http://source.android.com/license license], with portions covered by other existing licenses, such as the Linux kernel under GPLv2.
* 200810?? [http://www.koolu.com Koolu.com] has announced that they will be '''selling the OpenMoko Freerunner with Android pre-installed''' beginning in November 2008, as well as offering '''free downloads of the Freerunner port of Android''' to existing Freerunner owners. Well-known open-source advocate [http://koolu.com/The-Koolu-Team/maddog.html Jon "maddog" Hall] is CTO and Ambassador for Koolu.
= Вступление =
Эта страница посвящена портированию [http://www.android.com Android OS] на устройства [[Neo 1973]] и [[Neo FreeRunner]]. С момента, как Android OS была [http://source.android.com/posts/opensource выпущена] 2008-10-21, [http://benno.id.au/blog/2007/11/21/android-neo1973 работа] по портированию Android на [[Neo1973 Hardware|Neo 1973]] и [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]] [http://perpetual-notion.blogspot.com/search/label/android продолжается] и [http://groups.google.com/group/android-porting продолжается].
== Goals ==
# Systematically introduce patches for ARMv4T in the Android codebase
# Provide Neo1973 and Neo FreeRunner hardware-dependent patches in the Android codebase, leveraging the work already done by the Openmoko developers, without forcing Android-specific changes upstream
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines
== Early Attempts ==
As [http://benno.id.au Ben Leslie] had pointed out on his [http://benno.id.au/blog/2007/11/21/android-neo1973 blog] far before the source code was released, [http://www.android.com Android] was originally designed to work with the ARMv5TE [http://en.wikipedia.org/wiki/Instruction_set_architecture instruction set architecture] (ISA), which allows for [http://en.wikipedia.org/wiki/ARM_architecture#DSP_Enhancement_Instructions DSP enhanced instructions]. Contrary to the ARMv5TE ISA, the Neo1973 and FreeRunner handsets both feature an arm920t core, which comply to the ARMv4T ISA.
Before the source code was released, kernel trap handlers were implemented to 'emulate' the ARMv5TE ISA. Although the results worked in many cases, trapping is costly and performance suffered as a result. Moreover, without explicitly knowing which conditions were set by various instructions, such as Thumb Mode execution, the result became nondeterministic.
== Current State ==
With the release of the Android [http://source.android.com source code], the Open Source community is no longer limited to dealing with a binary-only product. The Open Handset Alliance (OHA) has let their source code become their product for everyone enrich and benefit from.
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].
To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw [[User:Bricode]]
[[User:Seanmcneil3|Sean McNeil]] said that he was able to get Androind running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.
= How to Help =
== Getting Started ==
You can start by following the instructions to download and build the Android source from scratch. Please see [http://source.android.com/download http://source.android.com/download] and follow the instructions for your architecture.
== Publicize Your Efforts ==
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.
Always take credit for your work but please don't do it in the form of comments. Some code is already hard enough to read without comments polluting the text. The best thing to do is to create a patch and put a header with your information at the top. Collaboration systems such as git might already do this for you (??).
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.
== Porting Strategy ==
* Analysis and leverage of the existing build system
** buid/core/combo/arm-linux.mk
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__
*** -march=armv4t -mcpu=arm920t
** fix various static references to 'armv5'
* Isolating ARMv5TE ISA dependent code
** e.g. grep -n -R -i "${armv5te_isa_pattern}" ~/android
* Abstracting
** ( C/C++ )
*** Use inlined functions / #ifdef statments to implement functions in a portable manner
*** For inlined assembler calls, it's acceptable for now to use generic C code instead, so long as later on we optimize it by hand.
** ( ASM )
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)
*** Some people have suggested that we should not do #ifdef's based on ARCH or ISA, but rather based on an AndroidConfig.h which would define macros like PLD(...) #ifdef HAVE_ARM_PLD pld #else ... #endif .
For each ARMv5TE instruction, one could potentially
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa
== List of Unsupported Instructions ==
This is a list of opcodes, extracted from the Android source, that are unsupported for ARMv4T compliant processors (specifically the arm920t). The opcodes represent instructions available for ARMv5, ARMv5T, and ARMv5TE architectures, which are not present in the ARMv4T ISA. The list was obtained by exhaustively editing the recompiling the Android source code until it compiled without error.
Please keep in mind, that in some cases, translating these instructions into a sequence of ARMv4T instructions will be impossible and / or result in nondeterministic execution because of
* the requirement of additional context
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core
=== Opcodes ===
{{scroll box|height=480px|text=
<TABLE BORDER="1">
<TR>
<TH>Opcode</TH>
<TH>Desription</TH>
<TH>[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number</TH>
<TH>C</TH>
<TH>ASM</TH>
</TR>
<TR>
<TH VALIGN="TOP">BLX(1)</TH>
<TD>Branch, Link, and Exchange</TD>
<TD>166</TD>
<TD>N/A (Unused in Android)</TD>
<TD>N/A (Unused in Android)</TD>
</TR>
<TR>
<TH VALIGN="TOP">BLX(2)</TH>
<TD>Branch, Link, and Exchange</TD>
<TD>168</TD>
<TD>
[[User:Cfriedt]] 20081028
Remove from inline assembly with something like
<pre>
#ifdef HAVE_BLX
... (inline asm) ...
#else
... (inline asm with equivalent blx code, as shown to the right) ...
#endif
</pre>
</TD>
<TD>
[[User:Cfriedt]] 20081028
Substitute with a macro reference such as
<pre>
#ifdef HAVE_BLX
#define BLX(a) \
blx a
#else
#define BLX(a) \
mov pc,lr \
bx a
#endif
</pre>
</TD>
</TR>
<TR>
<TH VALIGN="TOP">CLZ</TH>
<TD>Count Leading Zeros</TD>
<TD>175</TD>
<TD>
[[User:Cfriedt]] 20081028
Remove from inline assembly with something like
<pre>
#ifdef HAVE_CLZ
... (inline asm) ...
#else
... (inline asm with equivalent clz code, as shown to the right) ...
#endif
</pre>
</TD>
<TD>
[[User:Cfriedt]] 20081029
<pre>
#ifdef HAVE_CLZ
#define CLZ(Rd,Rm) \
clz Rd,Rm
#else
#define CLZ(Rd,Rm) \
...
#endif
...
CLZ(Rd,Rm)
</pre>
</TD>
</TR>
<TR>
<TH VALIGN="TOP">LDRD</TH>
<TD>Load Registers Doubleword</TD>
<TD>200</TD>
<TD>
[[User:Cfriedt]] 20081028
Substitute different inline assembly code with something like
<pre>
#ifdef HAVE_LDRD
... (inline asm) ...
#else
... (inline asm with ldrd substituted) ...
#endif
</pre>
</TD>
<TD>
[[User:Cfriedt]] 20081028
Substitute with a macro reference such as
<pre>
#ifdef HAVE_LDRD
#define LDRD(a,b) \
ldrd a,b
#else
#define LDRD(a,b) \
...
#endif
</pre>
</TD>
</TR>
<TR>
<TH VALIGN="TOP">PLD</TH>
<TD>Preload Data</TD>
<TD>240</TD>
<TD>
[[User:Cfriedt]] 20081028
Remove from inline assembly with something like
<pre>
#ifdef HAVE_PLD
... (inline asm) ...
#else
... (inline asm with pld removed) ...
#endif
</pre>
</TD>
<TD>
[[User:Cfriedt]] 20081028
Remove or substitute with a macro reference such as
<pre>
#ifdef HAVE_PLD
#define PLD(a,b) \
pld a,b
#else
#define PLD(a,b)
#endif
...
PLD(r0,#0)
</pre>
</TD>
</TR>
<TR>
<TH VALIGN="TOP">SMLA<x><y></TH>
<TD>Signed Multiply-Accumulate</TD>
<TD>291</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">SMLAL<x><y></TH>
<TD>Signed Multiply Accumulate Long</TD>
<TD>298</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">SMLAW<y></TH>
<TD>Signed Multiply-Accumulate Word</TD>
<TD>302</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">SMUL<x><y></TH>
<TD>Signed Multiply</TD>
<TD>316</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">SMULW<y></TH>
<TD>Signed Multiply Word</TD>
<TD>320</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">QADD</TH>
<TD>Saturating Add</TD>
<TD>242</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">QDADD</TH>
<TD>Saturating Double and Add</TD>
<TD>249</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">QDSUB</TH>
<TD>Saturating Double and Subtract</TD>
<TD>251</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">QSUB</TH>
<TD>Saturating Subtract</TD>
<TD>253</TD>
<TD></TD>
<TD></TD>
</TR>
<TR>
<TH VALIGN="TOP">STRD</TH>
<TD>Store Registers Doubleword</TD>
<TD>349</TD>
<TD>
[[User:Cfriedt]] 20081028
Substitute different inline assembly code with something like
<pre>
#ifdef HAVE_STRD
... (inline asm) ...
#else
... (inline asm without strd) ...
#endif
</pre>
</TD>
<TD>
[[User:Cfriedt]] 20081028
Substitute with a macro reference such as
<pre>
#ifdef HAVE_STRD
#define STRD(a,b) \
strd a,b
#else
#define STRD(a,b) \
...
#endif
</pre>
</TD>
</TR>
</TABLE>
}}
=== Scanning for Files That Use the ARMv5TE ISA ===
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.
'''Code:'''
{{scroll box|height=240px|text=
<pre>
#!/bin/sh
# $1 is the android directory
if [ $# -ne 1 ]; then
exit -1
fi
cd "${1}"
opcodes="blx clz ldrd pld smlabb smlabt smlatt
smlal smlawb smlawt smulbb smulbt smultt smulwb
smulwt qadd qdadd qdsub qsub strd"
for op in ${opcodes}; do
echo "* ${op} ====================================="
if [ ! -e .files.${op} ]; then
files="$(grep -R -i "${op} " * 2>/dev/null)"
files="$(echo $files | grep -v "^Binary file" | sed -e 's/:.*//')"
files="$(echo $files| grep -v "CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$" | sort -u)"
echo "${files}" > .files.${op}
else
files="$(cat .files.${op})"
fi
for fil in ${files}; do
lines="$(grep -n -i "${op} " ${fil} | sed -e 's/:.*//g' )"
lines="$(echo $lines | sed -e 's/ /,/g')"
echo "** ${fil}: lines {${lines}}"
done
done
</pre>
}}
=== Source Files in Android that Use the ARMv5TE ISA ===
The list of files below may or may not be complete. There might also be some assembly code that is generated with a python script (verification?).
{{scroll box|height=150px|text=
* blx =====================================
** bionic/libc/tools/gensyscalls.py: lines {168,186}
** bootloader/legacy/nandwrite/init.S: lines {77}
** bootloader/legacy/usbloader/init.S: lines {95}
** dalvik/vm/arch/arm/CallEABI.S: lines {239}
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}
** development/emulator/qtools/thumbdis.cpp: lines {187,265}
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}
** external/qemu/trace.c: lines {774,1353,1358}
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}
* clz =====================================
** development/emulator/qtools/armdis.cpp: lines {654}
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}
** external/qemu/target-arm/translate.c: lines {1247}
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}
* ldrd =====================================
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}
* pld =====================================
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}
** external/elfutils/src/Makefile: lines {243}
** external/elfutils/src/Makefile.am: lines {32}
** external/elfutils/src/Makefile.in: lines {243}
** external/jpeg/jidctfst.S: lines {69,235,247}
** external/qemu/target-arm/translate.c: lines {1149}
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}
* smlabb =====================================
** external/jpeg/jidctfst.S: lines {110,115,155,156}
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}
* smlabt =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}
* smlatt =====================================
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}
* smlal =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9.s: lines {84,90,96,101,109,114,116,118,121,132,138,150,163,165,167,174,176,178}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s: lines {73,79,86,90,98,103,105,107,110,121,127,139,152,154,156,163,165,167}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.asm: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s: lines {145,164,180,190,194,201,209,219,227,233,239,243,246}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18_gcc.s: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.asm: lines {62,63,66,72,76,77,81,82,85,90,94,97,99,100,103,108,113,114,118,119,122,129,136,137,176,179,183,187,190,193}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.s: lines {67,68,71,77,81,82,86,87,90,95,99,102,104,105,108,113,118,119,123,124,127,134,141,142,181,184,188,192,195,198}
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s: lines {65,66,69,75,79,80,84,85,88,93,97,100,102,103,106,111,116,117,121,122,125,132,139,140,179,182,186,190,193,196}
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}
** external/qemu/trace.c: lines {813}
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}
* smlawb =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}
* smlawt =====================================
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}
* smulbb =====================================
** external/jpeg/jidctfst.S: lines {109,114,151,153}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {207,251,297,348,361,375,427,440,487}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {199,234,274,314,316,326,367,369,404}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {112,113,164,183,201,218,265}
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}
** external/skia/include/corecg/SkMath.h: lines {170}
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}
* smulbt =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}
* smultt =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}
* smulwb =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}
* smulwt =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}
* qadd =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}
* qdadd =====================================
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}
* qdsub =====================================
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}
* qsub =====================================
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}
* strd =====================================
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}
** dalvik/vm/oo/Object.h: lines {589}
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}
}}
=== Discussion ===
=== Notes ===
The file
<pre>
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp
</pre>
will need special attention. It's responsible for dynamic generation of DSP code.
== Suggestions ==
* [[User:Cfriedt]] 20081024 I'm not sure how feasible this is, given that the [http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues#SMedia_3362_Documentation_.26_OpenGL_ES_Drivers SMedia 3362 is heavily NDA'd]. However, since the arm920t lacks a floating-point unit / DSP core, is it possible to use the SMedia chip for general-purpose math? This would help in the Android platform, at least, for things like audio and video codecs. Aside from an OpenGL ES driver, OpenMoko documentation for the SMedia would be highly appreciated.
= Important Links =
(Please Update Me)
== Documentation ==
* [http://source.android.com/documentation Android Documentation]
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]
== Instruction Set References ==
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]
== Hardware Reference ==
* [[Neo1973 Hardware]]
* [[Neo FreeRunner GTA02 Hardware]]
== Communities ==
* [http://source.android.com/discuss Android Public Mailing Lists]
** Specifically, [http://groups.google.com/group/android-porting android-porting]
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com
* [[Openmoko Local Groups]]
* [[Openmoko:Community_Portal]]
= See also =
* [[Debug_Board]]
= External Links =
[[Category:Android]]