<?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_porting/zh_cn&amp;feed=atom&amp;action=history</id>
		<title>Android porting/zh cn - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;feed=atom&amp;action=history"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;action=history"/>
		<updated>2013-06-20T03:41:46Z</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_porting/zh_cn&amp;diff=74758&amp;oldid=prev</id>
		<title>Hoo: /* Goals */</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=74758&amp;oldid=prev"/>
				<updated>2009-08-17T06:31:12Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Goals&lt;/span&gt;&lt;/span&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 06:31, 17 August 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 10:&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;Android OS 于2008年10月21日正式[http://source.android.com/posts/opensource&amp;#160; 发布] 后, [ 移植Android到[[Neo1973 Hardware|Neo 1973]]和[[Neo_FreeRunner_GTA02_Hardware|FreeRunner]]手机的[http://benno.id.au/blog/2007/11/21/android-neo1973 工作]就已经[http://groups.google.com/group/android-porting 展开]了.&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;Android OS 于2008年10月21日正式[http://source.android.com/posts/opensource&amp;#160; 发布] 后, [ 移植Android到[[Neo1973 Hardware|Neo 1973]]和[[Neo_FreeRunner_GTA02_Hardware|FreeRunner]]手机的[http://benno.id.au/blog/2007/11/21/android-neo1973 工作]就已经[http://groups.google.com/group/android-porting 展开]了.&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;== &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Goals &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;== &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;目标 &lt;/ins&gt;==&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;div&gt;# Systematically introduce patches for ARMv4T in the Android codebase&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;# Systematically introduce patches for ARMv4T in the Android codebase&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;div&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;/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;# 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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Hoo</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=71798&amp;oldid=prev</id>
		<title>Glenn: catchg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=71798&amp;oldid=prev"/>
				<updated>2009-07-10T15:45:30Z</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 717:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 717:&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;* [[Debug Board]]&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;* [[Debug Board]]&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_porting/zh_cn&amp;diff=65682&amp;oldid=prev</id>
		<title>Coolcat: /* See also */</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=65682&amp;oldid=prev"/>
				<updated>2009-02-13T04:02:06Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;See also&lt;/span&gt;&lt;/span&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 04:02, 13 February 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 716:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 716:&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;* [[Android|Main Android page on this wiki]]&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;* [[Android|Main Android page on this wiki]]&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;div&gt;* [[Debug Board]]&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;* [[Debug Board]]&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_porting/zh_cn&amp;diff=65585&amp;oldid=prev</id>
		<title>Slevin: /* 介绍 */</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=65585&amp;oldid=prev"/>
				<updated>2009-02-12T03:07:01Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;介绍&lt;/span&gt;&lt;/span&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:07, 12 February 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 8:&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;= 介绍 = &amp;#160;&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;= 介绍 = &amp;#160;&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;div&gt;本页介绍了如何移植[http://www.android.com Android OS]到Neo 1973与FreeRunner平台。&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;本页介绍了如何移植[http://www.android.com Android OS]到Neo 1973与FreeRunner平台。&lt;/div&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;Android OS 于2008年10月21日正式[http://source.android.com/posts/opensource&amp;#160; 发布] 后, [ 移植Android到[[Neo1973 Hardware|Neo 1973]]和[[Neo_FreeRunner_GTA02_Hardware|FreeRunner]]手机的[http://benno.id.au/blog/2007/11/21/android-neo1973 工作]&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;就已经http&lt;/del&gt;://groups.google.com/group/android-porting 展开]了.&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;Android OS 于2008年10月21日正式[http://source.android.com/posts/opensource&amp;#160; 发布] 后, [ 移植Android到[[Neo1973 Hardware|Neo 1973]]和[[Neo_FreeRunner_GTA02_Hardware|FreeRunner]]手机的[http://benno.id.au/blog/2007/11/21/android-neo1973 工作]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;就已经[http&lt;/ins&gt;://groups.google.com/group/android-porting 展开]了.&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;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Goals ==&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;== Goals ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Slevin</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=65584&amp;oldid=prev</id>
		<title>Slevin: /* Introduction */</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=65584&amp;oldid=prev"/>
				<updated>2009-02-12T03:06:15Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Introduction&lt;/span&gt;&lt;/span&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:06, 12 February 2009&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&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;[[Image:android.png]]&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;[[Image:android.png]]&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;= &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Introduction &lt;/del&gt;= &amp;#160;&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;= &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;介绍 &lt;/ins&gt;= &amp;#160;&lt;/div&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;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;This page is dedicated to porting the &lt;/del&gt;[http://www.android.com Android OS] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;to the [[Neo 1973]] and [[Neo FreeRunner]] handsets. Since the &lt;/del&gt;Android OS &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;was &lt;/del&gt;[http://source.android.com/posts/opensource&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;publically released&lt;/del&gt;] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;on 20081021&lt;/del&gt;, [http://benno.id.au/blog/2007/11/21/android-neo1973 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;work&lt;/del&gt;] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;[http://perpetual-notion.blogspot.com/search/label/android is] [http&lt;/del&gt;://groups.google.com/group/android-porting &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;currently underway] to port Android to the [[Neo1973 Hardware|Neo 1973]] and [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]&lt;/del&gt;] &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;handsets&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;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;本页介绍了如何移植&lt;/ins&gt;[http://www.android.com Android OS]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;到Neo 1973与FreeRunner平台。&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;Android OS &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;于2008年10月21日正式&lt;/ins&gt;[http://source.android.com/posts/opensource&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;发布&lt;/ins&gt;] &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;后&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[ 移植Android到[[Neo1973 Hardware|Neo 1973]]和[[Neo_FreeRunner_GTA02_Hardware|FreeRunner]]手机的&lt;/ins&gt;[http://benno.id.au/blog/2007/11/21/android-neo1973 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;工作&lt;/ins&gt;]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;就已经http&lt;/ins&gt;://groups.google.com/group/android-porting &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;展开&lt;/ins&gt;]&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;了&lt;/ins&gt;.&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;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;== Goals ==&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;== Goals ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Slevin</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=65582&amp;oldid=prev</id>
		<title>Slevin: New page: {{Languages|Android porting}}  {|align=right |__TOC__ |} Image:android.png  = Introduction =  This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 197...</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/index.php?title=Android_porting/zh_cn&amp;diff=65582&amp;oldid=prev"/>
				<updated>2009-02-12T02:59:22Z</updated>
		
		<summary type="html">&lt;p&gt;New page: {{Languages|Android porting}}  {|align=right |__TOC__ |} &lt;a href=&quot;/wiki/File:Android.png&quot; title=&quot;File:Android.png&quot;&gt;Image:android.png&lt;/a&gt;  = Introduction =  This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 197...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Languages|Android porting}}&lt;br /&gt;
