<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.arm.com/utility/feedstylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ARM mode Thumb mode switching</title><link>https://community.arm.com/developer/tools-software/tools/f/armds-forum/809/arm-mode-thumb-mode-switching</link><description> Note: This was originally posted on 13th January 2011 at http://forums.arm.com Hi, Let me explain my problem, i come across one situation cmp r1,#0 beq labels_of1 i would like to merge both the instructions in to one. for that i would like to use cbz</description><dc:language>en-US</dc:language><generator>Telligent Community 10</generator><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2224?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:37 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:979fbe3c-88cb-42d7-857b-220fb7852cd0</guid><dc:creator>Simon Craske</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 19th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Assuming you&amp;#39;ve got sufficient scratch registers, or time to free them; you could try something like:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&amp;#160; ; r0 = a0&lt;br /&gt;&amp;#160; ; r1 = b0&lt;br /&gt;&amp;#160; ; r2 = c0&lt;br /&gt;&amp;#160; ; r3 = scratch&lt;br /&gt;&amp;#160; ; r4 = scratch&lt;br /&gt;&amp;#160; &lt;br /&gt;&amp;#160; SUB&amp;#160;&amp;#160;&amp;#160;&amp;#160; r3,r0,r1&lt;br /&gt;&amp;#160; SUB&amp;#160;&amp;#160;&amp;#160;&amp;#160; r4,r1,r2&lt;br /&gt;&amp;#160; ADDS&amp;#160;&amp;#160;&amp;#160; r3,r3,#(25-1)&lt;br /&gt;&amp;#160; ADDS&amp;#160;&amp;#160;&amp;#160; r4,r4,#(30-1)&amp;#160; &lt;br /&gt;&amp;#160; CMP&amp;#160;&amp;#160;&amp;#160;&amp;#160; r3,#(2*(25-1))&lt;br /&gt;&amp;#160; SUB&amp;#160;&amp;#160;&amp;#160;&amp;#160; r3,r2,r0&lt;br /&gt;&amp;#160; CMPLS&amp;#160;&amp;#160; r4,#(2*(30-1))&lt;br /&gt;&amp;#160; ADD&amp;#160;&amp;#160;&amp;#160;&amp;#160; r3,r3,#(45-1)&lt;br /&gt;&amp;#160; BHI&amp;#160;&amp;#160;&amp;#160;&amp;#160; Take_None&amp;#160;&amp;#160; // modify none&lt;br /&gt;&amp;#160; CMP&amp;#160;&amp;#160;&amp;#160;&amp;#160; r3,#(2*(45-1))&lt;br /&gt;&amp;#160; BHI&amp;#160;&amp;#160;&amp;#160;&amp;#160; Take_Second // modify a0,b0&lt;br /&gt;&amp;#160; B&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Take_First&amp;#160; // modify a0,b0,c0&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;(Obviously the final branch could be omitted).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;hth&lt;/span&gt;&lt;br /&gt;&lt;span&gt;s.&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2223?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:37 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:57f03251-4ab2-410f-b0d4-4bae18fbecf2</guid><dc:creator>Simon Craske</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 19th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Without knowing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What what the likelyhood of each branch being taken is&lt;/li&gt;&lt;li&gt;What values &amp;quot;// modify the val[u]es of a0,b0,c0[color=&amp;quot;#000000&amp;quot;]&amp;quot; actually uses are, and[/color]&lt;/li&gt;&lt;li&gt;[color=&amp;quot;#000000&amp;quot;]What the target CPU is[/color]&lt;/li&gt;&lt;/ul&gt;&lt;span&gt;it&amp;#39;s hard to say.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;s.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2222?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:36 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:698afc90-d65b-4ff2-b537-5e291b95b5ba</guid><dc:creator>Simon Craske</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 19th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;The &amp;quot;ADDS&amp;quot; results in smaller code in Thumb, but offers no functionality above using just &amp;quot;ADD&amp;quot;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;s.&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2221?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:36 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:efb09cc3-d4d4-49d3-9364-6f6f6fc0986e</guid><dc:creator>Simon Craske</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 17th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;How can optimize the above condition ladder using thumb instructions. &lt;br /&gt;i replace the abs() library function by substraction.&lt;/blockquote&gt;&lt;br /&gt;&lt;span&gt;Have you actually looked at what the C-compiler actually generated? Did it really make a call to a library function, or was it already inlined.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;s.&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2220?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:36 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:5a2dbe8f-6f4a-4fb6-a75b-f630c3937015</guid><dc:creator>Martin Weidmann</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 14th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;In assembler?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;You&amp;#39;ve got a couple of options.&amp;#160; On the command line you can specify Thumb generator (e.g. armasm --thumb .....).&amp;#160; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;#160; &lt;/span&gt;&lt;a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0489b/BGBIGJBJ.html" target="_blank"&gt;http://infocenter.arm.com/help/topic/com.arm.doc.dui0489b/BGBIGJBJ.html&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Or in the file you can specify that a given area is Thumb:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span&gt;&amp;#160; &lt;/span&gt;&lt;a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0489b/Ciaeahej.html" target="_blank"&gt;http://infocenter.arm.com/help/topic/com.arm.doc.dui0489b/Ciaeahej.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2219?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:36 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:10713fae-a3f8-4aac-b5e5-0b67d678ff92</guid><dc:creator>Etienne SOBOLE</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 19th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&amp;#160; SUB&amp;#160; r3,r0,r1&lt;br /&gt;&amp;#160; SUB&amp;#160; r4,r1,r2&lt;br /&gt;&amp;#160; ADDS&amp;#160;&amp;#160;&amp;#160; r3,r3,#(25-1)&lt;br /&gt;&amp;#160; ADDS&amp;#160;&amp;#160;&amp;#160; r4,r4,#(30-1)&amp;#160; &lt;br /&gt;&amp;#160; CMP&amp;#160; r3,#(2*(25-1))&lt;br /&gt;&amp;#160; SUB&amp;#160; r3,r2,r0&lt;br /&gt;&amp;#160; CMPLS&amp;#160;&amp;#160; r4,#(2*(30-1))&lt;br /&gt;&amp;#160; ADD&amp;#160; r3,r3,#(45-1)&lt;br /&gt;&amp;#160; BHI&amp;#160; Take_None&amp;#160;&amp;#160; // modify none&lt;br /&gt;&amp;#160; CMP&amp;#160; r3,#(2*(45-1))&lt;br /&gt;&amp;#160; BHI&amp;#160; Take_Second // modify a0,b0&lt;br /&gt;&amp;#160; B&amp;#160;&amp;#160;&amp;#160; Take_First&amp;#160; // modify a0,b0,c0&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Hum. Yes that&amp;#39;s nice !&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Great &lt;/span&gt;&lt;a href="http://forums.arm.com/public/style_emoticons/default/wink.gif"&gt;&lt;img alt=";)" src="http://forums.arm.com/public/style_emoticons/default/wink.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Why do you used ADDS ??? ADD is enough no?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Etienne&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2218?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:36 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:6b987281-cffd-450d-9e93-ac7f94bcf529</guid><dc:creator>Etienne SOBOLE</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 19th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Both should be quite fast, but personaly I prefer your solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;your code should be&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;subs t0, a0, b0&lt;br /&gt;nop&lt;br /&gt;&lt;br /&gt;rsblt t0, t0, #0&lt;br /&gt;subs t1, b0, c0&lt;br /&gt;&lt;br /&gt;rsblt t1, t1, #0&lt;br /&gt;cmp t0, #25&lt;br /&gt;&lt;br /&gt;bge .exit&lt;br /&gt;cmp t1, #30&lt;br /&gt;&lt;br /&gt;bge .exit&lt;br /&gt;subs t2, c0, a0&lt;br /&gt;&lt;br /&gt;rsblt t2, t2, #0&lt;br /&gt;nop&lt;br /&gt;&lt;br /&gt;cmp&amp;#160;&amp;#160;&amp;#160; t2, # 45&lt;br /&gt;bge .bloc2&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // modify the values of a0,b0,c0&lt;br /&gt;b .exit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;.bloc2&lt;br /&gt; //modify the values of a0 and b0&lt;br /&gt;&lt;br /&gt;.exit&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;I do not test this code, but it&amp;#39;s seem&amp;#39;s quite fast. no?&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2217?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:36 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:22145a9b-a111-4c7f-936c-f7ce9d24b109</guid><dc:creator>Dave Mathew</dc:creator><description>&lt;div&gt;&lt;i&gt;Note: This was originally posted on 18th January 2011 at &lt;a href="http://forums.arm.com"&gt;http://forums.arm.com&lt;/a&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;The compiler is inlined the library function. Then it is used usad8() and went for cmp.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;But my doubt the abs() may implement as follows&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;subs x,y,z&lt;/span&gt;&lt;br /&gt;&lt;span&gt;rsblt x,x,#0&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;which one is faster. and why?&lt;/span&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: ARM mode Thumb mode switching</title><link>https://community.arm.com/thread/2216?ContentTypeID=1</link><pubDate>Wed, 11 Sep 2013 11:02:36 GMT</pubDate><guid isPermaLink="false">dd9e70c8-6d3c-4c71-b136-2456382a7b5c:d378f7d6-897f-4178-bdb6-bf5fc06a6c26</guid><dc:creator>Dave Mathew</dc:creator><description>&lt;div&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>