<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.openmoko.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.openmoko.org/index.php?title=Android/ru&amp;feed=atom&amp;action=history</id>
		<title>Android/ru - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.openmoko.org/index.php?title=Android/ru&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android/ru&amp;action=history"/>
		<updated>2013-05-22T09:09:11Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.6</generator>

	<entry>
		<id>http://wiki.openmoko.org/index.php?title=Android/ru&amp;diff=71799&amp;oldid=prev</id>
		<title>Glenn: catchg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android/ru&amp;diff=71799&amp;oldid=prev"/>
				<updated>2009-07-10T15:45:48Z</updated>
		
		<summary type="html">&lt;p&gt;catchg&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 15:45, 10 July 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 588:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 588:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= External Links =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= External Links =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Distributions&lt;/del&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;[[Category:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Android&lt;/ins&gt;]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Glenn</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/index.php?title=Android/ru&amp;diff=59234&amp;oldid=prev</id>
		<title>Coolcat at 03:29, 7 November 2008</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android/ru&amp;diff=59234&amp;oldid=prev"/>
				<updated>2008-11-07T03:29:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 03:29, 7 November 2008&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 587:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 587:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= External Links =&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;= External Links =&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;[[Category:Distributions]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Coolcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/index.php?title=Android/ru&amp;diff=59215&amp;oldid=prev</id>
		<title>Narmo: New page: {{Languages|Android}} {{Distributions|Android}}  = Обновления =  * 20081104 Первый образ Android был создан Шоном МакНейлом! Вы можете ...</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android/ru&amp;diff=59215&amp;oldid=prev"/>
				<updated>2008-11-06T18:57:08Z</updated>
		
		<summary type="html">&lt;p&gt;New page: {{Languages|Android}} {{Distributions|Android}}  = Обновления =  * 20081104 Первый образ Android был создан Шоном МакНейлом! Вы можете ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Languages|Android}}&lt;br /&gt;
{{Distributions|Android}}&lt;br /&gt;
&lt;br /&gt;
= Обновления =&lt;br /&gt;
&lt;br /&gt;
* 20081104 Первый образ Android был создан Шоном МакНейлом! Вы можете его потестировать: [http://people.openmoko.org/sean_mcneil/ образ ядра и файловой системы Android] - SMS и звонки работают, WiFi и Bluetooth - пока нет. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''источник новости'']&lt;br /&gt;
* 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&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=1&amp;amp;gl=ca&amp;amp;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]])&lt;br /&gt;
* 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&lt;br /&gt;
* 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).&lt;br /&gt;
* 20081021 [[User:Cfriedt]] Android -&amp;gt; FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]&lt;br /&gt;
* 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.&lt;br /&gt;
* 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 &amp;quot;maddog&amp;quot; Hall] is CTO and Ambassador for Koolu.&lt;br /&gt;
&lt;br /&gt;
= Вступление =&lt;br /&gt;
Эта страница посвящена портированию [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 продолжается].&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
# Systematically introduce patches for ARMv4T in the Android codebase&lt;br /&gt;
# 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&lt;br /&gt;
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines&lt;br /&gt;
&lt;br /&gt;
== Early Attempts ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Current State ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].&lt;br /&gt;
&lt;br /&gt;
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]]&lt;br /&gt;
&lt;br /&gt;
[[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].&lt;br /&gt;
&lt;br /&gt;
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.&lt;br /&gt;
&lt;br /&gt;
= How to Help =&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Publicize Your Efforts ==&lt;br /&gt;
&lt;br /&gt;
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.&lt;br /&gt;
&lt;br /&gt;
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 (??).&lt;br /&gt;
&lt;br /&gt;
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.&lt;br /&gt;
&lt;br /&gt;
== Porting Strategy ==&lt;br /&gt;
&lt;br /&gt;
* Analysis and leverage of the existing build system&lt;br /&gt;
** buid/core/combo/arm-linux.mk&lt;br /&gt;
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__&lt;br /&gt;
*** -march=armv4t -mcpu=arm920t&lt;br /&gt;
** fix various static references to 'armv5'&lt;br /&gt;
* Isolating ARMv5TE ISA dependent code&lt;br /&gt;
** e.g. grep -n -R -i &amp;quot;${armv5te_isa_pattern}&amp;quot; ~/android&lt;br /&gt;
* Abstracting&lt;br /&gt;
** ( C/C++ )&lt;br /&gt;
*** Use inlined functions / #ifdef statments to implement functions in a portable manner&lt;br /&gt;
*** 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.&lt;br /&gt;
** ( ASM )&lt;br /&gt;
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif&lt;br /&gt;
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)&lt;br /&gt;
*** 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 .&lt;br /&gt;
&lt;br /&gt;
For each ARMv5TE instruction, one could potentially&lt;br /&gt;
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)&lt;br /&gt;
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa&lt;br /&gt;
&lt;br /&gt;
== List of Unsupported Instructions ==&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
* the requirement of additional context&lt;br /&gt;
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core&lt;br /&gt;
&lt;br /&gt;
=== Opcodes ===&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=480px|text=&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Opcode&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Desription&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;C&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;ASM&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(1)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;166&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(2)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;168&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent blx code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
blx a&lt;br /&gt;
#else&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
mov pc,lr \&lt;br /&gt;
bx a&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;CLZ&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Count Leading Zeros&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;175&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent clz code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081029&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
clz Rd,Rm&lt;br /&gt;
#else&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
CLZ(Rd,Rm)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;LDRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Load Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;200&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with ldrd substituted) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
ldrd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;PLD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Preload Data&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;240&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with pld removed) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove or substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
#define PLD(a,b) \&lt;br /&gt;
pld a,b&lt;br /&gt;
#else&lt;br /&gt;
#define PLD(a,b)&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
PLD(r0,#0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLA&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;291&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Accumulate Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;298&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;302&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMUL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;316&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMULW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;320&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;242&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;249&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;251&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;253&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;STRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Store Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;349&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm without strd) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
strd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Scanning for Files That Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.&lt;br /&gt;
&lt;br /&gt;
'''Code:'''&lt;br /&gt;
{{scroll box|height=240px|text=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# $1 is the android directory&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 1 ]; then&lt;br /&gt;
exit -1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd &amp;quot;${1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
opcodes=&amp;quot;blx clz ldrd pld smlabb smlabt smlatt&lt;br /&gt;
smlal smlawb smlawt smulbb smulbt smultt smulwb&lt;br /&gt;
smulwt qadd qdadd qdsub qsub strd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for op in ${opcodes}; do&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;* ${op} =====================================&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -e .files.${op} ]; then&lt;br /&gt;
&lt;br /&gt;
files=&amp;quot;$(grep -R -i &amp;quot;${op} &amp;quot; * 2&amp;gt;/dev/null)&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files | grep -v &amp;quot;^Binary file&amp;quot; | sed -e 's/:.*//')&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files| grep -v &amp;quot;CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$&amp;quot; | sort -u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;${files}&amp;quot; &amp;gt; .files.${op}&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
files=&amp;quot;$(cat .files.${op})&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
for fil in ${files}; do&lt;br /&gt;
lines=&amp;quot;$(grep -n -i &amp;quot;${op} &amp;quot; ${fil} | sed -e 's/:.*//g' )&amp;quot;&lt;br /&gt;
lines=&amp;quot;$(echo $lines | sed -e 's/ /,/g')&amp;quot;&lt;br /&gt;
echo &amp;quot;** ${fil}: lines {${lines}}&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Source Files in Android that Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
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?).&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=150px|text=&lt;br /&gt;
* blx =====================================&lt;br /&gt;
** bionic/libc/tools/gensyscalls.py: lines {168,186}&lt;br /&gt;
** bootloader/legacy/nandwrite/init.S: lines {77}&lt;br /&gt;
** bootloader/legacy/usbloader/init.S: lines {95}&lt;br /&gt;
** dalvik/vm/arch/arm/CallEABI.S: lines {239}&lt;br /&gt;
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}&lt;br /&gt;
** development/emulator/qtools/thumbdis.cpp: lines {187,265}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}&lt;br /&gt;
** external/qemu/trace.c: lines {774,1353,1358}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}&lt;br /&gt;
* clz =====================================&lt;br /&gt;
** development/emulator/qtools/armdis.cpp: lines {654}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1247}&lt;br /&gt;
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}&lt;br /&gt;
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}&lt;br /&gt;
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}&lt;br /&gt;
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}&lt;br /&gt;
* ldrd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}&lt;br /&gt;
* pld =====================================&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}&lt;br /&gt;
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}&lt;br /&gt;
** external/elfutils/src/Makefile: lines {243}&lt;br /&gt;
** external/elfutils/src/Makefile.am: lines {32}&lt;br /&gt;
** external/elfutils/src/Makefile.in: lines {243}&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {69,235,247}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1149}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}&lt;br /&gt;
* smlabb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {110,115,155,156}&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}&lt;br /&gt;
* smlabt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}&lt;br /&gt;
* smlatt =====================================&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}&lt;br /&gt;
* smlal =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}&lt;br /&gt;
** external/qemu/trace.c: lines {813}&lt;br /&gt;
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}&lt;br /&gt;
* smlawb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}&lt;br /&gt;
* smlawt =====================================&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}&lt;br /&gt;
* smulbb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {109,114,151,153}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}&lt;br /&gt;
** 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}&lt;br /&gt;
** 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}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}&lt;br /&gt;
** 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}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}&lt;br /&gt;
** external/skia/include/corecg/SkMath.h: lines {170}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}&lt;br /&gt;
* smulbt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}&lt;br /&gt;
* smultt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}&lt;br /&gt;
* smulwb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}&lt;br /&gt;
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}&lt;br /&gt;
* smulwt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}&lt;br /&gt;
* qadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}&lt;br /&gt;
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}&lt;br /&gt;
* qdadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}&lt;br /&gt;
* qdsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}&lt;br /&gt;
* qsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}&lt;br /&gt;
* strd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}&lt;br /&gt;
** dalvik/vm/oo/Object.h: lines {589}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
=== Notes ===&lt;br /&gt;
The file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will need special attention. It's responsible for dynamic generation of DSP code.&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
* [[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.&lt;br /&gt;
&lt;br /&gt;
= Important Links =&lt;br /&gt;
(Please Update Me)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [http://source.android.com/documentation Android Documentation]&lt;br /&gt;
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)&lt;br /&gt;
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]&lt;br /&gt;
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]&lt;br /&gt;
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]&lt;br /&gt;
&lt;br /&gt;
== Instruction Set References ==&lt;br /&gt;
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation&lt;br /&gt;
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)&lt;br /&gt;
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]&lt;br /&gt;
&lt;br /&gt;
== Hardware Reference ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 Hardware]]&lt;br /&gt;
* [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
== Communities ==&lt;br /&gt;
* [http://source.android.com/discuss Android Public Mailing Lists]&lt;br /&gt;
** Specifically, [http://groups.google.com/group/android-porting android-porting]&lt;br /&gt;
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]&lt;br /&gt;
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]&lt;br /&gt;
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com&lt;br /&gt;
* [[Openmoko Local Groups]]&lt;br /&gt;
* [[Openmoko:Community_Portal]]&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Debug_Board]]&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;/div&gt;</summary>
		<author><name>Narmo</name></author>	</entry>

	</feed>