&lt;br /&gt;
{|align=right&lt;br /&gt;
|__TOC__&lt;br /&gt;
|}&lt;br /&gt;
[[Image:android.png]]&lt;br /&gt;
&lt;br /&gt;
= Introduction = &lt;br /&gt;
This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 1973]] and [[Neo FreeRunner]] handsets. Since the Android OS was [http://source.android.com/posts/opensource  publically released] on 20081021, [http://benno.id.au/blog/2007/11/21/android-neo1973 work] [http://perpetual-notion.blogspot.com/search/label/android is] [http://groups.google.com/group/android-porting currently underway] to port Android to the [[Neo1973 Hardware|Neo 1973]] and [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]] handsets.&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;
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 non deterministic.&lt;br /&gt;
&lt;br /&gt;
== Current State ==&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. Currently, porting efforts are underway in many circles. &lt;br /&gt;
&lt;br /&gt;
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;
&lt;br /&gt;
Google has released their open source version of the Android phone software distribution. In order to use it on the Freerunner, a number of patches need to be applied and a compiler with armv4 java exception support needs to be used to compile the software.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
&lt;br /&gt;
Most of the hardware on Freerunner seems to work on latest Android images, but not always perfectly.&lt;br /&gt;
&lt;br /&gt;
If you want to see details of what is already usable, please have a look at: [[Android_usage]]&lt;br /&gt;
&lt;br /&gt;
== Compiler suite ==&lt;br /&gt;
&lt;br /&gt;
Android is a little picky about the version of gcc compiler. It also requires some java exception support that isn't available for armv4 without a minor modification. The following tools are what I use to build Android:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Binutils 2.18 ===&lt;br /&gt;
&lt;br /&gt;
At one time I had some armv5t code that was compiled into Android which would cause the linker to generate these blx instructions which fail on armv4. I'm not sure if this is still necessary, but I still have the following change applied to binutils:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff -urN binutils-2.18-orig/bfd/elf32-arm.c binutils-2.18/bfd/elf32-arm.c&lt;br /&gt;
--- binutils-2.18-orig/bfd/elf32-arm.c	2007-08-07 02:59:23.000000000 +0700&lt;br /&gt;
+++ binutils-2.18/bfd/elf32-arm.c	2008-03-15 11:30:17.000000000 +0700&lt;br /&gt;
@@ -3093,8 +3093,8 @@&lt;br /&gt;
 static void check_use_blx(struct elf32_arm_link_hash_table *globals)&lt;br /&gt;
 {&lt;br /&gt;
   if (bfd_elf_get_obj_attr_int (globals-&amp;gt;obfd, OBJ_ATTR_PROC,&lt;br /&gt;
-				Tag_CPU_arch) &amp;gt; 2)&lt;br /&gt;
-    globals-&amp;gt;use_blx = 1;&lt;br /&gt;
+				Tag_CPU_arch) &amp;gt;= TAG_CPU_ARCH_V5T)&lt;br /&gt;
+    globals-&amp;gt;use_blx = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 bfd_boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
configure --prefix={devel path}/android/cross --target=arm-eabi&lt;br /&gt;
&lt;br /&gt;
=== gcc 4.2.4 with gcc41-java-arm4.patch ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
configure   --prefix={devel path}/android/cross --target=arm-eabi --with-arch=armv4t --enable-shared --enable-threads --disable-nls --disable-libmudflap --enable-target-optspace --with-abi=aapcs --enable-multilib --disable-libssp --disable-libstdcxx --enable-languages=c,c++&lt;br /&gt;
&lt;br /&gt;
=== java-6-sun ===&lt;br /&gt;
&lt;br /&gt;
This is the standard Linux package available for most (all?) distributions.&lt;br /&gt;
&lt;br /&gt;
== Patches ==&lt;br /&gt;
&lt;br /&gt;
Coming soon. I've posted a number of them on the devel mailing list so far. Eventually, I expect to provide everything necessary for people to build Android for themselves.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building the Koolu Android Source ==&lt;br /&gt;
# Configure your machine with the prerequisites documented in the [http://source.android.com/download#TOC-Setting-up-your-machine Setting up your machine] section of Google's build instructions.&lt;br /&gt;
# Install &amp;lt;tt&amp;gt;repo&amp;lt;/tt&amp;gt; and download the source, as documented at http://trac.koolu.org/.&lt;br /&gt;
# After the build finishes you can put together a root file system by editing and running Sean McNeil's scripts, which are attached to [http://lists.openmoko.org/pipermail/community/2008-December/036982.html this message]. The first script (cp_android_OS) is used to copy the newly built files into a staging area. The second one (mkjffs2) makes a jffs2 image from the staging area. Be sure to edit the paths in the two files to match your environment. Alternatively, you can use the script [[#Building a jffs2 image|below]]&lt;br /&gt;
# The result of the previos step is a file, &amp;lt;tt&amp;gt;androidfs.jffs2&amp;lt;/tt&amp;gt;, which may be flashed to your Freerunner.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don't have mkfs.jffs2 you need mtd-tools, in debian based distros like Ubuntu just do: &amp;lt;pre&amp;gt;sudo apt-get install mtd-tools&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Building a jffs2 image ====&lt;br /&gt;
You can use this script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
currentdir=`pwd`&lt;br /&gt;
&lt;br /&gt;
ANDROID_OUT=out&lt;br /&gt;
ANDROID_DEVICE=freerunner&lt;br /&gt;
EXPORT_ROOT=$currentdir/build_jffs2_tmp&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Usage: $0 release|debug jffs2filename&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BuildImage()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	if [ -d $1 ]&lt;br /&gt;
	then&lt;br /&gt;
		echo &amp;quot;[INFO] Copying from... $1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT/root&lt;br /&gt;
&lt;br /&gt;
		# Copy the image...&lt;br /&gt;
		cd $1&lt;br /&gt;
		tar cf - root | (cd $EXPORT_ROOT; sudo tar xf -)&lt;br /&gt;
		tar cf - system | (cd $EXPORT_ROOT/root; sudo tar xf -)&lt;br /&gt;
&lt;br /&gt;
		# Change owner and permissions...&lt;br /&gt;
		cd $EXPORT_ROOT&lt;br /&gt;
		sudo chown -R root:root root&lt;br /&gt;
		sudo chmod -R 777 root&lt;br /&gt;
		&lt;br /&gt;
		cd $currentdir&lt;br /&gt;
&lt;br /&gt;
		# Make the JFFS2 file&lt;br /&gt;
		mkfs.jffs2 --pad=0x700000 -o $2 -e 0x20000 -n -d$EXPORT_ROOT/root/&lt;br /&gt;
		echo &amp;quot;[INFO] Image written to $2&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$1 does not exist!&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ $# != 2 ]&lt;br /&gt;
then&lt;br /&gt;
	Usage&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
	case $1 in&lt;br /&gt;
	    release)&lt;br /&gt;
		BuildImage $ANDROID_OUT/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    debug)&lt;br /&gt;
		BuildImage $ANDROID_OUT/debug/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	esac&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Android Debug Bridge ==&lt;br /&gt;
&lt;br /&gt;
To assist in debugging and to gain shell access to the phone with Android, you can use the instructions found here: [[Android_debug_bridge]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Windows Connectivity ===&lt;br /&gt;
It is possible to get Windows to at least recognize the Android &amp;quot;Ethernet Gadget&amp;quot; and charge the FreeRunner using the Android USB Windows driver (http://dl.google.com/android/android_usb_windows.zip) by modifying the android_usb.inf file in that package before attempting to install the driver.  The following modifications are required:&lt;br /&gt;
&lt;br /&gt;
Add the following to the [Google.NTx86] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Neo FreeRunner&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and add the following to the to the [Strings] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease=&amp;quot;Neo FreeRunner&amp;quot;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease=&amp;quot;Neo FreeRunner Composite ADB Interface&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Windows version of adb does not appear to recognize the connected device yet but at least the FreeRunner charges and the device driver indicates that &amp;quot;This device is working properly.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= How to Help =&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;
The file ''system/core/libpixelflinger/codeflinger/ARMAssembler.cpp'' will need special attention. It's responsible for dynamic generation of DSP code.&lt;br /&gt;
&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;
=== 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;
* [[Android|Main Android page on this wiki]]&lt;br /&gt;
* [[Debug Board]]&lt;/div&gt;</summary>
		<author><name>Slevin</name></author>	</entry>

	</feed>